Ver código fonte

1.采购订单草稿请求参数优化
2.app主界面贸易订单统计接口开发
3.贸易订单列表导出接口开发

yzc 1 ano atrás
pai
commit
f792ab7966

+ 13 - 6
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderMapper.java

@@ -4,10 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.core.model.vo.TableTop;
 import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
 import com.sckw.order.model.KwoTradeOrder;
-import com.sckw.order.model.dto.OrderListResDTO;
-import com.sckw.order.model.dto.TradeOrderListSelectDTO;
-import com.sckw.order.model.dto.WbTOrderExcelStsReqDTO;
-import com.sckw.order.model.dto.WbTOrderExcelStsResDTO;
+import com.sckw.order.model.dto.*;
+import com.sckw.order.model.vo.res.TradeOrderAppStatisticVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -60,7 +58,7 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
      */
     List<OrderListResDTO> tradeOrderSelect(@Param("query") TradeOrderListSelectDTO query,
                                            @Param("goodIds") List<Long> goodIds,
-                                           @Param("authUserIds")List<Long> authUserIds);
+                                           @Param("authUserIds") List<Long> authUserIds);
 
 
     /***
@@ -74,5 +72,14 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
      */
     List<TableTop> tradeOrderStatistic(@Param("query") TradeOrderListSelectDTO query,
                                        @Param("goodIds") List<Long> goodIds,
-                                       @Param("authUserIds")List<Long> authUserIds);
+                                       @Param("authUserIds") List<Long> authUserIds);
+
+    List<TradeOrderAppStatisticVO> appStatistic(@Param("query") TradeOrderAppStatisticParamDTO query,
+                                                @Param("statuses") List<Integer> statuses,
+                                                @Param("authUserIds") List<Long> authUserIds);
+
+    List<OrderListResDTO> tradeOrderExport(@Param("query") TradeOrderListSelectDTO query,
+                                           @Param("goodIds") List<Long> goodIds,
+                                           @Param("authUserIds") List<Long> authUserIds,
+                                           @Param("ids") List<Long> ids);
 }

+ 35 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TradeOrderAppStatisticParamDTO.java

@@ -0,0 +1,35 @@
+package com.sckw.order.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+/**
+ * @author: yzc
+ * @date: 2024-03-15  08:57
+ * @desc: app主界面贸易订单统计请求参数DTO
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class TradeOrderAppStatisticParamDTO {
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 订单类型(1采购订单、2销售订单)
+     */
+    private Integer orderType;
+
+    /**
+     * 是否主账号(0是/1否)
+     */
+    private Integer isMain;
+
+
+}

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

@@ -98,6 +98,5 @@ public class AddressInfo {
     /**
      * 地址排序
      */
-    @NotNull(message = "地址排序不能为空")
     private Integer sort;
 }

+ 28 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TradeOrderAppStatisticVO.java

@@ -0,0 +1,28 @@
+package com.sckw.order.model.vo.res;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+/**
+ * @desc: 贸易订单主界面统计
+ * @author: yzc
+ * @date: 2023-08-21 17:35
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class TradeOrderAppStatisticVO {
+
+    /**
+     * 状态值
+     */
+    private Integer value;
+
+    /**
+     * 统计数据
+     */
+    private Integer total;
+}

+ 236 - 53
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -21,6 +21,7 @@ import com.sckw.core.model.enums.CooperateTypeEnum;
 import com.sckw.core.model.enums.OrderRuleEnum;
 import com.sckw.core.model.enums.RedisOrderGenerateEnum;
 import com.sckw.core.model.page.PageRes;
+import com.sckw.core.model.page.PageResult;
 import com.sckw.core.model.vo.TableBottom;
 import com.sckw.core.model.vo.TableStatisticRes;
 import com.sckw.core.model.vo.TableTop;
@@ -143,7 +144,7 @@ public class KwoTradeOrderService {
                 .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
                 .setSource(OrderSourceEnum.PURCHASE.getType()).setStatus(OrderStatusEnum.SAVED.getCode());
         kwoTradeOrderMapper.insert(order);
-        addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false);
+        addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, true);
     }
 
     /**
@@ -155,7 +156,7 @@ public class KwoTradeOrderService {
      * @Param isUpdate:
      * @return: void
      */
-    private void addOtherOrderInfo(KwoTradeOrder tradeOrder, ValetOrderParam param, Boolean isUpdate) {
+    private void addOtherOrderInfo(KwoTradeOrder tradeOrder, ValetOrderParam param, Boolean isUpdate, boolean isDraft) {
         Long id = tradeOrder.getId();
         String tOrderNo = tradeOrder.getTOrderNo();
         SckwTradeOrder order = new SckwTradeOrder();
@@ -164,10 +165,10 @@ public class KwoTradeOrderService {
                 .setUpdateByName(LoginUserHolder.getUserName())
                 .setTOrderId(id)
                 .setAssociateStatement(0)
-                .setPrice(Objects.isNull(tradeOrder.getPrice())?null:tradeOrder.getPrice().doubleValue())
-                .setAmount(Objects.isNull(tradeOrder.getAmount())?null:tradeOrder.getAmount().doubleValue())
-                .setEntrustAmount(Objects.isNull(tradeOrder.getEntrustAmount())?null:tradeOrder.getEntrustAmount().doubleValue())
-                .setActualAmount(Objects.isNull(tradeOrder.getActualAmount())?null:tradeOrder.getActualAmount().doubleValue());
+                .setPrice(Objects.isNull(tradeOrder.getPrice()) ? null : tradeOrder.getPrice().doubleValue())
+                .setAmount(Objects.isNull(tradeOrder.getAmount()) ? null : tradeOrder.getAmount().doubleValue())
+                .setEntrustAmount(Objects.isNull(tradeOrder.getEntrustAmount()) ? null : tradeOrder.getEntrustAmount().doubleValue())
+                .setActualAmount(Objects.isNull(tradeOrder.getActualAmount()) ? null : tradeOrder.getActualAmount().doubleValue());
 
         BeanUtil.copyProperties(tradeOrder, order);
 
@@ -241,25 +242,27 @@ public class KwoTradeOrderService {
         List<AddressInfo> addressInfos = param.getAddressInfo();
         if (CollUtil.isNotEmpty(addressInfos)) {
             BigDecimal amount = Objects.isNull(param.getAmount()) ? BigDecimal.ZERO : param.getAmount();
-            BigDecimal totalLoadAmount = BigDecimal.ZERO;
-            BigDecimal totalUnloadAmount = BigDecimal.ZERO;
-            boolean loadFlag = false;
-            boolean unloadFlag = false;
-            for (AddressInfo e : addressInfos) {
-                BigDecimal addressAmount = Objects.isNull(e.getAmount()) ? BigDecimal.ZERO : e.getAmount();
-                if (Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
-                    totalLoadAmount = totalLoadAmount.add(addressAmount);
-                    loadFlag = true;
-                } else {
-                    totalUnloadAmount = totalUnloadAmount.add(addressAmount);
-                    unloadFlag = true;
+            if (!isDraft) {
+                BigDecimal totalLoadAmount = BigDecimal.ZERO;
+                BigDecimal totalUnloadAmount = BigDecimal.ZERO;
+                boolean loadFlag = false;
+                boolean unloadFlag = false;
+                for (AddressInfo e : addressInfos) {
+                    BigDecimal addressAmount = Objects.isNull(e.getAmount()) ? BigDecimal.ZERO : e.getAmount();
+                    if (Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
+                        totalLoadAmount = totalLoadAmount.add(addressAmount);
+                        loadFlag = true;
+                    } else {
+                        totalUnloadAmount = totalUnloadAmount.add(addressAmount);
+                        unloadFlag = true;
+                    }
+                }
+                if (loadFlag && totalLoadAmount.compareTo(amount) != 0) {
+                    throw new BusinessException("装货分配量总量与订单总量不符!");
+                }
+                if (unloadFlag && totalUnloadAmount.compareTo(amount) != 0) {
+                    throw new BusinessException("卸货分配量总量与订单总量不符!");
                 }
-            }
-            if (loadFlag && totalLoadAmount.compareTo(amount) != 0) {
-                throw new BusinessException("装货分配量总量与订单总量不符!");
-            }
-            if (unloadFlag && totalUnloadAmount.compareTo(amount) != 0) {
-                throw new BusinessException("卸货分配量总量与订单总量不符!");
             }
             AtomicInteger loadSort = new AtomicInteger(0);
             AtomicInteger unloadSort = new AtomicInteger(0);
@@ -342,7 +345,7 @@ public class KwoTradeOrderService {
                 .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
                 .setSource(OrderSourceEnum.SALE.getType()).setStatus(OrderStatusEnum.SAVED.getCode());
         kwoTradeOrderMapper.insert(order);
-        addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false);
+        addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, true);
     }
 
     /**
@@ -377,7 +380,7 @@ public class KwoTradeOrderService {
             throw new BusinessException(updateResult.getMsg());
         }
         //添加订单其他信息
-        addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false);
+        addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, false);
         //发送消息提醒
         submitOrderSendMsg(orderCheck, order.getTOrderNo());
     }
@@ -591,7 +594,7 @@ public class KwoTradeOrderService {
                 throw new BusinessException(freezeResult.getMsg());
             }
         }
-        addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false);
+        addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, false);
         //发送消息提醒
         submitOrderSendMsg(orderCheck, order.getTOrderNo());
     }
@@ -895,7 +898,7 @@ public class KwoTradeOrderService {
         kwoTradeOrderMapper.update(null, wrapper);
         ValetOrderParam valetOrderParam = BeanUtil.copyProperties(param, ValetOrderParam.class);
 
-        addOtherOrderInfo(order, valetOrderParam, true);
+        addOtherOrderInfo(order, valetOrderParam, true, false);
         //订单提交发送提醒消息
         if (Objects.equals(param.getOperateType(), 1)) {
             submitOrderSendMsg(orderCheck, order.getTOrderNo());
@@ -1577,6 +1580,13 @@ public class KwoTradeOrderService {
         return res;
     }
 
+    /**
+     * @param params
+     * @return com.sckw.core.model.page.PageRes
+     * @desc 贸易订单列表分页查询
+     * @author yzc
+     * @date 2024/3/15 8:51
+     */
     public PageRes tradeOrderSelect(TradeOrderListSelectParam params) {
         TradeOrderListSelectDTO dto = buildSelectParam(params);
         PageHelper.startPage(params.getPage(), params.getPageSize());
@@ -1588,10 +1598,13 @@ public class KwoTradeOrderService {
         }
         List<Long> goodIdList = new ArrayList<>();
         List<Long> contracIdList = new ArrayList<>();
+        List<Long> createByIds = new ArrayList<>();
         list.forEach(e -> {
             goodIdList.add(e.getGoodsId());
             contracIdList.add(e.getContractId());
+            createByIds.add(e.getCreateBy());
         });
+        Map<Long, UserCacheResDto> userMap = remoteSystemService.queryUserCacheMapByIds(createByIds);
         Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodIdList);
         Map<Long, ContractCommonInfoResDto> contractMap = remoteContractService.queryContractBaseInfo(contracIdList);
         Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(
@@ -1642,39 +1655,48 @@ public class KwoTradeOrderService {
                 });
                 vo.setLoadAddresses(unloadList);
             }
-            BigDecimal actualAmount = Objects.isNull(vo.getActualAmount()) ? BigDecimal.ZERO : vo.getActualAmount();
-            BigDecimal unitPrice = Objects.isNull(vo.getUnitPrice()) ? BigDecimal.ZERO : vo.getUnitPrice();
-            KwpGoods goods = goodsMap.get(vo.getGoodsId());
-            ContractCommonInfoResDto contract = contractMap.get(vo.getContractId());
-            vo.setStatusLabel(statusMap.get(String.valueOf(vo.getStatus())))
-                    .setTradingLabel(tradeMap.get(vo.getTrading()))
-                    .setTrading(tradeMap.get(vo.getTrading()))
-                    .setDeliveryTypeLabel(deliveryMap.get(vo.getDeliveryType()))
-                    .setDeliveryType(deliveryMap.get(vo.getDeliveryType()))
-                    .setPickupTypeLabel(pickupMap.get(vo.getPickupType()))
-                    .setSourceLabel(sourceMap.get(vo.getSource()))
-                    .setSource(sourceMap.get(vo.getSource()))
+            BigDecimal actualAmount = Objects.isNull(e.getActualAmount()) ? BigDecimal.ZERO : e.getActualAmount();
+            BigDecimal unitPrice = Objects.isNull(e.getUnitPrice()) ? BigDecimal.ZERO : e.getUnitPrice();
+            KwpGoods goods = goodsMap.get(e.getGoodsId());
+            ContractCommonInfoResDto contract = contractMap.get(e.getContractId());
+            UserCacheResDto userCache = userMap.get(e.getCreateBy());
+            vo.setStatusLabel(statusMap.get(String.valueOf(e.getStatus())))
+                    .setTradingLabel(tradeMap.get(e.getTrading()))
+                    .setTrading(tradeMap.get(e.getTrading()))
+                    .setDeliveryTypeLabel(deliveryMap.get(e.getDeliveryType()))
+                    .setDeliveryType(deliveryMap.get(e.getDeliveryType()))
+                    .setPickupTypeLabel(pickupMap.get(e.getPickupType()))
+                    .setSourceLabel(sourceMap.get(e.getSource()))
+                    .setSource(sourceMap.get(e.getSource()))
                     .setContractName(Objects.isNull(contract) ? null : contract.getContactName())
                     .setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName())
                     .setGoodsName(Objects.isNull(goods) ? null : goods.getName())
                     .setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec())
                     .setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate())
                     .setGoodsThumb(Objects.isNull(goods) ? null : goods.getThumb())
-                    .setWaitEntrustAmount(setScale(getWaitEntrustAmount(vo.getAmount(), vo.getEntrustAmount())))
+                    .setWaitEntrustAmount(setScale(getWaitEntrustAmount(e.getAmount(), e.getEntrustAmount())))
                     .setActualPrice(actualAmount.multiply(unitPrice).setScale(2, RoundingMode.HALF_UP))
-                    .setUnitPrice(setScale(vo.getUnitPrice()))
-                    .setPrice(setScale(vo.getPrice()))
-                    .setUnit(vo.getUnit())
-                    .setUnitLabel(unitType == null ? vo.getUnit() : (unitType.get(vo.getUnit()) == null ? vo.getUnit() : unitType.get(vo.getUnit()).getLabel()))
+                    .setUnitPrice(setScale(e.getUnitPrice()))
+                    .setPrice(setScale(e.getPrice()))
+                    .setUnit(e.getUnit())
+                    .setUnitLabel(unitType == null ? e.getUnit() : (unitType.get(e.getUnit()) == null ? e.getUnit() : unitType.get(e.getUnit()).getLabel()))
                     .setAmount(setScale(vo.getAmount()))
-                    .setEntrustAmount(setScale(vo.getEntrustAmount()))
-                    .setActualAmount(setScale(vo.getActualAmount()));
+                    .setEntrustAmount(setScale(e.getEntrustAmount()))
+                    .setActualAmount(setScale(e.getActualAmount()))
+                    .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName());
             result.add(vo);
         });
         PageInfo<OrderListResVO> pageInfo = new PageInfo<>(result);
         return PageRes.build(pageInfo, result);
     }
 
+    /**
+     * @param params
+     * @return com.sckw.order.model.dto.TradeOrderListSelectDTO
+     * @desc 构建贸易订单列表请求参数
+     * @author yzc
+     * @date 2024/3/15 8:52
+     */
     private TradeOrderListSelectDTO buildSelectParam(TradeOrderListStatisticParam params) {
         TradeOrderListSelectDTO dto = BeanUtil.copyProperties(params, TradeOrderListSelectDTO.class);
         dto.setEntId(LoginUserHolder.getEntId())
@@ -1738,6 +1760,13 @@ public class KwoTradeOrderService {
         return amount.subtract(entrustAmount);
     }
 
+    /**
+     * @param params
+     * @return com.sckw.core.model.vo.TableStatisticRes
+     * @desc 贸易订单列表统计
+     * @author yzc
+     * @date 2024/3/15 8:52
+     */
     public TableStatisticRes tradeOrderStatistic(TradeOrderListStatisticParam params) {
         TableStatisticRes res = new TableStatisticRes();
         TradeOrderListSelectDTO dto = buildSelectParam(params);
@@ -1767,21 +1796,175 @@ public class KwoTradeOrderService {
         return res;
     }
 
-    public String appStatistic(TradeOrderAppStatisticParam params) {
-
-        return null;
+    /**
+     * @desc: app主界面贸易订单统计
+     * @author: yzc
+     * @date: 2023-08-21 17:39
+     * @Param params:
+     * @return: java.util.List<com.sckw.order.model.vo.res.TradeOrderAppStatisticVO>
+     */
+    public List<TradeOrderAppStatisticVO> appStatistic(TradeOrderAppStatisticParam params) {
+        TradeOrderAppStatisticParamDTO dto = new TradeOrderAppStatisticParamDTO();
+        dto.setOrderType(params.getOrderType())
+                .setIsMain(LoginUserHolder.getIsMain())
+                .setEntId(LoginUserHolder.getEntId());
+        List<Integer> statuses = Arrays.asList(1, 4, 5, 7);
+        List<Long> authUserIds = LoginUserHolder.getAuthUserIdList();
+        List<TradeOrderAppStatisticVO> tableTops = kwoTradeOrderMapper.appStatistic(dto, statuses, authUserIds);
+        Map<Integer, Integer> map = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        if (CollUtil.isNotEmpty(tableTops)) {
+            map = tableTops.stream().collect(Collectors.toMap
+                    (TradeOrderAppStatisticVO::getValue, TradeOrderAppStatisticVO::getTotal, (k1, k2) -> k2));
+        }
+        List<TradeOrderAppStatisticVO> statistics = new ArrayList<>();
+        for (Integer e : statuses) {
+            int total = Objects.isNull(map.get(e)) ? 0 : map.get(e);
+            TradeOrderAppStatisticVO statistic = new TradeOrderAppStatisticVO();
+            statistic.setValue(e).setTotal(total);
+            statistics.add(statistic);
+        }
+        return statistics;
     }
 
+    /**
+     * @desc: 贸易订单列表导出
+     * @author: yzc
+     * @date: 2023-07-17 18:05
+     * @Param params:
+     * @return: java.util.List<com.sckw.report.service.param.TradeOrderListExport>
+     */
     public List<TradeOrderListExport> export(TradeOrderListExportParam params) {
-
-        return null;
+        TradeOrderListSelectDTO dto = new TradeOrderListSelectDTO();
+        List<Long> ids = new ArrayList<>();
+        if (StringUtils.isNotBlank(params.getIds())) {
+            ids = StringUtils.splitStrToList(params.getIds(), ",", Long.class);
+            dto.setEntId(LoginUserHolder.getEntId()).setOrderType(params.getOrderType());
+        } else {
+            dto = buildSelectParam(params);
+        }
+        List<OrderListResDTO> orders = kwoTradeOrderMapper.tradeOrderExport(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList(), ids);
+        if (CollUtil.isEmpty(orders)) {
+            return Collections.emptyList();
+        }
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(
+                DictTypeEnum.TORDER_STATUS.getType(), DictTypeEnum.PICKUP_TYPE.getType(), DictTypeEnum.DELIVERY_TYPE.getType(),
+                DictTypeEnum.TORDER_SOURCE.getType(), DictTypeEnum.TRADE_TYPE.getType()));
+        Map<String, String> statusMap, pickupMap, deliveryMap, sourceMap, tradeMap;
+        if (CollUtil.isNotEmpty(dict)) {
+            statusMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_STATUS.getType())) ?
+                    dict.get(DictTypeEnum.TORDER_STATUS.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            pickupMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.PICKUP_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.PICKUP_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            deliveryMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.DELIVERY_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.DELIVERY_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            sourceMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_SOURCE.getType())) ?
+                    dict.get(DictTypeEnum.TORDER_SOURCE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            tradeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.TRADE_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        } else {
+            statusMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            pickupMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            deliveryMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            sourceMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            tradeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        }
+        List<Long> goodIdList = new ArrayList<>();
+        List<Long> contracIdList = new ArrayList<>();
+        List<Long> createByIds = new ArrayList<>();
+        orders.forEach(e -> {
+            goodIdList.add(e.getGoodsId());
+            contracIdList.add(e.getContractId());
+            createByIds.add(e.getCreateBy());
+        });
+        Map<Long, UserCacheResDto> userMap = remoteSystemService.queryUserCacheMapByIds(createByIds);
+        Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodIdList);
+        Map<Long, ContractCommonInfoResDto> contractMap = remoteContractService.queryContractBaseInfo(contracIdList);
+        List<TradeOrderListExport> list = new ArrayList<>();
+        orders.forEach(e -> {
+            TradeOrderListExport vo = BeanUtil.copyProperties(e, TradeOrderListExport.class);
+            List<LoadAddressDTO> loadAddresses = e.getLoadAddresses();
+            if (CollUtil.isNotEmpty(loadAddresses)) {
+                StringBuilder loadName = new StringBuilder();
+                StringBuilder loadDetailAddressInfo = new StringBuilder();
+                for (int i = 0; i < loadAddresses.size(); i++) {
+                    LoadAddressDTO l = loadAddresses.get(i);
+                    if (i != loadAddresses.size() - 1) {
+                        loadName.append(l.getLoadName()).append(",");
+                        loadDetailAddressInfo.append(l.getLoadCityName()).append(l.getLoadDetailAddress()).append(",");
+                    } else {
+                        loadName.append(l.getLoadName());
+                        loadDetailAddressInfo.append(l.getLoadCityName()).append(l.getLoadDetailAddress());
+                    }
+                }
+                vo.setLoadName(loadName.toString()).setLoadDetailAddressInfo(loadDetailAddressInfo.toString());
+            }
+            List<UnloadAddressDTO> unloadAddresses = e.getUnloadAddresses();
+            if (CollUtil.isNotEmpty(unloadAddresses)) {
+                StringBuilder unloadName = new StringBuilder();
+                StringBuilder unloadDetailAddressInfo = new StringBuilder();
+                for (int i = 0; i < unloadAddresses.size(); i++) {
+                    UnloadAddressDTO ul = unloadAddresses.get(i);
+                    if (i != unloadAddresses.size() - 1) {
+                        unloadName.append(ul.getUnloadName()).append(",");
+                        unloadDetailAddressInfo.append(ul.getUnloadCityName()).append(ul.getUnloadDetailAddress()).append(",");
+                    } else {
+                        unloadName.append(ul.getUnloadName());
+                        unloadDetailAddressInfo.append(ul.getUnloadCityName()).append(ul.getUnloadDetailAddress());
+                    }
+                }
+                vo.setUnloadName(unloadName.toString()).setUnloadDetailAddressInfo(unloadDetailAddressInfo.toString());
+            }
+            KwpGoods goods = goodsMap.get(e.getGoodsId());
+            ContractCommonInfoResDto contract = contractMap.get(e.getContractId());
+            UserCacheResDto userCache = userMap.get(e.getCreateBy());
+            BigDecimal waitEntrustAmount = getWaitEntrustAmount(e.getAmount(), e.getEntrustAmount());
+            vo.setStatus(statusMap.get(String.valueOf(vo.getStatus())))
+                    .setGoodsName(Objects.isNull(goods) ? null : goods.getName())
+                    .setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec())
+                    .setUnitPrice(String.valueOf(setScale(e.getUnitPrice())))
+                    .setAmount(String.valueOf(setScale(e.getAmount())))
+                    .setPrice(String.valueOf(setScale(e.getPrice())))
+                    .setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate())
+                    .setEntrustAmount(String.valueOf(setScale(e.getEntrustAmount())))
+                    .setActualAmount(String.valueOf(setScale(e.getActualAmount())))
+                    .setWaitEntrustAmount(String.valueOf(setScale(waitEntrustAmount)))
+                    .setPickupType(pickupMap.get(e.getPickupType()))
+                    .setDeliveryType(deliveryMap.get(e.getDeliveryType()))
+                    .setSource(sourceMap.get(e.getSource()))
+                    .setTrading(tradeMap.get(e.getTrading()))
+                    .setStartTime(Objects.isNull(e.getStartTime()) ? null : e.getStartTime().toString())
+                    .setEndTime(Objects.isNull(e.getEndTime()) ? null : e.getEndTime().toString())
+                    .setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName())
+                    .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName())
+                    .setCreateTime(com.sckw.excel.utils.DateUtil.getDateTime(e.getCreateTime()));
+            list.add(vo);
+        });
+        return list;
     }
 
-    public String tradeOrderStatementList(TradeOrderStatementList params) {
+    /**
+     * @desc: 贸易订单对账单分页列表查询
+     * @author: yzc
+     * @date: 2023-07-20 15:03
+     * @Param params:
+     * @return: com.sckw.core.model.page.PageResult
+     */
+    public PageResult tradeOrderStatementList(TradeOrderStatementList params) {
+
+
         return null;
     }
 
+    /**
+     * @desc: 合同关联订单列表
+     * @author: yzc
+     * @date: 2023-07-27 17:05
+     * @Param params:
+     * @return: com.sckw.core.model.page.PageResult
+     */
     public String tradeOrderContractList(TradeOrderContractParam params) {
+
+
         return null;
     }
 }

+ 298 - 33
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml

@@ -105,8 +105,10 @@
             a.del_flag = 0
 --          数据权限匹配
             <if test="query.isMain == 0">
-                and (
-                (a.ent_id = #{query.entId}
+                and ((
+                <if test="query.entId != null">
+                    a.ent_id = #{query.entId}
+                </if>
                 <if test="authUserIds != null and authUserIds.size() > 0">
                     and a.create_by in
                     <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
@@ -115,30 +117,44 @@
                 </if>
                 )or
                 (<if test="query.orderType == 1">
-                    d.top_ent_id = #{query.entId}
-                    and d.contacts_id in
-                    <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                        #{authUserId}
-                    </foreach>
+                    <if test="query.entId != null">
+                        d.top_ent_id = #{query.entId}
+                    </if>
+                    <if test="authUserIds != null and authUserIds.size() > 0">
+                        and d.contacts_id in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
+                    </if>
                 </if>
                 <if test="query.orderType == 2">
-                    e.top_ent_id = #{query.entId}
-                    and e.contacts_id in
-                    <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                        #{authUserId}
-                    </foreach>
+                    <if test="query.entId != null">
+                        e.top_ent_id = #{query.entId}
+                    </if>
+                    <if test="authUserIds != null and authUserIds.size() > 0">
+                        and e.contacts_id in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
+                    </if>
                 </if>)
                 )
             </if>
             <if test="query.isMain == 1">
-                and (
-                (a.ent_id = #{query.entId})
+                and ((
+                <if test="query.entId != null">
+                    a.ent_id = #{query.entId}
+                </if>)
                 or
                 (<if test="query.orderType == 1">
-                    d.top_ent_id = #{query.entId}
+                    <if test="query.entId != null">
+                        d.top_ent_id = #{query.entId}
+                    </if>
                 </if>
                 <if test="query.orderType == 2">
-                    e.top_ent_id = #{query.entId}
+                    <if test="query.entId != null">
+                        e.top_ent_id = #{query.entId}
+                    </if>
                 </if>)
                 )
             </if>
@@ -202,8 +218,10 @@
         ORDER BY a.create_time DESC
     </select>
 
-    <select id="tradeOrderStatistic" resultType="com.sckw.core.model.vo.TableTop">
-        SELECT a.status AS `value`, COUNT(a.status) AS total
+    <select id="tradeOrderExport" resultMap="mainEntityMap">
+        SELECT
+        <include refid="Query_Column_List_Accept_Carriage">
+        </include>
         FROM kwo_trade_order a
         LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
         AND b.address_type = "1" AND b.del_flag = 0
@@ -219,8 +237,10 @@
             a.del_flag = 0
             --数据权限匹配
             <if test="query.isMain == 0">
-                and (
-                (a.ent_id = #{query.entId}
+                and ((
+                <if test="query.entId != null">
+                    a.ent_id = #{query.entId}
+                </if>
                 <if test="authUserIds != null and authUserIds.size() > 0">
                     and a.create_by in
                     <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
@@ -229,30 +249,190 @@
                 </if>
                 )or
                 (<if test="query.orderType == 1">
-                d.top_ent_id = #{query.entId}
-                and d.contacts_id in
-                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                    #{authUserId}
-                </foreach>
+                    <if test="query.entId != null">
+                        d.top_ent_id = #{query.entId}
+                    </if>
+                    <if test="authUserIds != null and authUserIds.size() > 0">
+                        and d.contacts_id in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
+                    </if>
+                </if>
+                <if test="query.orderType == 2">
+                    <if test="query.entId != null">
+                        e.top_ent_id = #{query.entId}
+                    </if>
+                    <if test="authUserIds != null and authUserIds.size() > 0">
+                        and e.contacts_id in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
+                    </if>
+                </if>)
+                )
             </if>
+            <if test="query.isMain == 1">
+                and ((
+                <if test="query.entId != null">
+                    a.ent_id = #{query.entId}
+                </if>)
+                or
+                (<if test="query.orderType == 1">
+                    <if test="query.entId != null">
+                        d.top_ent_id = #{query.entId}
+                    </if>
+                </if>
                 <if test="query.orderType == 2">
-                    e.top_ent_id = #{query.entId}
-                    and e.contacts_id in
+                    <if test="query.entId != null">
+                        e.top_ent_id = #{query.entId}
+                    </if>
+                </if>)
+                )
+            </if>
+            --状态匹配
+            <if test="query.status != null">
+                and a.status =#{query.status}
+                <if test="query.status == 0">
+                    --草稿状态只能创建订单的人能看
+                    and a.create_by = #{query.userId}
+                </if>
+            </if>
+            <if test="query.status == null">
+                -- 非草稿状态or草稿状态且是当前人
+                and (
+                a.status != 0
+                or (a.status = 0 and a.create_by = #{query.userId})
+                )
+            </if>
+            --关键词匹配
+            <if test="query.keywords != null and query.keywords != ''">
+                and (
+                a.t_order_no like concat('%', #{query.keywords}, '%')
+                or a.l_order_no like concat('%', #{query.keywords}, '%')
+                or d.firm_name like concat('%', #{query.keywords}, '%')
+                or e.firm_name like concat('%', #{query.keywords}, '%')
+                <if test="goodIds != null and goodIds.size() > 0">
+                    or g.goods_id in
+                    <foreach collection="goodIds" item="goodId" open="(" close=")" separator=",">
+                        #{goodId}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="query.createStartTime != null ">
+                and a.create_time &gt;= #{query.createStartTime}
+            </if>
+            <if test="query.createEndTime != null ">
+                and a.create_time &lt;= #{query.createEndTime}
+            </if>
+            <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
+                and b.city_code LIKE CONCAT(#{query.loadAddressCode}
+                , '%')
+            </if>
+            <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
+                and c.city_code LIKE CONCAT(#{query.unloadAddressCode}
+                , '%')
+            </if>
+            <if test="query.trading != null and query.trading != ''">
+                and a.trading =#{query.trading}
+            </if>
+            <if test="query.source != null and query.source != ''">
+                and a.source =#{query.source}
+            </if>
+            <if test="query.deliveryType != null and query.deliveryType != ''">
+                and a.delivery_type =#{query.deliveryType}
+            </if>
+            <if test="query.deliveryType != null and query.deliveryType != ''">
+                and a.delivery_type =#{query.deliveryType}
+            </if>
+--          指定贸易订单id导出
+            <if test="ids != null and ids.size() > 0">
+                and a.id in
+                <foreach collection="ids" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+                <if test="query.orderType == 1">
+                    <if test="query.entId != null">
+                        d.top_ent_id = #{query.entId}
+                    </if>
+                </if>
+                <if test="query.orderType == 2">
+                    <if test="query.entId != null">
+                        e.top_ent_id = #{query.entId}
+                    </if>
+                </if>
+            </if>
+        </where>
+        ORDER BY a.create_time DESC
+    </select>
+
+    <select id="tradeOrderStatistic" resultType="com.sckw.core.model.vo.TableTop">
+        SELECT a.status AS `value`, COUNT(a.status) AS total
+        FROM kwo_trade_order a
+        LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
+        AND b.address_type = "1" AND b.del_flag = 0
+        LEFT JOIN kwo_trade_order_address c ON a.id = c.t_order_id
+        AND c.address_type = "2" AND c.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
+        AND d.unit_type = "1" AND d.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
+        AND e.unit_type = "2" AND e.del_flag = 0
+        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+        <where>
+            a.del_flag = 0
+            --数据权限匹配
+            <if test="query.isMain == 0">
+                and ((
+                <if test="query.entId != null">
+                    a.ent_id = #{query.entId}
+                </if>
+                <if test="authUserIds != null and authUserIds.size() > 0">
+                    and a.create_by in
                     <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
                         #{authUserId}
                     </foreach>
+                </if>
+                )or
+                (<if test="query.orderType == 1">
+                    <if test="query.entId != null">
+                        d.top_ent_id = #{query.entId}
+                    </if>
+                    <if test="authUserIds != null and authUserIds.size() > 0">
+                        and d.contacts_id in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
+                    </if>
+                </if>
+                <if test="query.orderType == 2">
+                    <if test="query.entId != null">
+                        e.top_ent_id = #{query.entId}
+                    </if>
+                    <if test="authUserIds != null and authUserIds.size() > 0">
+                        and e.contacts_id in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
+                    </if>
                 </if>)
                 )
             </if>
             <if test="query.isMain == 1">
-                and (
-                (a.ent_id = #{query.entId})
+                and ((
+                <if test="query.entId != null">
+                    a.ent_id = #{query.entId}
+                </if>)
                 or
                 (<if test="query.orderType == 1">
-                d.top_ent_id = #{query.entId}
-            </if>
+                    <if test="query.entId != null">
+                        d.top_ent_id = #{query.entId}
+                    </if>
+                </if>
                 <if test="query.orderType == 2">
-                    e.top_ent_id = #{query.entId}
+                    <if test="query.entId != null">
+                        e.top_ent_id = #{query.entId}
+                    </if>
                 </if>)
                 )
             </if>
@@ -275,7 +455,6 @@
             <if test="query.keywords != null and query.keywords != ''">
                 and (
                 a.t_order_no like concat('%', #{query.keywords}, '%')
-                or a.l_order_no like concat('%', #{query.keywords}, '%')
                 or d.firm_name like concat('%', #{query.keywords}, '%')
                 or e.firm_name like concat('%', #{query.keywords}, '%')
                 <if test="goodIds != null and goodIds.size() > 0">
@@ -316,6 +495,92 @@
         GROUP BY a.status
     </select>
 
+    <select id="appStatistic" resultType="com.sckw.order.model.vo.res.TradeOrderAppStatisticVO">
+        SELECT a.status AS `value`, COUNT(a.status) AS total
+        FROM kwo_trade_order a
+        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
+        AND d.unit_type = "1" AND d.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
+        AND e.unit_type = "2" AND e.del_flag = 0
+        <where>
+            a.del_flag = 0
+            --数据权限匹配
+            <if test="query.isMain == 0">
+                and ((
+                <if test="query.entId != null">
+                    a.ent_id = #{query.entId}
+                </if>
+                <if test="authUserIds != null and authUserIds.size() > 0">
+                    and a.create_by in
+                    <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                        #{authUserId}
+                    </foreach>
+                </if>
+                )or
+                (<if test="query.orderType == 1">
+                    <if test="query.entId != null">
+                        d.top_ent_id = #{query.entId}
+                    </if>
+                    <if test="authUserIds != null and authUserIds.size() > 0">
+                        and d.contacts_id in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
+                    </if>
+                </if>
+                <if test="query.orderType == 2">
+                    <if test="query.entId != null">
+                        e.top_ent_id = #{query.entId}
+                    </if>
+                    <if test="authUserIds != null and authUserIds.size() > 0">
+                        and e.contacts_id in
+                        <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                            #{authUserId}
+                        </foreach>
+                    </if>
+                </if>)
+                )
+            </if>
+            <if test="query.isMain == 1">
+                and ((
+                <if test="query.entId != null">
+                    a.ent_id = #{query.entId}
+                </if>)
+                or
+                (<if test="query.orderType == 1">
+                    <if test="query.entId != null">
+                        d.top_ent_id = #{query.entId}
+                    </if>
+                </if>
+                <if test="query.orderType == 2">
+                    <if test="query.entId != null">
+                        e.top_ent_id = #{query.entId}
+                    </if>
+                </if>)
+                )
+            </if>
+            <if test="query.orderType == 1">
+                <if test="query.entId != null">
+                    d.top_ent_id = #{query.entId}
+                </if>
+            </if>
+            <if test="query.orderType == 2">
+                <if test="query.entId != null">
+                    e.top_ent_id = #{query.entId}
+                </if>
+            </if>
+            --状态匹配
+            <if test="statuses != null and statuses.size() > 0">
+                and a.status in
+                <foreach collection="statuses" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        GROUP BY a.status
+
+    </select>
+
     <select id="getMaxOrderNoByDate" resultType="java.lang.String">
         SELECT MAX(t_order_no)
         FROM kwo_trade_order