feat(project): 优化项目管理功能
- 添加项目信息导出功能 - 实现项目编码自动生成 - 增加项目属地变更校验 - 优化项目信息更新逻辑 -调整项目阶段和行业类型的字典转换 - 修复用户信息导出时的空指针异常master
parent
d5fedeb3f5
commit
1b4f6e3c93
|
@ -63,7 +63,8 @@ public class ProjectInfoController extends BaseController
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult export(ProjectInfo projectInfo)
|
public AjaxResult export(ProjectInfo projectInfo)
|
||||||
{
|
{
|
||||||
List<ProjectInfo> list = projectInfoService.selectProjectInfoList(projectInfo);
|
//导出查询是否需要单独
|
||||||
|
List<ProjectInfo> list = projectInfoService.selectProjectInfoExportList(projectInfo);
|
||||||
ExcelUtil<ProjectInfo> util = new ExcelUtil<ProjectInfo>(ProjectInfo.class);
|
ExcelUtil<ProjectInfo> util = new ExcelUtil<ProjectInfo>(ProjectInfo.class);
|
||||||
return util.exportExcel(list, "项目管理数据");
|
return util.exportExcel(list, "项目管理数据");
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class ProjectInfo extends BaseEntity
|
||||||
private String projectName;
|
private String projectName;
|
||||||
|
|
||||||
/** 客户code */
|
/** 客户code */
|
||||||
@Excel(name = "客户code")
|
// @Excel(name = "客户code")
|
||||||
private String customerCode;
|
private String customerCode;
|
||||||
|
|
||||||
/** 客户名称 */
|
/** 客户名称 */
|
||||||
|
@ -48,14 +48,14 @@ public class ProjectInfo extends BaseEntity
|
||||||
/** 属地 */
|
/** 属地 */
|
||||||
@Excel(name = "属地")
|
@Excel(name = "属地")
|
||||||
private String province;
|
private String province;
|
||||||
|
/** 项目把握度 */
|
||||||
|
@Excel(name = "项目把握度")
|
||||||
|
private String projectGraspDegree;
|
||||||
/** 项目阶段 */
|
/** 项目阶段 */
|
||||||
@Excel(name = "项目阶段")
|
@Excel(name = "项目阶段")
|
||||||
private String projectStage;
|
private String projectStage;
|
||||||
|
|
||||||
/** 项目把握度 */
|
|
||||||
@Excel(name = "项目把握度")
|
|
||||||
private String projectGraspDegree;
|
|
||||||
|
|
||||||
/** 汇智支撑人员id */
|
/** 汇智支撑人员id */
|
||||||
@Excel(name = "汇智支撑人员id")
|
@Excel(name = "汇智支撑人员id")
|
||||||
|
@ -112,6 +112,7 @@ public class ProjectInfo extends BaseEntity
|
||||||
/** 项目描述 */
|
/** 项目描述 */
|
||||||
@Excel(name = "项目描述")
|
@Excel(name = "项目描述")
|
||||||
private String projectDesc;
|
private String projectDesc;
|
||||||
|
private Boolean highlight;
|
||||||
/** 软件项目产品信息 */
|
/** 软件项目产品信息 */
|
||||||
private List<ProjectProductInfo> softwareProjectProductInfoList;
|
private List<ProjectProductInfo> softwareProjectProductInfoList;
|
||||||
/** 硬件项目产品信息 */
|
/** 硬件项目产品信息 */
|
||||||
|
|
|
@ -58,4 +58,6 @@ public interface IProjectInfoService
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
public int deleteProjectInfoById(Long id);
|
public int deleteProjectInfoById(Long id);
|
||||||
|
|
||||||
|
List<ProjectInfo> selectProjectInfoExportList(ProjectInfo projectInfo);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,27 @@
|
||||||
package com.ruoyi.sip.service.impl;
|
package com.ruoyi.sip.service.impl;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||||
|
import com.ruoyi.common.core.text.Convert;
|
||||||
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.DateUtils;
|
||||||
import com.ruoyi.common.utils.DictUtils;
|
import com.ruoyi.common.utils.DictUtils;
|
||||||
import com.ruoyi.common.utils.ShiroUtils;
|
import com.ruoyi.common.utils.ShiroUtils;
|
||||||
import com.ruoyi.sip.domain.*;
|
import com.ruoyi.sip.domain.*;
|
||||||
|
import com.ruoyi.sip.mapper.ProjectInfoMapper;
|
||||||
|
import com.ruoyi.sip.service.IProjectInfoService;
|
||||||
import com.ruoyi.sip.service.IProjectOperateLogService;
|
import com.ruoyi.sip.service.IProjectOperateLogService;
|
||||||
import com.ruoyi.sip.service.IProjectProductInfoService;
|
import com.ruoyi.sip.service.IProjectProductInfoService;
|
||||||
import com.ruoyi.sip.service.IProjectWorkProgressService;
|
import com.ruoyi.sip.service.IProjectWorkProgressService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.ruoyi.sip.mapper.ProjectInfoMapper;
|
|
||||||
import com.ruoyi.sip.service.IProjectInfoService;
|
import java.math.BigDecimal;
|
||||||
import com.ruoyi.common.core.text.Convert;
|
import java.time.LocalDate;
|
||||||
|
import java.time.Period;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目管理Service业务层处理
|
* 项目管理Service业务层处理
|
||||||
|
@ -77,7 +80,15 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<ProjectInfo> selectProjectInfoList(ProjectInfo projectInfo) {
|
public List<ProjectInfo> selectProjectInfoList(ProjectInfo projectInfo) {
|
||||||
return projectInfoMapper.selectProjectInfoList(projectInfo);
|
//todo 生成订单按钮置灰查询
|
||||||
|
List<ProjectInfo> projectInfos = projectInfoMapper.selectProjectInfoList(projectInfo);
|
||||||
|
LocalDate now = LocalDate.now();
|
||||||
|
for (ProjectInfo info : projectInfos) {
|
||||||
|
LocalDate localDate = info.getUpdateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||||
|
Period between = Period.between(localDate, now);
|
||||||
|
info.setHighlight(between.getMonths() >= 2);
|
||||||
|
}
|
||||||
|
return projectInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -89,6 +100,16 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
@Override
|
@Override
|
||||||
public int insertProjectInfo(ProjectInfo projectInfo) {
|
public int insertProjectInfo(ProjectInfo projectInfo) {
|
||||||
//生成项目编码
|
//生成项目编码
|
||||||
|
setProjectCode(projectInfo);
|
||||||
|
projectInfo.setCreateTime(DateUtils.getNowDate());
|
||||||
|
projectInfo.setUpdateTime(DateUtils.getNowDate());
|
||||||
|
projectInfo.setCreateBy(ShiroUtils.getUserId().toString());
|
||||||
|
int i = projectInfoMapper.insertProjectInfo(projectInfo);
|
||||||
|
saveOtherInfo(projectInfo);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setProjectCode(ProjectInfo projectInfo) {
|
||||||
String s = projectInfoMapper.selectMaxProjectCode(projectInfo);
|
String s = projectInfoMapper.selectMaxProjectCode(projectInfo);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
projectInfo.setProjectCode(PROJECT_CODE_PREFIX + "00001");
|
projectInfo.setProjectCode(PROJECT_CODE_PREFIX + "00001");
|
||||||
|
@ -96,11 +117,6 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
projectInfo.setProjectCode(PROJECT_CODE_PREFIX + String.format("%0" + PROJECT_CODE_LENGTH + "d",
|
projectInfo.setProjectCode(PROJECT_CODE_PREFIX + String.format("%0" + PROJECT_CODE_LENGTH + "d",
|
||||||
Integer.parseInt(s.substring(PROJECT_CODE_PREFIX.length())) + 1));
|
Integer.parseInt(s.substring(PROJECT_CODE_PREFIX.length())) + 1));
|
||||||
}
|
}
|
||||||
projectInfo.setCreateTime(DateUtils.getNowDate());
|
|
||||||
projectInfo.setCreateBy(ShiroUtils.getUserId().toString());
|
|
||||||
int i = projectInfoMapper.insertProjectInfo(projectInfo);
|
|
||||||
saveOtherInfo(projectInfo);
|
|
||||||
return i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveOtherInfo(ProjectInfo projectInfo1) {
|
private void saveOtherInfo(ProjectInfo projectInfo1) {
|
||||||
|
@ -142,9 +158,22 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
@Override
|
@Override
|
||||||
public int updateProjectInfo(ProjectInfo projectInfo) {
|
public int updateProjectInfo(ProjectInfo projectInfo) {
|
||||||
// 获取更新前的项目信息
|
// 获取更新前的项目信息
|
||||||
ProjectInfo oldProjectInfo = projectInfoMapper.selectProjectInfoById(projectInfo.getId());
|
ProjectInfo oldProjectInfo = this.selectProjectInfoById(projectInfo.getId());
|
||||||
|
//变更属地校验
|
||||||
|
if (!projectInfo.getProvince().equals(oldProjectInfo.getProvince())) {
|
||||||
|
//todo 查询订单信息 如果有抛出异常
|
||||||
|
//如果没有 变更编码 是否考虑高并发加锁
|
||||||
|
setProjectCode(projectInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int newWorkSize = projectInfo.getProjectWorkProgressList() == null ? 0 : projectInfo.getProjectWorkProgressList().size();
|
||||||
|
int existWorkSize = oldProjectInfo.getProjectWorkProgressList() == null ? 0 : oldProjectInfo.getProjectWorkProgressList().size();
|
||||||
|
boolean changeWork = newWorkSize > existWorkSize;
|
||||||
// 更新项目信息
|
// 更新项目信息
|
||||||
|
if (changeWork) {
|
||||||
projectInfo.setUpdateTime(DateUtils.getNowDate());
|
projectInfo.setUpdateTime(DateUtils.getNowDate());
|
||||||
|
}
|
||||||
int result = projectInfoMapper.updateProjectInfo(projectInfo);
|
int result = projectInfoMapper.updateProjectInfo(projectInfo);
|
||||||
//变更其它信息
|
//变更其它信息
|
||||||
saveOtherInfo(projectInfo);
|
saveOtherInfo(projectInfo);
|
||||||
|
@ -315,4 +344,19 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
public int deleteProjectInfoById(Long id) {
|
public int deleteProjectInfoById(Long id) {
|
||||||
return projectInfoMapper.deleteProjectInfoById(id);
|
return projectInfoMapper.deleteProjectInfoById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ProjectInfo> selectProjectInfoExportList(ProjectInfo projectInfo) {
|
||||||
|
List<ProjectInfo> projectInfos = projectInfoMapper.selectProjectInfoList(projectInfo);
|
||||||
|
for (ProjectInfo info : projectInfos) {
|
||||||
|
info.setIndustryType(DictUtils.getDictLabel(INDUSTRY_TYPE_DICT_TYPE, info.getIndustryType()));
|
||||||
|
info.setProjectStage(DictUtils.getDictLabel(PROJECT_STAGE_DICT_TYPE, info.getIndustryType()));
|
||||||
|
if (info.getHzSupportUser() != null) {
|
||||||
|
List<SysUser> sysUsers = projectInfoMapper.selectUserById(Collections.singletonList(info.getHzSupportUser()));
|
||||||
|
Map<String, String> userMap = sysUsers.stream().collect(Collectors.toMap(item -> item.getUserId().toString(), SysUser::getUserName));
|
||||||
|
info.setHzSupportUser(userMap.getOrDefault(info.getHzSupportUser(), ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return projectInfos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,9 +105,6 @@ public class ProjectProductInfoServiceImpl implements IProjectProductInfoService
|
||||||
}
|
}
|
||||||
//新增数据
|
//新增数据
|
||||||
projectProductInfoMapper.saveBatch(addList);
|
projectProductInfoMapper.saveBatch(addList);
|
||||||
//todo 记录变更信息
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue