diff --git a/src/main/java/com/lz/modules/flow/dao/EvaluationGroupMapper.java b/src/main/java/com/lz/modules/flow/dao/EvaluationGroupMapper.java index 67f05b71..4d5b7fdd 100644 --- a/src/main/java/com/lz/modules/flow/dao/EvaluationGroupMapper.java +++ b/src/main/java/com/lz/modules/flow/dao/EvaluationGroupMapper.java @@ -39,6 +39,8 @@ public interface EvaluationGroupMapper extends BaseMapper { List selectEvaluationGroupByIds(@Param("ids") List ids); + List selectEvaluationGroupByNotIds(@Param("ids") List ids); + EvaluationGroup selectEvaluationGroupByName(@Param("name") String name); void deleteByCopyIds(@Param("ids") List ids); diff --git a/src/main/java/com/lz/modules/flow/entity/EvaluationGroup.java b/src/main/java/com/lz/modules/flow/entity/EvaluationGroup.java index 2e1803ed..5368756b 100644 --- a/src/main/java/com/lz/modules/flow/entity/EvaluationGroup.java +++ b/src/main/java/com/lz/modules/flow/entity/EvaluationGroup.java @@ -60,6 +60,10 @@ public class EvaluationGroup implements java.io.Serializable { @ApiModelProperty(value = "是否评分 0 :未通知 1:已通知", name = "score") private int score; + @TableField(exist = false) + @ApiModelProperty(value = "是否确认变更组 0 :首次否 1:确认", name = "confirm") + private int confirm; + /** * * @return diff --git a/src/main/java/com/lz/modules/flow/service/EvaluationGroupService.java b/src/main/java/com/lz/modules/flow/service/EvaluationGroupService.java index abbd3f0e..2d6db490 100644 --- a/src/main/java/com/lz/modules/flow/service/EvaluationGroupService.java +++ b/src/main/java/com/lz/modules/flow/service/EvaluationGroupService.java @@ -7,6 +7,7 @@ import com.lz.modules.app.entity.StaffSimpleInfo; import com.lz.modules.flow.entity.EvaluationGroup; import com.lz.modules.flow.req.EvaluationGroupReq; import com.lz.modules.performance.dto.CheckStaffDto; +import com.lz.modules.performance.req.CheckStaffReq; import java.util.List; @@ -44,11 +45,13 @@ public interface EvaluationGroupService extends IService { List selectEvaluationGroupByIds(List ids); + List selectEvaluationGroupByNotIds(List ids); + EvaluationGroup selectEvaluationGroupByName(String name); //获取考核组里面所有参与的人员信息,去除重复,去除离职 List selectAllStaffSimpleInfoByGroupId(EvaluationGroup evaluationGroup); void deleteByCopyIds(List ids); - List checkStaff(EvaluationGroup evaluationGroup); + R checkStaff(CheckStaffReq checkStaffReq); } \ No newline at end of file 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 39fa9fee..5fc52962 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 @@ -1,12 +1,15 @@ package com.lz.modules.flow.service.impl; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Maps; import com.lz.common.utils.ISelect; import com.lz.common.utils.PageUtils; import com.lz.common.utils.R; import com.lz.common.utils.StringUtil; +import com.lz.modules.app.dto.StaffSimpleDto; import com.lz.modules.app.entity.DepartmentsEntity; import com.lz.modules.app.entity.StaffSimpleInfo; import com.lz.modules.app.service.DepartmentsService; @@ -20,16 +23,22 @@ import com.lz.modules.flow.req.EvaluationGroupReq; import com.lz.modules.flow.service.EvaluationGroupService; import com.lz.modules.flow.service.FlowStartService; import com.lz.modules.performance.dto.CheckStaffDto; +import com.lz.modules.performance.req.CheckStaffReq; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; +import static java.util.stream.Collectors.toList; + /** *

* 考评组表 服务类 @@ -38,7 +47,7 @@ import java.util.stream.Collectors; * @author quyixiao * @since 2020-10-13 */ - +@Slf4j @Service public class EvaluationGroupServiceImpl extends ServiceImpl implements EvaluationGroupService { @@ -178,6 +187,12 @@ public class EvaluationGroupServiceImpl extends ServiceImpl selectEvaluationGroupByNotIds(List ids){ + return evaluationGroupMapper.selectEvaluationGroupByNotIds(ids); + } + @Override public EvaluationGroup selectEvaluationGroupByName(String name){ return evaluationGroupMapper.selectEvaluationGroupByName(name); @@ -261,25 +276,73 @@ public class EvaluationGroupServiceImpl extends ServiceImpl checkStaff(EvaluationGroup evaluationGroup) { - List staffs= new ArrayList<>(); + public R checkStaff(CheckStaffReq checkStaffReq) { + EvaluationGroup evaluationGroup = new EvaluationGroup(); + BeanUtils.copyProperties(checkStaffReq,evaluationGroup); //本次参加人员 List staffIdsByGroup = getStaffIdsByGroup(evaluationGroup); + //其他组全部成员 + List allStaffIdsByGroup = new ArrayList<>(); - //获取之前 - List evaluationGroups = evaluationGroupMapper.selectList(new QueryWrapper() - .eq("is_delete", 0).eq("copy_id", 0)); - - if(CollectionUtils.isEmpty(evaluationGroups)){ - return staffs; + //获取其他组成员 + List ids = new ArrayList<>(); + if(evaluationGroup.getId()!=null){ + ids.add(evaluationGroup.getId()); } - evaluationGroups.stream().map(new Function() { - @Override - public CheckStaffDto apply(EvaluationGroup evaluationGroup) { - //evaluationGroupService. - return null; + List evaluationGroups = evaluationGroupMapper.selectEvaluationGroupByNotIds(ids); + //根据组id成员分组 + Map> map = Maps.newHashMap(); + if(CollectionUtils.isNotEmpty(evaluationGroups)){ + evaluationGroups.forEach(evaluationGroup1 -> { + List staffIds = getStaffIdsByGroup(evaluationGroup1); + allStaffIdsByGroup.addAll(staffIds); + map.put(evaluationGroup1.getId(),staffIds); + + }); + } + + //是否存在其他组成员 + staffIdsByGroup.retainAll(allStaffIdsByGroup); + if(CollectionUtils.isNotEmpty(staffIdsByGroup)){ + List collect = staffIdsByGroup.stream().map(s -> Long.valueOf(s)).distinct().collect(toList()); + List staffSimpleDtos = staffService.selectStaffSimpleInfoByIds(collect); + String notInGroupNames = StringUtil.EMPTY; + for(StaffSimpleDto dto:staffSimpleDtos){ + notInGroupNames = notInGroupNames + dto.getName() + " "; } - }); - return null; + + if(evaluationGroup.getConfirm()==0){ + return R.error(504,notInGroupNames + "已在其他类型为月度的考评组中,是否改为到此考评组中进行考核"); + } + evaluationGroups.forEach(evaluationGroup12 -> { + List staffs = map.get(evaluationGroup12.getId()); + staffs.retainAll(collect); + if(CollectionUtils.isNotEmpty(staffs)){ + //添加到保存时添加 + //删除存在得 + log.info("需删除其他组信息,staffs:" + JSON.toJSONString(staffs)); + removeStaffsToAssessGroup(collect,evaluationGroup12); + } + + }); + return R.ok(); + + } + //直接添加 + return R.ok(); + } + + private int removeStaffsToAssessGroup(List ids,EvaluationGroup group) { + String staffIds = group.getStaffIds(); + if(StringUtil.isNotBlank(staffIds)){ + String[] split = staffIds.split(","); + Set set = new HashSet(Arrays.asList(split)); + set.removeAll(new HashSet(ids)); //set.addAll(new HashSet(ids)); + String join = StringUtils.join(set, ","); + group.setStaffIds(join); + int i = evaluationGroupMapper.updateCoverEvaluationGroupById(group); + return i; + } + return 0; } } diff --git a/src/main/java/com/lz/modules/performance/controller/AssessManagerController.java b/src/main/java/com/lz/modules/performance/controller/AssessManagerController.java index 4aa7cc3a..c8818327 100644 --- a/src/main/java/com/lz/modules/performance/controller/AssessManagerController.java +++ b/src/main/java/com/lz/modules/performance/controller/AssessManagerController.java @@ -94,7 +94,7 @@ public class AssessManagerController { @PostMapping("assess/manager/change") @ApiOperation("考核管理组管理变更") - @ApiResponses({@ApiResponse(code = 200,message = "成功")}) + @ApiResponses({@ApiResponse(code = 200,message = "成功"),@ApiResponse(code = 503,message = "去设置")}) public R assessChange(@RequestBody AssessChangeReq req){ if(req.getStartId()==null){ return R.error("考核id不能为空"); diff --git a/src/main/java/com/lz/modules/performance/controller/EvaluationGroupController.java b/src/main/java/com/lz/modules/performance/controller/EvaluationGroupController.java index 0722d5de..81425007 100644 --- a/src/main/java/com/lz/modules/performance/controller/EvaluationGroupController.java +++ b/src/main/java/com/lz/modules/performance/controller/EvaluationGroupController.java @@ -15,6 +15,7 @@ import com.lz.modules.flow.entity.StaffRole; import com.lz.modules.flow.model.EvaluationGroupDto; import com.lz.modules.flow.req.EvaluationGroupReq; import com.lz.modules.flow.service.*; +import com.lz.modules.performance.req.CheckStaffReq; import io.swagger.annotations.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -190,13 +191,10 @@ public class EvaluationGroupController { } - @GetMapping("/checkStaff") + @PostMapping("/checkStaff") @ApiOperation("校验是否有跨组人员") - public R checkStaff(@RequestParam @RequestBody @ApiParam EvaluationGroup evaluationGroup) { - - evaluationGroupService.checkStaff(evaluationGroup); - - return R.ok(); - + @ApiResponses({@ApiResponse(code = 200,message = "成功"),@ApiResponse(code = 504,message = "已跨组")}) + public R checkStaff(@RequestBody @ApiParam(required = true,name = "body") CheckStaffReq checkStaffReq) { + return evaluationGroupService.checkStaff(checkStaffReq); } } diff --git a/src/main/java/com/lz/modules/performance/req/AssessChangeReq.java b/src/main/java/com/lz/modules/performance/req/AssessChangeReq.java index ad2536fb..ab3617f7 100644 --- a/src/main/java/com/lz/modules/performance/req/AssessChangeReq.java +++ b/src/main/java/com/lz/modules/performance/req/AssessChangeReq.java @@ -23,4 +23,7 @@ public class AssessChangeReq { @ApiModelProperty(value = "变动人员ids",name = "staffIds") private String staffIds; + @ApiModelProperty(value = "确认变更考核组 0 :首次不确认 1:确认",name = "confirm") + private int confirm; + } diff --git a/src/main/java/com/lz/modules/performance/req/CheckStaffReq.java b/src/main/java/com/lz/modules/performance/req/CheckStaffReq.java new file mode 100644 index 00000000..cb078ead --- /dev/null +++ b/src/main/java/com/lz/modules/performance/req/CheckStaffReq.java @@ -0,0 +1,35 @@ +package com.lz.modules.performance.req; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Author: djc + * @Desc: + * @Date: 2020/11/2 9:55 + */ +@ApiModel("校验人员是否存在其他组") +@Data +public class CheckStaffReq { + // + @ApiModelProperty(value = "如果不传,那么表示新建,否则更新", name = "id") + private Long id; + //参与部门id,逗号隔开 + @ApiModelProperty(value = "参与部门id,逗号隔开", name = "depIds") + private String depIds; + //参与考核员工staff_id,逗号隔开 + @ApiModelProperty(value = "参与考核员工staff_id,逗号隔开", name = "staffIds") + private String staffIds; + //排除人员ids,逗号隔开 + @ApiModelProperty(value = "排除人员ids,逗号隔开", name = "outIds") + private String outIds; + + @ApiModelProperty(value = "是否确认变更组 0 :首次否 1:确认", name = "confirm") + private int confirm; +} 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 57b2eaa1..9e8f1787 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 @@ -31,11 +31,16 @@ import com.lz.modules.sys.dao.app.ResultRecordMapper; import com.lz.modules.sys.entity.app.ResultRecord; import com.lz.modules.sys.service.app.ResultRecordService; import com.sun.org.apache.regexp.internal.RE; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; @@ -48,6 +53,7 @@ import static java.util.stream.Collectors.toList; * @Date: 2020/10/22 17:28 */ @Service("assessManagerService") +@Slf4j public class AssessManagerServiceImpl implements AssessManagerService { @Autowired private FlowStartMapper flowStartMapper; @@ -133,7 +139,7 @@ public class AssessManagerServiceImpl implements AssessManagerService { String[] split = flowStart.getGroupIds().split(","); List strings = Arrays.asList(split); List ids = strings.stream().map(s -> Long.valueOf(s)).collect(toList()); - List evaluationGroups = evaluationGroupService.selectEvaluationGroupByIds(ids); + List otheEvaluationGroups = evaluationGroupService.selectEvaluationGroupByNotIds(ids); //获取变更人员 String[] changeStaffIds = req.getStaffIds().split(","); @@ -145,7 +151,7 @@ public class AssessManagerServiceImpl implements AssessManagerService { //根据组id成员分组 Map> map = Maps.newHashMap(); - for(EvaluationGroup group:evaluationGroups){ + for(EvaluationGroup group:otheEvaluationGroups){ List staff = evaluationGroupService.selectAllStaffIdsByGroupId(group.getId()); all.addAll(staff); map.put(group.getId(),staff); @@ -162,7 +168,8 @@ public class AssessManagerServiceImpl implements AssessManagerService { for(StaffSimpleDto dto:staffSimpleDtos){ notInGroupNames = notInGroupNames + dto.getName() + " "; } - throw new RRException(notInGroupNames + "已在其他类型为月度的考评组中,是否改为到此考评组中进行考核"); + + return R.error(503,notInGroupNames + "未加入月度类型考评组,被考核人需要加入月度考评组后才能参与当前月度考核。"); } //初始化添加用户的数据 @@ -171,23 +178,29 @@ public class AssessManagerServiceImpl implements AssessManagerService { //排除已发起过的 List longs = evaluationStartStaffMapper.selectStaffIdsByStart(req.getStartId()); - for(EvaluationGroup group:evaluationGroups){ + for(EvaluationGroup group:otheEvaluationGroups){ GroupStaffs groupStaffs = new GroupStaffs(); groupStaffs.setEvaluationGroup(group); List staffs = map.get(group.getId()); staffs.retainAll(change); - List collect = staffs.stream().map(s -> Long.valueOf(s)).collect(toList()); collect.removeAll(longs); - groupStaffs.setStaffIds(collect); - groupS.add(groupStaffs); + if(CollectionUtils.isNotEmpty(collect)){ + groupStaffs.setStaffIds(collect); + groupS.add(groupStaffs); + } } StartGroups startGroups = new StartGroups(); startGroups.setStartId(req.getStartId()); startGroups.setGroups(groupS); - flowStartService.startStaffs(startGroups); + try { + flowStartService.startStaffs(startGroups); + } catch (Exception e) { + log.error("调用初始化失败"); + return R.error("初始化失败"); + } return R.ok(); @@ -210,39 +223,42 @@ public class AssessManagerServiceImpl implements AssessManagerService { Long evaluation = Long.valueOf(s); //更新评分 int i = evaluationStartStaffService.updateBatchToScore(req.getStartId(), evaluation); + log.info("更新evaluationStartStaff 数据 为已评分 " + i); - List longs = resultRecordMapper.selectToScoreList(req.getStartId(), evaluation); - //更新流程绩效 - ApprovalDto approvalDto = new ApprovalDto(); - approvalDto.setStatus(1); - approvalDto.setResultRecordId(1L); - approvalDto.setMenuName("开始评分"); - try { - resultRecordService.newApproval(approvalDto); - } catch (Exception e) { - e.printStackTrace(); + List recordIds = resultRecordMapper.selectToScoreList(req.getStartId(), evaluation); + if(CollectionUtils.isEmpty(recordIds)){ + continue; } + recordIds.forEach(aLong -> { + //更新流程绩效 + ApprovalDto approvalDto = new ApprovalDto(); + approvalDto.setStatus(1); + approvalDto.setResultRecordId(1L); + approvalDto.setMenuName("开始评分"); + try { + resultRecordService.newApproval(approvalDto); + } catch (Exception e) { + log.error("执行中状态跳过失败 recorId:" + aLong,e); + } + }); + } } - private List buildStartStaffList(List staffIds){ - List evaluationStartStaffs = new ArrayList<>(); - staffIds.forEach(new Consumer() { - @Override - public void accept(String s) { - EvaluationStartStaff startStaff = new EvaluationStartStaff(); - startStaff.setStaffId(Long.valueOf(s)); - - } - }); - - - return evaluationStartStaffs; - + public static void main(String[] args) { + ExecutorService executorService = Executors.newFixedThreadPool(10); + CompletableFuture> future = CompletableFuture.supplyAsync(()-> Arrays.asList(1L,2L),executorService); + try { + List longs = future.get(); + System.out.println(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } } - -} +} \ 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 db5988d3..62fb07c9 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 @@ -79,7 +79,7 @@ public interface ResultRecordMapper extends BaseMapper { List selectChartDetailList(@Param("page") IPage page, @Param("staffIds") List staffIds, @Param("startId")Long startId,@Param("scoreLevel")Long scoreLevel); - void batchDeleteByStartId(@Param("startId")Long startId); + int batchDeleteByStartId(@Param("startId")Long startId); int countStartAndGroupNum(@Param("startId")Long startId); diff --git a/src/main/resources/mapper/app/ResultRecordMapper.xml b/src/main/resources/mapper/app/ResultRecordMapper.xml index fd3c7dec..fdba51f8 100644 --- a/src/main/resources/mapper/app/ResultRecordMapper.xml +++ b/src/main/resources/mapper/app/ResultRecordMapper.xml @@ -451,7 +451,8 @@ - update lz_result_record set is_delete = 1 where + update lz_result_record set is_delete = 1,gmt_modified = now() + where is_delete = 0 and start_id = #{startId} and staff_id in ( diff --git a/src/main/resources/mapper/flow/EvaluationGroupMapper.xml b/src/main/resources/mapper/flow/EvaluationGroupMapper.xml index fdd95b47..59aea297 100644 --- a/src/main/resources/mapper/flow/EvaluationGroupMapper.xml +++ b/src/main/resources/mapper/flow/EvaluationGroupMapper.xml @@ -118,6 +118,18 @@ ) + + + diff --git a/src/main/resources/mapper/flow/EvaluationStartStaffMapper.xml b/src/main/resources/mapper/flow/EvaluationStartStaffMapper.xml index f2c8754b..484d23ac 100644 --- a/src/main/resources/mapper/flow/EvaluationStartStaffMapper.xml +++ b/src/main/resources/mapper/flow/EvaluationStartStaffMapper.xml @@ -143,7 +143,7 @@ lz_evaluation_start_staff set score = 1, - ,gmt_modified = now() + gmt_modified = now() where is_delete = 0 and score = 0 and type = 0 and evaluation_id = #{evaluationId} and start_id = #{startId} @@ -154,7 +154,7 @@ lz_evaluation_start_staff set is_delete = 1, - ,gmt_modified = now() + gmt_modified = now() where is_delete = 0 and type = 0 and start_id = #{startId} and staff_id in (