From e85cd3fe826efe0baaa3fc09ea371467127c370c Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 15 七月 2025 18:11:31 +0800
Subject: [PATCH] Merge branch 'dev'
---
business/src/main/java/com/ycl/controller/CodingRulerController.java | 2
flowable/src/main/java/com/ycl/domain/vo/ProcessOvertimeTimesVO.java | 18 +
start/src/main/resources/application-dev.yml | 3
business/src/main/java/com/ycl/domain/vo/ProjectOvertimeTimesVO.java | 46 +++
business/src/main/java/com/ycl/service/impl/CodingRulerServiceImpl.java | 27 +
business/src/main/resources/mapper/CodingRulerMapper.xml | 20 +
business/src/main/java/com/ycl/domain/form/ProjectOvertimeTimesForm.java | 49 +++
common/src/main/java/com/ycl/common/enums/business/CodingRulerSymbolTypeEnum.java | 36 ++
start/src/main/resources/application-prod.yml | 10
business/src/main/resources/mapper/ProjectOvertimeTimesMapper.xml | 43 +++
flowable/src/main/java/com/ycl/mapper/ProcessCodingMapper.java | 7
business/src/main/java/com/ycl/domain/query/ProjectOvertimeTimesQuery.java | 22 +
business/src/main/java/com/ycl/service/impl/ProjectCodingStatusServiceImpl.java | 121 ++++++++
business/src/main/java/com/ycl/mapper/CodingRulerMapper.java | 3
flowable/src/main/resources/mapper/ProcessCodingMapper.xml | 15 +
business/src/main/java/com/ycl/service/CodingRulerService.java | 8
common/src/main/java/com/ycl/common/enums/business/CodingRulerCodeTypeEnum.java | 2
business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java | 23 +
business/src/main/java/com/ycl/task/CodingTask.java | 216 +++++++++++++++
business/src/main/java/com/ycl/mapper/ProjectOvertimeTimesMapper.java | 36 ++
business/src/main/java/com/ycl/service/ProjectOvertimeTimesService.java | 66 ++++
business/src/main/java/com/ycl/domain/entity/ProjectOvertimeTimes.java | 39 ++
22 files changed, 800 insertions(+), 12 deletions(-)
diff --git a/business/src/main/java/com/ycl/controller/CodingRulerController.java b/business/src/main/java/com/ycl/controller/CodingRulerController.java
index afb6d57..e35cc97 100644
--- a/business/src/main/java/com/ycl/controller/CodingRulerController.java
+++ b/business/src/main/java/com/ycl/controller/CodingRulerController.java
@@ -25,7 +25,7 @@
*/
@Validated
@RequiredArgsConstructor
-@Api(value = "椤圭洰缂栫爜绫诲瀷绠$悊", tags = "绠$悊")
+@Api(value = "璧嬬爜瑙勫垯绫诲瀷绠$悊", tags = "绠$悊")
@RestController
@RequestMapping("/coding-ruler")
public class CodingRulerController {
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectOvertimeTimes.java b/business/src/main/java/com/ycl/domain/entity/ProjectOvertimeTimes.java
new file mode 100644
index 0000000..45865bd
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectOvertimeTimes.java
@@ -0,0 +1,39 @@
+package com.ycl.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+
+import com.ycl.system.domain.base.AbsEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *
+ *
+ * @author zxl
+ * @since 2025-04-01
+ */
+@Data
+@TableName("t_project_overtime_times")
+public class ProjectOvertimeTimes extends AbsEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableField("task_overtime_num")
+ /** 瓒呮椂浠诲姟鏁�*/
+ private Long taskOvertimeNum;
+
+ @TableField("process_ins_id")
+ /** 娴佺▼瀹炰緥id*/
+ private String processInsId;
+
+ @TableField("project_id")
+ /** 椤圭洰id*/
+ private String projectId;
+
+ /** 椤圭洰绫诲瀷*/
+ @TableField("project_type")
+ private String projectType;
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectOvertimeTimesForm.java b/business/src/main/java/com/ycl/domain/form/ProjectOvertimeTimesForm.java
new file mode 100644
index 0000000..79565c3
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectOvertimeTimesForm.java
@@ -0,0 +1,49 @@
+package com.ycl.domain.form;
+
+import com.ycl.common.group.Update;
+import com.ycl.common.group.Add;
+import com.ycl.domain.entity.ProjectOvertimeTimes;
+import com.ycl.system.domain.base.AbsForm;
+import org.springframework.beans.BeanUtils;
+
+import javax.validation.constraints.NotNull;
+import org.springframework.lang.NonNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 琛ㄥ崟
+ *
+ * @author zxl
+ * @since 2025-04-01
+ */
+@Data
+@ApiModel(value = "ProjectCodingStatus琛ㄥ崟", description = "琛ㄥ崟")
+public class ProjectOvertimeTimesForm extends AbsForm {
+
+ @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+ @ApiModelProperty("瓒呮椂浠诲姟鏁�")
+ private Integer taskOvertimeNum;
+
+ @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+ @ApiModelProperty("娴佺▼瀹炰緥id")
+ private String processInsId;
+
+ @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+ @ApiModelProperty("椤圭洰id")
+ private String projectId;
+
+ @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+ @ApiModelProperty("椤圭洰绫诲瀷")
+ private String projectType;
+
+ public static ProjectOvertimeTimes getEntityByForm(@NonNull ProjectOvertimeTimesForm form, ProjectOvertimeTimes entity) {
+ if(entity == null) {
+ entity = new ProjectOvertimeTimes();
+ }
+ BeanUtils.copyProperties(form, entity);
+ return entity;
+ }
+
+}
diff --git a/business/src/main/java/com/ycl/domain/query/ProjectOvertimeTimesQuery.java b/business/src/main/java/com/ycl/domain/query/ProjectOvertimeTimesQuery.java
new file mode 100644
index 0000000..99eaa00
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/query/ProjectOvertimeTimesQuery.java
@@ -0,0 +1,22 @@
+package com.ycl.domain.query;
+
+import com.ycl.system.domain.base.AbsQuery;
+import java.util.List;
+import org.springframework.lang.NonNull;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鏌ヨ
+ *
+ * @author zxl
+ * @since 2025-04-01
+ */
+@Data
+@ApiModel(value = "ProjectOvertimeTimesQuery鏌ヨ鍙傛暟", description = "鏌ヨ鍙傛暟")
+public class ProjectOvertimeTimesQuery extends AbsQuery {
+}
+
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectOvertimeTimesVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectOvertimeTimesVO.java
new file mode 100644
index 0000000..7c26ca1
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectOvertimeTimesVO.java
@@ -0,0 +1,46 @@
+package com.ycl.domain.vo;
+
+import com.ycl.domain.entity.ProjectOvertimeTimes;
+import com.ycl.system.domain.base.AbsVo;
+import org.springframework.lang.NonNull;
+import org.springframework.beans.BeanUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 灞曠ず
+ *
+ * @author zxl
+ * @since 2025-04-01
+ */
+@Data
+@ApiModel(value = "鍝嶅簲鏁版嵁", description = "鍝嶅簲鏁版嵁")
+public class ProjectOvertimeTimesVO extends AbsVo {
+
+ /** 浠诲姟瓒呮椂鏁�*/
+ @ApiModelProperty("浠诲姟瓒呮椂鏁�")
+ private Integer taskOvertimeNum;
+
+ /** 娴佺▼瀹炰緥id*/
+ @ApiModelProperty("娴佺▼瀹炰緥id")
+ private String processInsId;
+
+ /** 椤圭洰id*/
+ @ApiModelProperty("椤圭洰id")
+ private String projectId;
+
+ /** 椤圭洰绫诲瀷*/
+ @ApiModelProperty("椤圭洰绫诲瀷")
+ private String projectType;
+
+
+ public static ProjectOvertimeTimesVO getVoByEntity(@NonNull ProjectOvertimeTimes entity, ProjectOvertimeTimesVO vo) {
+ if(vo == null) {
+ vo = new ProjectOvertimeTimesVO();
+ }
+ BeanUtils.copyProperties(entity, vo);
+ return vo;
+ }
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/CodingRulerMapper.java b/business/src/main/java/com/ycl/mapper/CodingRulerMapper.java
index b7cb477..49dd616 100644
--- a/business/src/main/java/com/ycl/mapper/CodingRulerMapper.java
+++ b/business/src/main/java/com/ycl/mapper/CodingRulerMapper.java
@@ -4,7 +4,6 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycl.domain.vo.CodingRulerVO;
-import com.ycl.domain.form.CodingRulerForm;
import com.ycl.domain.query.CodingRulerQuery;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
@@ -31,4 +30,6 @@
*/
IPage getPage(IPage page, @Param("query") CodingRulerQuery query);
+ List<CodingRulerVO> getStartRuler();
+
}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectOvertimeTimesMapper.java b/business/src/main/java/com/ycl/mapper/ProjectOvertimeTimesMapper.java
new file mode 100644
index 0000000..d0fbccd
--- /dev/null
+++ b/business/src/main/java/com/ycl/mapper/ProjectOvertimeTimesMapper.java
@@ -0,0 +1,36 @@
+package com.ycl.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.domain.entity.ProjectOvertimeTimes;
+import com.ycl.domain.query.ProjectOvertimeTimesQuery;
+import com.ycl.domain.vo.ProjectOvertimeTimesVO;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * Mapper 鎺ュ彛
+ *
+ * @author zxl
+ * @since 2025-04-01
+ */
+@Mapper
+public interface ProjectOvertimeTimesMapper extends BaseMapper<ProjectOvertimeTimes> {
+
+ /**
+ * id鏌ユ壘
+ * @param id
+ * @return
+ */
+ ProjectOvertimeTimesVO getById(Integer id);
+
+ /**
+ * 鍒嗛〉
+ */
+ IPage getPage(IPage page, @Param("query") ProjectOvertimeTimesQuery query);
+
+ void delAll();
+
+
+}
diff --git a/business/src/main/java/com/ycl/service/CodingRulerService.java b/business/src/main/java/com/ycl/service/CodingRulerService.java
index e0f5793..284b526 100644
--- a/business/src/main/java/com/ycl/service/CodingRulerService.java
+++ b/business/src/main/java/com/ycl/service/CodingRulerService.java
@@ -8,7 +8,7 @@
import java.util.List;
/**
- * 鏈嶅姟绫�
+ * 璧嬬爜瑙勫垯鏈嶅姟绫�
*
* @author zxl
* @since 2025-03-18
@@ -68,4 +68,10 @@
* @return
*/
Result changeCodingRulerStatus(Integer id);
+
+ /**
+ * 鑾峰緱鍚姩鐨勮祴鐮佽鍒�
+ * @return 瀛樻斁鐨勫瓧娈� yellowRuler鍚敤鐨勯粍鐮佽鍒欙紝redRuler鍚敤鐨勭孩鐮佽鍒�
+ */
+ Result getStartRuler();
}
diff --git a/business/src/main/java/com/ycl/service/ProjectOvertimeTimesService.java b/business/src/main/java/com/ycl/service/ProjectOvertimeTimesService.java
new file mode 100644
index 0000000..2793190
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/ProjectOvertimeTimesService.java
@@ -0,0 +1,66 @@
+package com.ycl.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.common.base.Result;
+import com.ycl.domain.entity.ProjectOvertimeTimes;
+import com.ycl.domain.form.ProjectOvertimeTimesForm;
+import com.ycl.domain.query.ProjectOvertimeTimesQuery;
+
+import java.util.List;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author zxl
+ * @since 2025-04-01
+ */
+public interface ProjectOvertimeTimesService extends IService<ProjectOvertimeTimes> {
+
+ /**
+ * 娣诲姞
+ * @param form
+ * @return
+ */
+ Result add(ProjectOvertimeTimesForm form);
+
+ /**
+ * 淇敼
+ * @param form
+ * @return
+ */
+ Result update(ProjectOvertimeTimesForm form);
+
+ /**
+ * 鎵归噺鍒犻櫎
+ * @param ids
+ * @return
+ */
+ Result remove(List<String> ids);
+
+ /**
+ * id鍒犻櫎
+ * @param id
+ * @return
+ */
+ Result removeById(String id);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ * @param query
+ * @return
+ */
+ Result page(ProjectOvertimeTimesQuery query);
+
+ /**
+ * 鏍规嵁id鏌ユ壘
+ * @param id
+ * @return
+ */
+ Result detail(Integer id);
+
+ /**
+ * 鍒楄〃
+ * @return
+ */
+ Result all();
+}
diff --git a/business/src/main/java/com/ycl/service/impl/CodingRulerServiceImpl.java b/business/src/main/java/com/ycl/service/impl/CodingRulerServiceImpl.java
index 60b119e..e4e63dc 100644
--- a/business/src/main/java/com/ycl/service/impl/CodingRulerServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/CodingRulerServiceImpl.java
@@ -17,6 +17,7 @@
import com.ycl.framework.utils.PageUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.stream.Collectors;
@@ -150,4 +151,30 @@
baseMapper.updateById(codingRuler);
return Result.ok(msg);
}
+ /**
+ * 鑾峰緱鍚姩鐨勮祴鐮佽鍒�
+ * @return 瀛樻斁鐨勫瓧娈� yellowRuler鍚敤鐨勯粍鐮佽鍒欙紝redRuler鍚敤鐨勭孩鐮佽鍒�
+ */
+ @Override
+ public Result getStartRuler() {
+ Result result = new Result();
+ //鑾峰緱鍚敤鐨勮祴鐮佽鍒�
+ List<CodingRulerVO> codingRulerVOS = codingRulerMapper.getStartRuler();
+ if (CollectionUtils.isEmpty(codingRulerVOS)){
+ log.error("鏈惎鐢ㄨ祴鐮佽鍒�");
+ return result;
+ }
+ CodingRulerVO yellowRuler = null;
+ CodingRulerVO redRuler = null;
+ for (CodingRulerVO codingRulerVO : codingRulerVOS){
+ if (CodingRulerCodeTypeEnum.YELLOW.getValue().equals(codingRulerVO.getProjectCodeType())){
+ yellowRuler = codingRulerVO;
+ }else if (CodingRulerCodeTypeEnum.RED.getValue().equals(codingRulerVO.getProjectCodeType())){
+ redRuler = codingRulerVO;
+ }
+ }
+ result.put("yellowRuler",yellowRuler);
+ result.put("redRuler",redRuler);
+ return result;
+ }
}
diff --git a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index 24698d7..12c67d7 100644
--- a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -20,6 +20,7 @@
import com.ycl.common.enums.business.TaskStatusEnum;
import com.ycl.common.exception.CustomException;
import com.ycl.common.utils.SecurityUtils;
+import com.ycl.constant.ProjectConstant;
import com.ycl.domain.dto.FlowCommentDto;
import com.ycl.domain.dto.FlowNextDto;
import com.ycl.domain.dto.FlowTaskDto;
@@ -73,6 +74,7 @@
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -109,6 +111,9 @@
private final ProcessLogService processLogService;
private final ApplicationEventPublisher publisher;
private final ProjectProcessMapper projectProcessMapper;
+
+ @Value("${targetIp}")
+ private String targetIp;
/**
* 瀹屾垚瀹℃牳浠诲姟
@@ -1841,11 +1846,29 @@
for (JSONObject oldField : oldFields) {
JSONObject options = oldField.getJSONObject("options");
options.put("disabled", true);
+ // 澶勭悊鏂囦欢涓婁紶ip闂
+ if ("file-upload".equals(oldField.get("type"))) {
+ options.put("uploadURL", String.format("http://%s:10076/common/upload", this.targetIp));
+ }
}
}
formJson.put(ProcessConstants.WIDGET_LIST, oldFields);
newP.put(ProcessConstants.TASK_FORM_KEY, formJson);
newP.remove(formDetailVO.getBeforeNodeDefId() + "&" + ProcessConstants.TASK_FORM_KEY);
+ // 澶勭悊宸茬粡涓婁紶鐨勬枃浠剁殑ip鍦板潃
+ for (String s : newP.keySet()) {
+ if (ProcessConstants.TASK_FORM_KEY.equals(s)) {
+ continue;
+ }
+ if (s.startsWith("fileupload")) {
+ List files = (List) newP.get(s);
+ for (Object file : files) {
+ LinkedHashMap<String, String> fileMap = (LinkedHashMap<String, String>) file;
+ String url = fileMap.get("url");
+ fileMap.put("url", url.replace("42.193.1.25", this.targetIp));
+ }
+ }
+ }
formDetailVO.setFormJsonObj(newP);
}
// TODO 鏆傛椂鍙鐞嗙敤鎴蜂换鍔′笂鐨勮〃鍗�
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectCodingStatusServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectCodingStatusServiceImpl.java
new file mode 100644
index 0000000..f69e035
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/ProjectCodingStatusServiceImpl.java
@@ -0,0 +1,121 @@
+package com.ycl.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import com.ycl.domain.entity.ProjectOvertimeTimes;
+import com.ycl.domain.query.ProjectOvertimeTimesQuery;
+import com.ycl.common.base.Result;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.domain.form.ProjectOvertimeTimesForm;
+import com.ycl.domain.vo.ProjectOvertimeTimesVO;
+import com.ycl.mapper.ProjectOvertimeTimesMapper;
+import com.ycl.service.ProjectOvertimeTimesService;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import com.ycl.framework.utils.PageUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author zxl
+ * @since 2025-04-01
+ */
+@Service
+@RequiredArgsConstructor
+public class ProjectCodingStatusServiceImpl extends ServiceImpl<ProjectOvertimeTimesMapper, ProjectOvertimeTimes> implements ProjectOvertimeTimesService {
+
+ private final ProjectOvertimeTimesMapper projectCodingStatusMapper;
+
+ /**
+ * 娣诲姞
+ * @param form
+ * @return
+ */
+ @Override
+ public Result add(ProjectOvertimeTimesForm form) {
+ ProjectOvertimeTimes entity = ProjectOvertimeTimesForm.getEntityByForm(form, null);
+ baseMapper.insert(entity);
+ return Result.ok("娣诲姞鎴愬姛");
+ }
+
+ /**
+ * 淇敼
+ * @param form
+ * @return
+ */
+ @Override
+ public Result update(ProjectOvertimeTimesForm form) {
+ ProjectOvertimeTimes entity = baseMapper.selectById(form.getId());
+
+ // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+ Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+ BeanUtils.copyProperties(form, entity);
+ baseMapper.updateById(entity);
+ return Result.ok("淇敼鎴愬姛");
+ }
+
+ /**
+ * 鎵归噺鍒犻櫎
+ * @param ids
+ * @return
+ */
+ @Override
+ public Result remove(List<String> ids) {
+ baseMapper.deleteBatchIds(ids);
+ return Result.ok("鍒犻櫎鎴愬姛");
+ }
+
+ /**
+ * id鍒犻櫎
+ * @param id
+ * @return
+ */
+ @Override
+ public Result removeById(String id) {
+ baseMapper.deleteById(id);
+ return Result.ok("鍒犻櫎鎴愬姛");
+ }
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ * @param query
+ * @return
+ */
+ @Override
+ public Result page(ProjectOvertimeTimesQuery query) {
+ IPage<ProjectOvertimeTimesVO> page = PageUtil.getPage(query, ProjectOvertimeTimesVO.class);
+ baseMapper.getPage(page, query);
+ return Result.ok().data(page.getRecords()).total(page.getTotal());
+ }
+
+ /**
+ * 鏍规嵁id鏌ユ壘
+ * @param id
+ * @return
+ */
+ @Override
+ public Result detail(Integer id) {
+ ProjectOvertimeTimesVO vo = baseMapper.getById(id);
+
+ Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+ return Result.ok().data(vo);
+ }
+
+ /**
+ * 鍒楄〃
+ * @return
+ */
+ @Override
+ public Result all() {
+ List<ProjectOvertimeTimes> entities = baseMapper.selectList(null);
+ List<ProjectOvertimeTimesVO> vos = entities.stream()
+ .map(entity -> ProjectOvertimeTimesVO.getVoByEntity(entity, null))
+ .collect(Collectors.toList());
+ return Result.ok().data(vos);
+ }
+}
diff --git a/business/src/main/java/com/ycl/task/CodingTask.java b/business/src/main/java/com/ycl/task/CodingTask.java
new file mode 100644
index 0000000..2dd19dd
--- /dev/null
+++ b/business/src/main/java/com/ycl/task/CodingTask.java
@@ -0,0 +1,216 @@
+package com.ycl.task;
+
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.ycl.common.base.Result;
+import com.ycl.common.enums.business.CodingRulerIntervalTypeEnum;
+import com.ycl.common.enums.business.ProjectProcessTypeEnum;
+import com.ycl.domain.entity.*;
+import com.ycl.domain.vo.CodingRulerVO;
+import com.ycl.domain.vo.ProcessCodingVO;
+import com.ycl.domain.vo.ProcessOvertimeTimesVO;
+import com.ycl.factory.FlowServiceFactory;
+import com.ycl.mapper.*;
+import com.ycl.service.CodingRulerService;
+import com.ycl.service.ProjectOvertimeTimesService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Slf4j
+@RequiredArgsConstructor
+@Component("codingTask")
+public class CodingTask extends FlowServiceFactory {
+
+ private final ProjectOvertimeTimesMapper projectOvertimeTimesMapper;
+
+ private final ProjectOvertimeTimesService projectOvertimeTimesService;
+
+ private final ProjectProcessMapper projectProcessMapper;
+
+ private final ProjectInfoMapper projectInfoMapper;
+
+ private final CodingRulerService codingRulerService;
+
+ private final ProcessCodingMapper processCodingMapper;
+
+ //璁℃暟椤圭洰瓒呮椂浠诲姟鏁板苟鏇村叿璧嬬爜瑙勫垯杩涜璧嬬爜
+ public void codingTask(){
+ log.info("寮�濮嬭绠楅」鐩苟涓旇祴鐮�");
+ //鑾峰緱鍚敤鐨勮祴鐮佽鍒�
+ Result result = codingRulerService.getStartRuler();
+ CodingRulerVO yellowRuler = (CodingRulerVO) result.get("yellowRuler");
+ CodingRulerVO redRuler = (CodingRulerVO) result.get("redRuler");
+
+ //娌″惎鐢ㄧ洿鎺ョ粨鏉�
+ if (Objects.isNull(yellowRuler) && Objects.isNull(redRuler)) {
+ log.error("鏈惎鐢ㄨ祴鐮佽鍒�");
+ return;
+ }
+
+ //鑾峰緱鎵�鏈� 瓒呮椂浠诲姟鏁颁笌娴佺▼瀹炰緥id
+ List<ProcessOvertimeTimesVO> processOvertimeTimesVOS = processCodingMapper.countProjectOvertimeTimes();
+ if (!CollectionUtils.isEmpty(processOvertimeTimesVOS)){
+ //灏嗘祦绋嬪疄渚媔d杞崲涓簂ist
+ List<String> processIds = processOvertimeTimesVOS.stream().map(ProcessOvertimeTimesVO::getProcessInsId).toList();
+ //鑾峰緱鎵�鏈� 鏇村叿娴佺▼瀹氫箟id锛屾祦绋嬬浉鍏抽」鐩甶d锛� key涓烘祦绋媔d
+ Map<String, ProjectProcess> projectMap = new LambdaQueryChainWrapper<>(projectProcessMapper)
+ .in(ProjectProcess::getProcessInsId, processIds)
+ .eq(ProjectProcess::getProjectType, ProjectProcessTypeEnum.PROJECT)
+ .list()
+ .stream()
+ .collect(Collectors.toMap(ProjectProcess::getProcessInsId, Function.identity()));
+
+ //淇敼涓洪粍鐮佺殑椤圭洰 id
+ List<String> yellowProjectCodingIds = new ArrayList<>();
+ //淇敼涓虹孩鐮佺殑椤圭洰 id
+ List<String> redProjectCodingIds = new ArrayList<>();
+
+
+ //鏂板鐨勮褰曢泦鍚�
+ List<ProjectOvertimeTimes> addList = new ArrayList<>();
+
+ for (ProcessOvertimeTimesVO processOvertimeTimesVO : processOvertimeTimesVOS) {
+ //鍒ゆ柇 椤圭洰绫诲瀷涓� ProjectProcessTypeEnum.PROJECT 骞朵笖瓒呮椂浠诲姟鏁板ぇ浜�0
+ if (processOvertimeTimesVO.getTaskOvertimeNum() != 0 && projectMap.containsKey(processOvertimeTimesVO.getProcessInsId())) {
+ ProjectOvertimeTimes projectOvertimeTimes = new ProjectOvertimeTimes();
+ projectOvertimeTimes.setProjectType(ProjectProcessTypeEnum.PROJECT.getValue());
+ projectOvertimeTimes.setProjectId(projectMap.get(processOvertimeTimesVO.getProcessInsId()).getProjectId());
+ projectOvertimeTimes.setProcessInsId(processOvertimeTimesVO.getProcessInsId());
+ projectOvertimeTimes.setTaskOvertimeNum(processOvertimeTimesVO.getTaskOvertimeNum());
+ //娣诲姞鍒版柊澧為泦鍚堝唴
+ addList.add(projectOvertimeTimes);
+ //妫�楠岃祴鐮佽鍒�
+ checkCodingType(projectOvertimeTimes.getTaskOvertimeNum(),
+ projectOvertimeTimes.getProjectId(),
+ yellowProjectCodingIds,redProjectCodingIds,
+ yellowRuler,redRuler);
+ }
+ }
+
+ if(!CollectionUtils.isEmpty(addList)){
+ projectOvertimeTimesMapper.delAll();
+ projectOvertimeTimesService.saveBatch(addList);
+ }
+ //淇敼椤圭洰璧嬬爜
+ updateProjectCoding(redProjectCodingIds,"red");
+ log.info("鎵撳嵃璧嬪�间负绾㈢爜鐨勯」鐩甶d");
+ for (String s : redProjectCodingIds){
+ System.out.println(s);
+ }
+ log.info("鎵撳嵃璧嬪�间负绾㈢爜鐨勯」鐩甶d瀹屾瘯");
+ updateProjectCoding(yellowProjectCodingIds,"yellow");
+ log.info("鎵撳嵃璧嬪�间负榛勭爜鐨勯」鐩甶d");
+ for (String s : yellowProjectCodingIds){
+ System.out.println(s);
+ }
+ log.info("鎵撳嵃璧嬪�间负榛勭爜鐨勯」鐩甶d瀹屾瘯");
+ }
+
+ log.info("缁撴潫璁$畻椤圭洰骞朵笖璧嬬爜");
+ }
+
+ /**
+ * 璧嬬爜
+ *
+ * @param projectIds 娴佺▼瀹炰緥ID鍒楄〃
+ * @param coding 璧嬬爜鍊�
+ */
+ private void updateProjectCoding(List<String> projectIds, String coding) {
+ if (!CollectionUtils.isEmpty(projectIds)) {
+ //灏唅d 绫诲瀷杞崲涓篖ong
+ List<Long> longList = projectIds.stream()
+ .map(Long::parseLong)
+ .collect(Collectors.toList());
+ new LambdaUpdateChainWrapper<>(projectInfoMapper)
+ .in(ProjectInfo::getId, longList)
+ .set(ProjectInfo::getCoding, coding)
+ .update();
+ }
+ }
+
+
+ /**
+ *
+ * @param overTimeNum 瓒呮椂浠诲姟鏁�
+ * @param projectId 椤圭洰id
+ * @param yellowProjectCodingIds 淇敼椤圭洰璧嬬爜涓洪粍鐮佺殑id闆嗗悎
+ * @param redProjectCodingIds 淇敼椤圭洰璧嬬爜涓虹孩鐮佺殑id闆嗗悎
+ * @param yellowRuler 榛勭爜瑙勫垯
+ * @param redRuler 绾㈢爜瑙勫垯
+ */
+ private void checkCodingType(Long overTimeNum,String projectId,
+ List<String> yellowProjectCodingIds, List<String> redProjectCodingIds,
+ CodingRulerVO yellowRuler,CodingRulerVO redRuler){
+ //鍏堝垽鏂孩鐮侊紝瑙勫垯濡傛灉婊¤冻锛屽垯涓嶆墽琛岄粍鐮佽鍒�
+ if (judgeState(overTimeNum, projectId, redProjectCodingIds, redRuler)) return;
+
+ //鍒ゆ柇鏄惁婊¤冻榛勭爜瑙勫垯
+ judgeState(overTimeNum, projectId, yellowProjectCodingIds, yellowRuler);
+
+
+ }
+
+ private boolean judgeState(Long overTimeNum, String projectId, List<String> projectCodingIds, CodingRulerVO ruler) {
+ if (ruler != null){
+ if (CodingRulerIntervalTypeEnum.Interval.getValue().equals(ruler.getIntervalType())){
+ //鍖洪棿鎯呭喌
+ boolean result = false;
+ //鍒ゆ柇婊¤冻宸﹀尯闂�
+ if (ruler.getLeftSymbol().equals("0")){
+ result = (overTimeNum > ruler.getLeftValue());
+ }else if (ruler.getLeftSymbol().equals("1")){
+ result = (overTimeNum >= ruler.getLeftValue());
+ }else if (ruler.getLeftSymbol().equals("2")){
+ result = (Objects.equals(overTimeNum, ruler.getLeftValue()));
+ }
+ //婊¤冻鍒欏垽鏂弧瓒冲彸鍖洪棿
+ if (result){
+ if (ruler.getRightSymbol().equals("2")){
+ result = (Objects.equals(overTimeNum, ruler.getRightValue()));
+ }else if (ruler.getRightSymbol().equals("3")){
+ result = (overTimeNum < ruler.getRightValue());
+ }else if (ruler.getRightSymbol().equals("4")){
+ result = (overTimeNum <= ruler.getRightValue());
+ }
+ }
+ if (result){
+ //绗﹀悎璇ヨ祴鐮佹潯浠�
+ projectCodingIds.add(projectId);
+ return true;
+ }
+ }
+ else{
+ //鍗曞尯闂存儏鍐�
+ boolean result = false;
+ if (ruler.getLeftSymbol().equals("0")){
+ result = (overTimeNum > ruler.getLeftValue());
+ }else if (ruler.getLeftSymbol().equals("1")){
+ result = (overTimeNum >= ruler.getLeftValue());
+ }else if (ruler.getLeftSymbol().equals("2")){
+ result = (Objects.equals(overTimeNum, ruler.getLeftValue()));
+ }else if (ruler.getLeftSymbol().equals("3")){
+ result = (overTimeNum < ruler.getLeftValue());
+ }else if (ruler.getLeftSymbol().equals("4")){
+ result = (overTimeNum <= ruler.getLeftValue());
+ }
+ if (result){
+ //绗﹀悎璇ヨ祴鐮佹潯浠�
+ projectCodingIds.add(projectId);
+ return true;
+ }
+
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/business/src/main/resources/mapper/CodingRulerMapper.xml b/business/src/main/resources/mapper/CodingRulerMapper.xml
index 24e7732..b017a64 100644
--- a/business/src/main/resources/mapper/CodingRulerMapper.xml
+++ b/business/src/main/resources/mapper/CodingRulerMapper.xml
@@ -13,11 +13,21 @@
<result column="status" property="status"/>
</resultMap>
-
-
-
-
-
+ <select id="getStartRuler" resultMap="BaseResultMap">
+ select
+ TCR.project_code_type,
+ TCR.interval_type,
+ TCR.left_symbol,
+ TCR.left_value,
+ TCR.right_symbol,
+ TCR.right_value,
+ TCR.id,
+ TCR.status
+ FROM
+ t_coding_ruler TCR
+ WHERE
+ TCR.status = 1 AND TCR.deleted = 0;
+ </select>
<select id="getById" resultMap="BaseResultMap">
SELECT
diff --git a/business/src/main/resources/mapper/ProjectOvertimeTimesMapper.xml b/business/src/main/resources/mapper/ProjectOvertimeTimesMapper.xml
new file mode 100644
index 0000000..2ab0573
--- /dev/null
+++ b/business/src/main/resources/mapper/ProjectOvertimeTimesMapper.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.mapper.ProjectOvertimeTimesMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ycl.domain.vo.ProjectOvertimeTimesVO">
+ <result column="task_overtime_num" property="taskOvertimeNum" />
+ <result column="process_ins_id" property="processInsId" />
+ <result column="project_id" property="projectId" />
+ <result column="project_type" property="projectType" />
+ </resultMap>
+
+ <delete id="delAll">
+ DELETE FROM t_project_overtime_times
+ </delete>
+
+
+ <select id="getById" resultMap="BaseResultMap">
+ SELECT
+ TPOT.task_overtime_num,
+ TPOT.process_ins_id,
+ TPOT.project_id,
+ TPOT.id
+ FROM
+ t_project_overtime_times TPOT
+ WHERE
+ TPOT.id = #{id} AND TPOT.deleted = 0
+ </select>
+
+
+ <select id="getPage" resultMap="BaseResultMap">
+ SELECT
+ TPOT.task_overtime_num,
+ TPOT.process_ins_id,
+ TPOT.project_id,
+ TPOT.id
+ FROM
+ t_project_overtime_times TPOT
+ WHERE
+ TPOT.deleted = 0
+ </select>
+
+</mapper>
diff --git a/common/src/main/java/com/ycl/common/enums/business/CodingRulerCodeTypeEnum.java b/common/src/main/java/com/ycl/common/enums/business/CodingRulerCodeTypeEnum.java
index a7f53d9..344ba24 100644
--- a/common/src/main/java/com/ycl/common/enums/business/CodingRulerCodeTypeEnum.java
+++ b/common/src/main/java/com/ycl/common/enums/business/CodingRulerCodeTypeEnum.java
@@ -11,7 +11,7 @@
@Getter
public enum CodingRulerCodeTypeEnum {
RED("red", "绾㈢爜"),
- GREEN("green","缁跨爜");
+ YELLOW("yellow","榛勭爜");
@EnumValue
@JsonValue
diff --git a/common/src/main/java/com/ycl/common/enums/business/CodingRulerSymbolTypeEnum.java b/common/src/main/java/com/ycl/common/enums/business/CodingRulerSymbolTypeEnum.java
new file mode 100644
index 0000000..aace9fe
--- /dev/null
+++ b/common/src/main/java/com/ycl/common/enums/business/CodingRulerSymbolTypeEnum.java
@@ -0,0 +1,36 @@
+package com.ycl.common.enums.business;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Getter
+public enum CodingRulerSymbolTypeEnum {
+ GT("0","澶т簬"),
+ GE("1","澶т簬绛変簬"),
+ EQ("2","绛変簬"),
+ LT("3","灏忎簬"),
+ LE("4","灏忎簬绛変簬");
+
+ @EnumValue
+ @JsonValue
+ private final String value;
+
+ private final String desc;
+
+ CodingRulerSymbolTypeEnum(String value, String desc) {
+ this.value = value;
+ this.desc = desc;
+ }
+
+
+ // 灏嗘灇涓捐浆鎹负 Map
+ public static Map<String, String> getMap() {
+ return Arrays.stream(CodingRulerSymbolTypeEnum.values())
+ .collect(Collectors.toMap(CodingRulerSymbolTypeEnum::getValue, CodingRulerSymbolTypeEnum::getDesc));
+ }
+}
diff --git a/flowable/src/main/java/com/ycl/domain/vo/ProcessOvertimeTimesVO.java b/flowable/src/main/java/com/ycl/domain/vo/ProcessOvertimeTimesVO.java
new file mode 100644
index 0000000..8d433e4
--- /dev/null
+++ b/flowable/src/main/java/com/ycl/domain/vo/ProcessOvertimeTimesVO.java
@@ -0,0 +1,18 @@
+package com.ycl.domain.vo;
+
+import com.ycl.system.domain.base.AbsVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "鍝嶅簲鏁版嵁", description = "鍝嶅簲鏁版嵁")
+public class ProcessOvertimeTimesVO extends AbsVo {
+
+ /** 娴佺▼瀹炰緥id */
+ @ApiModelProperty("娴佺▼瀹炰緥id")
+ private String processInsId;
+ /** 瓒呮椂浠诲姟鏁� */
+ @ApiModelProperty("瓒呮椂浠诲姟鏁�")
+ private Long taskOvertimeNum;
+}
diff --git a/flowable/src/main/java/com/ycl/mapper/ProcessCodingMapper.java b/flowable/src/main/java/com/ycl/mapper/ProcessCodingMapper.java
index f5ccb6d..9bbc0bc 100644
--- a/flowable/src/main/java/com/ycl/mapper/ProcessCodingMapper.java
+++ b/flowable/src/main/java/com/ycl/mapper/ProcessCodingMapper.java
@@ -5,6 +5,7 @@
import com.ycl.domain.entity.ProcessCoding;
import com.ycl.domain.query.ProcessCodingQuery;
import com.ycl.domain.vo.ProcessCodingVO;
+import com.ycl.domain.vo.ProcessOvertimeTimesVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -38,4 +39,10 @@
void updateBatch(@Param("list") List<ProcessCoding> list);
List<ProcessCoding> findByTaskId(@Param("taskId") String taskId);
+
+ /**
+ * 鏌ヨ鍑烘瘡涓祦绋嬪疄渚媔d涓秴鏃剁殑浠诲姟鏁帮紝娴佺▼瀹炰緥id
+ * @return
+ */
+ List<ProcessOvertimeTimesVO> countProjectOvertimeTimes();
}
diff --git a/flowable/src/main/resources/mapper/ProcessCodingMapper.xml b/flowable/src/main/resources/mapper/ProcessCodingMapper.xml
index ce66ff6..eebbdf5 100644
--- a/flowable/src/main/resources/mapper/ProcessCodingMapper.xml
+++ b/flowable/src/main/resources/mapper/ProcessCodingMapper.xml
@@ -14,6 +14,21 @@
<result column="status" property="status" />
<result column="overtime_status" property="overtimeStatus" />
</resultMap>
+ <resultMap id="processOvertimeTimesVO" type="com.ycl.domain.vo.ProcessOvertimeTimesVO">
+ <id column="id" property="id"/>
+ <result column="task_overtime_num" property="taskOvertimeNum"/>
+ <result column="process_ins_id" property="processInsId"/>
+ </resultMap>
+
+ <select id="countProjectOvertimeTimes" resultMap="processOvertimeTimesVO">
+ select TPC.id,
+ TPC.process_ins_id,
+ COUNT(TPC.overtime_status) as task_overtime_num
+ FROM t_process_coding TPC
+ where
+ TPC.overtime_status = 'overtime'
+ GROUP BY TPC.process_ins_id
+ </select>
<select id="getById" resultMap="BaseResultMap">
diff --git a/start/src/main/resources/application-dev.yml b/start/src/main/resources/application-dev.yml
index 619b51a..e3f1c76 100644
--- a/start/src/main/resources/application-dev.yml
+++ b/start/src/main/resources/application-dev.yml
@@ -114,3 +114,6 @@
# app: # app鐨勫姛鑳芥槸涓篺lowable鍦╯pring涓珮鏁堣繍琛岃�屾彁渚涗簡寰堝bean锛屼笌flowable鏈韩鐨勫唴瀹规棤鍏�
# enabled: true
# check-process-definitions: true
+
+# 鐢ㄤ簬鏇挎崲鍔ㄦ�佽〃鍗曠殑鏂囦欢涓婁紶ip锛堟洿鎹㈡湇鍔″櫒ip娌¤皟鏁达級
+targetIp: 119.6.246.90
diff --git a/start/src/main/resources/application-prod.yml b/start/src/main/resources/application-prod.yml
index d86f683..0637d75 100644
--- a/start/src/main/resources/application-prod.yml
+++ b/start/src/main/resources/application-prod.yml
@@ -18,13 +18,14 @@
# redis 閰嶇疆
redis:
# 鍦板潃
- host: 42.193.1.25
+# host: 42.193.1.25
+ host: 127.0.0.1
# 绔彛锛岄粯璁や负6379
port: 6379
# 鏁版嵁搴撶储寮�
database: 2
# 瀵嗙爜
- password: ycl2018
+# password: ycl2018
# 杩炴帴瓒呮椂鏃堕棿
timeout: 10s
lettuce:
@@ -43,7 +44,7 @@
druid:
# 涓诲簱鏁版嵁婧�
master:
- url: jdbc:mysql://221.237.224.33:8066/project_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
+ url: jdbc:mysql://119.6.246.90:8066/project_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
username: root
password: Mysql@my
# 浠庡簱鏁版嵁婧�
@@ -119,3 +120,6 @@
# app: # app鐨勫姛鑳芥槸涓篺lowable鍦╯pring涓珮鏁堣繍琛岃�屾彁渚涗簡寰堝bean锛屼笌flowable鏈韩鐨勫唴瀹规棤鍏�
# enabled: true
# check-process-definitions: true
+
+# 鐢ㄤ簬鏇挎崲鍔ㄦ�佽〃鍗曠殑鏂囦欢涓婁紶ip锛堟洿鎹㈡湇鍔″櫒ip娌¤皟鏁达級
+targetIp: 119.6.246.90
--
Gitblit v1.8.0