Selaa lähdekoodia

出入库流水卡顿优化

yzc 1 vuosi sitten
vanhempi
commit
41dc64dd74

+ 13 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java

@@ -248,6 +248,10 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
         json.put("arrivalId", arrival.getId());
         json.put("arrivalCode", arrival.getCode());
         stockWait.setVictoriatouristJson(JSONObject.toJSONString(json,JSONWriter.Feature.WriteLongAsString));
+
+        stockWait.setPurchaseId(purchase.getId());
+        stockWait.setDeliverGoodsId(deliverGoodsId);
+        stockWait.setArrivalId(arrival.getId());
         stockWaitService.save(stockWait);
 
         //取出到货明细
@@ -291,6 +295,15 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
                 PurchaseDetail byId2 = purchaseDetailMap.get(d.getPurchaseDetailId());
                 BigDecimal count = byId2.getCount();
                 stockWaitDetails.setPurchaseQuantity(count);
+
+                stockWaitDetails.setProductId(stockWait.getId());
+                stockWaitDetails.setDeliverGoodsId(stockWait.getDeliverGoodsId());
+                stockWaitDetails.setArrivalId(stockWait.getArrivalId());
+
+                stockWaitDetails.setPurchaseDetailId(d.getPurchaseDetailId());
+                stockWaitDetails.setDeliverGoodsDetailId(d.getDeliverGoodsDetailsId());
+                stockWaitDetails.setArrivalDetailId(d.getId());
+
                 stockWaitDetailsList.add(stockWaitDetails);
             }
 

+ 7 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/WmsServiceImpl.java

@@ -30,6 +30,7 @@ import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
 import com.fjhx.victoriatourist.service.order.OrderInfoService;
 import com.fjhx.victoriatourist.service.purchase.PurchaseBackService;
 import com.fjhx.victoriatourist.service.quality.QualityDetailsService;
+import com.fjhx.wms.entity.LogisticsInfosBo;
 import com.fjhx.wms.entity.QualityDetailsPo;
 import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
@@ -265,4 +266,10 @@ public class WmsServiceImpl implements WmsService {
         jdOrderDto.setJdOrderDetailsList(jdOrderDetailsList);
         jdOrderService.tellBackOrer(jdOrderDto);
     }
+
+    @Override
+    public List<LogisticsInfosBo> getLogisticsInfosByBusinessIds(List<Long> businessIds){
+        List<LogisticsInfos> list = logisticsInfosService.list(q -> q.in(LogisticsInfos::getBusinessId, businessIds));
+        return BeanUtil.copyToList(list, LogisticsInfosBo.class);
+    }
 }

+ 33 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/LogisticsInfosBo.java

@@ -0,0 +1,33 @@
+package com.fjhx.wms.entity;
+
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 物流信息
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+public class LogisticsInfosBo extends BasePo {
+
+    /**
+     * 业务id
+     */
+    private Long businessId;
+
+    /**
+     * 物流单号
+     */
+    private String code;
+
+    /**
+     * 物流公司编码
+     */
+    private String logisticsCompanyCode;
+}

+ 7 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockWait.java

@@ -48,4 +48,11 @@ public class StockWait extends BasePo {
      */
     private String victoriatouristJson;
 
+    /**
+     * 发货id
+     */
+    private Long deliverGoodsId;
+
+    private Long arrivalId;
+    private Long purchaseId;
 }

+ 7 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockWaitDetails.java

@@ -61,6 +61,13 @@ public class StockWaitDetails extends BasePo {
      */
     private Long businessId;
 
+    private Long purchaseDetailId;
+    private Long deliverGoodsDetailId;
+    private Long arrivalDetailId;
+    private Long deliverGoodsId;
+    private Long arrivalId;
+
+
     /**
      * 京东订单号
      */

+ 8 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockJournalDetailsVo.java

@@ -99,10 +99,18 @@ public class StockJournalDetailsVo extends StockJournalDetails {
     /**
      * 物流公司名称
      */
+    private String logisticsCompanyCode;
     private String logisticsCompanyName;
 
     /**
      * 合同号
      */
     private String contractCode;
+
+    private Long warehouseId;
+
+    /**
+     * 发货id
+     */
+    private Long deliverGoodsId;
 }

+ 3 - 0
hx-wms/src/main/java/com/fjhx/wms/service/WmsService.java

@@ -1,5 +1,6 @@
 package com.fjhx.wms.service;
 
+import com.fjhx.wms.entity.LogisticsInfosBo;
 import com.fjhx.wms.entity.QualityDetailsPo;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
 import com.fjhx.wms.entity.stock.po.StockWait;
@@ -62,4 +63,6 @@ public interface WmsService {
      * 京东订单待出库自动回告
      */
     void jdTellBackOrer(StockWaitDto dto);
+
+    List<LogisticsInfosBo> getLogisticsInfosByBusinessIds(List<Long> businessIds);
 }

+ 63 - 5
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockJournalDetailsServiceImpl.java

@@ -2,6 +2,7 @@ package com.fjhx.wms.service.stock.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -9,7 +10,10 @@ import com.fjhx.common.utils.Assert;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.item.util.excel.util.ExcelUtil;
+import com.fjhx.kd100.entity.company.po.CompanyInfo;
+import com.fjhx.kd100.service.company.CompanyInfoService;
 import com.fjhx.tenant.utils.DictUtils;
+import com.fjhx.wms.entity.LogisticsInfosBo;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecords;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecordsDetails;
 import com.fjhx.wms.entity.stock.bo.StockJournalDetailsExcelBo;
@@ -19,10 +23,13 @@ import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.po.*;
 import com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo;
 import com.fjhx.wms.entity.stock.vo.StockWaitVo;
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.mapper.stock.StockJournalDetailsMapper;
+import com.fjhx.wms.service.WmsService;
 import com.fjhx.wms.service.arrival.ArrivalStockRecordsDetailsService;
 import com.fjhx.wms.service.arrival.ArrivalStockRecordsService;
 import com.fjhx.wms.service.stock.*;
+import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
@@ -32,9 +39,11 @@ import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -66,6 +75,12 @@ public class StockJournalDetailsServiceImpl extends ServiceImpl<StockJournalDeta
     private ArrivalStockRecordsService arrivalStockRecordsService;
     @Autowired
     private StockJournalDetailsService stockJournalDetailsService;
+    @Autowired
+    private WarehouseService warehouseService;
+    @Autowired
+    private CompanyInfoService companyInfoService;
+    @Autowired
+    private WmsService wmsService;
 
     /**
      * 分页公共参数
@@ -75,7 +90,7 @@ public class StockJournalDetailsServiceImpl extends ServiceImpl<StockJournalDeta
         IWrapper<StockJournalDetails> wrapper = getWrapper();
         wrapper.eq("sj.op_type", dto.getOpType());
         wrapper.eq("sj.type", dto.getType());
-        wrapper.eq("w.id", dto.getWarehouseId());
+        wrapper.eq("sj.warehouse_id", dto.getWarehouseId());
         wrapper.eq("sj.to_warehouse_id", dto.getToWarehouseId());
         wrapper.eq("sjd.product_id", dto.getProductId());
 
@@ -83,18 +98,21 @@ public class StockJournalDetailsServiceImpl extends ServiceImpl<StockJournalDeta
             //产品编号过滤
             List<Long> productIds = productInfoService.listObject(ProductInfo::getId, q -> q.like(ProductInfo::getCustomCode, dto.getKeyword()).or()
                     .like(ProductInfo::getName, dto.getKeyword()));
-            wrapper.and(q -> q.like("w.name", dto.getKeyword()).or()
+            //仓库信息过滤
+            List<Long> warehouseIds = warehouseService.listObject(Warehouse::getId, q -> q.like(Warehouse::getName, dto.getKeyword()));
+
+            wrapper.and(q -> q.in("sj.warehouse_id", warehouseIds).or()
                     .like("sj.link_code", dto.getKeyword()).or()
                     .in("sjd.product_id", productIds)
             );
         }
 
         //时间范围过滤
-        wrapper.ge("sjd",StockJournalDetails::getCreateTime,dto.getBeginTime());
-        wrapper.le("sjd",StockJournalDetails::getCreateTime,dto.getEndTime());
+        wrapper.ge("sjd", StockJournalDetails::getCreateTime, dto.getBeginTime());
+        wrapper.le("sjd", StockJournalDetails::getCreateTime, dto.getEndTime());
 
         //count方法手动赋值逻辑删除租户
-        wrapper.eq("sj.del_flag",0);
+        wrapper.eq("sj.del_flag", 0);
         wrapper.eq("sj.tenant_id", SecurityUtils.getTenantId());
 
         //排序
@@ -126,6 +144,46 @@ public class StockJournalDetailsServiceImpl extends ServiceImpl<StockJournalDeta
         });
         //赋值操作人名称
         UserUtil.assignmentNickName(records, StockJournalDetailsVo::getCreateUser, StockJournalDetailsVo::setOpUserName);
+
+        //赋值仓库名称
+        warehouseService.attributeAssign(records, StockJournalDetailsVo::getWarehouseId, (item, warehouse) -> {
+            item.setWarehouseName(warehouse.getName());
+        });
+
+        //赋值发货信息
+        stockWaitService.attributeAssign(records, StockJournalDetailsVo::getBusinessId, (item, stockWait) -> {
+            String victoriatouristJson = stockWait.getVictoriatouristJson();
+            if (ObjectUtil.isNotEmpty(victoriatouristJson)) {
+                JSONObject jsonObject = JSONObject.parseObject(victoriatouristJson);
+                item.setDeliverGoodsId(jsonObject.getLong("deliverGoodsId"));
+            }
+        });
+
+        //赋值物流单号信息
+        List<Long> logisticsBusinessIds = new ArrayList<>();
+        logisticsBusinessIds.addAll(records.stream().map(StockJournalDetailsVo::getBusinessId).distinct().filter(Objects::nonNull).collect(Collectors.toList()));
+        logisticsBusinessIds.addAll(records.stream().map(StockJournalDetailsVo::getDeliverGoodsId).distinct().filter(Objects::nonNull).collect(Collectors.toList()));
+        if (ObjectUtil.isNotEmpty(logisticsBusinessIds)) {
+            List<LogisticsInfosBo> logisticsInfosByBusinessIds = wmsService.getLogisticsInfosByBusinessIds(logisticsBusinessIds);
+            Map<Long, LogisticsInfosBo> collect = logisticsInfosByBusinessIds.stream().collect(Collectors.toMap(LogisticsInfosBo::getBusinessId, Function.identity()));
+            for (StockJournalDetailsVo record : records) {
+                LogisticsInfosBo orDefault = collect.getOrDefault(record.getBusinessId(), collect.get(record.getDeliverGoodsId()));
+                if (ObjectUtil.isNotEmpty(orDefault)) {
+                    record.setLogisticsCompanyCode(orDefault.getLogisticsCompanyCode());
+                    record.setLogisticsCode(orDefault.getCode());
+                }
+            }
+        }
+
+        //赋值物流公司名称
+        List<String> companyCods = records.stream().map(StockJournalDetailsVo::getLogisticsCompanyCode).distinct().filter(item -> ObjectUtil.isNotEmpty(item)).collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(companyCods)) {
+            Map<String, String> companyMap = companyInfoService.mapKV(CompanyInfo::getCode, CompanyInfo::getName, q -> q.in(CompanyInfo::getCode, companyCods));
+            for (StockJournalDetailsVo record : records) {
+                record.setLogisticsCompanyName(companyMap.get(record.getLogisticsCompanyCode()));
+            }
+        }
+
         return page;
     }
 

+ 1 - 9
hx-wms/src/main/resources/mapper/stock/StockJournalDetailsMapper.xml

@@ -7,7 +7,6 @@
         FROM
             stock_journal_details sjd
                 JOIN stock_journal sj ON sjd.stock_journal_id = sj.id
-                LEFT JOIN warehouse w ON sj.warehouse_id = w.id
         ${ew.customSqlSegment}
     </select>
     <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo">
@@ -18,22 +17,15 @@
             sj.type,
             sj.`code`,
             sj.warehouse_id,
-            w.`name` warehouseName,
             sjd.product_id,
             sjd.quantity,
             sjd.create_time,
             sjd.create_user,
             sj.business_id,
-            sj.remarks,
-            lis.`code` logisticsCode,
-            ci.`name` logisticsCompanyName
+            sj.remarks
         FROM
             stock_journal_details sjd FORCE INDEX ( create_time_index )
                 JOIN stock_journal sj ON sjd.stock_journal_id = sj.id
-                LEFT JOIN stock_wait sw ON sw.id = sj.business_id
-                LEFT JOIN bytesailing_victoriatourist.logistics_infos lis ON ( lis.business_id = sw.deliverGoodsId OR lis.business_id = sw.id )
-                LEFT JOIN bytesailing_kd100.company_info ci ON lis.logistics_company_code = ci.`code`
-                LEFT JOIN warehouse w ON sj.warehouse_id = w.id
             ${ew.customSqlSegment}
     </select>
     <select id="getStockWaitInfo" resultType="com.fjhx.wms.entity.stock.vo.StockWaitVo">