Commit f3dac9c3 authored by wangjiancheng's avatar wangjiancheng

feat:项目管理

parent 5581ef71
package com.ruoyi.web.controller.system;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.system.domain.ProjectManage;
import com.ruoyi.system.domain.ProjectRepayment;
import com.ruoyi.system.mapper.ProjectRepaymentMapper;
import com.ruoyi.system.service.IProjectManageService;
import com.ruoyi.system.service.IProjectRepaymentService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 项目管理Controller
*
* @author wangjiancheng
* @date 2025-02-26
*/
@RestController
@RequestMapping("/system/project")
public class ProjectManageController extends BaseController
{
@Autowired
private IProjectManageService projectManageService;
@Autowired
private IProjectRepaymentService projectRepaymentService;
@Autowired
private ProjectRepaymentMapper projectRepaymentMapper;
/**
* 查询项目管理列表
*/
@PreAuthorize("@ss.hasPermi('system:project:list')")
@GetMapping("/list")
public TableDataInfo list(ProjectManage projectManage)
{
startPage();
// 查询数据库中所有项目
List<ProjectManage> list = projectManageService.selectProjectManageList(projectManage);
// 设置项目的回款详情
for (ProjectManage projectManage1 : list) {
projectManage1.setRepaymentCount(projectRepaymentMapper.countProjectRepayment(projectManage1.getId()));
ProjectRepayment projectRepayment = new ProjectRepayment();
projectRepayment.setProjectId(projectManage1.getId());
projectManage1.setRepaymentDetails(projectRepaymentService.selectProjectRepaymentList(projectRepayment));
// 设置项目附件
}
return getDataTable(list);
}
/**
* 导出项目管理列表
*/
@PreAuthorize("@ss.hasPermi('system:project:export')")
@Log(title = "项目管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ProjectManage projectManage)
{
List<ProjectManage> list = projectManageService.selectProjectManageList(projectManage);
ExcelUtil<ProjectManage> util = new ExcelUtil<ProjectManage>(ProjectManage.class);
util.exportExcel(response, list, "项目管理数据");
}
/**
* 获取项目管理详细信息
*/
@PreAuthorize("@ss.hasPermi('system:project:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(projectManageService.selectProjectManageById(id));
}
/**
* 新增项目管理
*/
@PreAuthorize("@ss.hasPermi('system:project:add')")
@Log(title = "项目管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ProjectManage projectManage)
{
projectManage.setDelFlag(String.valueOf(ProjectManage.NO_DELETE));
return toAjax(projectManageService.insertProjectManage(projectManage));
}
/**
* 修改项目管理
*/
@PreAuthorize("@ss.hasPermi('system:project:edit')")
@Log(title = "项目管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ProjectManage projectManage)
{
return toAjax(projectManageService.updateProjectManage(projectManage));
}
/**
* 删除项目管理
*/
@PreAuthorize("@ss.hasPermi('system:project:remove')")
@Log(title = "项目管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(projectManageService.deleteProjectManageByIds(ids));
}
/*
* 查询草稿箱项目
* */
@PreAuthorize("@ss.hasPermi('system:project:draft')")
@GetMapping("/draft/list")
public TableDataInfo draft(ProjectManage projectManage)
{
startPage();
List<ProjectManage> list = projectManageService.selectProjectManageListDraft(projectManage);
for (ProjectManage projectManage1 : list) {
// 设置项目的回款详情
projectManage1.setRepaymentCount(projectRepaymentMapper.countProjectRepayment(projectManage1.getId()));
ProjectRepayment projectRepayment = new ProjectRepayment();
projectRepayment.setProjectId(projectManage1.getId());
projectManage1.setRepaymentDetails(projectRepaymentService.selectProjectRepaymentList(projectRepayment));
// 设置项目附件
}
return getDataTable(list);
}
/*
* 新增草稿箱项目
* */
@PreAuthorize("@ss.hasPermi('system:project:add')")
@Log(title = "项目管理", businessType = BusinessType.INSERT)
@PostMapping("/draft")
public AjaxResult addDraft(@RequestBody ProjectManage projectManage)
{
projectManage.setDraft(String.valueOf(ProjectManage.DRAFT));
return toAjax(projectManageService.insertProjectManage(projectManage));
}
/*
* 逻辑删除项目
* */
@PreAuthorize("@ss.hasPermi('system:project:logicRemove')")
@Log(title = "项目管理", businessType = BusinessType.OTHER)
@DeleteMapping("/logicRemove/{id}")
public AjaxResult logicRemove(@PathVariable("id") Long id)
{
ProjectManage projectManage = new ProjectManage();
projectManage.setId(id);
projectManage.setDelFlag(String.valueOf(ProjectManage.DELETE));
return toAjax(projectManageService.updateProjectManage(projectManage));
}
}
package com.ruoyi.common.utils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
public class ProjectNumberGenerator {
// 存储当天每种类型的项目计数器
private static final ConcurrentHashMap<String, AtomicInteger> projectCounter = new ConcurrentHashMap<>();
/**
* 生成项目编号
*
* @param type 项目类型 (KF RL YW PX PT LZ )
* @return 生成的项目编号
*/
public static String generateProjectNumber(String type) {
String currentDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
// 用于区分不同类型的项目
String key = currentDate + type;
// 如果该类型今天没有生成过编号,则初始化计数器为 1
projectCounter.computeIfAbsent(key, k -> new AtomicInteger(1));
// 获取当前计数器值并递增
int count = projectCounter.get(key).getAndIncrement();
// 格式化序号为三位数
String formattedCount = String.format("%03d", count);
return currentDate + type + formattedCount;
}
}
package com.ruoyi.system.domain;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 项目管理对象 project_manage
*
* @author wangjiancheng
* @date 2025-02-26
*/
@Data
public class ProjectManage extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键id */
private Long id;
/** 项目编号 */
@Excel(name = "项目编号")
private String projectNumber;
/** 项目名称 */
@Excel(name = "项目名称")
private String projectName;
/** 项目类型 */
@Excel(name = "项目类型")
private String projectType;
/** 预计开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "预计开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date startDate;
/** 预计结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "预计结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date endDate;
/** 事业部负责人 */
@Excel(name = "事业部负责人")
private Long departmentLeaderId;
/** 项目经理 */
@Excel(name = "项目经理")
private Long projectManagerId;
/** 项目成本 */
@Excel(name = "项目成本")
private BigDecimal projectCost;
/** 项目描述 */
@Excel(name = "项目描述")
private String projectDescribe;
/** 项目状态 */
@Excel(name = "项目状态")
private String projectStatus;
/** 立项时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "立项时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date createDate;
/** 更新时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date updateDate;
/** 草稿箱(0-草稿 1-不是) */
private String draft;
/** 删除标记(0-存在 1-删除) */
private String delFlag;
// 事业部负责人名称(查询列表)
@TableField(exist = false)
private String departmentLeaderName;
// 项目经理名称(查询列表)
@TableField(exist = false)
private String projectManagerName;
// 查询项目成员名称(查询列表)
@TableField(exist = false)
private String projectMemberNames;
// 项目成员(详情,新增)
@TableField(exist = false)
private List<Long> projectMemberIds;
// 回款笔数
@TableField(exist = false)
private int repaymentCount;
// 回款信息
@TableField(exist = false)
private List<ProjectRepayment> repaymentDetails;
public static final int NO_DELETE = 0;
public static final int DELETE = 1;
public static final int DRAFT = 0;
public static final int NOT_DRAFT = 1;
}
package com.ruoyi.system.domain;
import lombok.Data;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 项目成员对象 project_member
*
* @author ruoyi
* @date 2025-02-28
*/
@Data
public class ProjectMember extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 项目id 关联项目管理表主键id */
private Long projectId;
/** 用户id关联用户表主键id */
private Long userId;
}
package com.ruoyi.system.domain;
import lombok.Data;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 项目回款对象 project_repayment
*
* @author ruoyi
* @date 2025-02-28
*/
@Data
public class ProjectRepayment extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 回款id */
private Long repaymentId;
/** 回款百分比 */
@Excel(name = "回款百分比")
private String repaymentPercentage;
/** 回款前置条件 */
@Excel(name = "回款前置条件")
private String repaymentCondition;
/** 关联项目管理表主键id */
@Excel(name = "关联项目管理表主键id")
private Long projectId;
/** 备注 */
@Excel(name = "备注")
private String notes;
}
package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.ProjectManage;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 项目管理Mapper接口
*
* @author wangjiancheng
* @date 2025-02-26
*/
public interface ProjectManageMapper
{
/**
* 查询项目管理
*
* @param id 项目管理主键
* @return 项目管理
*/
public ProjectManage selectProjectManageById(@Param("id") Long id);
/**
* 查询项目管理列表
*
* @param projectManage 项目管理
* @return 项目管理集合
*/
public List<ProjectManage> selectProjectManageList(ProjectManage projectManage);
/*
* 查询草稿箱项目管理列表
* */
public List<ProjectManage> selectProjectManageListDraft(ProjectManage projectManage);
/**
* 新增项目管理
*
* @param projectManage 项目管理
* @return 结果
*/
public int insertProjectManage(ProjectManage projectManage);
/**
* 修改项目管理
*
* @param projectManage 项目管理
* @return 结果
*/
public int updateProjectManage(ProjectManage projectManage);
/**
* 删除项目管理
*
* @param id 项目管理主键
* @return 结果
*/
public int deleteProjectManageById(Long id);
/**
* 批量删除项目管理
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteProjectManageByIds(Long[] ids);
}
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.ProjectMember;
import org.apache.ibatis.annotations.Param;
/**
* 项目成员Mapper接口
*
* @author ruoyi
* @date 2025-02-28
*/
public interface ProjectMemberMapper
{
/**
* 查询项目成员
*
* @param projectId 项目成员主键
* @return 项目成员
*/
public ProjectMember selectProjectMemberByProjectId(Long projectId);
/**
* 查询项目成员列表
*
* @param projectMember 项目成员
* @return 项目成员集合
*/
public List<ProjectMember> selectProjectMemberList(ProjectMember projectMember);
/**
* 新增项目成员
*
* @param projectMember 项目成员
* @return 结果
*/
public int insertProjectMember(ProjectMember projectMember);
/**
* 修改项目成员
*
* @param projectMember 项目成员
* @return 结果
*/
public int updateProjectMember(ProjectMember projectMember);
/**
* 删除项目成员
*
* @param projectId 项目成员主键
* @return 结果
*/
public int deleteProjectMemberByProjectId(Long projectId);
/**
* 批量删除项目成员
*
* @param projectIds 需要删除的数据主键集合
* @return 结果
*/
public int deleteProjectMemberByProjectIds(Long[] projectIds);
/**
* 批量新增项目成员
*
* @param projectId 项目 ID
* @param memberIds 成员 ID 列表
*/
void batchInsertProjectMembers(@Param("projectId") Long projectId, @Param("memberIds") List<Long> memberIds);
}
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.ProjectRepayment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 项目回款Mapper接口
*
* @author ruoyi
* @date 2025-02-28
*/
@Mapper
public interface ProjectRepaymentMapper extends BaseMapper<ProjectRepayment>
{
/**
* 查询项目回款
*
* @param repaymentId 项目回款主键
* @return 项目回款
*/
public ProjectRepayment selectProjectRepaymentByRepaymentId(Long repaymentId);
/**
* 查询项目回款列表
*
* @param projectRepayment 项目回款
* @return 项目回款集合
*/
public List<ProjectRepayment> selectProjectRepaymentList(ProjectRepayment projectRepayment);
/**
* 新增项目回款
*
* @param projectRepayment 项目回款
* @return 结果
*/
public int insertProjectRepayment(ProjectRepayment projectRepayment);
/**
* 修改项目回款
*
* @param projectRepayment 项目回款
* @return 结果
*/
public int updateProjectRepayment(ProjectRepayment projectRepayment);
/**
* 删除项目回款
*
* @param repaymentId 项目回款主键
* @return 结果
*/
public int deleteProjectRepaymentByRepaymentId(Long repaymentId);
/**
* 批量删除项目回款
*
* @param repaymentIds 需要删除的数据主键集合
* @return 结果
*/
public int deleteProjectRepaymentByRepaymentIds(Long[] repaymentIds);
/*
* 统计个项目回款笔数
* @param projectId 项目id
*
* */
int countProjectRepayment(Long projectId);
/*
* 批量插入项目回款
* */
void batchInsertProjectRepayments(@Param("projectRepayments") List<ProjectRepayment> projectRepayments);
}
package com.ruoyi.system.service;
import com.ruoyi.system.domain.ProjectManage;
import java.util.List;
/**
* 项目管理Service接口
*
* @author wangjiancheng
* @date 2025-02-26
*/
public interface IProjectManageService
{
/**
* 查询项目管理
*
* @param id 项目管理主键
* @return 项目管理
*/
public ProjectManage selectProjectManageById(Long id);
/**
* 查询项目管理列表
*
* @param projectManage 项目管理
* @return 项目管理集合
*/
public List<ProjectManage> selectProjectManageList(ProjectManage projectManage);
/*
* 查询草稿箱项目
* @param projectManage 草稿箱项目管理
* */
public List<ProjectManage> selectProjectManageListDraft(ProjectManage projectManage);
/**
* 新增项目管理
*
* @param projectManage 项目管理
* @return 结果
*/
public int insertProjectManage(ProjectManage projectManage);
/**
* 修改项目管理
*
* @param projectManage 项目管理
* @return 结果
*/
public int updateProjectManage(ProjectManage projectManage);
/**
* 批量删除项目管理
*
* @param ids 需要删除的项目管理主键集合
* @return 结果
*/
public int deleteProjectManageByIds(Long[] ids);
/**
* 删除项目管理信息
*
* @param id 项目管理主键
* @return 结果
*/
public int deleteProjectManageById(Long id);
}
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.system.domain.ProjectMember;
/**
* 项目成员Service接口
*
* @author ruoyi
* @date 2025-02-28
*/
public interface IProjectMemberService
{
/**
* 查询项目成员
*
* @param projectId 项目成员主键
* @return 项目成员
*/
public ProjectMember selectProjectMemberByProjectId(Long projectId);
/**
* 查询项目成员列表
*
* @param projectMember 项目成员
* @return 项目成员集合
*/
public List<ProjectMember> selectProjectMemberList(ProjectMember projectMember);
/**
* 新增项目成员
*
* @param projectMember 项目成员
* @return 结果
*/
public int insertProjectMember(ProjectMember projectMember);
/**
* 修改项目成员
*
* @param projectMember 项目成员
* @return 结果
*/
public int updateProjectMember(ProjectMember projectMember);
/**
* 批量删除项目成员
*
* @param projectIds 需要删除的项目成员主键集合
* @return 结果
*/
public int deleteProjectMemberByProjectIds(Long[] projectIds);
/**
* 删除项目成员信息
*
* @param projectId 项目成员主键
* @return 结果
*/
public int deleteProjectMemberByProjectId(Long projectId);
/*
* 批量新增项目成员
* @param projectId 项目id
* @param memberIds 成员id集合
* */
public void batchInsertProjectMembers(Long projectId, List<Long> memberIds);
}
package com.ruoyi.system.service;
import com.ruoyi.system.domain.ProjectRepayment;
import java.util.List;
/**
* 项目回款Service接口
*
* @author ruoyi
* @date 2025-02-28
*/
public interface IProjectRepaymentService
{
/**
* 查询项目回款
*
* @param repaymentId 项目回款主键
* @return 项目回款
*/
public ProjectRepayment selectProjectRepaymentByRepaymentId(Long repaymentId);
/**
* 查询项目回款列表
*
* @param projectRepayment 项目回款
* @return 项目回款集合
*/
public List<ProjectRepayment> selectProjectRepaymentList(ProjectRepayment projectRepayment);
/**
* 新增项目回款
*
* @param projectRepayment 项目回款
* @return 结果
*/
public int insertProjectRepayment(ProjectRepayment projectRepayment);
/**
* 修改项目回款
*
* @param projectRepayment 项目回款
* @return 结果
*/
public int updateProjectRepayment(ProjectRepayment projectRepayment);
/**
* 批量删除项目回款
*
* @param repaymentIds 需要删除的项目回款主键集合
* @return 结果
*/
public int deleteProjectRepaymentByRepaymentIds(Long[] repaymentIds);
/**
* 删除项目回款信息
*
* @param repaymentId 项目回款主键
* @return 结果
*/
public int deleteProjectRepaymentByRepaymentId(Long repaymentId);
/*
* 批量插入项目回款信息
* @param projectRepayments 项目回款信息集合
*
* */
public void batchInsertProjectRepayments(List<ProjectRepayment> projectRepayments);
}
package com.ruoyi.system.service.impl;
import java.util.*;
import java.util.stream.Collectors;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ProjectNumberGenerator;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.ProjectManage;
import com.ruoyi.system.domain.ProjectMember;
import com.ruoyi.system.domain.ProjectRepayment;
import com.ruoyi.system.mapper.ProjectManageMapper;
import com.ruoyi.system.mapper.ProjectRepaymentMapper;
import com.ruoyi.system.service.IProjectManageService;
import com.ruoyi.system.service.IProjectMemberService;
import com.ruoyi.system.service.IProjectRepaymentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 项目管理Service业务层处理
*
* @author wangjiancheng
* @date 2025-02-26
*/
@Service
public class ProjectManageServiceImpl implements IProjectManageService {
@Autowired
private ProjectManageMapper projectManageMapper;
@Autowired
private IProjectMemberService projectMemberService;
@Autowired
private IProjectRepaymentService projectRepaymentService;
@Autowired
private ProjectRepaymentMapper projectRepaymentMapper;
/**
* 查询项目管理
*
* @param id 项目管理主键
* @return 项目管理
*/
@Override
public ProjectManage selectProjectManageById(Long id) {
ProjectManage projectManage = projectManageMapper.selectProjectManageById(id);
String projectMemberIdsStr = projectManage.getProjectMemberNames().trim();
if (projectMemberIdsStr.isEmpty()) {
// 设置为空列表
projectManage.setProjectMemberIds(new ArrayList<>());
} else {
// 将字符串分割并转换为 Long 类型的列表
projectManage.setProjectMemberIds(Arrays.stream(projectMemberIdsStr.split(","))
.map(Long::parseLong)
.collect(Collectors.toList()));
}
// 设置项目的回款详情
projectManage.setRepaymentCount(projectRepaymentMapper.countProjectRepayment(id));
ProjectRepayment projectRepayment = new ProjectRepayment();
projectRepayment.setProjectId(id);
projectManage.setRepaymentDetails(projectRepaymentService.selectProjectRepaymentList(projectRepayment));
// 设置项目附件
return projectManage;
}
/**
* 查询项目管理列表
*
* @param projectManage 项目管理
* @return 项目管理
*/
@Override
public List<ProjectManage> selectProjectManageList(ProjectManage projectManage) {
return projectManageMapper.selectProjectManageList(projectManage);
}
/*
* 查询草稿箱项目
* */
@Override
public List<ProjectManage> selectProjectManageListDraft(ProjectManage projectManage) {
return projectManageMapper.selectProjectManageListDraft(projectManage);
}
/**
* 新增项目管理
*
* @param projectManage 项目管理
* @return 结果
*/
@Override
public int insertProjectManage(ProjectManage projectManage) {
// 生成项目编号
projectManage.setProjectNumber(ProjectNumberGenerator.generateProjectNumber(projectManage.getProjectType()));
// 判断项目编号是否重复
ProjectManage projectManageQuery = new ProjectManage();
projectManageQuery.setProjectNumber(projectManage.getProjectNumber());
if (!selectProjectManageList(projectManageQuery).isEmpty()) {
return 0;
}
// 立项时间
projectManage.setCreateDate(new Date());
projectManage.setDelFlag(String.valueOf(ProjectManage.NO_DELETE));
//projectManage.setUpdateDate(new Date());
// 事业部负责人
projectManage.setDepartmentLeaderId(SecurityUtils.getUserId());
// 新增项目成员
projectManage.getProjectMemberIds().forEach(memberId -> {
ProjectMember projectMember = new ProjectMember();
projectMember.setProjectId(projectManage.getId());
projectMember.setUserId(memberId);
projectMemberService.insertProjectMember(projectMember);
});
//projectMemberService.batchInsertProjectMembers(projectManage.getId(), projectManage.getProjectMemberIds());
// 新增项目回款
projectManage.getRepaymentDetails().forEach(projectRepayment -> {
projectRepayment.setProjectId(projectManage.getId());
projectRepaymentService.insertProjectRepayment(projectRepayment);
});
// 新增项目附件
return projectManageMapper.insertProjectManage(projectManage);
}
/**
* 修改项目管理
*
* @param projectManage 项目管理
* @return 结果
*/
@Override
public int updateProjectManage(ProjectManage projectManage) {
if (projectManage.getProjectMemberIds() != null && !projectManage.getProjectMemberIds().isEmpty()){
// 项目成员
projectManage.getProjectMemberIds().forEach(memberId -> {
ProjectMember projectMember = new ProjectMember();
projectMember.setProjectId(projectManage.getId());
projectMember.setUserId(memberId);
// 判断同一项目下成员是否重复
if (!projectMemberService.selectProjectMemberList(projectMember).isEmpty()) {
System.out.println("项目成员已存在");
return;
}else {
projectMemberService.insertProjectMember(projectMember);
}
});
}
if (projectManage.getRepaymentDetails() != null && !projectManage.getRepaymentDetails().isEmpty()){
// 项目回款
projectManage.getRepaymentDetails().forEach(projectRepayment -> {
// 判断同一项目下回款是否重复 直接删除重新添加新的
if (!projectRepaymentService.selectProjectRepaymentList(projectRepayment).isEmpty()) {
System.out.println("项目回款重复");
return;
}else {
projectRepayment.setProjectId(projectManage.getId());
projectRepaymentService.insertProjectRepayment(projectRepayment);
}
});
}
// 更新附件
projectManage.setUpdateDate(DateUtils.getNowDate());
return projectManageMapper.updateProjectManage(projectManage);
}
/**
* 批量删除项目管理
*
* @param ids 需要删除的项目管理主键
* @return 结果
*/
@Override
public int deleteProjectManageByIds(Long[] ids) {
return projectManageMapper.deleteProjectManageByIds(ids);
}
/**
* 删除项目管理信息
*
* @param id 项目管理主键
* @return 结果
*/
@Override
public int deleteProjectManageById(Long id) {
return projectManageMapper.deleteProjectManageById(id);
}
}
package com.ruoyi.system.service.impl;
import java.util.List;
import com.ruoyi.system.mapper.ProjectMemberMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.ProjectMember;
import com.ruoyi.system.service.IProjectMemberService;
/**
* 项目成员Service业务层处理
*
* @author ruoyi
* @date 2025-02-28
*/
@Service
public class ProjectMemberServiceImpl implements IProjectMemberService
{
@Autowired
private ProjectMemberMapper projectMemberMapper;
/**
* 查询项目成员
*
* @param projectId 项目成员主键
* @return 项目成员
*/
@Override
public ProjectMember selectProjectMemberByProjectId(Long projectId)
{
return projectMemberMapper.selectProjectMemberByProjectId(projectId);
}
/**
* 查询项目成员列表
*
* @param projectMember 项目成员
* @return 项目成员
*/
@Override
public List<ProjectMember> selectProjectMemberList(ProjectMember projectMember)
{
return projectMemberMapper.selectProjectMemberList(projectMember);
}
/**
* 新增项目成员
*
* @param projectMember 项目成员
* @return 结果
*/
@Override
public int insertProjectMember(ProjectMember projectMember)
{
return projectMemberMapper.insertProjectMember(projectMember);
}
/**
* 修改项目成员
*
* @param projectMember 项目成员
* @return 结果
*/
@Override
public int updateProjectMember(ProjectMember projectMember)
{
return projectMemberMapper.updateProjectMember(projectMember);
}
/**
* 批量删除项目成员
*
* @param projectIds 需要删除的项目成员主键
* @return 结果
*/
@Override
public int deleteProjectMemberByProjectIds(Long[] projectIds)
{
return projectMemberMapper.deleteProjectMemberByProjectIds(projectIds);
}
/**
* 删除项目成员信息
*
* @param projectId 项目成员主键
* @return 结果
*/
@Override
public int deleteProjectMemberByProjectId(Long projectId)
{
return projectMemberMapper.deleteProjectMemberByProjectId(projectId);
}
@Override
public void batchInsertProjectMembers(Long projectId, List<Long> memberIds) {
if (memberIds != null && !memberIds.isEmpty()) {
projectMemberMapper.batchInsertProjectMembers(projectId, memberIds);
}
}
}
package com.ruoyi.system.service.impl;
import java.util.List;
import com.ruoyi.system.domain.ProjectRepayment;
import com.ruoyi.system.mapper.ProjectRepaymentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.service.IProjectRepaymentService;
/**
* 项目回款Service业务层处理
*
* @author ruoyi
* @date 2025-02-28
*/
@Service
public class ProjectRepaymentServiceImpl implements IProjectRepaymentService
{
@Autowired
private ProjectRepaymentMapper projectRepaymentMapper;
/**
* 查询项目回款
*
* @param repaymentId 项目回款主键
* @return 项目回款
*/
@Override
public ProjectRepayment selectProjectRepaymentByRepaymentId(Long repaymentId)
{
return projectRepaymentMapper.selectProjectRepaymentByRepaymentId(repaymentId);
}
/**
* 查询项目回款列表
*
* @param projectRepayment 项目回款
* @return 项目回款
*/
@Override
public List<ProjectRepayment> selectProjectRepaymentList(ProjectRepayment projectRepayment)
{
return projectRepaymentMapper.selectProjectRepaymentList(projectRepayment);
}
/**
* 新增项目回款
*
* @param projectRepayment 项目回款
* @return 结果
*/
@Override
public int insertProjectRepayment(ProjectRepayment projectRepayment)
{
return projectRepaymentMapper.insertProjectRepayment(projectRepayment);
}
/**
* 修改项目回款
*
* @param projectRepayment 项目回款
* @return 结果
*/
@Override
public int updateProjectRepayment(ProjectRepayment projectRepayment)
{
return projectRepaymentMapper.updateProjectRepayment(projectRepayment);
}
/**
* 批量删除项目回款
*
* @param repaymentIds 需要删除的项目回款主键
* @return 结果
*/
@Override
public int deleteProjectRepaymentByRepaymentIds(Long[] repaymentIds)
{
return projectRepaymentMapper.deleteProjectRepaymentByRepaymentIds(repaymentIds);
}
/**
* 删除项目回款信息
*
* @param repaymentId 项目回款主键
* @return 结果
*/
@Override
public int deleteProjectRepaymentByRepaymentId(Long repaymentId)
{
return projectRepaymentMapper.deleteProjectRepaymentByRepaymentId(repaymentId);
}
@Override
public void batchInsertProjectRepayments(List<ProjectRepayment> projectRepayments) {
projectRepaymentMapper.batchInsertProjectRepayments(projectRepayments);
}
}
<?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.system.mapper.ProjectMemberMapper">
<resultMap type="ProjectMember" id="ProjectMemberResult">
<result property="projectId" column="project_id" />
<result property="userId" column="user_id" />
</resultMap>
<sql id="selectProjectMemberVo">
select project_id, user_id from project_member
</sql>
<select id="selectProjectMemberList" parameterType="ProjectMember" resultMap="ProjectMemberResult">
<include refid="selectProjectMemberVo"/>
<where>
</where>
</select>
<select id="selectProjectMemberByProjectId" parameterType="Long" resultMap="ProjectMemberResult">
<include refid="selectProjectMemberVo"/>
where project_id = #{projectId}
</select>
<insert id="insertProjectMember" parameterType="ProjectMember">
insert into project_member
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="projectId != null">project_id,</if>
<if test="userId != null">user_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="projectId != null">#{projectId},</if>
<if test="userId != null">#{userId},</if>
</trim>
</insert>
<update id="updateProjectMember" parameterType="ProjectMember">
update project_member
<trim prefix="SET" suffixOverrides=",">
<if test="userId != null">user_id = #{userId},</if>
</trim>
where project_id = #{projectId}
</update>
<delete id="deleteProjectMemberByProjectId" parameterType="Long">
delete from project_member where project_id = #{projectId}
</delete>
<delete id="deleteProjectMemberByProjectIds" parameterType="String">
delete from project_member where project_id in
<foreach item="projectId" collection="array" open="(" separator="," close=")">
#{projectId}
</foreach>
</delete>
<!-- 批量新增项目成员 -->
<insert id="batchInsertProjectMembers">
INSERT INTO project_member (project_id, user_id)
VALUES
<foreach collection="memberIds" item="memberId" separator=",">
(#{projectId}, #{memberId})
</foreach>
</insert>
</mapper>
<?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.system.mapper.ProjectRepaymentMapper">
<resultMap type="ProjectRepayment" id="ProjectRepaymentResult">
<result property="repaymentId" column="repayment_id" />
<result property="repaymentPercentage" column="repayment_percentage" />
<result property="repaymentCondition" column="repayment_condition" />
<result property="projectId" column="project_id" />
<result property="notes" column="notes" />
</resultMap>
<sql id="selectProjectRepaymentVo">
select repayment_id, repayment_percentage, repayment_condition, project_id, notes from project_repayment
</sql>
<select id="selectProjectRepaymentList" parameterType="ProjectRepayment" resultMap="ProjectRepaymentResult">
<include refid="selectProjectRepaymentVo"/>
<where>
<if test="repaymentPercentage != null "> and repayment_percentage = #{repaymentPercentage}</if>
<if test="repaymentCondition != null and repaymentCondition != ''"> and repayment_condition = #{repaymentCondition}</if>
<if test="projectId != null "> and project_id = #{projectId}</if>
<if test="notes != null and notes != ''"> and notes = #{notes}</if>
</where>
</select>
<select id="selectProjectRepaymentByRepaymentId" parameterType="Long" resultMap="ProjectRepaymentResult">
<include refid="selectProjectRepaymentVo"/>
where repayment_id = #{repaymentId}
</select>
<insert id="insertProjectRepayment" parameterType="ProjectRepayment" useGeneratedKeys="true" keyProperty="repaymentId">
insert into project_repayment
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="repaymentPercentage != null">repayment_percentage,</if>
<if test="repaymentCondition != null">repayment_condition,</if>
<if test="projectId != null">project_id,</if>
<if test="notes != null">notes,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="repaymentPercentage != null">#{repaymentPercentage},</if>
<if test="repaymentCondition != null">#{repaymentCondition},</if>
<if test="projectId != null">#{projectId},</if>
<if test="notes != null">#{notes},</if>
</trim>
</insert>
<update id="updateProjectRepayment" parameterType="ProjectRepayment">
update project_repayment
<trim prefix="SET" suffixOverrides=",">
<if test="repaymentPercentage != null">repayment_percentage = #{repaymentPercentage},</if>
<if test="repaymentCondition != null">repayment_condition = #{repaymentCondition},</if>
<if test="projectId != null">project_id = #{projectId},</if>
<if test="notes != null">notes = #{notes},</if>
</trim>
where repayment_id = #{repaymentId}
</update>
<delete id="deleteProjectRepaymentByRepaymentId" parameterType="Long">
delete from project_repayment where repayment_id = #{repaymentId}
</delete>
<delete id="deleteProjectRepaymentByRepaymentIds" parameterType="String">
delete from project_repayment where repayment_id in
<foreach item="repaymentId" collection="array" open="(" separator="," close=")">
#{repaymentId}
</foreach>
</delete>
<select id="countProjectRepayment" parameterType="Long" resultType="int">
select count(*) from project_repayment where project_id = #{projectId}
</select>
<!--批量新增-->
<insert id="batchProjectRepayment" parameterType="java.util.List">
insert into project_repayment
(repayment_percentage,repayment_condition,project_id,notes)
values
<foreach collection="projectRepayments" item="repayment" separator=",">
(<trim suffixOverrides=",">
<if test="item.repaymentPercentage != null">#{item.repaymentPercentage},</if>
<if test="item.repaymentCondition != null">#{item.repaymentCondition},</if>
<if test="item.projectId != null">#{item.projectId},</if>
<if test="item.notes != null">#{item.notes},</if>
</trim>)
</foreach>
</insert>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment