Procházet zdrojové kódy

申购流程决策辅助

24282 před 2 roky
rodič
revize
c91f71e59b

+ 20 - 7
hx-purchase/src/main/java/com/fjhx/purchase/controller/subscribe/SubscribeController.java

@@ -1,19 +1,23 @@
 package com.fjhx.purchase.controller.subscribe;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.common.constant.SourceConstant;
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailDto;
+import com.fjhx.purchase.entity.subscribe.dto.DecisionAidDto;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailSelectDto;
+import com.fjhx.purchase.entity.subscribe.dto.SubscribeDto;
+import com.fjhx.purchase.entity.subscribe.dto.SubscribeSelectDto;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
-import com.ruoyi.common.core.domain.entity.SysDept;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.subscribe.vo.DecisionAidVo;
 import com.fjhx.purchase.entity.subscribe.vo.SubscribeVo;
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeSelectDto;
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeDto;
-import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.fjhx.purchase.service.subscribe.SubscribeService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 
@@ -87,4 +91,13 @@ public class SubscribeController {
         return subscribeService.getDepts(subscribeDetailSelectDto);
     }
 
+    /**
+     * 决策辅助
+     */
+    @PostMapping("/decisionAid")
+    public DecisionAidVo decisionAid(@RequestBody DecisionAidDto dto) {
+        return subscribeService.decisionAid(dto);
+    }
+
+
 }

+ 22 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/dto/DecisionAidDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.purchase.entity.subscribe.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class DecisionAidDto {
+
+    /**
+     * 供应商id
+     */
+    private Long supplyId;
+
+    /**
+     * 产品id列表
+     */
+    private List<Long> productIdList;
+
+}

+ 56 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/vo/DecisionAidVo.java

@@ -0,0 +1,56 @@
+package com.fjhx.purchase.entity.subscribe.vo;
+
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Getter
+@Setter
+public class DecisionAidVo {
+
+    /**
+     * 采购合同列表
+     */
+    private List<Purchase> purchaseList;
+
+    /**
+     * 产品价格
+     */
+    private List<ProductPrice> productPriceList;
+
+    @Getter
+    @Setter
+    public static class ProductPrice {
+
+        /**
+         * 产品id
+         */
+        private Long id;
+
+        /**
+         * 产品名称
+         */
+        private String name;
+
+        /**
+         * 最近价格
+         */
+        private BigDecimal lastPrice;
+
+        /**
+         * 最低价格
+         */
+        private BigDecimal minPrice;
+
+        /**
+         * 最高价格
+         */
+        private BigDecimal maxPrice;
+
+    }
+
+
+}

+ 12 - 5
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/SubscribeService.java

@@ -1,14 +1,15 @@
 package com.fjhx.purchase.service.subscribe;
 
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailDto;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.subscribe.dto.DecisionAidDto;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailSelectDto;
+import com.fjhx.purchase.entity.subscribe.dto.SubscribeDto;
+import com.fjhx.purchase.entity.subscribe.dto.SubscribeSelectDto;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
+import com.fjhx.purchase.entity.subscribe.vo.DecisionAidVo;
+import com.fjhx.purchase.entity.subscribe.vo.SubscribeVo;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.service.BaseService;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.purchase.entity.subscribe.vo.SubscribeVo;
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeSelectDto;
-import com.fjhx.purchase.entity.subscribe.dto.SubscribeDto;
 
 import java.util.List;
 
@@ -54,8 +55,14 @@ public interface SubscribeService extends BaseService<Subscribe> {
 
     /**
      * 获取待采购所有产品的部门列表
+     *
      * @return
      */
     List<SysDept> getDepts(SubscribeDetailSelectDto subscribeDetailDto);
 
+    /**
+     * 决策辅助
+     */
+    DecisionAidVo decisionAid(DecisionAidDto dto);
+
 }

+ 72 - 3
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.purchase.service.subscribe.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONWriter;
@@ -17,17 +18,24 @@ import com.fjhx.common.service.coding.CodingRuleService;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.entity.subscribe.dto.DecisionAidDto;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailSelectDto;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeDto;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeSelectDto;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
 import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
+import com.fjhx.purchase.entity.subscribe.vo.DecisionAidVo;
 import com.fjhx.purchase.entity.subscribe.vo.SubscribeVo;
 import com.fjhx.purchase.mapper.subscribe.SubscribeMapper;
+import com.fjhx.purchase.service.purchase.PurchaseDetailService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
 import com.fjhx.purchase.service.subscribe.SubscribeService;
 import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.service.warehouse.WarehouseService;
+import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
@@ -36,7 +44,9 @@ import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -61,13 +71,20 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
     private ProductInfoService productInfoService;
 
     @Autowired
-    WarehouseService warehouseService;
+    private WarehouseService warehouseService;
+
     @Autowired
-    ISysDeptService deptService;
+    private ISysDeptService deptService;
 
     @Autowired
     private CodingRuleService codingRuleService;
 
+    @Autowired
+    private PurchaseService purchaseService;
+
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
+
 
     @Override
     public Page<SubscribeVo> getPage(SubscribeSelectDto dto) {
@@ -189,7 +206,7 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
             Long deptId = json.getLong("deptId");
             deptIds.add(deptId);
         }
-        if(ObjectUtils.isEmpty(deptIds)){
+        if (ObjectUtils.isEmpty(deptIds)) {
             return new ArrayList<>();
         }
         DynamicDataSourceContextHolder.push(SourceConstant.BASE);
@@ -198,4 +215,56 @@ public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe
         return sysDepts;
     }
 
+    @Override
+    public DecisionAidVo decisionAid(DecisionAidDto dto) {
+        DecisionAidVo decisionAidVo = new DecisionAidVo();
+
+        Long supplyId = dto.getSupplyId();
+        if (supplyId != null) {
+            List<Purchase> purchaseList = purchaseService.list(q -> q.eq(Purchase::getSupplyId, supplyId)
+                    .orderByDesc(BaseIdPo::getId).last("limit 3"));
+            decisionAidVo.setPurchaseList(purchaseList);
+        }
+
+        // 产品价格
+        List<Long> productIdList = dto.getProductIdList();
+        if (ObjectUtil.isNotEmpty(productIdList)) {
+
+            Map<Long, List<PurchaseDetail>> map = purchaseDetailService.mapKGroup(PurchaseDetail::getBussinessId, q -> q
+                    .select(PurchaseDetail::getBussinessId, PurchaseDetail::getPrice)
+                    .in(PurchaseDetail::getBussinessId, productIdList)
+                    .orderByDesc(BaseIdPo::getId)
+            );
+
+            List<DecisionAidVo.ProductPrice> productPriceList = new ArrayList<>();
+
+            for (Long productId : productIdList) {
+                List<PurchaseDetail> contractProductList = map.get(productId);
+                DecisionAidVo.ProductPrice productPrice = new DecisionAidVo.ProductPrice();
+                productPrice.setId(productId);
+                if (ObjectUtil.isNotEmpty(contractProductList)) {
+                    productPrice.setLastPrice(contractProductList.get(0).getPrice());
+                    productPrice.setMaxPrice(contractProductList.stream().map(PurchaseDetail::getPrice).max(BigDecimal::compareTo).get());
+                    productPrice.setMinPrice(contractProductList.stream().map(PurchaseDetail::getPrice).min(BigDecimal::compareTo).get());
+                } else {
+                    productPrice.setLastPrice(BigDecimal.ZERO);
+                    productPrice.setMaxPrice(BigDecimal.ZERO);
+                    productPrice.setMinPrice(BigDecimal.ZERO);
+                }
+                productPriceList.add(productPrice);
+
+            }
+
+            productInfoService.attributeAssign(productPriceList, DecisionAidVo.ProductPrice::getId, (item, product) -> {
+                item.setName(product.getName());
+            });
+
+            decisionAidVo.setProductPriceList(productPriceList);
+        } else {
+            decisionAidVo.setProductPriceList(Collections.emptyList());
+        }
+
+        return decisionAidVo;
+    }
+
 }