liyong
6 天以前 1d2465f8fc1c63ab8d1b01cd379f17c2b94be78f
fix(sales): 修复报价审批流程中的状态更新和查询逻辑

- 在报价编辑时将审批状态设置为待审批,并结束之前的未审批记录
- 更新销售报价数据映射器以只关联状态为0的审批流程
- 重构审批流程创建逻辑,改用新的审批流程对象进行处理
- 添加异常捕获机制确保审批流程创建失败时系统稳定运行
- 优化XML查询语句使用where标签提升SQL构建安全性
- 为报价控制器更新方法添加操作日志注解记录更新行为
已修改4个文件
70 ■■■■■ 文件已修改
src/main/java/com/ruoyi/sales/controller/SalesQuotationController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/approve/ApproveProcessMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesQuotationMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/SalesQuotationController.java
@@ -1,13 +1,15 @@
package com.ruoyi.sales.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.sales.dto.SalesQuotationDto;
import com.ruoyi.sales.service.SalesQuotationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -45,6 +47,7 @@
        return AjaxResult.success(salesQuotationService.add(salesQuotationDto));
    }
    @PostMapping("/update")
    @Log(title = "报价更新", businessType = BusinessType.UPDATE)
    public AjaxResult update(@RequestBody SalesQuotationDto salesQuotationDto) {
        return AjaxResult.success(salesQuotationService.edit(salesQuotationDto));
    }
src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -8,7 +8,6 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.basic.mapper.CustomerMapper;
import com.ruoyi.basic.mapper.ProductModelMapper;
@@ -113,11 +112,22 @@
    public boolean edit(SalesQuotationDto salesQuotationDto) {
        SalesQuotation salesQuotation = new SalesQuotation();
        BeanUtils.copyProperties(salesQuotationDto, salesQuotation);
        ApproveGetAndUpdateVo vo = new ApproveGetAndUpdateVo();
        if ("拒绝".equals(salesQuotationDto.getStatus())) {
            vo.setApproveStatus(0);
            salesQuotation.setStatus("待审批");
        }
//        if ("拒绝".equals(salesQuotationDto.getStatus())) {
//            vo.setApproveStatus(0);
//            salesQuotation.setStatus("待审批");
//        }
        //编辑将审批改为待审批
        salesQuotation.setStatus("待审批");
        //将之前未审批的结束
        LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
        approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveType, 6)
                .eq(ApproveProcess::getApproveReason, salesQuotationDto.getQuotationNo());
        List<ApproveProcess> approveProcesss = approveProcessService.list(approveProcessLambdaQueryWrapper);
        approveProcesss.forEach(approveProcess -> {
            approveProcess.setApproveStatus(4);
        });
        approveProcessService.updateBatchById(approveProcesss);
        if (salesQuotationMapper.updateById(salesQuotation) != 1) {
            return false;
        }
@@ -134,10 +144,19 @@
        salesQuotationProductService.saveBatch(products);
        // 修改报价审批
        vo.setApproveUserIds(salesQuotationDto.getApproveUserIds());
        vo.setApproveType(6);
        vo.setApproveReason(salesQuotationDto.getQuotationNo());
        approveProcessService.updateApproveUser(vo);
        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
        approveProcessVO.setApproveType(6);
        approveProcessVO.setApproveDeptId(SecurityUtils.getLoginUser().getCurrentDeptId());
        approveProcessVO.setApproveReason(salesQuotation.getQuotationNo());
        approveProcessVO.setApproveUserIds(salesQuotationDto.getApproveUserIds());
        approveProcessVO.setApproveUser(SecurityUtils.getUserId());
        approveProcessVO.setApproveTime(LocalDate.now().toString());
        approveProcessVO.setPrice(salesQuotationDto.getTotalAmount());
        try {
            approveProcessService.addApprove(approveProcessVO);
        }catch (Exception e){
            log.error("SalesQuotationServiceImpl error:{}", e);
        }
        return true;
    }
src/main/resources/mapper/approve/ApproveProcessMapper.xml
@@ -28,15 +28,19 @@
        approve_delete,tenant_id,approve_type,approve_remark
    </sql>
    <select id="listPage" resultType="com.ruoyi.approve.pojo.ApproveProcess">
        select * from approve_process where approve_delete = 0
        <if test="req.approveId != null and req.approveId != ''">
            and approve_id like concat('%',#{req.approveId},'%')
        </if>
        <if test="req.approveStatus != null or req.approveStatus == 0">
            and approve_status = #{req.approveStatus}
        </if>
        <if test="req.approveType != null ">
            and approve_type = #{req.approveType}
        </if>
        select * from approve_process
        <where>
            approve_delete = 0
            <if test="req.approveId != null and req.approveId != ''">
                and approve_id like concat('%',#{req.approveId},'%')
            </if>
            <if test="req.approveStatus != null or req.approveStatus == 0">
                and approve_status = #{req.approveStatus}
            </if>
            <if test="req.approveType != null ">
                and approve_type = #{req.approveType}
            </if>
        </where>
        order by approve_process.create_time desc
    </select>
</mapper>
src/main/resources/mapper/sales/SalesQuotationMapper.xml
@@ -7,7 +7,7 @@
        SELECT t1.*,
               t2.approve_user_ids
        FROM sales_quotation t1
        LEFT JOIN approve_process t2 ON t1.quotation_no = t2.approve_reason and t2.approve_type = 6
        LEFT JOIN approve_process t2 ON t1.quotation_no = t2.approve_reason and t2.approve_type = 6  and t2.approve_status = 0
        WHERE 1=1
        <if test="salesQuotationDto.quotationNo != null and salesQuotationDto.quotationNo != '' ">
            AND t1.quotation_no LIKE CONCAT('%',#{salesQuotationDto.quotationNo},'%')