fourcal/src/main/java/cn/palmte/work/service/ProjectService.java

282 lines
13 KiB
Java
Raw Normal View History

2021-10-29 10:15:36 +00:00
package cn.palmte.work.service;
2021-11-02 09:33:34 +00:00
import cn.palmte.work.bean.*;
2021-11-12 07:12:44 +00:00
import cn.palmte.work.model.Admin;
import cn.palmte.work.model.Project;
import cn.palmte.work.model.ProjectRepository;
2021-10-29 10:15:36 +00:00
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
2021-11-01 13:09:10 +00:00
import org.springframework.transaction.annotation.Transactional;
2021-10-29 10:15:36 +00:00
import top.jfunc.common.db.QueryHelper;
import top.jfunc.common.db.bean.Page;
import top.jfunc.common.db.utils.Pagination;
2021-11-12 07:12:44 +00:00
import top.jfunc.common.utils.CollectionUtil;
2021-10-29 10:15:36 +00:00
import top.jfunc.common.utils.StrUtil;
import java.util.Date;
2021-11-08 09:32:25 +00:00
import java.util.List;
2021-10-29 10:15:36 +00:00
import java.util.Map;
/**
* @author xiongshiyan at 2021/10/29 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Service
public class ProjectService {
@Autowired
private Pagination pagination;
@Autowired
private ProjectRepository projectRepository;
2021-11-01 12:07:02 +00:00
@Autowired
2021-11-02 06:43:42 +00:00
private ProjectEstimateService projectEstimateService;
2021-11-02 09:33:34 +00:00
@Autowired
private ProjectBudgetService projectBudgetService;
2021-11-12 04:11:28 +00:00
@Autowired
private ProjectInstanceService projectInstanceService;
2021-11-12 07:12:44 +00:00
@Autowired
private ActTaskDefService actTaskDefService;
2021-10-29 10:15:36 +00:00
private QueryHelper getQueryHelper(Map<String, String> searchInfo, int pageNumber, int pageSize) {
/*"CASE p.type WHEN 1 THEN '工程集成类' WHEN 2 THEN '设备集成类' WHEN 3 THEN '战略合作类' ELSE '未知' AS typeDesc," +
"CASE p.status WHEN 0 THEN '草稿' WHEN 1 THEN '项目创建' WHEN 5 THEN '概算完成' WHEN 10 THEN '预算完成' WHEN 15 THEN '结算中' WHEN 20 THEN '决算完成' ELSE '未知' AS statusDesc," +
"CASE p.approve_status WHEN 0 THEN '待审核' WHEN 1 THEN '审核通过' WHEN 2 THEN '审核不通过' ELSE '未知' AS approveStatusDesc," +
*/
QueryHelper queryHelper = new QueryHelper("SELECT p.*","project","p");
2021-11-01 03:22:37 +00:00
if(StrUtil.isNotEmpty(searchInfo.get("status")) && !"-1".equals(searchInfo.get("status"))){
queryHelper.addCondition("p.status=?", Integer.parseInt(searchInfo.get("status")));
2021-10-29 10:15:36 +00:00
}
2021-11-08 08:38:02 +00:00
if(StrUtil.isNotEmpty(searchInfo.get("approveId"))){
int approveId = Integer.parseInt(searchInfo.get("approveId"));
queryHelper.addCondition("p.approve_id=?", approveId);
}
2021-11-01 03:22:37 +00:00
if(StrUtil.isNotEmpty(searchInfo.get("approveStatus")) && !"-1".equals(searchInfo.get("approveStatus"))){
2021-11-02 04:20:20 +00:00
int approveStatus = Integer.parseInt(searchInfo.get("approveStatus"));
//四种状态满足其一即可
queryHelper.addCondition("(p.approve_status_estimate=? OR p.approve_status_budget=? OR p.approve_status_settle=? OR p.approve_status_final=?)", approveStatus,approveStatus,approveStatus,approveStatus);
2021-10-29 10:15:36 +00:00
}
2021-11-01 03:22:37 +00:00
if(StrUtil.isNotEmpty(searchInfo.get("deptId")) && !"-1".equals(searchInfo.get("deptId"))){
queryHelper.addCondition("p.dept_id=?", Integer.parseInt(searchInfo.get("deptId")));
2021-10-29 10:15:36 +00:00
}
2021-11-01 03:22:37 +00:00
if(StrUtil.isNotEmpty(searchInfo.get("type")) && !"-1".equals(searchInfo.get("type"))){
queryHelper.addCondition("p.type=?", Integer.parseInt(searchInfo.get("type")));
2021-10-29 10:15:36 +00:00
}
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("name")),"p.name LIKE ?", "%"+searchInfo.get("name")+"%");
queryHelper.addCondition(StrUtil.isNotEmpty(searchInfo.get("creatorName")),"p.creator_name LIKE ?", "%"+searchInfo.get("creatorName")+"%");
/**
*
*/
if(StrUtil.isNotEmpty(searchInfo.get("startDate")) && StrUtil.isEmpty(searchInfo.get("endDate"))){
String time = searchInfo.get("startDate") + " 00:00:00";
2021-11-01 03:22:37 +00:00
queryHelper.addCondition("p.start_date<=? AND p.end_date>=?", time, time);
2021-10-29 10:15:36 +00:00
}
if(StrUtil.isNotEmpty(searchInfo.get("endDate")) && StrUtil.isEmpty(searchInfo.get("startDate"))){
String time = searchInfo.get("endDate") + " 00:00:00";
2021-11-01 03:22:37 +00:00
queryHelper.addCondition("p.start_date<=? AND p.end_date>=?", time, time);
2021-10-29 10:15:36 +00:00
}
/**
*
*/
if(StrUtil.isNotEmpty(searchInfo.get("startDate")) && StrUtil.isNotEmpty(searchInfo.get("endDate"))){
String startTime = searchInfo.get("startDate") + " 00:00:00";
String endTime = searchInfo.get("endDate") + " 23:59:59";
2021-11-01 03:22:37 +00:00
queryHelper.addCondition("p.start_date>=? AND p.end_date<=?", startTime, endTime);
2021-10-29 10:15:36 +00:00
}
2021-11-08 08:27:33 +00:00
if(StrUtil.isNotEmpty(searchInfo.get("startUpdateDate"))){
String time = searchInfo.get("startUpdateDate") + " 00:00:00";
queryHelper.addCondition("p.last_update_time>=?", time);
}
if(StrUtil.isNotEmpty(searchInfo.get("endUpdateDate"))){
String time = searchInfo.get("endUpdateDate") + " 00:00:00";
queryHelper.addCondition("p.last_update_time<=?", time);
}
2021-10-29 10:15:36 +00:00
return queryHelper;
}
public Page<Project> list(Map<String, String> searchInfo, int pageNumber, int pageSize){
QueryHelper queryHelper = getQueryHelper(searchInfo, pageNumber, pageSize);
return pagination.paginate(queryHelper.getSql(), Project.class,pageNumber,pageSize);
}
2021-11-08 09:32:25 +00:00
/**
*
*/
public Page<Project> findMyApproveProjects(Map<String, String> searchInfo, int adminId, int pageNumber, int pageSize){
//在列表基础上增加审核人是我和待审核状态的条件
searchInfo.put("approveId", ""+ adminId);
searchInfo.put("approveStatus", ""+ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus());
return list(searchInfo, pageNumber, pageSize);
}
2021-11-02 06:43:42 +00:00
public Project getProject(int id){
return projectRepository.findOne(id);
}
2021-10-29 10:15:36 +00:00
2021-11-12 04:11:28 +00:00
/**
*
*/
@Transactional(rollbackFor = RuntimeException.class)
public Project estimateAddSaveAndApprove(Project project,
EstimateBean estimateBean,
Admin admin) throws Exception {
Project p = estimateAddSave(project, estimateBean, admin, ApproveStatusEnum.APPROVAL_PENDING);
projectInstanceService.startEstimateProcessInstance(p, admin);
return project;
}
/**
2021-11-01 13:09:10 +00:00
*
*/
2021-11-01 13:09:10 +00:00
@Transactional(rollbackFor = RuntimeException.class)
2021-11-12 04:11:28 +00:00
public Project estimateAddSave(Project project,
EstimateBean estimateBean,
Admin admin,
ApproveStatusEnum approveStatusEnum) {
2021-11-02 06:43:42 +00:00
Project p = addProject(project, admin, approveStatusEnum);
projectEstimateService.saveEstimate(p, estimateBean);
return project;
}
2021-11-12 04:11:28 +00:00
/**
*
*/
@Transactional(rollbackFor = RuntimeException.class)
public Project estimateEditSaveAndApprove(Project project,
EstimateBean estimateBean,
Admin admin) throws Exception {
Project p = estimateEditSave(project, estimateBean, admin, ApproveStatusEnum.APPROVAL_PENDING);
2021-11-12 07:12:44 +00:00
if(null != p.getApproveStatusEstimate() &&
ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == p.getApproveStatusEstimate()){
2021-11-12 07:19:10 +00:00
//审核不通过的情况下重新编辑后就完成当前任务【此时任务节点在第一个,也就是发起审批】
2021-11-12 07:12:44 +00:00
List<String> estimateProcessInsIds = projectInstanceService.getEstimateProcessInsIds(p);
if(CollectionUtil.isNotEmpty(estimateProcessInsIds)){
actTaskDefService.completeTaskByProcInsId(estimateProcessInsIds.get(0),
ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus(),
"重新修改了概算表,请审批");
}
}else {
2021-11-12 07:19:10 +00:00
//第一次或者重新发起一个流程实例【第一次或者以前的审批都已经过了】
2021-11-12 07:12:44 +00:00
projectInstanceService.startEstimateProcessInstance(p, admin);
}
2021-11-12 04:11:28 +00:00
return p;
}
2021-11-02 06:43:42 +00:00
/**
*
*/
@Transactional(rollbackFor = RuntimeException.class)
public Project estimateEditSave(Project project, EstimateBean estimateBean, Admin admin, ApproveStatusEnum approveStatusEnum) {
Project p = editProject(project, admin, approveStatusEnum);
2021-11-02 09:37:55 +00:00
p.setStatus(StatusEnum.CREATED.getStatus());
p.setStatusDesc(StatusEnum.CREATED.getStatusDesc());
2021-11-02 09:33:34 +00:00
p.setApproveStatusEstimate(approveStatusEnum.getApproveStatus());
ProjectConfigBean projectConfigBeanConfig = projectBudgetService.getProjectConfigBeanConfig();
project.setProjectContributionProfitRateThreshold(projectConfigBeanConfig.getProjectContributionProfitRateThreshold());
project.setUnderwrittenTaxRate(projectConfigBeanConfig.getUnderwrittenTaxRate());
2021-11-02 09:33:34 +00:00
p = projectRepository.saveAndFlush(p);
2021-11-02 06:43:42 +00:00
//清空重新保存概算信息
2021-11-02 09:33:34 +00:00
projectEstimateService.clearEstimate(p);
2021-11-02 06:43:42 +00:00
projectEstimateService.saveEstimate(p, estimateBean);
return p;
}
2021-11-12 04:11:28 +00:00
2021-11-02 06:43:42 +00:00
private Project addProject(Project project, Admin admin, ApproveStatusEnum approveStatusEnum) {
project.setTypeDesc(TypeEnum.parseType(project.getType()).getTypeDesc());
2021-11-02 04:20:20 +00:00
project.setStatus(StatusEnum.CREATED.getStatus());
project.setStatusDesc(StatusEnum.CREATED.getStatusDesc());
project.setApproveStatusEstimate(approveStatusEnum.getApproveStatus());
project.setCreatorId(admin.getId());
project.setCreatorName(admin.getUserName());
ProjectConfigBean projectConfigBeanConfig = projectBudgetService.getProjectConfigBeanConfig();
project.setProjectContributionProfitRateThreshold(projectConfigBeanConfig.getProjectContributionProfitRateThreshold());
project.setUnderwrittenTaxRate(projectConfigBeanConfig.getUnderwrittenTaxRate());
2021-11-02 04:20:20 +00:00
project.setApproveId(null);
project.setApproveName("");
//TODO 获取登录人的部门信息
project.setDeptId(admin.getId());
2021-11-02 04:20:20 +00:00
project.setDeptName("工程部");
2021-11-08 08:27:33 +00:00
Date now = new Date();
project.setCreateTime(now);
project.setLastUpdateTime(now);
project = projectRepository.saveAndFlush(project);
return project;
}
2021-11-01 12:07:02 +00:00
2021-11-02 06:43:42 +00:00
private Project editProject(Project project, Admin admin, ApproveStatusEnum approveStatusEnum) {
Project p = getProject(project.getId());
2021-11-01 13:09:10 +00:00
2021-11-02 06:43:42 +00:00
//只有如下可以修改
p.setStartDate(project.getStartDate());
p.setEndDate(project.getEndDate());
p.setAdvanceInterestAmount(project.getAdvanceInterestAmount());
p.setAdvancePeakAmount(project.getAdvancePeakAmount());
p.setContractAmount(project.getContractAmount());
p.setHuazhiProductAmount(project.getHuazhiProductAmount());
p.setZiguangOtherAmount(project.getZiguangOtherAmount());
p.setMainContractCollectionTerms(project.getMainContractCollectionTerms());
2021-11-01 13:09:10 +00:00
2021-11-02 06:43:42 +00:00
p.setApproveStatusEstimate(approveStatusEnum.getApproveStatus());
2021-11-01 13:09:10 +00:00
2021-11-08 08:27:33 +00:00
p.setLastUpdateTime(new Date());
2021-11-02 09:33:34 +00:00
return p;
}
2021-11-12 04:11:28 +00:00
/**
*
*/
@Transactional(rollbackFor = RuntimeException.class)
public Project budgetEditSaveAndApprove(Project project, BudgetBean budgetBean, Admin admin) throws Exception {
Project p = budgetEditSave(project, budgetBean, admin, ApproveStatusEnum.APPROVAL_PENDING);
2021-11-12 07:12:44 +00:00
if(null != p.getApproveStatusBudget() &&
ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == p.getApproveStatusBudget()){
//审核不通过的情况下重新编辑后就完成当前任务
List<String> budgetProcessInsIds = projectInstanceService.getBudgetProcessInsIds(p);
if(CollectionUtil.isNotEmpty(budgetProcessInsIds)){
actTaskDefService.completeTaskByProcInsId(budgetProcessInsIds.get(0),
ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus(),
"重新修改了预算表,请审批");
}
}else {
//第一次或者重新发起一个流程实例
projectInstanceService.startBudgetProcessInstance(p, admin);
}
2021-11-12 04:11:28 +00:00
return p;
}
2021-11-02 09:33:34 +00:00
/**
*
*/
@Transactional(rollbackFor = RuntimeException.class)
public Project budgetEditSave(Project project, BudgetBean budgetBean, Admin admin, ApproveStatusEnum approveStatusEnum) {
Project p = editProject(project, admin, approveStatusEnum);
2021-11-02 09:37:55 +00:00
p.setStatus(StatusEnum.BUDGET_ACCOUNTS.getStatus());
p.setStatusDesc(StatusEnum.BUDGET_ACCOUNTS.getStatusDesc());
2021-11-02 09:33:34 +00:00
p.setApproveStatusEstimate(approveStatusEnum.getApproveStatus());
p = projectRepository.saveAndFlush(p);
//清空重新保存概算信息
projectBudgetService.clearBudget(p);
projectBudgetService.saveBudget(p, budgetBean);
return p;
2021-11-01 13:09:10 +00:00
}
2021-10-29 10:15:36 +00:00
}