package com.cf.pm.services.facade.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cf.pm.dao.mapper.DataAuthMapper;
import com.cf.pm.dao.mapper.ProjectTeamMapper;
import com.cf.pm.dao.po.*;
import com.cf.pm.facade.bo.*;
import com.cf.pm.facade.constant.BasicConstant;
import com.cf.pm.facade.constant.BelongConstant;
import com.cf.pm.facade.constant.BusinessReqConstant;
import com.cf.pm.facade.constant.ProBaseConstant;
import com.cf.pm.facade.dto.*;
import com.cf.pm.facade.enums.*;
import com.cf.pm.facade.facade.ProjectFacade;
import com.cf.pm.services.service.*;
import com.cf.pm.services.utils.AssertUtil;
import com.cf.pm.services.utils.PageUtils;
import com.cf.support.bean.IdWorker;
import com.cf.support.exception.BusinessException;
import com.cf.support.result.PageResponse;
import com.cf.support.utils.BeanConvertorUtils;
import com.cf.support.utils.DingAlarmUtils;
import com.cf.support.utils.ExcelUtiles;
import com.cf.support.utils.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@Slf4j
@Service
public class ProjectFacadeImpl implements ProjectFacade {
@Value("${bpm.url}")
private String bpmUrl;
@Resource
private ProjectService projectService;
@Resource
private ProjectTeamMapper projectTeamMapper;
@Resource
private IdWorker idWorker;
@Resource
private RedisUtil redisUtil;
@Resource
private TemplateService templateService;
@Resource
private TemplateStageService templateStageService;
@Resource
private TemplateStageDeliverablesService templateStageDeliverablesService;
@Resource
private StageService stageService;
@Resource
private ProjectTeamService projectTeamService;
@Resource
private DataAuthService dataAuthService;
@Resource
private DataAuthMapper dataAuthMapper;
@Resource
private UsersRolesService usersRolesService;
@Resource
private DeliveryTeamService deliveryTeamService;
@Resource
private EmployeeService employeeService;
@Resource
private ProjectGoalService projectGoalService;
@Resource
private FormService formService;
@Resource
private DeliveryService deliveryService;
@Resource
private InventoryService inventoryService;
@Resource
private DepartmentService departmentService;
@Resource
private ProjectBudgetService projectBudgetService;
@Resource
private TaskFileService taskFileService;
@Resource
private TaskService taskService;
@Resource
private RolesService rolesService;
@Resource
private MonthlySummaryService monthlySummaryService;
@Override
@Transactional(rollbackFor = Exception.class)
public String create(CreateProjectDTO param) {
Long templateId = param.getTemplateId();
TemplatePO templatePO = templateService.getById(templateId);
if (templatePO == null || !templatePO.getState().equals(TemplateStateEnum.COMPLETED.getCode())) {
throw new RuntimeException("模板不存在");
}
if (templatePO.getTemplateType().equals(ProjectTypeEnum.IT.getCode()) && ObjectUtils.isEmpty(param.getItProType())) {
throw new BusinessException("it项目 信息化项目类型为必填");
}
EmployeePO manager = employeeService.getEmployeeByEmpNo(param.getManagerEmplNo());
String projectNo = null;
//项目团队
List<ProjectTeamPO> projectTeamPOArrayList = new ArrayList<>();
if (StringUtils.isNotEmpty(param.getParentProjectNo())) {
//父项目编号不为空代表当前操作是创建子项目
//子项目编号规则 = 父项目编号 + 2位顺序号
projectNo = param.getParentProjectNo() + getSubProjectNum(param.getParentProjectNo());
// 子项目的话把原本父项目项目经理加入到项目团队
ProjectTeamPO originManager = projectTeamService.getManager(param.getParentProjectNo());
// 判断,如果父项目项目经理等于子项目经理,就不进行添加
if (!originManager.getEmplNo().equals(manager.getEmplNo())) {
projectTeamPOArrayList.add(new ProjectTeamPO()
.setCreateUser(param.getCreateUser())
.setUpdateUser(param.getUpdateUser())
.setIsManager(0)
.setProjectNo(projectNo)
.setEmplNo(originManager.getEmplNo())
.setEmplName(originManager.getEmplName())
.setDepartmentFullName(originManager.getDepartmentFullName()));
}
// 如果父项目编号不为空,则父项目的子项目数量 +1, 目前只有加操作
projectService.update(new LambdaUpdateWrapper<ProjectPO>()
.eq(ProjectPO::getProjectNo, param.getParentProjectNo())
.setSql(ProjectPO.SUB_PROJECT_COUNT + "=" + ProjectPO.SUB_PROJECT_COUNT + " + 1"));
} else {
//手动创建项目
projectNo = buildProjectNo(param, templatePO.getTemplateType());
}
//默认项目经理插入项目团队表
projectTeamPOArrayList.add(new ProjectTeamPO()
.setCreateUser(param.getCreateUser())
.setUpdateUser(param.getUpdateUser())
.setIsManager(1)
.setProjectNo(projectNo)
.setEmplNo(manager.getEmplNo())
.setEmplName(manager.getName())
.setDepartmentFullName(manager.getDepartmentFullName()));
//1.保存项目团队
projectTeamService.saveBatch(projectTeamPOArrayList);
//是否需要创建清单
boolean isAddInventory = false;
List<TemplateStagePO> stageTemplateList = templateStageService.getStageByTemplateId(templateId);
List<StagePO> stageList = new ArrayList<>();
List<Long> templateStageIdList = new ArrayList<>();
Map<Long, StagePO> stageMap = new HashMap<>();
for (TemplateStagePO templateStagePO : stageTemplateList) {
templateStageIdList.add(templateStagePO.getTemplateStageId());
StagePO stagePO = new StagePO();
stagePO.setStageId(idWorker.nextId());
stagePO.setProjectNo(projectNo);
stagePO.setProjectTitle(param.getProjectTitle());
stagePO.setStageTitle(templateStagePO.getStageTitle());
stagePO.setStageDesc(templateStagePO.getStageDesc());
stagePO.setStageIndex(templateStagePO.getTemplateStageIndex());
stagePO.setFormType(templateStagePO.getFormType());
stagePO.setCreateUser(param.getCreateUser());
stagePO.setUpdateUser(param.getUpdateUser());
stageList.add(stagePO);
if (templateStagePO.getFormType().equals(FormTypeEnum.FORM_TT_INVENTORY.getCode())) {
isAddInventory = true;
}
stageMap.put(templateStagePO.getTemplateStageId(), stagePO);
}
//2.保存项目阶段
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
项目管理系统+springboot+权限管理+大屏 (557个子文件)
.gitignore 414B
ProjectFacadeImpl.java 50KB
FormFacadeImpl.java 37KB
StageFacadeImpl.java 34KB
HomePageFacadeImpl.java 31KB
FormController.java 21KB
DocumentFacadeImpl.java 19KB
PermissionsFacadeImpl.java 15KB
MonthlySummaryFacadeImpl.java 15KB
ProjectService.java 14KB
InventoryFacadeImpl.java 13KB
CodeGenerator.java 12KB
ProjectController.java 12KB
TaskFacadeImpl.java 11KB
TemplateFacaeImpl.java 11KB
NoticeFacadeImpl.java 10KB
StageController.java 9KB
ChangeRequestFormVO.java 8KB
StageService.java 8KB
EmployeeFacadeImpl.java 7KB
InventoryController.java 7KB
PreCheckFormVO.java 7KB
TemplateService.java 6KB
ProReviewFromVO.java 6KB
EquipmentApplyVO.java 6KB
MonthlySummaryController.java 6KB
HomePageController.java 6KB
TemplateController.java 6KB
ProjectDetailResp.java 6KB
DocumentController.java 5KB
AdminUserFacadeImpl.java 5KB
TaskService.java 5KB
TaskController.java 5KB
ItProReviewFromVO.java 5KB
PermissionsController.java 5KB
MonthlySummaryService.java 5KB
InventoryDetailService.java 4KB
ItAcceptanceReviewVO.java 4KB
UserController.java 4KB
ProjectPO.java 4KB
DataAuthFacadeImpl.java 4KB
DelayFacadeImpl.java 4KB
TestController.java 4KB
DeliveryService.java 4KB
RolesFacadeImpl.java 4KB
RolesController.java 4KB
ProjectDetailBO.java 4KB
StageResp.java 3KB
ProjectTeamService.java 3KB
ItRequirementChangeVO.java 3KB
OptLogAspect.java 3KB
PageUtils.java 3KB
ItOnlineFromVO.java 3KB
AdminUserController.java 3KB
DingFacadeClient.java 3KB
AdminEditProjectReq.java 3KB
DataAuthService.java 3KB
AdminEditProjectDTO.java 3KB
InventoryDetailResp.java 3KB
ItAcceptanceReviewDTO.java 3KB
FinalCheckFormVO.java 3KB
CommonController.java 3KB
InventoryDetailVO.java 3KB
ProEvaluateFormVO.java 3KB
StagePO.java 3KB
EmployeeService.java 3KB
StageMapper.java 2KB
InventoryChangeResp.java 2KB
ItInvestigateFormVO.java 2KB
CommitAspect.java 2KB
InventoryChangePO.java 2KB
InventoryDetailPO.java 2KB
ItBlueprintFromVO.java 2KB
ProjectMonthlySummaryResp.java 2KB
MvcConfigurer.java 2KB
ChangeRequestFormDTO.java 2KB
DeliveryPO.java 2KB
DataAuthController.java 2KB
InventoryService.java 2KB
StageFacade.java 2KB
PreCheckFormDTO.java 2KB
ProjectPageResp.java 2KB
InventoryChangeDTO.java 2KB
ProReviewFormDTO.java 2KB
StagePageResp.java 2KB
StageDetailResp.java 2KB
TaskFileService.java 2KB
ProjectExcelBO.java 2KB
BusinessReqConstant.java 2KB
ItProReviewFromDTO.java 2KB
ProjectFacade.java 2KB
ProjectPageReq.java 2KB
DingMessageFacadeImpl.java 2KB
CustomDecoder.java 2KB
AdminOptLog.java 2KB
UsersRolesService.java 2KB
StageBO.java 2KB
FormTypeEnum.java 2KB
RolesService.java 2KB
TaskPO.java 2KB
共 557 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
百里Jess
- 粉丝: 3219
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AutoHotKey 2.0中文帮助文件
- 基于Docker-compose的Elasticsearch集群每个节点均是独立docker-compose配置而成源码.zip
- 目标检测-零售食品LOGO检测数据集-40000张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 目标检测-零售食品LOGO检测数据集-30000张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 目标检测-零售食品LOGO检测数据集-20000张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 目标检测-零售食品LOGO检测数据集-10000张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 基于GUI+MYSQL+JAVA图书管理系统文档说明+源码(高分大作业项目).zip
- 基于Qt使用C++实现图书管理系统源码+数据库(95分以上).zip
- 基于GUI+MYSQL+JAVA票务管理系统文档介绍+源码+数据库(高分大作业).zip
- Java项目-购物网站系统(java+Servlet+JSP+Mysql)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功