yys
1.已退货完毕的出库单号不要展示在关联出库单中
2.退货管理唯一处理
3.生产订单-库存数量回显
4.发货管理回显退货数量
5.发货增加详情接口
6.生产核算清理脏数据
7.生产报工-删除生产报工记录报错
8.筛选客户名称数据展示有误
已修改18个文件
234 ■■■■ 文件已修改
src/main/java/com/ruoyi/account/pojo/AccountExpense.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/ShippingInfoService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/ShippingInfoMapper.xml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/stock/StockInventoryMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/pojo/AccountExpense.java
@@ -35,7 +35,7 @@
    private Long businessId;
    /**
     * 业务类型 1-付款 2-还款
     * 业务类型 1-付款 2-还款 3-销售退款
     */
    private Integer businessType;
src/main/java/com/ruoyi/procurementrecord/controller/ReturnManagementController.java
@@ -68,11 +68,8 @@
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult del(@RequestBody List<Long> ids) {
        if (CollectionUtils.isEmpty(ids)) return error("请选择至少一条数据");
        returnSaleProductService.remove(new QueryWrapper<ReturnSaleProduct>()
                .lambda()
                .in(ReturnSaleProduct::getReturnManagementId, ids));
        boolean result = returnManagementService.removeByIds(ids);
        return result ? success() : error();
        int result = returnManagementService.delete(ids);
        return result > 0 ? success() : error();
    }
    @GetMapping("/getById")
src/main/java/com/ruoyi/procurementrecord/service/ReturnManagementService.java
@@ -8,6 +8,7 @@
import com.ruoyi.sales.dto.SalesLedgerDto;
import java.math.BigDecimal;
import java.util.List;
/**
 * @author :yys
@@ -33,4 +34,6 @@
    boolean handle(Long returnManagementId);
    ReturnManagementDto getReturnManagementDtoById(Long returnManagementId);
    int delete(List<Long> ids);
}
src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.procurementrecord.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,6 +14,7 @@
import com.ruoyi.procurementrecord.dto.ReturnManagementDto;
import com.ruoyi.procurementrecord.dto.ReturnSaleProductDto;
import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper;
import com.ruoyi.procurementrecord.pojo.ReturnManagement;
import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
import com.ruoyi.procurementrecord.service.ReturnManagementService;
@@ -36,6 +38,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @author :yys
@@ -51,6 +54,8 @@
    @Autowired
    private ReturnSaleProductService returnSaleProductService;
    @Autowired
    private ReturnSaleProductMapper returnSaleProductMapper;
    @Autowired
    private ShippingInfoDetailService shippingInfoDetailService;
    @Autowired
    private ShippingInfoService shippingInfoService;
@@ -64,6 +69,20 @@
    @Autowired
    private AccountExpenseMapper accountExpenseMapper;
//    通过发货订单详情ID查询退货数量
    public BigDecimal getReturnSaleProductCountByShippingId(List<Long> shippingInfoDetailId) {
        List<ReturnManagement> returnManagements = returnManagementMapper.selectList(new LambdaQueryWrapper<ReturnManagement>()
                .in(ReturnManagement::getShippingId, shippingInfoDetailId)
                .eq(ReturnManagement::getStatus, 1));
        if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(returnManagements)){
            List<ReturnSaleProduct> returnSaleProducts = returnSaleProductMapper.selectList(new LambdaQueryWrapper<ReturnSaleProduct>()
                    .in(ReturnSaleProduct::getReturnManagementId, returnManagements.stream().map(ReturnManagement::getId).collect(Collectors.toList()))
                    .eq(ReturnSaleProduct::getStatus, 1));
            return returnSaleProducts.stream().map(ReturnSaleProduct::getNum).reduce(BigDecimal.ZERO, BigDecimal::add);
        }
        return BigDecimal.ZERO;
    }
    @Override
    public IPage<ReturnManagementDto> listPage(Page page, ReturnManagementDto returnManagement) {
@@ -116,15 +135,9 @@
        List<ReturnSaleProductDto> list = returnSaleProductService.listReturnSaleProduct(returnManagementId);
        byId.setStatus(1);
        updateById(byId);
//        SalesRefundAmountOrderDto salesRefundAmountOrder = new SalesRefundAmountOrderDto();
//        salesRefundAmountOrder.setReturnManagementId(returnManagementId);
//        salesRefundAmountOrder.setStatus(0);
//        salesRefundAmountOrder.setCreateTime(byId.getCreateTime());
//        salesRefundAmountOrder.setCreateUserId(SecurityUtils.getUserId());
        BigDecimal bigDecimal = new BigDecimal(0);
        for (ReturnSaleProductDto returnSaleProduct : list) {
            bigDecimal = bigDecimal.add(returnSaleProduct.getPrice());
//            salesRefundAmountOrder.setRefundedAmount(new BigDecimal(0));
            // 是否有质量问题
            if (returnSaleProduct.getIsQuality() == 1) {
                // 有质量问题,入不合格库
@@ -136,10 +149,17 @@
            returnSaleProduct.setStatus(1);
            returnSaleProductService.updateById(returnSaleProduct);
        }
//        salesRefundAmountOrder.setRefundAmount(bigDecimal);
//        salesRefundAmountOrder.setNotRefundedAmount(salesRefundAmountOrder.getRefundedAmount());
        // 分批退款
//        salesRefundAmountOrderService.addSalesRefundAmountOrderDto(salesRefundAmountOrder);
        // 修改发货详情为退货
        SalesLedgerDto returnManagementDtoByShippingIdId = getReturnManagementDtoByShippingIdId(byId.getShippingId());
        for (SalesLedgerProductDto salesLedgerProductDto : returnManagementDtoByShippingIdId.getProductDtoData()) {
            if(salesLedgerProductDto.getUnQuantity().compareTo(BigDecimal.ZERO) == 0){
                ShippingInfoDetail shippingInfoDetail = shippingInfoDetailService.getById(byId.getShippingId());
                if(shippingInfoDetail != null){
                    shippingInfoDetail.setStatus("已退货");
                    shippingInfoDetailService.updateById(shippingInfoDetail);
                }
            }
        }
        // 和财务联动,新增支出
        AccountExpense accountExpense = new AccountExpense();
        accountExpense.setBusinessType(3);
@@ -163,5 +183,32 @@
        return returnManagementDtoById;
    }
    @Override
    public int delete(List<Long> ids) {
        List<ReturnSaleProduct> returnSaleProducts = returnSaleProductMapper.selectList(new QueryWrapper<ReturnSaleProduct>()
                .lambda()
                .in(ReturnSaleProduct::getReturnManagementId, ids));
        if(com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(returnSaleProducts)){
            List<Long> collect = returnSaleProducts
                    .stream()
                    .map(ReturnSaleProduct::getId)
                    .collect(Collectors.toList());
            returnSaleProductMapper.deleteBatchIds(collect);
            // 删除入库记录
            for (ReturnSaleProduct returnSaleProduct : returnSaleProducts) {
                if(returnSaleProduct.getIsQuality() == 1){
                    stockUtils.deleteStockInRecord(returnSaleProduct.getId(), StockInUnQualifiedRecordTypeEnum.RETURN_UNSTOCK_IN.getCode());
                }else{
                    stockUtils.deleteStockInRecord(returnSaleProduct.getId(), StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode());
                }
            }
        }
        accountExpenseMapper.delete(new QueryWrapper<AccountExpense>()
                .lambda()
                .in(AccountExpense::getBusinessId, ids)
                .eq(AccountExpense::getBusinessType, 3));
        return returnManagementMapper.deleteBatchIds(ids);
    }
}
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -1,6 +1,7 @@
package com.ruoyi.procurementrecord.utils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
@@ -21,7 +22,9 @@
import java.math.BigDecimal;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
@RequiredArgsConstructor
@@ -99,19 +102,19 @@
    //不合格库存删除
    public void deleteStockInRecord(Long recordId, String recordType) {
        StockInRecord one = stockInRecordService.getOne(new QueryWrapper<StockInRecord>()
        List<StockInRecord> one = stockInRecordService.getBaseMapper().selectList(new QueryWrapper<StockInRecord>()
                .lambda().eq(StockInRecord::getRecordId, recordId)
                .eq(StockInRecord::getRecordType, recordType));
        if (ObjectUtils.isNotEmpty(one)) {
            stockInRecordService.batchDelete(Collections.singletonList(one.getId()));
        if (CollectionUtils.isNotEmpty(one)) {
            stockInRecordService.batchDelete(one.stream().map(StockInRecord::getId).collect(Collectors.toList()));
        }
    }
    public void deleteStockOutRecord(Long recordId, String recordType) {
        StockOutRecord one = stockOutRecordService.getOne(new QueryWrapper<StockOutRecord>()
        List<StockOutRecord> one = stockOutRecordService.getBaseMapper().selectList(new QueryWrapper<StockOutRecord>()
                .lambda().eq(StockOutRecord::getRecordId, recordId)
                .eq(StockOutRecord::getRecordType, recordType));
        if (ObjectUtils.isNotEmpty(one)) {
            stockOutRecordService.batchDelete(Collections.singletonList(one.getId()));
        if (CollectionUtils.isNotEmpty(one)) {
            stockOutRecordService.batchDelete(one.stream().map(StockOutRecord::getId).collect(Collectors.toList()));
        }
    }
}
src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -17,7 +17,7 @@
import java.util.Arrays;
import java.util.List;
@RequestMapping("productionProductMain")
@RequestMapping("/productionProductMain")
@RestController
@Api(value = "生产报工")
public class ProductionProductMainController {
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -76,6 +76,7 @@
            // 获取产品合格库存
            StockInventoryDto stockInventoryDto = new StockInventoryDto();
            stockInventoryDto.setProductModelId(productOrderDto.getProductModelId());
            stockInventoryDto.setProductType(1);
            Page page1 = new Page<>(1,1);
            IPage<StockInventoryDto> stockInventoryDtoIPage = stockInventoryService.pagestockInventory(page1,stockInventoryDto);
            if(stockInventoryDtoIPage.getTotal() > 0){
src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -66,6 +66,12 @@
        return AjaxResult.success(shippingInfoService.getShippingInfoByCustomerName(customerName));
    }
    @ApiOperation("详情")
    @GetMapping("/getById")
    public AjaxResult getById(Long id) {
        return AjaxResult.success(shippingInfoService.getDateil(id));
    }
    @GetMapping("/listPage")
    @ApiOperation("发货信息列表")
@@ -95,14 +101,6 @@
        req.setStatus("待审核");
        boolean save = shippingInfoService.save(req);
        return save ? AjaxResult.success() : AjaxResult.error();
    }
    @ApiOperation("发货扣库存")
    @PostMapping("/deductStock")
    @Transactional(rollbackFor = Exception.class)
    @Log(title = "发货信息管理", businessType = BusinessType.UPDATE)
    public AjaxResult deductStock(@RequestBody ShippingInfoDto req) throws IOException {
        return shippingInfoService.deductStock( req) ? AjaxResult.success() : AjaxResult.error();
    }
    @PostMapping("/update")
src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
@@ -40,4 +40,9 @@
     */
    private BigDecimal waitShippingTotal = BigDecimal.ZERO;
    /**
     * 退货数量
     */
    private BigDecimal returnTotal = BigDecimal.ZERO;
}
src/main/java/com/ruoyi/sales/mapper/ShippingInfoMapper.java
@@ -22,4 +22,6 @@
    List<ShippingInfo> getShippingInfoByCustomerName(String customerName);
    List<SalesLedgerProductDto> getReturnManagementDtoById(@Param("shippingId")Long shippingId);
    ShippingInfoDto getDateil(@Param("id") Long id);
}
src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java
@@ -33,6 +33,12 @@
    private static final long serialVersionUID = 1L;
    /**
     * 退货数量
     */
    @TableField(exist = false)
    private BigDecimal returnTotal = BigDecimal.ZERO;
    @TableField(exist = false)
    private List<String> tempFileIds;
    @TableField(exist = false)
@@ -90,7 +96,7 @@
    @ApiModelProperty("发货类型")
    private String type;
    @ApiModelProperty("状态")
    @ApiModelProperty("状态 已退货")
    private String status;
    @ApiModelProperty("发货数量")
src/main/java/com/ruoyi/sales/service/ShippingInfoService.java
@@ -28,4 +28,6 @@
    List<SalesLedgerProductDto> getReturnManagementDtoById(Long id);
    Map<String ,BigDecimal> getNumberOfSalesLedgerProduct(Long id);
    ShippingInfoDto getDateil(Long id);
}
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -23,6 +23,9 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.other.pojo.TempFile;
import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
import com.ruoyi.procurementrecord.pojo.ReturnManagement;
import com.ruoyi.procurementrecord.service.ReturnManagementService;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductionProductMainService;
@@ -98,6 +101,10 @@
    private final CommonFileServiceImpl commonFileService;
    private final ShippingInfoMapper shippingInfoMapper;
    private final ReturnManagementMapper returnManagementMapper;
    private final ReturnManagementService returnManagementService;
    private final InvoiceLedgerMapper invoiceLedgerMapper;
@@ -558,8 +565,17 @@
        List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
                .in(ShippingInfo::getSalesLedgerId, idList));
        if (CollectionUtils.isNotEmpty(shippingInfos)) {
            shippingInfoServiceImpl.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
            List<Long> shippingIds = shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList());
            shippingInfoServiceImpl.delete(shippingIds);
            // 删除退货台账记录
            List<ReturnManagement> returnManagements = returnManagementMapper.selectList(new LambdaQueryWrapper<ReturnManagement>()
                    .in(ReturnManagement::getShippingId, shippingIds));
            if (CollectionUtils.isNotEmpty(returnManagements)) {
                List<Long> returnIds = returnManagements.stream().map(ReturnManagement::getId).collect(Collectors.toList());
                returnManagementService.delete(returnIds);
        }
        }
        // 删除附件表
        commonFileService.deleteByBusinessIds(idList, FileNameType.SALE.getValue());
src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java
@@ -6,6 +6,7 @@
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.other.service.impl.TempFileServiceImpl;
import com.ruoyi.procurementrecord.service.impl.ReturnManagementServiceImpl;
import com.ruoyi.sales.dto.ShippingInfoDto;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.pojo.ShippingInfoDetail;
@@ -48,11 +49,16 @@
    @Autowired
    private CommonFileServiceImpl commonFileService;
    @Autowired
    private ReturnManagementServiceImpl returnManagementService;
    @Override
    public IPage<ShippingInfoDetail> listPage(Page page, ShippingInfoDetail shippingInfoDetail) {
        IPage<ShippingInfoDetail> shippingInfoDetailIPage = shippingInfoDetailMapper.listPage(page, shippingInfoDetail);
        shippingInfoDetailIPage.getRecords().forEach(item ->{
            item.setCommonFileList(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.SHIP.getValue()));
            BigDecimal returnSaleProductCountByShippingId = returnManagementService.getReturnSaleProductCountByShippingId(Collections.singletonList(item.getId()));
            item.setReturnTotal(returnSaleProductCountByShippingId);
        });
        return shippingInfoDetailIPage;
    }
@@ -76,6 +82,8 @@
        }else{
            shippingInfo.setStatus("发货中");
        }
        // 扣库存
        shippingInfo.setShippingTotal(shippingInfoDetail.getShippingNum());
        shippingInfoService.deductStock(shippingInfo);
        // 迁移文件
        if(CollectionUtils.isNotEmpty(shippingInfoDetail.getTempFileIds())){
src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -13,6 +13,7 @@
import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper;
import com.ruoyi.procurementrecord.pojo.ReturnManagement;
import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
import com.ruoyi.procurementrecord.service.impl.ReturnManagementServiceImpl;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.sales.dto.SalesLedgerProductDto;
import com.ruoyi.sales.dto.ShippingInfoDto;
@@ -67,6 +68,9 @@
    @Autowired
    private ReturnSaleProductMapper returnSaleProductMapper;
    @Autowired
    private ReturnManagementServiceImpl returnManagementService;
    @Override
    public List<SalesLedgerProductDto> getReturnManagementDtoById(Long shippingId) {
        return shippingInfoMapper.getReturnManagementDtoById(shippingId );
@@ -75,8 +79,6 @@
    /**
     * 获取销售产品单的已发货数量
     * @param id
     * @return
     */
    @Override
    public Map<String, BigDecimal> getNumberOfSalesLedgerProduct(Long salesLedgerProductId) {
@@ -109,6 +111,15 @@
    }
    @Override
    public ShippingInfoDto getDateil(Long id) {
        ShippingInfoDto shippingInfoDto =  shippingInfoMapper.getDateil(id);
        if(shippingInfoDto != null){
            assembleDetails(shippingInfoDto);
        }
        return shippingInfoDto;
    }
    @Override
    public List<ShippingInfo> getShippingInfoByCustomerName(String customerName) {
        return shippingInfoMapper.getShippingInfoByCustomerName(customerName);
    }
@@ -116,7 +127,16 @@
    @Override
    public IPage<ShippingInfoDto> listPage(Page page, ShippingInfo req) {
        IPage<ShippingInfoDto> listPage = shippingInfoMapper.listPage(page, req);
        listPage.getRecords().forEach(item ->{
        listPage.getRecords().forEach(this::assembleDetails);
        return listPage;
    }
    /**
     * 封装详情
     * @param item
     */
    public void assembleDetails(ShippingInfoDto item) {
            item.setCommonFileList(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.SHIP.getValue()));
            List<ShippingInfoDetail> shippingInfoDetails = shippingInfoDetailMapper.selectList(new LambdaQueryWrapper<ShippingInfoDetail>()
                    .eq(ShippingInfoDetail::getShippingInfoId, item.getId()));
@@ -129,9 +149,13 @@
                    .filter(Objects::nonNull)
                    .reduce(BigDecimal.ZERO, BigDecimal::add)); // 用Lambda替代方法引用
            item.setWaitShippingTotal(item.getShippingTotal().subtract(item.getShippingSuccessTotal()));
        });
        return listPage;
        // 查询退货数量
        if(CollectionUtils.isNotEmpty(shippingInfoDetails)){
            item.setReturnTotal(returnManagementService.getReturnSaleProductCountByShippingId(shippingInfoDetails
                    .stream()
                    .map(ShippingInfoDetail::getId)
                    .collect(Collectors.toList())));
        }
    }
    @Override
@@ -142,7 +166,7 @@
        }
        //扣减库存
        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId());
        stockUtils.substractStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
        stockUtils.substractStock(salesLedgerProduct.getProductModelId(), req.getShippingTotal(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
        byId.setExpressNumber(req.getExpressNumber());
        byId.setExpressCompany(req.getExpressCompany());
        byId.setStatus(req.getStatus());
src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
@@ -19,7 +19,7 @@
               COALESCE(rs.total_return_num, 0)                             AS total_return_num
        FROM return_sale_product rsp
                 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 shipping_info_detail 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 (SELECT return_sale_ledger_product_id,
src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -32,6 +32,9 @@
        <if test="req.shippingCarNumber != null and req.shippingCarNumber != ''">
            AND s.shipping_car_number LIKE CONCAT('%',#{req.shippingCarNumber},'%')
        </if>
        <if test="req.customerName != null and req.customerName != ''">
            AND sl.customer_name LIKE CONCAT('%',#{req.customerName},'%')
        </if>
        <if test="req.shippingNo != null and req.shippingNo != ''">
            AND s.shipping_no LIKE CONCAT('%',#{req.shippingNo},'%')
        </if>
@@ -60,7 +63,7 @@
        select *,sid.id as id from shipping_info_detail sid
            left join shipping_info si on si.id = sid.shipping_info_id
                          left join sales_ledger sl on si.sales_ledger_id = sl.id
        where (si.status = '已发货' or si.status = '发货中') and sl.customer_name = #{customerName}
        where (si.status = '已发货' or si.status = '发货中')  and (sid.status is null or sid.status != '已退货') and sl.customer_name = #{customerName}
    </select>
    <select id="getReturnManagementDtoById" resultType="com.ruoyi.sales.dto.SalesLedgerProductDto">
        SELECT
@@ -77,8 +80,12 @@
        FROM return_sale_product rsp
        left join return_management rm on rm.id = rsp.return_management_id
        left join shipping_info_detail si on si.id = rm.shipping_id
        WHERE 1=1
        GROUP BY return_sale_ledger_product_id
        <where>
            <if test="shippingId != null">
                si.id = #{shippingId}
            </if>
        </where>
        GROUP BY si.id
        ) rs ON rs.return_sale_ledger_product_id = slp.id
        <where>
            <if test="shippingId != null">
@@ -86,4 +93,29 @@
            </if>
        </where>
    </select>
    <select id="getDateil" resultType="com.ruoyi.sales.dto.ShippingInfoDto" parameterType="java.lang.Long">
        SELECT
            s.id,
            s.sales_ledger_id,
            s.shipping_date,
            s.shipping_car_number,
            s.express_number,
            s.express_company,
            s.shipping_no,
            s.type,
            s.status,
            s.create_time,
            s.update_time,
            s.create_user,
            s.update_user,
            s.tenant_id,
            sl.sales_contract_no,
            sl.customer_name,
            s.shipping_total AS shipping_total,
            slp.id as salesLedgerProductId
        FROM shipping_info s
                 LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
                 LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id and slp.type = 1
        WHERE s.id = #{id}
    </select>
</mapper>
src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -72,7 +72,7 @@
        <if test="ew.productName != null and ew.productName !=''">
            and p.product_name like concat('%',#{ew.productName},'%')
        </if>
        <if test="ew.productModelId != null and ew.productModelId !=''">
        <if test="ew.productModelId != null">
            and pm.id = #{ew.productModelId}
        </if>
    </select>