From 81592a7a4822b10c592d1d46193cf8f3becfc5be Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 12 五月 2026 15:22:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New_pro' into dev_New_pro

---
 src/main/resources/mapper/stock/StockOutRecordMapper.xml                                  |    2 
 src/main/resources/mapper/stock/StockInventoryMapper.xml                                  |   26 ++++-
 src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java                 |    6 
 src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java                                    |    2 
 src/main/resources/mapper/account/SalesRefundAmountOrderMapper.xml                        |    8 +
 src/main/resources/mapper/sales/ShippingInfoMapper.xml                                    |    3 
 src/main/resources/mapper/stock/StockInRecordMapper.xml                                   |    2 
 src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java                           |   27 +++---
 src/main/java/com/ruoyi/basic/dto/StorageBlobVO.java                                      |    4 +
 src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java                       |    2 
 src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java                  |   17 +--
 src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoStageHandleService.java |    2 
 src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java                   |   27 ++++--
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml                              |   39 +++++++++
 src/main/java/com/ruoyi/basic/utils/FileUtil.java                                         |   11 ++
 src/main/java/com/ruoyi/basic/controller/CustomerController.java                          |    4 
 src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java               |    2 
 src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml                   |    8 +
 18 files changed, 132 insertions(+), 60 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
index 2c5fda3..34e1aed 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -15,6 +15,7 @@
 import com.ruoyi.basic.utils.FileUtil;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.device.mapper.DeviceRepairMapper;
 import com.ruoyi.procurementrecord.utils.StockUtils;
@@ -31,14 +32,8 @@
 import com.ruoyi.quality.pojo.QualityInspectParam;
 import com.ruoyi.quality.pojo.QualityTestStandard;
 import com.ruoyi.quality.pojo.QualityTestStandardParam;
-import com.ruoyi.sales.mapper.CommonFileMapper;
-import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
-import com.ruoyi.sales.mapper.SalesQuotationMapper;
-import com.ruoyi.sales.mapper.ShippingInfoMapper;
-import com.ruoyi.sales.pojo.CommonFile;
-import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import com.ruoyi.sales.pojo.SalesQuotation;
-import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.mapper.*;
+import com.ruoyi.sales.pojo.*;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -64,6 +59,7 @@
     private final PurchaseLedgerMapper purchaseLedgerMapper;
     private final SalesQuotationMapper salesQuotationMapper;
     private final ShippingInfoMapper shippingInfoMapper;
+    private final ShippingProductDetailMapper shippingProductDetailMapper;
     private final CommonFileServiceImpl commonFileService;
     private final StockUtils stockUtils;
     private final SalesLedgerProductMapper salesLedgerProductMapper;
@@ -183,7 +179,7 @@
                             addQualityInspect(purchaseLedger, salesLedgerProduct);
                         } else {
                             //鐩存帴鍏ュ簱
-                            stockUtils.addStockWithBatchNo(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId(),purchaseLedger.getPurchaseContractNumber()+"-"+salesLedgerProduct.getId());
+                            stockUtils.addStockWithBatchNo(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId(), purchaseLedger.getPurchaseContractNumber() + "-" + salesLedgerProduct.getId());
                         }
                     }
                 } else if (status.equals(3)) {
@@ -220,6 +216,8 @@
             if (shippingInfo != null) {
                 if (status.equals(2)) {
                     shippingInfo.setStatus("瀹℃牳閫氳繃");
+                    //鏇存敼鍑哄簱瀹℃牳鐘舵�侊紙寰呯‘璁ゆ敼鎴愬緟瀹℃牳锛�
+                    stockUtils.shipmentStatus(StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), shippingInfo.getId());
                 } else if (status.equals(3)) {
                     shippingInfo.setStatus("瀹℃牳鎷掔粷");
                 } else if (status.equals(1)) {
@@ -227,7 +225,6 @@
                 }
                 shippingInfoMapper.updateById(shippingInfo);
             }
-            //搴撳瓨鎵e噺
 
         }
         fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVE_NODE, approveNode.getId(), approveNode.getStorageBlobDTOS());
diff --git a/src/main/java/com/ruoyi/basic/controller/CustomerController.java b/src/main/java/com/ruoyi/basic/controller/CustomerController.java
index 9090d34..2130007 100644
--- a/src/main/java/com/ruoyi/basic/controller/CustomerController.java
+++ b/src/main/java/com/ruoyi/basic/controller/CustomerController.java
@@ -148,8 +148,8 @@
      * 绉佹捣瀹㈡埛娴佸洖鍏捣
      */
     @Log(title = "瀹㈡埛妗f", businessType = BusinessType.OTHER)
-    @PostMapping("/back")
-    public R back(Long id) {
+    @PostMapping("/back/{id}")
+    public R back(@PathVariable("id") Long id) {
         return R.ok(customerService.back(id));
     }
 }
diff --git a/src/main/java/com/ruoyi/basic/dto/StorageBlobVO.java b/src/main/java/com/ruoyi/basic/dto/StorageBlobVO.java
index 75eed4f..c9be475 100644
--- a/src/main/java/com/ruoyi/basic/dto/StorageBlobVO.java
+++ b/src/main/java/com/ruoyi/basic/dto/StorageBlobVO.java
@@ -10,6 +10,10 @@
      */
     private String previewURL;
 
+
+    private String url;
+    private String name;
+
     /**
      * 涓嬭浇鍦板潃
      */
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 52d01ec..09c2a46 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -375,7 +375,7 @@
         //灏嗗鎴风殑type鏀逛负1 涓旂洿鎺ュ垎閰嶇粰褰撳墠鐢ㄦ埛
         Customer customer = customerMapper.selectById(id);
         customer.setType(1);
-        customer.setIsAssigned(1);
+        customer.setIsAssigned(0);
         return this.updateById(customer);
     }
 
diff --git a/src/main/java/com/ruoyi/basic/utils/FileUtil.java b/src/main/java/com/ruoyi/basic/utils/FileUtil.java
index c57468a..6ad5d77 100644
--- a/src/main/java/com/ruoyi/basic/utils/FileUtil.java
+++ b/src/main/java/com/ruoyi/basic/utils/FileUtil.java
@@ -98,8 +98,11 @@
         }
 
         // 鍒犻櫎鏃ч檮浠朵俊鎭�
-        if (application == null) {
+        if (application == null || application.trim().isEmpty()) {
             for (StorageBlobDTO storageBlobDTO : storageBlobDTOS) {
+                if (storageBlobDTO.getApplication() == null || storageBlobDTO.getApplication().trim().isEmpty()) {
+                    throw new RuntimeException("鏂囦欢鐢ㄩ�斾笉鑳戒负绌�");
+                }
                 deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.getByType(storageBlobDTO.getApplication()), recordType, recordId);
             }
         } else {
@@ -344,6 +347,8 @@
             StorageBlobVO storageBlobVO = new StorageBlobVO();
             BeanUtils.copyProperties(storageBlob, storageBlobVO);
             storageBlobVO.setPreviewURL(buildSignedPreviewUrl(storageBlobVO));
+            storageBlobVO.setUrl(buildSignedPreviewUrl(storageBlobVO));
+            storageBlobVO.setName(storageBlob.getOriginalFilename());
             storageBlobVO.setDownloadURL(buildSignedDownloadUrl(storageBlobVO));
             storageBlobVO.setStorageAttachmentId(blobIdToAttachmentIdMap.get(storageBlob.getId()));
             storageBlobDTOS.add(storageBlobVO);
@@ -392,6 +397,8 @@
             StorageBlobVO storageBlobVO = new StorageBlobVO();
             BeanUtils.copyProperties(storageBlob, storageBlobVO);
             storageBlobVO.setPreviewURL(buildSignedPreviewUrl(storageBlobVO));
+            storageBlobVO.setUrl(buildSignedPreviewUrl(storageBlobVO));
+            storageBlobVO.setName(storageBlob.getOriginalFilename());
             storageBlobVO.setDownloadURL(buildSignedDownloadUrl(storageBlobVO));
             storageBlobVO.setStorageAttachmentId(blobIdToAttachmentIdMap.get(storageBlob.getId()));
             storageBlobDTOS.add(storageBlobVO);
@@ -417,6 +424,8 @@
             StorageBlobVO storageBlobVO = new StorageBlobVO();
             BeanUtils.copyProperties(storageBlob, storageBlobVO);
             storageBlobVO.setPreviewURL(buildSignedPreviewUrl(storageBlobVO));
+            storageBlobVO.setUrl(buildSignedPreviewUrl(storageBlobVO));
+            storageBlobVO.setName(storageBlob.getOriginalFilename());
             storageBlobVO.setDownloadURL(buildSignedDownloadUrl(storageBlobVO));
             storageBlobDTOS.add(storageBlobVO);
         }
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 5356500..1434db6 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -1,5 +1,6 @@
 package com.ruoyi.procurementrecord.utils;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
@@ -66,8 +67,6 @@
 
     /**
      * 鍚堟牸鍏ュ簱
-     * @param productModelId
-     * @param quantity
      * @param recordType
      * @param recordId
      */
@@ -105,15 +104,6 @@
      * @param recordType
      * @param recordId
      */
-    public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId) {
-        StockInventoryDto stockInventoryDto = new StockInventoryDto();
-        stockInventoryDto.setRecordId(recordId);
-        stockInventoryDto.setRecordType(String.valueOf(recordType));
-        stockInventoryDto.setQualitity(quantity);
-        stockInventoryDto.setProductModelId(productModelId);
-        stockInventoryService.subtractStockInventory(stockInventoryDto);
-    }
-
     public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) {
         StockInventoryDto stockInventoryDto = new StockInventoryDto();
         stockInventoryDto.setRecordId(recordId);
@@ -121,7 +111,20 @@
         stockInventoryDto.setQualitity(quantity);
         stockInventoryDto.setProductModelId(productModelId);
         stockInventoryDto.setBatchNo(batchNo);
-        stockInventoryService.subtractStockInventory(stockInventoryDto);
+        stockInventoryService.addStockOutRecordOnly(stockInventoryDto);
+    }
+
+    /**
+     * 鍙戣揣瀹℃壒鐘舵�佹洿鏀�
+     * @param recordType
+     * @param recordId
+     */
+    public void shipmentStatus(String recordType, Long recordId) {
+        LambdaQueryWrapper<StockOutRecord> queryWrapper = new LambdaQueryWrapper<StockOutRecord>().eq(StockOutRecord::getRecordType, recordType)
+                .eq(StockOutRecord::getRecordId, recordId);
+        StockOutRecord stockOutRecord = stockOutRecordService.getOne(queryWrapper);
+        stockOutRecord.setApprovalStatus(0);
+        stockOutRecordService.updateById(stockOutRecord);
     }
 
     //涓嶅悎鏍煎簱瀛樺垹闄�
diff --git a/src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java b/src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java
index e05ce2e..fc40f40 100644
--- a/src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java
@@ -54,7 +54,7 @@
     public void savePlan(SavePlanVo savePlanVo) {
         Plan plan = BeanUtil.copyProperties(savePlanVo, Plan.class);
         // 闄勪欢澶勭悊
-        fileUtil.saveStorageAttachmentByRecordTypeAndRecordId("", RecordTypeEnum.PLAN, savePlanVo.getId(), savePlanVo.getStorageBlobDTOs());
+        fileUtil.saveStorageAttachmentByRecordTypeAndRecordId(null, RecordTypeEnum.PLAN, savePlanVo.getId(), savePlanVo.getStorageBlobDTOs());
         if (savePlanVo.getId() == null) {
             planMapper.insert(plan);
         } else {
diff --git a/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoStageHandleService.java b/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoStageHandleService.java
index 2025777..06f207d 100644
--- a/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoStageHandleService.java
+++ b/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoStageHandleService.java
@@ -52,7 +52,7 @@
         String attachmentIds = StrUtil.join(",", Optional.ofNullable(saveInfoStageVo.getAttachmentIds()).orElse(Collections.emptyList()));
         infoStage.setAttachment(attachmentIds);
 
-        fileUtil.saveStorageAttachmentByRecordTypeAndRecordId("", RecordTypeEnum.INFO_STAGE, infoStage.getProjectManagementInfoId(), saveInfoStageVo.getStorageBlobDTOs());
+        fileUtil.saveStorageAttachmentByRecordTypeAndRecordId(null, RecordTypeEnum.INFO_STAGE, infoStage.getProjectManagementInfoId(), saveInfoStageVo.getStorageBlobDTOs());
 
         if (infoStage.getId() == null) {
             infoStageMapper.insert(infoStage);
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
index ba17fe9..5f8788d 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -55,7 +55,7 @@
     @Override
     public IPage<ShippingInfoDto> listPage(Page page, ShippingInfo req) {
         IPage<ShippingInfoDto> listPage = shippingInfoMapper.listPage(page, req);
-        listPage.getRecords().forEach(item ->{
+        listPage.getRecords().forEach(item -> {
             item.setStorageBlobVOs(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.IMAGE, RecordTypeEnum.SHIPPING_INFO, item.getId()));
         });
         return listPage;
@@ -68,7 +68,7 @@
             throw new RuntimeException("鍙戣揣淇℃伅涓嶅瓨鍦�");
         }
         //鎵e噺搴撳瓨
-        if(!"宸插彂璐�".equals(byId.getStatus())){
+        if (!"宸插彂璐�".equals(byId.getStatus())) {
             List<ShippingProductDetail> shippingProductDetails = shippingProductDetailMapper.selectList(new LambdaQueryWrapper<ShippingProductDetail>().eq(ShippingProductDetail::getShippingInfoId, req.getId()));
             if (CollectionUtils.isEmpty(shippingProductDetails)) {
                 throw new RuntimeException("鍙戣揣淇℃伅涓嶅瓨鍦�");
@@ -85,28 +85,28 @@
         boolean update = this.updateById(byId);
         // 淇濆瓨鏂囦欢
         fileUtil.saveStorageAttachment(ApplicationTypeEnum.IMAGE, RecordTypeEnum.SHIPPING_INFO, req.getId(), req.getStorageBlobDTOs());
-        return update ;
+        return update;
     }
 
     @Override
     public boolean delete(List<Long> ids) {
         List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
                 .in(ShippingInfo::getId, ids));
-        if(CollectionUtils.isEmpty(shippingInfos)) return false;
+        if (CollectionUtils.isEmpty(shippingInfos)) return false;
         // 鍒犻櫎闄勪欢
         commonFileService.deleteByBusinessIds(ids, FileNameType.SHIP.getValue());
         // 鎵e凡鍙戣揣搴撳瓨
         for (ShippingInfo shippingInfo : shippingInfos) {
-            if("宸插彂璐�".equals(shippingInfo.getStatus())) {
+            if ("宸插彂璐�".equals(shippingInfo.getStatus())) {
                 stockUtils.deleteStockOutRecord(shippingInfo.getId(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode());
             }
         }
         // 鍒犻櫎鍙戣揣瀹℃壒
-        if(CollectionUtils.isNotEmpty(shippingInfos)){
-            for (ShippingInfo shippingInfo : shippingInfos){
+        if (CollectionUtils.isNotEmpty(shippingInfos)) {
+            for (ShippingInfo shippingInfo : shippingInfos) {
                 List<ApproveProcess> one = approveProcessService.list(new LambdaQueryWrapper<ApproveProcess>()
                         .like(ApproveProcess::getApproveReason, shippingInfo.getShippingNo()));
-                if(one != null){
+                if (one != null) {
                     List<Long> list = one.stream().map(ApproveProcess::getId).toList();
                     approveProcessService.delByIds(list);
                 }
@@ -120,7 +120,7 @@
 
     @Override
     public List<SalesLedgerProductDto> getReturnManagementDtoById(Long shippingId) {
-        return shippingInfoMapper.getReturnManagementDtoById(shippingId );
+        return shippingInfoMapper.getReturnManagementDtoById(shippingId);
 
     }
 
@@ -131,9 +131,14 @@
 
     @Override
     public boolean add(ShippingInfoDto req) {
-        this.save( req);
+        this.save(req);
         req.getBatchNoDetailList().forEach(item -> item.setShippingInfoId(req.getId()));
         shippingProductDetailMapper.insert(req.getBatchNoDetailList());
+        for (ShippingProductDetail shippingProductDetail : req.getBatchNoDetailList()) {
+            stockUtils.substractStock(shippingProductDetail.getProductModelId(), shippingProductDetail.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId(), shippingProductDetail.getBatchNo());
+        }
+        // 淇濆瓨鏂囦欢
+        fileUtil.saveStorageAttachment(ApplicationTypeEnum.IMAGE, RecordTypeEnum.SHIPPING_INFO, req.getId(), req.getStorageBlobDTOs());
         return true;
     }
 
@@ -147,7 +152,7 @@
         ShippingApproveDto shippingApproveDto = new ShippingApproveDto();
         ShippingInfo shippingInfo = new ShippingInfo();
         shippingInfo.setShippingNo(shippingNo);
-        shippingApproveDto.setShippingInfo(shippingInfoMapper.listPage(new Page(1, -1),shippingInfo).getRecords().get(0));
+        shippingApproveDto.setShippingInfo(shippingInfoMapper.listPage(new Page(1, -1), shippingInfo).getRecords().get(0));
         List<ShippingProductDetailDto> dateilByShippingNo = shippingProductDetailMapper.getDateilByShippingNo(shippingNo);
         shippingApproveDto.setShippingProductDetailDtoList(dateilByShippingNo);
         return shippingApproveDto;
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java b/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
index 20ea4a2..1fd2893 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
@@ -75,7 +75,7 @@
     @Schema(description = "绫诲瀷  0鍚堟牸鍏ュ簱 1涓嶅悎鏍煎叆搴�")
     private String type;
 
-    @Schema(description = "瀹℃壒鐘舵��  0-寰呭鎵� 1-閫氳繃 2-椹冲洖", implementation = ReviewStatusEnum.class)
+    @Schema(description = "瀹℃壒鐘舵��  0-寰呭鎵� 1-閫氳繃 2-椹冲洖 3-閿�鍞嚭搴撳緟纭", implementation = ReviewStatusEnum.class)
     private Integer approvalStatus;
 
     @TableField(fill = FieldFill.INSERT)
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
index c968af6..9a6bd9b 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -20,7 +20,6 @@
 import com.ruoyi.stock.mapper.StockInventoryMapper;
 import com.ruoyi.stock.mapper.StockOutRecordMapper;
 import com.ruoyi.stock.mapper.StockUninventoryMapper;
-import com.ruoyi.stock.pojo.StockInRecord;
 import com.ruoyi.stock.pojo.StockInventory;
 import com.ruoyi.stock.pojo.StockOutRecord;
 import com.ruoyi.stock.pojo.StockUninventory;
@@ -57,8 +56,9 @@
     public int add(StockOutRecordDto stockOutRecordDto) {
         String no = OrderUtils.countTodayByCreateTime(stockOutRecordMapper, "CK","outbound_batches");
         stockOutRecordDto.setOutboundBatches(no);
-        StockInRecord stockInRecord = new StockInRecord();
-        BeanUtils.copyProperties(stockOutRecordDto, stockInRecord);
+        if (StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode().equals(stockOutRecordDto.getRecordType())){
+            stockOutRecordDto.setApprovalStatus(3);
+        }
         return stockOutRecordMapper.insert(stockOutRecordDto);
     }
 
diff --git a/src/main/resources/mapper/account/SalesRefundAmountOrderMapper.xml b/src/main/resources/mapper/account/SalesRefundAmountOrderMapper.xml
index 05617b1..a41c8c1 100644
--- a/src/main/resources/mapper/account/SalesRefundAmountOrderMapper.xml
+++ b/src/main/resources/mapper/account/SalesRefundAmountOrderMapper.xml
@@ -18,9 +18,9 @@
     <select id="pageSalesRefundAmountOrderDto" resultType="com.ruoyi.account.bean.dto.SalesRefundAmountOrderDto">
         select sl.sales_contract_no,
         sl.customer_contract_no,
-        slp.specification_model,
-        slp.product_category as product_name,
-        slp.unit,
+        pm.model as specification_model,
+        p.product_name ,
+        pm.unit,
         sl.customer_name,
         rm.return_no as return_management_no,
         srao.*
@@ -28,6 +28,8 @@
         left join return_management rm on srao.return_management_id = rm.id
         left join return_sale_product rs on rm.id = rs.return_management_id
         left join sales_ledger_product slp on rs.return_sales_ledger_product_id = slp.id
+        left join product_model pm on slp.product_model_id = pm.id
+            left join product p on pm.product_id = p.id
         left join sales_ledger sl on slp.sales_ledger_id = sl.id
         <where>
             <if test="ew.salesContractNo != null and ew.salesContractNo !=''">
diff --git a/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml b/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
index 55cba43..52345e3 100644
--- a/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
@@ -11,9 +11,9 @@
         <result column="status" property="status" />
     </resultMap>
     <select id="listReturnSaleProductDto" resultType="com.ruoyi.procurementrecord.dto.ReturnSaleProductDto">
-        SELECT slp.product_category                                         as product_name,
-               slp.specification_model                                      as model,
-               slp.unit                                      as unit,
+        SELECT p.product_name                                         as product_name,
+               pm.model                                     as model,
+               pm.unit                                      as unit,
                rsp.*,
                GREATEST(slp.quantity - COALESCE(rs.total_return_num, 0), 0) AS un_quantity,
                COALESCE(rs.total_return_num, 0)                             AS total_return_num
@@ -21,6 +21,8 @@
                  LEFT JOIN return_management rm ON rm.id = rsp.return_management_id
                  LEFT JOIN shipping_info si ON si.id = rm.shipping_id
                  LEFT JOIN sales_ledger_product slp ON si.sales_ledger_product_id = slp.id and slp.type = 1
+                left join product_model pm on slp.product_model_id = pm.id
+                  LEFT JOIN product p on pm.product_id = p.id
                  LEFT JOIN (SELECT return_sales_ledger_product_id,
 
                                    SUM(num) AS total_return_num
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index 49689a1..f3fa32d 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -6,7 +6,42 @@
 
     <select id="selectSalesLedgerProductList" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct">
         SELECT
-        T1.*,
+        T1.id,
+        T1.sales_ledger_id,
+        T1.warn_num,
+        T1.speculative_trading_name,
+        T1.quantity,
+        T1.min_stock,
+        T1.tax_rate,
+        T1.tax_inclusive_unit_price,
+        T1.tax_inclusive_total_price,
+        T1.tax_exclusive_total_price,
+        T1.invoice_type,
+        T1.type,
+        T1.tickets_num,
+        T1.tickets_amount,
+        T1.future_tickets,
+        T1.future_tickets_amount,
+        T1.invoice_num,
+        T1.no_invoice_num,
+        T1.invoice_amount,
+        T1.no_invoice_amount,
+        T1.product_id,
+        T1.product_model_id,
+        T1.register,
+        T1.register_date,
+        T1.approve_status,
+        T1.pending_invoice_total,
+        T1.invoice_total,
+        T1.pending_tickets_total,
+        T1.tickets_total,
+        T1.is_checked,
+        T1.is_production,
+        T1.create_user,
+        T1.dept_id,
+        p.product_name as product_category,
+        pm.model as specification_model,
+        pm.unit as unit,
         CASE
         WHEN (IFNULL(t2.qualitity, 0) - IFNULL(t2.locked_quantity, 0)) >0 THEN 1
         ELSE 0
@@ -29,6 +64,8 @@
         LEFT JOIN shipping_product_detail spd ON si.id = spd.shipping_info_id
         GROUP BY sales_ledger_product_id
         ) t3 ON t3.sales_ledger_product_id = T1.id
+        left join product_model pm ON T1.product_model_id = pm.id
+        left join product p ON pm.product_id = p.id
         <where>
             <if test="salesLedgerProduct.salesLedgerId != null">
                 AND T1.sales_ledger_id = #{salesLedgerProduct.salesLedgerId}
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 048bb23..ee384ed 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -19,7 +19,8 @@
         s.update_user,
         s.tenant_id,
         sl.sales_contract_no,
-        slp.specification_model,
+        pm.model as specification_model,
+        pm.unit,
         p.product_name,
         sl.customer_name
         FROM shipping_info s
diff --git a/src/main/resources/mapper/stock/StockInRecordMapper.xml b/src/main/resources/mapper/stock/StockInRecordMapper.xml
index ec25d21..05f8c89 100644
--- a/src/main/resources/mapper/stock/StockInRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -77,7 +77,7 @@
             pl.supplier_name,
             DATE(sir.create_time) AS inboundDate,
             p.product_name,
-            slp.specification_model,
+            pm.model as specification_model,
             sor.stock_in_num * slp.tax_inclusive_unit_price AS InboundAmount,
             pl.purchase_contract_number
             FROM stock_in_record sir
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 60fc90e..9612933 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -436,7 +436,7 @@
         WHERE sor.product_model_id = #{productModelId}
           AND (sor.batch_no = #{batchNo} OR (#{batchNo} IS NULL AND sor.batch_no IS NULL))
           AND sor.type = #{type}
-          AND sor.approval_status = 0
+          AND sor.approval_status IN (0, 3)
     </select>
 
     <select id="listSelectableBatchNoByProductModelIds" resultType="com.ruoyi.stock.pojo.StockInventory">
@@ -453,12 +453,24 @@
         order by si.product_model_id, si.batch_no
     </select>
     <select id="getByModelId" resultType="com.ruoyi.stock.pojo.StockInventory">
-        select spd.id, spd.batch_no, spd.locked_quantity, (spd.qualitity - IFNULL(sd.qualitity, 0)) as qualitity
-        from stock_inventory spd
-                 left join (select stock_inventory_id, sum(quantity) as qualitity
-                            from shipping_product_detail
-                            group by stock_inventory_id) as sd on sd.stock_inventory_id = spd.id
-        where product_model_id = #{productModelId}
+        select si.id, si.batch_no, si.locked_quantity, (si.qualitity - IFNULL(sd.qualitity, 0)) as qualitity
+        from stock_inventory si
+                 left join (
+                    select spd.stock_inventory_id, sum(spd.quantity) as qualitity
+                    from shipping_product_detail spd
+                    where exists (
+                        select 1
+                        from stock_out_record sor
+                        where sor.record_id = spd.shipping_info_id
+                          and sor.record_type = '13'
+                          and sor.type = '0'
+                          and sor.approval_status in (0, 3)
+                          and sor.product_model_id = spd.product_model_id
+                          and (sor.batch_no = spd.batch_no or (sor.batch_no is null and spd.batch_no is null))
+                    )
+                    group by spd.stock_inventory_id
+                 ) as sd on sd.stock_inventory_id = si.id
+        where si.product_model_id = #{productModelId}
     </select>
 
 </mapper>
diff --git a/src/main/resources/mapper/stock/StockOutRecordMapper.xml b/src/main/resources/mapper/stock/StockOutRecordMapper.xml
index b4619d8..9e32e21 100644
--- a/src/main/resources/mapper/stock/StockOutRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockOutRecordMapper.xml
@@ -93,7 +93,7 @@
         sl.customer_name,
         s.shipping_date,
         p.product_name,
-        slp.specification_model,
+        pm.model as specification_model,
         sor.stock_out_num * slp.tax_inclusive_unit_price as outboundAmount,
         s.shipping_no,
         sl.sales_contract_no

--
Gitblit v1.9.3