From 9d97f79fb53785f2a4b3ddb23a4f50eb4beb8261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B6=9B?= Date: Fri, 23 Jan 2026 17:42:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=A6=E9=97=B4=E8=AE=A2=E5=8D=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=BC=80=E5=8F=91=EF=BC=9A=E8=BD=AC=E7=83=A7=E7=BB=93?= =?UTF-8?q?=E3=80=81=E5=85=B3=E9=97=AD=E3=80=81=E8=8E=B7=E5=8F=96=E8=BD=AC?= =?UTF-8?q?=E5=A4=96=E5=8D=8F=E6=89=80=E9=9C=80=E6=95=B0=E6=8D=AE=E3=80=81?= =?UTF-8?q?=E8=BD=AC=E5=A4=96=E5=8D=8F(=E5=8D=95=E4=B8=AA/=E6=89=B9?= =?UTF-8?q?=E9=87=8F)=E3=80=81=E6=9B=B4=E6=94=B9=E8=BD=A6=E9=97=B4?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BC=98=E5=85=88=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desk/order/pojo/entity/YieldOrder.java | 53 ++++++ .../produce/pojo/dto/ListProProcessDTO.java | 22 +++ .../produce/pojo/dto/TransferBillDTO.java | 23 +++ .../desk/produce/pojo/dto/TurnTypeDTO.java | 22 +++ .../produce/pojo/dto/UpdatePriorityDTO.java | 21 +++ .../produce/pojo/dto/UpdateStatusDTO.java | 25 +++ .../desk/produce/pojo/entity/PlateAround.java | 77 +++++++++ .../desk/produce/pojo/entity/WorkOrder.java | 72 ++++---- .../desk/produce/pojo/entity/WorkPlanRun.java | 45 +++++ .../order/service/IYieldOrderService.java | 2 + .../service/impl/YieldOrderServiceImpl.java | 18 ++ .../controller/RbProduceManageController.java | 51 +++++- .../produce/mapper/PlateAroundMapper.java | 13 ++ .../produce/mapper/WorkPlanRunMapper.java | 13 ++ .../produce/service/IPlateAroundService.java | 14 ++ .../produce/service/IWorkOrderRunService.java | 10 +- .../produce/service/IWorkOrderService.java | 10 ++ .../produce/service/IWorkPlanRunService.java | 14 ++ .../service/impl/PlateAroundServiceImpl.java | 21 +++ .../service/impl/WorkOrderRunServiceImpl.java | 123 +++++++++++++- .../service/impl/WorkOrderServiceImpl.java | 154 +++++++++++++++++- .../service/impl/WorkPlanRunServiceImpl.java | 21 +++ 22 files changed, 778 insertions(+), 46 deletions(-) create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/ListProProcessDTO.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TransferBillDTO.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TurnTypeDTO.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdatePriorityDTO.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdateStatusDTO.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlanRun.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/PlateAroundMapper.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanRunMapper.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanRunService.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanRunServiceImpl.java diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java index 53e5d02f..5d4de997 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java @@ -24,6 +24,59 @@ public class YieldOrder extends BaseEntity { @TableField(exist = false) private static final long serialVersionUID = 1L; + /** + * 待接收 + */ + public static Integer CUR_STATUS_NORMAL = 0; + /** + * 大仓已接 + */ + public static Integer CUR_STATUS_STORAGE = 1; + /** + * 已派工 + */ + public static Integer CUR_STATUS_DISPATCHED = 2; + /** + * 已出库 + */ + public static Integer CUR_STATUS_OUT = 3; + /** + * 加工中 + */ + public static Integer CUR_STATUS_PROCESSING = 5; + /** + * 已完工 + */ + public static Integer CUR_STATUS_COMPLETED = 15; + /** + * 已关闭 + */ + public static Integer CUR_STATUS_VOIDED = 21; + /** + * 热表订单 + */ + public static Integer YIELD_TYPE_1 = 1; + /** + * 烧结订单 + */ + public static Integer YIELD_TYPE_2 = 2; + /** + * 玻璃饼 + */ + public static Integer YIELD_TYPE_3 = 3; + /** + * 壳体 + */ + public static Integer YIELD_TYPE_4 = 4; + /** + * 插针 + */ + public static Integer YIELD_TYPE_5 = 5; + /** + * 石墨模 + */ + public static Integer YIELD_TYPE_6 = 6; + /** * 作业中心 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/ListProProcessDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/ListProProcessDTO.java new file mode 100644 index 00000000..8ab96396 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/ListProProcessDTO.java @@ -0,0 +1,22 @@ +package org.springblade.desk.produce.pojo.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 获取转外协所需数据 数据传输对象实体类 + * @author litao + */ +@Data +public class ListProProcessDTO { + + @Schema(description = "车间订单ID集合") + private List woIds; + + @Schema(description = "转换类型:1-外协,2-厂内") + private Integer runType; + + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TransferBillDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TransferBillDTO.java new file mode 100644 index 00000000..6dcf8fc5 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TransferBillDTO.java @@ -0,0 +1,23 @@ +package org.springblade.desk.produce.pojo.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springblade.desk.produce.pojo.entity.WorkOrderRun; +import org.springblade.desk.produce.pojo.entity.WorkPlanRun; + +import java.util.List; + +/** + * 转外协(单个/批量) 数据传输对象实体类 + * @author litao + */ +@Data +public class TransferBillDTO { + + @Schema(description = "车间订单运行记录") + private List workOrderRuns; + + @Schema(description = "作业计划运行明细") + private List workPlanRuns; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TurnTypeDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TurnTypeDTO.java new file mode 100644 index 00000000..a86ca2e0 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TurnTypeDTO.java @@ -0,0 +1,22 @@ +package org.springblade.desk.produce.pojo.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 转烧结 数据传输对象实体类 + * @author litao + */ +@Data +public class TurnTypeDTO { + + @Schema(description = "生产订单id") + private Long id; + + @Schema(description = "订单类型") + private Integer yieldType; + + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdatePriorityDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdatePriorityDTO.java new file mode 100644 index 00000000..887e2892 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdatePriorityDTO.java @@ -0,0 +1,21 @@ +package org.springblade.desk.produce.pojo.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + +/** + * 更改车间订单优先级 数据传输对象实体类 + * @author litao + */ +@Data +public class UpdatePriorityDTO { + + @Schema(description = "生产订单id") + private Long id; + + @Schema(description = "需求交期") + private Date demandDate; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdateStatusDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdateStatusDTO.java new file mode 100644 index 00000000..a8bb2ad1 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdateStatusDTO.java @@ -0,0 +1,25 @@ +package org.springblade.desk.produce.pojo.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 修改订单状态 数据传输对象实体类 + * @author litao + */ +@Data +public class UpdateStatusDTO { + + @Schema(description = "车间订单ID集合") + private List idArr; + + @Schema(description = "状态") + private Integer status; + + @Schema(description = "备注") + private String memo; + + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java new file mode 100644 index 00000000..fdb9a5b7 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java @@ -0,0 +1,77 @@ +package org.springblade.desk.produce.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 镀前镀后 实体类 + * + * @author BladeX + */ +@Data +@TableName("MES_PLATE_AROUND") +@Schema(description = "PlateAround对象") +@EqualsAndHashCode(callSuper = true) +public class PlateAround extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 镀前入库 + */ + public static Short BEFORE_PLAT_IN = 1; + /** + * 镀前出库 + */ + public static Short BEFORE_PLAN_OUT = 2; + /** + * 镀后入库 + */ + public static Short AFTER_PLAN_IN = 3; + /** + * 状态 新建 + */ + public static Short CUR_STATUS_NEW = 1; + /** + * 状态 完成 + */ + public static Short CUR_STATUS_OK = 2; + + @Schema(description = "单号") + private String paCode; + + @Schema(description = "作业计划") + private Long wpId; + + @Schema(description = "班组") + private Long tsId; + + @Schema(description = "供应商") + private Long ocId; + + @Schema(description = "类型") + private Short paType; + + @Schema(description = "数量") + private Double quantity = 0d; + + @Schema(description = "重量") + private Double weight = 0d; + + @Schema(description = "制单时间") + private Date makeTime; + + @Schema(description = "制单人") + private Long makeMan; + + @Schema(description = "状态") + private Short curStatus = 1; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java index 5aecb6dd..a7f6c78a 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java @@ -26,104 +26,104 @@ public class WorkOrder extends BaseEntity { /** * 未下达 */ - public static Short RUN_STATUS_NORMAL = 1; + public static Integer RUN_STATUS_NORMAL = 1; /** * 已下达 */ - public static Short RUN_STATUS_ISSUED = 2; + public static Integer RUN_STATUS_ISSUED = 2; /** * 加工中 */ - public static Short RUN_STATUS_RECEIVE = 3; + public static Integer RUN_STATUS_RECEIVE = 3; /** * 检验中 */ - public static Short RUN_STATUS_CHECK = 4; + public static Integer RUN_STATUS_CHECK = 4; /** * 工艺变更 */ - public static Short RUN_STATUS_CRAFT_CHANGE = 5; + public static Integer RUN_STATUS_CRAFT_CHANGE = 5; /** * 审理中 */ - public static Short RUN_STATUS_HEAR = 13; + public static Integer RUN_STATUS_HEAR = 13; /** * 已完工 */ - public static Short RUN_STATUS_COMPLETED = 15; + public static Integer RUN_STATUS_COMPLETED = 15; /** * 已交接 */ - public static Short RUN_STATUS_HANDOVER = 17; + public static Integer RUN_STATUS_HANDOVER = 17; /** * 返工 */ - public static Short RUN_STATUS_REWORK = 19; + public static Integer RUN_STATUS_REWORK = 19; /** * 报废 */ - public static Short RUN_STATUS_SCRAP = 20; + public static Integer RUN_STATUS_SCRAP = 20; /** * 已关闭 */ - public static Short RUN_STATUS_VOIDED = 21; + public static Integer RUN_STATUS_VOIDED = 21; /** * 正常 */ - public static Short PRIORITY_NORMAL = 1; + public static Integer PRIORITY_NORMAL = 1; /** * 项目要求日期急件 */ - public static Short PRIORITY_PRO_IMP = 2; + public static Integer PRIORITY_PRO_IMP = 2; /** * 合同急件 */ - public static Short PRIORITY_PACT_IMP = 3; + public static Integer PRIORITY_PACT_IMP = 3; /** * 会议绩效急件 */ - public static Short PRIORITY_PERF_IMP = 4; + public static Integer PRIORITY_PERF_IMP = 4; /** * 调度标注急件 */ - public static Short PRIORITY_SCH_IMP = 5; + public static Integer PRIORITY_SCH_IMP = 5; /** * 1:正常 */ - public static Short APPROVAL_STATUS_NORMAL = 1; + public static Integer APPROVAL_STATUS_NORMAL = 1; /** * 2:审批中 */ - public static Short APPROVAL_STATUS_UNDER = 2; + public static Integer APPROVAL_STATUS_UNDER = 2; /** * 3:不通过 */ - public static Short APPROVAL_STATUS_FAIL = 3; + public static Integer APPROVAL_STATUS_FAIL = 3; /** * 4:通过 */ - public static Short APPROVAL_STATUS_VIA = 4; + public static Integer APPROVAL_STATUS_VIA = 4; /** * 整单外协 */ - public static Short OEM_TYPE_WHOLE = 1; + public static Integer OEM_TYPE_WHOLE = 1; /** * 工序外协 */ - public static Short OEM_TYPE_SINGLE = 2; + public static Integer OEM_TYPE_SINGLE = 2; /** * 未领取 */ - public static Short PICKING_STATUS_NOT = 0; + public static Integer PICKING_STATUS_NOT = 0; /** * 已领取 */ - public static Short PICKING_STATUS_OK = 1; + public static Integer PICKING_STATUS_OK = 1; - public static Map runStatusMap = new HashMap<>(11); - public static Map priorityMap = new HashMap(5); - public static Map approvalStatusMap = new HashMap(4); - public static Map pickingStatusMap = new HashMap(2); + public static Map runStatusMap = new HashMap<>(11); + public static Map priorityMap = new HashMap(5); + public static Map approvalStatusMap = new HashMap(4); + public static Map pickingStatusMap = new HashMap(2); static { runStatusMap.put(RUN_STATUS_NORMAL, "未下达"); @@ -170,12 +170,12 @@ public class WorkOrder extends BaseEntity { * 试验数量 */ @Schema(description = "试验数量") - private Short testQty; + private Integer testQty; /** * 损耗数量 */ @Schema(description = "损耗数量") - private Short lossQty; + private Integer lossQty; /** * 镀层单件定额 */ @@ -230,7 +230,7 @@ public class WorkOrder extends BaseEntity { * 会议要求周期 */ @Schema(description = "会议要求周期") - private Short meetCycle; + private Integer meetCycle; /** * 备注 */ @@ -240,12 +240,12 @@ public class WorkOrder extends BaseEntity { * 排产状态;1、已下发 */ @Schema(description = "排产状态;1、已下发") - private Short schedStatus; + private Integer schedStatus; /** * 是否已准备(烧结车间订单专用,默认为空,1是代表已准备) */ @Schema(description = "是否已准备(烧结车间订单专用,默认为空,1是代表已准备)") - private Short readStatus; + private Integer readStatus; /** * 返工单号(仅状态为19的车间订单在生产监控展示) */ @@ -255,7 +255,7 @@ public class WorkOrder extends BaseEntity { * 原订单状态 */ @Schema(description = "原订单状态") - private Short oldRunStatus; + private Integer oldRunStatus; /** * 返工入库类型;0:按B号;1:按返工描述 */ @@ -310,7 +310,7 @@ public class WorkOrder extends BaseEntity { * 领料状态;0.未领,1.已领 */ @Schema(description = "领料状态;0.未领,1.已领") - private Short pickingStatus; + private Integer pickingStatus; /** * 是否外协 */ @@ -330,7 +330,7 @@ public class WorkOrder extends BaseEntity { * 审批状态;1:正常,2:审批中,3:不通过,4:通过 */ @Schema(description = "审批状态;1:正常,2:审批中,3:不通过,4:通过") - private Short approvalStatus; + private Integer approvalStatus; /** * 报废数量 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlanRun.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlanRun.java new file mode 100644 index 00000000..5a7a7eff --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlanRun.java @@ -0,0 +1,45 @@ +package org.springblade.desk.produce.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 作业计划运行明细 实体类 + * + * @author BladeX + */ +@Data +@TableName("MES_WORK_ORDER_RUN") +@Schema(description = "WorkPlanRun对象") +@EqualsAndHashCode(callSuper = true) +public class WorkPlanRun extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "车间订单运行记录") + private Long worId; + + @Schema(description = "作业计划工序") + private Long wpId; + + @Schema(description = "工艺能力") + private Long caId; + + @Schema(description = "处理工序") + private Boolean handle; + + @Schema(description = "计划开始") + private Date startTime; + + @Schema(description = "计划结束") + private Date endTime; + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java index 05a0efa2..b10f60b6 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java @@ -175,4 +175,6 @@ public interface IYieldOrderService extends BaseService { * @return: YieldOrder */ YieldOrder getYoByCardNo(String cardNo); + + void updateYieldStatus(Long yoId, Integer curStatusVoided, double v); } 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 276789e5..49ef4c64 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 @@ -33,6 +33,8 @@ import org.springblade.desk.order.pojo.entity.YieldOrderCraft; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.desk.order.service.IYieldOrderCraftService; import org.springblade.desk.order.service.IYieldOrderService; +import org.springblade.desk.produce.mapper.WorkOrderMapper; +import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -57,6 +59,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl listWo = workOrderMapper.selectList(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, yo.getId())); + boolean completed = listWo.stream().map(wo -> WorkOrder.RUN_STATUS_VOIDED.equals(wo.getRunStatus())).findAny().isPresent(); + if (completed) { + yo.setStatus(curStatus); + } + // 生产计划状态变为已完工时,推送至新mes,更新订单状态 +// httpRequestService.pushYieldOrderStatusToNewMes(yo.getCardNo(), curStatus); + } + } + /** * 验证零件子件信息 * diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java index dc89ab52..55f04e5e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java @@ -1,6 +1,5 @@ package org.springblade.desk.produce.controller; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; @@ -9,13 +8,13 @@ import lombok.RequiredArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; -import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; -import org.springblade.desk.produce.pojo.dto.WorkOrderDTO; +import org.springblade.desk.produce.pojo.dto.*; import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.vo.BatchPrepareVO; import org.springblade.desk.produce.pojo.vo.WorkOrderVO; +import org.springblade.desk.produce.service.IWorkOrderRunService; import org.springblade.desk.produce.service.IWorkOrderService; import org.springblade.desk.produce.wrapper.WorkOrderWrapper; import org.springframework.web.bind.annotation.*; @@ -32,6 +31,8 @@ public class RbProduceManageController extends BladeController { private final IWorkOrderService workOrderService; + private final IWorkOrderRunService workOrderRunService; + @GetMapping("/page") @ApiOperationSupport(order = 1) @Operation(summary = "车间订单列表分页", description = "传入WorkOrderVO") @@ -49,10 +50,52 @@ public class RbProduceManageController extends BladeController { @PostMapping(value = "/inBatches") @ApiOperationSupport(order = 3) - @Operation(summary = "分批", description = "传入WorkOrderVO") + @Operation(summary = "分批", description = "传入WorkOrder") public R inBatches(@RequestBody WorkOrder workOrder) { Long userId = AuthUtil.getUserId(); return R.data(workOrderService.inBatches(workOrder.getId(), workOrder, userId)); } + @PostMapping(value = "/turnType") + @ApiOperationSupport(order = 4) + @Operation(summary = "转烧结", description = "传入YieldOrder") + public R turnType(@RequestBody TurnTypeDTO turnTypeDTO) { + Long userId = AuthUtil.getUserId(); + return R.data(workOrderService.turnType(turnTypeDTO.getId(), turnTypeDTO.getYieldType(), userId)); + } + + @PostMapping(value = "/updateStatus") + @ApiOperationSupport(order = 5) + @Operation(summary = "关闭", description = "传入UpdateStatusDTO") + public R updateStatus(@RequestBody UpdateStatusDTO updateStatusDTO) { + Long userId = AuthUtil.getUserId(); + return R.data(workOrderService.updateStatus(updateStatusDTO.getIdArr(), updateStatusDTO.getStatus(), userId, updateStatusDTO.getMemo())); + } + + @PostMapping(value = "/listProProcess") + @ApiOperationSupport(order = 6) + @Operation(summary = "获取转外协所需数据", description = "传入produceManageDTO") + public R listProProcess(@RequestBody ListProProcessDTO listProProcessDTO) { + return R.data(workOrderRunService.listProProcess(listProProcessDTO)); + } + + @PostMapping(value = "/transferBill") + @ApiOperationSupport(order = 7) + @Operation(summary = "转外协(单个/批量)", description = "传入produceManageDTO") + public R transferBill(@RequestBody TransferBillDTO transferBillDTO) { + Long userId = AuthUtil.getUserId(); + return R.data(workOrderService.transferBill(transferBillDTO.getWorkOrderRuns(), transferBillDTO.getWorkPlanRuns())); + } + + @PostMapping(value = "/updatePriority") + @ApiOperationSupport(order = 8) + @Operation(summary = "更改车间订单优先级", description = "传入WorkOrder") + public R updatePriority(@RequestBody UpdatePriorityDTO updatePriorityDTO) { + WorkOrder wo = workOrderService.getById(updatePriorityDTO.getId()); + wo.setPriority(WorkOrder.PRIORITY_SCH_IMP); + wo.setDemandDate(updatePriorityDTO.getDemandDate()); + return R.data(workOrderService.updateById(wo)); + } + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/PlateAroundMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/PlateAroundMapper.java new file mode 100644 index 00000000..75735dbb --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/PlateAroundMapper.java @@ -0,0 +1,13 @@ +package org.springblade.desk.produce.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.desk.produce.pojo.entity.PlateAround; + +/** + * 镀前镀后 Mapper 接口 + * + * @author BladeX + */ +public interface PlateAroundMapper extends BaseMapper { + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanRunMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanRunMapper.java new file mode 100644 index 00000000..1acb59f8 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanRunMapper.java @@ -0,0 +1,13 @@ +package org.springblade.desk.produce.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.desk.produce.pojo.entity.WorkPlanRun; + +/** + * 作业计划运行明细 Mapper 接口 + * + * @author BladeX + */ +public interface WorkPlanRunMapper extends BaseMapper { + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java new file mode 100644 index 00000000..e5b6e247 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java @@ -0,0 +1,14 @@ +package org.springblade.desk.produce.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.produce.pojo.entity.PlateAround; + +/** + * 镀前镀后 服务类 + * + * @author BladeX + */ +public interface IPlateAroundService extends BaseService { + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java index e8b6947c..eeb5ddf5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java @@ -1,7 +1,11 @@ package org.springblade.desk.produce.service; import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.produce.pojo.dto.ListProProcessDTO; import org.springblade.desk.produce.pojo.entity.WorkOrderRun; +import org.springblade.desk.produce.pojo.entity.WorkPlanRun; + +import java.util.List; /** * 车间订单运行记录表 服务类 @@ -10,5 +14,9 @@ import org.springblade.desk.produce.pojo.entity.WorkOrderRun; */ public interface IWorkOrderRunService extends BaseService { - + /** + *

方法名: listProProcess

+ *

方法描述: 转单加载组装数据

+ */ + List listProProcess(ListProProcessDTO listProProcessDTO); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java index 069fe4e9..c0e3cb27 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java @@ -4,9 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.produce.pojo.dto.WorkOrderDTO; import org.springblade.desk.produce.pojo.entity.WorkOrder; +import org.springblade.desk.produce.pojo.entity.WorkOrderRun; +import org.springblade.desk.produce.pojo.entity.WorkPlanRun; import org.springblade.desk.produce.pojo.vo.BatchPrepareVO; import org.springblade.desk.produce.pojo.vo.WorkOrderVO; +import java.util.List; + /** * 车间订单表 服务类 * @@ -26,4 +30,10 @@ public interface IWorkOrderService extends BaseService { BatchPrepareVO batchesPrepare(Long woId); boolean inBatches(Long oldWoId, WorkOrder workOrder, Long userId); + + boolean turnType(Long id, Integer yieldType, Long userId); + + boolean updateStatus(List idArr, Integer status, Long userId, String memo); + + boolean transferBill(List workOrderRuns, List workPlanRuns); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanRunService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanRunService.java new file mode 100644 index 00000000..e079bd6a --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanRunService.java @@ -0,0 +1,14 @@ +package org.springblade.desk.produce.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.produce.pojo.entity.WorkPlanRun; + +/** + * 作业计划运行明细 服务类 + * + * @author BladeX + */ +public interface IWorkPlanRunService extends BaseService { + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java new file mode 100644 index 00000000..846f0729 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java @@ -0,0 +1,21 @@ +package org.springblade.desk.produce.service.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.produce.mapper.PlateAroundMapper; +import org.springblade.desk.produce.pojo.entity.PlateAround; +import org.springblade.desk.produce.service.IPlateAroundService; +import org.springframework.stereotype.Service; + +/** + * 镀前镀后 服务实现类 + * + * @author BladeX + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PlateAroundServiceImpl extends BaseServiceImpl implements IPlateAroundService { + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java index 1638d681..674cd711 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java @@ -1,20 +1,141 @@ package org.springblade.desk.produce.service.impl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; +import org.springblade.desk.dashboard.service.IBsProcessSetService; import org.springblade.desk.produce.mapper.WorkOrderRunMapper; +import org.springblade.desk.produce.pojo.dto.ListProProcessDTO; import org.springblade.desk.produce.pojo.entity.WorkOrderRun; +import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.desk.produce.pojo.entity.WorkPlanRun; import org.springblade.desk.produce.service.IWorkOrderRunService; +import org.springblade.desk.produce.service.IWorkPlanService; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import java.time.Instant; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; import java.util.List; +import static com.alibaba.fastjson2.util.DateUtils.DEFAULT_ZONE_ID; + /** * 车间订单运行记录表 服务实现类 * * @author BladeX - * @since 2025-11-28 */ @Service +@RequiredArgsConstructor public class WorkOrderRunServiceImpl extends BaseServiceImpl implements IWorkOrderRunService { + private final IWorkPlanService prWorkPlanService; + + private final IBsProcessSetService bsProcessSetService; + + @Override + public List listProProcess(ListProProcessDTO listProProcessDTO) { + List woIds = listProProcessDTO.getWoIds(); + Integer runType = listProProcessDTO.getRunType(); + if (CollectionUtils.isEmpty(woIds) || runType == null) { + return null; + } + Long curWoId = woIds.get(0); + List wpList = prWorkPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, curWoId)); + List wprList = new ArrayList<>(wpList.size()); + // 拿出第一个单子对应的可以派外协的工序 + String proName = ""; + for (WorkPlan wp : wpList) { + WorkPlanRun wpr = new WorkPlanRun(); + //验证 + if (!this.checkWp(wp, runType)) { + continue; + } + //转厂内时所有工序自动标记 + if (WorkOrderRun.RUN_TYPE_2.equals(runType)) { + wpr.setHandle(Boolean.TRUE); + } else { + wpr.setHandle(Boolean.FALSE); + } + + //组装工序号和工序id,用于批量验证是否一致 + if (StringUtils.isBlank(proName)) { + proName = wp.getOrders() + "_" + wp.getPpsId(); + } else { + proName = proName + "," + wp.getOrders() + "_" + wp.getPpsId(); + } + wpr.setCaId(wp.getCaId()); + wpr.setStartTime(localDateTimeToDate(wp.getStartTime())); + wpr.setEndTime(localDateTimeToDate(wp.getEndTime())); + wpr.setWpId(wp.getWoId()); + wprList.add(wpr); + } + + //如果是批量操作 + if (woIds.size() > 1) { + //从集合里面提出首单id + woIds.remove(curWoId); + + //验证其他车间订单是否满足条件 + for (Long aLong : woIds) { + wpList = prWorkPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, aLong)); + // 拿出其他单子可以派外协的工序与第一条做对比 + String otherProName = ""; + for (WorkPlan wp : wpList) { + + //验证 + if (!this.checkWp(wp, runType)) { + continue; + } + //组装工序号和工序id,用于批量验证是否一致 + if (StringUtils.isBlank(otherProName)) { + otherProName = wp.getOrders() + "_" + wp.getPpsId(); + } else { + otherProName = otherProName + "," + wp.getOrders() + "_" + wp.getPpsId(); + } + } + if (!proName.equals(otherProName)) { + throw new ServiceException("请选择相同的可转出的工序进行操作!!!"); + } + } + } + return wprList; + } + + private boolean checkWp(WorkPlan wp, Integer runType) { + //不分派工序不能操作 + BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId()); + if (processSet == null) { + return false; + } + if ("1".equals(processSet.getIsDispatch())) { + return false; + } + //如果是转厂内,则非厂外的工序跳过 + if (WorkOrderRun.RUN_TYPE_2.equals(runType) && "0".equals(wp.getOem())) { + return false; + } + return true; + } + + /** + * LocalDateTime 转 Date + * @param localDateTime + * @return + */ + private Date localDateTimeToDate(LocalDateTime localDateTime) { + // 空值校验,避免空指针异常 + if (localDateTime == null) { + return null; + } + // 1. LocalDateTime + 时区 → ZonedDateTime → Instant + Instant instant = localDateTime.atZone(DEFAULT_ZONE_ID).toInstant(); + // 2. Instant → Date + return Date.from(instant); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index 85cd5dc7..c120d83c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -29,10 +29,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.rmi.ServerException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.util.*; /** * 车间订单表 服务实现类 @@ -63,6 +60,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectWorkOrderPage(IPage page, WorkOrderDTO workOrder) { return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder)); @@ -154,6 +155,151 @@ public class WorkOrderServiceImpl extends BaseServiceImpl idArr, Integer runStatus, Long userId, String memo) { + for (Long aLong : idArr) { + WorkOrder workOrder = this.getById(aLong); + workOrder.setMemo(memo); + this.updateStatusFun(workOrder, runStatus, userId); + } + return true; + } + + @Override + public boolean transferBill(List workOrderRunList, List wprList) { + if (wprList == null || wprList.isEmpty()) { + return false; + } + + WorkOrder wo; + List wpList; + List newWprList; + + //组装选择好的工序 + Map map = new HashMap<>(); + for (WorkPlanRun item : wprList) { + WorkPlan workPlan = workPlanService.getById(item.getWpId()); + map.put(workPlan.getOrders() + "_" + workPlan.getPpsId(), item); + } + + for (WorkOrderRun workOrderRun : workOrderRunList) { + + wo = this.getById(workOrderRun.getWoId()); + // 拿出对应的运行记录 + wpList = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, wo.getId())); + newWprList = new ArrayList<>(wpList.size()); + WorkPlanRun oldWpr; + WorkPlanRun wpr; + for (WorkPlan wp : wpList) { + //验证 + if (!this.checkWp(wp, workOrderRun.getRunType())) { + continue; + } + //获取到通用的工序信息 + oldWpr = map.get(wp.getOrders() + "_" + wp.getPpsId()); + //创建各自的工序运行信息 + wpr = new WorkPlanRun(); + wpr.setWpId(wp.getId()); + wpr.setCaId(oldWpr.getCaId()); + wpr.setHandle(oldWpr.getHandle()); + wpr.setStartTime(oldWpr.getStartTime()); + wpr.setEndTime(oldWpr.getEndTime()); + newWprList.add(wpr); + } + + workOrderRun.setOutCustomer(wo.getOcId()); + workOrderRun.setOutTeam(wo.getTsId()); + workOrderRun.setWoCode(wo.getWoCode()); + workOrderRun.setSystemData("0"); + workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_UNDER); + workOrderRunService.save(workOrderRun); + + wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_UNDER); + + Boolean frontHandle = null; + for (WorkPlanRun item : newWprList) { + + //当前序选中,上序不允许不选 + if (frontHandle != null && !frontHandle && item.getHandle()) { + if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType())) { + throw new ServiceException("product.frontHandle"); + } else if (WorkOrderRun.RUN_TYPE_2.equals(workOrderRun.getRunType())) { + throw new ServiceException("product.nextHandle"); + } + } + item.setWorId(workOrderRun.getId()); + workPlanRunService.save(item); + + frontHandle = item.getHandle(); + } + //验证当前工序是否有镀前入库 + WorkPlan wp = workPlanService.getById(wo.getWpId()); + if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType()) && wp.getStatus() > WorkPlan.STATUS_START) { + PlateAround pa = plateAroundService.getOne(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getWpId, wp.getId()).eq(PlateAround::getPaType, PlateAround.BEFORE_PLAT_IN)); + if (pa == null) { + //下序外协,当前工序需要镀前入库 + throw new ServiceException("未找到工序【"+wp.getPpsId()+"】镀前入库记录,无法转单!"); + } + } + } + return true; + } + + private boolean checkWp(WorkPlan wp, Short runType) { + //不分派工序不能操作 + BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId()); + if (processSet == null) { + return false; + } + if ("1".equals(processSet.getIsDispatch())) { + return false; + } + //如果是转厂内,则非厂外的工序跳过 + if (WorkOrderRun.RUN_TYPE_2.equals(runType) && "0".equals(wp.getOem())) { + return false; + } + return true; + } + + private void updateStatusFun(WorkOrder workOrder, Integer runStatus, Long userId) { + workOrder.setRunStatus(runStatus); + if (WorkOrder.RUN_STATUS_VOIDED.equals(runStatus)) { + //整单报废 + yieldOrderService.updateYieldStatus(workOrder.getYoId(), YieldOrder.CUR_STATUS_VOIDED, 0d); + WorkOrderRun workOrderRun = workOrderRunService.getById(workOrder.getWorId()); + if (workOrderRun != null) { + workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_VOIDED); + workOrderRunService.updateById(workOrderRun); + } + workOrder.setCloseMan(userId); + workOrder.setCloseTime(new Date()); + // 如果是烧结部件,子件同样关闭 + YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId()); + if (YieldOrder.YIELD_TYPE_2.equals(yieldOrder.getYieldType())) { + List prWorkOrderList = this.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, yieldOrder.getId())); + if (prWorkOrderList != null && !prWorkOrderList.isEmpty()) { + for (WorkOrder prWorkOrder : prWorkOrderList) { + if (prWorkOrder.getRunStatus() < WorkOrder.RUN_STATUS_COMPLETED) { + // 修改为关闭 + prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_VOIDED); + this.updateById(prWorkOrder); + } + } + } + } + } + } + private void addWorkOrder(WorkOrder wo) { wo.setInventoryQty(0); wo.setCreateTime(new Date()); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanRunServiceImpl.java new file mode 100644 index 00000000..0c4e2e71 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanRunServiceImpl.java @@ -0,0 +1,21 @@ +package org.springblade.desk.produce.service.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.produce.mapper.WorkPlanRunMapper; +import org.springblade.desk.produce.pojo.entity.WorkPlanRun; +import org.springblade.desk.produce.service.IWorkPlanRunService; +import org.springframework.stereotype.Service; + +/** + * 作业计划运行明细 服务实现类 + * + * @author BladeX + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WorkPlanRunServiceImpl extends BaseServiceImpl implements IWorkPlanRunService { + +}