diff --git a/src/main/java/com/lz/modules/app/controller/TestController.java b/src/main/java/com/lz/modules/app/controller/TestController.java index c133435f..1e7183f1 100644 --- a/src/main/java/com/lz/modules/app/controller/TestController.java +++ b/src/main/java/com/lz/modules/app/controller/TestController.java @@ -28,6 +28,7 @@ import com.lz.modules.flow.entity.StaffRole; import com.lz.modules.flow.model.FlowModel; import com.lz.modules.flow.service.RecordAuthService; import com.lz.modules.flow.service.StaffRoleService; +import com.lz.modules.job.business.DingtalkBusiness; import com.lz.modules.sys.dao.SysUserDao; import com.lz.modules.sys.entity.app.ResultDetail; import com.lz.modules.sys.entity.app.ResultRecord; @@ -35,12 +36,17 @@ import com.lz.modules.sys.service.SysUserService; import com.lz.modules.sys.service.app.ResultDetailService; import com.lz.modules.sys.service.app.ResultRecordService; import com.lz.modules.third.entity.ThirdAppConfig; +import com.lz.modules.third.entity.ThirdMsgSendRecord; import com.lz.modules.third.service.ThirdAppConfigService; +import com.lz.modules.third.service.ThirdMsgSendRecordService; import com.taobao.api.ApiException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; @@ -81,6 +87,17 @@ public class TestController { @Autowired private IEquipmentInfoService equipmentInfoService; + @Autowired + private DingTalkUtil dingTalkUtil; + + @Autowired + private ThirdAppConfigService thirdAppConfigService; + + @Autowired + private ThirdMsgSendRecordService thirdMsgSendRecordService; + + @Value("${dingtalk.appid}") + private String appid; @RequestMapping("/test/xx") public void test() { ResultRecord resultRecord = new ResultRecord(); @@ -90,6 +107,16 @@ public class TestController { resultRecordService.insertResultRecord(resultRecord); } + @GetMapping("/test/cleanMSG") + public void cleanMSG(@RequestParam Long id) { + ThirdAppConfig thirdAppConfig = thirdAppConfigService.getByAppId(appid); + String token = dingTalkUtil.getAccessTokenWitchEntity(thirdAppConfig); + if(token != null && token.length() > 0){ + ThirdMsgSendRecord thirdMsgSendRecord = thirdMsgSendRecordService.selectThirdMsgSendRecordById(id); + dingTalkUtil.updateWorkMSG(thirdMsgSendRecord, token); + } + } + @RequestMapping("/test/department") public void department() { diff --git a/src/main/java/com/lz/modules/app/entity/StaffSimpleInfo.java b/src/main/java/com/lz/modules/app/entity/StaffSimpleInfo.java index 6d3045af..cde505ed 100644 --- a/src/main/java/com/lz/modules/app/entity/StaffSimpleInfo.java +++ b/src/main/java/com/lz/modules/app/entity/StaffSimpleInfo.java @@ -2,6 +2,7 @@ package com.lz.modules.app.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.lz.modules.flow.entity.FlowRecord; import com.lz.modules.flow.entity.FlowStart; import com.lz.modules.sys.entity.app.ResultRecord; import lombok.Data; @@ -54,6 +55,8 @@ public class StaffSimpleInfo implements Serializable { private FlowStart flowStart; //当前操作的流程id private Long flowRecordId; + //当前操作flowRecord + private FlowRecord flowRecord; 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 6087630f..318da236 100644 --- a/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java +++ b/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java @@ -111,4 +111,8 @@ public interface FlowRecordMapper extends BaseMapper { List selectFlowRecordByRecordIdsStatus(@Param("recordIds") List recordIds, @Param("status") int status); List selectFlowRecordByRecordIdsFlowProcessAndStatus(List recordIds, Long flowProcess, int status); + + FlowRecord selectFlowRecordByRecordIdAndApprovalIdAndStatus(@Param("recordId") Long recordId, @Param("approvalId") Long approvalId, @Param("status") int status); + + FlowRecord selectFlowRecordByRecordIdAndApprovalIdAndFlowProcess(@Param("recordId") Long recordId,@Param("approvalId") Long approvalId, @Param("flowProcess") Integer flowProcess); } \ 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 c0edc4ea..f2708526 100644 --- a/src/main/java/com/lz/modules/flow/service/FlowRecordService.java +++ b/src/main/java/com/lz/modules/flow/service/FlowRecordService.java @@ -107,4 +107,10 @@ public interface FlowRecordService extends IService { List selectFlowRecordByRecordIdsStatus(List recordIds, int status); List selectFlowRecordByRecordIdsFlowProcessAndStatus(List recordIds, Long flowProcess, int status); + + + + FlowRecord selectFlowRecordByRecordIdAndApprovalIdAndStatus(Long recordId, Long approvalId, int status); + + FlowRecord selectFlowRecordByRecordIdAndApprovalIdAndFlowProcess(Long workId, Long staffId, Integer flowProcess); } \ 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 ab37072a..a02a996b 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 @@ -281,4 +281,14 @@ public class FlowRecordServiceImpl extends ServiceImpl flowRecords = flowRecordService.selectFlowRecordByRecordIdStatus(fromStaff.getResultRecord().getId(), 2); //取消上一步骤发送的待办任务 List cancelRecords; @@ -1201,7 +1215,30 @@ public class DingtalkBusiness { cancelRecords = flowRecordService.selectLastFlowRecordsById(fromStaff.getResultRecord().getId()); }else{ if(workMsgTypeEnum.getType() == WorkMsgTypeEnum.REJECT.getType()){//被拒 - logger.info("任务驳回"); + logger.info("任务驳回 recordId {}", fromStaff.getResultRecord().getId()); + + //下面的方法主要是为了解决驳回时,驳回到指定节点时可能导致的无法取消待办任务的问题 + List thirdMsgSendRecords = + thirdMsgSendRecordService.selectThirdMsgSendRecordsByRecordId( + fromStaff.getResultRecord().getId(),1, 1); + logger.info("取消本次绩效的最后一条待办任务通知信息,记录条数{}", thirdMsgSendRecords.size()); + for (ThirdMsgSendRecord thirdMsgSendRecord:thirdMsgSendRecords + ) { + + FlowRecord flowRecord = + flowRecordService.selectFlowRecordByRecordIdAndApprovalIdAndFlowProcess(thirdMsgSendRecord.getWorkId(), + thirdMsgSendRecord.getStaffId(), fromStaff.getFlowRecord().getFlowProcess()); + logger.info("更新的钉钉消息{} 流程记录信息{}", thirdMsgSendRecord,flowRecord); + if(flowRecord == null || //当前流程节点已处理,但是不存在的取消 + flowRecord.getType().intValue() == 1 //如果是或签,那么都取消 + || (flowRecord.getType().intValue() != 1 && + flowRecord.getApprovalStaffId().longValue() == fromStaff.getId().longValue())//不是或签,但是是操作本人,那么取消 + ){ + dingTalkUtil.updateWorkMSG(thirdMsgSendRecord, token); + } + + } + cancelRecords = flowRecordService.selectFirstFlowRecordsByIdAndFlowIndex(fromStaff.getResultRecord().getId() , flowRecords.get(0).getFlowIndex().intValue() + 1, 0);//获取下一步的数据 }else{ @@ -1211,6 +1248,7 @@ public class DingtalkBusiness { } } + logger.info("查询到可能需要更新的待办任务数量{}", cancelRecords.size()); if(cancelRecords.size() > 0){ int flowIndex = cancelRecords.get(0).getFlowIndex().intValue(); 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 0f2b458a..2604273a 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 @@ -954,7 +954,8 @@ public class ResultRecordServiceImpl extends ServiceImpl flowRecords = flowRecordService.selectFlowRecordByRecordIdGeFlowIndex(f.getRecordId(), f.getFlowIndex()); @@ -1000,7 +1001,7 @@ public class ResultRecordServiceImpl extends ServiceImpl nextFlowRecords = flowRecordService.selectFlowRecordByRecordIdStatusFlowIndex(approvalDto.getResultRecordId(), 0, nextFlowRecord.getFlowIndex()); if (CollectionUtils.isEmpty(nextFlowRecords)) { - dingtalkBusiness.sendWorkMSGWithAsyn(resultRecord.getId(), WorkMsgTypeEnum.PROCESS.getType());//流程己经结束调用 + dingtalkBusiness.sendWorkMSGWithAsyn(nextFlowRecords.get(0), WorkMsgTypeEnum.PROCESS.getType());//流程己经结束调用 log.info("流程己经结束3"); return R.ok("流程己经结束"); } @@ -1256,7 +1257,7 @@ public class ResultRecordServiceImpl extends ServiceImpl List selectThirdMsgSendRecordsByRecordIds(@Param("list") List recordIds, @Param("type") int type, @Param("status") int status); + + List selectThirdMsgSendRecordsByRecordId(@Param("recordId") Long recordId, + @Param("type") int type, + @Param("status") int status); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/third/service/ThirdMsgSendRecordService.java b/src/main/java/com/lz/modules/third/service/ThirdMsgSendRecordService.java index 07de4584..7bf3f94e 100644 --- a/src/main/java/com/lz/modules/third/service/ThirdMsgSendRecordService.java +++ b/src/main/java/com/lz/modules/third/service/ThirdMsgSendRecordService.java @@ -42,4 +42,6 @@ public interface ThirdMsgSendRecordService extends IService ThirdMsgSendRecord selectThirdMsgSendRecordByWorkIdAndStaffIdAndTypeAndStatus(Long workId, Long staffId, int workType, int status); List selectThirdMsgSendRecordsByRecordIds(List recordIds, int type, int status); + + List selectThirdMsgSendRecordsByRecordId(Long recordId, int type, int status); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/third/service/impl/ThirdMsgSendRecordServiceImpl.java b/src/main/java/com/lz/modules/third/service/impl/ThirdMsgSendRecordServiceImpl.java index 94cf9aac..27942901 100644 --- a/src/main/java/com/lz/modules/third/service/impl/ThirdMsgSendRecordServiceImpl.java +++ b/src/main/java/com/lz/modules/third/service/impl/ThirdMsgSendRecordServiceImpl.java @@ -102,4 +102,9 @@ public class ThirdMsgSendRecordServiceImpl extends ServiceImpl selectThirdMsgSendRecordsByRecordId(Long recordId, int type, int status){ + return thirdMsgSendRecordMapper.selectThirdMsgSendRecordsByRecordId(recordId, type, status); + } + } diff --git a/src/main/resources/mapper/flow/FlowRecordMapper.xml b/src/main/resources/mapper/flow/FlowRecordMapper.xml index 7b712407..552713de 100644 --- a/src/main/resources/mapper/flow/FlowRecordMapper.xml +++ b/src/main/resources/mapper/flow/FlowRecordMapper.xml @@ -394,5 +394,17 @@ + + + + diff --git a/src/main/resources/mapper/third/ThirdMsgSendRecordMapper.xml b/src/main/resources/mapper/third/ThirdMsgSendRecordMapper.xml index 2db16611..a783b606 100644 --- a/src/main/resources/mapper/third/ThirdMsgSendRecordMapper.xml +++ b/src/main/resources/mapper/third/ThirdMsgSendRecordMapper.xml @@ -201,5 +201,9 @@ ) + +