From f2c7576cbd050824ec78233483e06fc375382bfb Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 02 四月 2026 17:04:03 +0800
Subject: [PATCH] yys 1.客户档案导入-维护人,维护时间默认当前 2.销售报价审核非必填,产品选择方式也要改 3.销售产品增加物料号字段 4.产品维护增加录入时间,修改时间 6.发货审核不需要了 7.BI的生产核算分析不要了,增加生产订单当前工序 3.库存导入模板规格改成图纸编号,产品名称可以为空,加个库位 4.库存管理外购改为标准件 5.bom产品唯一 6.产品根据bom计算子项数量(只统计二级)

---
 src/main/java/com/ruoyi/sales/pojo/SalesQuotation.java                           |    2 
 src/main/java/com/ruoyi/basic/pojo/Customer.java                                 |    4 
 src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java       |   53 +++++++++++++
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                       |    7 +
 src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java |   12 +++
 src/main/java/com/ruoyi/production/service/ProductBomService.java                |    2 
 src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java              |    6 +
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java                   |    6 +
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java    |    9 +-
 src/main/java/com/ruoyi/production/service/ProductStructureService.java          |    2 
 src/main/resources/mapper/basic/ProductModelMapper.xml                           |    4 
 src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java                |    2 
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml                     |    3 
 src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java             |    7 +
 src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java                        |   18 ++++
 src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java        |   35 +++++---
 src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java               |   12 ++
 src/main/java/com/ruoyi/production/controller/ProductBomController.java          |    2 
 src/main/java/com/ruoyi/basic/pojo/ProductModel.java                             |   12 ++
 src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java             |   20 ++--
 src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java        |    3 
 21 files changed, 173 insertions(+), 48 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java b/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java
index 91758cf..5b5a38e 100644
--- a/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java
+++ b/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java
@@ -1,11 +1,14 @@
 package com.ruoyi.basic.dto;
 
+import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.sales.pojo.CommonFile;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -21,8 +24,12 @@
 
     private String routeName;
 
+    @ApiModelProperty(value = "瀛愰」鏁伴噺")
+    @Excel(name = "瀛愰」鏁伴噺")
+    private Long subItemCount;
+
     /**
-     * 瑙勬牸id
+     * 鍥剧焊缂栧彿id
      */
     private Long id;
 
@@ -58,4 +65,13 @@
     @ApiModelProperty(value = "1=鑷埗,2=澶栬喘,3=濮斿")
     private Integer productType;
 
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8",shape = JsonFormat.Shape.STRING)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8",shape = JsonFormat.Shape.STRING)
+    private LocalDateTime updateTime;
+
 }
diff --git a/src/main/java/com/ruoyi/basic/pojo/Customer.java b/src/main/java/com/ruoyi/basic/pojo/Customer.java
index 511e691..7cb7abe 100644
--- a/src/main/java/com/ruoyi/basic/pojo/Customer.java
+++ b/src/main/java/com/ruoyi/basic/pojo/Customer.java
@@ -69,14 +69,14 @@
     /**
      * 缁存姢浜�
      */
-    @Excel(name = "缁存姢浜�")
+//    @Excel(name = "缁存姢浜�")
     private String maintainer;
 
     /**
      * 缁存姢鏃堕棿
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "缁存姢鏃堕棿" , width = 30, dateFormat = "yyyy-MM-dd")
+//    @Excel(name = "缁存姢鏃堕棿" , width = 30, dateFormat = "yyyy-MM-dd")
     private Date maintenanceTime;
 
     @TableField(fill = FieldFill.INSERT)
diff --git a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
index 6ba6f08..1ccd863 100644
--- a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
+++ b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -77,9 +77,15 @@
     @Excel(name = "瑙勬牸鍨嬪彿")
     private String drawingNumber;
 
-    @TableField(exist = false)
-    private LocalDateTime createTime;
-
     @ApiModelProperty(value = "浜у搧绫诲瀷(1-鐗╂枡,2-浜у搧)")
     private Integer productType;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
 }
diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
index f24a2d2..eac159c 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -10,6 +10,7 @@
 import com.ruoyi.basic.mapper.CustomerMapper;
 import com.ruoyi.basic.pojo.Customer;
 import com.ruoyi.basic.service.ICustomerService;
+import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -160,12 +161,17 @@
 
     @Override
     public AjaxResult importData(MultipartFile file) {
+        String nickName = SecurityUtils.getLoginUser().getNickName();
         try {
             ExcelUtil<Customer> util = new ExcelUtil<Customer>(Customer.class);
             List<Customer> userList = util.importExcel(file.getInputStream());
             if(CollectionUtils.isEmpty(userList)){
                 return AjaxResult.warn("妯℃澘閿欒鎴栧鍏ユ暟鎹负绌�");
             }
+            for (Customer customer : userList) {
+                customer.setMaintenanceTime(DateUtils.getNowDate());
+                customer.setMaintainer(nickName);
+            }
             this.saveOrUpdateBatch(userList);
             return AjaxResult.success(true);
         }catch (Exception e){
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
index ddf9ae9..afee689 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -16,9 +16,11 @@
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.production.service.impl.ProductBomServiceImpl;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
 import lombok.AllArgsConstructor;
 import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -29,14 +31,19 @@
 import java.util.stream.Collectors;
 
 @Service
-@AllArgsConstructor
 public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {
 
+    @Autowired
     private ProductMapper productMapper;
 
+    @Autowired
     private ProductModelMapper productModelMapper;
 
-    private final CommonFileServiceImpl commonFileService;
+    @Autowired
+    private CommonFileServiceImpl commonFileService;
+
+    @Autowired
+    private ProductBomServiceImpl productBomService;
 
     @Override
     public List<ProductTreeDto> selectProductList(ProductDto productDto) {
@@ -75,6 +82,7 @@
     public AjaxResult listPage(Page page, ProductAndModelDto productDto) {
         IPage<ProductAndModelDto> productAndModelDtoIPage = productModelMapper.listPage(page, productDto);
         productAndModelDtoIPage.getRecords().forEach(item -> {
+            item.setSubItemCount(productBomService.countChild(item.getId()));
             item.setSalesLedgerFiles(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.PRODUCT_MODEL.getValue()));
         });
         return AjaxResult.success(productAndModelDtoIPage);
diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
index 76e948d..4760a34 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -40,6 +40,7 @@
 import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper;
 import com.ruoyi.production.pojo.ProductProcess;
 import com.ruoyi.production.pojo.ProductWorkOrder;
+import com.ruoyi.production.service.impl.ProductOrderServiceImpl;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
 import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
@@ -114,6 +115,9 @@
 
     @Autowired
     private ProductOrderMapper productOrderMapper;
+
+    @Autowired
+    private ProductOrderServiceImpl productOrderService;
 
     @Autowired
     private ProductWorkOrderMapper productWorkOrderMapper;
@@ -553,7 +557,7 @@
         ProductOrderDto orderDto = new ProductOrderDto();
         orderDto.setStartTime(LocalDateTime.now().minusMonths(1));
         orderDto.setEndTime(LocalDateTime.now());
-        List<ProductOrderDto> productOrderDtos = productOrderMapper.pageProductOrder(new Page<>(1, -1), orderDto)
+        List<ProductOrderDto> productOrderDtos = productOrderService.pageProductOrder(new Page<>(1, -1), orderDto)
                 .getRecords();
         productionProgressDto.setCompletedOrderDetails(productOrderDtos);
         long totalCount = productOrderDtos.size();
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
index 25071a0..76ca8ce 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
@@ -72,4 +72,11 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime updateTime;
 
+    @ApiModelProperty("浜у搧鍨嬪彿id")
+    private Long productModelId;
+
+    @ApiModelProperty("鏄惁杩斾慨 1-鏄� 2-鍚�")
+    private Integer isReturn;
+
+
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductBomController.java b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
index 43662d0..3081fca 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductBomController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
@@ -73,7 +73,7 @@
     @Log(title = "淇敼", businessType = BusinessType.UPDATE)
     @PutMapping("/update")
     public AjaxResult update(@RequestBody ProductBom productBom) {
-        return AjaxResult.success(productBomService.updateById(productBom));
+        return AjaxResult.success(productBomService.updateBom(productBom));
     }
 
     @ApiOperation("鍒犻櫎BOM")
diff --git a/src/main/java/com/ruoyi/production/service/ProductBomService.java b/src/main/java/com/ruoyi/production/service/ProductBomService.java
index d4746c6..0231856 100644
--- a/src/main/java/com/ruoyi/production/service/ProductBomService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductBomService.java
@@ -27,4 +27,6 @@
     void uploadBom(MultipartFile file,HttpServletResponse response);
 
     void exportBom(HttpServletResponse response, Integer bomId);
+
+    String updateBom(ProductBom productBom);
 }
diff --git a/src/main/java/com/ruoyi/production/service/ProductStructureService.java b/src/main/java/com/ruoyi/production/service/ProductStructureService.java
index 2fa2056..d06e754 100644
--- a/src/main/java/com/ruoyi/production/service/ProductStructureService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductStructureService.java
@@ -15,4 +15,6 @@
     List<ProductStructureDto> listBybomId(Integer bomId);
 
     List<ProductStructureDto> listBybomIdIsParent(Integer bomId);
+
+    Long countBybomId(Integer bomId);
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
index 91dbec8..b334365 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -62,14 +62,42 @@
     @Autowired
     private ProductProcessService productProcessService;
 
+
     @Override
     public IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto) {
         return productBomMapper.listPage(page, productBomDto);
     }
 
+    /**
+     * 浜у搧鏍规嵁bom璁$畻瀛愰」鏁伴噺锛堝彧缁熻浜岀骇锛�
+     */
+    public Long countChild(Long productModelId) {
+        ProductBom productBom = productBomMapper.selectOne(new LambdaQueryWrapper<ProductBom>()
+                .eq(ProductBom::getProductModelId, productModelId));
+        if(productBom != null){
+           return productStructureService.countBybomId(productBom.getId());
+        }
+        return 0L;
+    }
+
+    /**
+     * 鍒ゆ柇浜у搧鏄惁瀛樺湪bom false涓嶅瓨鍦� true瀛樺湪
+     * @param productBom
+     * @return
+     */
+    public boolean checkBom(ProductBom productBom) {
+        ProductBom productBom1 = productBomMapper.selectOne(new LambdaQueryWrapper<ProductBom>()
+                .eq(ProductBom::getProductModelId, productBom.getProductModelId()));
+        return productBom1 == null ? false : true;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult add(ProductBom productBom) {
+        boolean b = checkBom(productBom);
+        if (b) {
+            return AjaxResult.error("浜у搧妯″瀷宸插瓨鍦˙OM");
+        }
         boolean save = productBomMapper.insert(productBom) > 0;
         if (save) {
             String no = "BM." + String.format("%05d", productBom.getId());
@@ -197,9 +225,18 @@
                 errorList.add(error);
                 continue;
             }
+
             ProductBom bom = new ProductBom();
             bom.setProductModelId(rootModel.getId());
             bom.setVersion("1.0");
+            boolean b = checkBom(bom);
+            if(b){
+                BomImportErrorDto error = new BomImportErrorDto();
+                BeanUtils.copyProperties(first, error);
+                error.setErrorMsg("浜у搧銆�"+ first.getParentSpec() + "銆態OM宸插瓨鍦�");
+                errorList.add(error);
+                continue;
+            }
             productBomMapper.insert(bom);
             bom.setBomNo("BM." + String.format("%05d", bom.getId()));
             productBomMapper.updateById(bom);
@@ -282,6 +319,22 @@
         util.exportExcel(response, exportList, "BOM缁撴瀯瀵煎嚭");
     }
 
+    @Override
+    public String updateBom(ProductBom productBom) {
+        ProductBom productBom1 = productBomMapper.selectById(productBom.getId());
+        if(productBom.getProductModelId().equals(productBom1.getProductModelId())){
+            productBomMapper.updateById(productBom);
+        }else{
+            boolean b = checkBom(productBom);
+            if(b){
+               throw new ServiceException("浜у搧BOM宸插瓨鍦�");
+            }else{
+                productBomMapper.updateById(productBom);
+            }
+        }
+        return "淇敼鎴愬姛";
+    }
+
     private void populateMap(List<ProductStructureDto> nodes, Map<Long, ProductStructureDto> map) {
         if (nodes == null || nodes.isEmpty()) {
             return;
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
index 703bbe4..5bb0fc6 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
@@ -161,4 +161,16 @@
         return productStructureMapper.listBybomId(bomId,true);
     }
 
+    @Override
+    public Long countBybomId(Integer bomId) {
+        ProductStructure productStructure = productStructureMapper.selectOne(new LambdaQueryWrapper<ProductStructure>()
+                .eq(ProductStructure::getBomId, bomId)
+                .isNull(ProductStructure::getParentId));
+        if(productStructure != null){
+           return productStructureMapper.selectCount(new LambdaQueryWrapper<ProductStructure>()
+                    .eq(ProductStructure::getParentId, productStructure.getId()));
+        }
+        return 0L;
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
index 29dafda..7dc6004 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -85,20 +85,20 @@
     @Transactional(rollbackFor = Exception.class)
     @Log(title = "鍙戣揣淇℃伅绠$悊", businessType = BusinessType.INSERT)
     public AjaxResult add(@RequestBody ShippingInfoDto req) throws Exception {
-        LoginUser loginUser = SecurityUtils.getLoginUser();
+//        LoginUser loginUser = SecurityUtils.getLoginUser();
         String sh = OrderUtils.countTodayByCreateTime(shippingInfoMapper, "SH");
         // 鍙戣揣瀹℃壒
-        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
-        approveProcessVO.setApproveType(7);
-        approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
-        approveProcessVO.setApproveReason(req.getType() + ":" +sh);
-        approveProcessVO.setApproveUserIds(req.getApproveUserIds());
-        approveProcessVO.setApproveUser(loginUser.getUserId());
-        approveProcessVO.setApproveTime(LocalDate.now().toString());
-        approveProcessService.addApprove(approveProcessVO);
+//        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
+//        approveProcessVO.setApproveType(7);
+//        approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
+//        approveProcessVO.setApproveReason(req.getType() + ":" +sh);
+//        approveProcessVO.setApproveUserIds(req.getApproveUserIds());
+//        approveProcessVO.setApproveUser(loginUser.getUserId());
+//        approveProcessVO.setApproveTime(LocalDate.now().toString());
+//        approveProcessService.addApprove(approveProcessVO);
         // 娣诲姞鍙戣揣娑堟伅
         req.setShippingNo(sh);
-        req.setStatus("寰呭鏍�");
+        req.setStatus("寰呭彂璐�");
         boolean save = shippingInfoService.save(req);
         return save ? AjaxResult.success() : AjaxResult.error();
     }
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 6bb8e1d..7515c2a 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -54,9 +54,9 @@
     private String productCategory;
 
     /**
-     * 瑙勬牸鍨嬪彿
+     * 鍥剧焊缂栧彿
      */
-    @Excel(name = "瑙勬牸鍨嬪彿")
+    @Excel(name = "鍥剧焊缂栧彿")
     private String specificationModel;
 
     /**
@@ -248,4 +248,7 @@
     @ApiModelProperty(value = "閫�璐ф暟閲�")
     @TableField(exist = false)
     private BigDecimal returnNum;
+
+    @ApiModelProperty(value = "鐗╂枡鍙�")
+    private String material;
 }
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesQuotation.java b/src/main/java/com/ruoyi/sales/pojo/SalesQuotation.java
index f57293d..e9f3dce 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesQuotation.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesQuotation.java
@@ -40,7 +40,7 @@
     private String paymentMethod;
     @ApiModelProperty(value = "浜よ揣鍛ㄦ湡澶╂暟")
     private String deliveryPeriod;
-    @ApiModelProperty(value = "鐘舵��")
+    @ApiModelProperty(value = "鐘舵��  寰呭鎵� 瀹℃牳涓� 鎷掔粷 閫氳繃")
     private String status;
     @ApiModelProperty(value = "鎶ヤ环鎬婚噾棰�")
     @Excel(name = "鎶ヤ环閲戦")
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index bf46405..f7d9382 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -95,11 +95,7 @@
     private ShippingInfoServiceImpl shippingInfoService;
     private ReturnSaleProductMapper returnSaleProductMapper;
     private ReturnManagementMapper returnManagementMapper;
-
-
     private StockUtils stockUtils;
-
-
 
     @Autowired
     private ProductStructureMapper productStructureMapper;
@@ -124,6 +120,7 @@
         List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
         if(!CollectionUtils.isEmpty(salesLedgerProducts)){
             salesLedgerProducts.forEach(item -> {
+
                 // 鍙戣揣淇℃伅
                 ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
                         .eq(ShippingInfo::getSalesLedgerProductId, item.getId())
@@ -549,7 +546,9 @@
         int count = 0;
         StringBuilder stringBuffer = new StringBuilder();
         for (ProductStructureDto productStructureDto : productStructureDtos) {
-            StockInventory stockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, productStructureDto.getProductModelId()));
+            StockInventory stockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>()
+                    .lambda()
+                    .eq(StockInventory::getProductModelId, productStructureDto.getProductModelId()));
 
             //鎵�闇�鏁伴噺
             BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
index 8e18058..d4ba1f2 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -13,6 +13,7 @@
 import com.ruoyi.approve.vo.ApproveProcessVO;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.uuid.UUID;
 import com.ruoyi.framework.security.LoginUser;
@@ -60,12 +61,13 @@
 
     @Override
     public boolean add(SalesQuotationDto salesQuotationDto) {
+        boolean isApprove = StringUtils.isNotEmpty(salesQuotationDto.getApproveUserIds()) ? true : false;
         LoginUser loginUser = SecurityUtils.getLoginUser();
         SalesQuotation salesQuotation = new SalesQuotation();
         BeanUtils.copyProperties(salesQuotationDto, salesQuotation);
         String quotationNo = OrderUtils.countTodayByCreateTime(salesQuotationMapper, "QT");
         salesQuotation.setQuotationNo(quotationNo);
-        salesQuotation.setStatus("寰呭鎵�");
+        salesQuotation.setStatus(isApprove ? "寰呭鎵�" : "閫氳繃");
         salesQuotationMapper.insert(salesQuotation);
         if(CollectionUtils.isEmpty(salesQuotationDto.getProducts())){
             return true;
@@ -77,20 +79,23 @@
             return salesQuotationProduct;
         }).collect(Collectors.toList());
         salesQuotationProductService.saveBatch(products);
-        // 鎶ヤ环瀹℃壒
-        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
-        approveProcessVO.setApproveType(6);
-        approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
-        approveProcessVO.setApproveReason(quotationNo);
-        approveProcessVO.setApproveUserIds(salesQuotationDto.getApproveUserIds());
-        approveProcessVO.setApproveUser(loginUser.getUserId());
-        approveProcessVO.setApproveTime(LocalDate.now().toString());
-        approveProcessVO.setPrice(salesQuotationDto.getTotalAmount());
-        try {
-            approveProcessService.addApprove(approveProcessVO);
-        }catch (Exception e){
-            log.error("SalesQuotationServiceImpl error:{}", e);
-            throw new RuntimeException("瀹℃壒澶辫触");
+        // 瀹℃牳浜轰笉涓虹┖
+        if(isApprove){
+            // 鎶ヤ环瀹℃壒
+            ApproveProcessVO approveProcessVO = new ApproveProcessVO();
+            approveProcessVO.setApproveType(6);
+            approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
+            approveProcessVO.setApproveReason(quotationNo);
+            approveProcessVO.setApproveUserIds(salesQuotationDto.getApproveUserIds());
+            approveProcessVO.setApproveUser(loginUser.getUserId());
+            approveProcessVO.setApproveTime(LocalDate.now().toString());
+            approveProcessVO.setPrice(salesQuotationDto.getTotalAmount());
+            try {
+                approveProcessService.addApprove(approveProcessVO);
+            }catch (Exception e){
+                log.error("SalesQuotationServiceImpl error:{}", e);
+                throw new RuntimeException("瀹℃壒澶辫触");
+            }
         }
         return true;
     }
diff --git a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
index 196bb86..806f02c 100644
--- a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
+++ b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
@@ -13,7 +13,7 @@
     @Excel(name = "浜у搧鍚嶇О")
     private String productName;
 
-    @Excel(name = "瑙勬牸")
+    @Excel(name = "鍥剧焊缂栧彿")
     private String model;
 
     @Excel(name = "鍗曚綅")
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index 462326b..fcec502 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -147,8 +147,7 @@
             list.forEach(dto -> {
                 boolean matched = false;
                 for (SalesLedgerProduct item : salesLedgerProducts) {
-                    if (item.getProductCategory().equals(dto.getProductName()) &&
-                            item.getSpecificationModel().equals(dto.getModel())) {
+                    if (item.getSpecificationModel().equals(dto.getModel())) {
                         StockInventoryDto stockInventoryDto = new StockInventoryDto();
                         stockInventoryDto.setRecordId(0L);
                         stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode());
diff --git a/src/main/resources/mapper/basic/ProductModelMapper.xml b/src/main/resources/mapper/basic/ProductModelMapper.xml
index 89954e5..47d5cd9 100644
--- a/src/main/resources/mapper/basic/ProductModelMapper.xml
+++ b/src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -115,7 +115,9 @@
                pm.drawing_number as drawingNumber,
                pm.product_type as productType,
                pr.id as routeId,
-               pr.process_route_name as routeName
+               pr.process_route_name as routeName,
+        pm.create_time as createTime,
+        pm.update_time as updateTime
         from product_model pm
                 left join product p on p.id = pm.product_id
                 left join process_route pr on pr.id = pm.route_id
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index 2c50787..0389580 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -8,7 +8,7 @@
         SELECT
         T1.*,
         CASE
-        WHEN t2.qualitity > T1.quantity THEN 1
+        WHEN sum(t2.qualitity) > T1.quantity THEN 1
         ELSE 0
         END as has_sufficient_stock
         FROM
@@ -23,6 +23,7 @@
                 AND T1.type = #{salesLedgerProduct.type}
             </if>
         </where>
+        group by T1.id
         ORDER BY T1.register_date DESC
     </select>
     <select id="selectSalesLedgerProductByMainId" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct">

--
Gitblit v1.9.3