Просмотр исходного кода

销售合同添加产品价格提示

yzc 1 год назад
Родитель
Сommit
63c8a11e2e

+ 12 - 2
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductInfoDto.java

@@ -47,10 +47,20 @@ public class ProductInfoDto extends ProductInfo {
     /**
      * 排序(10 销售量排序  20 销售额排序  30 采购量排序  40 采购额排序  50 生产总量排序)
      */
-    private  Integer sort;
+    private Integer sort;
 
     /**
      * 10 正序  20 倒序
      */
-    private  Integer orderBy;
+    private Integer orderBy;
+
+    /**
+     * 客户id
+     */
+    private Long customerId;
+
+    /**
+     * 产品id列表
+     */
+    private List<Long> productIds;
 }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 import com.fjhx.item.entity.product.bo.ProductAnalysisBo;
+import com.fjhx.item.entity.product.dto.ProductInfoDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
@@ -320,4 +321,12 @@ public class ContractController {
         return contractService.productAnalysis(dto);
     }
 
+    /**
+     * 产品价格提示
+     */
+    @PostMapping("/getProductPriceInfo")
+    Map<Long, Map<String, Object>> getProductPriceInfo(@RequestBody ProductInfoDto dto) {
+        return contractService.getProductPriceInfo(dto);
+    }
+
 }

+ 3 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java

@@ -9,6 +9,7 @@ import com.fjhx.item.entity.product.bo.ProductAnalysisBo;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
+import com.fjhx.sale.entity.contract.vo.ContractProductVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.ruoyi.common.annotation.TenantIgnore;
@@ -140,4 +141,6 @@ public interface ContractMapper extends BaseMapper<Contract> {
      */
     List<ProductAnalysisBo> getPurchaseProductInfo(@Param("ew") IWrapper<Object> wrapper);
 
+    List<ContractProductVo> getProductPriceInfo(@Param("ew") IWrapper<Object> wrapper);
+
 }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.item.entity.product.bo.ProductAnalysisBo;
+import com.fjhx.item.entity.product.dto.ProductInfoDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
@@ -228,4 +229,6 @@ public interface ContractService extends BaseService<Contract> {
      * 产品分析
      */
     Page<ProductAnalysisBo> productAnalysis(ContractSelectDto dto);
+
+    Map<Long, Map<String, Object>> getProductPriceInfo(ProductInfoDto dto);
 }

+ 55 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -40,8 +40,10 @@ import com.fjhx.file.service.FileInfoService;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.flow.service.flow.FlowExampleService;
 import com.fjhx.item.entity.product.bo.ProductAnalysisBo;
+import com.fjhx.item.entity.product.dto.ProductInfoDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.po.ProductInfoEhsdJson;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
 import com.fjhx.purchase.entity.pay.po.Pay;
@@ -2358,4 +2360,57 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         return productAnalysisPage;
     }
 
+    @Override
+    public Map<Long, Map<String, Object>> getProductPriceInfo(ProductInfoDto dto) {
+        List<ProductInfo> list = productInfoService.list(q -> q.in(ProductInfo::getId, dto.getProductIds()));
+        if (ObjectUtil.isEmpty(list)) {
+            return new HashMap<>();
+        }
+        List<Long> pIds = list.stream().map(ProductInfo::getId).collect(Collectors.toList());
+
+        //获取客户某客户近3条销售价格信息
+        Map<Long, List<ContractProductVo>> customerContractProductMap = new HashMap<>();
+        Long customerId = dto.getCustomerId();
+        if (ObjectUtil.isNotEmpty(customerId)) {
+            List<ContractProductVo> customerContractProductList = baseMapper.getProductPriceInfo(IWrapper.getWrapper()
+                    .in("cp.product_id", pIds)
+                    .eq("c.buy_corporation_id", customerId)
+                    .orderByDesc("c.create_time")
+                    .orderByDesc("c.id")
+                    .last("LIMIT 3")
+            );
+            customerContractProductMap =
+                    customerContractProductList.stream().collect(Collectors.groupingBy(ContractProduct::getProductId));
+        }
+
+        //获取产品近三条销售价格信息
+        List<ContractProduct> contractProductList = contractProductService.list(q -> q
+                .in(ContractProduct::getProductId, pIds)
+                .orderByDesc(ContractProduct::getCreateTime)
+                .orderByDesc(ContractProduct::getId)
+                .last("LIMIT 20")
+        );
+        Map<Long, List<ContractProduct>> contractProductMap =
+                contractProductList.stream().collect(Collectors.groupingBy(ContractProduct::getProductId));
+
+
+        //处理输出数据
+        Map<Long, Map<String, Object>> reData = new HashMap<>();
+        for (ProductInfo productInfo : list) {
+            ProductInfoEhsdJson ehsdJson = JSONObject.parseObject(productInfo.getEhsdJson(), ProductInfoEhsdJson.class);
+
+            Long productInfoId = productInfo.getId();
+
+            Map<String, Object> data = new HashMap<>();
+            data.put("price", ehsdJson.getPrice());
+            data.put("costPrice", ehsdJson.getCostPrice());
+            data.put("customerContractProductList", customerContractProductMap.get(productInfoId));
+            data.put("contractProductList", contractProductMap.get(productInfoId));
+
+            reData.put(productInfoId, data);
+        }
+
+        return reData;
+    }
+
 }

+ 6 - 0
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -517,4 +517,10 @@
                  LEFT JOIN ehsd_purchase ep ON epp.purchase_id = ep.id
             ${ew.customSqlSegment}
     </select>
+    <select id="getProductPriceInfo" resultType="com.fjhx.sale.entity.contract.vo.ContractProductVo">
+        SELECT cp.*
+        FROM contract_product cp
+                 LEFT JOIN contract c ON cp.contract_id = c.id
+            ${ew.customSqlSegment}
+    </select>
 </mapper>