212 lines
9.4 KiB
Java
212 lines
9.4 KiB
Java
package cn.palmte.work.service;
|
|
|
|
import cn.palmte.work.bean.*;
|
|
import cn.palmte.work.model.*;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import top.jfunc.common.db.QueryHelper;
|
|
import top.jfunc.common.db.bean.Page;
|
|
import top.jfunc.common.db.utils.Pagination;
|
|
import top.jfunc.common.utils.CollectionUtil;
|
|
import top.jfunc.common.utils.StrUtil;
|
|
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
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;
|
|
@Autowired
|
|
private SysConfigService sysConfigService;
|
|
@Autowired
|
|
private ActTaskDefService actTaskDefService;
|
|
@Autowired
|
|
private ProjectInstanceRelationRepository projectInstanceRelationRepository;
|
|
|
|
|
|
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");
|
|
if(StrUtil.isNotEmpty(searchInfo.get("status")) && !"-1".equals(searchInfo.get("status"))){
|
|
queryHelper.addCondition("p.status=?", Integer.parseInt(searchInfo.get("status")));
|
|
}
|
|
if(StrUtil.isNotEmpty(searchInfo.get("approveId"))){
|
|
int approveId = Integer.parseInt(searchInfo.get("approveId"));
|
|
queryHelper.addCondition("p.approve_id=?", approveId);
|
|
}
|
|
if(StrUtil.isNotEmpty(searchInfo.get("approveStatus")) && !"-1".equals(searchInfo.get("approveStatus"))){
|
|
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);
|
|
}
|
|
if(StrUtil.isNotEmpty(searchInfo.get("deptId")) && !"-1".equals(searchInfo.get("deptId"))){
|
|
queryHelper.addCondition("p.dept_id=?", Integer.parseInt(searchInfo.get("deptId")));
|
|
}
|
|
if(StrUtil.isNotEmpty(searchInfo.get("type")) && !"-1".equals(searchInfo.get("type"))){
|
|
queryHelper.addCondition("p.type=?", Integer.parseInt(searchInfo.get("type")));
|
|
}
|
|
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";
|
|
queryHelper.addCondition("p.start_date<=? AND p.end_date>=?", time, time);
|
|
}
|
|
if(StrUtil.isNotEmpty(searchInfo.get("endDate")) && StrUtil.isEmpty(searchInfo.get("startDate"))){
|
|
String time = searchInfo.get("endDate") + " 00:00:00";
|
|
queryHelper.addCondition("p.start_date<=? AND p.end_date>=?", time, time);
|
|
}
|
|
/**
|
|
* 两个时间都选了,则包含项目时间
|
|
*/
|
|
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";
|
|
queryHelper.addCondition("p.start_date>=? AND p.end_date<=?", startTime, endTime);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
|
|
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);
|
|
}
|
|
|
|
|
|
/**
|
|
* 找到待我审核项目
|
|
*/
|
|
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);
|
|
}
|
|
|
|
|
|
|
|
public Project getProject(int id){
|
|
return projectRepository.findOne(id);
|
|
}
|
|
|
|
|
|
public Project addProject(Project project, Admin admin, ApproveStatusEnum approveStatusEnum) {
|
|
project.setTypeDesc(TypeEnum.parseType(project.getType()).getTypeDesc());
|
|
project.setStatus(StatusEnum.ESTIMATE_ACCOUNTS.getStatus());
|
|
project.setStatusDesc(StatusEnum.ESTIMATE_ACCOUNTS.getStatusDesc());
|
|
project.setApproveStatusEstimate(approveStatusEnum.getApproveStatus());
|
|
project.setCreatorId(admin.getId());
|
|
project.setCreatorName(admin.getUserName());
|
|
|
|
ProjectConfigBean projectConfigBeanConfig = sysConfigService.getProjectConfigBeanConfig();
|
|
project.setProjectContributionProfitRateThreshold(projectConfigBeanConfig.getProjectContributionProfitRateThreshold());
|
|
project.setUnderwrittenTaxRate(projectConfigBeanConfig.getUnderwrittenTaxRate());
|
|
|
|
project.setApproveId(0);
|
|
project.setApproveName("");
|
|
|
|
//TODO 获取登录人的部门信息
|
|
project.setDeptId(admin.getId());
|
|
project.setDeptName("工程部");
|
|
|
|
Date now = new Date();
|
|
project.setCreateTime(now);
|
|
project.setLastUpdateTime(now);
|
|
|
|
project = projectRepository.saveAndFlush(project);
|
|
return project;
|
|
}
|
|
|
|
public Project editProject(Project project, Project projectInDb) {
|
|
|
|
|
|
//只有如下可以修改
|
|
projectInDb.setStartDate(project.getStartDate());
|
|
projectInDb.setEndDate(project.getEndDate());
|
|
projectInDb.setAdvanceInterestAmount(project.getAdvanceInterestAmount());
|
|
projectInDb.setAdvancePeakAmount(project.getAdvancePeakAmount());
|
|
projectInDb.setContractAmount(project.getContractAmount());
|
|
projectInDb.setHuazhiProductAmount(project.getHuazhiProductAmount());
|
|
projectInDb.setZiguangOtherAmount(project.getZiguangOtherAmount());
|
|
projectInDb.setMainContractCollectionTerms(project.getMainContractCollectionTerms());
|
|
|
|
/// projectInDb.setApproveStatusEstimate(approveStatusEnum.getApproveStatus());
|
|
|
|
projectInDb.setLastUpdateTime(new Date());
|
|
|
|
return projectInDb;
|
|
}
|
|
|
|
|
|
public ResponseMsg completeTask(int projectId, String json) {
|
|
List<ProjectInstanceRelation> relationList = projectInstanceRelationRepository.findByProjectIdOrderByCreateTimeDesc(projectId);
|
|
if (relationList == null || relationList.isEmpty()) {
|
|
return ResponseMsg.buildFailedMsg("审核失败");
|
|
}
|
|
ProjectInstanceRelation projectInstanceRelation = relationList.get(0);
|
|
JSONObject obj = JSON.parseObject(json);
|
|
actTaskDefService.completeTaskByProcInsId(projectInstanceRelation.getProcessInsId(),
|
|
obj.getIntValue("type"), obj.getString("message"));
|
|
|
|
return ResponseMsg.buildSuccessMsg("审核成功");
|
|
}
|
|
|
|
|
|
/**
|
|
* 更新项目状态和审批状态
|
|
*/
|
|
public void updateStatusAndApproveStatus(int projectId, StatusEnum statusEnum, ApproveStatusEnum approveStatusEnum) {
|
|
Project one = projectRepository.findOne(projectId);
|
|
one.setStatus(statusEnum.getStatus());
|
|
one.setStatusDesc(statusEnum.getStatusDesc());
|
|
|
|
int approveStatus = approveStatusEnum.getApproveStatus();
|
|
switch (statusEnum) {
|
|
case ESTIMATE_ACCOUNTS:
|
|
one.setApproveStatusEstimate(approveStatus);
|
|
break;
|
|
case BUDGET_ACCOUNTS:
|
|
one.setApproveStatusBudget(approveStatus);
|
|
break;
|
|
case SETTLE_ACCOUNTS:
|
|
one.setApproveStatusSettle(approveStatus);
|
|
break;
|
|
case FINAL_ACCOUNTS:
|
|
one.setApproveStatusFinal(approveStatus);
|
|
break;
|
|
default:
|
|
}
|
|
|
|
one.setLastUpdateTime(new Date());
|
|
projectRepository.saveAndFlush(one);
|
|
}
|
|
}
|