Просмотр исходного кода

订单受理、完结、详情、驳回订单、批量删除接口

yzc 2 лет назад
Родитель
Сommit
23d896b700
14 измененных файлов с 465 добавлено и 78 удалено
  1. 19 20
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java
  2. 33 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/BatchDeleteParam.java
  3. 2 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java
  4. 27 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDetailRes.java
  5. 35 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/GoodsInfoDetailRes.java
  6. 57 20
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java
  7. 23 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/UnitInfoDetailRes.java
  8. 30 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java
  9. 30 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderContractService.java
  10. 16 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderGoodsService.java
  11. 144 35
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  12. 46 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderUnitService.java
  13. 2 2
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java
  14. 1 1
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/param/TradeOrderListStatisticParam.java

+ 19 - 20
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java

@@ -9,8 +9,6 @@ import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-
 /**
  * @desc: 贸易订单相关
  * @author: yzc
@@ -80,6 +78,18 @@ public class KwoTradeOrderController {
         return HttpResult.ok("代客下单提交成功");
     }
 
+    /**
+     * @desc: 订单详情
+     * @author: yzc
+     * @date: 2023-07-07 15:30
+     * @Param id:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @GetMapping("/detail")
+    public HttpResult detail(@RequestParam Long id) {
+        return HttpResult.ok(kwoTradeOrderService.detail(id));
+    }
+
     /**
      * @desc: 修改订单
      * @author: yzc
@@ -131,7 +141,7 @@ public class KwoTradeOrderController {
      */
     @GetMapping("/rejectReason")
     public HttpResult rejectReason(@RequestParam Long id) {
-        return HttpResult.ok(kwoTradeOrderService.rejectReason(id));
+        return HttpResult.ok("驳回订单原因查询成功", kwoTradeOrderService.rejectReason(id));
     }
 
     /**
@@ -141,6 +151,7 @@ public class KwoTradeOrderController {
      * @Param completeOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/completeOrder", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult completeOrder(@RequestBody @Validated CompleteOrderParam completeOrderParam) {
         kwoTradeOrderService.completeOrder(completeOrderParam);
@@ -148,29 +159,17 @@ public class KwoTradeOrderController {
     }
 
 
-    /**
-     * @desc: 订单列表导出
-     * @author: yzc
-     * @date: 2023-07-12 17:32
-     * @Param completeOrderParam:
-     * @return: com.sckw.core.web.response.HttpResult
-     */
-    @PostMapping(value = "/export", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult export(@RequestBody @Validated CompleteOrderParam completeOrderParam) {
-        kwoTradeOrderService.export(completeOrderParam);
-        return HttpResult.ok("订单完结成功");
-    }
-
     /**
      * @desc: 批量删除
      * @author: yzc
      * @date: 2023-07-12 17:34
-     * @Param ids:
+     * @Param param:
      * @return: com.sckw.core.web.response.HttpResult
      */
-    @GetMapping("/batchDelete")
-    public HttpResult batchDelete(@RequestParam List<Long> ids) {
-        kwoTradeOrderService.batchDelete(ids);
+    @GlobalTransactional(name = "default_tx_group")
+    @PostMapping(value = "/batchDelete", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult batchDelete(@RequestBody @Validated BatchDeleteParam param) {
+        kwoTradeOrderService.batchDelete(param);
         return HttpResult.ok("订单批量删除成功");
     }
 

+ 33 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/BatchDeleteParam.java

@@ -0,0 +1,33 @@
+package com.sckw.order.model.vo.req;
+
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * @desc: 批量删除请求参数
+ * @author: yzc
+ * @date: 2023-07-18 15:05
+ */
+@Getter
+@Setter
+@ToString
+public class BatchDeleteParam {
+
+    @NotEmpty(message = "订单id集合不能为空")
+    private List<Long> ids;
+
+    /**
+     * 订单类型(1采购订单、2销售订单)
+     */
+    @Min(value = 1, message = "非法订单类型")
+    @Max(value = 2, message = "非法订单类型")
+    @NotNull(message = "订单类型不能为空")
+    private Integer orderType;
+}

+ 2 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java

@@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
+import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
 
@@ -16,6 +17,7 @@ import java.math.BigDecimal;
 @Getter
 @Setter
 @ToString
+@Accessors(chain = true)
 public class GoodsInfo {
     /**
      * 商品id

+ 27 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDetailRes.java

@@ -0,0 +1,27 @@
+package com.sckw.order.model.vo.res;
+
+import com.sckw.order.model.vo.req.AddressInfo;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 地址信息详情
+ * @author: yzc
+ * @date: 2023-07-18 11:10
+ */
+@Getter
+@Setter
+@ToString
+public class AddressInfoDetailRes extends AddressInfo {
+
+    /**
+     * 地址类型label
+     */
+    private String addressTypeLabel;
+
+    /**
+     * 地址类型label
+     */
+    private String typeLabel;
+}

+ 35 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/GoodsInfoDetailRes.java

@@ -0,0 +1,35 @@
+package com.sckw.order.model.vo.res;
+
+import com.sckw.order.model.vo.req.GoodsInfo;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+/**
+ * @desc: 商品信息详情响应
+ * @author: yzc
+ * @date: 2023-07-18 11:09
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class GoodsInfoDetailRes extends GoodsInfo {
+
+    /**
+     * 商品类型label
+     */
+    private String goodsTypeLabel;
+
+    /**
+     * 商品单位label
+     */
+    private String goodsUnitLabel;
+
+    /**
+     * 商品发票税率label
+     */
+    private String goodsTaxRateLabel;
+
+}

+ 57 - 20
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java

@@ -1,10 +1,7 @@
 package com.sckw.order.model.vo.res;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.sckw.order.model.vo.req.AddressInfo;
 import com.sckw.order.model.vo.req.ContractInfo;
-import com.sckw.order.model.vo.req.GoodsInfo;
-import com.sckw.order.model.vo.req.UnitInfo;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -30,6 +27,16 @@ public class OrderDetailRes {
      */
     private Long id;
 
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名称
+     */
+    private String firmName;
+
     /**
      * 订单编号
      */
@@ -46,39 +53,34 @@ public class OrderDetailRes {
     private BigDecimal price;
 
     /**
-     * 商品信息
-     */
-    private GoodsInfo goodsInfo;
-
-    /**
-     * 单位信息
+     * 交易方式(预付款、货到付款)
      */
-    private List<UnitInfo> unitInfo;
+    private String trading;
 
     /**
-     * 地址信息
+     * 交易方式label
      */
-    private List<AddressInfo> addressInfo;
+    private String tradingLabel;
 
     /**
-     * 合同信息
+     * 提货方式(采方自提、供应配送)
      */
-    private ContractInfo contractInfo;
+    private String pickupType;
 
     /**
-     * 交易方式(预付款、货到付款)
+     * 提货方式label
      */
-    private String trading;
+    private String pickupTypeLabel;
 
     /**
-     * 提货方式(采方自提、供应配送
+     * 交付类型(签发交付、签收交付
      */
-    private String pickupType;
+    private String deliveryType;
 
     /**
-     * 交付类型(签发交付、签收交付)
+     * 交付类型label
      */
-    private String deliveryType;
+    private String deliveryTypeLabel;
 
     /**
      * 开始日期
@@ -107,10 +109,45 @@ public class OrderDetailRes {
      */
     private String source;
 
+    /**
+     * 订单创建来源label
+     */
+    private String sourceLabel;
+
     /**
      * 备注
      */
     private String remark;
 
+    /**
+     * 订单状态
+     */
+    private Integer status;
+
+    /**
+     * 订单状态label
+     */
+    private String statusLabel;
+
+    /**
+     * 商品信息
+     */
+    private GoodsInfoDetailRes goodsInfo;
+
+
+    /**
+     * 单位信息
+     */
+    private List<UnitInfoDetailRes> unitInfo;
+
+    /**
+     * 地址信息
+     */
+    private List<AddressInfoDetailRes> addressInfo;
+
+    /**
+     * 合同信息
+     */
+    private ContractInfo contractInfo;
 
 }

+ 23 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/UnitInfoDetailRes.java

@@ -0,0 +1,23 @@
+package com.sckw.order.model.vo.res;
+
+import com.sckw.order.model.vo.req.UnitInfo;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 单位信息详情
+ * @author: yzc
+ * @date: 2023-07-18 11:10
+ */
+@Getter
+@Setter
+@ToString
+public class UnitInfoDetailRes extends UnitInfo {
+
+    /**
+     * 单位类型label
+     */
+    private String unitTypeLabel;
+
+}

+ 30 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.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.CollectionUtils;
 import com.sckw.order.dao.KwoTradeOrderAddressMapper;
 import com.sckw.order.model.KwoTradeOrderAddress;
 import lombok.RequiredArgsConstructor;
@@ -46,4 +48,32 @@ public class KwoTradeOrderAddressService {
                 .set(KwoTradeOrderAddress::getDelFlag, Global.YES);
         kwoTradeOrderAddressMapper.update(null, wrapper);
     }
+
+    /**
+     * @desc: 根据orderId获取
+     * @author: yzc
+     * @date: 2023-07-18 11:24
+     * @Param torderId:
+     * @return: java.util.List<com.sckw.order.model.KwoTradeOrderAddress>
+     */
+    public List<KwoTradeOrderAddress> getByOrderId(Long torderId) {
+        LambdaQueryWrapper<KwoTradeOrderAddress> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwoTradeOrderAddress::getTOrderId, torderId).eq(KwoTradeOrderAddress::getDelFlag, Global.NO);
+        List<KwoTradeOrderAddress> list = kwoTradeOrderAddressMapper.selectList(wrapper);
+        return CollectionUtils.emptyIfNull(list);
+    }
+
+    /**
+     * @desc: 根据orderIds删除
+     * @author: yzc
+     * @date: 2023-07-18 16:50
+     * @Param orderIds:
+     * @return: void
+     */
+    public void delByOrderIds(List<Long> orderIds) {
+        LambdaUpdateWrapper<KwoTradeOrderAddress> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.in(KwoTradeOrderAddress::getTOrderId, orderIds).eq(KwoTradeOrderAddress::getDelFlag, Global.NO)
+                .set(KwoTradeOrderAddress::getDelFlag, Global.YES);
+        kwoTradeOrderAddressMapper.update(null, wrapper);
+    }
 }

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

@@ -1,5 +1,6 @@
 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.KwoTradeOrderContractMapper;
@@ -8,6 +9,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @desc: 合同信息service
  * @author: yzc
@@ -44,4 +47,31 @@ public class KwoTradeOrderContractService {
                 .set(KwoTradeOrderContract::getDelFlag, Global.YES);
         kwoTradeOrderContractMapper.update(null, wrapper);
     }
+
+    /**
+     * @desc: 根据orderId获取
+     * @author: yzc
+     * @date: 2023-07-18 11:25
+     * @Param orderId:
+     * @return: com.sckw.order.model.KwoTradeOrderContract
+     */
+    public KwoTradeOrderContract getByOrderId(Long orderId) {
+        LambdaQueryWrapper<KwoTradeOrderContract> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwoTradeOrderContract::getTOrderId, orderId).eq(KwoTradeOrderContract::getDelFlag, Global.NO).last("LIMIT 1");
+        return kwoTradeOrderContractMapper.selectOne(wrapper);
+    }
+
+    /**
+     * @desc: 根据orderIds删除
+     * @author: yzc
+     * @date: 2023-07-18 16:51
+     * @Param orderIds:
+     * @return: void
+     */
+    public void delByOrderIds(List<Long> orderIds) {
+        LambdaUpdateWrapper<KwoTradeOrderContract> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.in(KwoTradeOrderContract::getTOrderId, orderIds).eq(KwoTradeOrderContract::getDelFlag, Global.NO)
+                .set(KwoTradeOrderContract::getDelFlag, Global.YES);
+        kwoTradeOrderContractMapper.update(null, wrapper);
+    }
 }

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

@@ -9,6 +9,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @desc: 交易订单商品信息service
  * @author: yzc
@@ -58,4 +60,18 @@ public class KwoTradeOrderGoodsService {
                 .set(KwoTradeOrderGoods::getDelFlag, Global.YES);
         kwoTradeOrderGoodsMapper.update(null, wrapper);
     }
+
+    /**
+     * @desc: 根据orderIds删除
+     * @author: yzc
+     * @date: 2023-07-18 16:48
+     * @Param orderIds:
+     * @return: void
+     */
+    public void delByOrderIds(List<Long> orderIds) {
+        LambdaUpdateWrapper<KwoTradeOrderGoods> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.in(KwoTradeOrderGoods::getTOrderId, orderIds).eq(KwoTradeOrderGoods::getDelFlag, Global.NO)
+                .set(KwoTradeOrderGoods::getDelFlag, Global.YES);
+        kwoTradeOrderGoodsMapper.update(null, wrapper);
+    }
 }

+ 144 - 35
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -2,7 +2,9 @@ package com.sckw.order.serivce;
 
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.common.enums.enums.DictEnum;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
@@ -15,11 +17,15 @@ import com.sckw.mongo.model.TradeOrderUpdateParam;
 import com.sckw.order.dao.KwoTradeOrderMapper;
 import com.sckw.order.model.*;
 import com.sckw.order.model.vo.req.*;
+import com.sckw.order.model.vo.res.AddressInfoDetailRes;
+import com.sckw.order.model.vo.res.GoodsInfoDetailRes;
 import com.sckw.order.model.vo.res.OrderDetailRes;
+import com.sckw.order.model.vo.res.UnitInfoDetailRes;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -28,10 +34,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * @desc: 交易订单(采购订单/销售订单)service
@@ -91,9 +94,8 @@ public class KwoTradeOrderService {
         Long id = tradeOrder.getId();
         String tOrderNo = tradeOrder.getTOrderNo();
         SckwTradeOrder order = new SckwTradeOrder();
-        //todo: 当前线程获取企业名称
         //提前填充这些参数防止初始创建mongodb集合没有这些字段
-        order.setFirmName(String.valueOf(LoginUserHolder.getEntId())).setTOrderId(id).setDeliveryType("").setProjectName("")
+        order.setFirmName(LoginUserHolder.getEntName()).setTOrderId(id).setDeliveryType("").setProjectName("")
                 .setEntrustAmount(BigDecimal.ZERO).setActualAmount(BigDecimal.ZERO).setContractId(0L).setContractNo("")
                 .setContractName("").setContractSigningWay("").setCreateByName(LoginUserHolder.getUserName())
                 .setUpdateByName(LoginUserHolder.getUserName());
@@ -113,11 +115,10 @@ public class KwoTradeOrderService {
         if (CollectionUtils.isNotEmpty(unitInfos)) {
             List<KwoTradeOrderUnit> list = new ArrayList<>(unitInfos.size());
             List<Long> entIds = unitInfos.stream().map(UnitInfo::getEntId).distinct().toList();
-            //todo: 获取一级企业信息
+            Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
             unitInfos.forEach(e -> {
                 KwoTradeOrderUnit unit = BeanUtils.copyProperties(e, KwoTradeOrderUnit.class);
-                unit.setTOrderId(id).setTOrderNo(tOrderNo)
-                        .setTopEntId(e.getEntId());
+                unit.setTOrderId(id).setTOrderNo(tOrderNo).setTopEntId(entMap.get(e.getEntId()).getId());
                 list.add(unit);
                 if (Objects.equals(e.getUnitType(), DictEnum.TORDER_UNIT_TYPE_1.getValue())) {
                     order.setSupplyEntId(e.getEntId()).setSupplyTopEntId(e.getEntId()).setSupplyFirmName(e.getFirmName())
@@ -211,12 +212,13 @@ public class KwoTradeOrderService {
      * @return: void
      */
     public void addPurchaseOrderSubmit(PurchaseOrderParam param) {
-        orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice());
+        orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice(), false);
         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())
                 .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), false);
     }
@@ -232,9 +234,8 @@ public class KwoTradeOrderService {
      * @Param unitPrice: 成交价格
      * @return: void
      */
-    private void orderCheck(Long goodId, String trading, BigDecimal price, BigDecimal amount, BigDecimal unitPrice) {
-        BigDecimal multiply = amount.multiply(unitPrice);
-        if (price.compareTo(amount.multiply(unitPrice)) != 0) {
+    private void orderCheck(Long goodId, String trading, BigDecimal price, BigDecimal amount, BigDecimal unitPrice, Boolean isAcceptanceOrder) {
+        if (!isAcceptanceOrder && price.compareTo(amount.multiply(unitPrice)) != 0) {
             throw new BusinessException("订单总金额不等于商品单价*订单总量!");
         }
         //todo: 则先校验是否存在对供应企业的预付钱包 ;【预计采购金额】是否大于预付清单的【可用预付】金额
@@ -242,10 +243,9 @@ public class KwoTradeOrderService {
         if (Objects.isNull(goods) || !Objects.equals(goods.getStatus(), 1)) {
             throw new BusinessException("商品不存在或已下架!");
         }
-        if (Objects.equals(trading, DictEnum.TRADE_TYPE_0.getValue())) {
-            if (price.compareTo(goods.getAdvancePrice()) < 0) {
-                throw new BusinessException("采购订单金额不能小于商品最低预付款限额!");
-            }
+        //受理订单不校验预付款限额
+        if (!isAcceptanceOrder && Objects.equals(trading, DictEnum.TRADE_TYPE_0.getValue()) && price.compareTo(goods.getAdvancePrice()) < 0) {
+            throw new BusinessException("采购订单金额不能小于商品最低预付款限额!");
         }
         if (goods.getAmount().compareTo(amount) < 0) {
             throw new BusinessException("商品库存量小于采购数量!");
@@ -261,7 +261,7 @@ public class KwoTradeOrderService {
      */
     @Transactional(rollbackFor = Exception.class)
     public void addValetOrderSubmit(ValetOrderParam param) {
-        orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice());
+        orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice(), false);
         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_2.getValue());
@@ -274,6 +274,7 @@ public class KwoTradeOrderService {
             throw new BusinessException("Invalid contract status");
         }
         kwoTradeOrderMapper.insert(order);
+        //扣减库存
         goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
         addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
@@ -286,16 +287,65 @@ public class KwoTradeOrderService {
      * @return: com.sckw.order.model.vo.res.OrderDetail
      */
     public OrderDetailRes detail(Long id) {
-        if (kwoTradeOrderUnitService.entMatch(id, LoginUserHolder.getEntId(), null)) {
-            throw new BusinessException("无权限查看数据!");
-        }
         KwoTradeOrder order = getById(id);
         if (Objects.isNull(order)) {
             throw new BusinessException("不存在该订单!");
         }
-        OrderDetailRes orderDetail = BeanUtils.copyProperties(order, OrderDetailRes.class);
-        KwoTradeOrderGoods tradeOrderGoods = kwoTradeOrderGoodsService.getByOrderId(id);
-        return orderDetail;
+        //订单基本信息
+        OrderDetailRes detail = BeanUtils.copyProperties(order, OrderDetailRes.class);
+        EntCacheResDto ent = remoteSystemService.queryEntCacheById(detail.getEntId());
+        detail.setFirmName(Objects.isNull(ent) ? null : ent.getFirmName())
+                .setTradingLabel(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), detail.getTrading()))
+                .setPickupTypeLabel(DictEnum.getLabel(DictTypeEnum.PICKUP_TYPE.getType(), detail.getPickupType()))
+                .setDeliveryTypeLabel(DictEnum.getLabel(DictTypeEnum.DELIVERY_TYPE.getType(), detail.getDeliveryType()))
+                .setSourceLabel(DictEnum.getLabel(DictTypeEnum.TORDER_SOURCE.getType(), detail.getSource()))
+                .setStatusLabel(DictEnum.getLabel(DictTypeEnum.TORDER_STATUS.getType(), String.valueOf(detail.getStatus())));
+        //商品信息
+        KwoTradeOrderGoods orderGoods = kwoTradeOrderGoodsService.getByOrderId(id);
+        if (Objects.nonNull(orderGoods)) {
+            KwpGoods goods = goodsInfoService.getGoodsById(orderGoods.getGoodsId());
+            if (Objects.nonNull(goods)) {
+                EntCacheResDto entCache = remoteSystemService.queryEntCacheById(goods.getEntId());
+                GoodsInfoDetailRes goodsDetail = new GoodsInfoDetailRes();
+                goodsDetail.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), goods.getGoodsType()))
+                        .setGoodsUnitLabel(DictEnum.getLabel(DictTypeEnum.UNIT_TYPE.getType(), goods.getUnit()))
+                        .setGoodsTaxRateLabel(DictEnum.getLabel(DictTypeEnum.TAX_RATE.getType(), String.valueOf(goods.getTaxRate())))
+                        .setGoodsId(goods.getId()).setGoodsCode(goods.getCode()).setGoodsName(goods.getName())
+                        .setGoodsType(goods.getGoodsType()).setGoodsTaxRate(goods.getTaxRate()).setGoodsSpec(goods.getSpec())
+                        .setUnit(goods.getUnit()).setPriceRangeId(orderGoods.getPriceRangeId()).setUnitPrice(orderGoods.getUnitPrice())
+                        .setSkuId(orderGoods.getSkuId()).setCollectionUnitId(goods.getEntId()).setCollectionUnitId(goods.getEntId())
+                        .setCollectionUnit(Objects.isNull(entCache) ? null : entCache.getFirmName());
+                detail.setGoodsInfo(goodsDetail);
+            }
+        }
+
+        //单位信息
+        List<KwoTradeOrderUnit> units = kwoTradeOrderUnitService.getByOrderId(id);
+        if (CollectionUtils.isNotEmpty(units)) {
+            List<UnitInfoDetailRes> unitInfos = BeanUtils.copyToList(units, UnitInfoDetailRes.class);
+            unitInfos.forEach(e -> {
+                e.setUnitTypeLabel(DictEnum.getLabel(DictTypeEnum.TORDER_UNIT_TYPE.getType(), e.getUnitType()));
+            });
+            detail.setUnitInfo(unitInfos);
+        }
+        //地址信息
+        List<KwoTradeOrderAddress> addressList = kwoTradeOrderAddressService.getByOrderId(id);
+        if (CollectionUtils.isNotEmpty(addressList)) {
+            List<AddressInfoDetailRes> addressInfoDetails = BeanUtils.copyToList(addressList, AddressInfoDetailRes.class);
+            addressInfoDetails.forEach(e -> {
+                e.setAddressTypeLabel(DictEnum.getLabel(DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), e.getAddressType()));
+                e.setTypeLabel(DictEnum.getLabel(DictTypeEnum.ADDRESS_TYPE.getType(), e.getType()));
+            });
+            detail.setAddressInfo(addressInfoDetails);
+        }
+        //合同信息
+        KwoTradeOrderContract contract = kwoTradeOrderContractService.getByOrderId(id);
+        if (Objects.nonNull(contract)) {
+            ContractInfo contractInfo = BeanUtils.copyProperties(contract, ContractInfo.class);
+            //todo:获取合同信息
+            detail.setContractInfo(contractInfo);
+        }
+        return detail;
     }
 
     /**
@@ -336,7 +386,9 @@ public class KwoTradeOrderService {
                     throw new BusinessException("Invalid contract status");
                 }
             }
-            orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice());
+            orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice(), false);
+            //扣减库存
+            goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
         }
         order.setAmount(param.getAmount()).setUnit(Objects.isNull(param.getGoodsInfo()) ? null : param.getGoodsInfo().getUnit())
                 .setPrice(param.getPrice()).setTrading(param.getTrading()).setPickupType(param.getPickupType())
@@ -344,6 +396,7 @@ public class KwoTradeOrderService {
                 .setRemark(param.getRemark());
         kwoTradeOrderMapper.updateById(order);
         ValetOrderParam valetOrderParam = BeanUtils.copyProperties(param, ValetOrderParam.class);
+
         addOtherOrderInfo(order, valetOrderParam, true);
     }
 
@@ -494,6 +547,9 @@ public class KwoTradeOrderService {
      * @return: void
      */
     public void acceptanceOrder(AcceptanceOrderParam param) {
+        if (param.getPrice().compareTo(param.getUnitPrice().multiply(param.getAmount())) != 0) {
+            throw new BusinessException("订单总金额不等于商品单价*订单总量!");
+        }
         KwoTradeOrder order = getById(param.getId());
         if (Objects.isNull(order)) {
             throw new BusinessException("Order not found");
@@ -508,7 +564,9 @@ public class KwoTradeOrderService {
         if (Objects.isNull(goods)) {
             throw new BusinessException("订单商品信息异常!");
         }
-        orderCheck(goods.getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getUnitPrice());
+        //受理订单总量-原订单总量=订单变化量
+        BigDecimal amount = param.getAmount().subtract(order.getAmount());
+        orderCheck(goods.getGoodsId(), param.getTrading(), param.getPrice(), amount, param.getUnitPrice(), true);
         //更新订单信息
         BeanUtils.copyProperties(param, order);
         String contractStatus = param.getContractInfo().getContractStatus();
@@ -527,8 +585,12 @@ public class KwoTradeOrderService {
         kwoTradeOrderContractService.insert(contract);
         //订单状态记录
         KwoTradeOrderTrack track = new KwoTradeOrderTrack();
-        track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo());
+        track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus());
         kwoTradeOrderTrackService.insert(track);
+        //更新库存
+        if (amount.compareTo(BigDecimal.ZERO) != 0) {
+            goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+        }
         //更新mongodb
         TradeOrderUpdateParam updateParam = BeanUtils.copyProperties(param, TradeOrderUpdateParam.class);
         updateParam.setTOrderId(param.getId()).setStatus(order.getStatus()).setContractId(contractInfo.getContractId())
@@ -561,11 +623,11 @@ public class KwoTradeOrderService {
         kwoTradeOrderMapper.updateById(order);
         //订单状态记录
         KwoTradeOrderTrack track = new KwoTradeOrderTrack();
-        track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setRemark(param.getRemark());
+        track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setRemark(param.getRemark()).setStatus(order.getStatus());
         kwoTradeOrderTrackService.insert(track);
         //释放商品库存
         KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(order.getId());
-        goodsInfoService.updateGoodsAmount(goods.getGoodsId(),order.getAmount());
+        goodsInfoService.updateGoodsAmount(goods.getGoodsId(), order.getAmount().negate());
         //mongodb更新订单状态
         TradeOrderUpdateParam updateParam = new TradeOrderUpdateParam();
         updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
@@ -601,16 +663,63 @@ public class KwoTradeOrderService {
      * @return: void
      */
     public void completeOrder(CompleteOrderParam param) {
+        KwoTradeOrder order = getById(param.getId());
+        if (Objects.isNull(order)) {
+            throw new BusinessException("Order not found");
+        }
+        if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
+            throw new BusinessException("执行中的订单才能完结订单!");
+        }
+        if (kwoTradeOrderUnitService.entMatch(param.getId(),LoginUserHolder.getEntId(),DictEnum.TORDER_UNIT_TYPE_2.getValue())){
+            throw new BusinessException("无订单操作权限!");
+        }
+        KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(param.getId());
+        if (Objects.isNull(goods)) {
+            throw new BusinessException("商品信息异常!");
+        }
+        order.setActualAmount(param.getActualAmount()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
+        kwoTradeOrderMapper.updateById(order);
+        //订单状态记录
+        KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+        track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setRemark(param.getRemark()).setStatus(order.getStatus());
+        kwoTradeOrderTrackService.insert(track);
+        //更新库存
+        BigDecimal amount = param.getActualAmount().subtract(order.getAmount());
+        goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+        //mongodb更新订单状态
+        TradeOrderUpdateParam updateParam = new TradeOrderUpdateParam();
+        updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
+        saveMongoDb(3, updateParam);
 
     }
 
 
-    public void export(CompleteOrderParam param) {
-
-    }
-
-    public void batchDelete(List<Long> ids) {
-
+    /**
+     * @desc: 批量删除
+     * @author: yzc
+     * @date: 2023-07-17 20:35
+     * @Param param:
+     * @return: void
+     */
+    public void batchDelete(BatchDeleteParam param) {
+        List<Long> ids = param.getIds();
+        LambdaQueryWrapper<KwoTradeOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwoTradeOrder::getId, ids).ne(KwoTradeOrder::getStatus, 0).eq(KwoTradeOrder::getDelFlag, Global.NO);
+        List<KwoTradeOrder> list = kwoTradeOrderMapper.selectList(wrapper);
+        if (CollectionUtils.isNotEmpty(list)) {
+            throw new BusinessException("删除操作仅针对“已保存”状态的订单");
+        }
+        if (kwoTradeOrderUnitService.entBatchMatch(ids, LoginUserHolder.getEntId(), String.valueOf(param.getOrderType()))) {
+            throw new BusinessException("无订单操作权限!");
+        }
+        LambdaUpdateWrapper<KwoTradeOrder> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(KwoTradeOrder::getDelFlag, Global.YES).in(KwoTradeOrder::getId, ids);
+        kwoTradeOrderMapper.update(null, updateWrapper);
+        kwoTradeOrderGoodsService.delByOrderIds(ids);
+        kwoTradeOrderUnitService.delByOrderIds(ids);
+        kwoTradeOrderAddressService.delByOrderIds(ids);
+        kwoTradeOrderContractService.delByOrderIds(ids);
     }
 
     /**

+ 46 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderUnitService.java

@@ -3,6 +3,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.core.utils.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.order.dao.KwoTradeOrderUnitMapper;
 import com.sckw.order.model.KwoTradeOrderUnit;
@@ -53,6 +54,23 @@ public class KwoTradeOrderUnitService {
         return Objects.isNull(kwoTradeOrderUnitMapper.selectOne(wrapper));
     }
 
+    /**
+     * @desc: 批量匹配
+     * @author: yzc
+     * @date: 2023-07-18 16:46
+     * @Param orderIds:
+     * @Param entId:
+     * @Param unitType:
+     * @return: java.lang.Boolean
+     */
+    public Boolean entBatchMatch(List<Long> orderIds, Long entId, String unitType) {
+        LambdaQueryWrapper<KwoTradeOrderUnit> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwoTradeOrderUnit::getTopEntId, entId).in(KwoTradeOrderUnit::getTOrderId, orderIds)
+                .eq(KwoTradeOrderUnit::getUnitType, unitType).eq(KwoTradeOrderUnit::getDelFlag, Global.NO);
+        List<KwoTradeOrderUnit> list = kwoTradeOrderUnitMapper.selectList(wrapper);
+        return CollectionUtils.isEmpty(list) || orderIds.size() != list.size();
+    }
+
     /**
      * @desc: 根据orderId删除
      * @author: yzc
@@ -66,4 +84,32 @@ public class KwoTradeOrderUnitService {
                 .set(KwoTradeOrderUnit::getDelFlag, Global.YES);
         kwoTradeOrderUnitMapper.update(null, wrapper);
     }
+
+    /**
+     * @desc: 根据orderId获取
+     * @author: yzc
+     * @date: 2023-07-18 11:23
+     * @Param torderId:
+     * @return: java.util.List<com.sckw.order.model.KwoTradeOrderUnit>
+     */
+    public List<KwoTradeOrderUnit> getByOrderId(Long torderId) {
+        LambdaQueryWrapper<KwoTradeOrderUnit> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwoTradeOrderUnit::getTOrderId, torderId).eq(KwoTradeOrderUnit::getDelFlag, Global.NO);
+        List<KwoTradeOrderUnit> list = kwoTradeOrderUnitMapper.selectList(wrapper);
+        return CollectionUtils.emptyIfNull(list);
+    }
+
+    /**
+     * @desc: 根据orderIds删除
+     * @author: yzc
+     * @date: 2023-07-18 16:49
+     * @Param orderIds:
+     * @return: void
+     */
+    public void delByOrderIds(List<Long> orderIds) {
+        LambdaUpdateWrapper<KwoTradeOrderUnit> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.in(KwoTradeOrderUnit::getTOrderId, orderIds).eq(KwoTradeOrderUnit::getDelFlag, Global.NO)
+                .set(KwoTradeOrderUnit::getDelFlag, Global.YES);
+        kwoTradeOrderUnitMapper.update(null, wrapper);
+    }
 }

+ 2 - 2
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java

@@ -99,7 +99,7 @@ public class KwOrderService {
         Criteria criteria = new Criteria();
         criteria.and("delFlag").is(0);
         //销售订单
-        if (Objects.equals(params.getOrderType(), 1)) {
+        if (Objects.equals(params.getOrderType(), 2)) {
             criteria.and("supplyTopEntId").is(entId);
         } else {
             //采购订单
@@ -202,7 +202,7 @@ public class KwOrderService {
             criteria.and("tOrderId").in(params.getIds()).and("delFlag").is(0);
             query.addCriteria(criteria);
             //销售订单
-            if (Objects.equals(params.getOrderType(), 1)) {
+            if (Objects.equals(params.getOrderType(), 2)) {
                 criteria.and("supplyTopEntId").is(entId);
             } else {
                 //采购订单

+ 1 - 1
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/param/TradeOrderListStatisticParam.java

@@ -22,7 +22,7 @@ import java.util.List;
 public class TradeOrderListStatisticParam {
 
     /**
-     * 订单类型(1销售订单、2采购订单)
+     * 订单类型(2销售订单、1采购订单)
      */
     @Min(value = 1, message = "非法订单类型")
     @Max(value = 2, message = "非法订单类型")