diff --git a/src/main/java/com/xqopen/kehui/Api.java b/src/main/java/com/xqopen/kehui/Api.java index 5703f5e..5cab9b5 100644 --- a/src/main/java/com/xqopen/kehui/Api.java +++ b/src/main/java/com/xqopen/kehui/Api.java @@ -386,7 +386,7 @@ public class Api { public static final String PROJECT_QUARTERLY_EVALUATION_LIST=PROJECT_QUARTERLY_EVALUATION+"/list"; public static final String PROJECT_QUARTERLY_EVALUATION_UPDATE=PROJECT_QUARTERLY_EVALUATION+"/update"; public static final String PROJECT_QUARTERLY_EVALUATION_EXAMINE=PROJECT_QUARTERLY_EVALUATION+"/examine"; - + public static final String PROJECT_QUARTERLY_EVALUATION_GETOFFICE=PROJECT_QUARTERLY_EVALUATION+"/getOffice/{id}"; public static final String PROJECT_INFO_GET_ACCEPT_PROJECTS = PROJECT_INFO + "/accept"; diff --git a/src/main/java/com/xqopen/kehui/flows/util/ProjectInitListener.java b/src/main/java/com/xqopen/kehui/flows/util/ProjectInitListener.java index bb7c653..ed67717 100644 --- a/src/main/java/com/xqopen/kehui/flows/util/ProjectInitListener.java +++ b/src/main/java/com/xqopen/kehui/flows/util/ProjectInitListener.java @@ -3,11 +3,15 @@ package com.xqopen.kehui.flows.util; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.xqopen.kehui.common.entity.SystemOrg; import com.xqopen.kehui.common.entity.SystemUserLogin; +import com.xqopen.kehui.common.service.ISystemOrgService; import com.xqopen.kehui.common.service.ISystemUserLoginService; import com.xqopen.kehui.exception.ErrorCode; import com.xqopen.kehui.exception.XQException; import com.xqopen.kehui.flows.service.IFlowsService; +import com.xqopen.kehui.personal.entity.PersonalMember; +import com.xqopen.kehui.personal.service.IPersonalMemberService; import com.xqopen.kehui.project.entity.ProjectInfo; import com.xqopen.kehui.project.entity.ProjectQuarterlyEvaluation; import com.xqopen.kehui.project.entity.ProjectWeekly; @@ -43,7 +47,10 @@ public class ProjectInitListener implements ExecutionListener { ProjectQuarterlyEvaluationService projectQuarterlyEvaluationService; @Autowired IProjectAssessmentIndicatorsService projectAssessmentIndicatorsService; - + @Autowired + ISystemOrgService orgService; + @Autowired + IPersonalMemberService personalMemberService; @Override @Transactional public void notify(DelegateExecution execution) throws Exception { @@ -112,6 +119,7 @@ public class ProjectInitListener implements ExecutionListener { jsonObject.put("branchLeaders",getSystemUserLogin(String.valueOf(branchLeaders.get(1))).getId()); jsonObject.put("MainLeader",getSystemUserLogin(String.valueOf(MainLeader.get(1))).getId()); jsonObject.put("executor",getSystemUserLogin(projectManager).getId()); + jsonObject.put("taskName","季度审核填报"); quarterlyEvaluation.setExt(jsonObject); quarterlyEvaluation.setCreatedAt(new Timestamp(System.currentTimeMillis())); quarterlyEvaluation.setProjectId(String.valueOf(projectInfo.getId())); @@ -120,6 +128,24 @@ public class ProjectInitListener implements ExecutionListener { JSONObject infoExt = projectInfo.getExt(); infoExt.put("taskName","季度审核填报");//任务节点 infoExt.put("executor",getSystemUserLogin(projectManager).getId());//当前委托人 + //判断项目负责人是否是办公室部门的 + EntityWrapper orgEntityWrapper = new EntityWrapper<>(); + orgEntityWrapper.eq("is_deleted",false); + orgEntityWrapper.eq("org_name","办公室"); + SystemOrg systemOrg = orgService.selectOne(orgEntityWrapper); + if(!ObjectUtils.isEmpty(systemOrg)){ + EntityWrapper memberEntityWrapper = new EntityWrapper<>(); + memberEntityWrapper.eq("is_deleted",false); + memberEntityWrapper.eq("id_",Long.parseLong(projectManager)); + memberEntityWrapper.and("ext_->> 'deptId'= " + "'" + systemOrg.getId() + "'"); + PersonalMember personalMember = personalMemberService.selectOne(memberEntityWrapper); + if(!ObjectUtils.isEmpty(personalMember)){ + infoExt.put("isOffice","0"); + } + else{ + infoExt.put("isOffice","1"); + } + } if(!StringUtils.isEmpty(projectInfo.getId()))projectInfoService.updateById(projectInfo); } } diff --git a/src/main/java/com/xqopen/kehui/project/action/ProjectAssessmentIndicatorsController.java b/src/main/java/com/xqopen/kehui/project/action/ProjectAssessmentIndicatorsController.java index 5d635d6..bb5f20f 100644 --- a/src/main/java/com/xqopen/kehui/project/action/ProjectAssessmentIndicatorsController.java +++ b/src/main/java/com/xqopen/kehui/project/action/ProjectAssessmentIndicatorsController.java @@ -5,10 +5,15 @@ import com.alibaba.fastjson.support.spring.FastJsonJsonView; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.xqopen.kehui.Api; +import com.xqopen.kehui.common.entity.SystemOrg; import com.xqopen.kehui.common.entity.SystemUserLogin; +import com.xqopen.kehui.common.service.ISystemOrgService; import com.xqopen.kehui.common.service.ISystemUserLoginService; import com.xqopen.kehui.exception.ErrorCode; import com.xqopen.kehui.exception.XQException; +import com.xqopen.kehui.flows.entity.FlowsConfiguration; +import com.xqopen.kehui.flows.service.IFlowsConfigurationService; +import com.xqopen.kehui.personal.service.IPersonalMemberService; import com.xqopen.kehui.project.api.ProjectAssessmentIndicatorsApi; import com.xqopen.kehui.project.entity.ProjectAssessmentIndicators; import com.xqopen.kehui.project.entity.ProjectInfo; @@ -30,6 +35,7 @@ import org.springframework.web.bind.annotation.*; import java.sql.Timestamp; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Slf4j @RestController @@ -43,6 +49,12 @@ public class ProjectAssessmentIndicatorsController implements ProjectAssessmentI ProjectQuarterlyEvaluationService evaluationService; @Autowired ISystemUserLoginService userLoginService; + @Autowired + IPersonalMemberService personalMemberService; + @Autowired + ISystemOrgService orgService; + @Autowired + IFlowsConfigurationService flowsConfigurationService; @Override @PostMapping(Api.PROJECT_QUARTERLY_EVALUATION_LIST) @@ -104,19 +116,36 @@ public class ProjectAssessmentIndicatorsController implements ProjectAssessmentI if (!ObjectUtils.isEmpty(ext)) { String taskName = String.valueOf(ext.get("taskName"));//节点名称 String examine = String.valueOf(map.get("examine"));//通过or驳回 + String isOffice = String.valueOf(ext.get("isOffice"));//项目负责人是否是办公室部门的 switch (taskName) { case "季度审核填报": if ("1".equals(examine)) { return ApiResponse.fillFail("季度审核填报无法驳回!"); + } else if ("0".equals(examine)) { + if ("0".equals(isOffice)) { + examine(userId, "部门主任评级", ext, "", projectInfo); + } else if ("1".equals(isOffice)) { + examine(userId, "管理员审核", ext, "projectAdmin", projectInfo); + } + } + break; + case "部门主任评级": + if ("0".equals(examine)) { + examine(userId, "管理员审核", ext, "projectAdmin", projectInfo); + } else if ("1".equals(examine)) { + examine(userId, "季度审核填报", ext, "projectManager", projectInfo); } - examine(userId, "管理员审核", ext, "projectAdmin", projectInfo); break; case "管理员审核": ext.put("adminSpyj", map.get("spyj")); if ("0".equals(examine)) { examine(userId, "分管领导审核", ext, "branchLeaders", projectInfo); } else if ("1".equals(examine)) { - examine(userId, "季度审核填报", ext, "projectManager", projectInfo); + if ("0".equals(isOffice)) { + examine(userId, "部门主任评级", ext, "", projectInfo); + } else { + examine(userId, "季度审核填报", ext, "projectManager", projectInfo); + } } break; case "分管领导审核": @@ -130,7 +159,7 @@ public class ProjectAssessmentIndicatorsController implements ProjectAssessmentI case "主要领导审核": if ("0".equals(examine)) { ext.put("MainLeaderSpyj", map.get("spyj")); - examine(userId, "主要领导审核", ext, "MainLeader", projectInfo); + examine(userId, "流程结束", ext, "MainLeader", projectInfo); } else if ("1".equals(examine)) { examine(userId, "分管领导审核", ext, "branchLeaders", projectInfo); } @@ -150,6 +179,58 @@ public class ProjectAssessmentIndicatorsController implements ProjectAssessmentI return ApiResponse.fillFail(); } + /** + * 通过人事id查询部门是否是办公室下面的,如果项目负责人是办公室的则无法自评,只能由四个业务部评分 + * + * @param id + * @return + * @throws XQException + */ + @Override + @GetMapping(Api.PROJECT_QUARTERLY_EVALUATION_GETOFFICE) + public String getOffice(@PathVariable String id) throws XQException { + try { + ProjectInfo info = projectInfoService.selectById(Long.parseLong(id)); + if (!ObjectUtils.isEmpty(info)) { + JSONObject ext = info.getExt(); + String isOffice = String.valueOf(ext.get("isOffice")); + if ("0".equals(isOffice)) { + return ApiResponse.fillSuccess("0"); + } else { + return ApiResponse.fillSuccess("1"); + } + } + } catch (Exception e) { + log.error("ProjectAssessmentIndicatorsController.getOffice", e); + throw new XQException(ErrorCode.PROJECTINFO_EXCEPTION_ERROR, null); + } + return ApiResponse.fillFail("获取当前负责人失败!"); + } + + @Override + public String getBusinessByUserInfoId(@PathVariable String id) throws XQException{ + try { + EntityWrapper flowsConfigurationEntityWrapper = new EntityWrapper<>(); + flowsConfigurationEntityWrapper.eq("approved_role", "business"); + flowsConfigurationEntityWrapper.eq("is_deleted", false); + flowsConfigurationEntityWrapper.eq("approver_id", Long.parseLong(id)); + FlowsConfiguration flowsConfiguration = flowsConfigurationService.selectOne(flowsConfigurationEntityWrapper); + if(!ObjectUtils.isEmpty(flowsConfiguration)){ + EntityWrapper orgEntityWrapper = new EntityWrapper<>(); + orgEntityWrapper.eq("is_deleted", false); + orgEntityWrapper.eq("id_",flowsConfiguration.getOrgId()); + SystemOrg systemOrg = orgService.selectOne(orgEntityWrapper); + if(!ObjectUtils.isEmpty(systemOrg)){ + return ApiResponse.fillSuccess(systemOrg.getOrgName()); + } + } + }catch (Exception e){ + log.error("ProjectAssessmentIndicatorsController.getBusinessByUserInfoId", e); + throw new XQException(ErrorCode.PROJECTINFO_EXCEPTION_ERROR, null); + } + return ApiResponse.fillFail(); + } + /** * 审核 * @@ -165,7 +246,43 @@ public class ProjectAssessmentIndicatorsController implements ProjectAssessmentI ProjectQuarterlyEvaluation quarterlyEvaluation = evaluationService.selectOne(evaluationEntityWrapper); if (!ObjectUtils.isEmpty(quarterlyEvaluation)) { JSONObject quarterlyEvaluationExt = quarterlyEvaluation.getExt(); - String user = String.valueOf(quarterlyEvaluationExt.get(role)); + String user = new String(); + if (!"部门主任评级".equals(taskName)) { + user = String.valueOf(quarterlyEvaluationExt.get(role)); + if ("流程结束".equals(taskName)) { + user = " "; + } + } else { + //如果节点是部门主任评级时,则当前责任人是四个业务部的部门主任 + EntityWrapper orgEntityWrapper = new EntityWrapper<>(); + orgEntityWrapper.andNew().eq("is_deleted", false); + orgEntityWrapper.andNew().eq("org_name", "战略规划部").or() + .eq("org_name", "平台建设部").or() + .eq("org_name", "市场发展部").or() + .eq("org_name", "服务产品部"); + orgEntityWrapper.setSqlSelect("id_"); + List objectList = orgService.selectObjs(orgEntityWrapper);//先拿到部门集合ids + if (!StringUtils.isEmpty(objectList)) { + // 使用Streams将Object集合转换为Long集合 + List longs = objectList.stream() + .map(obj -> (Long) obj) // 强制类型转换 + .collect(Collectors.toList()); + EntityWrapper flowsConfigurationEntityWrapper = new EntityWrapper<>(); + flowsConfigurationEntityWrapper.eq("approved_role", "business"); + flowsConfigurationEntityWrapper.eq("is_deleted", false); + flowsConfigurationEntityWrapper.in("org_id", longs); + flowsConfigurationEntityWrapper.setSqlSelect("approver_id"); + List objectList1 = flowsConfigurationService.selectObjs(flowsConfigurationEntityWrapper);//拿到人事集合ids + longs = objectList1.stream() + .map(obj -> (Long) obj) // 强制类型转换 + .collect(Collectors.toList()); + EntityWrapper userLoginEntityWrapper = new EntityWrapper<>(); + userLoginEntityWrapper.eq("is_deleted", false); + userLoginEntityWrapper.in("userinfo_id", longs); + userLoginEntityWrapper.setSqlSelect("string_agg(id_::text,',')"); + user = String.valueOf(userLoginService.selectObj(userLoginEntityWrapper)); + } + } quarterlyEvaluationExt.put("taskName", taskName); quarterlyEvaluationExt.put("executor", user); quarterlyEvaluation.setExt(quarterlyEvaluationExt); diff --git a/src/main/java/com/xqopen/kehui/project/action/ProjectQuarterlyEvaluationController.java b/src/main/java/com/xqopen/kehui/project/action/ProjectQuarterlyEvaluationController.java index 18f2aee..1674cd1 100644 --- a/src/main/java/com/xqopen/kehui/project/action/ProjectQuarterlyEvaluationController.java +++ b/src/main/java/com/xqopen/kehui/project/action/ProjectQuarterlyEvaluationController.java @@ -47,7 +47,8 @@ public class ProjectQuarterlyEvaluationController implements ProjectQuarterlyEva //判断当前执行人是谁,项目负责人/分管领导/主要领导 EntityWrapper evaluationEntityWrapper = new EntityWrapper<>(); evaluationEntityWrapper.eq("is_deleted", "0"); - evaluationEntityWrapper.and("ext_->> 'executor'= " + "'" + userId + "'"); +// evaluationEntityWrapper.and("ext_->> 'executor'= " + "'" + userId + "'"); + evaluationEntityWrapper.and("ext_->> 'executor' like " + "'%" + userId + "%'"); evaluationEntityWrapper.and("ext_->> 'taskName'!='流程结束'"); //根据当前执行人查询 // evaluationEntityWrapper.andNew() diff --git a/src/main/java/com/xqopen/kehui/project/api/ProjectAssessmentIndicatorsApi.java b/src/main/java/com/xqopen/kehui/project/api/ProjectAssessmentIndicatorsApi.java index 8cb28c7..6389c6c 100644 --- a/src/main/java/com/xqopen/kehui/project/api/ProjectAssessmentIndicatorsApi.java +++ b/src/main/java/com/xqopen/kehui/project/api/ProjectAssessmentIndicatorsApi.java @@ -26,5 +26,22 @@ public interface ProjectAssessmentIndicatorsApi { @ApiImplicitParam(name = "userId", value = "用户id", required = true, paramType = "header", dataType = "Long"), }) String update(Long userId,PageNoUtil pageNoUtil) throws XQException; + @ApiOperation(value = "审核/驳回", notes = "审核/驳回", response = ProjectAchievementResp.class) + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "登录标识符", required = true, paramType = "header", dataType = "String"), + @ApiImplicitParam(name = "userId", value = "用户id", required = true, paramType = "header", dataType = "Long"), + }) String examine(Long userId, Map map) throws XQException; + @ApiOperation(value = "判断当前负责人是否是办公室部门", notes = "判断当前负责人是否是办公室部门", response = ProjectAchievementResp.class) + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "登录标识符", required = true, paramType = "header", dataType = "String"), + @ApiImplicitParam(name = "userId", value = "用户id", required = true, paramType = "header", dataType = "Long"), + }) + String getOffice(String id) throws XQException; + @ApiOperation(value = "判断部门主任", notes = "判断部门主任", response = ProjectAchievementResp.class) + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "登录标识符", required = true, paramType = "header", dataType = "String"), + @ApiImplicitParam(name = "userId", value = "用户id", required = true, paramType = "header", dataType = "Long"), + }) + String getBusinessByUserInfoId(String id) throws XQException; }