feat: 复审流程保存自翻译

This commit is contained in:
2024-01-25 17:41:30 +08:00
parent 64e2649fdf
commit e298326f01
4 changed files with 99 additions and 40 deletions
@@ -61,16 +61,17 @@ public class TranslationAspect {
/** /**
* 在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理) * 在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理)
*
* @param joinPoint * @param joinPoint
*/ */
@AfterReturning(returning="rvt",pointcut = "annotationPointcut()") @AfterReturning(returning = "rvt", pointcut = "annotationPointcut()")
public void doAfterReturning(JoinPoint joinPoint, Object rvt) { public void doAfterReturning(JoinPoint joinPoint, Object rvt) {
} }
private void parseDictText(Object result) { private void parseDictText(Object result) {
List<SysDictItemCore> listDict = commonAPI.getDictItemAll(); List<SysDictItemCore> listDict = commonAPI.getDictItemAll();
if(CollectionUtils.isEmpty(listDict)){ if (CollectionUtils.isEmpty(listDict)) {
return; return;
} }
if (result instanceof Result) { if (result instanceof Result) {
@@ -78,25 +79,36 @@ public class TranslationAspect {
List<Object> items = new ArrayList<>(); List<Object> items = new ArrayList<>();
for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) { for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) {
Object item = translateObject(record,listDict); Object item = translateObject(record, listDict);
items.add(item); items.add(item);
} }
((IPage) ((Result) result).getResult()).setRecords(items); ((IPage) ((Result) result).getResult()).setRecords(items);
}else if (((Result) result).getResult() instanceof List) { } else if (((Result) result).getResult() instanceof List) {
List<Object> items = new ArrayList<>(); List<Object> items = new ArrayList<>();
for (Object record : ((List) ((Result) result).getResult())) { for (Object record : ((List) ((Result) result).getResult())) {
Object item = translateObject(record,listDict); Object item = translateObject(record, listDict);
items.add(item); items.add(item);
} }
((Result) result).setResult(items); ((Result) result).setResult(items);
}else{ } else {
Object record = (Object) ((Result) result).getResult(); Object record = (Object) ((Result) result).getResult();
Object item = translateObject(record,listDict); Object item = translateObject(record, listDict);
((Result) result).setResult(item); ((Result) result).setResult(item);
} }
} }
} }
public String manualParseDictText(Object data, Object user) {
List<SysDictItemCore> listDict = commonAPI.getDictItemAll();
if (CollectionUtils.isEmpty(listDict)) {
return "";
}
JSONObject dataJsonObject = (JSONObject) translateObject(data, listDict);
dataJsonObject.put("personnelObj", user);
return dataJsonObject.toJSONString();
}
private Object translateObject(Object record, List<SysDictItemCore> listDict) { private Object translateObject(Object record, List<SysDictItemCore> listDict) {
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
String json; String json;
@@ -172,15 +184,16 @@ public class TranslationAspect {
} }
/** /**
* 翻译字典文本 * 翻译字典文本
* @param code 编码 *
* @param text 值 * @param code 编码
* @param table 表名 * @param text 值
* @param key 键 * @param table 表名
* @param key 键
* @param listDict 字典集合 * @param listDict 字典集合
*/ */
private String translateDictValue(String code, String text, String table, String key, List<SysDictItemCore> listDict) { private String translateDictValue(String code, String text, String table, String key, List<SysDictItemCore> listDict) {
if(oConvertUtils.isEmpty(key)) { if (oConvertUtils.isEmpty(key)) {
return null; return null;
} }
StringBuilder textValue = new StringBuilder(); StringBuilder textValue = new StringBuilder();
@@ -190,11 +203,11 @@ public class TranslationAspect {
if (k.trim().length() == 0) { if (k.trim().length() == 0) {
continue; //跳过循环 continue; //跳过循环
} }
if (!StringUtils.isEmpty(table)){ if (!StringUtils.isEmpty(table)) {
tmpValue = commonAPI.queryTableDictTextByKey(table,text,code,k.trim()); tmpValue = commonAPI.queryTableDictTextByKey(table, text, code, k.trim());
}else { } else {
List<SysDictItemCore> listNew = listDict.stream().filter(o-> Objects.equals(o.getDictCode(),code) && Objects.equals(o.getItemValue(),k.trim())).collect(Collectors.toList()); List<SysDictItemCore> listNew = listDict.stream().filter(o -> Objects.equals(o.getDictCode(), code) && Objects.equals(o.getItemValue(), k.trim())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(listNew)){ if (!CollectionUtils.isEmpty(listNew)) {
tmpValue = listNew.get(0).getItemText(); tmpValue = listNew.get(0).getItemText();
} }
} }
@@ -352,16 +352,10 @@ public class ActFlowCommonService {
} }
public void getExistDraftAndRemove(CommonVO common, ProcessTypeEnum processTypeEnum) { public void getExistDraftAndRemove(CommonVO common, ProcessTypeEnum processTypeEnum) {
String taskId = common.getTaskId();
String userId = UserUtils.getUserId();
String processInstanceId = common.getProcessInstanceId();
LambdaQueryWrapper<ProcessDraft> draftWrapper = new LambdaQueryWrapper<>();
draftWrapper.eq(ProcessDraft::getPrcType, processTypeEnum.getValue());
draftWrapper.eq(ProcessDraft::getUserId, userId);
draftWrapper.eq(StrUtil.isNotBlank(processInstanceId), ProcessDraft::getProcessInstanceId, processInstanceId);
draftWrapper.eq(StrUtil.isNotBlank(taskId), ProcessDraft::getTaskId, taskId);
// 删除草稿表数据 // 删除草稿表数据
processDraftService.remove(draftWrapper); if (StrUtil.isNotBlank(common.getDraftId())) {
processDraftService.removeById(common.getDraftId());
}
} }
public CommonVO getHandleCommon(String taskId) { public CommonVO getHandleCommon(String taskId) {
@@ -388,7 +382,7 @@ public class ActFlowCommonService {
String processInstanceId = commonVO.getProcessInstanceId(); String processInstanceId = commonVO.getProcessInstanceId();
LambdaQueryWrapper<ProcessDraft> draftWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ProcessDraft> draftWrapper = new LambdaQueryWrapper<>();
draftWrapper.eq(ProcessDraft::getUserId, userId); draftWrapper.eq(ProcessDraft::getUserId, userId);
draftWrapper.eq(ProcessDraft::getTaskId, taskId); draftWrapper.eq(StrUtil.isNotBlank(taskId), ProcessDraft::getTaskId, taskId);
draftWrapper.ne(ProcessDraft::getSaveSource, DraftCommon.INITIAL_SOURCE); draftWrapper.ne(ProcessDraft::getSaveSource, DraftCommon.INITIAL_SOURCE);
draftWrapper.eq(StrUtil.isNotBlank(processInstanceId), ProcessDraft::getProcessInstanceId, processInstanceId); draftWrapper.eq(StrUtil.isNotBlank(processInstanceId), ProcessDraft::getProcessInstanceId, processInstanceId);
processDraftService.remove(draftWrapper); processDraftService.remove(draftWrapper);
@@ -450,15 +444,20 @@ public class ActFlowCommonService {
* *
* @param common * @param common
* @param processTypeEnum * @param processTypeEnum
* @param data * @param jsonData
*/ */
public void saveFirstNodeDraft(CommonVO common, ProcessTypeEnum processTypeEnum, Object data) { public void saveFirstNodeDraft(CommonVO common, ProcessTypeEnum processTypeEnum, Object data) {
ProcessInfoVO processInfoVo = this.getProcessInfoVo(common, processTypeEnum, data); ProcessInfoVO processInfoVo = this.getProcessInfoVo(common, processTypeEnum, data);
processHandleService.saveToDraft(processInfoVo); processHandleService.saveToDraft(processInfoVo);
} }
public void saveFirstNodeDraftCustomUserId(CommonVO common, ProcessTypeEnum processTypeEnum, Object data, String userId) { public void saveFirstNodeDraft(CommonVO common, ProcessTypeEnum processTypeEnum, String jsonData) {
ProcessInfoVO processInfoVo = this.getProcessInfoVo(common, processTypeEnum, data); ProcessInfoVO processInfoVo = this.getProcessInfoVo(common, processTypeEnum, jsonData);
processHandleService.saveToDraft(processInfoVo);
}
public void saveFirstNodeDraftCustomUserId(CommonVO common, ProcessTypeEnum processTypeEnum, String jsonData, String userId) {
ProcessInfoVO processInfoVo = this.getProcessInfoVo(common, processTypeEnum, jsonData);
processHandleService.saveToDraftCustomUserId(processInfoVo, userId); processHandleService.saveToDraftCustomUserId(processInfoVo, userId);
} }
@@ -482,6 +481,24 @@ public class ActFlowCommonService {
return processInfoVO; return processInfoVO;
} }
private ProcessInfoVO getProcessInfoVo(CommonVO common, ProcessTypeEnum processTypeEnum, String jsonData) {
ProcessInfoVO<ESArchiveDataVO> processInfoVO = new ProcessInfoVO<>();
processInfoVO.setSaveSource(DraftCommon.INITIAL_SOURCE);
BasicTaskInfoDTO basicTaskInfoDTO = new BasicTaskInfoDTO();
basicTaskInfoDTO.setHandleFile(common.getCommitFile());
basicTaskInfoDTO.setHandleText(common.getCommitText());
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
basicProcessInfoDTO.setProcessName(common.getPrcName());
basicProcessInfoDTO.setProcessDescription(common.getPrcMes());
basicProcessInfoDTO.setProcessType(processTypeEnum.getValue());
basicProcessInfoDTO.setProcessDueDate(common.getDueTime());
basicProcessInfoDTO.setProcessInstanceId(common.getProcessInstanceId());
processInfoVO.setInfoJsonStr(jsonData);
processInfoVO.setBasicTaskInfoDTO(basicTaskInfoDTO);
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
return processInfoVO;
}
public void checkStandardState(String standardId) { public void checkStandardState(String standardId) {
LawsEnterpriseStandard es = esService.getById(standardId); LawsEnterpriseStandard es = esService.getById(standardId);
if (es != null) { if (es != null) {
@@ -493,4 +510,22 @@ public class ActFlowCommonService {
} }
} }
} }
public String getFirstTaskId(String processInstanceId, String userId, String processDefinitionId) {
// 自动完成第一个任务
List<Map<String, Object>> taskList = this.myTaskList(userId);
if (!CollectionUtils.isEmpty(taskList)) {
for (Map<String, Object> map : taskList) {
if (map.get("assignee").toString().equals(userId) &&
map.get("processDefinitionId").toString().equals(processDefinitionId) &&
map.get("processInstanceId").toString().equals(processInstanceId)) { // 添加这一行来进行更精确的匹配
log.info("当前用户ID:{},相关联的流程定义ID:{}", userId, map.get("processDefinitionId").toString());
log.info("匹配到的任务ID:{}", map.get("taskId").toString());
return map.get("taskId").toString();
}
}
}
return null;
}
} }
@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.ResultCommon; import com.jero.common.api.vo.ResultCommon;
import com.jero.common.aspect.TranslationAspect;
import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException; import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.enums.ProcessTypeEnum;
@@ -60,6 +61,9 @@ public class ProcessEsRecheckServiceImpl extends ServiceImpl<ProcessEsRecheckMap
@Resource @Resource
private TaskService taskService; private TaskService taskService;
@Resource
private TranslationAspect translationAspect;
@Override @Override
public void startProcess(ESRecheckDataVO recheckData) { public void startProcess(ESRecheckDataVO recheckData) {
// 执行流程发起前的操作 // 执行流程发起前的操作
@@ -87,23 +91,27 @@ public class ProcessEsRecheckServiceImpl extends ServiceImpl<ProcessEsRecheckMap
String processInstanceId = processInstance.getId(); String processInstanceId = processInstance.getId();
// 手动设置所有流程变量 // 手动设置所有流程变量
actFlowCommonService.setProcessVariables(processInstanceId, actVariables); actFlowCommonService.setProcessVariables(processInstanceId, actVariables);
// 自动完成第一个任务
actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId, common);
// 设置流程实例Id // 设置流程实例Id
esRecheck.setProcessInstanceId(processInstanceId); esRecheck.setProcessInstanceId(processInstanceId);
// 保存到业务流程表 // 保存到业务流程表
saveOrUpdate(esRecheck); saveOrUpdate(esRecheck);
// 保存选人信息 // 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables)); processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables));
// 获取第一个任务的taskId
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
// 手动翻译
String jsonData = translationAspect.manualParseDictText(this.getHandleData(taskId), this.getUserMap(variables));
// 强制撤回
common.setProcessInstanceId(processInstanceId);
actFlowCommonService.saveFirstNodeDraft(common, ProcessTypeEnum.ES_RECHECK, jsonData);
// 自动完成第一个任务
actFlowCommonService.completeTask(taskId, userId);
// 根据流程实例id更新流程总表 // 根据流程实例id更新流程总表
String prcName = common.getPrcName(); String prcName = common.getPrcName();
String prcMes = common.getPrcMes(); String prcMes = common.getPrcMes();
Date dueTime = common.getDueTime(); Date dueTime = common.getDueTime();
Integer prcType = ProcessTypeEnum.ES_RECHECK.getValue(); Integer prcType = ProcessTypeEnum.ES_RECHECK.getValue();
actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, prcType, dueTime); actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, prcType, dueTime);
// 强制撤回
common.setProcessInstanceId(processInstanceId);
actFlowCommonService.saveFirstNodeDraft(common, ProcessTypeEnum.ES_RECHECK, recheckData);
} }
@Override @Override
@@ -137,15 +145,19 @@ public class ProcessEsRecheckServiceImpl extends ServiceImpl<ProcessEsRecheckMap
saveOrUpdate(esRecheck); saveOrUpdate(esRecheck);
// 保存选人信息 // 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables)); processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables));
// 获取第一个任务的taskId
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
// 手动翻译
String jsonData = translationAspect.manualParseDictText(this.getHandleData(taskId), this.getUserMap(variables));
// 强制撤回
common.setProcessInstanceId(processInstanceId);
actFlowCommonService.saveFirstNodeDraft(common, ProcessTypeEnum.ES_RECHECK, jsonData);
// 根据流程实例id更新流程总表 // 根据流程实例id更新流程总表
String prcName = common.getPrcName(); String prcName = common.getPrcName();
String prcMes = common.getPrcMes(); String prcMes = common.getPrcMes();
Date dueTime = common.getDueTime(); Date dueTime = common.getDueTime();
Integer prcType = ProcessTypeEnum.ES_RECHECK.getValue(); Integer prcType = ProcessTypeEnum.ES_RECHECK.getValue();
actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, prcType, dueTime); actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, prcType, dueTime);
// 强制撤回
common.setProcessInstanceId(processInstanceId);
actFlowCommonService.saveFirstNodeDraftCustomUserId(common, ProcessTypeEnum.ES_RECHECK, recheckData, userId);
} }
public Map<String, Object> setVariables(Map<String, Object> flowUser) { public Map<String, Object> setVariables(Map<String, Object> flowUser) {
@@ -418,7 +418,6 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
if (StringUtils.isNotBlank(draftId)) { if (StringUtils.isNotBlank(draftId)) {
processDraftService.removeById(draftId); processDraftService.removeById(draftId);
} }
deleteMyDraftCustomUserId(taskId, processInfoVO.getBusinessId(), basicProcessInfoDTO.getProcessType(), userId);
// 根据是否有taskId区分保存来源(待办、草稿) // 根据是否有taskId区分保存来源(待办、草稿)
ProcessDraft processDraft = new ProcessDraft(); ProcessDraft processDraft = new ProcessDraft();
processDraft.setProjectId(processInfoVO.getBusinessId()); // 业务id processDraft.setProjectId(processInfoVO.getBusinessId()); // 业务id