From e068f4e6a61122c781f81d9e2f57d777590bcbf0 Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Mon, 15 Dec 2025 11:09:29 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WorkOrderController.java | 11 ++++++++++ .../scheduling/dto/WorkOrderDto.java | 8 +++++++ .../scheduling/mapper/WorkOrderMapper.java | 2 ++ .../scheduling/mapper/WorkOrderMapper.xml | 21 +++++++++++++++++++ .../scheduling/service/IWorkOrderService.java | 2 ++ .../service/impl/WorkOrderServiceImpl.java | 18 +++++++++++++++- 6 files changed, 61 insertions(+), 1 deletion(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java index 74ab3d7..ab86042 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java @@ -180,4 +180,15 @@ public class WorkOrderController extends BladeController { return R.data(workOrderService.schedulingBoard(workOrderDto)); } + + /** + * 车间订单表 排产 + */ + @PostMapping("/schedulingCount") + @ApiOperationSupport(order = 6) + @Operation(summary = "排产统计", description = "传入WorkOrderDto") + public R> schedulingCount(@RequestBody WorkOrderDto workOrderDto) { + return R.data(workOrderService.schedulingCount(workOrderDto)); + } + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java index 6b38cc0..49502ff 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java @@ -2,6 +2,8 @@ package org.springblade.scheduling.scheduling.dto; import lombok.Data; +import java.math.BigDecimal; + /** * TODO:功能描述 * @@ -32,4 +34,10 @@ public class WorkOrderDto { private String orderStatus; private String planStatus; private String makeQty; + + private String workCenterName; + private Integer totalCount; + private Integer schedulingCount; + private String schedulingRate; + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java index af6ac8c..72ae9ed 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java @@ -67,4 +67,6 @@ public interface WorkOrderMapper extends BaseMapper { String getMaxByCodePattern(@Param("woCode") String woCode); + List selectSchedulingCount(WorkOrderDto workOrderDto); + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml index 08ebbbe..b036afa 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml @@ -138,4 +138,25 @@ wo_code LIKE concat(#{woCode},'%') + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java index 48093c6..9f6d20f 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java @@ -78,4 +78,6 @@ public interface IWorkOrderService extends BaseService { * @param workOrderEntityList */ void sendWorkOrderToOldMes(List workOrderEntityList); + + List schedulingCount(WorkOrderDto workOrder); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 13e2e1d..3ddafce 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -30,6 +30,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.CollectionUtils; @@ -404,7 +405,22 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list) { + @Override + public List schedulingCount(WorkOrderDto workOrder) { + if(StringUtils.isNotEmpty(workOrder.getStartTime())){ + workOrder.setStartTime(workOrder.getStartTime().concat(" 00:00:00")); + } + if(StringUtils.isNotEmpty(workOrder.getEndTime())){ + workOrder.setEndTime(workOrder.getEndTime().concat(" 23:59:59")); + } + List list = baseMapper.selectSchedulingCount(workOrder); + list.forEach(item -> { + item.setSchedulingRate(String.format("%.2f", (double)item.getSchedulingCount()/item.getTotalCount()*100)); + }); + return list; + } + + void calculateCr(List list) { //查询订单下的工序,计算cr值 for (YieldOrderEntity entity : list) { List craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, entity.getId())); From 799d46c5f995a09c8ee328d806e585858766a7da Mon Sep 17 00:00:00 2001 From: liuqingkun Date: Mon, 15 Dec 2025 14:50:28 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E6=96=B0mes=E5=90=8C=E6=AD=A5=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=96=B9=E6=B3=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WorkOrderController.java | 20 ++++++++ .../controller/WorkPlanController.java | 5 +- .../scheduling/entity/WorkPlanEntity.java | 48 ++++++++++++++----- .../service/impl/WorkPlanServiceImpl.java | 2 + .../src/main/resources/application-dev.yml | 1 + 5 files changed, 61 insertions(+), 15 deletions(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java index ab86042..23932b9 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java @@ -43,6 +43,7 @@ import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.scheduling.scheduling.dto.WorkOrderDto; import org.springblade.scheduling.scheduling.entity.WorkOrderEntity; import org.springblade.scheduling.scheduling.vo.WorkOrderVO; @@ -51,6 +52,7 @@ import org.springblade.scheduling.scheduling.service.IWorkOrderService; import org.springblade.scheduling.scheduling.wrapper.WorkOrderWrapper; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -191,4 +193,22 @@ public class WorkOrderController extends BladeController { return R.data(workOrderService.schedulingCount(workOrderDto)); } + /** + * 车间订单表 排产 + */ + @GetMapping("/sendToOldMesTest/{workOrderId}") + @Operation(summary = "排产统计", description = "传入WorkOrderDto") + public R sendToOldMesTest(@PathVariable Long workOrderId) { + List workOrderEntityList = new ArrayList<>(); + WorkOrderEntity workOrder = workOrderService.getById(workOrderId); + + if (ObjectUtil.isEmpty(workOrder)) { + return R.fail("未找到工单"); + } + + workOrderEntityList.add(workOrder); + workOrderService.sendWorkOrderToOldMes(workOrderEntityList); + return R.success(); + } + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkPlanController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkPlanController.java index 4dd0d0e..9e77b28 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkPlanController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkPlanController.java @@ -25,6 +25,7 @@ */ package org.springblade.scheduling.scheduling.controller; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; @@ -162,8 +163,8 @@ public class WorkPlanController extends BladeController { */ @PostMapping("/updateWorkPlan") @Operation(summary = "更新作业计划", description = "") - public R updateWorkPlan(@RequestBody WorkPlanEntity entity) { - workPlanService.updateWorkPlan(entity.getId(), entity.getFactStartTime(), entity.getFactEndTime()); + public R updateWorkPlan(@RequestBody JSONObject entity) { + workPlanService.updateWorkPlan(entity.getLong("id"), entity.getDate("factStartTime"), entity.getDate("factEndTime")); return R.success(); } } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/WorkPlanEntity.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/WorkPlanEntity.java index 664ae9f..4bc4394 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/WorkPlanEntity.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/WorkPlanEntity.java @@ -25,16 +25,16 @@ */ package org.springblade.scheduling.scheduling.entity; -import lombok.Data; -import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.Date; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; -import org.springblade.core.tenant.mp.TenantEntity; + import java.io.Serial; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; /** * 车间作业计划 实体类 @@ -47,6 +47,28 @@ import java.io.Serial; @Schema(description = "MesWorkPlan对象") @EqualsAndHashCode(callSuper = true) public class WorkPlanEntity extends BaseEntity { + /** + * TODO 工序状态要调整到常量类中 + * 工序状态:未开始 + */ + public static Integer STATUS_NO_START = 1; + /** + * 工序状态:加工中 + */ + public static Integer STATUS_START = 2; + /** + * 工序状态:报工完成 + */ + public static Integer STATUS_WORK_OK = 3; + /** + * 工序状态:已完成 + */ + public static Integer STATUS_COMPLETE = 5; + /** + * 工序状态:已返工 + */ + public static Integer STATUS_VOIDED = 6; + @Serial private static final long serialVersionUID = 1L; @@ -142,27 +164,27 @@ public class WorkPlanEntity extends BaseEntity { @Schema(description = "实际结束") private Date factEndTime; /** - * + * */ @Schema(description = "") private Short bindStatus; /** - * + * */ @Schema(description = "") private Integer workQty; /** - * + * */ @Schema(description = "") private Long receiveMan; /** - * + * */ @Schema(description = "") private BigDecimal hours; /** - * + * */ @Schema(description = "") private Long caId; @@ -172,7 +194,7 @@ public class WorkPlanEntity extends BaseEntity { @Schema(description = "打印标记类型:1、生产过程") private Short printType; /** - * + * */ @Schema(description = "") private Long subsidiaryTeam; @@ -202,7 +224,7 @@ public class WorkPlanEntity extends BaseEntity { @Schema(description = "工艺文件编号/版本号") private String papers; /** - * + * */ @Schema(description = "") private String referenceFile; diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java index c6f3db5..b4d16ad 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java @@ -68,9 +68,11 @@ public class WorkPlanServiceImpl extends BaseServiceImpl Date: Mon, 15 Dec 2025 14:59:40 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WorkOrderController.java | 18 ++++++++++++++++++ .../scheduling/mapper/WorkOrderMapper.java | 4 ++++ .../scheduling/mapper/WorkOrderMapper.xml | 12 ++++++++++++ .../scheduling/service/IWorkOrderService.java | 4 ++++ .../service/impl/WorkOrderServiceImpl.java | 10 ++++++++++ .../scheduling/task/SchedulingJob.java | 2 +- 6 files changed, 49 insertions(+), 1 deletion(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java index 23932b9..e7e8946 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java @@ -211,4 +211,22 @@ public class WorkOrderController extends BladeController { return R.success(); } + /** + * 车间订单表 排产 + */ + @GetMapping("/selectTeam") + @Operation(summary = "获取班组列表") + public R> selectTeam() { + return R.data(workOrderService.selectTeam()); + } + + /** + * 车间订单表 排产 + */ + @GetMapping("/selectEquip") + @Operation(summary = "获取设备列表") + public R> selectEquip() { + return R.data(workOrderService.selectEquip()); + } + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java index 72ae9ed..905c9ba 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java @@ -69,4 +69,8 @@ public interface WorkOrderMapper extends BaseMapper { List selectSchedulingCount(WorkOrderDto workOrderDto); + List selectTeam(); + + List selectEquip(); + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml index b036afa..e89984e 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml @@ -159,4 +159,16 @@ GROUP BY b.WC_NAME, a.WORK_CENTER_ID; + + + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java index 9f6d20f..a8c192b 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java @@ -80,4 +80,8 @@ public interface IWorkOrderService extends BaseService { void sendWorkOrderToOldMes(List workOrderEntityList); List schedulingCount(WorkOrderDto workOrder); + + List selectTeam(); + + List selectEquip(); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 3ddafce..c6ec9f1 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -420,6 +420,16 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectTeam() { + return baseMapper.selectTeam(); + } + + @Override + public List selectEquip() { + return baseMapper.selectEquip(); + } + void calculateCr(List list) { //查询订单下的工序,计算cr值 for (YieldOrderEntity entity : list) { diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/task/SchedulingJob.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/task/SchedulingJob.java index b6c87ff..8645efc 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/task/SchedulingJob.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/task/SchedulingJob.java @@ -21,7 +21,7 @@ import org.springframework.stereotype.Component; public class SchedulingJob { private final IWorkOrderService workOrderService; - @Scheduled(cron = "* * 1 * * ?") + @Scheduled(cron = "0 0 8,12,16,20 * * ? ") public void schedulingJob() { workOrderService.scheduling(); } From f6642e136075f024756f8cd6e46f114b07b8fed7 Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Mon, 15 Dec 2025 15:54:41 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduling/service/impl/WorkOrderServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index c6ec9f1..463de95 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -507,7 +507,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipResourceList = equipResourceService.list(Wrappers.lambdaQuery().eq(EquipResourceEntity::getCraftId,craft.getCaId()).eq(EquipResourceEntity::getWorkCenterId,craft.getWorkCenterId()).ge(EquipResourceEntity::getStartTime, dateTime).eq(EquipResourceEntity::getIsUsed, 0).in(EquipResourceEntity::getEquipOrder, entry.getKey())); if(CollectionUtils.isEmpty(equipResourceList)){ order.setStatus(6); - order.setErrorInfo("工序:"+craft+"未匹配到对应的设备资源"); + order.setErrorInfo("工序:"+craft.getPpsId()+"未匹配到对应的设备资源"); yieldOrderService.updateById(order); isSchecuding = false; break; @@ -578,6 +578,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipWrapper = new LambdaUpdateWrapper<>(); equipWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); + equipWrapper.eq(EquipResourceEntity::getDateTime,equipResource.getDateTime()); + equipWrapper.eq(EquipResourceEntity::getPeriod,equipResource.getPeriod()); equipResourceService.update(equipResource,equipWrapper); //该设备后续所有开始时间小于当前结束时间的时间段都变为不可用 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); From e89f85ae7dc8935ddb27e936ba87b2b9c2520d66 Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Tue, 16 Dec 2025 11:16:23 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduling/service/impl/WorkOrderServiceImpl.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 463de95..f3e123d 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -33,6 +33,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springblade.common.constant.YieldOrderConst; import org.springblade.core.mp.base.BaseEntity; @@ -68,6 +69,7 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor +@Slf4j public class WorkOrderServiceImpl extends BaseServiceImpl implements IWorkOrderService { private final IYieldOrderService yieldOrderService; @@ -111,7 +113,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list = yieldOrderService.list(Wrappers.lambdaQuery().eq(BaseEntity::getStatus, YieldOrderConst.STATUS_APS)); + List list = yieldOrderService.list(Wrappers.lambdaQuery().eq(BaseEntity::getStatus, YieldOrderConst.STATUS_APS).isNotNull(YieldOrderEntity::getWorkCenterId)); + log.info("待排产订单数量为:" + list.size()); if (CollectionUtils.isNotEmpty(list)) { //校验已排产订单 checkSchedulingOrder(list); @@ -531,7 +534,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl capacityList = capacitySplit(equipResourceMap,sumCapacity); for(BigDecimal capacity : capacityList){ @@ -1128,4 +1131,5 @@ public class WorkOrderServiceImpl extends BaseServiceImpl Date: Tue, 16 Dec 2025 15:22:05 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduling/mapper/WorkOrderMapper.xml | 2 +- .../service/impl/WorkOrderServiceImpl.java | 76 +++++++++++++++---- 2 files changed, 61 insertions(+), 17 deletions(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml index e89984e..bede495 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml @@ -114,7 +114,7 @@ LEFT JOIN BS_PROCESS_SET f on e.pps_id = f.id - and (to_char(b.start_time,'YYYY-MM-DD') = #{startTime} or b.end_time ]]> to_date(CONCAT(#{startTime},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS')) + and (to_char(b.start_time,'YYYY-MM-DD') = #{startTime} or (b.start_time to_date(CONCAT(#{startTime},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS') and b.end_time ]]> to_date(CONCAT(#{startTime},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS'))) and a.wo_code = #{woCode} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index f3e123d..74dfe25 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -625,10 +625,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl 0){ + }*/ + //镀后检验和镀后接收先按半小时计算 + if(ability != null){ //通过加锁的方式保证每次查询到的人力资源都是最新的 Long craftId = craft.getCaId(); Lock craftLock = getCraftLock(craftId); @@ -648,15 +649,20 @@ public class WorkOrderServiceImpl extends BaseServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); + updateWrapper.eq(EquipResourceEntity::getDateTime,equipResource.getDateTime()); + updateWrapper.eq(EquipResourceEntity::getPeriod,equipResource.getPeriod()); + equipResourceService.update(equipResource,updateWrapper); } //还原人力资源 @@ -1132,4 +1146,34 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list){ + for(WorkPlanEntity workPlan : list){ + //还原设备资源 + if(workPlan.getEquipResourceId() != null){ + EquipResourceEntity equipResource = equipResourceService.getById(workPlan.getEquipResourceId()); + equipResource.setIsUsed("0"); + equipResource.setRestCapacity(equipResource.getRestCapacity().add(workPlan.getHourQuota())); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); + updateWrapper.eq(EquipResourceEntity::getDateTime,equipResource.getDateTime()); + updateWrapper.eq(EquipResourceEntity::getPeriod,equipResource.getPeriod()); + equipResourceService.update(equipResource,updateWrapper); + + } + //还原人力资源 + if(workPlan.getPersonResourceIds() != null){ + List personResourceList = personResourceService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,workPlan.getPersonResourceIds().split(","))); + if(CollectionUtils.isNotEmpty(personResourceList)){ + personResourceList.forEach(item ->{ + item.setIsUsed("0"); + personResourceService.updateById(item); + }); + } + } + if(workPlan.getId() != null){ + workPlanService.deleteLogic(Arrays.asList(workPlan.getId())); + } + + } + } } From a51b21b7a60272c789793313e42ae861383ee00d Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Tue, 16 Dec 2025 15:31:22 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduling/service/impl/WorkOrderServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 74dfe25..d183847 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -636,11 +636,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl personResourceList = personResourceService.list(Wrappers.lambdaQuery().ge(PersonResourceEntity::getStartTime,prevProcessEnd.plusMinutes(30)).eq(PersonResourceEntity::getCraftId,craft.getCaId()).orderByAsc(PersonResourceEntity::getStartTime).last("for update")); + List personResourceList = personResourceService.list(Wrappers.lambdaQuery().ge(PersonResourceEntity::getStartTime,prevProcessEnd.plusMinutes(30)).eq(PersonResourceEntity::getCraftId,craft.getCaId()).eq(PersonResourceEntity::getIsUsed,0).orderByAsc(PersonResourceEntity::getStartTime).last("for update")); //如果personResourceList不为空,说明是镀后检验或者镀后验收这类跨作业中心的工艺 if(CollectionUtils.isNotEmpty(personResourceList)){ //剔除掉personResourceList中isUsed=1之前的数据,isUsed=1说明这些时间被占用了 - int isUsedIndex = -1; + /* int isUsedIndex = -1; for(int m=0;m Date: Tue, 16 Dec 2025 15:48:55 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E6=96=B0mes=E5=90=8C=E6=AD=A5=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=96=B9=E6=B3=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IYieldOrderCraftService.java | 8 ++ .../impl/YieldOrderCraftServiceImpl.java | 8 ++ .../service/impl/YieldOrderServiceImpl.java | 96 ++++++++++++++++++- 3 files changed, 109 insertions(+), 3 deletions(-) diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderCraftService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderCraftService.java index 5f2ff8d..3a11a68 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderCraftService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderCraftService.java @@ -30,6 +30,14 @@ public interface IYieldOrderCraftService extends BaseService { */ List listByYoId(Long yoId); + /** + * 根据生产订单ID删除工艺列表 + * + * @param yoId + * @return + */ + int deleteByYoId(Long yoId); + /** * 同步旧MES的待排产订单工艺数据 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderCraftServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderCraftServiceImpl.java index a8a3b18..127ab70 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderCraftServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderCraftServiceImpl.java @@ -35,6 +35,14 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl deleteWrapper = Wrappers.lambdaQuery(YieldOrderCraft.class) + .eq(YieldOrderCraft::getYoId, yoId) + .eq(YieldOrderCraft::getIsDeleted, CommonConstant.DELETE_FALSE); + return baseMapper.delete(deleteWrapper); + } + @Override public void syncYieldOrderCraftData() { diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java index 98114d0..c07951a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.springblade.common.constant.CommonConstant; import org.springblade.common.constant.YieldOrderConst; import org.springblade.common.exception.BusinessException; import org.springblade.common.utils.StringPrefixUtils; @@ -17,11 +18,14 @@ import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.core.tool.utils.StringPool; +import org.springblade.desk.dashboard.constant.DsCraftConstant; import org.springblade.desk.dashboard.constant.DsPartConst; import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity; import org.springblade.desk.dashboard.service.IDsCraftService; import org.springblade.desk.dashboard.service.IDsPartService; +import org.springblade.desk.dashboard.service.IDsProcessService; import org.springblade.desk.order.entity.YieldOrder; import org.springblade.desk.order.entity.YieldOrderCraft; import org.springblade.desk.order.mapper.YieldOrderMapper; @@ -29,6 +33,7 @@ import org.springblade.desk.order.service.IYieldOrderCraftService; import org.springblade.desk.order.service.IYieldOrderService; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.text.MessageFormat; import java.util.ArrayList; @@ -49,6 +54,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl dsProcessEntityList = dsProcessService.selectDsProcessByCraftId(craft.getId()); + //删除之前的 + yieldOrderCraftService.deleteByYoId(yieldOrder.getId()); + List yieldOrderCraftList = new ArrayList<>(); + if (dsProcessEntityList != null && dsProcessEntityList.size() > 0) { + if (DsCraftConstant.PRIORITY_THIS_USE.equals(craft.getRank())) { + craft.setPrority(DsCraftConstant.PRIORITY_TEMPORARY); + } + + for (DsProcessEntity processEntity : dsProcessEntityList) { + YieldOrderCraft yieldOrderCraft = new YieldOrderCraft(); + yieldOrderCraft.setYoId(yieldOrder.getId()); + yieldOrderCraft.setProcessNo(processEntity.getProcessNo()); + yieldOrderCraft.setMakeMemo(processEntity.getRemarks()); + yieldOrderCraft.setHourQuota(processEntity.getProHours()); +// yieldOrderCraft.setPpsId(processEntity.getBsProcedureSet()); +// yieldOrderCraft.setCraftNo(processEntity.getDsCraft().getCraftNo()); +// yieldOrderCraft.setPid(processEntity.getPid()); +// yieldOrderCraft.setCaId(processEntity.getBsCraftAbility()); + yieldOrderCraftList.add(yieldOrderCraft); + } + yieldOrderCraftService.saveBatch(yieldOrderCraftList); + } + + return Boolean.TRUE; } @Override From 99c325494c854749899c7206243c2362075307dd Mon Sep 17 00:00:00 2001 From: liuqingkun Date: Tue, 16 Dec 2025 15:49:14 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E6=96=B0mes=E5=90=8C=E6=AD=A5=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=96=B9=E6=B3=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blade-desk/src/main/resources/application-dev.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/blade-service/blade-desk/src/main/resources/application-dev.yml b/blade-service/blade-desk/src/main/resources/application-dev.yml index 8f66f99..068bbd9 100644 --- a/blade-service/blade-desk/src/main/resources/application-dev.yml +++ b/blade-service/blade-desk/src/main/resources/application-dev.yml @@ -11,7 +11,8 @@ spring: business: oldMes: - jobEnable: false + jobEnable: true url: 192.168.169.172:9000 - syncOrderList: /zhgd-rb/aiWebapi/syncApsOrderData + syncOrderList: /zhgd-rb/aiWebapi/syncApsOrderData/化学镀镍 +# syncOrderList: /zhgd-rb/aiWebapi/syncApsOrderData/all pushSyncResult: /zhgd-rb/aiWebapi/syncApsOrderDataResult From ed15a6136a9e7b334845fbe77752e5c1e4c067a0 Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Tue, 16 Dec 2025 20:37:03 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/WorkOrderServiceImpl.java | 567 +++++++++--------- 1 file changed, 294 insertions(+), 273 deletions(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index d183847..14f74cc 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -113,7 +113,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list = yieldOrderService.list(Wrappers.lambdaQuery().eq(BaseEntity::getStatus, YieldOrderConst.STATUS_APS).isNotNull(YieldOrderEntity::getWorkCenterId)); + List list = yieldOrderService.list(Wrappers.lambdaQuery().eq(BaseEntity::getStatus, YieldOrderConst.STATUS_APS).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate)); log.info("待排产订单数量为:" + list.size()); if (CollectionUtils.isNotEmpty(list)) { //校验已排产订单 @@ -144,7 +144,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl { // 排序逻辑:优先级升序 → CR值降序 → 数量降序 → 时间升序 list1.sort(Comparator.comparingInt(YieldOrderEntity::getPriorityAps).reversed() - //.thenComparing((e1, e2) -> e2.getCrValue().compareTo(e1.getCrValue())) + .thenComparing((e1, e2) -> e2.getCrValue().compareTo(e1.getCrValue())) .thenComparingInt(YieldOrderEntity::getYpQty).reversed() .thenComparing(YieldOrderEntity::getReleaseDate)); return list1; @@ -468,302 +468,320 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list,Map personAbilityMap,Map mainProducerMap,Map> planMap) { List workOrderList = new ArrayList<>(); for (YieldOrderEntity order : list) { - //是否可以排产 - Boolean isSchecuding = true; - List workPlanList = new ArrayList<>(); - //查询所有工序 - List craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId,27).orderByAsc(YieldOrderCraftEntity::getProcessNo)); - List workCenterList = craftList.stream().filter(item -> item.getWorkCenterId() != null).map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList()); - if(workCenterList.size() != craftList.size()){ - order.setErrorInfo("工序信息不完整,含有未匹配作业中心的工序"); - order.setStatus(6); - yieldOrderService.updateById(order); - continue; - } + try { + //是否可以排产 + Boolean isSchecuding = true; + List workPlanList = new ArrayList<>(); + //查询所有工序 + List craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId,27).orderByAsc(YieldOrderCraftEntity::getProcessNo)); + List workCenterList = craftList.stream().filter(item -> item.getWorkCenterId() != null).map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList()); + if(workCenterList.size() != craftList.size()){ + order.setErrorInfo("工序信息不完整,含有未匹配作业中心的工序"); + order.setStatus(6); + yieldOrderService.updateById(order); + continue; + } - //上一道工序结束时间 - LocalDateTime prevProcessEnd = LocalDateTime.now(); - //判断是否有公共工序已经处理了,如果有则重新定义workPlanList,获取公共工序的最后结束时间和当前时间做比较,取大的作为上一道工序结束时间 - if(planMap.containsKey(order.getYoCode())){ - workPlanList = planMap.get(order.getYoCode()); - prevProcessEnd = prevProcessEnd.compareTo(workPlanList.get(workPlanList.size()-1).getEndTime()) > 0 ? prevProcessEnd : workPlanList.get(workPlanList.size()-1).getEndTime(); - } - for (int i = 0; i < craftList.size(); i++) { - YieldOrderCraftEntity craft = craftList.get(i); - if ("设备".equals(mainProducerMap.get(craft.getPpsId()))) { - //根据作业中心查询所有设备 - List equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId())); - if(CollectionUtils.isEmpty(equipAbilityList)){ - order.setErrorInfo("设备未匹配到对应的设备能力"); - order.setStatus(6); - yieldOrderService.updateById(order); - isSchecuding = false; - break; - } - Map> equipAbilityMap = equipAbilityList.stream().collect(Collectors.groupingBy(EquipAbilityEntity::getEquipOrder)); - - //匹配设备资源 - //获取下一个整数点 - LocalDateTime dateTime = getNextIntegerTime(prevProcessEnd); - for(Map.Entry> entry : equipAbilityMap.entrySet()){ - //根据时间点获取所有设备资源 - List equipResourceList = equipResourceService.list(Wrappers.lambdaQuery().eq(EquipResourceEntity::getCraftId,craft.getCaId()).eq(EquipResourceEntity::getWorkCenterId,craft.getWorkCenterId()).ge(EquipResourceEntity::getStartTime, dateTime).eq(EquipResourceEntity::getIsUsed, 0).in(EquipResourceEntity::getEquipOrder, entry.getKey())); - if(CollectionUtils.isEmpty(equipResourceList)){ + //上一道工序结束时间 + LocalDateTime prevProcessEnd = LocalDateTime.now(); + //判断是否有公共工序已经处理了,如果有则重新定义workPlanList,获取公共工序的最后结束时间和当前时间做比较,取大的作为上一道工序结束时间 + if(planMap.containsKey(order.getYoCode())){ + workPlanList = planMap.get(order.getYoCode()); + prevProcessEnd = prevProcessEnd.compareTo(workPlanList.get(workPlanList.size()-1).getEndTime()) > 0 ? prevProcessEnd : workPlanList.get(workPlanList.size()-1).getEndTime(); + } + for (int i = 0; i < craftList.size(); i++) { + YieldOrderCraftEntity craft = craftList.get(i); + if ("设备".equals(mainProducerMap.get(craft.getPpsId()))) { + //根据作业中心查询所有设备 + List equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId())); + if(CollectionUtils.isEmpty(equipAbilityList)){ + order.setErrorInfo("设备未匹配到对应的设备能力"); order.setStatus(6); - order.setErrorInfo("工序:"+craft.getPpsId()+"未匹配到对应的设备资源"); yieldOrderService.updateById(order); isSchecuding = false; break; } - //设备资源按照时间段分组并按时间排序,然后再每个组内按照剩余产能倒序排序 - Map> equipResourceMap = equipResourceList.stream() - .collect(Collectors.groupingBy( - EquipResourceEntity::getStartTime, // 分组字段:startTime - // 用TreeMap接收,指定startTime降序(分组的排序) - TreeMap::new, - // 组内收集器:按restCapacity降序排序 - Collectors.collectingAndThen( - Collectors.toList(), - list1 -> list1.stream() - .sorted(Comparator.comparing( - EquipResourceEntity::getRestCapacity, - // restCapacity 降序比较器(BigDecimal专用) - Comparator.reverseOrder() - )) - .collect(Collectors.toList()) - ) - )); - //计算生产所需产能,需将m2换算成dm2 - BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); - //需要判断设备额定生产能力是否满足订单总产能,如果不满足,则需要把总产能进行拆分 - List capacityList = capacitySplit(equipResourceMap,sumCapacity); - for(BigDecimal capacity : capacityList){ - for(Map.Entry> entry1 : equipResourceMap.entrySet()){ - Boolean isOccupied = false; - List resourceList = entry1.getValue(); - for (EquipResourceEntity equipResource : resourceList) { - //如果产能最大的设备都不满足,后面的设备就不需要判断了 - if (equipResource.getRestCapacity().compareTo(capacity) < 0) { - break; - } else { - //生成车间订单 - WorkPlanEntity workPlan = new WorkPlanEntity(); - workPlan.setStartTime(equipResource.getStartTime()); - if(entry.getKey() == 1){ - workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue())); - }else{ - workPlan.setEndTime(equipResource.getEndTime()); + Map> equipAbilityMap = equipAbilityList.stream().collect(Collectors.groupingBy(EquipAbilityEntity::getEquipOrder)); + + //匹配设备资源 + //获取下一个整数点 + LocalDateTime dateTime = getNextIntegerTime(prevProcessEnd); + for(Map.Entry> entry : equipAbilityMap.entrySet()){ + //根据时间点获取所有设备资源 + List equipResourceList = equipResourceService.list(Wrappers.lambdaQuery().eq(EquipResourceEntity::getCraftId,craft.getCaId()).eq(EquipResourceEntity::getWorkCenterId,craft.getWorkCenterId()).ge(EquipResourceEntity::getStartTime, dateTime).eq(EquipResourceEntity::getIsUsed, 0).in(EquipResourceEntity::getEquipOrder, entry.getKey())); + if(CollectionUtils.isEmpty(equipResourceList)){ + order.setStatus(6); + order.setErrorInfo("工序:"+craft.getPpsId()+"未匹配到对应的设备资源"); + yieldOrderService.updateById(order); + isSchecuding = false; + break; + } + //设备资源按照时间段分组并按时间排序,然后再每个组内按照剩余产能倒序排序 + Map> equipResourceMap = equipResourceList.stream() + .collect(Collectors.groupingBy( + EquipResourceEntity::getStartTime, // 分组字段:startTime + // 用TreeMap接收,指定startTime降序(分组的排序) + TreeMap::new, + // 组内收集器:按restCapacity降序排序 + Collectors.collectingAndThen( + Collectors.toList(), + list1 -> list1.stream() + .sorted(Comparator.comparing( + EquipResourceEntity::getRestCapacity, + // restCapacity 降序比较器(BigDecimal专用) + Comparator.reverseOrder() + )) + .collect(Collectors.toList()) + ) + )); + //计算生产所需产能,需将m2换算成dm2 + BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); + //需要判断设备额定生产能力是否满足订单总产能,如果不满足,则需要把总产能进行拆分 + List capacityList = capacitySplit(equipResourceMap,sumCapacity); + for(BigDecimal capacity : capacityList){ + for(Map.Entry> entry1 : equipResourceMap.entrySet()){ + Boolean isOccupied = false; + List resourceList = entry1.getValue(); + for (EquipResourceEntity equipResource : resourceList) { + //如果产能最大的设备都不满足,后面的设备就不需要判断了 + if (equipResource.getRestCapacity().compareTo(capacity) < 0) { + break; + } else { + //生成车间订单 + WorkPlanEntity workPlan = new WorkPlanEntity(); + workPlan.setStartTime(equipResource.getStartTime()); + if(entry.getKey() == 1){ + workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue())); + }else{ + workPlan.setEndTime(equipResource.getEndTime()); + } + workPlan.setWorkQty(order.getYpQty()); + workPlan.setCaId(craft.getCaId()); + workPlan.setPpsId(craft.getPpsId()); + workPlan.setMakeTeam(equipResource.getTeamId()); + workPlan.setWorkCenterId(craft.getWorkCenterId()); + workPlan.setOrders(craft.getProcessNo()); + workPlan.setWoId(order.getId()); + workPlan.setOem("0"); + workPlan.setTestQty(0); + workPlan.setQualifiedQty(0); + workPlan.setUnqualifiedQty(0); + workPlan.setScrapQty(0); + workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime()))); + workPlan.setEquipCode(equipResource.getEquipCode()); + workPlan.setEquipName(equipResource.getEquipName()); + workPlan.setEquipResourceId(equipResource.getId()); + workPlanList.add(workPlan); + //更新剩余产能 + equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(capacity)); + equipResource.setIsUsed("1"); + //如果剩余产能占总产能不足20%,则修改为已占用 + // if(equipResource.getRestCapacity().divide(equipResource.getTotalCapacity(),2,RoundingMode.HALF_UP).compareTo(BigDecimal.valueOf(0.2)) < 0){ + // + // } + //同一个设备可能有多个工艺能力,同一时间只能做一个工艺能力的零件,所以需要把当前设备所有工艺能力的剩余产能都更新调 + LambdaUpdateWrapper equipWrapper = new LambdaUpdateWrapper<>(); + equipWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); + equipWrapper.eq(EquipResourceEntity::getDateTime,equipResource.getDateTime()); + equipWrapper.eq(EquipResourceEntity::getPeriod,equipResource.getPeriod()); + equipResourceService.update(equipResource,equipWrapper); + //该设备后续所有开始时间小于当前结束时间的时间段都变为不可用 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); + updateWrapper.lt(EquipResourceEntity::getStartTime, equipResource.getEndTime()); + updateWrapper.gt(EquipResourceEntity::getStartTime, equipResource.getStartTime()); + updateWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); + EquipResourceEntity equipResource1 = new EquipResourceEntity(); + equipResource1.setIsUsed("1"); + equipResourceService.update(equipResource1, updateWrapper); + //当前工序的结束时间作为下一工序的开始时间 + prevProcessEnd = workPlan.getEndTime(); + dateTime = workPlan.getEndTime(); + isOccupied = true; + break; } - workPlan.setWorkQty(order.getYpQty()); - workPlan.setCaId(craft.getCaId()); - workPlan.setPpsId(craft.getPpsId()); - workPlan.setMakeTeam(equipResource.getTeamId()); - workPlan.setWorkCenterId(craft.getWorkCenterId()); - workPlan.setOrders(craft.getProcessNo()); - workPlan.setWoId(order.getId()); - workPlan.setOem("0"); - workPlan.setTestQty(0); - workPlan.setQualifiedQty(0); - workPlan.setUnqualifiedQty(0); - workPlan.setScrapQty(0); - workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime()))); - workPlan.setEquipCode(equipResource.getEquipCode()); - workPlan.setEquipName(equipResource.getEquipName()); - workPlan.setEquipResourceId(equipResource.getId()); - workPlanList.add(workPlan); - //更新剩余产能 - equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(capacity)); - equipResource.setIsUsed("1"); - //如果剩余产能占总产能不足20%,则修改为已占用 -// if(equipResource.getRestCapacity().divide(equipResource.getTotalCapacity(),2,RoundingMode.HALF_UP).compareTo(BigDecimal.valueOf(0.2)) < 0){ -// -// } - //同一个设备可能有多个工艺能力,同一时间只能做一个工艺能力的零件,所以需要把当前设备所有工艺能力的剩余产能都更新调 - LambdaUpdateWrapper equipWrapper = new LambdaUpdateWrapper<>(); - equipWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); - equipWrapper.eq(EquipResourceEntity::getDateTime,equipResource.getDateTime()); - equipWrapper.eq(EquipResourceEntity::getPeriod,equipResource.getPeriod()); - equipResourceService.update(equipResource,equipWrapper); - //该设备后续所有开始时间小于当前结束时间的时间段都变为不可用 - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); - updateWrapper.lt(EquipResourceEntity::getStartTime, equipResource.getEndTime()); - updateWrapper.gt(EquipResourceEntity::getStartTime, equipResource.getStartTime()); - updateWrapper.eq(EquipResourceEntity::getEquipCode,equipResource.getEquipCode()); - EquipResourceEntity equipResource1 = new EquipResourceEntity(); - equipResource1.setIsUsed("1"); - equipResourceService.update(equipResource1, updateWrapper); - //当前工序的结束时间作为下一工序的开始时间 - prevProcessEnd = workPlan.getEndTime(); - dateTime = workPlan.getEndTime(); - isOccupied = true; + } + if (isOccupied) { break; } } - if (isOccupied) { - break; - } } } - } - if(!isSchecuding){ - break; - } + if(!isSchecuding){ + break; + } - } else if ("人".equals(mainProducerMap.get(craft.getPpsId()))) { - //匹配人资源 - /* String personAbility = craft.getWorkCenterId() + "-" + craft.getPpsId() + "-" + craft.getCaId(); - if (personAbilityMap.containsKey(craft.getWorkCenterId() + "-" + craft.getPpsId() + "-" + craft.getCaId())) { + } else if ("人".equals(mainProducerMap.get(craft.getPpsId()))) { + //匹配人资源 + /* String personAbility = craft.getWorkCenterId() + "-" + craft.getPpsId() + "-" + craft.getCaId(); + if (personAbilityMap.containsKey(craft.getWorkCenterId() + "-" + craft.getPpsId() + "-" + craft.getCaId())) { - } else { - order.setStatus(6); - order.setErrorInfo("工序:"+personAbility+"未匹配到对应的人员能力"); - yieldOrderService.updateById(order); - isSchecuding = false; - break; - }*/ - WorkPlanEntity workPlan = new WorkPlanEntity(); - BigDecimal totalTime = new BigDecimal(0); - PersonAbilityEntity ability = personAbilityMap.get(craft.getWorkCenterId() + "-" + craft.getPpsId() + "-" + craft.getCaId()); - //由于客户提供的数据不全,先判断有没有对应的能力,如果没有先不计算时间 - /* if(ability != null){ - totalTime = totalTime.add(BigDecimal.valueOf(order.getYpQty()).multiply(personAbilityMap.get(craft.getWorkCenterId() + "-" + craft.getPpsId() + "-" + craft.getCaId()).getStandardTime()).add(personAbilityMap.get(craft.getWorkCenterId() + "-" + craft.getPpsId() + "-" + craft.getCaId()).getPrepareTime())); - }*/ - //镀后检验和镀后接收先按半小时计算 - if(ability != null){ - //通过加锁的方式保证每次查询到的人力资源都是最新的 - Long craftId = craft.getCaId(); - Lock craftLock = getCraftLock(craftId); - craftLock.lock(); // 加本地锁,同一工艺ID串行执行 - try{ - //查询大于当前时间+半小时的所有人员资源 - List personResourceList = personResourceService.list(Wrappers.lambdaQuery().ge(PersonResourceEntity::getStartTime,prevProcessEnd.plusMinutes(30)).eq(PersonResourceEntity::getCraftId,craft.getCaId()).eq(PersonResourceEntity::getIsUsed,0).orderByAsc(PersonResourceEntity::getStartTime).last("for update")); - //如果personResourceList不为空,说明是镀后检验或者镀后验收这类跨作业中心的工艺 - if(CollectionUtils.isNotEmpty(personResourceList)){ - //剔除掉personResourceList中isUsed=1之前的数据,isUsed=1说明这些时间被占用了 - /* int isUsedIndex = -1; - for(int m=0;m caIds = Arrays.asList(10,21); + //镀后检验和镀后接收先按半小时计算 + if(ability != null){ + if(caIds.contains(craft.getCaId())){ + totalTime = BigDecimal.valueOf(30); + workPlan.setStartTime(prevProcessEnd); + workPlan.setEndTime(prevProcessEnd.plusMinutes(30)); + if(craft.getCaId() == 10){ + workPlan.setMakeTeam(Long.valueOf(64)); } - if(isUsedIndex != -1){ - personResourceList = personResourceList.subList(isUsedIndex + 1, personResourceList.size()); - }*/ - - //计算加工时间占几个人力片段 - //int period = totalTime.divide(BigDecimal.valueOf(30),0, RoundingMode.CEILING).intValue(); - //1.如果size=0,说明最近3天的资源都排满了,就不需要排了 - if(personResourceList.size() == 0){ - //还原已占用资源 - restoreResource(workPlanList); - order.setErrorInfo("最近3天人力资源已占满,需下次排产"); - yieldOrderService.updateById(order); - isSchecuding = false; - break; + if(craft.getCaId() == 21){ + workPlan.setMakeTeam(Long.valueOf(65)); } - //占用时间段 - /*LocalDateTime startTime = LocalDateTime.now(); - LocalDateTime endTime = LocalDateTime.now(); - StringBuilder personResourceIds = new StringBuilder(); - for(int j=0;j personResourceList = personResourceService.list(Wrappers.lambdaQuery().ge(PersonResourceEntity::getStartTime,prevProcessEnd.plusMinutes(30)).eq(PersonResourceEntity::getCraftId,craft.getCaId()).eq(PersonResourceEntity::getIsUsed,0).orderByAsc(PersonResourceEntity::getStartTime).last("for update")); + //如果personResourceList不为空,说明是镀后检验或者镀后验收这类跨作业中心的工艺 + if(CollectionUtils.isNotEmpty(personResourceList)){ + //剔除掉personResourceList中isUsed=1之前的数据,isUsed=1说明这些时间被占用了 + *//* int isUsedIndex = -1; + for(int m=0;m { - workPlanEntity.setWoId(workOrder.getId()); - workPlanService.save(workPlanEntity); - }); - workOrder.setWpId(workPlanList.get(0).getId()); - this.updateById(workOrder); - //更新订单状态为已排产 - order.setStatus(4); - order.setErrorInfo(null); - yieldOrderService.updateById(order); - workOrderList.add(workOrder); + if (CollectionUtils.isNotEmpty(workPlanList)) { + //为人员工序赋值开始结束时间 + WorkPlanTimeCalculator(workPlanList); + //新增车间订单和车间计划 + WorkOrderEntity workOrder = new WorkOrderEntity(); + workOrder.setWoCode(this.nextCode(order.getYpCode())); + workOrder.setCardNo(order.getCardNo()); + workOrder.setBatchNo(order.getBatchNo()); + workOrder.setYoId(order.getId()); + workOrder.setMakeQty(order.getYpQty()); + workOrder.setPlanStartDate(workPlanList.get(0).getStartTime() == null ? null :workPlanList.get(0).getStartTime().truncatedTo(ChronoUnit.DAYS).toString().substring(0,10)); + workOrder.setPlanEndDate(workPlanList.get(workPlanList.size()-1).getEndTime() == null ? null : workPlanList.get(workPlanList.size()-1).getEndTime().truncatedTo(ChronoUnit.DAYS).toString().substring(0,10)); + workOrder.setInventoryQty(0); + workOrder.setRunStatus(2); + workOrder.setPickingStatus(0); + workOrder.setOem("0"); + workOrder.setPriority(order.getPriorityAps()); + workOrder.setApprovalStatus(1); + workOrder.setScrapQty(0); + workOrder.setOemOut("0"); + workOrder.setOemType(-1); + workOrder.setPrintFlag("0"); + workOrder.setPushFlag("0"); + workOrder.setQuotaExceptional("0"); + workOrder.setReInStore("0"); + workOrder.setPartCode(order.getPartCode()); + + this.save(workOrder); + workPlanList.forEach(workPlanEntity -> { + workPlanEntity.setWoId(workOrder.getId()); + workPlanService.save(workPlanEntity); + }); + workOrder.setWpId(workPlanList.get(0).getId()); + this.updateById(workOrder); + //更新订单状态为已排产 + order.setStatus(4); + order.setErrorInfo(null); + yieldOrderService.updateById(order); + workOrderList.add(workOrder); + } + } catch (Exception e) { + log.error("报错订单是:"+order.getId()+",报错信息是:"+e.getMessage()); + throw new RuntimeException(e); } } @@ -976,7 +994,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl personResourceList = personResourceService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,workPlan.getPersonResourceIds().split(","))); if(CollectionUtils.isNotEmpty(personResourceList)){ personResourceList.forEach(item ->{ @@ -984,7 +1002,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl workPlanList = new ArrayList<>(); //获取相关工序 YieldOrderCraftEntity craft = yieldOrderCraftService.getOne(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId,order.getId()).eq(YieldOrderCraftEntity::getCaId,equipAbility.getCraftId())); + if(craft == null){ + continue; + } //计算订单总产能 BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(100)).multiply(BigDecimal.valueOf(order.getYpQty())); //计算需要占用几个时间段 From d913ce3f062027e9c2ba921f6b81a00fc6f1a3c2 Mon Sep 17 00:00:00 2001 From: sunjianxi <839419401@qq.com> Date: Tue, 16 Dec 2025 20:49:01 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduling/service/impl/WorkOrderServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 14f74cc..0ae1bfb 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -626,17 +626,17 @@ public class WorkOrderServiceImpl extends BaseServiceImpl caIds = Arrays.asList(10,21); + List ppsIds = Arrays.asList(Long.valueOf(10),Long.valueOf(21)); //镀后检验和镀后接收先按半小时计算 if(ability != null){ - if(caIds.contains(craft.getCaId())){ + if(ppsIds.contains(craft.getPpsId())){ totalTime = BigDecimal.valueOf(30); workPlan.setStartTime(prevProcessEnd); workPlan.setEndTime(prevProcessEnd.plusMinutes(30)); - if(craft.getCaId() == 10){ + if(craft.getPpsId() == 10){ workPlan.setMakeTeam(Long.valueOf(64)); } - if(craft.getCaId() == 21){ + if(craft.getPpsId() == 21){ workPlan.setMakeTeam(Long.valueOf(65)); } }else{ From dd3122629b659874d05e2f37d23d260a1de13fd4 Mon Sep 17 00:00:00 2001 From: liuqingkun Date: Wed, 17 Dec 2025 10:14:32 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/constant/DsCraftConstant.java | 24 +++++++++++++++++++ .../dashboard/pojo/entity/DsCraftEntity.java | 9 ++++--- .../pojo/entity/DsProcessEntity.java | 9 ++++--- .../service/impl/YieldOrderServiceImpl.java | 10 ++++++++ 4 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/DsCraftConstant.java diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/DsCraftConstant.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/DsCraftConstant.java new file mode 100644 index 0000000..e8f4a32 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/DsCraftConstant.java @@ -0,0 +1,24 @@ +package org.springblade.desk.dashboard.constant; + +/** + * 零件工艺信息 常量类 + * + * @author lqk + */ +public interface DsCraftConstant { + + // region 优先级 + /** + * 本次使用 + */ + Integer PRIORITY_THIS_USE = 1; + /** + * 标准 + */ + Integer PRIORITY_FORMAL = 2; + /** + * 临时 + */ + Integer PRIORITY_TEMPORARY = 3; + // endregion +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java index d99da1b..008080e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java @@ -25,13 +25,12 @@ */ package org.springblade.desk.dashboard.pojo.entity; -import lombok.Data; -import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; -import java.util.Date; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; -import org.springblade.core.tenant.mp.TenantEntity; + import java.io.Serial; /** @@ -78,7 +77,7 @@ public class DsCraftEntity extends BaseEntity { * 优先级 */ @Schema(description = "优先级") - private String prority; + private Integer prority; /** * 工艺级别 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java index e6abcaa..62efd0e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java @@ -25,13 +25,12 @@ */ package org.springblade.desk.dashboard.pojo.entity; -import lombok.Data; -import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; -import java.util.Date; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; -import org.springblade.core.tenant.mp.TenantEntity; + import java.io.Serial; /** @@ -83,7 +82,7 @@ public class DsProcessEntity extends BaseEntity { * 工时定额 */ @Schema(description = "工时定额") - private Long proHours; + private Double proHours; /** * 工序描述 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java index c07951a..a673329 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java @@ -388,17 +388,27 @@ public class YieldOrderServiceImpl extends BaseServiceImpl Date: Wed, 17 Dec 2025 10:28:47 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduling/scheduling/mapper/WorkOrderMapper.xml | 1 + .../scheduling/service/impl/WorkOrderServiceImpl.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml index bede495..6899720 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml @@ -113,6 +113,7 @@ LEFT JOIN MES_WORK_PLAN e on a.wp_id = e.id LEFT JOIN BS_PROCESS_SET f on e.pps_id = f.id + c.ts_name is not null and b.EQUIP_CODE is not null and a.is_deleted = 0 and (to_char(b.start_time,'YYYY-MM-DD') = #{startTime} or (b.start_time to_date(CONCAT(#{startTime},' 00:00:00'),'YYYY-MM-DD HH24:MI:SS') and b.end_time ]]> to_date(CONCAT(#{startTime},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS'))) diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 0ae1bfb..e6b98c3 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -118,7 +118,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpllambdaQuery().eq(BaseEntity::getStatus, YieldOrderConst.STATUS_APS)); + list = yieldOrderService.list(Wrappers.lambdaQuery().eq(BaseEntity::getStatus, YieldOrderConst.STATUS_APS).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate)); //初始化人员能力 List personAbilityEntityList = personAbilityService.list(Wrappers.lambdaQuery().isNotNull(PersonAbilityEntity::getWorkCenterId).isNotNull(PersonAbilityEntity::getProcessId).isNotNull(PersonAbilityEntity::getCraftId)); Map personAbilityMap = new HashMap<>(); @@ -584,6 +584,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl updateWrapper = new LambdaUpdateWrapper();