Sfoglia il codice sorgente

加工计费标准优化

24282 1 anno fa
parent
commit
be86cbde91

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/bom/bo/BomSpecBo.java

@@ -20,6 +20,11 @@ public class BomSpecBo {
     private String bomSpecCode;
 
     /**
+     * 种类 字典:bom_species
+     */
+    private String bomSpecies;
+
+    /**
      * 成本价
      */
     private BigDecimal costPrice;

+ 1 - 1
sd-business/src/main/java/com/sd/business/entity/department/po/Department.java

@@ -102,7 +102,7 @@ public class Department extends BasePo {
     /**
      * 加工计费标准id
      */
-    private Long priceBillingStandardId;
+    private String priceBillingStandardId;
 
     private String oldId;
 

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/price/po/PriceBillingStandard.java

@@ -26,4 +26,9 @@ public class PriceBillingStandard extends BasePo {
     @NotBlank(message = "加工计费标准名称不能为空")
     private String name;
 
+    /**
+     * 种类 字典:bom_species
+     */
+    private String species;
+
 }

+ 3 - 1
sd-business/src/main/java/com/sd/business/service/department/impl/DepartmentServiceImpl.java

@@ -54,7 +54,9 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         wrapper.like("d", Department::getName, dto.getName());
         wrapper.eq("d", Department::getPriceSystemId, dto.getPriceSystemId());
         wrapper.like("d", Department::getContactPerson, dto.getContactPerson());
-        wrapper.eq("d", Department::getPriceBillingStandardId, dto.getPriceBillingStandardId());
+        wrapper.apply(ObjectUtil.isNotEmpty(dto.getPriceBillingStandardId()),
+                "find_in_set({0}, d.price_billing_standard_id)", dto.getPriceBillingStandardId());
+
         Page<DepartmentVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         return page;
     }

+ 37 - 5
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -14,6 +14,7 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.bom.po.Bom;
 import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.order.dto.OrderInfoDto;
@@ -27,13 +28,16 @@ import com.sd.business.entity.order.vo.OrderInfoVo;
 import com.sd.business.entity.order.vo.OrderSkuBomVo;
 import com.sd.business.entity.order.vo.OrderSkuVo;
 import com.sd.business.entity.order.vo.SkuSpecPriceVo;
+import com.sd.business.entity.price.po.PriceBillingStandard;
 import com.sd.business.entity.price.po.PriceBillingStandardDetail;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.mapper.order.OrderMapper;
+import com.sd.business.service.bom.BomService;
 import com.sd.business.service.bom.BomSpecService;
 import com.sd.business.service.department.DepartmentService;
 import com.sd.business.service.order.*;
 import com.sd.business.service.price.PriceBillingStandardDetailService;
+import com.sd.business.service.price.PriceBillingStandardService;
 import com.sd.business.service.sku.SkuSpecService;
 import com.sd.framework.util.Assert;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -65,6 +69,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     private SkuSpecService skuSpecService;
 
     @Autowired
+    private BomService bomService;
+
+    @Autowired
     private BomSpecService bomSpecService;
 
     @Autowired
@@ -77,6 +84,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     private OrderOperatingLogService orderOperatingLogService;
 
     @Autowired
+    private PriceBillingStandardService priceBillingStandardService;
+
+    @Autowired
     private PriceBillingStandardDetailService priceBillingStandardDetailService;
 
     @Override
@@ -91,7 +101,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
         wrapper.eq("o", OrderInfo::getSettlementStatus, dto.getSettlementStatus());
         wrapper.ge("o", OrderInfo::getWlnCreateTime, dto.getBeginTime());
         wrapper.le("o", OrderInfo::getWlnCreateTime, dto.getEndTime());
-        wrapper.and(q -> q.and(r -> r.eq("o", OrderInfo::getWlnStorageCode, "T007").ge("o", OrderInfo::getWlnStatus, 2))
+        wrapper.and(q -> q
+                .and(r -> r.eq("o", OrderInfo::getWlnStorageCode, "T007").ge("o", OrderInfo::getWlnStatus, 2))
                 .or(r -> r.ne("o", OrderInfo::getWlnStorageCode, "T007")));
 
         if (Objects.equals(dto.getLinkedStatementOfAccount(), 0)) {
@@ -282,15 +293,36 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
         Assert.notNull(bomSpecId, "sku未绑定bom");
         BomSpec bomSpec = bomSpecService.getById(bomSpecId);
         Assert.notNull(bomSpec, "未知bom规格");
+        Bom bom = bomService.getById(bomSpec.getBomId());
+        Assert.notNull(bom, "未知bom");
 
         // 其他价格查询
         Long deptId = SecurityUtils.getDeptId();
         Department department = departmentService.getById(deptId);
         Assert.notNull(department, "未知事业部");
-        Long priceBillingStandardId = department.getPriceBillingStandardId();
-        Assert.notNull(priceBillingStandardId, "事业部未绑定加工计费标准");
-        List<PriceBillingStandardDetail> priceBillingStandardDetailList = priceBillingStandardDetailService.list(
-                q -> q.eq(PriceBillingStandardDetail::getPriceBillingStandardId, priceBillingStandardId));
+        String priceBillingStandardIdStr = department.getPriceBillingStandardId();
+        Assert.notBlank(priceBillingStandardIdStr, "事业部未绑定加工计费标准");
+
+        List<String> priceBillingStandardIdList = Arrays.stream(priceBillingStandardIdStr.split(",")).collect(Collectors.toList());
+        List<PriceBillingStandard> priceBillingStandardList = priceBillingStandardService.listByIds(priceBillingStandardIdList);
+
+        List<PriceBillingStandardDetail> priceBillingStandardDetailList = null;
+
+        if (StrUtil.isBlank(bom.getSpecies())) {
+            priceBillingStandardDetailList = Collections.emptyList();
+        } else {
+            for (PriceBillingStandard priceBillingStandard : priceBillingStandardList) {
+                if (Objects.equals(bom.getSpecies(), priceBillingStandard.getSpecies())) {
+                    priceBillingStandardDetailList = priceBillingStandardDetailService.list(
+                            q -> q.eq(PriceBillingStandardDetail::getPriceBillingStandardId, priceBillingStandard.getId()));
+                    break;
+                }
+            }
+
+            if (priceBillingStandardDetailList == null) {
+                throw new ServiceException("没有找到加工计费标准");
+            }
+        }
 
         // 赋值
         SkuSpecPriceVo skuSpecPriceVo = new SkuSpecPriceVo();

+ 1 - 0
sd-business/src/main/resources/mapper/price/PriceBillingStandardMapper.xml

@@ -4,6 +4,7 @@
     <select id="getPage" resultType="com.sd.business.entity.price.vo.PriceBillingStandardVo">
         select pbs.id,
                pbs.name,
+               pbs.species,
                pbs.create_user,
                pbs.create_time,
                pbs.update_user,

+ 1 - 0
sd-business/src/main/resources/mapper/sku/SkuSpecMapper.xml

@@ -27,6 +27,7 @@
     <select id="getBomSpecBoList" resultType="com.sd.business.entity.bom.bo.BomSpecBo">
         SELECT bs.id                                     bomSpecId,
                bs.code                                   bomSpecCode,
+               b.species                                 bomSpecies,
                ifnull(bs.cost_price, '0.00')             costPrice,
                ifnull(bs.internal_selling_price, '0.00') internalSellingPrice,
                ifnull(bs.external_selling_price, '0.00') externalSellingPrice,

+ 33 - 11
sd-wln/src/main/java/com/sd/wln/context/OrderContext.java

@@ -1,6 +1,8 @@
 package com.sd.wln.context;
 
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.core.domain.BaseIdPo;
@@ -11,6 +13,7 @@ import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderPackageBom;
 import com.sd.business.entity.order.po.OrderSku;
 import com.sd.business.entity.order.po.OrderSkuBom;
+import com.sd.business.entity.price.po.PriceBillingStandard;
 import com.sd.business.entity.price.po.PriceBillingStandardDetail;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.po.SkuSpecLink;
@@ -18,15 +21,13 @@ import com.sd.business.service.department.DepartmentService;
 import com.sd.business.service.order.OrderService;
 import com.sd.business.service.order.OrderSkuService;
 import com.sd.business.service.price.PriceBillingStandardDetailService;
+import com.sd.business.service.price.PriceBillingStandardService;
 import com.sd.business.service.sku.SkuSpecLinkService;
 import com.sd.business.service.sku.SkuSpecService;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -38,6 +39,7 @@ public class OrderContext {
     private static final DepartmentService departmentService = SpringUtil.getBean(DepartmentService.class);
     private static final SkuSpecService skuSpecService = SpringUtil.getBean(SkuSpecService.class);
     private static final SkuSpecLinkService skuSpecLinkService = SpringUtil.getBean(SkuSpecLinkService.class);
+    private static final PriceBillingStandardService priceBillingStandardService = SpringUtil.getBean(PriceBillingStandardService.class);
     private static final PriceBillingStandardDetailService priceBillingStandardDetailService = SpringUtil.getBean(PriceBillingStandardDetailService.class);
 
     /**
@@ -120,7 +122,7 @@ public class OrderContext {
     /**
      * 加工计费标准明细列表
      */
-    private List<PriceBillingStandardDetail> priceBillingStandardList;
+    private Map<String, List<PriceBillingStandardDetail>> priceBillingStandardMap;
 
     /**
      * 实例化
@@ -228,16 +230,36 @@ public class OrderContext {
     /**
      * 获取加工计费标准明细列表
      */
-    public List<PriceBillingStandardDetail> getPriceBillingStandardList() {
-        if (priceBillingStandardList == null) {
+    public List<PriceBillingStandardDetail> getPriceBillingStandardMap(String species) {
+        if (StrUtil.isEmpty(species)) {
+            return Collections.emptyList();
+        }
+
+        if (priceBillingStandardMap == null) {
             if (department == null || department.getPriceBillingStandardId() == null) {
-                priceBillingStandardList = Collections.emptyList();
+                priceBillingStandardMap = Collections.emptyMap();
             } else {
-                priceBillingStandardList = priceBillingStandardDetailService.list(q -> q
-                        .eq(PriceBillingStandardDetail::getPriceBillingStandardId, department.getPriceBillingStandardId()));
+                String priceBillingStandardId = department.getPriceBillingStandardId();
+                if (StrUtil.isEmpty(priceBillingStandardId)) {
+                    priceBillingStandardMap = Collections.emptyMap();
+                } else {
+                    priceBillingStandardMap = new HashMap<>();
+                    List<Long> idList = Arrays.stream(priceBillingStandardId.split(",")).map(Convert::toLong).collect(Collectors.toList());
+                    List<PriceBillingStandard> priceBillingStandardList = priceBillingStandardService.listByIds(idList);
+
+                    Map<Long, List<PriceBillingStandardDetail>> map = priceBillingStandardDetailService.mapKGroup(
+                            PriceBillingStandardDetail::getPriceBillingStandardId,
+                            q -> q.in(PriceBillingStandardDetail::getPriceBillingStandardId, idList));
+
+                    for (PriceBillingStandard priceBillingStandard : priceBillingStandardList) {
+                        priceBillingStandardMap.put(priceBillingStandard.getSpecies(),
+                                map.getOrDefault(priceBillingStandard.getId(), Collections.emptyList()));
+                    }
+
+                }
             }
         }
-        return priceBillingStandardList;
+        return priceBillingStandardMap.getOrDefault(species, Collections.emptyList());
     }
 
 }

+ 7 - 3
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -88,7 +88,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
             for (JSONObject wlnOrder : wlnOrderList) {
 
                 Date printTime = wlnOrder.getDate("print_time");
-                if (printTime != null && printTime.before(DateUtil.parse("2023-08-29 00:00:00"))) {
+                if (printTime != null && printTime.before(DateUtil.parse("2023-09-01 00:00:00"))) {
                     continue;
                 }
 
@@ -425,8 +425,8 @@ public class WlnOrderServiceImpl implements WlnOrderService {
      * 赋值订单sku价格
      */
     private void assignedOrderSkuPrice(OrderContext context, OrderSku orderSku, SkuSpec skuSpec) {
+
         BomSpecBo bomSpecBo = context.getBomSpecBoMap().get(skuSpec.getBomSpecId());
-        List<PriceBillingStandardDetail> priceBillingStandardDetailList = context.getPriceBillingStandardList();
 
         // 订单明细sku没绑定bom,不赋值价格
         if (bomSpecBo == null) {
@@ -441,6 +441,10 @@ public class WlnOrderServiceImpl implements WlnOrderService {
             return;
         }
 
+        // 获取报价规则列表
+        List<PriceBillingStandardDetail> priceBillingStandardDetailList =
+                context.getPriceBillingStandardMap(bomSpecBo.getBomSpecies());
+
         // 报价规则列表
         if (ObjectUtil.isEmpty(priceBillingStandardDetailList)) {
             return;
@@ -549,7 +553,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
                 .orderByDesc(OrderInfo::getWlnModifyTimestamp));
 
         if (orderInfo == null) {
-            startTime = endTime - 1000 * 60 * 60 * 24;
+            startTime = endTime - 1000 * 60 * 60 * 24 * 5;
         } else {
             startTime = orderInfo.getWlnModifyTimestamp();
             if (endTime - startTime > 1000 * 60 * 60 * 24 * 7) {