diff --git a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java index 40e6aa0d..5a2e87c6 100644 --- a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java +++ b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java @@ -31,6 +31,7 @@ import com.lz.modules.sys.service.app.ResultRecordService; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.apache.ibatis.annotations.Param; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -335,22 +336,48 @@ public class ResultRecordController extends AbstractController { */ @GetMapping("/getDetail") @ApiOperation("获取绩效详情-吴林") + @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "绩效id可为空,为空时使用token的用户获取"), + @ApiImplicitParam(name = "startId", value = "任务id可为空,为空时使用token的用户获取")}) @ApiResponses({@ApiResponse(code = 200, message = "成功", response = ResultRecordDetailDto.class)}) - public R getDetail(@RequestParam @ApiParam("绩效id") Long id) { + public R getDetail(@RequestParam Map param) { + Long id = null; + Long startId = null; + SysUserEntity user = getUser(); + ResultRecord resultRecord = null; - ResultRecord resultRecord = lzResultRecordService.selectResultRecordById(id); - if(resultRecord == null){ - return R.error("绩效不存在"); - } - /*SysUserEntity user = getUser(); - if(resultRecord.getStaffId().longValue() != user.getUserId().longValue()){ - //下面判断权限,是否可读 - EvaluationStartStaff evaluationStartStaff = - evaluationStartStaffService.selectManagerEvaluationStartStaff(resultRecord.getEvaluationId(), user.getUserId()); - if(evaluationStartStaff == null){//非考核组设置的绩效管理人员,下面应在查询其他权限 - return R.error("未被授权访问"); + if(param.containsKey("id")){ + String value = param.get("id").toString(); + if(value.length() > 0){ + id = Long.parseLong(value); + resultRecord = lzResultRecordService.selectResultRecordById(id); + if(resultRecord == null){ + return R.error("绩效不存在"); + } + //下面判断权限 + if(user.getUserId().longValue() != resultRecord.getStaffId().longValue()){ + //不是自己的绩效,判断是否为绩效管理人员,老板,部门管理人员 + log.info("不是自己的绩效"); + } } - }*/ + + + }else if(param.containsKey("startId")){//根据startId和token获取 + String value = param.get("startId").toString(); + if(value.length() > 0){ + startId = Long.parseLong(value); + resultRecord = lzResultRecordService.selectResultRecordByStaffIdAndStartId(getUserId(), startId); + if(resultRecord == null){ + return R.error("绩效不存在"); + } + } + }else{ + //根据token获取 + resultRecord = lzResultRecordService.selectLastResultRecordByUserId(getUserId()); + if(resultRecord == null){ + return R.error("绩效不存在"); + } + } + //获取考核维度等信息 ResultRecordDetailDto resultRecordDetailDto = new ResultRecordDetailDto(); BeanUtils.copyProperties(resultRecord, resultRecordDetailDto); @@ -403,7 +430,7 @@ public class ResultRecordController extends AbstractController { //流程已经到了审批节点,那么判断评分是否为或签,如果是那么只需要返回实际评分的那个人即可,否则全部返回 List flowRecords = flowRecordService.selectFlowRecordByRecordIdFlowProcess(resultRecord.getId(), ChartFlowType.SCORE.getCode());//获取当前的流程节点 if(flowRecords.get(0).getType().intValue() == 1){ - //或签 + //或签,这里还有优化。多个评分节点时,针对每个节点是否为或签 isOrScore = true; } @@ -417,7 +444,7 @@ public class ResultRecordController extends AbstractController { resultScore.setWeight(record.getWeight()); }else{ //多人的时候权重平分 - resultScore.setWeight(record.getWeight().divide(BigDecimal.valueOf(staffs1.size()), RoundingMode.CEILING)); + resultScore.setWeight(record.getWeight().divide(BigDecimal.valueOf(staffs1.size()), RoundingMode.HALF_UP)); } scoreDtos.add(resultScore); @@ -460,7 +487,7 @@ public class ResultRecordController extends AbstractController { resultRecortModelDto.setMaxCount(null); } List detailDtos = - resultDetailService.selectDtosByRecordId(resultRecord.getId(), model.getType()); + resultDetailService.selectDtosByRecordId(resultRecord.getId(), model.getId()); for (ResultDetailDto dto:detailDtos ) { //下面设置计算公式 @@ -685,6 +712,7 @@ public class ResultRecordController extends AbstractController { resultDetail.setStaffId(resultRecord.getStaffId()); resultDetail.setRecordId(resultRecord.getId()); resultDetail.setType(model.getType()); + resultDetail.setModelId(model.getId()); inserts.add(resultDetail); } if(resultDetail.getIsDelete() == null || resultDetail.getIsDelete().intValue() == 0){ diff --git a/src/main/java/com/lz/modules/app/resp/OwnResultResp.java b/src/main/java/com/lz/modules/app/resp/OwnResultResp.java index 210e36c7..b8f2322b 100644 --- a/src/main/java/com/lz/modules/app/resp/OwnResultResp.java +++ b/src/main/java/com/lz/modules/app/resp/OwnResultResp.java @@ -19,5 +19,5 @@ public class OwnResultResp { private String name; //最后得分 @ApiModelProperty("最后得分") - private BigDecimal lastScore; + private BigDecimal allScore; } diff --git a/src/main/java/com/lz/modules/flow/model/ResultDetailDto.java b/src/main/java/com/lz/modules/flow/model/ResultDetailDto.java index a3dbbbc8..601b7219 100644 --- a/src/main/java/com/lz/modules/flow/model/ResultDetailDto.java +++ b/src/main/java/com/lz/modules/flow/model/ResultDetailDto.java @@ -58,6 +58,8 @@ public class ResultDetailDto { @ApiModelProperty(value = "评分详细", name = "scoreDtos") private List scoreDtos; + @ApiModelProperty(value = "维度id lz_result_model的id", name = "modelId") + private Long modelId; /** * * @return diff --git a/src/main/java/com/lz/modules/flow/model/ResultRecordDetailDto.java b/src/main/java/com/lz/modules/flow/model/ResultRecordDetailDto.java index 141291f6..b2c906c0 100644 --- a/src/main/java/com/lz/modules/flow/model/ResultRecordDetailDto.java +++ b/src/main/java/com/lz/modules/flow/model/ResultRecordDetailDto.java @@ -37,6 +37,9 @@ public class ResultRecordDetailDto { @ApiModelProperty(value = "员工id", name = "staffId") private Long staffId; + @ApiModelProperty(value = "任务id", name = "startId") + private Long startId; + //使用的哪个等级。等级组id,lz_result_grade的group_id diff --git a/src/main/java/com/lz/modules/flow/model/StartStartDto.java b/src/main/java/com/lz/modules/flow/model/StartStartDto.java new file mode 100644 index 00000000..c9b00db6 --- /dev/null +++ b/src/main/java/com/lz/modules/flow/model/StartStartDto.java @@ -0,0 +1,12 @@ +package com.lz.modules.flow.model; + +import com.lz.modules.sys.entity.app.ResultRecord; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +@Data +public class StartStartDto { + private int status; + private List resultRecordList = new ArrayList<>(); +} diff --git a/src/main/java/com/lz/modules/flow/service/impl/EvaluationGroupServiceImpl.java b/src/main/java/com/lz/modules/flow/service/impl/EvaluationGroupServiceImpl.java index d8966a2f..941867bb 100644 --- a/src/main/java/com/lz/modules/flow/service/impl/EvaluationGroupServiceImpl.java +++ b/src/main/java/com/lz/modules/flow/service/impl/EvaluationGroupServiceImpl.java @@ -138,28 +138,32 @@ public class EvaluationGroupServiceImpl extends ServiceImpl staffRoles = staffRoleService.selectAllByStaffId(sysUserEntity.getUserId()); + List staffRoles = staffRoleService.selectAllByStaffId(sysUserEntity.getUserId());//一个人只会有一个 if(staffRoles.size() == 0){ log.info("非绩效管理员登录查询"); return null; } - List staffRoleEvaluationGroups = - staffRoleEvaluationGroupService.selectStaffRoleEvaluationsGroupByStaffRoles(staffRoles); - if(staffRoleEvaluationGroups.size() == 0){ - log.info("查询的管理组为空"); - return null; - } - gIds = new ArrayList<>(); - for (StaffRoleEvaluationGroup staffRoleEvaluationGroup:staffRoleEvaluationGroups - ) { - if(staffRoleEvaluationGroup.getEvaluationGroupId().longValue() == 0l){//管理所有组 - gIds = null; - log.info("管理所有组"); - break; + if(staffRoles.get(0).getEvaluationGroupId().longValue() != 0L){//管理指定考评组的 + List staffRoleEvaluationGroups = + staffRoleEvaluationGroupService.selectStaffRoleEvaluationsGroupByStaffRoles(staffRoles); + if(staffRoleEvaluationGroups.size() == 0){ + log.info("查询的管理组为空"); + return null; } - gIds.add(staffRoleEvaluationGroup.getEvaluationGroupId());//管理特定组 + gIds = new ArrayList<>(); + for (StaffRoleEvaluationGroup staffRoleEvaluationGroup:staffRoleEvaluationGroups + ) { + if(staffRoleEvaluationGroup.getEvaluationGroupId().longValue() == 0l){//管理所有组 + gIds = null; + log.info("管理所有组"); + break; + } + gIds.add(staffRoleEvaluationGroup.getEvaluationGroupId());//管理特定组 + + } } + } List finalGIds = gIds; PageUtils pageUtils = PageUtils.startPage(req.getCurrPage(), req.getPageSize()) diff --git a/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java b/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java index b57d9cee..182a02d8 100644 --- a/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java +++ b/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java @@ -1,13 +1,21 @@ package com.lz.modules.flow.service.impl; +import ch.qos.logback.classic.Logger; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; import com.lz.common.emun.ChartOptType; import com.lz.common.emun.CheckStaffType; import com.lz.common.emun.WorkMsgTypeEnum; import com.lz.common.utils.R; import com.lz.common.utils.StringUtil; +import com.lz.modules.app.entity.DepartmentsStaffRelateEntity; import com.lz.modules.app.entity.StaffEntity; import com.lz.modules.app.entity.StaffSimpleInfo; +import com.lz.modules.app.enums.FlowApprovalRoleTypeEnums; +import com.lz.modules.app.enums.FlowRecordStatusEnums; +import com.lz.modules.app.enums.RoleEnums; +import com.lz.modules.app.service.DepartmentsService; +import com.lz.modules.app.service.DepartmentsStaffRelateService; import com.lz.modules.app.service.StaffService; import com.lz.modules.flow.dao.EvaluationStartStaffMapper; import com.lz.modules.flow.dao.FlowStartMapper; @@ -20,15 +28,22 @@ import com.lz.modules.sys.entity.app.ResultDetail; import com.lz.modules.sys.entity.app.ResultRecord; import com.lz.modules.sys.service.app.ResultDetailService; import com.lz.modules.sys.service.app.ResultRecordService; +import com.lz.modules.third.entity.ThirdAppConfig; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.map.HashedMap; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.interceptor.TransactionAspectSupport; +import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.function.Function; import java.util.stream.Collectors; @@ -92,6 +107,8 @@ public class FlowStartServiceImpl extends ServiceImpl> staffManages = new HashedMap();//部门(id+几级)和部门几级管理对应关系,减少数据库查找 Map> mustRole = new HashMap<>(); Map> selfMustRole = new HashMap<>(); + List noticeStaff = new ArrayList<>(); + List resultRecords = new ArrayList<>(); for (GroupStaffs groupStaffs:startGroupStaffIds.getGroups() ) { List staffSimpleInfos = staffService.selectStaffSimpleInfos(groupStaffs.getStaffIds()); @@ -152,7 +171,8 @@ public class FlowStartServiceImpl extends ServiceImpl> mustRole = new HashMap<>(); Map> selfMustRole = new HashMap<>(); - + List noticeStaff = new ArrayList<>(); + List resultRecords = new ArrayList<>(); for (int n = 0; n < evaluationGroups.size(); n++ ) { EvaluationGroup evaluationGroup = evaluationGroups.get(n); @@ -280,8 +307,8 @@ public class FlowStartServiceImpl extends ServiceImpl> staffManages, List staffIds, Map> mustRole, Map> selfMustRole, boolean isInsert){ - + StartStartDto startStartDto = new StartStartDto(); List resultModelDtos = resultModelService.selectResultDtoByGroupId(evaluationGroup.getId()); if(resultModelDtos.size() == 0){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 log.info("没有设置考核模板"); - return 1; + startStartDto.setStatus(1); + return startStartDto; } List flowCharts = flowChartService.selectFlowChartsByGroupId(evaluationGroup.getId()); if(flowCharts.size() == 0){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 log.info("无有效绩效流程节点"); - return 2; + startStartDto.setStatus(2); + return startStartDto; } List flowChartDetailRecords = new ArrayList<>(); for (FlowChart chart:flowCharts @@ -328,7 +362,8 @@ public class FlowStartServiceImpl extends ServiceImpl chartNameMaps = flowCharts.stream().collect(Collectors.toMap(FlowChart::getId, FlowChart::getName));//流程节点与流程名称对应map,下面多次循环,减少数据库查找 @@ -339,7 +374,8 @@ public class FlowStartServiceImpl extends ServiceImpl 0){ //插入备份的考评组指标信息 - resultTagetLibService.insertResultTagetLibs(resultTagetLibs); + resultTagetLibService.saveBatch(resultTagetLibs); } //拷贝一份流程 for(FlowChartDetailRecord flowChartDetailRecord: flowChartDetailRecords){ @@ -391,13 +428,15 @@ public class FlowStartServiceImpl extends ServiceImpl evaluationStartStaffs = new ArrayList<>(); List resultDetails = new ArrayList(); + //下面初始化参与人员 for (StaffSimpleInfo staffInfo:staffIds ) { @@ -441,10 +481,14 @@ public class FlowStartServiceImpl extends ServiceImpl 0){ // - resultDetailService.insertResultDetails(resultDetails); - + resultDetailService.saveBatch(resultDetails); } - - } - evaluationStartStaffService.insertEvaluationStartStaffs(evaluationStartStaffs); - return 0; + evaluationStartStaffService.saveBatch(evaluationStartStaffs); + startStartDto.setStatus(0); + return startStartDto; } //下面初始化lz_flow流程表 lz_flow_approval_role流程审批表 @@ -505,7 +548,6 @@ public class FlowStartServiceImpl extends ServiceImpl 0){ - flowApprovalRoleService.insertFlowApprovalRoles(flowApprovalRoles); + flowApprovalRoleService.saveBatch(flowApprovalRoles); //初始化lz_result_details数据 List resultDetails = new ArrayList<>(); List evaluationStartStaffs = new ArrayList<>(); - + List resultRecords = new ArrayList<>(); //下面初始化参与人员 for (StaffSimpleInfo staffInfo:staffIds ) { @@ -611,7 +651,6 @@ public class FlowStartServiceImpl extends ServiceImpl resultRecords = Lists.newArrayList(); + CompletableFuture> listCompletableFuture = CompletableFuture.supplyAsync(() -> resultRecordService.list(), executor); + try { + resultRecords = listCompletableFuture.get(); + } catch (Exception e) { + e.printStackTrace(); + }*/ + + //resultRecordService.initFlowRecord(resultRecord.getId()); //下面生成ResultDetail对象 for (ResultModelDto modelDto:resultModelDtos ) { if(modelDto.getTagetLibs() != null && modelDto.getTagetLibs().size() > 0){//模板里面有添加指标 for (ResultTagetLibDto libDto: modelDto.getTagetLibs()) { - - ResultDetail resultDetail = new ResultDetail(); resultDetail.setRecordId(resultRecord.getId()); resultDetail.setTarget(libDto.getName()); resultDetail.setType(modelDto.getType()); resultDetail.setKeyResult(libDto.getKeyResult()); resultDetail.setCheckWeight(libDto.getWeight()); - resultDetail.setStaffId(staffInfo.getId()); + resultDetail.setStaffId(resultRecord.getId()); resultDetail.setPriority(libDto.getOrderBy()); + resultDetail.setModelId(modelDto.getId()); resultDetails.add(resultDetail); } } @@ -731,19 +784,17 @@ public class FlowStartServiceImpl extends ServiceImpl 0){ // - resultDetailService.insertResultDetails(resultDetails); - + resultDetailService.saveBatch(resultDetails); } - evaluationStartStaffService.insertEvaluationStartStaffs(evaluationStartStaffs); - //下面通知所有参与考核人员 - - //如果有下面通知所有管理人员 + evaluationStartStaffService.saveBatch(evaluationStartStaffs); }else{ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//事务回滚 log.info("初始化考核流程失败"); - return 5; + startStartDto.setStatus(5); + return startStartDto; } - return 0; + startStartDto.setStatus(0); + return startStartDto; } @Override @@ -755,5 +806,33 @@ public class FlowStartServiceImpl extends ServiceImpl resultRecords){ + ThreadInitFlowRecord threadInitFlowRecord = new ThreadInitFlowRecord(resultRecords); + Thread thread = new Thread(threadInitFlowRecord); + thread.start(); + } + + public class ThreadInitFlowRecord implements Runnable{ + List resultRecords; + + public ThreadInitFlowRecord(List resultRecords){ + this.resultRecords = resultRecords; + + } + + @Override + public void run() { + log.info("开始批量初始化流程,数量{}", resultRecords.size()); + for (ResultRecord resultRecord:resultRecords + ) { + String oldNo = Logger.inheritableThreadLocalNo.get();//.threadLocalNo.get(); + String newNo = oldNo + "_" + resultRecord.getId() + "_" + resultRecord.getStaffId(); + ch.qos.logback.classic.Logger.threadLocalNo.set(newNo); + resultRecordService.initFlowRecord(resultRecord.getId()); + ch.qos.logback.classic.Logger.threadLocalNo.set(oldNo); + } + } + } + } diff --git a/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java b/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java index 593d8ae1..01b724e6 100644 --- a/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java +++ b/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java @@ -237,29 +237,31 @@ public class DingtalkBusiness { public String sendWorkMSGWithAsyn(StaffSimpleInfo fromStaff, List toStaffids, int type) { - - if (toStaffids.get(0).getEmployeeId() == null || toStaffids.get(0).getEmployeeId().length() == 0) { - //查询第三方id - List ids = toStaffids.stream().map(new Function() { - @Override - public Long apply(StaffSimpleInfo staffSimpleInfo) { - return staffSimpleInfo.getId(); + if(toStaffids.size() > 0){ + if (toStaffids.get(0).getEmployeeId() == null || toStaffids.get(0).getEmployeeId().length() == 0) { + //查询第三方id + List ids = toStaffids.stream().map(new Function() { + @Override + public Long apply(StaffSimpleInfo staffSimpleInfo) { + return staffSimpleInfo.getId(); + } + }).collect(Collectors.toList()); + List staffSimpleInfos = staffService.selectStaffSimpleInfos(ids); + Map map = toStaffids.stream().collect(Collectors.toMap(StaffSimpleInfo::getId, e -> e)); + for (StaffSimpleInfo staff : staffSimpleInfos + ) { + StaffSimpleInfo staff1 = map.get(staff.getId()); + staff1.setEmployeeId(staff1.getEmployeeId()); } - }).collect(Collectors.toList()); - List staffSimpleInfos = staffService.selectStaffSimpleInfos(ids); - Map map = toStaffids.stream().collect(Collectors.toMap(StaffSimpleInfo::getId, e -> e)); - for (StaffSimpleInfo staff : staffSimpleInfos - ) { - StaffSimpleInfo staff1 = map.get(staff.getId()); - staff1.setEmployeeId(staff1.getEmployeeId()); } - } - WorkMsgTypeEnum workMsgTypeEnum = WorkMsgTypeEnum.findRoleTypeByCode(type); + WorkMsgTypeEnum workMsgTypeEnum = WorkMsgTypeEnum.findRoleTypeByCode(type); - ThreadSendMessage threadSendMessage = new ThreadSendMessage(fromStaff, toStaffids, workMsgTypeEnum, appid); - Thread thread = new Thread(threadSendMessage); - thread.start(); - return "OK"; + ThreadSendMessage threadSendMessage = new ThreadSendMessage(fromStaff, toStaffids, workMsgTypeEnum, appid); + Thread thread = new Thread(threadSendMessage); + thread.start(); + return "OK"; + } + return "error"; } diff --git a/src/main/java/com/lz/modules/performance/controller/ChartController.java b/src/main/java/com/lz/modules/performance/controller/ChartController.java index 12a4fe6b..6c2c1c33 100644 --- a/src/main/java/com/lz/modules/performance/controller/ChartController.java +++ b/src/main/java/com/lz/modules/performance/controller/ChartController.java @@ -1,6 +1,7 @@ package com.lz.modules.performance.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.google.common.collect.Lists; import com.lz.common.utils.PageUtils; import com.lz.common.utils.R; import com.lz.common.utils.StringUtil; @@ -12,11 +13,13 @@ import com.lz.modules.flow.entity.FlowStart; import com.lz.modules.flow.service.FlowStartService; import com.lz.modules.performance.req.ChartResultReq; import com.lz.modules.performance.req.ChartStartsReq; +import com.lz.modules.performance.req.OwnResultReq; import com.lz.modules.performance.res.ChartStartsRes; import com.lz.modules.performance.res.ChartStatisticalRes; import com.lz.modules.performance.res.ResultRankListRes; import com.lz.modules.performance.service.ChartResultService; import com.lz.modules.sys.controller.AbstractController; +import com.lz.modules.sys.entity.app.ResultRecord; import com.lz.modules.sys.service.app.ResultRecordService; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; @@ -24,6 +27,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; +import java.util.concurrent.*; +import java.util.function.Function; +import java.util.function.Supplier; /** * @Author: djc @@ -94,14 +100,16 @@ public class ChartController extends AbstractController{ @PostMapping("/own/result") @ApiOperation("获取个人成长曲线") @ApiResponses({@ApiResponse(code = 200,message = "成功",response = OwnResultResp.class)}) - public R ownResult(Long userId){ - if(userId == null){ + public R ownResult(@RequestBody @ApiParam(name = "body",value = "body请求体",required = true) OwnResultReq req){ + if(req.getUserId() == null){ //如果id为空,查询自己信息 - userId = getUserId(); + req.setUserId(getUserId()); } - List ownResultResps = resultRecordService.ownResult(null); + List ownResultResps = resultRecordService.ownResult(req); return R.ok().put("data",ownResultResps); } + + } diff --git a/src/main/java/com/lz/modules/performance/controller/UserTaskController.java b/src/main/java/com/lz/modules/performance/controller/UserTaskController.java index d1277728..bfadfae0 100644 --- a/src/main/java/com/lz/modules/performance/controller/UserTaskController.java +++ b/src/main/java/com/lz/modules/performance/controller/UserTaskController.java @@ -32,11 +32,12 @@ public class UserTaskController extends AbstractController{ @ApiResponses({@ApiResponse(code = 200,message = "成功",response = TaskListRes.class)}) public R list(@RequestBody @ApiParam(name = "body",value = "body请求体",required = true) AssessTaskReq req){ PageUtils pageUtils; + Long userId = null; try { - Long userId = getUserId(); + userId = getUserId(); pageUtils = assessService.userTaskList(req, userId); } catch (Exception e) { - log.error("获取用户事项异常 userId:" ,e); + log.error("获取用户事项异常 userId:" + userId,e); return R.error(e.getMessage()); } return R.ok().put("data",pageUtils); diff --git a/src/main/java/com/lz/modules/performance/req/ChartResultReq.java b/src/main/java/com/lz/modules/performance/req/ChartResultReq.java index bec1ffa5..b4373e7d 100644 --- a/src/main/java/com/lz/modules/performance/req/ChartResultReq.java +++ b/src/main/java/com/lz/modules/performance/req/ChartResultReq.java @@ -14,8 +14,8 @@ import lombok.Data; @ApiModel("获取报表等级详情实体") public class ChartResultReq extends BasePage{ - @ApiModelProperty(value = "部门id",name = "departmentId") - private String departmentId; + @ApiModelProperty(value = "部门ids,逗号隔开",name = "departmentIds") + private String departmentIds; @ApiModelProperty(value = "考核id",name = "startId") private Long startId; diff --git a/src/main/java/com/lz/modules/performance/req/OwnResultReq.java b/src/main/java/com/lz/modules/performance/req/OwnResultReq.java new file mode 100644 index 00000000..3dea0f15 --- /dev/null +++ b/src/main/java/com/lz/modules/performance/req/OwnResultReq.java @@ -0,0 +1,27 @@ +package com.lz.modules.performance.req; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author: djc + * @Desc: + * @Date: 2020/11/16 16:50 + */ +@Data +@ApiModel("个人曲线请求实体") +public class OwnResultReq { + @ApiModelProperty("用户id,可不传") + private Long userId; + + @ApiModelProperty("开始时间,必传") + private String startTime; + + @ApiModelProperty("结束时间,必传") + private String endTime; + + @ApiModelProperty("条数,默认6条") + private Integer size = 6; + +} diff --git a/src/main/java/com/lz/modules/performance/service/impl/AssessManagerServiceImpl.java b/src/main/java/com/lz/modules/performance/service/impl/AssessManagerServiceImpl.java index 93302d3f..72282a64 100644 --- a/src/main/java/com/lz/modules/performance/service/impl/AssessManagerServiceImpl.java +++ b/src/main/java/com/lz/modules/performance/service/impl/AssessManagerServiceImpl.java @@ -122,7 +122,7 @@ public class AssessManagerServiceImpl implements AssessManagerService { }else { ResultRecord resultRecord = resultRecordMapper.selectOneByStartId(flowStart.getId(),mandepartmentIds); int i = resultRecordMapper.countStartAndGroupNum(flowStart.getId(),mandepartmentIds); - res.setJoinNum(resultRecord == null? StringUtil.EMPTY : resultRecord.getStaffName() + i + "等人"); + res.setJoinNum(resultRecord == null? StringUtil.EMPTY : resultRecord.getStaffName() + "等"+ i + "人"); } data.add(res); diff --git a/src/main/java/com/lz/modules/performance/service/impl/AssessServiceImpl.java b/src/main/java/com/lz/modules/performance/service/impl/AssessServiceImpl.java index 6e3df194..a7f404ec 100644 --- a/src/main/java/com/lz/modules/performance/service/impl/AssessServiceImpl.java +++ b/src/main/java/com/lz/modules/performance/service/impl/AssessServiceImpl.java @@ -69,11 +69,18 @@ public class AssessServiceImpl implements AssessService { dtos.stream().forEach(taskListDto -> { TaskListRes res = new TaskListRes(); StaffEntity staffEntity = staffService.selectStaffById(taskListDto.getRecordStaffId()); - res.setAvatar(Optional.ofNullable(staffEntity.getAvatar()).orElse(StringUtil.EMPTY)); - String name = staffEntity.getName(); - if(taskListDto.getRecordStaffId().equals(taskListDto.getApprovalStaffId())){ - name = "您"; + String name = ""; + if(staffEntity!=null){ + res.setAvatar(Optional.ofNullable(staffEntity.getAvatar()).orElse(StringUtil.EMPTY)); + name = staffEntity.getName(); + if(taskListDto.getRecordStaffId().equals(taskListDto.getApprovalStaffId())){ + name = "您"; + } + }else { + name = "未知"; + log.info("未找到此人信息 staffId: " + taskListDto.getRecordStaffId()); } + FlowStart start = flowStartService.selectFlowStartById(taskListDto.getStartId()); //根据状态拼接文案 String startName = start == null ? "" : start.getName(); diff --git a/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java b/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java index c0319d69..e3731c09 100644 --- a/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java +++ b/src/main/java/com/lz/modules/performance/service/impl/ChartResultServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.lz.common.exception.RRException; import com.lz.common.utils.PageUtils; import com.lz.common.utils.R; @@ -182,9 +183,18 @@ public class ChartResultServiceImpl implements ChartResultService { @Override public PageUtils selectChartDetailList(ChartResultReq req) { - List allDeparmentIds = staffService.selectAllDeparmentIdsByDepartmentParentId(req.getDepartmentId()); + String departmentIds = req.getDepartmentIds(); + Set allDepart = Sets.newHashSet(); + if(StringUtil.isNotBlank(departmentIds)){ + String[] split = departmentIds.split(","); + for(String s:split){ + List deparmentIds = staffService.selectAllDeparmentIdsByDepartmentParentId(s); + allDepart.addAll(deparmentIds); + } + } + List allDeparmentIds = new ArrayList<>(allDepart); //自己管理的和所有的部门交集 - log.info("selectChartDetailList 管理部门:" + JSON.toJSONString(allDeparmentIds)); + log.info("selectChartDetailList 查询部门:" + JSON.toJSONString(allDeparmentIds)); List mandepartmentIds = assessService.roleDepartments(req.getLoginUserId()); if(mandepartmentIds!=null ){ if(mandepartmentIds.size()==0){ @@ -196,9 +206,14 @@ public class ChartResultServiceImpl implements ChartResultService { return new PageUtils(); } } + else { + //如果掌管所有部门,查询请求部门 + mandepartmentIds = allDeparmentIds; + } log.info("selectChartDetailList 交集部门:" + JSON.toJSONString(mandepartmentIds)); + List finalMandepartmentIds = mandepartmentIds; PageUtils pageUtils = PageUtils.startPage(req.getCurrPage(), req.getPageSize()).doSelect( - page -> resultRecordMapper.selectChartDetailList(page,mandepartmentIds,req.getStartId(),req.getScoreLevel()) + page -> resultRecordMapper.selectChartDetailList(page, finalMandepartmentIds,req.getStartId(),req.getScoreLevel()) ); return pageUtils; } diff --git a/src/main/java/com/lz/modules/sys/dao/app/ResultDetailMapper.java b/src/main/java/com/lz/modules/sys/dao/app/ResultDetailMapper.java index cfa8b60e..87424123 100644 --- a/src/main/java/com/lz/modules/sys/dao/app/ResultDetailMapper.java +++ b/src/main/java/com/lz/modules/sys/dao/app/ResultDetailMapper.java @@ -45,5 +45,5 @@ public interface ResultDetailMapper extends BaseMapper { Long insertResultDetails(@Param("list") List resultDetails); - List selectDtosByRecordId(@Param("recordResultId") Long id, @Param("type") int type); + List selectDtosByRecordId(@Param("recordResultId") Long id, @Param("modelId") Long modelId); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java b/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java index 1afbbdd5..0efff89b 100644 --- a/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java +++ b/src/main/java/com/lz/modules/sys/dao/app/ResultRecordMapper.java @@ -18,6 +18,7 @@ import com.lz.modules.app.resp.OwnResultResp; import com.lz.modules.flow.model.ResultRecordDto; import com.lz.modules.performance.dto.ToScoreDingTalkDto; import com.lz.modules.performance.req.AssessDetailReq; +import com.lz.modules.performance.req.OwnResultReq; import com.lz.modules.performance.res.AssessManagerDetailRes; import com.lz.modules.performance.res.ChartStatistical; import com.lz.modules.sys.entity.app.ResultRecord; @@ -61,7 +62,7 @@ public interface ResultRecordMapper extends BaseMapper { List selectResultRecordByIds(@Param("recordIds") List recordIds); - List ownResult(@Param("staffId") Long staffId); + List ownResult(@Param("req") OwnResultReq req); List staffDistribution(@Param("monthTime") String monthTime,@Param("staffIds") List staffIds); @@ -96,4 +97,8 @@ public interface ResultRecordMapper extends BaseMapper { List selectToScoreList(@Param("startId")Long startId, @Param("evaluationId")Long evaluationId); int countAssessNumJoin(@Param("req")AssessDetailReq req); + + ResultRecord selectLastResultRecordByUserId(@Param("userId") Long userId); + + ResultRecord selectResultRecordByStaffIdAndStartId(@Param("userId") Long userId, @Param("startId") Long startId); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/sys/entity/app/ResultDetail.java b/src/main/java/com/lz/modules/sys/entity/app/ResultDetail.java index 73c421c1..c042cc82 100644 --- a/src/main/java/com/lz/modules/sys/entity/app/ResultDetail.java +++ b/src/main/java/com/lz/modules/sys/entity/app/ResultDetail.java @@ -1,57 +1,78 @@ package com.lz.modules.sys.entity.app; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; /** *

-* 菜单权限表 -*

*绩效详情表 +*

*业绩详情表 * @author quyixiao -* @since 2020-08-28 +* @since 2020-11-17 */ @Data @TableName("lz_result_detail") +@ApiModel(value = "业绩详情表") public class ResultDetail implements java.io.Serializable { // @TableId(value = "id", type = IdType.AUTO) private Long id; //是否删除状态,1:删除,0:有效 + @ApiModelProperty(value = "是否删除状态,1:删除,0:有效", name = "isDelete") private Integer isDelete; //创建时间 + @ApiModelProperty(value = "创建时间", name = "gmtCreate") private Date gmtCreate; //最后修改时间 + @ApiModelProperty(value = "最后修改时间", name = "gmtModified") private Date gmtModified; - //1,绩效,2文化价值观 + //1,业绩,2文化价值观 + @ApiModelProperty(value = "1,业绩,2文化价值观", name = "type") private Integer type; //目标 + @ApiModelProperty(value = "目标", name = "target") private String target; //关键结果 + @ApiModelProperty(value = "关键结果", name = "keyResult") private String keyResult; //关键结果_3.5标准 + @ApiModelProperty(value = "关键结果_3.5标准", name = "keyResult35") private String keyResult35; //关键结果3.7分标准 + @ApiModelProperty(value = "关键结果3.7分标准", name = "keyResult37") private String keyResult37; //考核权重 + @ApiModelProperty(value = "考核权重", name = "checkWeight") private BigDecimal checkWeight; //考核结果 + @ApiModelProperty(value = "考核结果", name = "checkResult") private String checkResult; //直属上级评分 + @ApiModelProperty(value = "直属上级评分", name = "superScore") private String superScore; //得分 + @ApiModelProperty(value = "得分", name = "acquireScore") private BigDecimal acquireScore; //评分说明 + @ApiModelProperty(value = "评分说明", name = "scoreComment") private String scoreComment; //记录id + @ApiModelProperty(value = "记录id ", name = "recordId") private Long recordId; //用户id + @ApiModelProperty(value = "用户id", name = "staffId") private Long staffId; //优先级,从大到小 + @ApiModelProperty(value = "优先级,从大到小", name = "priority") private Integer priority; + //维度id lz_result_model的id + @ApiModelProperty(value = "维度id lz_result_model的id", name = "modelId") + private Long modelId; /** * * @return @@ -113,14 +134,14 @@ public class ResultDetail implements java.io.Serializable { } /** - * 1,绩效,2文化价值观 + * 1,业绩,2文化价值观 * @return */ public Integer getType() { return type; } /** - * 1,绩效,2文化价值观 + * 1,业绩,2文化价值观 * @param type */ public void setType(Integer type) { @@ -307,6 +328,21 @@ public class ResultDetail implements java.io.Serializable { this.priority = priority; } + /** + * 维度id lz_result_model的id + * @return + */ + public Long getModelId() { + return modelId; + } + /** + * 维度id lz_result_model的id + * @param modelId + */ + public void setModelId(Long modelId) { + this.modelId = modelId; + } + @Override public String toString() { return "ResultDetail{" + @@ -327,6 +363,7 @@ public class ResultDetail implements java.io.Serializable { ",recordId=" + recordId + ",staffId=" + staffId + ",priority=" + priority + + ",modelId=" + modelId + "}"; } } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/sys/service/app/ResultDetailService.java b/src/main/java/com/lz/modules/sys/service/app/ResultDetailService.java index f9d5213e..f7360a95 100644 --- a/src/main/java/com/lz/modules/sys/service/app/ResultDetailService.java +++ b/src/main/java/com/lz/modules/sys/service/app/ResultDetailService.java @@ -69,5 +69,5 @@ public interface ResultDetailService extends IService { Long insertResultDetails(List resultDetails); - List selectDtosByRecordId(Long id, int type); + List selectDtosByRecordId(Long id, Long modelId); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/sys/service/app/ResultRecordService.java b/src/main/java/com/lz/modules/sys/service/app/ResultRecordService.java index d631d887..869db313 100644 --- a/src/main/java/com/lz/modules/sys/service/app/ResultRecordService.java +++ b/src/main/java/com/lz/modules/sys/service/app/ResultRecordService.java @@ -15,6 +15,7 @@ import com.lz.modules.app.utils.t.TwoTuple; import com.lz.modules.flow.entity.Flow; import com.lz.modules.flow.model.StaffRoleDto; import com.lz.modules.performance.req.AssessDetailReq; +import com.lz.modules.performance.req.OwnResultReq; import com.lz.modules.performance.res.ChartStatistical; import com.lz.modules.sys.entity.SysUserEntity; import com.lz.modules.sys.entity.app.ResultRecord; @@ -77,7 +78,7 @@ public interface ResultRecordService extends IService { void sendWorkMSG(StaffEntity mySelf, StaffEntity toSelf, WorkMsgTypeEnum workMsgTypeEnum , Long recordResultId, int count); - List ownResult(Long staffId); + List ownResult(OwnResultReq req); /** * 人员等级排布 @@ -114,4 +115,8 @@ public interface ResultRecordService extends IService { R newApproval(ApprovalDto approvalDto) throws Exception; R newResultRecordList(RecordDetailDto recordDetailDto); + + ResultRecord selectLastResultRecordByUserId(Long userId); + + ResultRecord selectResultRecordByStaffIdAndStartId(Long userId, Long startId); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/sys/service/app/impl/ResultDetailServiceImpl.java b/src/main/java/com/lz/modules/sys/service/app/impl/ResultDetailServiceImpl.java index cd015176..f337f388 100644 --- a/src/main/java/com/lz/modules/sys/service/app/impl/ResultDetailServiceImpl.java +++ b/src/main/java/com/lz/modules/sys/service/app/impl/ResultDetailServiceImpl.java @@ -336,8 +336,8 @@ public class ResultDetailServiceImpl extends ServiceImpl selectDtosByRecordId(Long id, int type){ - return resultDetailMapper.selectDtosByRecordId(id, type); + public List selectDtosByRecordId(Long id, Long modelId){ + return resultDetailMapper.selectDtosByRecordId(id, modelId); } } diff --git a/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java b/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java index 117aabf5..10081144 100644 --- a/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java +++ b/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java @@ -33,6 +33,7 @@ import com.lz.modules.flow.enums.FlowRecordEnum; import com.lz.modules.flow.model.*; import com.lz.modules.flow.service.*; import com.lz.modules.job.business.DingtalkBusiness; +import com.lz.modules.performance.req.OwnResultReq; import com.lz.modules.performance.res.ChartStatistical; import com.lz.modules.sys.dao.app.ResultRecordMapper; import com.lz.modules.sys.entity.SysUserEntity; @@ -743,8 +744,8 @@ public class ResultRecordServiceImpl extends ServiceImpl ownResult(Long staffId) { - return resultRecordMapper.ownResult(staffId); + public List ownResult(OwnResultReq req) { + return resultRecordMapper.ownResult(req); } @Override @@ -1314,4 +1315,13 @@ public class ResultRecordServiceImpl extends ServiceImpl + - id AS id, is_delete AS isDelete, gmt_create AS gmtCreate, gmt_modified AS gmtModified, type AS type, target AS target, key_result AS keyResult, key_result_3_5 AS keyResult35, key_result_3_7 AS keyResult37, check_weight AS checkWeight, check_result AS checkResult, super_score AS superScore, acquire_score AS acquireScore, score_comment AS scoreComment, record_id AS recordId, staff_id AS staffId, priority AS priority + id AS id, is_delete AS isDelete, gmt_create AS gmtCreate, gmt_modified AS gmtModified, type AS type, target AS target, key_result AS keyResult, key_result_3_5 AS keyResult35, key_result_3_7 AS keyResult37, check_weight AS checkWeight, check_result AS checkResult, super_score AS superScore, acquire_score AS acquireScore, score_comment AS scoreComment, record_id AS recordId, staff_id AS staffId, priority AS priority, model_id AS modelId @@ -52,6 +53,7 @@ record_id, staff_id, priority, + model_id, is_delete, gmt_create, gmt_modified @@ -69,6 +71,7 @@ #{ recordId}, #{ staffId}, #{ priority}, + #{ modelId}, 0, now(), now() @@ -94,10 +97,11 @@ score_comment = #{scoreComment}, record_id = #{recordId}, staff_id = #{staffId}, - priority = #{priority} + priority = #{priority}, + model_id = #{modelId} ,gmt_modified = now() - where id = #{id} limit 1 + where id = #{id} @@ -119,7 +123,8 @@ score_comment = #{scoreComment}, record_id = #{recordId}, staff_id = #{staffId}, - priority = #{priority} + priority = #{priority}, + model_id = #{modelId} ,gmt_modified = now() where id = #{id} @@ -158,6 +163,7 @@ record_id, staff_id, priority, + model_id, is_delete )values @@ -173,13 +179,14 @@ #{ item.recordId}, #{ item.staffId}, #{ item.priority}, + #{item.modelId}, 0 ) diff --git a/src/main/resources/mapper/app/ResultRecordMapper.xml b/src/main/resources/mapper/app/ResultRecordMapper.xml index 696487bf..04fd795b 100644 --- a/src/main/resources/mapper/app/ResultRecordMapper.xml +++ b/src/main/resources/mapper/app/ResultRecordMapper.xml @@ -281,11 +281,18 @@ @@ -379,7 +386,7 @@ @@ -575,5 +587,12 @@ and evaluation_id = #{evaluationId} + + + diff --git a/src/main/resources/mapper/flow/FlowRecordMapper.xml b/src/main/resources/mapper/flow/FlowRecordMapper.xml index c58c61ac..aa192578 100644 --- a/src/main/resources/mapper/flow/FlowRecordMapper.xml +++ b/src/main/resources/mapper/flow/FlowRecordMapper.xml @@ -175,7 +175,7 @@