Ver código fonte

采购、销售订单草稿、退回更新提交

yzc 2 anos atrás
pai
commit
533c4674c7

+ 2 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/aspect/DaoAspect.java

@@ -60,10 +60,10 @@ public class DaoAspect {
                 }
                 Long userId = LoginUserHolder.getUserId();
                 objs.forEach(obj -> {
-                    if (isProperty(obj, UPDATE_BY) && Objects.isNull(BeanUtils.getProperty(obj, UPDATE_BY)) && userId != null) {
+                    if (isProperty(obj, UPDATE_BY) && userId != null) {
                         BeanUtils.setProperty(obj, UPDATE_BY, userId);
                     }
-                    if (isProperty(obj, UPDATE_TIME) && Objects.isNull(BeanUtils.getProperty(obj, UPDATE_TIME))) {
+                    if (isProperty(obj, UPDATE_TIME)) {
                         BeanUtils.setProperty(obj, UPDATE_TIME, new Date());
                     }
                 });

+ 4 - 4
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -24,8 +24,8 @@ public enum DictEnum {
     PICKUP_TYPE_1("pickup_type", "1", "采方自提"),
     DELIVERY_TYPE_0("delivery_type", "0", "签发交付"),
     DELIVERY_TYPE_1("delivery_type", "1", "签收交付"),
-    TORDER_SOURCE_0("tOrder_source", "0", "采购下单"),
-    TORDER_SOURCE_1("tOrder_source", "1", "销售代客下单"),
+    TORDER_SOURCE_1("tOrder_source", "1", "采购下单"),
+    TORDER_SOURCE_2("tOrder_source", "2", "销售代客下单"),
     TORDER_STATUS_0("tOrder_status", "0", "已保存"),
     TORDER_STATUS_1("tOrder_status", "1", "待受理"),
     TORDER_STATUS_2("tOrder_status", "2", "已退回"),
@@ -38,8 +38,8 @@ public enum DictEnum {
     CONTRACT_STATUS_1("contract_status", "1", "已签约"),
     TORDER_ADDRESS_TYPE_1("tOrder_address_type", "1", "装货地址"),
     TORDER_ADDRESS_TYPE_2("tOrder_address_type", "2", "卸货地址"),
-    TORDER_UNIT_TYPE_1("tOrder_unit_type", "1", "销售单位"),
-    TORDER_UNIT_TYPE_2("tOrder_unit_type", "2", "采购单位"),
+    TORDER_UNIT_TYPE_1("tOrder_unit_type", "1", "采购单位"),
+    TORDER_UNIT_TYPE_2("tOrder_unit_type", "2", "销售单位"),
     ADDRESS_TYPE_0("address_type", "0", "矿山"),
     INDUSTRY_TYPE_0("industry_type", "0", "砂石"),
     CLASSIFICATION_TYPE_0("classification_type", "0", "石料"),

+ 1 - 1
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwTradeOrder.java

@@ -98,7 +98,7 @@ public class SckwTradeOrder {
     private BigDecimal actualAmount;
 
     /**
-     * 订单创建来源类型(采购下单/销售代客下单)
+     * 订单创建来源类型(1采购下单/2销售代客下单)
      */
     private String source;
 

+ 6 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java

@@ -3,6 +3,7 @@ package com.sckw.order.controller;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.order.model.vo.req.*;
 import com.sckw.order.serivce.KwoTradeOrderService;
+import io.seata.spring.annotation.GlobalTransactional;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
@@ -29,6 +30,7 @@ public class KwoTradeOrderController {
      * @Param purchaseOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addPurchaseOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addPurchaseOrderDraft(@RequestBody PurchaseOrderParam purchaseOrderParam) {
         kwoTradeOrderService.addPurchaseOrderDraft(purchaseOrderParam);
@@ -42,6 +44,7 @@ public class KwoTradeOrderController {
      * @Param purchaseOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addPurchaseOrderSubmit", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addPurchaseOrderSubmit(@RequestBody @Validated PurchaseOrderParam purchaseOrderParam) {
         kwoTradeOrderService.addPurchaseOrderSubmit(purchaseOrderParam);
@@ -55,6 +58,7 @@ public class KwoTradeOrderController {
      * @Param valetOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addValetOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addValetOrderDraft(@RequestBody ValetOrderParam valetOrderParam) {
         kwoTradeOrderService.addValetOrderDraft(valetOrderParam);
@@ -69,6 +73,7 @@ public class KwoTradeOrderController {
      * @Param valetOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addValetOrderSubmit", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addValetOrderSubmit(@RequestBody @Validated ValetOrderParam valetOrderParam) {
         kwoTradeOrderService.addValetOrderSubmit(valetOrderParam);
@@ -82,6 +87,7 @@ public class KwoTradeOrderController {
      * @Param updateOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult update(@RequestBody @Validated UpdateOrderParam updateOrderParam) {
         kwoTradeOrderService.update(updateOrderParam);

+ 1 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java

@@ -80,7 +80,7 @@ public class KwoTradeOrder extends BaseModel {
     private BigDecimal actualAmount;
 
     /**
-     * 订单创建来源类型(采购下单/销售代客下单)
+     * 订单创建来源类型(1采购下单/2销售代客下单)
      */
     private String source;
 

+ 1 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderUnit.java

@@ -30,7 +30,7 @@ public class KwoTradeOrderUnit extends BaseModel {
     private String tOrderNo;
 
     /**
-     * 单位类型(1销售单位、2采购单位)
+     * 单位类型(1采购单位、2销售单位)
      */
     private String unitType;
 

+ 9 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateOrderParam.java

@@ -1,6 +1,8 @@
 package com.sckw.order.model.vo.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Size;
 import lombok.Getter;
@@ -29,6 +31,8 @@ public class UpdateOrderParam {
      * 操作类型0保存、1提交
      */
     @NotNull(message = "操作类型不能为空")
+    @Min(value = 0,message = "非法操作状态")
+    @Max(value = 1,message = "非法操作状态")
     private Integer operateType;
 
     /**
@@ -70,6 +74,11 @@ public class UpdateOrderParam {
      */
     @Size(max = 2, message = "地址信息只能有两条")
     private List<AddressInfo> addressInfo;
+
+    /**
+     * 合同信息
+     */
+    private ContractInfo contractInfo;
     /**
      * 开始时间
      */

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

@@ -1,5 +1,7 @@
 package com.sckw.order.serivce;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.core.model.constant.Global;
 import com.sckw.order.dao.KwoTradeOrderAddressMapper;
 import com.sckw.order.model.KwoTradeOrderAddress;
 import lombok.RequiredArgsConstructor;
@@ -30,4 +32,18 @@ public class KwoTradeOrderAddressService {
     public void insertBatch(List<KwoTradeOrderAddress> list) {
         kwoTradeOrderAddressMapper.insertBatch(list);
     }
+
+    /**
+     * @desc: 根据orderId删除
+     * @author: yzc
+     * @date: 2023-07-14 14:49
+     * @Param orderId:
+     * @return: void
+     */
+    public void delByOrderId(Long orderId) {
+        LambdaUpdateWrapper<KwoTradeOrderAddress> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwoTradeOrderAddress::getTOrderId, orderId).eq(KwoTradeOrderAddress::getDelFlag, Global.NO)
+                .set(KwoTradeOrderAddress::getDelFlag, Global.YES);
+        kwoTradeOrderAddressMapper.update(null, wrapper);
+    }
 }

+ 16 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderContractService.java

@@ -1,5 +1,7 @@
 package com.sckw.order.serivce;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.core.model.constant.Global;
 import com.sckw.order.dao.KwoTradeOrderContractMapper;
 import com.sckw.order.model.KwoTradeOrderContract;
 import lombok.RequiredArgsConstructor;
@@ -28,4 +30,18 @@ public class KwoTradeOrderContractService {
     public void insert(KwoTradeOrderContract contract) {
         kwoTradeOrderContractMapper.insert(contract);
     }
+
+    /**
+     * @desc: 根据orderId删除
+     * @author: yzc
+     * @date: 2023-07-14 14:49
+     * @Param orderId:
+     * @return: void
+     */
+    public void delByOrderId(Long orderId) {
+        LambdaUpdateWrapper<KwoTradeOrderContract> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwoTradeOrderContract::getTOrderId, orderId).eq(KwoTradeOrderContract::getDelFlag, Global.NO)
+                .set(KwoTradeOrderContract::getDelFlag, Global.YES);
+        kwoTradeOrderContractMapper.update(null, wrapper);
+    }
 }

+ 16 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderGoodsService.java

@@ -1,6 +1,7 @@
 package com.sckw.order.serivce;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.model.constant.Global;
 import com.sckw.order.dao.KwoTradeOrderGoodsMapper;
 import com.sckw.order.model.KwoTradeOrderGoods;
@@ -40,7 +41,21 @@ public class KwoTradeOrderGoodsService {
      */
     public KwoTradeOrderGoods getByOrderId(Long orderId) {
         LambdaQueryWrapper<KwoTradeOrderGoods> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(KwoTradeOrderGoods::getTOrderId,orderId).eq(KwoTradeOrderGoods::getDelFlag, Global.NO).last("LIMIT 1");
+        wrapper.eq(KwoTradeOrderGoods::getTOrderId, orderId).eq(KwoTradeOrderGoods::getDelFlag, Global.NO).last("LIMIT 1");
         return kwoTradeOrderGoodsMapper.selectOne(wrapper);
     }
+
+    /**
+     * @desc: 根据orderId删除
+     * @author: yzc
+     * @date: 2023-07-14 14:49
+     * @Param orderId:
+     * @return: void
+     */
+    public void delByOrderId(Long orderId) {
+        LambdaUpdateWrapper<KwoTradeOrderGoods> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwoTradeOrderGoods::getTOrderId, orderId).eq(KwoTradeOrderGoods::getDelFlag, Global.NO)
+                .set(KwoTradeOrderGoods::getDelFlag, Global.YES);
+        kwoTradeOrderGoodsMapper.update(null, wrapper);
+    }
 }

+ 233 - 37
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -9,6 +9,7 @@ import com.sckw.core.model.vo.TableStatisticRes;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.OrderGenerateUtils;
+import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.mongo.model.SckwTradeOrder;
 import com.sckw.order.dao.KwoTradeOrderMapper;
@@ -65,14 +66,13 @@ public class KwoTradeOrderService {
      * @Param param:
      * @return: void
      */
-    @Transactional(rollbackFor = Exception.class)
     public void addPurchaseOrderDraft(PurchaseOrderParam param) {
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
                 .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
-                .setSource(DictEnum.TORDER_SOURCE_0.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
+                .setSource(DictEnum.TORDER_SOURCE_1.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
         kwoTradeOrderMapper.insert(order);
-        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
 
     }
 
@@ -84,15 +84,27 @@ public class KwoTradeOrderService {
      * @Param tOrderNo:
      * @Param status:
      * @Param param:
+     * @Param isUpdate:
      * @return: void
      */
-    private void addOtherOrderInfo(KwoTradeOrder tradeOrder, ValetOrderParam param) {
+    private void addOtherOrderInfo(KwoTradeOrder tradeOrder, ValetOrderParam param, Boolean isUpdate) {
         Long id = tradeOrder.getId();
         String tOrderNo = tradeOrder.getTOrderNo();
-        SckwTradeOrder order = BeanUtils.copyProperties(tradeOrder, SckwTradeOrder.class);
+        SckwTradeOrder order = new SckwTradeOrder();
         //todo: 当前线程获取企业名称
-        order.setFirmName(String.valueOf(LoginUserHolder.getEntId())).setTOrderId(id);
-        //添加商品信息
+        //提前填充这些参数防止初始创建mongodb集合没有这些字段
+        order.setFirmName(String.valueOf(LoginUserHolder.getEntId())).setTOrderId(id).setDeliveryType("").setProjectName("")
+                .setEntrustAmount(BigDecimal.ZERO).setActualAmount(BigDecimal.ZERO).setContractId(0L).setContractNo("")
+                .setContractName("").setContractSigningWay("").setCreateByName(LoginUserHolder.getUserName())
+                .setUpdateByName(LoginUserHolder.getUserName());
+        BeanUtils.copyProperties(tradeOrder, order);
+        if (isUpdate) {
+            kwoTradeOrderGoodsService.delByOrderId(id);
+            kwoTradeOrderUnitService.delByOrderId(id);
+            kwoTradeOrderContractService.delByOrderId(id);
+            kwoTradeOrderAddressService.delByOrderId(id);
+        }
+        //商品信息
         GoodsInfo goodsInfo = param.getGoodsInfo();
         KwoTradeOrderGoods goods = BeanUtils.copyProperties(goodsInfo, KwoTradeOrderGoods.class);
         if (Objects.nonNull(goods)) {
@@ -100,7 +112,7 @@ public class KwoTradeOrderService {
             kwoTradeOrderGoodsService.insert(goods);
             BeanUtils.copyProperties(goodsInfo, order);
         }
-        //添加单位信息
+        //单位信息
         List<UnitInfo> unitInfos = param.getUnitInfo();
         if (CollectionUtils.isNotEmpty(unitInfos)) {
             List<KwoTradeOrderUnit> list = new ArrayList<>(unitInfos.size());
@@ -121,7 +133,7 @@ public class KwoTradeOrderService {
             });
             kwoTradeOrderUnitService.insertBatch(list);
         }
-        //添加地址信息
+        //地址信息
         List<AddressInfo> addressInfos = param.getAddressInfo();
         if (CollectionUtils.isNotEmpty(addressInfos)) {
             List<KwoTradeOrderAddress> list = new ArrayList<>(addressInfos.size());
@@ -141,7 +153,7 @@ public class KwoTradeOrderService {
             });
             kwoTradeOrderAddressService.insertBatch(list);
         }
-        //添加合同信息
+        //合同信息
         ContractInfo contractInfo = param.getContractInfo();
         KwoTradeOrderContract contract = BeanUtils.copyProperties(contractInfo, KwoTradeOrderContract.class);
         if (Objects.nonNull(contract)) {
@@ -149,15 +161,15 @@ public class KwoTradeOrderService {
             kwoTradeOrderContractService.insert(contract);
             BeanUtils.copyProperties(contractInfo, order);
         }
-        //添加状态信息
-        KwoTradeOrderTrack track = new KwoTradeOrderTrack();
-        track.setTOrderId(id).setTOrderNo(tOrderNo).setStatus(tradeOrder.getStatus()).setRemark(tradeOrder.getRemark());
-        kwoTradeOrderTrackService.insert(track);
-        order.setDeliveryType("").setProjectName("").setEntrustAmount(BigDecimal.ZERO).setActualAmount(BigDecimal.ZERO)
-                .setContractId(0L).setContractNo("").setContractName("").setContractSigningWay("")
-                .setCreateByName(LoginUserHolder.getUserName()).setUpdateByName(LoginUserHolder.getUserName());
+        //状态信息(草稿更新不加状态记录)
+        if (!isUpdate || !Objects.equals(DictEnum.TORDER_STATUS_0.getValue(), String.valueOf(tradeOrder.getStatus()))) {
+            KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+            track.setTOrderId(id).setTOrderNo(tOrderNo).setStatus(tradeOrder.getStatus()).setRemark(tradeOrder.getRemark());
+            kwoTradeOrderTrackService.insert(track);
+        }
+        int method = isUpdate ? 2 : 1;
         //存MongoDb
-        saveMongoDb(1, order);
+        saveMongoDb(method, order);
     }
 
     private void saveMongoDb(Integer method, Object order) {
@@ -176,14 +188,13 @@ public class KwoTradeOrderService {
      * @Param param:
      * @return: void
      */
-    @Transactional(rollbackFor = Exception.class)
     public void addValetOrderDraft(ValetOrderParam param) {
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
                 .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
-                .setSource(DictEnum.TORDER_SOURCE_1.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
+                .setSource(DictEnum.TORDER_SOURCE_2.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
         kwoTradeOrderMapper.insert(order);
-        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
     /**
@@ -193,31 +204,39 @@ public class KwoTradeOrderService {
      * @Param param:
      * @return: void
      */
-    @Transactional(rollbackFor = Exception.class)
     public void addPurchaseOrderSubmit(PurchaseOrderParam param) {
-        orderCheck(param);
+        orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount());
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
-                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_0.getValue())
+                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue())
                 .setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_1.getValue()));
         kwoTradeOrderMapper.insert(order);
         goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
-        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
-    private void orderCheck(PurchaseOrderParam param) {
+    /**
+     * @desc: 订单提交校验
+     * @author: yzc
+     * @date: 2023-07-14 14:46
+     * @Param goodId:
+     * @Param trading:
+     * @Param price:
+     * @Param amount:
+     * @return: void
+     */
+    private void orderCheck(Long goodId, String trading, BigDecimal price, BigDecimal amount) {
         //todo: 则先校验是否存在对供应企业的预付钱包 ;【预计采购金额】是否大于预付清单的【可用预付】金额
-        KwpGoods goods = goodsInfoService.getGoodsById(param.getGoodsInfo().getGoodsId());
+        KwpGoods goods = goodsInfoService.getGoodsById(goodId);
         if (Objects.isNull(goods) || !Objects.equals(goods.getStatus(), 1)) {
             throw new BusinessException("商品不存在或已下架!");
         }
-        if (Objects.equals(param.getTrading(), DictEnum.TRADE_TYPE_0.getValue())) {
-            if (param.getPrice().compareTo(goods.getAdvancePrice()) < 0) {
+        if (Objects.equals(trading, DictEnum.TRADE_TYPE_0.getValue())) {
+            if (price.compareTo(goods.getAdvancePrice()) < 0) {
                 throw new BusinessException("采购订单金额不能小于商品最低预付款限额!");
             }
         }
-        BigDecimal goodsAmount = goods.getAmount();
-        if (goods.getAmount().compareTo(param.getAmount()) < 0) {
+        if (goods.getAmount().compareTo(amount) < 0) {
             throw new BusinessException("商品库存量小于采购数量!");
         }
     }
@@ -231,10 +250,10 @@ public class KwoTradeOrderService {
      */
     @Transactional(rollbackFor = Exception.class)
     public void addValetOrderSubmit(ValetOrderParam param) {
-        orderCheck(param);
+        orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount());
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
-                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue());
+                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_2.getValue());
         String contractStatus = param.getContractInfo().getContractStatus();
         if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_0.getValue())) {
             order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_3.getValue()));
@@ -245,7 +264,7 @@ public class KwoTradeOrderService {
         }
         kwoTradeOrderMapper.insert(order);
         goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
-        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
     /**
@@ -256,7 +275,7 @@ public class KwoTradeOrderService {
      * @return: com.sckw.order.model.vo.res.OrderDetail
      */
     public OrderDetailRes detail(Long id) {
-        if (kwoTradeOrderUnitService.entMatch(id, LoginUserHolder.getEntId())) {
+        if (kwoTradeOrderUnitService.entMatch(id, LoginUserHolder.getEntId(), null)) {
             throw new BusinessException("无权限查看数据!");
         }
         KwoTradeOrder order = getById(id);
@@ -272,10 +291,187 @@ public class KwoTradeOrderService {
      * @desc: 修改订单
      * @author: yzc
      * @date: 2023-07-07 15:34
-     * @Param updateOrderParam:
+     * @Param param:
      * @return: void
      */
-    public void update(UpdateOrderParam updateOrderParam) {
+    public void update(UpdateOrderParam param) {
+        KwoTradeOrder order = getById(param.getId());
+        if (Objects.isNull(order)) {
+            throw new BusinessException("Order not found");
+        }
+        String source = order.getSource();
+        String status = String.valueOf(order.getStatus());
+        if ((!Objects.equals(status, DictEnum.TORDER_STATUS_0.getValue()) && !Objects.equals(status, DictEnum.TORDER_STATUS_2.getValue()))
+                && Objects.equals(source, DictEnum.TORDER_SOURCE_1.getValue())) {
+            throw new BusinessException("采购下单只能修改已保存及已退回状态的订单!");
+        }
+        if (Objects.equals(source, DictEnum.TORDER_SOURCE_2.getValue()) && !Objects.equals(status, DictEnum.TORDER_STATUS_0.getValue())) {
+            throw new BusinessException("代客下单只能修改已保存状态的订单!");
+        }
+        if (kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), source)) {
+            throw new BusinessException("无权限修改此订单!");
+        }
+        if (Objects.equals(param.getOperateType(), 1)) {
+            checkParams(param, source);
+            if (Objects.equals(source, DictEnum.TORDER_SOURCE_1.getValue())) {
+                order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_1.getValue()));
+            } else {
+                String contractStatus = param.getContractInfo().getContractStatus();
+                if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_0.getValue())) {
+                    order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_3.getValue()));
+                } else if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_1.getValue())) {
+                    order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_4.getValue()));
+                } else {
+                    throw new BusinessException("Invalid contract status");
+                }
+            }
+            orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount());
+        }
+        order.setAmount(param.getAmount()).setUnit(Objects.isNull(param.getGoodsInfo()) ? null : param.getGoodsInfo().getUnit())
+                .setPrice(param.getPrice()).setTrading(param.getTrading()).setPickupType(param.getPickupType())
+                .setDeliveryType(param.getDeliveryType()).setStartTime(param.getStartTime()).setEndTime(param.getEndTime())
+                .setRemark(param.getRemark());
+        kwoTradeOrderMapper.updateById(order);
+        ValetOrderParam valetOrderParam = BeanUtils.copyProperties(param, ValetOrderParam.class);
+        addOtherOrderInfo(order, valetOrderParam, true);
+    }
+
+
+    private void checkParams(UpdateOrderParam param, String source) {
+        if (Objects.isNull(param.getAmount())) {
+            throw new BusinessException("订单总量不能为空!");
+        }
+        if (Objects.isNull(param.getPrice())) {
+            throw new BusinessException("订单金额不能为空!");
+        }
+        if (StringUtils.isBlank(param.getTrading())) {
+            throw new BusinessException("交易方式不能为空!");
+        }
+        if (StringUtils.isBlank(param.getPickupType())) {
+            throw new BusinessException("提货方式不能为空!");
+        }
+        if (Objects.isNull(param.getStartTime())) {
+            throw new BusinessException("开始时间不能为空!");
+        }
+        if (Objects.isNull(param.getEndTime())) {
+            throw new BusinessException("结束时间不能为空!");
+        }
+        ContractInfo contractInfo = param.getContractInfo();
+        if (Objects.equals(source, DictEnum.TORDER_SOURCE_2.getValue())) {
+            if (Objects.isNull(contractInfo)) {
+                throw new BusinessException("代客下单合同信息不能为空");
+            }
+            if (Objects.isNull(contractInfo.getContractId())) {
+                throw new BusinessException("合同id不能为空!");
+            }
+            if (StringUtils.isBlank(contractInfo.getContractNo())) {
+                throw new BusinessException("合同编号不能为空!");
+            }
+            if (StringUtils.isBlank(contractInfo.getContractName())) {
+                throw new BusinessException("合同名称不能为空!");
+            }
+            if (StringUtils.isBlank(contractInfo.getContractSigningWay())) {
+                throw new BusinessException("合同签约方式不能为空!");
+            }
+            if (StringUtils.isBlank(contractInfo.getContractStatus())) {
+                throw new BusinessException("合同状态不能为空!");
+            }
+        }
+        GoodsInfo goodsInfo = param.getGoodsInfo();
+        if (Objects.isNull(goodsInfo)) {
+            throw new BusinessException("商品信息不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getGoodsId())) {
+            throw new BusinessException("商品id不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getGoodsCode())) {
+            throw new BusinessException("商品编号不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getGoodsName())) {
+            throw new BusinessException("商品名称不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getGoodsType())) {
+            throw new BusinessException("商品类型不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getGoodsTaxRate())) {
+            throw new BusinessException("商品发票税率不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getGoodsSpec())) {
+            throw new BusinessException("商品尺寸大小不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getUnit())) {
+            throw new BusinessException("商品单位不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getPriceRangeId())) {
+            throw new BusinessException("价格段id不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getUnitPrice())) {
+            throw new BusinessException("订单成交单价不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getCollectionUnitId())) {
+            throw new BusinessException("收款单位id不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getCollectionUnit())) {
+            throw new BusinessException("收款单位名称不能为空!");
+        }
+
+        List<UnitInfo> unitInfos = param.getUnitInfo();
+        if (CollectionUtils.isEmpty(unitInfos)) {
+            throw new BusinessException("单位信息不能为空!");
+        }
+        unitInfos.forEach(e -> {
+            if (Objects.isNull(e.getUnitType())) {
+                throw new BusinessException("单位类型不能为空!");
+            }
+            if (Objects.isNull(e.getEntId())) {
+                throw new BusinessException("企业id不能为空!");
+            }
+            if (StringUtils.isBlank(e.getFirmName())) {
+                throw new BusinessException("企业名称不能为空!");
+            }
+            if (StringUtils.isBlank(e.getContacts())) {
+                throw new BusinessException("联系人姓名不能为空!");
+            }
+            if (StringUtils.isBlank(e.getPhone())) {
+                throw new BusinessException("联系电话不能为空!");
+            }
+        });
+        List<AddressInfo> addressInfos = param.getAddressInfo();
+        if (CollectionUtils.isEmpty(addressInfos)) {
+            throw new BusinessException("地址信息不能为空!");
+        }
+        addressInfos.forEach(e -> {
+            if (StringUtils.isBlank(e.getAddressType())) {
+                throw new BusinessException("地址类型不能为空!");
+            }
+            if (StringUtils.isBlank(e.getName())) {
+                throw new BusinessException("地址名称不能为空!");
+            }
+            if (StringUtils.isBlank(e.getType())) {
+                throw new BusinessException("地址类型不能为空!");
+            }
+            if (StringUtils.isBlank(e.getContacts())) {
+                throw new BusinessException("联系人姓名不能为空!");
+            }
+            if (StringUtils.isBlank(e.getPhone())) {
+                throw new BusinessException("联系电话不能为空!");
+            }
+            if (Objects.isNull(e.getCityCode())) {
+                throw new BusinessException("所在地区code不能为空!");
+            }
+            if (StringUtils.isBlank(e.getCityName())) {
+                throw new BusinessException("所属区域名称不能为空!");
+            }
+            if (StringUtils.isBlank(e.getDetailAddress())) {
+                throw new BusinessException("详细地址不能为空!");
+            }
+            if (StringUtils.isBlank(e.getLat())) {
+                throw new BusinessException("纬度不能为空!");
+            }
+            if (StringUtils.isBlank(e.getLng())) {
+                throw new BusinessException("经度不能为空!");
+            }
+        });
 
     }
 

+ 19 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderUnitService.java

@@ -1,7 +1,9 @@
 package com.sckw.order.serivce;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.StringUtils;
 import com.sckw.order.dao.KwoTradeOrderUnitMapper;
 import com.sckw.order.model.KwoTradeOrderUnit;
 import lombok.RequiredArgsConstructor;
@@ -40,12 +42,28 @@ public class KwoTradeOrderUnitService {
      * @date: 2023-07-13 16:56
      * @Param orderId:
      * @Param entId:
+     * @Param unitType:
      * @return: void
      */
-    public Boolean entMatch(Long orderId, Long entId) {
+    public Boolean entMatch(Long orderId, Long entId, String unitType) {
         LambdaQueryWrapper<KwoTradeOrderUnit> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwoTradeOrderUnit::getTopEntId, entId).eq(KwoTradeOrderUnit::getTOrderId, orderId)
+                .eq(StringUtils.isNotBlank(unitType), KwoTradeOrderUnit::getUnitType, unitType)
                 .eq(KwoTradeOrderUnit::getDelFlag, Global.NO).last("LIMIT 1");
         return Objects.isNull(kwoTradeOrderUnitMapper.selectOne(wrapper));
     }
+
+    /**
+     * @desc: 根据orderId删除
+     * @author: yzc
+     * @date: 2023-07-14 14:49
+     * @Param orderId:
+     * @return: void
+     */
+    public void delByOrderId(Long orderId) {
+        LambdaUpdateWrapper<KwoTradeOrderUnit> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwoTradeOrderUnit::getTOrderId, orderId).eq(KwoTradeOrderUnit::getDelFlag, Global.NO)
+                .set(KwoTradeOrderUnit::getDelFlag, Global.YES);
+        kwoTradeOrderUnitMapper.update(null, wrapper);
+    }
 }