车间订单接口开发:转烧结、关闭、获取转外协所需数据、转外协(单个/批量)、更改车间订单优先级

develop-QA
李涛 3 months ago
parent 67ec26d196
commit 9d97f79fb5
  1. 53
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java
  2. 22
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/ListProProcessDTO.java
  3. 23
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TransferBillDTO.java
  4. 22
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TurnTypeDTO.java
  5. 21
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdatePriorityDTO.java
  6. 25
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdateStatusDTO.java
  7. 77
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java
  8. 72
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java
  9. 45
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlanRun.java
  10. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  11. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  12. 51
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java
  13. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/PlateAroundMapper.java
  14. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanRunMapper.java
  15. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java
  16. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java
  17. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  18. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanRunService.java
  19. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java
  20. 123
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  21. 154
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  22. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanRunServiceImpl.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;
/**
* 作业中心
*/

@ -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<Long> woIds;
@Schema(description = "转换类型:1-外协,2-厂内")
private Integer runType;
}

@ -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<WorkOrderRun> workOrderRuns;
@Schema(description = "作业计划运行明细")
private List<WorkPlanRun> workPlanRuns;
}

@ -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;
}

@ -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;
}

@ -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<Long> idArr;
@Schema(description = "状态")
private Integer status;
@Schema(description = "备注")
private String memo;
}

@ -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;
}

@ -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<Short, String> runStatusMap = new HashMap<>(11);
public static Map<Short, String> priorityMap = new HashMap<Short, String>(5);
public static Map<Short, String> approvalStatusMap = new HashMap<Short, String>(4);
public static Map<Short, String> pickingStatusMap = new HashMap<Short, String>(2);
public static Map<Integer, String> runStatusMap = new HashMap<>(11);
public static Map<Integer, String> priorityMap = new HashMap<Integer, String>(5);
public static Map<Integer, String> approvalStatusMap = new HashMap<Integer, String>(4);
public static Map<Integer, String> pickingStatusMap = new HashMap<Integer, String>(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;
/**
* 报废数量
*/

@ -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;
}

@ -175,4 +175,6 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
* @return: YieldOrder
*/
YieldOrder getYoByCardNo(String cardNo);
void updateYieldStatus(Long yoId, Integer curStatusVoided, double v);
}

@ -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<YieldOrderMapper, Yie
private final IDsCraftService dsCraftService;
private final IDsProcessService dsProcessService;
private final WorkOrderMapper workOrderMapper;
@Value("${business.oldMes.url}")
private String oldMesUrl;
@ -648,6 +651,21 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return yieldOrder;
}
@Override
public void updateYieldStatus(Long yoId, Integer curStatus, double v) {
YieldOrder yo = this.getById(yoId);
if (YieldOrder.CUR_STATUS_VOIDED.equals(curStatus)) {
//整单报废
List<WorkOrder> 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);
}
}
/**
* 验证零件子件信息
*

@ -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));
}
}

@ -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<PlateAround> {
}

@ -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<WorkPlanRun> {
}

@ -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<PlateAround> {
}

@ -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<WorkOrderRun> {
/**
* <p>方法名: listProProcess </p>
* <p>方法描述: 转单加载组装数据 </p>
*/
List<WorkPlanRun> listProProcess(ListProProcessDTO listProProcessDTO);
}

@ -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<WorkOrder> {
BatchPrepareVO batchesPrepare(Long woId);
boolean inBatches(Long oldWoId, WorkOrder workOrder, Long userId);
boolean turnType(Long id, Integer yieldType, Long userId);
boolean updateStatus(List<Long> idArr, Integer status, Long userId, String memo);
boolean transferBill(List<WorkOrderRun> workOrderRuns, List<WorkPlanRun> workPlanRuns);
}

@ -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<WorkPlanRun> {
}

@ -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<PlateAroundMapper, PlateAround> implements IPlateAroundService {
}

@ -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<WorkOrderRunMapper, WorkOrderRun> implements IWorkOrderRunService {
private final IWorkPlanService prWorkPlanService;
private final IBsProcessSetService bsProcessSetService;
@Override
public List<WorkPlanRun> listProProcess(ListProProcessDTO listProProcessDTO) {
List<Long> woIds = listProProcessDTO.getWoIds();
Integer runType = listProProcessDTO.getRunType();
if (CollectionUtils.isEmpty(woIds) || runType == null) {
return null;
}
Long curWoId = woIds.get(0);
List<WorkPlan> wpList = prWorkPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, curWoId));
List<WorkPlanRun> 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);
}
}

@ -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<WorkOrderMapper, WorkO
private final IPlanTestService planTestService;
private final IWorkPlanRunService workPlanRunService;
private final IPlateAroundService plateAroundService;
@Override
public IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO workOrder) {
return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder));
@ -154,6 +155,151 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return true;
}
@Override
public boolean turnType(Long id, Integer yieldType, Long userId) {
YieldOrder yieldOrder = yieldOrderService.getById(id);
if (yieldOrder == null || yieldType == null) {
return false;
}
yieldOrder.setYieldType(yieldType);
return yieldOrderService.updateById(yieldOrder);
}
@Override
public boolean updateStatus(List<Long> 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<WorkOrderRun> workOrderRunList, List<WorkPlanRun> wprList) {
if (wprList == null || wprList.isEmpty()) {
return false;
}
WorkOrder wo;
List<WorkPlan> wpList;
List<WorkPlanRun> newWprList;
//组装选择好的工序
Map<String, WorkPlanRun> 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<WorkOrder> 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());

@ -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<WorkPlanRunMapper, WorkPlanRun> implements IWorkPlanRunService {
}
Loading…
Cancel
Save