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