From 7b87828450406f83123b3fc36c77efa718271b42 Mon Sep 17 00:00:00 2001 From: wulin Date: Fri, 20 Nov 2020 09:50:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=98=AF=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=BE=85=E5=8A=9Ejiekou?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lz/common/emun/WorkMsgTypeEnum.java | 1 + .../job/business/DingtalkBusiness.java | 265 ++++++++++-------- .../sys/dao/app/ResultRecordMapper.java | 2 + .../sys/service/app/ResultRecordService.java | 3 + .../app/impl/ResultRecordServiceImpl.java | 10 + .../mapper/app/ResultRecordMapper.xml | 8 + 6 files changed, 167 insertions(+), 122 deletions(-) diff --git a/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java b/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java index 05349a24..d56ba1f8 100644 --- a/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java +++ b/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java @@ -23,6 +23,7 @@ public enum WorkMsgTypeEnum { SCORE(9, "绩效考评待办事项", "评分", "\n @的绩效\n \n 需您去评分"), SKIP(10, "绩效跳过", "跳过", "# @的绩效\n ## 己经跳过"), TRANSFER(11, "绩效转交", "转交", "# @的绩效\n ## 己经转交"), + CLEARN(10, "绩效转交", "转交", "# @的绩效\n ## 己经转交"), // 您的2020年10月绩效考核已经开始,请尽快制定绩效目标 // 吴林的2020年12月绩效考核的目标需要您确认,点击前往确认 ; 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 63657fab..039a98ee 100644 --- a/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java +++ b/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java @@ -221,8 +221,14 @@ public class DingtalkBusiness { return sendWorkMSGByEntity(appid, fromStaffEntity, toStaffEntity, workMsgTypeEnum, "https://www.baidu.com"); } - public String delWorkMSGWithStart(Long startId){ - return ""; + public String delWorkMSGWithStart(List recordIds){ + + + ThreadSendMessage threadSendMessage = new ThreadSendMessage(recordIds, WorkMsgTypeEnum.CLEARN, appid); + Thread thread = new Thread(threadSendMessage); + thread.start(); + + return "OK"; } @@ -284,7 +290,7 @@ public class DingtalkBusiness { } WorkMsgTypeEnum workMsgTypeEnum = WorkMsgTypeEnum.findRoleTypeByCode(type); - ThreadSendMessage threadSendMessage = new ThreadSendMessage(fromStaff, toStaffids, workMsgTypeEnum, appid); + ThreadSendMessage threadSendMessage = new ThreadSendMessage(toStaffids, workMsgTypeEnum, appid); Thread thread = new Thread(threadSendMessage); thread.start(); @@ -366,14 +372,20 @@ public class DingtalkBusiness { public class ThreadSendMessage implements Runnable{ List toStaffids; - StaffSimpleInfo fromStaff = null; + //StaffSimpleInfo fromStaff = null; + List recordIds; WorkMsgTypeEnum workMsgTypeEnum; String appid; String hostUrl = "https://lzmanagement.ldxinyong.com/digitization"; - public ThreadSendMessage(StaffSimpleInfo fromStaff, List toStaffids, WorkMsgTypeEnum typeEnum, String appid){ + public ThreadSendMessage(List toStaffids, WorkMsgTypeEnum typeEnum, String appid){ this.toStaffids = toStaffids; workMsgTypeEnum = typeEnum; - this.fromStaff = fromStaff; + this.appid = appid; + } + + public ThreadSendMessage(List recordIds, WorkMsgTypeEnum typeEnum, String appid){ + this.recordIds = recordIds; + workMsgTypeEnum = typeEnum; this.appid = appid; } @@ -400,148 +412,157 @@ public class DingtalkBusiness { logger.info("开始批量推送消息,数量{}, appid{}", toStaffids.size(), appid); ThirdAppConfig thirdAppConfig = thirdAppConfigService.getByAppId(appid); String token = dingTalkUtil.getAccessTokenWitchEntity(thirdAppConfig); - for (StaffSimpleInfo info:toStaffids - ) { - if(token != null && token.length() > 0){ - //下面防止第二次发送消息时钉钉不推送 - String url = hostUrl; - if(url.contains("?")){ - url += "&halokit=" + System.currentTimeMillis(); - }else{ - url += "?halokit=" + System.currentTimeMillis(); - } - url += ("&detail=1&id=" + info.getResultRecord().getId()); - url = URLEncoder.encode(url); + if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.URGING.getType()){ + //绩效催办 + logger.info("绩效清空"); - url = "dingtalk://dingtalkclient/action/openapp?corpid=" + thirdAppConfig.getCorpId() + - "&container_type=work_platform&app_id=0_" + - appid + "&redirect_type=jump&redirect_url=" + url; + //List threadSendMessages = thirdMsgSendRecordService.selectThirdMsgSendRecordsByRecordIds(resultRecordIds); + }else{ + for (StaffSimpleInfo info:toStaffids + ) { + if(token != null && token.length() > 0){ + //下面防止第二次发送消息时钉钉不推送 + String url = hostUrl; + if(url.contains("?")){ + url += "&halokit=" + System.currentTimeMillis(); + }else{ + url += "?halokit=" + System.currentTimeMillis(); + } + url += ("&detail=1&id=" + info.getResultRecord().getId()); + url = URLEncoder.encode(url); - if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.START_WORK.getType()){ - //发送制定目标通知 - logger.info("目标制定"); - sendNotic(info.getId(), info.getEmployeeId(), - "目标制定", info.getFlowStart().getName(), - info.getResultRecord().getStaffName(), token, url, info.getResultRecord().getId()); - }else if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.START_SCORE.getType()){ - //发送开始评分通知 - logger.info("结果录入"); - sendNotic(info.getId(), info.getEmployeeId(), - "结果录入", info.getFlowStart().getName(), - info.getResultRecord().getStaffName(), token, url, info.getResultRecord().getId()); + url = "dingtalk://dingtalkclient/action/openapp?corpid=" + thirdAppConfig.getCorpId() + + "&container_type=work_platform&app_id=0_" + + appid + "&redirect_type=jump&redirect_url=" + url; - }else if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.URGING.getType()){ - //绩效催办 - logger.info("绩效催办"); - }else { - //流程流转通知 - - if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.TRANSFER.getType()){//转交 - //转交 - logger.info("转交待办任务处理"); - FlowChange flowChange = flowChangeService.selectFlowChangeByRecordIdAndToIdAndType(info.getResultRecord().getId(), - info.getId(), 0); - ThirdMsgSendRecord thirdMsgSendRecord = - thirdMsgSendRecordService.selectThirdMsgSendRecordByWorkIdAndStaffIdAndTypeAndStatus( - info.getResultRecord().getId(), flowChange.getApprovalId(), 1, 1); - if(thirdMsgSendRecord != null){//把原来的任务更新掉 - dingTalkUtil.updateWorkMSG(thirdMsgSendRecord, token); - } - List flowRecords = flowRecordService.selectFlowRecordByRecordIdStatus(info.getResultRecord().getId(), 2); - //发送待办任务到新指定人员,转交过来一定会有数据 + if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.START_WORK.getType()){ + //发送制定目标通知 + logger.info("目标制定"); sendNotic(info.getId(), info.getEmployeeId(), - flowRecords.get(0).getFlowName(), info.getFlowStart().getName(), + "目标制定", info.getFlowStart().getName(), info.getResultRecord().getStaffName(), token, url, info.getResultRecord().getId()); + }else if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.START_SCORE.getType()){ + //发送开始评分通知 + logger.info("结果录入"); + sendNotic(info.getId(), info.getEmployeeId(), + "结果录入", info.getFlowStart().getName(), + info.getResultRecord().getStaffName(), token, url, info.getResultRecord().getId()); + + }else if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.URGING.getType()){ + //绩效催办 + logger.info("绩效催办"); + }else { + //流程流转通知 + + if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.TRANSFER.getType()){//转交 + //转交 + logger.info("转交待办任务处理"); + FlowChange flowChange = flowChangeService.selectFlowChangeByRecordIdAndToIdAndType(info.getResultRecord().getId(), + info.getId(), 0); + ThirdMsgSendRecord thirdMsgSendRecord = + thirdMsgSendRecordService.selectThirdMsgSendRecordByWorkIdAndStaffIdAndTypeAndStatus( + info.getResultRecord().getId(), flowChange.getApprovalId(), 1, 1); + if(thirdMsgSendRecord != null){//把原来的任务更新掉 + dingTalkUtil.updateWorkMSG(thirdMsgSendRecord, token); + } + List flowRecords = flowRecordService.selectFlowRecordByRecordIdStatus(info.getResultRecord().getId(), 2); + //发送待办任务到新指定人员,转交过来一定会有数据 + sendNotic(info.getId(), info.getEmployeeId(), + flowRecords.get(0).getFlowName(), info.getFlowStart().getName(), + info.getResultRecord().getStaffName(), token, url, info.getResultRecord().getId()); - }else if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.SKIP.getType()){//跳过 - //跳过 - logger.info("跳过待办任务处理"); - FlowChange flowChange = flowChangeService.selectFlowChangeByRecordIdAndToIdAndType(info.getResultRecord().getId(), - info.getId(), 1); - ThirdMsgSendRecord thirdMsgSendRecord = - thirdMsgSendRecordService.selectThirdMsgSendRecordByWorkIdAndStaffIdAndTypeAndStatus( - info.getResultRecord().getId(), - flowChange.getApprovalId(), 1, 1); - if(thirdMsgSendRecord != null){//把原来的任务更新掉 - dingTalkUtil.updateWorkMSG(thirdMsgSendRecord, token); - } - List flowRecords = flowRecordService.selectAndOrFlowRecordsById(flowChange.getFlowRecordId(), info.getResultRecord().getId()); - logger.info("查询到可能需要更新待办任务数量{}", flowRecords.size()); - if(flowRecords.size() > 0){ - if(flowRecords.get(0).getType().intValue() == 1){ - //或签 - logger.info("或签,需要更新该节点下所有人员的待办任务"); + + }else if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.SKIP.getType()){//跳过 + //跳过 + logger.info("跳过待办任务处理"); + FlowChange flowChange = flowChangeService.selectFlowChangeByRecordIdAndToIdAndType(info.getResultRecord().getId(), + info.getId(), 1); + ThirdMsgSendRecord thirdMsgSendRecord = + thirdMsgSendRecordService.selectThirdMsgSendRecordByWorkIdAndStaffIdAndTypeAndStatus( + info.getResultRecord().getId(), + flowChange.getApprovalId(), 1, 1); + if(thirdMsgSendRecord != null){//把原来的任务更新掉 + dingTalkUtil.updateWorkMSG(thirdMsgSendRecord, token); + } + List flowRecords = flowRecordService.selectAndOrFlowRecordsById(flowChange.getFlowRecordId(), info.getResultRecord().getId()); + logger.info("查询到可能需要更新待办任务数量{}", flowRecords.size()); + if(flowRecords.size() > 0){ + if(flowRecords.get(0).getType().intValue() == 1){ + //或签 + logger.info("或签,需要更新该节点下所有人员的待办任务"); + for (FlowRecord flowRecord:flowRecords + ) { + if(flowRecord.getApprovalStaffId().longValue() != info.getId()){ + logger.info("更新非直接跳关人员的待办任务,人员id:{}, 姓名:{}", flowRecord.getApprovalStaffId(), + flowRecord.getApprovalStaffName()); + thirdMsgSendRecord = + thirdMsgSendRecordService.selectThirdMsgSendRecordByWorkIdAndStaffIdAndTypeAndStatus( + info.getResultRecord().getId(), + flowRecord.getApprovalStaffId(), 1, 1); + if(thirdMsgSendRecord != null){//把原来的任务更新掉 + dingTalkUtil.updateWorkMSG(thirdMsgSendRecord, token); + } + } + } + } + } + }else{ + List flowRecords = flowRecordService.selectFlowRecordByRecordIdStatus(info.getResultRecord().getId(), 2); + if(flowRecords.size() > 0){//给下一步骤需要处理的人发送待办任务 + List ids = flowRecords.stream().map(new Function() { + @Override + public Long apply(FlowRecord flowRecord) { + return flowRecord.getApprovalStaffId(); + } + }).collect(Collectors.toList()); + List staffSimpleInfos = staffService.selectStaffSimpleInfos(ids); + for (StaffSimpleInfo staffSimpleInfo:staffSimpleInfos + ) { + sendNotic(staffSimpleInfo.getId(), staffSimpleInfo.getEmployeeId(), + flowRecords.get(0).getFlowName(), info.getFlowStart().getName(), + info.getResultRecord().getStaffName(), token, url, info.getResultRecord().getId()); + + } + + } + //取消上一步骤发送的待办任务 + if(flowRecords.size() == 0){//任务结束了 + flowRecords = flowRecordService.selectLastFlowRecordsById(info.getResultRecord().getId()); + }else{ + flowRecords = flowRecordService.selectLastFlowRecordsByIdAndFlowIndex(info.getResultRecord().getId() + , flowRecords.get(0).getFlowIndex().intValue() - 1);//获取上一步的数据 + } + logger.info("查询到可能需要更新的待办任务数量{}", flowRecords.size()); + if(flowRecords.size() > 0){ for (FlowRecord flowRecord:flowRecords - ) { - if(flowRecord.getApprovalStaffId().longValue() != info.getId()){ - logger.info("更新非直接跳关人员的待办任务,人员id:{}, 姓名:{}", flowRecord.getApprovalStaffId(), + ) { + if(flowRecord.getStatus().intValue() == 1){ + logger.info("将要更新人员的待办任务,人员id:{}, 姓名:{}", flowRecord.getApprovalStaffId(), flowRecord.getApprovalStaffName()); - thirdMsgSendRecord = + ThirdMsgSendRecord thirdMsgSendRecord = thirdMsgSendRecordService.selectThirdMsgSendRecordByWorkIdAndStaffIdAndTypeAndStatus( info.getResultRecord().getId(), flowRecord.getApprovalStaffId(), 1, 1); if(thirdMsgSendRecord != null){//把原来的任务更新掉 dingTalkUtil.updateWorkMSG(thirdMsgSendRecord, token); + }else{ + logger.info("无需更新待办任务"); } } } } } - }else{ - List flowRecords = flowRecordService.selectFlowRecordByRecordIdStatus(info.getResultRecord().getId(), 2); - if(flowRecords.size() > 0){//给下一步骤需要处理的人发送待办任务 - List ids = flowRecords.stream().map(new Function() { - @Override - public Long apply(FlowRecord flowRecord) { - return flowRecord.getApprovalStaffId(); - } - }).collect(Collectors.toList()); - List staffSimpleInfos = staffService.selectStaffSimpleInfos(ids); - for (StaffSimpleInfo staffSimpleInfo:staffSimpleInfos - ) { - sendNotic(staffSimpleInfo.getId(), staffSimpleInfo.getEmployeeId(), - flowRecords.get(0).getFlowName(), info.getFlowStart().getName(), - info.getResultRecord().getStaffName(), token, url, info.getResultRecord().getId()); - - } - - } - //取消上一步骤发送的待办任务 - if(flowRecords.size() == 0){//任务结束了 - flowRecords = flowRecordService.selectLastFlowRecordsById(info.getResultRecord().getId()); - }else{ - flowRecords = flowRecordService.selectLastFlowRecordsByIdAndFlowIndex(info.getResultRecord().getId() - , flowRecords.get(0).getFlowIndex().intValue() - 1);//获取上一步的数据 - } - logger.info("查询到可能需要更新的待办任务数量{}", flowRecords.size()); - if(flowRecords.size() > 0){ - for (FlowRecord flowRecord:flowRecords - ) { - if(flowRecord.getStatus().intValue() == 1){ - logger.info("将要更新人员的待办任务,人员id:{}, 姓名:{}", flowRecord.getApprovalStaffId(), - flowRecord.getApprovalStaffName()); - ThirdMsgSendRecord thirdMsgSendRecord = - thirdMsgSendRecordService.selectThirdMsgSendRecordByWorkIdAndStaffIdAndTypeAndStatus( - info.getResultRecord().getId(), - flowRecord.getApprovalStaffId(), 1, 1); - if(thirdMsgSendRecord != null){//把原来的任务更新掉 - dingTalkUtil.updateWorkMSG(thirdMsgSendRecord, token); - }else{ - logger.info("无需更新待办任务"); - } - } - } - } } + }else{ + logger.info("ThreadSendMessage token无效"); ; } - }else{ - logger.info("ThreadSendMessage token无效"); ; } } + } } } 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 7955fc78..6607f392 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 @@ -106,4 +106,6 @@ public interface ResultRecordMapper extends BaseMapper { int batchDeleteByResultRecordIds(@Param("resultRecordIds")List resultRecordIds); + List selectResultRecordsByStartId(Long startId); + } \ 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 2e1878d5..7e79b30e 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 @@ -122,4 +122,7 @@ public interface ResultRecordService extends IService { ResultRecord selectLastResultRecordByUserId(Long userId); ResultRecord selectResultRecordByStaffIdAndStartId(Long userId, Long startId); + + List selectResultRecordsByStartId(Long startId); + List selectResultRecordIdsByStartId(Long startId); } \ No newline at end of file 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 93ce0172..b46fe8df 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 @@ -1334,4 +1334,14 @@ public class ResultRecordServiceImpl extends ServiceImpl selectResultRecordsByStartId(Long startId){ + return resultRecordMapper.selectResultRecordsByStartId(startId); + } + + @Override + public List selectResultRecordIdsByStartId(Long startId){ + return resultRecordMapper.selectIdsByStartId(startId); + } } diff --git a/src/main/resources/mapper/app/ResultRecordMapper.xml b/src/main/resources/mapper/app/ResultRecordMapper.xml index fc84d68f..30a0d8cf 100644 --- a/src/main/resources/mapper/app/ResultRecordMapper.xml +++ b/src/main/resources/mapper/app/ResultRecordMapper.xml @@ -612,5 +612,13 @@ ) + + + +