feat(system): 优化工艺流程与计划任务进度逻辑
- 新增 commons-io 依赖 - 移除部分任务默认进度设置,改为动态计算 - 调整计划任务查询逻辑,仅筛选未结束任务 - 新增根据项目编号查询及更新计划订单的方法 - 优化任务进度计算,支持按天数比例动态设置进度值 - 调整任务状态字段类型为字符串以支持更丰富的状态描述
This commit is contained in:
parent
d1e67b1b4e
commit
55a2143a02
@ -235,6 +235,12 @@
|
|||||||
<artifactId>knife4j-springdoc-ui</artifactId>
|
<artifactId>knife4j-springdoc-ui</artifactId>
|
||||||
<version>3.0.3</version>
|
<version>3.0.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>2.15.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -208,7 +208,7 @@ public class WorkProcedureController extends BaseController {
|
|||||||
task.setDuration(duration);
|
task.setDuration(duration);
|
||||||
|
|
||||||
task.setOpen(true);
|
task.setOpen(true);
|
||||||
task.setProgress(1L);
|
// task.setProgress(1L);
|
||||||
task.setStatus("yellow");
|
task.setStatus("yellow");
|
||||||
task.setParent(null); // 父任务没有parent
|
task.setParent(null); // 父任务没有parent
|
||||||
|
|
||||||
@ -227,7 +227,7 @@ public class WorkProcedureController extends BaseController {
|
|||||||
subTask.setEnd_date(subTaskItem.getString("FOperPlanFinishTime2"));
|
subTask.setEnd_date(subTaskItem.getString("FOperPlanFinishTime2"));
|
||||||
subTask.setDuration(subTaskItem.getLong("1"));
|
subTask.setDuration(subTaskItem.getLong("1"));
|
||||||
subTask.setOpen(true);
|
subTask.setOpen(true);
|
||||||
subTask.setProgress(1L);
|
// subTask.setProgress(1L);
|
||||||
subTask.setStatus("yellow");
|
subTask.setStatus("yellow");
|
||||||
subTask.setParent(task.getId()); // 设置父任务ID
|
subTask.setParent(task.getId()); // 设置父任务ID
|
||||||
|
|
||||||
|
|||||||
@ -52,13 +52,11 @@ public class ProcessOrderProBo extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 计划结束时间
|
* 计划结束时间
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "计划结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
|
|
||||||
private Date planEndTime;
|
private Date planEndTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计划开始时间
|
* 计划开始时间
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "计划开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
|
|
||||||
private Date planStartTime;
|
private Date planStartTime;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,7 @@ public class ProductctionPlanGatteDto {
|
|||||||
private Integer type;
|
private Integer type;
|
||||||
private Boolean open;
|
private Boolean open;
|
||||||
private String toolTipsTxt;
|
private String toolTipsTxt;
|
||||||
private Long progress;
|
private String progress;
|
||||||
private String status;
|
private String status;
|
||||||
private String level;
|
private String level;
|
||||||
private String color;
|
private String color;
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.ruoyi.system.mapper;
|
package com.ruoyi.system.mapper;
|
||||||
|
|
||||||
import com.ruoyi.system.domain.ProcessOrderPro;
|
import com.ruoyi.system.domain.ProcessOrderPro;
|
||||||
|
import com.ruoyi.system.domain.bo.ProcessOrderProBo;
|
||||||
import com.ruoyi.system.domain.vo.ProcessOrderProVo;
|
import com.ruoyi.system.domain.vo.ProcessOrderProVo;
|
||||||
import com.ruoyi.common.core.mapper.BaseMapperPlus;
|
import com.ruoyi.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
@ -11,5 +12,15 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus;
|
|||||||
* @date 2024-10-22
|
* @date 2024-10-22
|
||||||
*/
|
*/
|
||||||
public interface ProcessOrderProMapper extends BaseMapperPlus<ProcessOrderProMapper, ProcessOrderPro, ProcessOrderProVo> {
|
public interface ProcessOrderProMapper extends BaseMapperPlus<ProcessOrderProMapper, ProcessOrderPro, ProcessOrderProVo> {
|
||||||
|
/**
|
||||||
|
* 根据项目编号(routeDescription)查询订单信息
|
||||||
|
* @param routeDescription 项目编号
|
||||||
|
* @return ProcessOrderProBo 返回相关的订单信息
|
||||||
|
*/
|
||||||
|
ProcessOrderPro selectByProjectNumber(String routeDescription);
|
||||||
|
/**
|
||||||
|
* 根据 ProcessOrderProBo 更新记录
|
||||||
|
* @param processOrderPro 更新的订单信息
|
||||||
|
*/
|
||||||
|
void updateByBo(ProcessOrderPro processOrderPro);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -343,8 +343,10 @@ public class EleMaterialsServiceImpl implements IEleMaterialsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
newMaterialsVo.setMaterialCode(newCode);
|
newMaterialsVo.setMaterialCode(newCode);
|
||||||
|
log.info("生成新的物料编码======================>: {}", newCode);
|
||||||
EleMaterials eleMaterials = BeanUtil.copyProperties(newMaterialsVo, EleMaterials.class);
|
EleMaterials eleMaterials = BeanUtil.copyProperties(newMaterialsVo, EleMaterials.class);
|
||||||
eleMaterials.setMaterialValue("0");
|
eleMaterials.setMaterialValue("0");
|
||||||
|
baseMapper.insert(eleMaterials);
|
||||||
// 仅在有编码的情况下添加到插入列表和导出列表
|
// 仅在有编码的情况下添加到插入列表和导出列表
|
||||||
eleMaterialsList.add(eleMaterials); // 添加到插入列表
|
eleMaterialsList.add(eleMaterials); // 添加到插入列表
|
||||||
allMaterialsList.add(newMaterialsVo); // 添加到导出列表
|
allMaterialsList.add(newMaterialsVo); // 添加到导出列表
|
||||||
|
|||||||
@ -73,6 +73,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
|
|||||||
private final MaterialBomMapper materialBomMapper;
|
private final MaterialBomMapper materialBomMapper;
|
||||||
private final ProcessInfoMapper processInfoMapper;
|
private final ProcessInfoMapper processInfoMapper;
|
||||||
private final ProductionRouteTwoMapper productionRouteTwoMapper;
|
private final ProductionRouteTwoMapper productionRouteTwoMapper;
|
||||||
|
private final ProcessOrderProMapper iProcessOrderProService;
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(ProcessRouteController.class);
|
private static final Logger log = LoggerFactory.getLogger(ProcessRouteController.class);
|
||||||
private static final Logger logger = LoggerFactory.getLogger(IProcessRouteService.class);
|
private static final Logger logger = LoggerFactory.getLogger(IProcessRouteService.class);
|
||||||
@ -571,15 +572,15 @@ public class ProcessRouteServiceImpl implements IProcessRouteService {
|
|||||||
.max(Comparator.comparing(ProcessRoute::getXuEndTime))
|
.max(Comparator.comparing(ProcessRoute::getXuEndTime))
|
||||||
.map(ProcessRoute::getXuEndTime)
|
.map(ProcessRoute::getXuEndTime)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
/* //更新至计划模块中
|
//更新至计划模块中
|
||||||
if (earliestStartTime != null && latestEndTime != null) {
|
if (earliestStartTime != null && latestEndTime != null) {
|
||||||
ProcessOrderProBo processOrderPro = iProcessOrderProService.selectByProjectNumber(processRoutes.get(0).getRouteDescription());
|
ProcessOrderPro processOrderPro = iProcessOrderProService.selectByProjectNumber(processRoutes.get(0).getRouteDescription());
|
||||||
processOrderPro.setPlanStartTime(earliestStartTime);
|
processOrderPro.setPlanStartTime(earliestStartTime);
|
||||||
processOrderPro.setPlanEndTime(latestEndTime);
|
processOrderPro.setPlanEndTime(latestEndTime);
|
||||||
processOrderPro.setUpdateTime(new Date());
|
processOrderPro.setUpdateTime(new Date());
|
||||||
log.info("更新计划生成令号为:{},计划开始时间:{},计划结束时间:{}",processRoutes.get(0).getRouteDescription(), earliestStartTime, latestEndTime);
|
log.info("更新计划生成令号为:{},计划开始时间:{},计划结束时间:{}",processRoutes.get(0).getRouteDescription(), earliestStartTime, latestEndTime);
|
||||||
iProcessOrderProService.updateByBo(processOrderPro);
|
iProcessOrderProService.updateByBo(processOrderPro);
|
||||||
}*/
|
}
|
||||||
|
|
||||||
if (allEmpty && !processRoutes.isEmpty()) {
|
if (allEmpty && !processRoutes.isEmpty()) {
|
||||||
List<String> duplicateWeldingMaterials = processRoutes.stream()
|
List<String> duplicateWeldingMaterials = processRoutes.stream()
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.time.temporal.Temporal;
|
import java.time.temporal.Temporal;
|
||||||
@ -73,7 +74,7 @@ public class WorkProcedureServiceImpl implements IWorkProcedureService {
|
|||||||
parentTask.setText(processRoute.getRouteDescription());
|
parentTask.setText(processRoute.getRouteDescription());
|
||||||
parentTask.setOpen(true);
|
parentTask.setOpen(true);
|
||||||
parentTask.setToolTipsTxt(processRoute.getRouteDescription());
|
parentTask.setToolTipsTxt(processRoute.getRouteDescription());
|
||||||
parentTask.setProgress(1L);
|
// parentTask.setProgress(1L);
|
||||||
parentTask.setStatus("yellow");
|
parentTask.setStatus("yellow");
|
||||||
parentTask.setParent(null);
|
parentTask.setParent(null);
|
||||||
|
|
||||||
@ -168,7 +169,12 @@ public class WorkProcedureServiceImpl implements IWorkProcedureService {
|
|||||||
|
|
||||||
// ================= 1. 查询近2个月的父任务(ProcessOrderPro) =================
|
// ================= 1. 查询近2个月的父任务(ProcessOrderPro) =================
|
||||||
LambdaQueryWrapper<ProcessOrderPro> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ProcessOrderPro> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.between(ProcessOrderPro::getCreateTime, LocalDate.now().minusMonths(2), LocalDate.now());
|
//只查询未完成的项目也就是 结束时间大于今天
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
LocalDateTime twoMonthsAgo = now.minusMonths(2);
|
||||||
|
|
||||||
|
wrapper.ge(ProcessOrderPro::getPlanEndTime, now) // 未结束(结束时间 > 当前时间)
|
||||||
|
.ge(ProcessOrderPro::getPlanStartTime, twoMonthsAgo); // 近
|
||||||
|
|
||||||
List<ProcessOrderPro> processOrderPros = processOrderProMapper.selectList(wrapper);
|
List<ProcessOrderPro> processOrderPros = processOrderProMapper.selectList(wrapper);
|
||||||
|
|
||||||
@ -202,7 +208,7 @@ public class WorkProcedureServiceImpl implements IWorkProcedureService {
|
|||||||
parentTask.setText(pro.getProductionOrderNo());
|
parentTask.setText(pro.getProductionOrderNo());
|
||||||
parentTask.setOpen(false);
|
parentTask.setOpen(false);
|
||||||
parentTask.setToolTipsTxt(pro.getDrawingNo());
|
parentTask.setToolTipsTxt(pro.getDrawingNo());
|
||||||
parentTask.setProgress(1L);
|
/* parentTask.setProgress(1L);*/
|
||||||
parentTask.setStatus("yellow");
|
parentTask.setStatus("yellow");
|
||||||
parentTask.setParent(null);
|
parentTask.setParent(null);
|
||||||
parentTask.setStart_date(sdf.format(proBo.getPlanStartTime()));
|
parentTask.setStart_date(sdf.format(proBo.getPlanStartTime()));
|
||||||
@ -248,20 +254,31 @@ public class WorkProcedureServiceImpl implements IWorkProcedureService {
|
|||||||
start.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
|
start.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
|
||||||
end.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
|
end.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
|
||||||
);
|
);
|
||||||
|
// 计算当前时间与开始时间的差(单位:天)
|
||||||
|
long elapsedDays = ChronoUnit.DAYS.between(
|
||||||
|
start.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
|
||||||
|
LocalDate.now() // 当前日期
|
||||||
|
);
|
||||||
|
// 计算进度百分比,确保不超过100%
|
||||||
|
double progress = 0;
|
||||||
|
if (duration > 0) {
|
||||||
|
progress = (double) elapsedDays / duration;
|
||||||
|
progress = Math.min(progress, 1.0); // 防止进度超过100%
|
||||||
|
}
|
||||||
|
|
||||||
ProductctionPlanGatteDto subTask = new ProductctionPlanGatteDto();
|
ProductctionPlanGatteDto subTask = new ProductctionPlanGatteDto();
|
||||||
subTask.setId(route.getId());
|
subTask.setId(route.getId());
|
||||||
subTask.setText(
|
subTask.setText(
|
||||||
cleanProcessNo(String.valueOf(route.getProcessNo())) + " " +
|
route.getProcessNo() + " " + route.getProcessName()+ " " +
|
||||||
route.getMaterialCode() + " " +
|
route.getMaterialCode()
|
||||||
route.getMaterialName() + " " +
|
|
||||||
route.getProcessName()
|
|
||||||
);
|
);
|
||||||
subTask.setStart_date(sdf.format(start));
|
subTask.setStart_date(sdf.format(start));
|
||||||
subTask.setEnd_date(sdf.format(end));
|
subTask.setEnd_date(sdf.format(end));
|
||||||
subTask.setDuration(duration);
|
subTask.setDuration(duration);
|
||||||
subTask.setToolTipsTxt(route.getProcessName());
|
subTask.setToolTipsTxt(route.getProcessName());
|
||||||
subTask.setProgress(1L);
|
/* subTask.setProgress(1L);*/
|
||||||
|
//计算进度计算 整体数加上 已经过了的天数百分比保留以为小数
|
||||||
|
subTask.setProgress(String.valueOf(progress));
|
||||||
subTask.setStatus("yellow");
|
subTask.setStatus("yellow");
|
||||||
|
|
||||||
// 工序号处理:去除所有0
|
// 工序号处理:去除所有0
|
||||||
@ -406,7 +423,7 @@ public class WorkProcedureServiceImpl implements IWorkProcedureService {
|
|||||||
|
|
||||||
parentTask.setOpen(true); // 默认展开
|
parentTask.setOpen(true); // 默认展开
|
||||||
parentTask.setToolTipsTxt(plan.getFigureName()); // 设置工具提示文本
|
parentTask.setToolTipsTxt(plan.getFigureName()); // 设置工具提示文本
|
||||||
parentTask.setProgress(1L); // 设置进度
|
//parentTask.setProgress(1L); // 设置进度
|
||||||
parentTask.setStatus("yellow"); // 设置状态
|
parentTask.setStatus("yellow"); // 设置状态
|
||||||
parentTask.setParent(null); // 父任务没有parent
|
parentTask.setParent(null); // 父任务没有parent
|
||||||
tasks.add(parentTask); // 添加到任务列表
|
tasks.add(parentTask); // 添加到任务列表
|
||||||
@ -467,7 +484,7 @@ public class WorkProcedureServiceImpl implements IWorkProcedureService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
subTask.setToolTipsTxt(procedure.getToolTipsTxt()); // 设置工具提示文本
|
subTask.setToolTipsTxt(procedure.getToolTipsTxt()); // 设置工具提示文本
|
||||||
subTask.setProgress(1L); // 设置进度
|
// subTask.setProgress(1L); // 设置进度
|
||||||
subTask.setStatus(procedure.getStatus()); // 设置状态
|
subTask.setStatus(procedure.getStatus()); // 设置状态
|
||||||
subTask.setParent(procedure.getPlanId()); // 设置父任务ID
|
subTask.setParent(procedure.getPlanId()); // 设置父任务ID
|
||||||
tasks.add(subTask); // 添加到任务列表
|
tasks.add(subTask); // 添加到任务列表
|
||||||
|
|||||||
@ -17,6 +17,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="planEndTime" column="plan_end_time"/>
|
<result property="planEndTime" column="plan_end_time"/>
|
||||||
<result property="planStartTime" column="plan_start_time"/>
|
<result property="planStartTime" column="plan_start_time"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
<!-- 根据项目编号查询 -->
|
||||||
|
<select id="selectByProjectNumber" resultType="com.ruoyi.system.domain.ProcessOrderPro">
|
||||||
|
SELECT id, production_order_no, production_name, drawing_no, drawing_name,
|
||||||
|
plan_end_time, plan_start_time, create_by, create_time, update_by, update_time
|
||||||
|
FROM process_order_pro
|
||||||
|
WHERE production_order_no = #{routeDescription}
|
||||||
|
</select>
|
||||||
|
<!-- 更新记录 -->
|
||||||
|
<update id="updateByBo">
|
||||||
|
UPDATE process_order_pro
|
||||||
|
SET production_order_no = #{productionOrderNo},
|
||||||
|
production_name = #{productionName},
|
||||||
|
drawing_no = #{drawingNo},
|
||||||
|
drawing_name = #{drawingName},
|
||||||
|
plan_end_time = #{planEndTime},
|
||||||
|
plan_start_time = #{planStartTime},
|
||||||
|
create_by = #{createBy},
|
||||||
|
update_by = #{updateBy}
|
||||||
|
WHERE id = #{id}
|
||||||
|
</update>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user