Browse Source

销售合同辅助决策

24282 2 năm trước cách đây
mục cha
commit
9258d7403b

+ 11 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java

@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
+import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
+import com.fjhx.sale.entity.contract.vo.DecisionAidVo;
 import com.fjhx.sale.service.contract.ContractService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -194,4 +196,13 @@ public class ContractController {
         contractService.toTheAccount(dto);
     }
 
+    /**
+     * 决策辅助
+     */
+    @PostMapping("/decisionAid")
+    public DecisionAidVo decisionAid(@RequestBody DecisionAidDto dto) {
+        return contractService.decisionAid(dto);
+    }
+
+
 }

+ 22 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/DecisionAidDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class DecisionAidDto {
+
+    /**
+     * 买方公司id
+     */
+    private Long buyCorporationId;
+
+    /**
+     * 产品id列表
+     */
+    private List<Long> productIdList;
+
+}

+ 55 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/DecisionAidVo.java

@@ -0,0 +1,55 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.Contract;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Getter
+@Setter
+public class DecisionAidVo {
+
+    /**
+     * 最近合同
+     */
+    private List<Contract> lastContractList;
+
+    /**
+     * 产品价格
+     */
+    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;
+
+    }
+
+}

+ 7 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -6,10 +6,12 @@ import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
+import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
+import com.fjhx.sale.entity.contract.vo.DecisionAidVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.ruoyi.common.core.service.BaseService;
 
@@ -150,4 +152,9 @@ public interface ContractService extends BaseService<Contract> {
      */
     void toTheAccount(Contract dto);
 
+    /**
+     * 决策辅助
+     */
+    DecisionAidVo decisionAid(DecisionAidDto dto);
+
 }

+ 61 - 4
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -41,13 +41,11 @@ import com.fjhx.sale.entity.contract.bo.ContractCurrencyRate;
 import com.fjhx.sale.entity.contract.bo.ContractDocumentaryBo;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
+import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
 import com.fjhx.sale.entity.contract.po.ContractProject;
-import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
-import com.fjhx.sale.entity.contract.vo.ContractDocumentaryVo;
-import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
-import com.fjhx.sale.entity.contract.vo.ContractVo;
+import com.fjhx.sale.entity.contract.vo.*;
 import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.fjhx.sale.mapper.contract.ContractMapper;
@@ -708,6 +706,65 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
     }
 
+    @Override
+    public DecisionAidVo decisionAid(DecisionAidDto dto) {
+        DecisionAidVo decisionAidVo = new DecisionAidVo();
+
+        // 最近合同
+        Long buyCorporationId = dto.getBuyCorporationId();
+        if (buyCorporationId != null) {
+            List<Contract> list = list(q -> q
+                    .eq(Contract::getBuyCorporationId, buyCorporationId)
+                    .eq(Contract::getStatus, FlowStatusEnum.PASS.getKey())
+                    .orderByDesc(BaseIdPo::getId)
+                    .last("limit 3")
+            );
+            decisionAidVo.setLastContractList(list);
+        } else {
+            decisionAidVo.setLastContractList(Collections.emptyList());
+        }
+
+        // 产品价格
+        List<Long> productIdList = dto.getProductIdList();
+        if (ObjectUtil.isNotEmpty(productIdList)) {
+
+            Map<Long, List<ContractProduct>> map = contractProductService.mapKGroup(ContractProduct::getProductId, q -> q
+                    .select(ContractProduct::getProductId, ContractProduct::getPrice)
+                    .in(ContractProduct::getProductId, productIdList)
+                    .orderByDesc(BaseIdPo::getId)
+            );
+
+            List<DecisionAidVo.ProductPrice> productPriceList = new ArrayList<>();
+
+            for (Long productId : productIdList) {
+                List<ContractProduct> 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(ContractProduct::getPrice).max(BigDecimal::compareTo).get());
+                    productPrice.setMinPrice(contractProductList.stream().map(ContractProduct::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;
+    }
+
 
     /**
      * 赋值外销合同信息