feat(project): 优化项目管理功能
- 添加项目信息导出功能 - 实现项目编码自动生成 - 增加项目属地变更校验 - 优化项目信息更新逻辑 -调整项目阶段和行业类型的字典转换 - 修复用户信息导出时的空指针异常master
parent
d5fedeb3f5
commit
1b4f6e3c93
|
@ -63,7 +63,8 @@ public class ProjectInfoController extends BaseController
|
|||
@ResponseBody
|
||||
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);
|
||||
return util.exportExcel(list, "项目管理数据");
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ public class ProjectInfo extends BaseEntity
|
|||
private String projectName;
|
||||
|
||||
/** 客户code */
|
||||
@Excel(name = "客户code")
|
||||
// @Excel(name = "客户code")
|
||||
private String customerCode;
|
||||
|
||||
/** 客户名称 */
|
||||
|
@ -48,14 +48,14 @@ public class ProjectInfo extends BaseEntity
|
|||
/** 属地 */
|
||||
@Excel(name = "属地")
|
||||
private String province;
|
||||
|
||||
/** 项目把握度 */
|
||||
@Excel(name = "项目把握度")
|
||||
private String projectGraspDegree;
|
||||
/** 项目阶段 */
|
||||
@Excel(name = "项目阶段")
|
||||
private String projectStage;
|
||||
|
||||
/** 项目把握度 */
|
||||
@Excel(name = "项目把握度")
|
||||
private String projectGraspDegree;
|
||||
|
||||
|
||||
/** 汇智支撑人员id */
|
||||
@Excel(name = "汇智支撑人员id")
|
||||
|
@ -112,6 +112,7 @@ public class ProjectInfo extends BaseEntity
|
|||
/** 项目描述 */
|
||||
@Excel(name = "项目描述")
|
||||
private String projectDesc;
|
||||
private Boolean highlight;
|
||||
/** 软件项目产品信息 */
|
||||
private List<ProjectProductInfo> softwareProjectProductInfoList;
|
||||
/** 硬件项目产品信息 */
|
||||
|
|
|
@ -58,4 +58,6 @@ public interface IProjectInfoService
|
|||
* @return 结果
|
||||
*/
|
||||
public int deleteProjectInfoById(Long id);
|
||||
|
||||
List<ProjectInfo> selectProjectInfoExportList(ProjectInfo projectInfo);
|
||||
}
|
||||
|
|
|
@ -1,24 +1,27 @@
|
|||
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 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.DictUtils;
|
||||
import com.ruoyi.common.utils.ShiroUtils;
|
||||
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.IProjectProductInfoService;
|
||||
import com.ruoyi.sip.service.IProjectWorkProgressService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.sip.mapper.ProjectInfoMapper;
|
||||
import com.ruoyi.sip.service.IProjectInfoService;
|
||||
import com.ruoyi.common.core.text.Convert;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
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业务层处理
|
||||
|
@ -77,7 +80,15 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
|||
*/
|
||||
@Override
|
||||
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
|
||||
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);
|
||||
if (s == null) {
|
||||
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",
|
||||
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) {
|
||||
|
@ -142,9 +158,22 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
|||
@Override
|
||||
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());
|
||||
}
|
||||
int result = projectInfoMapper.updateProjectInfo(projectInfo);
|
||||
//变更其它信息
|
||||
saveOtherInfo(projectInfo);
|
||||
|
@ -315,4 +344,19 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
|||
public int deleteProjectInfoById(Long 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);
|
||||
//todo 记录变更信息
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue