From 37c73466c9c3a0b4e547d185ba9fc0e66f84d09e Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Sun, 27 Apr 2025 18:53:01 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=AF=84=E5=88=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1408806234324992]工单自动评分优化 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1408806234324992 --- .../mapper/score/ProcessTaskScoreMapper.java | 5 +- .../mapper/score/ProcessTaskScoreMapper.xml | 4 + .../plugin/ProcessTaskAutoScoreJob.java | 144 +++++++++++------- .../changelog/2025-04-27/neatlogic_tenant.sql | 2 + .../process/changelog/2025-04-27/version.json | 11 ++ 5 files changed, 107 insertions(+), 59 deletions(-) create mode 100644 src/main/resources/neatlogic/resources/process/changelog/2025-04-27/neatlogic_tenant.sql create mode 100644 src/main/resources/neatlogic/resources/process/changelog/2025-04-27/version.json diff --git a/src/main/java/neatlogic/module/process/dao/mapper/score/ProcessTaskScoreMapper.java b/src/main/java/neatlogic/module/process/dao/mapper/score/ProcessTaskScoreMapper.java index ed24fe76c..1ae5f84e7 100644 --- a/src/main/java/neatlogic/module/process/dao/mapper/score/ProcessTaskScoreMapper.java +++ b/src/main/java/neatlogic/module/process/dao/mapper/score/ProcessTaskScoreMapper.java @@ -20,6 +20,7 @@ package neatlogic.module.process.dao.mapper.score; import neatlogic.framework.process.crossover.IProcessTaskScoreCrossoverMapper; import neatlogic.framework.process.dto.score.ProcessTaskAutoScoreVo; import neatlogic.framework.process.dto.score.ProcessTaskScoreVo; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -40,8 +41,10 @@ public interface ProcessTaskScoreMapper extends IProcessTaskScoreCrossoverMapper void insertProcessTaskScoreContent(ProcessTaskScoreVo vo); int insertProcessTaskAutoScore(ProcessTaskAutoScoreVo processTaskAutoScoreVo); - + int updateProcessTaskAutoScoreByProcessTaskId(ProcessTaskAutoScoreVo processTaskAutoScoreVo); + + int updateProcessTaskAutoScoreErrorByProcessTaskId(@Param("processTaskId") Long processTaskId, @Param("error") String error); int deleteProcessTaskByProcessTaskId(Long processTaskId); diff --git a/src/main/java/neatlogic/module/process/dao/mapper/score/ProcessTaskScoreMapper.xml b/src/main/java/neatlogic/module/process/dao/mapper/score/ProcessTaskScoreMapper.xml index 3659ef560..7a966e325 100644 --- a/src/main/java/neatlogic/module/process/dao/mapper/score/ProcessTaskScoreMapper.xml +++ b/src/main/java/neatlogic/module/process/dao/mapper/score/ProcessTaskScoreMapper.xml @@ -92,6 +92,10 @@ UPDATE `processtask_auto_score` SET `trigger_time` = #{triggerTime} WHERE `processtask_id` = #{processTaskId} + + + UPDATE `processtask_auto_score` SET `error` = #{error} WHERE `processtask_id` = #{processTaskId} + DELETE ps,psc,pst diff --git a/src/main/java/neatlogic/module/process/schedule/plugin/ProcessTaskAutoScoreJob.java b/src/main/java/neatlogic/module/process/schedule/plugin/ProcessTaskAutoScoreJob.java index ca5c0e523..7689de3d0 100644 --- a/src/main/java/neatlogic/module/process/schedule/plugin/ProcessTaskAutoScoreJob.java +++ b/src/main/java/neatlogic/module/process/schedule/plugin/ProcessTaskAutoScoreJob.java @@ -21,9 +21,6 @@ import neatlogic.framework.asynchronization.threadlocal.TenantContext; import neatlogic.framework.asynchronization.threadlocal.UserContext; import neatlogic.framework.common.constvalue.systemuser.SystemUser; import neatlogic.framework.process.constvalue.ProcessTaskStatus; -import neatlogic.module.process.dao.mapper.processtask.ProcessTaskMapper; -import neatlogic.module.process.dao.mapper.score.ProcessTaskScoreMapper; -import neatlogic.module.process.dao.mapper.score.ScoreTemplateMapper; import neatlogic.framework.process.dto.ProcessTaskVo; import neatlogic.framework.process.dto.score.ProcessTaskAutoScoreVo; import neatlogic.framework.process.dto.score.ProcessTaskScoreVo; @@ -35,6 +32,9 @@ import neatlogic.framework.scheduler.dto.JobObject; import neatlogic.framework.util.I18n; import neatlogic.framework.util.WorkTimeUtil; import neatlogic.framework.worktime.dao.mapper.WorktimeMapper; +import neatlogic.module.process.dao.mapper.processtask.ProcessTaskMapper; +import neatlogic.module.process.dao.mapper.score.ProcessTaskScoreMapper; +import neatlogic.module.process.dao.mapper.score.ScoreTemplateMapper; import org.apache.commons.collections4.CollectionUtils; import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; @@ -82,38 +82,57 @@ public class ProcessTaskAutoScoreJob extends JobBase { TenantContext.get().switchTenant(tenantUuid); Long processTaskId = Long.valueOf(jobObject.getJobName()); List processtaskScoreVos = processTaskScoreMapper.getProcessTaskScoreByProcesstaskId(processTaskId); - if(CollectionUtils.isEmpty(processtaskScoreVos)){ - /** 如果没有评分记录,那么读取评分配置 */ - ProcessTaskVo task = processTaskMapper.getProcessTaskById(processTaskId); - if(task != null && task.getStatus().equals(ProcessTaskStatus.SUCCEED.getValue())) { - String config = processTaskScoreMapper.getProcessTaskAutoScoreConfigByProcessTaskId(processTaskId); - Integer autoTime = (Integer)JSONPath.read(config, "config.autoTime"); - if(autoTime != null) { - String autoTimeType = (String)JSONPath.read(config, "config.autoTimeType"); - /** - * 如果没有设置评分时限类型是自然日还是工作日,默认按自然日顺延 - * 如果设置为工作日,那么获取当前时间以后的工作日历,按工作日历顺延 - */ - Date autoScoreDate = null; - if("workDay".equals(autoTimeType) && worktimeMapper.checkWorktimeIsExists(task.getWorktimeUuid()) > 0) { - long expireTime = WorkTimeUtil.calculateExpireTime(task.getEndTime().getTime(), TimeUnit.DAYS.toMillis(autoTime), task.getWorktimeUuid()); - autoScoreDate = new Date(expireTime); - }else { - autoScoreDate = new Date(task.getEndTime().getTime() + TimeUnit.DAYS.toMillis(autoTime)); - } - ProcessTaskAutoScoreVo processTaskAutoScoreVo = new ProcessTaskAutoScoreVo(); - processTaskAutoScoreVo.setProcessTaskId(processTaskId); - processTaskAutoScoreVo.setTriggerTime(autoScoreDate); - processTaskScoreMapper.updateProcessTaskAutoScoreByProcessTaskId(processTaskAutoScoreVo); - JobObject.Builder newJobObjectBuilder = new JobObject.Builder(processTaskId.toString(), this.getGroupName(), this.getClassName(), TenantContext.get().getTenantUuid()) - .withBeginTime(autoScoreDate) - .withIntervalInSeconds(60 * 60) - .withRepeatCount(0); - JobObject newJobObject = newJobObjectBuilder.build(); - schedulerManager.loadJob(newJobObject); - } - } + if(CollectionUtils.isNotEmpty(processtaskScoreVos)){ + processTaskScoreMapper.deleteProcessTaskAutoScoreByProcessTaskId(processTaskId); + return; + } + + /** 如果没有评分记录,那么读取评分配置 */ + ProcessTaskVo task = processTaskMapper.getProcessTaskBaseInfoById(processTaskId); + if(task == null || !task.getStatus().equals(ProcessTaskStatus.SUCCEED.getValue())) { + processTaskScoreMapper.deleteProcessTaskAutoScoreByProcessTaskId(processTaskId); + return; + } + + String config = processTaskScoreMapper.getProcessTaskAutoScoreConfigByProcessTaskId(processTaskId); + Integer autoTime = (Integer)JSONPath.read(config, "config.autoTime"); + if(autoTime == null) { + processTaskScoreMapper.deleteProcessTaskAutoScoreByProcessTaskId(processTaskId); + return; } + Long scoreTemplateId = (Long)JSONPath.read(config, "scoreTemplateId"); + ScoreTemplateVo template = scoreTemplateMapper.getScoreTemplateById(scoreTemplateId); + if(template == null) { + processTaskScoreMapper.updateProcessTaskAutoScoreErrorByProcessTaskId(processTaskId, "评分模板:" + scoreTemplateId + "不存在"); + return; + } + List dimensionList = template.getDimensionList(); + if(CollectionUtils.isEmpty(dimensionList)){ + processTaskScoreMapper.updateProcessTaskAutoScoreErrorByProcessTaskId(processTaskId, "评分模板:" + template.getName() + "没有评分选项"); + return; + } + String autoTimeType = (String)JSONPath.read(config, "config.autoTimeType"); + /** + * 如果没有设置评分时限类型是自然日还是工作日,默认按自然日顺延 + * 如果设置为工作日,那么获取当前时间以后的工作日历,按工作日历顺延 + */ + Date autoScoreDate = null; + if("workDay".equals(autoTimeType) && worktimeMapper.checkWorktimeIsExists(task.getWorktimeUuid()) > 0) { + long expireTime = WorkTimeUtil.calculateExpireTime(task.getEndTime().getTime(), TimeUnit.DAYS.toMillis(autoTime), task.getWorktimeUuid()); + autoScoreDate = new Date(expireTime); + }else { + autoScoreDate = new Date(task.getEndTime().getTime() + TimeUnit.DAYS.toMillis(autoTime)); + } + ProcessTaskAutoScoreVo processTaskAutoScoreVo = new ProcessTaskAutoScoreVo(); + processTaskAutoScoreVo.setProcessTaskId(processTaskId); + processTaskAutoScoreVo.setTriggerTime(autoScoreDate); + processTaskScoreMapper.updateProcessTaskAutoScoreByProcessTaskId(processTaskAutoScoreVo); + JobObject.Builder newJobObjectBuilder = new JobObject.Builder(processTaskId.toString(), this.getGroupName(), this.getClassName(), TenantContext.get().getTenantUuid()) + .withBeginTime(autoScoreDate) + .withIntervalInSeconds(60 * 60) + .withRepeatCount(0); + JobObject newJobObject = newJobObjectBuilder.build(); + schedulerManager.loadJob(newJobObject); } @Override @@ -130,30 +149,39 @@ public class ProcessTaskAutoScoreJob extends JobBase { public void executeInternal(JobExecutionContext context, JobObject jobObject) throws JobExecutionException { Long processTaskId = Long.valueOf(jobObject.getJobName()); List processTaskScoreVos = processTaskScoreMapper.getProcessTaskScoreByProcesstaskId(processTaskId); - if(CollectionUtils.isEmpty(processTaskScoreVos)) { - ProcessTaskVo task = processTaskMapper.getProcessTaskById(processTaskId); - if(task != null) { - String config = processTaskScoreMapper.getProcessTaskAutoScoreConfigByProcessTaskId(processTaskId); - Long scoreTemplateId = (Long)JSONPath.read(config, "scoreTemplateId"); - ScoreTemplateVo template = scoreTemplateMapper.getScoreTemplateById(scoreTemplateId); - if(template != null) { - List dimensionList = template.getDimensionList(); - if(CollectionUtils.isNotEmpty(dimensionList)){ - for(ScoreTemplateDimensionVo vo : dimensionList){ - vo.setScore(5); - } - JSONObject paramObj = new JSONObject(); - paramObj.put("scoreTemplateId", scoreTemplateId); - paramObj.put("scoreDimensionList", dimensionList); - paramObj.put("content", new I18n("系统自动评价").toString()); - task.setParamObj(paramObj); - /** 执行转交前,设置当前用户为system,用于权限校验 **/ - UserContext.init(SystemUser.SYSTEM); - ProcessStepHandlerFactory.getHandler().scoreProcessTask(task); - } - } - } - } + if(CollectionUtils.isNotEmpty(processTaskScoreVos)) { + processTaskScoreMapper.deleteProcessTaskAutoScoreByProcessTaskId(processTaskId); + return; + } + + ProcessTaskVo task = processTaskMapper.getProcessTaskBaseInfoById(processTaskId); + if(task == null || !task.getStatus().equals(ProcessTaskStatus.SUCCEED.getValue())) { + processTaskScoreMapper.deleteProcessTaskAutoScoreByProcessTaskId(processTaskId); + return; + } + String config = processTaskScoreMapper.getProcessTaskAutoScoreConfigByProcessTaskId(processTaskId); + Long scoreTemplateId = (Long)JSONPath.read(config, "scoreTemplateId"); + ScoreTemplateVo template = scoreTemplateMapper.getScoreTemplateById(scoreTemplateId); + if(template == null) { + processTaskScoreMapper.updateProcessTaskAutoScoreErrorByProcessTaskId(processTaskId, "评分模板:" + scoreTemplateId + "不存在"); + return; + } + List dimensionList = template.getDimensionList(); + if(CollectionUtils.isEmpty(dimensionList)){ + processTaskScoreMapper.updateProcessTaskAutoScoreErrorByProcessTaskId(processTaskId, "评分模板:" + template.getName() + "没有评分选项"); + return; + } + for(ScoreTemplateDimensionVo vo : dimensionList){ + vo.setScore(5); + } + JSONObject paramObj = new JSONObject(); + paramObj.put("scoreTemplateId", scoreTemplateId); + paramObj.put("scoreDimensionList", dimensionList); + paramObj.put("content", new I18n("系统自动评价").toString()); + task.setParamObj(paramObj); + /** 执行转交前,设置当前用户为system,用于权限校验 **/ + UserContext.init(SystemUser.SYSTEM); + ProcessStepHandlerFactory.getHandler().scoreProcessTask(task); } @Override diff --git a/src/main/resources/neatlogic/resources/process/changelog/2025-04-27/neatlogic_tenant.sql b/src/main/resources/neatlogic/resources/process/changelog/2025-04-27/neatlogic_tenant.sql new file mode 100644 index 000000000..fa4dbe073 --- /dev/null +++ b/src/main/resources/neatlogic/resources/process/changelog/2025-04-27/neatlogic_tenant.sql @@ -0,0 +1,2 @@ +ALTER TABLE `processtask_auto_score` + ADD COLUMN `error` TEXT NULL COMMENT '错误日志' AFTER `config`; \ No newline at end of file diff --git a/src/main/resources/neatlogic/resources/process/changelog/2025-04-27/version.json b/src/main/resources/neatlogic/resources/process/changelog/2025-04-27/version.json new file mode 100644 index 000000000..410a76dda --- /dev/null +++ b/src/main/resources/neatlogic/resources/process/changelog/2025-04-27/version.json @@ -0,0 +1,11 @@ +{ + "content":[ + { + "type":"增加功能", + "detail":[ + {"msg":"1.工单自动评分优化"} + ] + } + ] +} + -- Gitee