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