瀏覽代碼

对外报价单转合同单独明细

yzc 10 月之前
父節點
當前提交
b2875f0668

+ 2 - 0
hx-item/src/main/java/com/fjhx/item/service/product/ProductInfoService.java

@@ -47,6 +47,8 @@ public interface ProductInfoService extends BaseService<ProductInfo> {
      */
     void edit(ProductInfoDto productInfoDto);
 
+    List<ProductInfoVo> getList(IWrapper wrapper);
+
     /**
      * 产品库明细
      */

+ 45 - 17
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -107,6 +107,50 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         return page;
     }
 
+    @Override
+    public List<ProductInfoVo> getList(IWrapper wrapper) {
+        List<ProductInfoVo> records = this.baseMapper.getList(wrapper);
+
+        //赋值基本信息
+        setPageInfo(records);
+
+        //赋值BOM信息
+        setBomDetail(records);
+
+        return records;
+    }
+
+    private void setBomDetail(List<ProductInfoVo> records) {
+        if (records.size() == 0) {
+            return;
+        }
+        List<Long> pIds = records.stream().map(ProductInfo::getId).collect(Collectors.toList());
+
+
+        //赋值物料信息
+        List<ProductBomDetailVo> productBomDetailVos = productBomDetailService.getList(IWrapper.getWrapper()
+                .in("pbd", ProductBomDetail::getProductId, pIds)
+                .orderByAsc("FIELD( pbd.type, 1, 3, 2 )")
+                .orderByAsc("pbd.id")
+        );
+        this.attributeAssign(productBomDetailVos, ProductBomDetail::getMaterialId, (item, material) -> {
+            item.setMaterialName(material.getName());
+            item.setMaterialCode(material.getCustomCode());
+            item.setMaterialLength(material.getLength());
+            item.setMaterialWidth(material.getWidth());
+            item.setMaterialHeight(material.getHeight());
+            item.setMaterialPrice(material.getPrice());
+            item.setMaterialNetWeight(material.getNetWeight());
+            item.setMaterialColor(material.getColor());
+            item.setMaterialColorCardCode(material.getColorCardCode());
+        });
+
+        Map<Long, List<ProductBomDetailVo>> collect = productBomDetailVos.stream().collect(Collectors.groupingBy(ProductBomDetail::getProductId));
+        for (ProductInfoVo record : records) {
+            record.setProductBomDetailList(collect.get(record.getId()));
+        }
+    }
+
     private void setPageInfo(List<ProductInfoVo> records) {
         if (records.size() == 0) {
             return;
@@ -252,23 +296,7 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         }
 
         //赋值物料信息
-        List<ProductBomDetailVo> productBomDetailVos = productBomDetailService.getList(IWrapper.getWrapper()
-                .eq("pbd", ProductBomDetail::getProductId, id)
-                .orderByAsc("FIELD( pbd.type, 1, 3, 2 )")
-                .orderByAsc("pbd.id")
-        );
-        this.attributeAssign(productBomDetailVos, ProductBomDetail::getMaterialId, (item, material) -> {
-            item.setMaterialName(material.getName());
-            item.setMaterialCode(material.getCustomCode());
-            item.setMaterialLength(material.getLength());
-            item.setMaterialWidth(material.getWidth());
-            item.setMaterialHeight(material.getHeight());
-            item.setMaterialPrice(material.getPrice());
-            item.setMaterialNetWeight(material.getNetWeight());
-            item.setMaterialColor(material.getColor());
-            item.setMaterialColorCardCode(material.getColorCardCode());
-        });
-        result.setProductBomDetailList(productBomDetailVos);
+        setBomDetail(Collections.singletonList(result));
 
         //赋值产品定制信息
         List<ProductCustomInfo> productCustomInfoList = productCustomInfoService.list(q -> q.eq(ProductCustomInfo::getProductId, id));

+ 8 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/ext/ExtQuotationController.java

@@ -47,6 +47,14 @@ public class ExtQuotationController {
     }
 
     /**
+     * 对外报价单转合同明细
+     */
+    @PostMapping("/toContractDetail")
+    public ExtQuotationVo toContractDetail(@RequestBody BaseSelectDto dto) {
+        return extQuotationService.toContractDetail(dto.getId());
+    }
+
+    /**
      * 对外报价单新增
      */
     @PostMapping("/add")

+ 2 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/po/EhsdPurchase.java

@@ -2,6 +2,7 @@ package com.fjhx.sale.entity.purchase.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fjhx.sale.entity.contract.po.ContractDocumentary;
 import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
@@ -208,6 +209,7 @@ public class EhsdPurchase extends BasePo {
     /**
      * 采购时间
      */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
     private Date purchaseTime;
 
     /**

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/service/ext/ExtQuotationService.java

@@ -58,4 +58,9 @@ public interface ExtQuotationService extends BaseService<ExtQuotation> {
      * 生成待创建产品数据
      */
     void waitProduct(Long id);
+
+    /**
+     * 转订单明细 产品信息直接从产品库取
+     */
+    ExtQuotationVo toContractDetail(Long id);
 }

+ 81 - 0
hx-sale/src/main/java/com/fjhx/sale/service/ext/impl/ExtQuotationServiceImpl.java

@@ -17,6 +17,10 @@ import com.fjhx.common.utils.Utils;
 import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.file.entity.FileInfoVo;
 import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.vo.ProductBomDetailVo;
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
+import com.fjhx.item.service.product.ProductBomDetailService;
 import com.fjhx.item.service.product.ProductClassifyService;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.sale.entity.ext.dto.*;
@@ -33,6 +37,7 @@ import com.fjhx.sale.service.quotation.QuotationProductService;
 import com.fjhx.sale.service.sale.SaleQuotationService;
 import com.fjhx.socket.core.PushTypeEnum;
 import com.fjhx.socket.core.WebSocketPush;
+import com.fjhx.tenant.utils.DeptUstil;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
@@ -46,6 +51,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -84,6 +90,8 @@ public class ExtQuotationServiceImpl extends ServiceImpl<ExtQuotationMapper, Ext
     private QuotationProductService quotationProductService;
     @Autowired
     private ProductClassifyService productClassifyService;
+    @Autowired
+    private ProductBomDetailService productBomDetailService;
 
     @Override
     public Page<ExtQuotationVo> getPage(ExtQuotationSelectDto dto) {
@@ -549,4 +557,77 @@ public class ExtQuotationServiceImpl extends ServiceImpl<ExtQuotationMapper, Ext
         );
     }
 
+    /**
+     * 转订单明细 产品信息直接从产品库取
+     */
+    @Override
+    public ExtQuotationVo toContractDetail(Long id) {
+        ExtQuotationVo result = BeanUtil.toBean(this.getById(id), ExtQuotationVo.class);
+        Assert.notEmpty(result, "查询不到明细信息请检查");
+
+        //获取归属公司信息
+        result.setCompanyName(DeptUstil.getDeptNameMap().get(result.getCompanyId()));
+
+        //获取报价单产品id
+        List<ExtQuotationProductVo> extProductList = extQuotationProductService.getList(IWrapper.getWrapper().eq("eqp", ExtQuotationProduct::getSaleQuotationId, id));
+        List<Long> extProductIds = extProductList.stream().map(ExtQuotationProduct::getProductId).collect(Collectors.toList());
+
+        //赋值产品信息
+        List<ProductInfoVo> productInfoList = productInfoService.getList(IWrapper.getWrapper().in("pi", ProductInfo::getId, extProductIds));
+
+        Map<Long, ProductInfoVo> productInfoVoMap = productInfoList.stream().collect(Collectors.toMap(ProductInfo::getId, Function.identity()));
+        List<ExtQuotationProductVo> quotationProductVos = new ArrayList<>();
+
+        //将产品信息转换报价单格式
+        for (ExtQuotationProductVo item : extProductList) {
+            ProductInfoVo productInfo = productInfoVoMap.get(item.getProductId());
+
+            //处理产品信息
+            item.setProductCode(productInfo.getCustomCode());
+            item.setProductName(productInfo.getName());
+            item.setProductLength(productInfo.getLength());
+            item.setProductWidth(productInfo.getWidth());
+            item.setProductHeight(productInfo.getHeight());
+            item.setProductColor(productInfo.getColor());
+            item.setProductClassifyId(productInfo.getProductClassifyId());
+            item.setProductFrontalTexture(productInfo.getFrontalTexture());
+            item.setProductReverseTexture(productInfo.getReverseTexture());
+            item.setProductNetWeight(productInfo.getNetWeight());
+            item.setProductUnit(productInfo.getUnit());
+
+            //处理BOM信息
+            List<ExtQuotationProductBomVo> extProductBomVos = new ArrayList<>();
+
+            List<ProductBomDetailVo> productBomDetailList = productInfo.getProductBomDetailList();
+            for (ProductBomDetailVo productBomDetail : productBomDetailList) {
+                ExtQuotationProductBomVo extProductBom = BeanUtil.toBean(productBomDetail, ExtQuotationProductBomVo.class);
+
+                extProductBom.setExtQuotationId(id);
+                extProductBom.setQuotationProductId(item.getId());
+
+                extProductBom.setProductCode(productBomDetail.getMaterialCode());
+                extProductBom.setProductName(productBomDetail.getMaterialName());
+                extProductBom.setProductLength(productBomDetail.getMaterialLength());
+                extProductBom.setProductWidth(productBomDetail.getMaterialWidth());
+                extProductBom.setProductHeight(productBomDetail.getMaterialHeight());
+                extProductBom.setProductColor(productBomDetail.getMaterialColor());
+
+                extProductBomVos.add(extProductBom);
+            }
+
+            item.setQuotationProductBomList(extProductBomVos);
+
+            quotationProductVos.add(item);
+        }
+
+        //赋值产品分类
+        productClassifyService.attributeAssign(quotationProductVos, ExtQuotationProductVo::getProductClassifyId, (item, classify) -> {
+            item.setProductClassifyName(classify.getName());
+        });
+
+        result.setQuotationProductList(quotationProductVos);
+
+        return result;
+    }
+
 }