maven
2025-12-12 b06a2928f34758ccef05650108e2b02d03962a63
yys 商机管理
已添加2个文件
已修改6个文件
181 ■■■■ 文件已修改
src/main/java/com/ruoyi/sales/controller/BusinessOpportunityController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/CommonFileController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/BusinessDescriptionMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/BusinessDescription.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/BusinessOpportunity.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/CommonFile.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/BusinessOpportunityController.java
@@ -1,16 +1,23 @@
package com.ruoyi.sales.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.sales.mapper.BusinessDescriptionMapper;
import com.ruoyi.sales.pojo.BusinessDescription;
import com.ruoyi.sales.pojo.BusinessOpportunity;
import com.ruoyi.sales.service.BusinessOpportunityService;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import io.jsonwebtoken.lang.Collections;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -27,23 +34,53 @@
    @Autowired
    private BusinessOpportunityService businessOpportunityService;
    @Autowired
    private BusinessDescriptionMapper BusinessDescriptionMapper;
    @Autowired
    private CommonFileServiceImpl commonFileService;
    @GetMapping("/listPage")
    @ApiOperation("商机列表")
    public AjaxResult listPage(Page page, BusinessOpportunity businessOpportunity) {
        return AjaxResult.success(businessOpportunityService.listPage(page, businessOpportunity));
        IPage<BusinessOpportunity> businessOpportunityIPage = businessOpportunityService.listPage(page, businessOpportunity);
        businessOpportunityIPage.getRecords().forEach(item -> {
            item.setBusinessCommonFiles(commonFileService.getFileList(item.getId(),9));
            item.setBusinessDescription(BusinessDescriptionMapper.selectList(Wrappers.lambdaQuery(BusinessDescription.class)
                    .eq(BusinessDescription::getBusinessOpportunityId, item.getId())));
        });
        return AjaxResult.success(businessOpportunityIPage);
    }
    @PostMapping("/add")
    @ApiOperation("添加商机")
    @Log(title = "商机管理-添加商机", businessType = BusinessType.INSERT)
    public AjaxResult add(@RequestBody BusinessOpportunity businessOpportunity) {
        return businessOpportunityService.save(businessOpportunity) ? success() : error();
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult add(@RequestBody BusinessOpportunity businessOpportunity) throws  Exception{
        businessOpportunityService.save(businessOpportunity);
        BusinessDescription businessDescription = new BusinessDescription();
        BeanUtils.copyProperties(businessOpportunity, businessDescription);
        businessDescription.setBusinessOpportunityId(businessOpportunity.getId());
        // è¿ç§»ä¸´æ—¶æ–‡ä»¶åˆ°æ­£å¼æ–‡ä»¶
        commonFileService.migrateTempFilesToFormal(businessOpportunity.getId(), businessOpportunity.getTempFileIds());
        return BusinessDescriptionMapper.insert(businessDescription) > 0 ? success() : error();
    }
    @PostMapping("/addDescription")
    @ApiOperation("添加商机描述")
    @Log(title = "商机管理-添加商机描述", businessType = BusinessType.INSERT)
    public AjaxResult addDescription(@RequestBody BusinessDescription businessDescription) throws  Exception{
        // è¿ç§»ä¸´æ—¶æ–‡ä»¶åˆ°æ­£å¼æ–‡ä»¶
        commonFileService.migrateTempFilesToFormal(businessDescription.getBusinessOpportunityId(), businessDescription.getTempFileIds());
        return BusinessDescriptionMapper.insert(businessDescription) > 0 ? success() : error();
    }
    @PostMapping("/update")
    @ApiOperation("修改商机")
    @Log(title = "商机管理-修改商机", businessType = BusinessType.UPDATE)
    public AjaxResult update(@RequestBody BusinessOpportunity businessOpportunity) {
    public AjaxResult update(@RequestBody BusinessOpportunity businessOpportunity) throws  Exception{
        // è¿ç§»ä¸´æ—¶æ–‡ä»¶åˆ°æ­£å¼æ–‡ä»¶
        commonFileService.migrateTempFilesToFormal(businessOpportunity.getId(), businessOpportunity.getTempFileIds());
        return businessOpportunityService.updateById(businessOpportunity) ? success() : error();
    }
src/main/java/com/ruoyi/sales/controller/CommonFileController.java
@@ -33,9 +33,5 @@
        return toAjax(commonFileService.delCommonFileByIds(ids));
    }
    public void migrateTempFilesToFormal(Long businessId, List<String> tempFileIds) throws IOException{
    }
}
src/main/java/com/ruoyi/sales/mapper/BusinessDescriptionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.sales.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.sales.pojo.BusinessDescription;
/**
 * @author :yys
 * @date : 2025/12/12 11:38
 */
public interface BusinessDescriptionMapper extends BaseMapper<BusinessDescription> {
}
src/main/java/com/ruoyi/sales/pojo/BusinessDescription.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package com.ruoyi.sales.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
 * @author :yys
 * @date : 2025/12/12 11:36
 */
@Data
@TableName("business_description")
@ApiModel
public class BusinessDescription {
    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    @ApiModelProperty(value = "临时文件id")
    private List<String> tempFileIds;
    /**
     * åºå·
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    @ApiModelProperty(value = "商机主表id")
    private Long businessOpportunityId;
    @ApiModelProperty(value = "状态")
    private String status;
    @ApiModelProperty(value = "客户描述")
    private String description;
    @ApiModelProperty(value = "录入人")
    private String entryPerson;
    @ApiModelProperty(value = "录入日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date entryDate;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/sales/pojo/BusinessOpportunity.java
@@ -10,6 +10,7 @@
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
 * @author :yys
@@ -21,6 +22,18 @@
public class BusinessOpportunity extends DateQueryDto {
    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    @ApiModelProperty(value = "附件")
    private List<CommonFile> businessCommonFiles;
    @TableField(exist = false)
    @ApiModelProperty(value = "临时文件id")
    private List<String> tempFileIds;
    @ApiModelProperty(value = "商机描述")
    @TableField(exist = false)
    private List<BusinessDescription> businessDescription;
    /**
     * åºå·
     */
@@ -36,11 +49,12 @@
    @ApiModelProperty(value = "客户名称")
    private String customerName;
    @ApiModelProperty(value = "客户描述")
    @TableField(exist = false)
    private String description;
    @ApiModelProperty(value = "商机来源")
    private String businessSource;
    @ApiModelProperty(value = "客户描述")
    private String description;
    @ApiModelProperty(value = "录入人")
    private String entryPerson;
src/main/java/com/ruoyi/sales/pojo/CommonFile.java
@@ -1,6 +1,7 @@
package com.ruoyi.sales.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.ruoyi.common.enums.FileNameType;
import lombok.Data;
import java.time.LocalDateTime;
@@ -27,9 +28,12 @@
    /** æ–‡ä»¶è·¯å¾„ */
    private String url;
    /** å…³è”表 */
    /** å…³è”表类型FileNameType
     * 1:销售 2:采购 3:发票 4:采购台账 5:计量器具台账 6:计量器具台账记录 7:协同审批节点审核 8:协同审批主数据 9: å•†æœº
     * */
    private Integer type;
    /** åˆ›å»ºæ—¶é—´ */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.sales.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.other.mapper.TempFileMapper;
@@ -38,6 +39,13 @@
    @Value("${file.upload-dir}")
    private String uploadDir;
    public List<CommonFile> getFileList(Long id,Integer type) {
        LambdaQueryWrapper<CommonFile> commonFileLambdaQueryWrapper = new LambdaQueryWrapper<>();
        commonFileLambdaQueryWrapper.eq(CommonFile::getCommonId, id)
                .eq(CommonFile::getType, type);
        return list(commonFileLambdaQueryWrapper);
    }
    @Override
@@ -122,13 +130,6 @@
            Path formalFilePath = formalDirPath.resolve(formalFilename);
            try {
                // æ‰§è¡Œæ–‡ä»¶è¿ç§»ï¼ˆä½¿ç”¨åŽŸå­æ“ä½œç¡®ä¿å®‰å…¨æ€§ï¼‰
//                Files.move(
//                        Paths.get(tempFile.getTempPath()),
//                        formalFilePath,
//                        StandardCopyOption.REPLACE_EXISTING,
//                        StandardCopyOption.ATOMIC_MOVE
//                );
                // åŽŸå­ç§»åŠ¨å¤±è´¥ï¼Œä½¿ç”¨å¤åˆ¶+删除
                Files.copy(Paths.get(tempFile.getTempPath()), formalFilePath, StandardCopyOption.REPLACE_EXISTING);
                Files.deleteIfExists(Paths.get(tempFile.getTempPath()));
@@ -142,6 +143,7 @@
                fileRecord.setCreateTime(LocalDateTime.now());
                fileRecord.setType(tempFile.getType());
                commonFileMapper.insert(fileRecord);
                tempFileMapper.deleteById(tempFileId);
                log.info("文件迁移成功: {} -> {}", tempFile.getTempPath(), formalFilePath);
            } catch (IOException e) {
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -480,13 +480,6 @@
            Path formalFilePath = formalDirPath.resolve(formalFilename);
            try {
                // æ‰§è¡Œæ–‡ä»¶è¿ç§»ï¼ˆä½¿ç”¨åŽŸå­æ“ä½œç¡®ä¿å®‰å…¨æ€§ï¼‰
//                Files.move(
//                        Paths.get(tempFile.getTempPath()),
//                        formalFilePath,
//                        StandardCopyOption.REPLACE_EXISTING,
//                        StandardCopyOption.ATOMIC_MOVE
//                );
                // åŽŸå­ç§»åŠ¨å¤±è´¥ï¼Œä½¿ç”¨å¤åˆ¶+删除
                Files.copy(Paths.get(tempFile.getTempPath()), formalFilePath, StandardCopyOption.REPLACE_EXISTING);
                Files.deleteIfExists(Paths.get(tempFile.getTempPath()));