From 9428491ab889c7fd8f161a1724707f10640c0bb1 Mon Sep 17 00:00:00 2001 From: wulin Date: Wed, 2 Dec 2020 10:03:37 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=8A=A0=E4=BA=BA=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lz/modules/flow/service/impl/FlowStartServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 727a3f44..9a51685e 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 @@ -857,6 +857,7 @@ public class FlowStartServiceImpl extends ServiceImpl Date: Wed, 2 Dec 2020 10:11:09 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E7=BA=BF=E7=A8=8B=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FlowStartServiceImpl.java | 27 +++++-------------- 1 file changed, 6 insertions(+), 21 deletions(-) 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 9a51685e..e15a8364 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 @@ -2,22 +2,13 @@ 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; import com.lz.modules.flow.entity.*; import com.lz.modules.flow.model.*; @@ -28,22 +19,15 @@ 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; @@ -839,12 +823,12 @@ public class FlowStartServiceImpl extends ServiceImpl resultRecords; + List resultStarts; List noticeStaff; public ThreadInitFlowRecord(List resultRecords, List noticeStaff){ - this.resultRecords = resultRecords; + this.resultStarts = resultRecords; this.noticeStaff = noticeStaff; } @@ -853,13 +837,14 @@ public class FlowStartServiceImpl extends ServiceImpl Date: Wed, 2 Dec 2020 11:41:20 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=BA=BF=E4=B8=8A?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=82=AC=E5=8A=9E=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lz/common/emun/WorkMsgTypeEnum.java | 2 +- .../controller/ResultRecordController.java | 29 ++++++++++++++ .../lz/modules/flow/dao/FlowRecordMapper.java | 4 +- .../flow/service/FlowRecordService.java | 2 + .../service/impl/FlowRecordServiceImpl.java | 5 +++ .../job/business/DingtalkBusiness.java | 38 ++++++++++++++++++- .../mapper/flow/FlowRecordMapper.xml | 5 +++ 7 files changed, 82 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java b/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java index 3d9806fa..806bdcdb 100644 --- a/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java +++ b/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java @@ -14,7 +14,7 @@ public enum WorkMsgTypeEnum { LEADER_PASS(2, "绩效已打分", "去提交给人事", "# 绩效已打分\n ## 你的绩效已经打分"), //绩效通过人事,老板审核的最终审核通知 PASS(3, "绩效通过", "去查看", "# 绩效通过\n ## 你的绩效已经通过"), - URGING(4, "绩效催办", "去审批", "# 绩效催办\n ## @提醒您审批"), + URGING(4, "绩效催办", "去审批", "# 绩效催办\n ## @的绩效需您处理"), END(5, "绩效终止", "去查看", "# 绩效终止\n ## @,你的绩效终止"), START_WORK(6, "绩效考评待办事项", "去查看", "# 绩效目标制定\n ## @,你的绩效需要制定目标"), START_SCORE(7, "绩效考评待办事项", "去查看", "# 绩效结果输入\n ## @,你的绩效需要输入结果"), 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 01d8012a..ce6fc40a 100644 --- a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java +++ b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java @@ -20,6 +20,7 @@ import com.lz.modules.flow.entity.*; import com.lz.modules.flow.model.*; import com.lz.modules.flow.req.ResultDetailReq; import com.lz.modules.flow.service.*; +import com.lz.modules.job.business.DingtalkBusiness; import com.lz.modules.sys.controller.AbstractController; import com.lz.modules.sys.entity.SysUserEntity; import com.lz.modules.sys.entity.app.ResultComment; @@ -105,6 +106,9 @@ public class ResultRecordController extends AbstractController { @Autowired private FlowChartDetailRecordService flowChartDetailRecordService; + @Autowired + private DingtalkBusiness dingtalkBusiness; + /** * 列表 */ @@ -331,6 +335,31 @@ public class ResultRecordController extends AbstractController { return R.ok().put("lzResultRecord", lzResultRecord); } + /** + * 信息 + */ + @GetMapping("/urging") + @ApiOperation("绩效意见催办-吴林") + @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "绩效id")}) + @ApiResponses({@ApiResponse(code = 200, message = "成功", response = R.class)}) + public R getDetail(@RequestParam Long id) { + ResultRecord lzResultRecord = lzResultRecordService.selectResultRecordById(id); + //获取当前节点,谁在处理 + List flowRecords = flowRecordService.selectFlowRecordsByRecordIdAndStatus(id, 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 staffs = staffService.selectNamesByIds(ids); + dingtalkBusiness.sendNoticeMsg(lzResultRecord, staffs); + return R.ok("催办成功"); + } + return R.error("无可催办人员"); + } + /** * 信息 */ diff --git a/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java b/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java index d417c7c5..fff7c877 100644 --- a/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java +++ b/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java @@ -90,5 +90,7 @@ public interface FlowRecordMapper extends BaseMapper { List selectSkipFlowRecordsById(@Param("recordId") Long recordId); - List selectFirstFlowRecordsByIdAndFlowIndex(Long recordId, int flowIndex, int status); + List selectFirstFlowRecordsByIdAndFlowIndex(@Param("recordId") Long recordId, @Param("flowIndex") int flowIndex, @Param("status") int status); + + List selectFlowRecordsByRecordIdAndStatus(@Param("recordId") Long recordId, @Param("status") int status); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/flow/service/FlowRecordService.java b/src/main/java/com/lz/modules/flow/service/FlowRecordService.java index 99c44187..4503002a 100644 --- a/src/main/java/com/lz/modules/flow/service/FlowRecordService.java +++ b/src/main/java/com/lz/modules/flow/service/FlowRecordService.java @@ -86,4 +86,6 @@ public interface FlowRecordService extends IService { List selectSkipFlowRecordsById(Long recordId); List selectFirstFlowRecordsByIdAndFlowIndex(Long recordId, int flowIndex, int status); + + List selectFlowRecordsByRecordIdAndStatus(Long recordId, int status); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/flow/service/impl/FlowRecordServiceImpl.java b/src/main/java/com/lz/modules/flow/service/impl/FlowRecordServiceImpl.java index 412a65e5..5a19246b 100644 --- a/src/main/java/com/lz/modules/flow/service/impl/FlowRecordServiceImpl.java +++ b/src/main/java/com/lz/modules/flow/service/impl/FlowRecordServiceImpl.java @@ -231,4 +231,9 @@ public class FlowRecordServiceImpl extends ServiceImpl selectFlowRecordsByRecordIdAndStatus(Long recordId, int status){ + return flowRecordMapper.selectFlowRecordsByRecordIdAndStatus(recordId, status); + } + } 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 5127f532..50127d1a 100644 --- a/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java +++ b/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java @@ -104,6 +104,7 @@ public class DingtalkBusiness { @Resource StaffDao staffDao; + static String homeUrl = "https://lzmanagement.ldxinyong.com/digitization"; @Value("${dingtalk.appid}") private String appid; @@ -585,6 +586,39 @@ public class DingtalkBusiness { } } + public String sendNoticeMsg(ResultRecord lzResultRecord, List staffs) { + + ThirdAppConfig thirdAppConfig = thirdAppConfigService.getByAppId(appid); + String token = dingTalkUtil.getAccessTokenWitchEntity(thirdAppConfig); + if(token != null && token.length() > 0){ + String url = homeUrl; + if(url.contains("?")){ + url += "&halokit=" + System.currentTimeMillis(); + }else{ + url += "?halokit=" + System.currentTimeMillis(); + } + url += ("&detail=1&id=" + lzResultRecord.getId()); + url = URLEncoder.encode(url); + + + url = "dingtalk://dingtalkclient/action/openapp?corpid=" + thirdAppConfig.getCorpId() + + "&container_type=work_platform&app_id=0_" + + appid + "&redirect_type=jump&redirect_url=" + url; + logger.info("推送消息个数{}", staffs.size()); + for (StaffEntity info: + staffs) { + logger.info("发送消息给{},url:{}", info, url); + String content = WorkMsgTypeEnum.URGING.getContent().replace("@", lzResultRecord.getStaffName()); + dingTalkUtil.sendSingleActionCardMSG(appid, info, WorkMsgTypeEnum.URGING.getTitle(), + content, WorkMsgTypeEnum.URGING.getBtnText(), url, token); + } + return "OK"; + + }else{ + return "token无效"; + } + } + public String sendWorkMSG(String appid, Long fromStaffid, long toStaffid, int type) { //获取Token StaffEntity toStaffEntity = staffService.selectStaffById(toStaffid); @@ -741,13 +775,15 @@ public class DingtalkBusiness { return R.error("未授权登录"); } + + public class ThreadSendMessage implements Runnable{ List toStaffids; StaffSimpleInfo fromStaff = null; List recordIds; WorkMsgTypeEnum workMsgTypeEnum; String appid; - String hostUrl = "https://lzmanagement.ldxinyong.com/digitization"; + String hostUrl = homeUrl; public ThreadSendMessage(StaffSimpleInfo fromStaff, List toStaffids, WorkMsgTypeEnum typeEnum, String appid){ this.fromStaff = fromStaff; this.toStaffids = toStaffids; diff --git a/src/main/resources/mapper/flow/FlowRecordMapper.xml b/src/main/resources/mapper/flow/FlowRecordMapper.xml index 22201063..7dca5bc4 100644 --- a/src/main/resources/mapper/flow/FlowRecordMapper.xml +++ b/src/main/resources/mapper/flow/FlowRecordMapper.xml @@ -322,5 +322,10 @@ select * from lz_flow_record where is_delete = 0 and flow_index =]]> #{flowIndex} and record_id = #{recordId} and status=#{status} order by flow_index asc + + From 2ff0b3fb92e705b6f4830a31406650d0a028de70 Mon Sep 17 00:00:00 2001 From: wulin Date: Wed, 2 Dec 2020 11:49:00 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=82=AC=E5=8A=9E=E6=96=87=E6=A1=88?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java | 2 +- .../lz/modules/app/controller/ResultRecordController.java | 2 +- .../com/lz/modules/job/business/DingtalkBusiness.java | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java b/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java index 806bdcdb..0f94627a 100644 --- a/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java +++ b/src/main/java/com/lz/common/emun/WorkMsgTypeEnum.java @@ -14,7 +14,7 @@ public enum WorkMsgTypeEnum { LEADER_PASS(2, "绩效已打分", "去提交给人事", "# 绩效已打分\n ## 你的绩效已经打分"), //绩效通过人事,老板审核的最终审核通知 PASS(3, "绩效通过", "去查看", "# 绩效通过\n ## 你的绩效已经通过"), - URGING(4, "绩效催办", "去审批", "# 绩效催办\n ## @的绩效需您处理"), + URGING(4, "绩效催办", "去处理", "# 绩效催办\n ## @的绩效需您处理"), END(5, "绩效终止", "去查看", "# 绩效终止\n ## @,你的绩效终止"), START_WORK(6, "绩效考评待办事项", "去查看", "# 绩效目标制定\n ## @,你的绩效需要制定目标"), START_SCORE(7, "绩效考评待办事项", "去查看", "# 绩效结果输入\n ## @,你的绩效需要输入结果"), 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 ce6fc40a..1471fcc5 100644 --- a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java +++ b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java @@ -339,7 +339,7 @@ public class ResultRecordController extends AbstractController { * 信息 */ @GetMapping("/urging") - @ApiOperation("绩效意见催办-吴林") + @ApiOperation("绩效催办-吴林") @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "绩效id")}) @ApiResponses({@ApiResponse(code = 200, message = "成功", response = R.class)}) public R getDetail(@RequestParam Long id) { 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 50127d1a..64a11be6 100644 --- a/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java +++ b/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java @@ -608,7 +608,13 @@ public class DingtalkBusiness { for (StaffEntity info: staffs) { logger.info("发送消息给{},url:{}", info, url); - String content = WorkMsgTypeEnum.URGING.getContent().replace("@", lzResultRecord.getStaffName()); + String content = null; + if(!lzResultRecord.getStaffName().equals(info.getName())){ + content = WorkMsgTypeEnum.URGING.getContent().replace("@", lzResultRecord.getStaffName()); + }else{ + content = WorkMsgTypeEnum.URGING.getContent().replace("@", "您"); + } + dingTalkUtil.sendSingleActionCardMSG(appid, info, WorkMsgTypeEnum.URGING.getTitle(), content, WorkMsgTypeEnum.URGING.getBtnText(), url, token); }