|
@@ -34,6 +34,7 @@ import cn.iocoder.yudao.module.system.api.bpm.vo.ElderlyInfoReqVO;
|
|
|
import cn.iocoder.yudao.module.system.enums.notice.NotieBusinessTypeEnum;
|
|
import cn.iocoder.yudao.module.system.enums.notice.NotieBusinessTypeEnum;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.iocoder.yudao.framework.common.util.corp.CorpMsgUtil;
|
|
import cn.iocoder.yudao.framework.common.util.corp.CorpMsgUtil;
|
|
|
|
|
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
|
|
import cn.iocoder.yudao.module.system.api.tenant.TenantApi;
|
|
import cn.iocoder.yudao.module.system.api.tenant.TenantApi;
|
|
|
import cn.iocoder.yudao.module.system.api.tenant.TenantRespDTO;
|
|
import cn.iocoder.yudao.module.system.api.tenant.TenantRespDTO;
|
|
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
@@ -119,11 +120,13 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
|
|
|
//Task task = taskService.getTask(taskId);
|
|
//Task task = taskService.getTask(taskId);
|
|
|
|
|
|
|
|
// 2. 创建抄送流程
|
|
// 2. 创建抄送流程
|
|
|
|
|
+ // 抄送记录必须写入【发起方租户】,否则集团用户跨机构查看时无法定位目标租户
|
|
|
|
|
+ Long tenantId = getStartUserTenantId(Long.valueOf(processInstance.getStartUserId()));
|
|
|
List<BpmProcessInstanceCopyDO> copyList = convertList(userIds, userId -> new BpmProcessInstanceCopyDO()
|
|
List<BpmProcessInstanceCopyDO> copyList = convertList(userIds, userId -> new BpmProcessInstanceCopyDO()
|
|
|
.setUserId(userId).setReason(reason).setStartUserId(Long.valueOf(processInstance.getStartUserId()))
|
|
.setUserId(userId).setReason(reason).setStartUserId(Long.valueOf(processInstance.getStartUserId()))
|
|
|
.setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName())
|
|
.setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName())
|
|
|
.setCategory(processDefinition.getCategory()).setTaskId(taskId)
|
|
.setCategory(processDefinition.getCategory()).setTaskId(taskId)
|
|
|
- .setActivityId(activityId).setActivityName(activityName));
|
|
|
|
|
|
|
+ .setActivityId(activityId).setActivityName(activityName).setTenantId(tenantId));
|
|
|
processInstanceCopyMapper.insertBatch(copyList);
|
|
processInstanceCopyMapper.insertBatch(copyList);
|
|
|
BpmBusinessFormDO businessFormDO = bpmBusinessFormMapper.selectOne(new LambdaQueryWrapper<BpmBusinessFormDO>()
|
|
BpmBusinessFormDO businessFormDO = bpmBusinessFormMapper.selectOne(new LambdaQueryWrapper<BpmBusinessFormDO>()
|
|
|
.eq(BpmBusinessFormDO::getProcessInstanceId, processInstanceId));
|
|
.eq(BpmBusinessFormDO::getProcessInstanceId, processInstanceId));
|
|
@@ -241,7 +244,7 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
|
|
|
businessFormDO == null || businessFormDO.getStatus() == null
|
|
businessFormDO == null || businessFormDO.getStatus() == null
|
|
|
? "" : String.valueOf(businessFormDO.getStatus()),
|
|
? "" : String.valueOf(businessFormDO.getStatus()),
|
|
|
copy.getUserId() == null ? "" : String.valueOf(copy.getUserId())));
|
|
copy.getUserId() == null ? "" : String.valueOf(copy.getUserId())));
|
|
|
-
|
|
|
|
|
|
|
+ log.info("sendCorpCopyMessage 抄送地址:{}",notice.getPage());
|
|
|
WechatMessageSaveReq req = new WechatMessageSaveReq();
|
|
WechatMessageSaveReq req = new WechatMessageSaveReq();
|
|
|
req.setTitle(CorpMsgUtil.TITLE_COPY);
|
|
req.setTitle(CorpMsgUtil.TITLE_COPY);
|
|
|
req.setTenantName(tenantName);
|
|
req.setTenantName(tenantName);
|
|
@@ -267,6 +270,46 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
|
|
+ @TenantIgnore
|
|
|
|
|
+ public Long getCopyTenantIdIgnoreTenant(Long userId, String processInstanceId) {
|
|
|
|
|
+ // 跨租户查询:抄送记录落在流程发起方租户,集团用户在自己租户下查不到
|
|
|
|
|
+ List<BpmProcessInstanceCopyDO> list = processInstanceCopyMapper.selectList(
|
|
|
|
|
+ new LambdaQueryWrapper<BpmProcessInstanceCopyDO>()
|
|
|
|
|
+ .eq(BpmProcessInstanceCopyDO::getUserId, userId)
|
|
|
|
|
+ .eq(BpmProcessInstanceCopyDO::getProcessInstanceId, processInstanceId));
|
|
|
|
|
+ if (CollUtil.isEmpty(list)) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ BpmProcessInstanceCopyDO copy = list.get(0);
|
|
|
|
|
+ // 优先取记录自身租户;存量数据因历史落库缺陷为 0,回退到"发起人所属租户"
|
|
|
|
|
+ if (copy.getTenantId() != null && copy.getTenantId() > 0) {
|
|
|
|
|
+ return copy.getTenantId();
|
|
|
|
|
+ }
|
|
|
|
|
+ return getStartUserTenantId(copy.getStartUserId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 查询流程发起人所属租户,即流程发起方机构。
|
|
|
|
|
+ * <p>
|
|
|
|
|
+ * 抄送记录必须写入发起方租户,集团用户被抄送后才能凭此定位到目标租户。
|
|
|
|
|
+ * 不能依赖 {@link TenantContextHolder}:节点抄送运行在 Flowable 事务内、审批抄送运行在 @Async 线程内,
|
|
|
|
|
+ * 租户上下文都可能取不到(这正是历史数据 tenant_id 全为 0 的原因),故统一以发起人所属租户为准。
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param startUserId 流程发起人编号
|
|
|
|
|
+ * @return 发起方租户编号
|
|
|
|
|
+ */
|
|
|
|
|
+ private Long getStartUserTenantId(Long startUserId) {
|
|
|
|
|
+ if (ObjectUtil.isNotNull(startUserId)) {
|
|
|
|
|
+ AdminUserRespDTO startUser = adminUserApi.getUserTenantIgnore(startUserId);
|
|
|
|
|
+ if (startUser != null && startUser.getTenantId() != null) {
|
|
|
|
|
+ return startUser.getTenantId();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return TenantContextHolder.getTenantId();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @TenantIgnore // 抄送记录属于流程发起方租户,集团用户在自己租户下查不到,必须跨租户按 userId 查询
|
|
|
public PageResult<BpmProcessInstanceCopyRespVO> getProcessInstanceCopyPage(Long userId,
|
|
public PageResult<BpmProcessInstanceCopyRespVO> getProcessInstanceCopyPage(Long userId,
|
|
|
BpmProcessInstanceCopyPageReqVO pageReqVO) {
|
|
BpmProcessInstanceCopyPageReqVO pageReqVO) {
|
|
|
Page<ElderlyRetreatRecordRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
|
Page<ElderlyRetreatRecordRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
|
@@ -299,8 +342,8 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 2. 创建抄送流程
|
|
// 2. 创建抄送流程
|
|
|
- // TODO
|
|
|
|
|
- Long tenantId = TenantContextHolder.getTenantId();
|
|
|
|
|
|
|
+ // 抄送记录必须写入【发起方租户】:本方法为 @Async 异步执行,TenantContextHolder 取不到值
|
|
|
|
|
+ Long tenantId = getStartUserTenantId(Long.valueOf(processInstance.getStartUserId()));
|
|
|
List<BpmProcessInstanceCopyDO> copyList = convertList(userIds, userId -> new BpmProcessInstanceCopyDO()
|
|
List<BpmProcessInstanceCopyDO> copyList = convertList(userIds, userId -> new BpmProcessInstanceCopyDO()
|
|
|
.setUserId(userId).setStartUserId(Long.valueOf(processInstance.getStartUserId()))
|
|
.setUserId(userId).setStartUserId(Long.valueOf(processInstance.getStartUserId()))
|
|
|
.setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName())
|
|
.setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName())
|