liyong
昨天 6d8e5278b57952092e420347ace8704b71d7f70c
报价添加附件
已添加6个文件
已修改3个文件
257 ■■■■■ 文件已修改
src/main/java/com/ruoyi/sales/controller/SalesQuotationFileController.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/dto/SalesQuotationDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/SalesQuotationFileMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesQuotationFile.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/SalesQuotationFileService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesQuotationFileServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/approve/KnowledgeBaseFileMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesQuotationFileMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/SalesQuotationFileController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.sales.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.approve.pojo.KnowledgeBaseFile;
import com.ruoyi.approve.service.KnowledgeBaseFileService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.sales.pojo.SalesQuotationFile;
import com.ruoyi.sales.service.SalesQuotationFileService;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
 * é”€å”®æŠ¥ä»·--附件 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-04-09 11:19:20
 */
@RestController
@RequestMapping("/salesQuotationFile")
public class SalesQuotationFileController {
    @Resource
    private SalesQuotationFileService salesQuotationFileService;
    /**
     * æ–°å¢ž
     * @param accountFile
     * @return
     */
    @PostMapping("/add")
    @ApiOperation("新增")
    public AjaxResult add(@RequestBody SalesQuotationFile accountFile) {
        return AjaxResult.success(salesQuotationFileService.save(accountFile));
    }
    /**
     * åˆ é™¤
     * @param ids
     * @return
     */
    @DeleteMapping("/del")
    @ApiOperation("删除")
    public AjaxResult delAccountFile(@RequestBody List<Integer> ids) {
        if(CollectionUtils.isEmpty(ids)){
            return AjaxResult.error("请选择至少一条数据");
        }
        //删除检验附件
        return AjaxResult.success(salesQuotationFileService.removeBatchByIds(ids));
    }
    /**
     *分页查询
     * @param page
     * @param accountFile
     * @return
     */
    @GetMapping("/listPage")
    @ApiOperation("分页查询")
    public AjaxResult accountFileListPage(Page page, SalesQuotationFile accountFile) {
        return AjaxResult.success(salesQuotationFileService.knowledgeBaseFileListPage(page, accountFile));
    }
}
src/main/java/com/ruoyi/sales/dto/SalesQuotationDto.java
@@ -1,6 +1,7 @@
package com.ruoyi.sales.dto;
import com.ruoyi.sales.pojo.SalesQuotation;
import com.ruoyi.sales.pojo.SalesQuotationFile;
import com.ruoyi.sales.pojo.SalesQuotationProduct;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -17,4 +18,6 @@
     */
    // å®¡æ‰¹äºº
    private String approveUserIds;
    private List<SalesQuotationFile> files;
}
src/main/java/com/ruoyi/sales/mapper/SalesQuotationFileMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.sales.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.sales.pojo.SalesQuotationFile;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 * é”€å”®æŠ¥ä»·--附件 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-04-09 11:19:20
 */
@Mapper
public interface SalesQuotationFileMapper extends BaseMapper<SalesQuotationFile> {
    IPage<SalesQuotationFile> salesQuotationFilePage(Page page, SalesQuotationFile accountFile);
}
src/main/java/com/ruoyi/sales/pojo/SalesQuotationFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.ruoyi.sales.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
/**
 * <p>
 * é”€å”®æŠ¥ä»·--附件
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-04-09 11:19:20
 */
@Getter
@Setter
@TableName("sales_quotation_file")
@ApiModel(value = "SalesQuotationFile对象", description = "销售报价--附件")
public class SalesQuotationFile implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty("文件名称")
    private String name;
    @ApiModelProperty("文件路径")
    private String url;
    @ApiModelProperty("文件大小")
    private Integer fileSize;
    @ApiModelProperty("销售报价id")
    private Long salesQuotationId;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Long createUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;
    @ApiModelProperty("租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/sales/service/SalesQuotationFileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.sales.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.sales.pojo.SalesQuotationFile;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * <p>
 * é”€å”®æŠ¥ä»·--附件 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-04-09 11:19:20
 */
public interface SalesQuotationFileService extends IService<SalesQuotationFile> {
    IPage<SalesQuotationFile> knowledgeBaseFileListPage(Page page, SalesQuotationFile accountFile);
}
src/main/java/com/ruoyi/sales/service/impl/SalesQuotationFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.sales.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.sales.pojo.SalesQuotationFile;
import com.ruoyi.sales.mapper.SalesQuotationFileMapper;
import com.ruoyi.sales.service.SalesQuotationFileService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * <p>
 * é”€å”®æŠ¥ä»·--附件 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2026-04-09 11:19:20
 */
@Service
public class SalesQuotationFileServiceImpl extends ServiceImpl<SalesQuotationFileMapper, SalesQuotationFile> implements SalesQuotationFileService {
    @Autowired
    private  SalesQuotationFileMapper salesQuotationFileMapper;
    @Override
    public IPage<SalesQuotationFile> knowledgeBaseFileListPage(Page page, SalesQuotationFile accountFile) {
        return salesQuotationFileMapper.salesQuotationFilePage(page,accountFile);
    }
}
src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -2,6 +2,7 @@
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.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -17,9 +18,11 @@
import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.sales.dto.SalesQuotationDto;
import com.ruoyi.sales.mapper.SalesQuotationFileMapper;
import com.ruoyi.sales.mapper.SalesQuotationMapper;
import com.ruoyi.sales.mapper.SalesQuotationProductMapper;
import com.ruoyi.sales.pojo.SalesQuotation;
import com.ruoyi.sales.pojo.SalesQuotationFile;
import com.ruoyi.sales.pojo.SalesQuotationProduct;
import com.ruoyi.sales.service.SalesQuotationProductService;
import com.ruoyi.sales.service.SalesQuotationService;
@@ -45,6 +48,9 @@
    @Autowired
    private ApproveProcessServiceImpl approveProcessService;
    @Autowired
    private SalesQuotationFileMapper salesQuotationFileMapper;
    @Override
    public IPage<SalesQuotationDto> listPage(Page page, SalesQuotationDto salesQuotationDto) {
        IPage<SalesQuotationDto> salesQuotationDtoIPage = salesQuotationMapper.listPage(page, salesQuotationDto);
@@ -54,6 +60,7 @@
        salesQuotationDtoIPage.getRecords().forEach(record -> {
            List<SalesQuotationProduct> products = salesQuotationProductMapper.selectBySalesQuotationId(record.getId());
            record.setProducts(products);
            record.setFiles(salesQuotationFileMapper.selectList(new QueryWrapper<SalesQuotationFile>().lambda().eq(SalesQuotationFile::getSalesQuotationId, record.getId())));
        });
        return salesQuotationDtoIPage;
    }
@@ -92,6 +99,10 @@
            log.error("SalesQuotationServiceImpl error:{}", e);
            throw new RuntimeException("审批失败");
        }
        for (SalesQuotationFile file : salesQuotationDto.getFiles()) {
            file.setSalesQuotationId(salesQuotation.getId());
            salesQuotationFileMapper.insert(file);
        }
        return true;
    }
    @Override
@@ -123,6 +134,12 @@
        vo.setApproveType(6);
        vo.setApproveReason(salesQuotationDto.getQuotationNo());
        approveProcessService.updateApproveUser(vo);
        for (SalesQuotationFile file : salesQuotationDto.getFiles()) {
            if (file.getId() == null) {
                file.setSalesQuotationId(salesQuotation.getId());
                salesQuotationFileMapper.insert(file);
            }
        }
        return true;
    }
    @Override
src/main/resources/mapper/approve/KnowledgeBaseFileMapper.xml
@@ -18,7 +18,7 @@
    <select id="knowledgeBaseFileListPage" resultType="com.ruoyi.approve.pojo.KnowledgeBaseFile">
        SELECT
        *
        FROM account_file
        FROM knowledge_base_file
        where
        <if test="accountFile.knowledgeBaseId != null and accountFile.knowledgeBaseId != ''">
            AND knowledge_base_id = #{accountFile.knowledgeBaseId}
src/main/resources/mapper/sales/SalesQuotationFileMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.sales.mapper.SalesQuotationFileMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.sales.pojo.SalesQuotationFile">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="url" property="url" />
        <result column="file_size" property="fileSize" />
        <result column="sales_quotation_id" property="salesQuotationId" />
        <result column="create_time" property="createTime" />
        <result column="create_user" property="createUser" />
        <result column="update_time" property="updateTime" />
        <result column="update_user" property="updateUser" />
        <result column="tenant_id" property="tenantId" />
    </resultMap>
    <select id="salesQuotationFilePage" resultType="com.ruoyi.sales.pojo.SalesQuotationFile">
        SELECT
        *
        FROM sales_quotation_file
        where
        <if test="accountFile.knowledgeBaseId != null and accountFile.knowledgeBaseId != ''">
            AND knowledge_base_id = #{accountFile.knowledgeBaseId}
        </if>
        <if test="accountFile.name != null and accountFile.name != '' ">
            AND name = #{accountFile.name}
        </if>
    </select>
</mapper>