|
|
@@ -145,15 +145,52 @@ public class CompanyWxServiceImpl extends ServiceImpl<CompanyWxAccountMapper, Co
|
|
|
@Override
|
|
|
public int insertCompanyWxAccount(CompanyWxAccount companyWxAccount)
|
|
|
{
|
|
|
- //校验添加微信前缀唯一性
|
|
|
- CompanyWxAccount wxAccount = companyWxAccountMapper.selectCompanyWxAccountByWxRemark(companyWxAccount.getWxRemark());
|
|
|
- if(null != wxAccount){
|
|
|
- throw new RuntimeException("微信前缀已存在,请更换后重试");
|
|
|
+ //校验添加微信前缀唯一性(有前缀时才校验)
|
|
|
+ if (companyWxAccount.getWxRemark() != null && !companyWxAccount.getWxRemark().isEmpty()) {
|
|
|
+ CompanyWxAccount wxAccount = companyWxAccountMapper.selectCompanyWxAccountByWxRemark(companyWxAccount.getWxRemark());
|
|
|
+ if (null != wxAccount) {
|
|
|
+ throw new RuntimeException("微信前缀已存在,请更换后重试");
|
|
|
+ }
|
|
|
}
|
|
|
companyWxAccount.setCreateTime(DateUtils.getNowDate());
|
|
|
return companyWxAccountMapper.insertCompanyWxAccount(companyWxAccount);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 桌面工具新增:昵称/微信号/手机号允许暂空;空串归一为 null,避免唯一索引冲突
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Long createFromTool(CompanyWxAccount companyWxAccount) {
|
|
|
+ if (companyWxAccount == null) {
|
|
|
+ throw new RuntimeException("参数不能为空");
|
|
|
+ }
|
|
|
+ if (companyWxAccount.getWxNickName() != null && companyWxAccount.getWxNickName().trim().isEmpty()) {
|
|
|
+ companyWxAccount.setWxNickName(null);
|
|
|
+ }
|
|
|
+ if (companyWxAccount.getWxNo() != null && companyWxAccount.getWxNo().trim().isEmpty()) {
|
|
|
+ companyWxAccount.setWxNo(null);
|
|
|
+ } else if (companyWxAccount.getWxNo() != null) {
|
|
|
+ companyWxAccount.setWxNo(companyWxAccount.getWxNo().trim());
|
|
|
+ }
|
|
|
+ if (companyWxAccount.getPhone() != null && companyWxAccount.getPhone().trim().isEmpty()) {
|
|
|
+ companyWxAccount.setPhone(null);
|
|
|
+ } else if (companyWxAccount.getPhone() != null) {
|
|
|
+ companyWxAccount.setPhone(companyWxAccount.getPhone().trim());
|
|
|
+ }
|
|
|
+ if (companyWxAccount.getWxNo() != null && !companyWxAccount.getWxNo().isEmpty()) {
|
|
|
+ CompanyWxAccount exists = companyWxAccountMapper.selectOne(new QueryWrapper<CompanyWxAccount>()
|
|
|
+ .eq("wx_no", companyWxAccount.getWxNo())
|
|
|
+ .last("limit 1"));
|
|
|
+ if (exists != null) {
|
|
|
+ throw new RuntimeException("微信号已存在,请更换后重试");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ companyWxAccount.setPhone(com.fs.his.utils.PhoneUtil.encryptPhoneIfPlain(companyWxAccount.getPhone()));
|
|
|
+ companyWxAccount.setCreateTime(DateUtils.getNowDate());
|
|
|
+ companyWxAccountMapper.insertCompanyWxAccount(companyWxAccount);
|
|
|
+ return companyWxAccount.getId();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 修改企微账号
|
|
|
*
|
|
|
@@ -434,6 +471,11 @@ public class CompanyWxServiceImpl extends ServiceImpl<CompanyWxAccountMapper, Co
|
|
|
|
|
|
private void triggerWorkflowOnAddWxResult(Long wxClientId, boolean success) {
|
|
|
try {
|
|
|
+ // 先更新加微节点日志:无条件边会提前流转到结束节点,此时实例已不是 WAITING,
|
|
|
+ // 但仍需把节点日志从「等待中」改为「执行成功」,否则执行日志展示错误
|
|
|
+ updateWaitingAddWxExecLogs(wxClientId,
|
|
|
+ Arrays.asList(NodeTypeEnum.AI_ADD_WX_TASK.getValue(), NodeTypeEnum.AI_ADD_WX_TASK_NEW.getValue()));
|
|
|
+
|
|
|
// 先查老类型的等待中工作流实例
|
|
|
CompanyAiWorkflowExec waitingExec = companyAiWorkflowExecMapper.selectWaitingAddWxWorkflowByWxClientId(
|
|
|
wxClientId,
|
|
|
@@ -450,22 +492,10 @@ public class CompanyWxServiceImpl extends ServiceImpl<CompanyWxAccountMapper, Co
|
|
|
}
|
|
|
|
|
|
if (waitingExec == null) {
|
|
|
- log.info("未找到等待中的加微工作流实例 - wxClientId: {}, success: {}", wxClientId, success);
|
|
|
+ log.info("未找到等待中的加微工作流实例(节点日志已尝试更新)- wxClientId: {}, success: {}", wxClientId, success);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- //查询工作流加微执行日志是否未更新状态
|
|
|
- CompanyAiWorkflowExecLog queryP = new CompanyAiWorkflowExecLog();
|
|
|
- queryP.setWorkflowInstanceId(waitingExec.getWorkflowInstanceId());
|
|
|
- queryP.setNodeType(isNewNodeType ? NodeTypeEnum.AI_ADD_WX_TASK_NEW.getValue() : NodeTypeEnum.AI_ADD_WX_TASK.getValue());
|
|
|
- queryP.setStatus(ExecutionStatusEnum.WAITING.getValue());
|
|
|
- List<CompanyAiWorkflowExecLog> companyAiWorkflowExecLogs = companyAiWorkflowExecLogMapper.selectCompanyAiWorkflowExecLogList(queryP);
|
|
|
- companyAiWorkflowExecLogs.forEach(log -> {
|
|
|
- log.setStatus(ExecutionStatusEnum.SUCCESS.getValue());
|
|
|
- companyAiWorkflowExecLogMapper.updateById(log);
|
|
|
- }
|
|
|
- );
|
|
|
-
|
|
|
String workflowInstanceId = waitingExec.getWorkflowInstanceId();
|
|
|
String currentNodeKey = waitingExec.getCurrentNodeKey();
|
|
|
|
|
|
@@ -501,6 +531,31 @@ public class CompanyWxServiceImpl extends ServiceImpl<CompanyWxAccountMapper, Co
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 将仍为「等待中」的加微节点执行日志更新为「执行成功」。
|
|
|
+ * 不依赖工作流实例当前是否仍停在加微节点。
|
|
|
+ */
|
|
|
+ private void updateWaitingAddWxExecLogs(Long wxClientId, List<Integer> nodeTypes) {
|
|
|
+ List<CompanyAiWorkflowExecLog> waitingLogs = companyAiWorkflowExecLogMapper.selectWaitingAddWxLogsByWxClientId(
|
|
|
+ wxClientId, ExecutionStatusEnum.WAITING.getValue(), nodeTypes);
|
|
|
+ if (waitingLogs == null || waitingLogs.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Date now = new Date();
|
|
|
+ waitingLogs.forEach(execLog -> {
|
|
|
+ execLog.setStatus(ExecutionStatusEnum.SUCCESS.getValue());
|
|
|
+ if (execLog.getEndTime() == null) {
|
|
|
+ execLog.setEndTime(now);
|
|
|
+ if (execLog.getStartTime() != null) {
|
|
|
+ long duration = now.getTime() - execLog.getStartTime().getTime();
|
|
|
+ execLog.setDuration(duration > 0 ? duration : 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ companyAiWorkflowExecLogMapper.updateById(execLog);
|
|
|
+ });
|
|
|
+ log.info("已更新加微节点等待中日志为执行成功 - wxClientId: {}, count: {}", wxClientId, waitingLogs.size());
|
|
|
+ }
|
|
|
+
|
|
|
public void mockInterface(Long wxClientId){
|
|
|
triggerWorkflowOnAddWxSuccess(wxClientId);
|
|
|
}
|
|
|
@@ -510,25 +565,19 @@ public class CompanyWxServiceImpl extends ServiceImpl<CompanyWxAccountMapper, Co
|
|
|
*/
|
|
|
public void triggerQwAddWxWorkflowOnSuccess(Long wxClientId) {
|
|
|
try {
|
|
|
+ // 先更新节点日志(流程可能已提前流转到后续节点)
|
|
|
+ updateWaitingAddWxExecLogs(wxClientId,
|
|
|
+ Collections.singletonList(NodeTypeEnum.AI_QW_ADD_WX_TASK.getValue()));
|
|
|
+
|
|
|
CompanyAiWorkflowExec waitingExec = companyAiWorkflowExecMapper.selectWaitingAddWxWorkflowByWxClientId(
|
|
|
wxClientId,
|
|
|
ExecutionStatusEnum.WAITING.getValue(),
|
|
|
NodeTypeEnum.AI_QW_ADD_WX_TASK.getValue());
|
|
|
if (waitingExec == null) {
|
|
|
- log.info("未找到等待中的企微加微工作流实例 - wxClientId: {}", wxClientId);
|
|
|
+ log.info("未找到等待中的企微加微工作流实例(节点日志已尝试更新)- wxClientId: {}", wxClientId);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- CompanyAiWorkflowExecLog queryP = new CompanyAiWorkflowExecLog();
|
|
|
- queryP.setWorkflowInstanceId(waitingExec.getWorkflowInstanceId());
|
|
|
- queryP.setNodeType(NodeTypeEnum.AI_QW_ADD_WX_TASK.getValue());
|
|
|
- queryP.setStatus(ExecutionStatusEnum.WAITING.getValue());
|
|
|
- List<CompanyAiWorkflowExecLog> execLogs = companyAiWorkflowExecLogMapper.selectCompanyAiWorkflowExecLogList(queryP);
|
|
|
- execLogs.forEach(execLog -> {
|
|
|
- execLog.setStatus(ExecutionStatusEnum.SUCCESS.getValue());
|
|
|
- companyAiWorkflowExecLogMapper.updateById(execLog);
|
|
|
- });
|
|
|
-
|
|
|
String workflowInstanceId = waitingExec.getWorkflowInstanceId();
|
|
|
String currentNodeKey = waitingExec.getCurrentNodeKey();
|
|
|
|