xucaiqin il y a 3 semaines
Parent
commit
c18b2ce952

+ 45 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/task/TradeOrderTask.java

@@ -4,17 +4,20 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.NumberUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.model.enums.LogisticsOrderV1Enum;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.BaseResult;
+import com.sckw.order.api.model.TradeOrderDto;
 import com.sckw.order.dao.KwoTradeOrderGoodsMapper;
 import com.sckw.order.dao.KwoTradeOrderMapper;
 import com.sckw.order.dao.KwoTradeOrderUnitMapper;
 import com.sckw.order.enums.TradeOrderStatusEnum;
 import com.sckw.order.model.KwoTradeOrder;
+import com.sckw.order.model.KwoTradeOrderArchive;
 import com.sckw.order.model.KwoTradeOrderGoods;
 import com.sckw.order.model.KwoTradeOrderUnit;
 import com.sckw.order.serivce.KwoTradeOrderArchiveService;
@@ -22,7 +25,9 @@ import com.sckw.payment.api.dubbo.PaymentDubboService;
 import com.sckw.payment.api.feign.PaymentFeignService;
 import com.sckw.payment.api.model.feign.WalletPrepaidDto;
 import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
 import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.DictProduct;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.param.OrderFinishParam;
 import com.sckw.transport.api.model.vo.KwtLogisticsOrderVO;
@@ -34,7 +39,10 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
@@ -69,6 +77,42 @@ public class TradeOrderTask {
     private PaymentFeignService paymentFeignService;
     private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 2, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<>(20));
 
+    @Scheduled(cron = "0 0/10 * * * ?")
+    public void task2() {
+        List<TradeOrderDto> tradeOrderDtos = kwoTradeOrderMapper.joinSelect();
+        if (CollUtil.isNotEmpty(tradeOrderDtos)) {
+            Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.GOODS_SPEC.getType()));
+            Map<String, String> goodsSpecMap = dict.get(DictTypeEnum.GOODS_SPEC.getType());
+
+            Map<Long, KwpGoods> goodsByIds = goodsInfoService.getGoodsByIds(tradeOrderDtos.stream().map(TradeOrderDto::getGoodsId).toList());
+            List<KwoTradeOrderArchive> list = tradeOrderDtos.stream().map(d -> {
+                KwoTradeOrderArchive kwoTradeOrderArchive = new KwoTradeOrderArchive();
+                kwoTradeOrderArchive.setTradeOrderId(d.getId());
+                kwoTradeOrderArchive.setGoodsId(d.getGoodsId());
+                KwpGoods kwpGoods = goodsByIds.get(d.getGoodsId());
+                if (Objects.nonNull(kwpGoods)) {
+                    DictProduct dictProduct = remoteSystemService.queryProductName(kwpGoods.getGoodsType());
+                    if (Objects.nonNull(dictProduct)) {
+                        kwoTradeOrderArchive.setProductName(dictProduct.getLabel());
+                    }
+                    kwoTradeOrderArchive.setProductSpec(goodsSpecMap.get(kwpGoods.getSpec()));
+                }
+
+                kwoTradeOrderArchive.setUnitPrice(d.getUnitPrice());
+                kwoTradeOrderArchive.setAmount(d.getAmount());
+                return kwoTradeOrderArchive;
+
+            }).toList();
+            kwoTradeOrderArchiveService.saveBatch(list);
+            for (TradeOrderDto tradeOrderDto : tradeOrderDtos) {
+                KwoTradeOrder kwoTradeOrder = new KwoTradeOrder();
+                kwoTradeOrder.setId(tradeOrderDto.getId());
+                kwoTradeOrder.setArchiveFlag(1);
+                kwoTradeOrderMapper.updateById(kwoTradeOrder);
+            }
+        }
+    }
+
     @Scheduled(cron = "0 0/5 * * * ?")
     public void task() {
         log.info("定时任务");

+ 6 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml

@@ -1015,9 +1015,11 @@
                d.firm_name                                 entName
         from kwo_trade_order kto
                  inner JOIN kwo_trade_order_unit d ON kto.id = d.t_order_id AND d.unit_type = '1' AND d.del_flag = 0
+                inner join kwo_trade_order_unit ku on kto.id = ku.t_order_id and ku.unit_type = '2' and ku.del_flag = 0
         <where>
             kto.del_flag = 0
               and kto.status = 4
+            and ku.ent_id in (538038314096136193,538039617157337089,538040297439891457)
             group by kto.id,
                      d.firm_name
         </where>
@@ -1027,9 +1029,11 @@
         select
         sum(kto.price)                           as amount
         from kwo_trade_order kto
+        inner join kwo_trade_order_unit ku on kto.id = ku.t_order_id and ku.unit_type = '2' and ku.del_flag = 0
         <where>
             kto.del_flag = 0
             and kto.status = 4
+            and ku.ent_id in (538038314096136193,538039617157337089,538040297439891457)
         </where>
     </select>
 
@@ -1040,10 +1044,12 @@
                ktog.unit_price
         from kwo_trade_order kto
                  inner join kwo_trade_order_goods ktog on kto.id = ktog.t_order_id and ktog.del_flag = 0
+        inner join kwo_trade_order_unit ku on kto.id = ku.t_order_id and ku.unit_type = '2' and ku.del_flag = 0
         <where>
             kto.del_flag = 0
               and kto.archive_flag != 1
               and kto.status = 4
+              and ku.ent_id in (538038314096136193,538039617157337089,538040297439891457)
             limit 20
         </where>
     </select>

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderV1Mapper.java

@@ -10,6 +10,7 @@ import com.sckw.transport.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -167,6 +168,6 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
      */
     int findWaybillOrderCountByLOrderId(@Param("lOrderId") Long lOrderId);
 
-    WaybillOrderSaleDto saleSum(@Param("list") List<String> list);
+    WaybillOrderSaleDto saleSum(@Param("list") List<String> list, @Param("date")LocalDateTime date,@Param("end")LocalDateTime end);
 
 }

+ 15 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -88,8 +88,10 @@ import org.springframework.web.bind.annotation.RequestParam;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicReference;
@@ -3494,10 +3496,13 @@ public class KwtWaybillOrderV1Service {
     }
 
     public WaybillOrderSaleVo saleSum() {
+        LocalDate now = LocalDate.now();
+        LocalDateTime localDateTime = now.atStartOfDay();
+        LocalDateTime startOfTomorrow = now.plusDays(1).atStartOfDay();
         //石灰石
-        WaybillOrderSaleDto waybillOrderSaleDto = waybillOrderV1Dao.saleSum(List.of("002", "0001", "0002", "0003", "0004", "0005", "0006"));
+        WaybillOrderSaleDto waybillOrderSaleDto = waybillOrderV1Dao.saleSum(List.of("002", "0001", "0002", "0003", "0004", "0005", "0006"),localDateTime,startOfTomorrow);
         //氧化钙
-        WaybillOrderSaleDto waybillOrderSaleDto2 = waybillOrderV1Dao.saleSum(List.of("003", "0007", "0008", "0009"));
+        WaybillOrderSaleDto waybillOrderSaleDto2 = waybillOrderV1Dao.saleSum(List.of("003", "0007", "0008", "0009"),localDateTime,startOfTomorrow);
         WaybillOrderSaleVo waybillOrderSaleVo = new WaybillOrderSaleVo();
         waybillOrderSaleVo.setShsChl(Objects.nonNull(waybillOrderSaleDto) ? waybillOrderSaleDto.getChl() : BigDecimal.ZERO);
         waybillOrderSaleVo.setShsXsl(Objects.nonNull(waybillOrderSaleDto) ? waybillOrderSaleDto.getXsl() : BigDecimal.ZERO);
@@ -5720,7 +5725,7 @@ public class KwtWaybillOrderV1Service {
             log.debug("selectMinStatusEarliestNode: 节点列表为空,返回 null");
             return null;
         }
-        
+
         // 2. 提取最小原始状态码
         // 在同一阶段映射下,可能存在多个原始业务状态,取数值最小的作为基准(通常代表初始状态)
         Integer minStatus = nodes.stream()
@@ -5728,35 +5733,35 @@ public class KwtWaybillOrderV1Service {
                 .filter(Objects::nonNull)
                 .min(Integer::compareTo)
                 .orElse(null);
-                
+
         if (Objects.isNull(minStatus)) {
             log.warn("selectMinStatusEarliestNode: 无法从节点列表中提取有效的最小状态码,节点数量: {}", nodes.size());
             return null;
         }
         log.debug("selectMinStatusEarliestNode: 提取到最小状态码: {}", minStatus);
-        
+
         // 3. 筛选具有最小状态码且创建时间最早的节点
         WaybillOrderNodeVo.WaybillOrderNode selected = nodes.stream()
                 .filter(node -> Objects.equals(node.getOrderStatus(), minStatus))
                 .min(Comparator.comparing(node -> parseWaybillNodeCreateTime(node.getCreateTime())))
                 .orElse(null);
-                
+
         if (Objects.isNull(selected)) {
             log.warn("selectMinStatusEarliestNode: 状态码为 {} 的节点中未找到有效创建时间的节点", minStatus);
             return null;
         }
-        log.debug("selectMinStatusEarliestNode: 选中节点 ID: {}, 状态: {}, 创建时间: {}", 
+        log.debug("selectMinStatusEarliestNode: 选中节点 ID: {}, 状态: {}, 创建时间: {}",
                 selected.getId(), selected.getOrderStatus(), selected.getCreateTime());
-        
+
         // 4. 映射前端时间轴阶段信息
         // 将原始业务状态转换为前端展示用的阶段序号(phaseOrder)和阶段名称(phaseLabel)
         WaybillTimelinePhaseEnum.resolve(minStatus).ifPresent(phase -> {
-            log.debug("selectMinStatusEarliestNode: 映射前端阶段,原始状态: {} -> 阶段序号: {}, 阶段名称: {}", 
+            log.debug("selectMinStatusEarliestNode: 映射前端阶段,原始状态: {} -> 阶段序号: {}, 阶段名称: {}",
                     minStatus, phase.getPhaseOrder(), phase.getPhaseLabel());
             selected.setOrderStatus(phase.getPhaseOrder());
             selected.setOrderStatusName(phase.getPhaseLabel());
         });
-        
+
         return selected;
     }
 

+ 4 - 2
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderV1Mapper.xml

@@ -528,11 +528,13 @@
                             ON klo.id = a.l_order_id AND klo.del_flag = 0
                  INNER JOIN kwt_logistics_order_goods klog
                             ON klog.l_order_id = a.l_order_id AND klog.del_flag = 0
+        inner JOIN kwt_logistics_order_unit d ON a.l_order_id = d.l_order_id AND d.unit_type = 1 AND d.del_flag = 0
         <where>
             a.del_flag = 0
               AND b.status = 25              -- 已完成
-              AND b.update_time >= CURDATE() -- 今日完成
-              AND b.update_time &lt; CURDATE() + INTERVAL 1 DAY
+              AND b.update_time >= #{date}
+              AND b.update_time &lt; #{end}
+                and d.ent_id in (538038314096136193,538039617157337089,538040297439891457)
             <if test="list != null and list.size() != 0">
                 AND klog.goods_type IN
                 <foreach collection="list" open="(" close=")" separator="," item="item">