yzc 1 жил өмнө
parent
commit
6799d3bbdd

+ 1 - 1
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmLineFreightRateService.java

@@ -263,7 +263,7 @@ public class KwmLineFreightRateService {
      * @date 2024/3/1 16:41
      */
     public void batchDelete(List<Long> ids) {
-        //todo 关联贸易订单不可删除
+        //todo 关联托运、承运订单不可删除
         LambdaQueryWrapper<KwmLineFreightRate> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(KwmLineFreightRate::getId, ids)
                 .eq(KwmLineFreightRate::getEntId, LoginUserHolder.getEntId())

+ 18 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderAmountMapper.java

@@ -0,0 +1,18 @@
+package com.sckw.order.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.order.model.KwoTradeOrderAmount;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @desc: 交易订单装卸货地址委派及交付量信息mapper
+ * @author: yzc
+ * @date: 2024-03-04 14:18
+ */
+@Mapper
+public interface KwoTradeOrderAmountMapper extends BaseMapper<KwoTradeOrderAmount> {
+
+
+
+}

+ 7 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderAddress.java

@@ -3,6 +3,7 @@ package com.sckw.order.model;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.sckw.core.model.base.BaseModel;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -20,6 +21,7 @@ import java.io.Serializable;
 @Setter
 @ToString
 @Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
 @TableName("kwo_trade_order_address")
 public class KwoTradeOrderAddress extends BaseModel implements Serializable {
 
@@ -93,4 +95,9 @@ public class KwoTradeOrderAddress extends BaseModel implements Serializable {
      */
     private String fence;
 
+    /**
+     * 排序(升序)
+     */
+    private Integer sort;
+
 }

+ 59 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderAmount.java

@@ -0,0 +1,59 @@
+package com.sckw.order.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.core.model.base.BaseModel;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc: 交易订单装卸货地址委派及交付量信息
+ * @author: yzc
+ * @date: 2024-03-04 9:31
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@TableName("kwo_trade_order_amount")
+public class KwoTradeOrderAmount extends BaseModel implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -8603636665614208263L;
+
+    /**
+     * 交易订单id
+     */
+    @JsonProperty("tOrderId")
+    private Long tOrderId;
+
+    /**
+     * 地址id
+     */
+    private Long addressId;
+
+    /**
+     * 货物数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 已委托量
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 实际交付量
+     */
+    private BigDecimal actualAmount;
+
+
+}

+ 16 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddressInfo.java

@@ -8,6 +8,8 @@ import lombok.Setter;
 import lombok.ToString;
 import org.hibernate.validator.constraints.Range;
 
+import java.math.BigDecimal;
+
 /**
  * @desc: 地址信息
  * @author: yzc
@@ -21,7 +23,7 @@ public class AddressInfo {
     /**
      * 地址类型(1装货地址、2卸货地址)
      */
-    @NotNull(message = "地址类型不能为空")
+    @NotBlank(message = "地址类型不能为空")
     @Range(min = 1, max = 2, message ="非法地址类型")
     private String addressType;
 
@@ -34,7 +36,7 @@ public class AddressInfo {
     /**
      * 地址类型
      */
-    @NotNull(message = "地址类型不能为空")
+    @NotBlank(message = "地址类型不能为空")
     private String type;
 
     /**
@@ -84,4 +86,16 @@ public class AddressInfo {
      * 电子围栏
      */
     private String fence;
+
+    /**
+     * 货物数量
+     */
+    @NotNull(message = "货物数量不能为空")
+    private BigDecimal amount;
+
+    /**
+     * 地址排序
+     */
+    @NotNull(message = "地址排序不能为空")
+    private Integer sort;
 }

+ 2 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderDraftParam.java

@@ -33,10 +33,12 @@ public class PurchaseOrderDraftParam {
     /**
      * 订单总量
      */
+    @DecimalMin(value = "0.01",message = "订单总量必须大于零")
     private BigDecimal amount;
     /**
      * 订单金额
      */
+    @DecimalMin(value = "0.01",message = "订单金额必须大于零")
     private BigDecimal price;
 
     /**
@@ -47,7 +49,6 @@ public class PurchaseOrderDraftParam {
     /**
      * 地址信息
      */
-    @Size(max = 2, message = "地址信息最多有两条")
     private List<AddressInfo> addressInfo;
     /**
      * 开始时间

+ 0 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderParam.java

@@ -53,7 +53,6 @@ public class PurchaseOrderParam {
      * 地址信息
      */
     @NotEmpty(message = "地址信息不能为空")
-    @Size(min = 2, max = 2, message = "装货或卸货地址信息缺失")
     @Valid
     private List<AddressInfo> addressInfo;
     /**

+ 7 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java

@@ -43,6 +43,11 @@ public class KwoTradeOrderAddressService {
         kwoTradeOrderAddressMapper.insertBatch(list);
     }
 
+    public Long add(KwoTradeOrderAddress address) {
+        kwoTradeOrderAddressMapper.insert(address);
+        return address.getId();
+    }
+
     /**
      * @desc: 根据orderId删除
      * @author: yzc
@@ -134,4 +139,6 @@ public class KwoTradeOrderAddressService {
         List<KwoTradeOrderAddress> list = kwoTradeOrderAddressMapper.selectList(wrapper);
         return CollectionUtils.emptyIfNull(list);
     }
+
+
 }

+ 20 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAmountService.java

@@ -0,0 +1,20 @@
+package com.sckw.order.serivce;
+
+import com.sckw.order.dao.KwoTradeOrderAmountMapper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author: yzc
+ * @date: 2024-03-04  16:57
+ * @desc: 交易订单装卸货地址委派及交付量信息service
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class KwoTradeOrderAmountService {
+
+    private final KwoTradeOrderAmountMapper tradeOrderAmountMapper;
+
+}

+ 31 - 8
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -226,22 +226,44 @@ public class KwoTradeOrderService {
             kwoTradeOrderAddressService.delByOrderId(id);
             List<AddressInfo> addressInfos = param.getAddressInfo();
             if (CollectionUtils.isNotEmpty(addressInfos)) {
+                BigDecimal amount = Objects.isNull(param.getAmount()) ? BigDecimal.ZERO : param.getAmount();
                 List<KwoTradeOrderAddress> list = new ArrayList<>(addressInfos.size());
-                addressInfos.forEach(e -> {
+                BigDecimal totalLoadAmount = BigDecimal.ZERO;
+                BigDecimal totalUnloadAmount = BigDecimal.ZERO;
+                boolean loadFlag = false;
+                boolean unloadFlag = false;
+                for (AddressInfo e : addressInfos) {
                     KwoTradeOrderAddress address = BeanUtils.copyProperties(e, KwoTradeOrderAddress.class);
                     address.setTOrderId(id).setTOrderNo(tOrderNo);
                     list.add(address);
                     if (Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
+                        //todo MongoDB如何存多个地址信息?
                         order.setLoadName(e.getName()).setLoadType(e.getType()).setLoadContacts(e.getContacts())
                                 .setLoadPhone(e.getPhone()).setLoadCityCode(String.valueOf(e.getCityCode())).setLoadCityName(e.getCityName())
                                 .setLoadDetailAddress(e.getDetailAddress()).setLoadLat(e.getLat()).setLoadLng(e.getLng());
+                        totalLoadAmount = totalLoadAmount.add(e.getAmount());
+                        loadFlag = true;
                     } else {
+                        //todo MongoDB如何存多个地址信息?
                         order.setUnloadName(e.getName()).setUnloadType(e.getType()).setUnloadContacts(e.getContacts())
                                 .setUnloadPhone(e.getPhone()).setUnloadCityCode(String.valueOf(e.getCityCode())).setUnloadCityName(e.getCityName())
                                 .setUnloadDetailAddress(e.getDetailAddress()).setUnloadLat(e.getLat()).setUnloadLng(e.getLng());
+                        totalUnloadAmount = totalUnloadAmount.add(e.getAmount());
+                        unloadFlag = true;
                     }
-                });
+                    Long addressId = kwoTradeOrderAddressService.add(address);
+                    KwoTradeOrderAmount orderAmount = new KwoTradeOrderAmount();
+                    orderAmount.setTOrderId(id).setAmount(e.getAmount())
+                            .setAddressId(addressId);
+                }
+                if (loadFlag && totalLoadAmount.compareTo(amount) != 0) {
+                    throw new BusinessException("装货分配量总量与订单总量不符!");
+                }
+                if (unloadFlag && totalUnloadAmount.compareTo(amount) != 0) {
+                    throw new BusinessException("卸货分配量总量与订单总量不符!");
+                }
                 kwoTradeOrderAddressService.insertBatch(list);
+                //分配量信息
             }
 
             //合同信息
@@ -263,7 +285,7 @@ public class KwoTradeOrderService {
             int method = isUpdate ? 2 : 1;
             //存MongoDb
             saveMongoDb(method, order);
-        }catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }
@@ -460,7 +482,7 @@ public class KwoTradeOrderService {
         String trading = param.getTrading();
         BigDecimal price = param.getPrice();
         KwpGoods goods = goodsInfoService.getGoodsById(param.getGoodsId());
-        if (Objects.isNull(goods) || Objects.equals(goods.getDelFlag(), Global.YES) ) {
+        if (Objects.isNull(goods) || Objects.equals(goods.getDelFlag(), Global.YES)) {
             throw new BusinessException("商品不存在!");
         }
         if (Boolean.FALSE.equals(isAcceptanceOrder)) {
@@ -558,6 +580,7 @@ public class KwoTradeOrderService {
 
     /**
      * 生成贸易订单号
+     *
      * @return 订单编号
      */
     private String getOrderNo() {
@@ -817,7 +840,7 @@ public class KwoTradeOrderService {
                 throw new BusinessException(updateResult.getMsg());
             }
             //代客下单冻结金额
-            if (Objects.equals(source, OrderSourceEnum.SALE.getType()) && param.getTrading().startsWith("1")){
+            if (Objects.equals(source, OrderSourceEnum.SALE.getType()) && param.getTrading().startsWith("1")) {
                 HttpResult freezeResult = paymentDubboService.freezeMoney(orderCheck.getProcureTopEntId(),
                         ChannelEnum.getByTrading(param.getTrading()), orderCheck.getSupplyTopEntId(), param.getPrice(), order.getId());
                 if (!Objects.equals(HttpStatus.SUCCESS_CODE, freezeResult.getCode())) {
@@ -1366,8 +1389,8 @@ public class KwoTradeOrderService {
      * @Param topEntId:
      * @return: java.util.List<com.sckw.order.api.model.TradeOrderCountStatisticsDTO>
      */
-    public List<TradeOrderCountStatisticsDTO> getOrderNumByTopEntId(Long topEntId,List<Long> enterpriseIds) {
-        return kwoTradeOrderMapper.getOrderNumByTopEntId(topEntId,enterpriseIds);
+    public List<TradeOrderCountStatisticsDTO> getOrderNumByTopEntId(Long topEntId, List<Long> enterpriseIds) {
+        return kwoTradeOrderMapper.getOrderNumByTopEntId(topEntId, enterpriseIds);
     }
 
     /**
@@ -1415,7 +1438,7 @@ public class KwoTradeOrderService {
             }
             Map<String, String> finalUnitMap = unitMap;
             unitDetails.forEach(e -> {
-                e.setLabel( finalUnitMap != null ? finalUnitMap.get(e.getValue()) : null);
+                e.setLabel(finalUnitMap != null ? finalUnitMap.get(e.getValue()) : null);
                 //组装合理损耗
                 if (CollectionUtils.isNotEmpty(dicts)) {
                     for (SysDictResDto ee : dicts)

+ 2 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderAddressMapper.xml

@@ -19,6 +19,7 @@
             lat,
             lng,
             fence,
+            sort,
             remark,
             status,
             create_by,
@@ -44,6 +45,7 @@
                 #{item.lat,jdbcType=VARCHAR},
                 #{item.lng,jdbcType=VARCHAR},
                 #{item.fence,jdbcType=VARCHAR},
+                #{item.sort,jdbcType=INTEGER},
                 #{item.remark,jdbcType=VARCHAR},
                 #{item.status,jdbcType=INTEGER},
                 #{item.createBy,jdbcType=BIGINT},