Merge branch 'master' into develop-QA

develop-QA
Tom Li 3 months ago
commit b7485dc7c5
  1. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java
  2. 33
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/WorkOrderDTO.java
  3. 25
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/BsProcedureTeam.java
  4. 67
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MacToolUse.java
  5. 73
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MakeRec.java
  6. 438
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java
  7. 170
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java
  8. 266
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java
  9. 29
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/BatchPrepareVO.java
  10. 97
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkOrderVO.java
  11. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/InspectionTask.java
  12. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/WorkPlanItem.java
  13. 197
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Prtbasdef.java
  14. 1
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Prtmsg.java
  15. 11
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Rrbwoerptomes.java
  16. 32
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/view/MesRbPk.java
  17. 26
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/view/MesRbSjso.java
  18. 32
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/view/MesRbSodelrecwx.java
  19. 32
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/view/MesRbSodelreczg.java
  20. 32
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/view/MesRbWxpromotion.java
  21. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/task/OrderEnvJob.java
  22. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/task/OrderSafeJob.java
  23. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobtransfer/controller/CertificateMaintenanceController.java
  24. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  25. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  26. 58
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java
  27. 17
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/BsProcedureTeamMapper.java
  28. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/BsProcedureTeamMapper.xml
  29. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java
  30. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MakeRecMapper.java
  31. 37
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java
  32. 165
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml
  33. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java
  34. 36
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml
  35. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java
  36. 49
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml
  37. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IBsProcedureTeamService.java
  38. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java
  39. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMakeRecService.java
  40. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java
  41. 29
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  42. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java
  43. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/BsProcedureTeamServiceImpl.java
  44. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java
  45. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java
  46. 20
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  47. 454
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  48. 216
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java
  49. 40
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/wrapper/WorkOrderWrapper.java
  50. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IWorkPlanItemDetailService.java
  51. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IWorkPlanItemService.java
  52. 28
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/WorkPlanItemDetailServiceImpl.java
  53. 48
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/WorkPlanItemServiceImpl.java
  54. 21
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSjsoMapper.java
  55. 9
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSjsoMapper.xml
  56. 21
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSodelrecwxMapper.java
  57. 9
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSodelrecwxMapper.xml
  58. 22
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWxpromotionMapper.java
  59. 9
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWxpromotionMapper.xml
  60. 14
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbSjsoService.java
  61. 14
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbSodelrecwxService.java
  62. 14
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbWxpromotionService.java
  63. 28
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbSjsoServiceImpl.java
  64. 26
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbSodelrecwxServiceImpl.java
  65. 28
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWxpromotionServiceImpl.java

@ -125,7 +125,7 @@ public class PrReworkProcessEntity extends BaseEntity {
* 关键工序0-1-
*/
@Schema(description = "关键工序:0-否,1-是")
private Short cruxProcess;
private String cruxProcess;
/**
* 零件号
*/

@ -0,0 +1,33 @@
package org.springblade.desk.produce.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 车间订单表 数据传输对象实体类
* @author AAA
*/
@Data
public class WorkOrderDTO {
@Schema(description = "订单类型:1-热表,2-烧结,3-玻璃饼,4-壳体,5-插针,6-石墨模")
private Short yieldType;
@Schema(description = "运行状态:1.正常,2.已下达,3.加工中,4.检验中,13.审理中,14.返工中,15.已完工,21已作废")
private Integer runStatus;
@Schema(description = "流程卡号")
private String cardNo;
@Schema(description = "零件号")
private String partCode;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "车间订单号")
private String woCode;
@Schema(description = "计划单号")
private String yoCode;
}

@ -0,0 +1,25 @@
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;
/**
* 工序下的班组 实体类
* @author litao
*/
@Data
@TableName("bs_procedure_team")
@Schema(description = "BsProcedureTeam对象")
@EqualsAndHashCode(callSuper = true)
public class BsProcedureTeam extends BaseEntity {
@Schema(description = "工序id")
private Long ppsId;
@Schema(description = "班组id")
private Long tsId;
}

@ -0,0 +1,67 @@
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 litao
*/
@Data
@TableName("MES_MAC_TOOL_USE")
@Schema(description = "MacToolUse对象")
@EqualsAndHashCode(callSuper = true)
public class MacToolUse extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "追溯批号")
private String mtnCode;
@Schema(description = "作业计划")
private Long wpId;
@Schema(description = "设备")
private Long equipmentCard;
@Schema(description = "飞靶")
private Long bsFeiBaSet;
@Schema(description = "挂具")
private Long bsRackSet;
@Schema(description = "绑定人")
private Long createMan;
@Schema(description = "绑定时间")
private Date bindTime;
@Schema(description = "自动解绑时间")
private Date unBuildTime;
@Schema(description = "手动解绑时间")
private Date manualUnBuildTime;
@Schema(description = "挂次号")
private String hangNum;
@Schema(description = "是否完成")
private Integer finished;
@Schema(description = "维护的电子档案模板")
private String rfpId;
@Schema(description = "电子档案序号;1.自动前,2、自动,3、自动后")
private String mtuIndex = "2";
@Schema(description = "绑定类型")
private String bindType;
}

@ -0,0 +1,73 @@
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 litao
*/
@Data
@TableName("MES_MAKE_REC")
@Schema(description = "MakeRec对象")
@EqualsAndHashCode(callSuper = true)
public class MakeRec extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "工序id")
private Long wpId;
@Schema(description = "操作工")
private Long worker;
@Schema(description = "报工日期")
private Date makeTime;
@Schema(description = "加工数量")
private Double workQty = 0d;
@Schema(description = "报废数量")
private Integer scrapQty = 0;
@Schema(description = "色标数量")
private Double flagQty = 0d;
@Schema(description = "标颜色1")
private String flagColourOne;
@Schema(description = "标颜色2")
private String flagColourTwo;
@Schema(description = "标油墨")
private String flagInk;
@Schema(description = "标物料")
private String flagMatter;
@Schema(description = "色带数量")
private Double beltQty = 0d;
@Schema(description = "带颜色1")
private String beltColourOne;
@Schema(description = "带颜色2")
private String beltColourTwo;
@Schema(description = "色油墨")
private String beltInk;
@Schema(description = "色物料")
private String beltMatter;
@Schema(description = "备注")
private String memo;
}

@ -0,0 +1,438 @@
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.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 车间订单表 实体类
* @author litao
* @since 2026-1-16
*/
@Data
@TableName("MES_WORK_ORDER")
@Schema(description = "WorkOrder对象")
@EqualsAndHashCode(callSuper = true)
public class WorkOrder extends BaseEntity {
/**
* 未下达
*/
public static Short RUN_STATUS_NORMAL = 1;
/**
* 已下达
*/
public static Short RUN_STATUS_ISSUED = 2;
/**
* 加工中
*/
public static Short RUN_STATUS_RECEIVE = 3;
/**
* 检验中
*/
public static Short RUN_STATUS_CHECK = 4;
/**
* 工艺变更
*/
public static Short RUN_STATUS_CRAFT_CHANGE = 5;
/**
* 审理中
*/
public static Short RUN_STATUS_HEAR = 13;
/**
* 已完工
*/
public static Short RUN_STATUS_COMPLETED = 15;
/**
* 已交接
*/
public static Short RUN_STATUS_HANDOVER = 17;
/**
* 返工
*/
public static Short RUN_STATUS_REWORK = 19;
/**
* 报废
*/
public static Short RUN_STATUS_SCRAP = 20;
/**
* 已关闭
*/
public static Short RUN_STATUS_VOIDED = 21;
/**
* 正常
*/
public static Short PRIORITY_NORMAL = 1;
/**
* 项目要求日期急件
*/
public static Short PRIORITY_PRO_IMP = 2;
/**
* 合同急件
*/
public static Short PRIORITY_PACT_IMP = 3;
/**
* 会议绩效急件
*/
public static Short PRIORITY_PERF_IMP = 4;
/**
* 调度标注急件
*/
public static Short PRIORITY_SCH_IMP = 5;
/**
* 1:正常
*/
public static Short APPROVAL_STATUS_NORMAL = 1;
/**
* 2:审批中
*/
public static Short APPROVAL_STATUS_UNDER = 2;
/**
* 3:不通过
*/
public static Short APPROVAL_STATUS_FAIL = 3;
/**
* 4:通过
*/
public static Short APPROVAL_STATUS_VIA = 4;
/**
* 整单外协
*/
public static Short OEM_TYPE_WHOLE = 1;
/**
* 工序外协
*/
public static Short OEM_TYPE_SINGLE = 2;
/**
* 未领取
*/
public static Short PICKING_STATUS_NOT = 0;
/**
* 已领取
*/
public static Short 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);
static {
runStatusMap.put(RUN_STATUS_NORMAL, "未下达");
runStatusMap.put(RUN_STATUS_ISSUED, "已下达");
runStatusMap.put(RUN_STATUS_RECEIVE, "加工中");
runStatusMap.put(RUN_STATUS_CHECK, "检验中");
runStatusMap.put(RUN_STATUS_CRAFT_CHANGE, "工艺变更");
runStatusMap.put(RUN_STATUS_HEAR, "审理中");
runStatusMap.put(RUN_STATUS_COMPLETED, "已完工");
runStatusMap.put(RUN_STATUS_HANDOVER, "已交接");
runStatusMap.put(RUN_STATUS_REWORK, "已返工");
runStatusMap.put(RUN_STATUS_SCRAP, "已报废");
runStatusMap.put(RUN_STATUS_VOIDED, "已关闭");
priorityMap.put(PRIORITY_NORMAL, "正常");
priorityMap.put(PRIORITY_PRO_IMP, "项目要求日期急件");
priorityMap.put(PRIORITY_PACT_IMP, "合同急件");
priorityMap.put(PRIORITY_PERF_IMP, "绩效零件");
priorityMap.put(PRIORITY_SCH_IMP, "调度标注急件");
approvalStatusMap.put(APPROVAL_STATUS_NORMAL, "正常");
approvalStatusMap.put(APPROVAL_STATUS_UNDER, "审批中");
approvalStatusMap.put(APPROVAL_STATUS_FAIL, "审批不通过");
approvalStatusMap.put(APPROVAL_STATUS_VIA, "审批通过");
pickingStatusMap.put(PICKING_STATUS_NOT, "未领取");
pickingStatusMap.put(PICKING_STATUS_OK, "已领取");
}
@Serial
private static final long serialVersionUID = 1L;
/**
* 班组
*/
@Schema(description = "班组")
private Long tsId;
/**
* 外协
*/
@Schema(description = "外协")
private Long ocId;
/**
* 试验数量
*/
@Schema(description = "试验数量")
private Short testQty;
/**
* 损耗数量
*/
@Schema(description = "损耗数量")
private Short lossQty;
/**
* 镀层单件定额
*/
@Schema(description = "镀层单件定额")
private BigDecimal plateSingleQuota;
/**
* 推送标识位
*/
@Schema(description = "推送标识位")
private String pushFlag;
/**
* 镀层物料
*/
@Schema(description = "镀层物料")
private String plateGoodsCode;
/**
* 需求上报记录
*/
@Schema(description = "需求上报记录")
private Long pgrId;
/**
* 定额异常
*/
@Schema(description = "定额异常")
private String quotaExceptional;
/**
* 热表车间流程卡号
*/
@Schema(description = "热表车间流程卡号")
private String mesCardNo;
/**
* 镀前预接收时间
*/
@Schema(description = "镀前预接收时间")
private Date receptionTime;
/**
* 镀前预转出时间
*/
@Schema(description = "镀前预转出时间")
private Date outTime;
/**
* 是否协作
*/
@Schema(description = "是否协作")
private String collaborate;
/**
* 下部门上账时间
*/
@Schema(description = "下部门上账时间")
private Date lastInstoreTime;
/**
* 会议要求周期
*/
@Schema(description = "会议要求周期")
private Short meetCycle;
/**
* 备注
*/
@Schema(description = "备注")
private String memo;
/**
* 排产状态;1已下发
*/
@Schema(description = "排产状态;1、已下发")
private Short schedStatus;
/**
* 是否已准备(烧结车间订单专用默认为空1是代表已准备)
*/
@Schema(description = "是否已准备(烧结车间订单专用,默认为空,1是代表已准备)")
private Short readStatus;
/**
* 返工单号(仅状态为19的车间订单在生产监控展示)
*/
@Schema(description = "返工单号(仅状态为19的车间订单在生产监控展示)")
private String qcReworkCode;
/**
* 原订单状态
*/
@Schema(description = "原订单状态")
private Short oldRunStatus;
/**
* 返工入库类型;0:按B号1按返工描述
*/
@Schema(description = "返工入库类型;0:按B号;1:按返工描述")
private String reInStore;
/**
* 生产订单
*/
@Schema(description = "生产订单")
private Long yoId;
/**
* 路线卡号
*/
@Schema(description = "路线卡号")
private String cardNo;
/**
* 批次
*/
@Schema(description = "批次")
private String batchNo;
/**
* 订单编号
*/
@Schema(description = "订单编号")
private String woCode;
/**
* 加工数量
*/
@Schema(description = "加工数量")
private Long makeQty;
/**
* 计划完工日期
*/
@Schema(description = "计划完工日期")
private String planEndDate;
/**
* 当前工序
*/
@Schema(description = "当前工序")
private Long wpId;
/**
* 已入库数量
*/
@Schema(description = "已入库数量")
private Integer inventoryQty;
/**
* 运行状态;1.正常2.已下达3.加工中4.检验中13.审理中14.返工中15.已完工21已作废
*/
@Schema(description = "运行状态;1.正常,2.已下达,3.加工中,4.检验中,13.审理中,14.返工中,15.已完工,21已作废")
private Integer runStatus;
/**
* 领料状态;0.未领1.已领
*/
@Schema(description = "领料状态;0.未领,1.已领")
private Short pickingStatus;
/**
* 是否外协
*/
@Schema(description = "是否外协")
private String oem;
/**
* 优先级;1.正常2.项目要求日期急件3.合同急件4.绩效零件5.调度标注急件
*/
@Schema(description = "优先级;1.正常,2.项目要求日期急件,3.合同急件,4.绩效零件,5.调度标注急件")
private Integer priority;
/**
* 最新运行记录
*/
@Schema(description = "最新运行记录")
private Long worId;
/**
* 审批状态;1:正常2:审批中3:不通过4:通过
*/
@Schema(description = "审批状态;1:正常,2:审批中,3:不通过,4:通过")
private Short approvalStatus;
/**
* 报废数量
*/
@Schema(description = "报废数量")
private Integer scrapQty;
/**
* 外协订单发送状态
*/
@Schema(description = "外协订单发送状态")
private String oemOut;
/**
* 外协订单类型 -1场内1整单2协作
*/
@Schema(description = "外协订单类型 -1场内,1整单,2协作")
private Integer oemType;
/**
* 返工单号
*/
@Schema(description = "返工单号")
private String reworkCode;
/**
* 返工序号
*/
@Schema(description = "返工序号")
private Integer reworkNo;
/**
* 计划员
*/
@Schema(description = "计划员")
private Long planner;
/**
* 调度员
*/
@Schema(description = "调度员id")
private Long dispatcher;
/**
* 0未打印1已打印
*/
@Schema(description = "0、未打印;1、已打印")
private String printFlag;
/**
* 下达时间
*/
@Schema(description = "下达时间")
private Date sendDownTime;
/**
* 打印人
*/
@Schema(description = "打印人")
private Long printMan;
/**
* 镀后入库时间
*/
@Schema(description = "镀后入库时间")
private Date putStoreTime;
/**
* 返工意见
*/
@Schema(description = "返工意见")
private String reworkMemo;
/**
* 需求交期
*/
@Schema(description = "需求交期")
private Date demandDate;
/**
* 打印时间
*/
@Schema(description = "打印时间")
private Date printTime;
/**
* 打印编码
*/
@Schema(description = "打印编码")
private String printCode;
/**
* 关闭时间
*/
@Schema(description = "关闭时间")
private Date handoverTime;
/**
* 关闭时间
*/
@Schema(description = "关闭时间")
private Date closeTime;
/**
* 关闭人
*/
@Schema(description = "关闭人")
private Long closeMan;
/**
* 计划开始日期
*/
@Schema(description = "计划开始日期")
private String planStartDate;
/**
* 零件号
*/
@Schema(description = "零件号")
private String partCode;
}

@ -0,0 +1,170 @@
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;
import java.util.HashMap;
import java.util.Map;
/**
* 车间订单运行记录表 实体类
*
* @author BladeX
*/
@Data
@TableName("MES_WORK_ORDER_RUN")
@Schema(description = "MesWorkOrderRun对象")
@EqualsAndHashCode(callSuper = true)
@Builder
public class WorkOrderRun extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 外协
*/
public static Short RUN_TYPE_1 = 1;
/**
* 场内
*/
public static Short RUN_TYPE_2 = 2;
/**
* 退货
*/
public static Short RUN_TYPE_3 = 3;
/**
* 2:审批中
*/
public static Short RUN_STATUS_UNDER = 2;
/**
* 3:不通过
*/
public static Short RUN_STATUS_FAIL = 3;
/**
* 已下达
*/
public static Short RUN_STATUS_ISSUED = 7;
/**
* 已交件
*/
public static Short RUN_STATUS_DELIVERED = 10;
/**
* 已完工
*/
public static Short RUN_STATUS_COMPLETED = 15;
/**
* 已作废
*/
public static Short RUN_STATUS_VOIDED = 21;
public static Map<Short, String> runStatusMap = new HashMap<>(8);
static {
runStatusMap.put(RUN_STATUS_UNDER, "审批中");
runStatusMap.put(RUN_STATUS_FAIL, "审批不通过");
runStatusMap.put(RUN_STATUS_ISSUED, "已下达");
runStatusMap.put(RUN_STATUS_DELIVERED, "已交件");
runStatusMap.put(RUN_STATUS_COMPLETED, "已完工");
runStatusMap.put(RUN_STATUS_VOIDED, "已作废");
}
/**
* 车间订单
*/
@Schema(description = "车间订单")
private Long woId;
/**
* 订单号
*/
@Schema(description = "订单号")
private String woCode;
/**
* 类型;1:转单,2:退货
*/
@Schema(description = "类型;1:转单,2:退货")
private Short runType;
/**
* 转出班组
*/
@Schema(description = "转出班组")
private Long outTeam;
/**
* 转入班组
*/
@Schema(description = "转入班组")
private Long inTeam;
/**
* 转出供应商
*/
@Schema(description = "转出供应商")
private Long outCustomer;
/**
* 转入供应商
*/
@Schema(description = "转入供应商")
private Long inCustomer;
/**
* 备注
*/
@Schema(description = "备注")
private String memo;
/**
* 审批人员
*/
@Schema(description = "审批人员")
private Long approvalMan;
/**
* 审批意见
*/
@Schema(description = "审批意见")
private String approvalMemo;
/**
* 打印标识
*/
@Schema(description = "打印标识")
private String printFlag;
/**
* 交件单号
*/
@Schema(description = "交件单号")
private String deliverKey;
/**
* 是否关闭
*/
@Schema(description = "是否关闭")
private String closeOrNot;
/**
* 打印人
*/
@Schema(description = "打印人")
private Long printMan;
/**
* 运行状态
*/
@Schema(description = "运行状态")
private Short runStatus;
/**
* 系统标识
*/
@Schema(description = "系统标识")
private String systemData;
/**
* 是否协作计划
*/
@Schema(description = "是否协作计划")
private String collaborate;
/**
* 审批时间
*/
@Schema(description = "审批时间")
private Date approvalTime;
}

@ -0,0 +1,266 @@
package org.springblade.desk.produce.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
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 org.springblade.desk.quality.pojo.entity.InspectionTask;
import org.springblade.desk.quality.pojo.entity.WorkPlanItem;
import java.io.Serial;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
* 车间作业计划 实体类
* @author litao
*/
@Data
@TableName("MES_WORK_PLAN")
@Schema(description = "MesWorkPlan对象")
@EqualsAndHashCode(callSuper = true)
public class WorkPlan 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;
/**
* 车间订单
*/
@Schema(description = "车间订单")
private Long woId;
/**
* 工艺
*/
@Schema(description = "工艺")
private Long ppsId;
/**
* 工序号
*/
@Schema(description = "工序号")
private String orders;
/**
* 工序描述
*/
@Schema(description = "工序描述")
private String makeMemo;
/**
* 工时定额
*/
@Schema(description = "工时定额")
private BigDecimal hourQuota;
/**
* 计划开始
*/
@Schema(description = "计划开始")
private LocalDateTime startTime;
/**
* 计划结束
*/
@Schema(description = "计划结束")
private LocalDateTime endTime;
/**
* 加工班组
*/
@Schema(description = "加工班组")
private Long makeTeam;
/**
* 是否外协
*/
@Schema(description = "是否外协")
private String oem;
/**
* 外协商
*/
@Schema(description = "外协商")
private Long ocId;
/**
* 上一道
*/
@Schema(description = "上一道")
private Long frontWpId;
/**
* 下一道
*/
@Schema(description = "下一道")
private Long nextWpId;
/**
* 试验数量
*/
@Schema(description = "试验数量")
private Integer testQty;
/**
* 合格数量
*/
@Schema(description = "合格数量")
private Long qualifiedQty;
/**
* 报废数量
*/
@Schema(description = "报废数量")
private Integer scrapQty;
/**
* 不合格数量
*/
@Schema(description = "不合格数量")
private Integer unqualifiedQty;
/**
* 实际开始
*/
@Schema(description = "实际开始")
private Date factStartTime;
/**
* 实际结束
*/
@Schema(description = "实际结束")
private Date factEndTime;
/**
*
*/
@Schema(description = "")
private Short bindStatus;
/**
*
*/
@Schema(description = "")
private Long workQty;
/**
*
*/
@Schema(description = "")
private Long receiveMan;
/**
*
*/
@Schema(description = "")
private BigDecimal hours;
/**
*
*/
@Schema(description = "")
private Long caId;
/**
* 打印标记类型1生产过程
*/
@Schema(description = "打印标记类型:1、生产过程")
private Short printType;
/**
*
*/
@Schema(description = "")
private Long subsidiaryTeam;
/**
* 检验颜色标识
*/
@Schema(description = "检验颜色标识")
private Short subType;
/**
* 关键工序
*/
@Schema(description = "关键工序")
private String cruxProcess;
/**
* 消耗数量
*/
@Schema(description = "消耗数量")
private Short lossQty;
/**
* 金额
*/
@Schema(description = "金额")
private BigDecimal wpMoney;
/**
* 工艺文件编号/版本号
*/
@Schema(description = "工艺文件编号/版本号")
private String papers;
/**
*
*/
@Schema(description = "")
private String referenceFile;
/**
* 引用文件/版本号
*/
@Schema(description = "引用文件/版本号")
private String wxNo;
/**
* 作业中心
*/
@Schema(description = "作业中心")
private Long workCenterId;
/**
* 设备编码
*/
@Schema(description = "设备编码")
private String equipCode;
/**
* 设备名称
*/
@Schema(description = "设备名称")
private String equipName;
/**
* 占用设备资源ID
*/
@Schema(description = "占用设备资源ID")
private Long equipResourceId;
/**
* 占用人力资源ID
*/
@Schema(description = "占用设备资源ID")
private String personResourceIds;
/**
* 班组人员
*/
@Schema(description = "班组人员")
private String teamMembers;
@Schema(description = "检验项目")
@TableField(exist = false)
public List<WorkPlanItem> checkItemList;
@Schema(description = "检验任务")
@TableField(exist = false)
public InspectionTask inspectionTask;
@Schema(description = "正式工艺Id")
@TableField(exist = false)
public Long pid;
@Schema(description = "返工工艺Id")
@TableField(exist = false)
public Long rpId;
}

@ -0,0 +1,29 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.order.pojo.entity.YieldOrder;
/**
* 分批准备数据 视图实体类
*
* @author litao
*/
@Data
public class BatchPrepareVO {
@Schema(description = "生产订单")
private YieldOrder yieldOrder;
@Schema(description = "车间订单号")
private String woCode;
@Schema(description = "流程卡号")
private String cardNo;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "mes流程卡号")
private String mesCardNo;
}

@ -0,0 +1,97 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import java.io.Serial;
/**
* 车间订单表 视图实体类
*
* @author BladeX
* @since 2025-11-28
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WorkOrderVO extends WorkOrder {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "主加工单位:班组")
private String mainTsName;
@Schema(description = "主加工单位:外协")
private String mainOcName;
@Schema(description = "班组id")
private String makeTeam;
@Schema(description = "外协id")
private String ppsOcId;
@Schema(description = "班组")
private String tsName;
@Schema(description = "外协")
private String ocName;
@Schema(description = "工序")
private String ppsName;
@Schema(description = "生产订单号")
private String yoCode;
@Schema(description = "计划单号")
private String ypCode;
@Schema(description = "零件号")
private String partCode;
@Schema(description = "生产标识")
private String productIdent;
@Schema(description = "产品名称")
private String partName;
@Schema(description = "镀种信息")
private String plate;
@Schema(description = "产品型号")
private String productType;
@Schema(description = "需求部门")
private String useDept;
@Schema(description = "面积(dm²)")
private String totalArea;
@Schema(description = "单批次面积")
private String area;
@Schema(description = "调度员")
private String dispatcherName;
@Schema(description = "未入库数量")
private Integer notInQty;
@Schema(description = "下序id")
private Integer ppsIdNext;
@Schema(description = "下序名称")
private Integer ppsNameNext;
@Schema(description = "下一班组id")
private Integer makeTeamNext;
@Schema(description = "下一班组")
private Integer makeTeamNextName;
@Schema(description = "接收人员id")
private Integer receiveUser;
@Schema(description = "接收人员")
private Integer receiveUserNamr;
}

@ -271,7 +271,7 @@ public class InspectionTask extends BaseEntity {
* 检验数量
*/
@Schema(description = "检验数量")
private Double checkQty;
private Long checkQty;
/**
* 消耗数量
*/
@ -281,7 +281,7 @@ public class InspectionTask extends BaseEntity {
* 合格数量
*/
@Schema(description = "合格数量")
private Double qualifiedQty;
private Long qualifiedQty;
/**
* 报废数量
*/

@ -159,12 +159,12 @@ public class WorkPlanItem extends BaseEntity {
* 工时定额
*/
@Schema(description = "工时定额")
private Short hourQuota;
private Long hourQuota;
/**
* 准备工时
*/
@Schema(description = "准备工时")
private Short hourPrepare;
private Long hourPrepare;
/**
* [检验任务]id
*/

@ -1,10 +1,207 @@
package org.springblade.erpdata.pojo.dto.table;
import lombok.Data;
/**
* 对应ERP中表 t_prtbasdef
*
* @author lqk
* @date 2026-01-16 17:32
*/
@Data
public class Prtbasdef {
private String prtno; //物料号
private String prteflag; //工程数据标记
private String prtchgrsn; //更改原因
private String prttype; //物料类型
private String prtreqtype; //需求类型
private String prtorplc; //订货策略码
private String prtlzplc; //批量方针
private String prtabc; //库存管理abc码
private String prtinvprtct; //物料保管特征码
private String prtsoflag; //物料加工路线通过车间数的标记
private String prtcotype; //自制/外协类型
private String prtchkflag; //物料检验标记
private String prtageflag; //物料老化筛选标记
private String gtroutflag; //采用成组工艺标记
private String prtlottype; //批次合并标记
private String prtcsttype; //限制发货标记
private String prtum; //erp度量单位
private String prtwtum; //重量计量单位
private String prtui; //pdm度量单位
private String prtpurity; //表面积
private String prtwt; //重量(毛重), 图纸标明该件的重量
private String prturat; //存储单位折算系数
private String prtrevedit; //版本号
private String prodline; //产品大类(产品系列)
private String prtclass; //1 :线簧孔 0:无标识 2针孔 3 连帽线 4 花键线 5 ym线 6方盘线 7 异型壳体线 8 针孔线 9 复合线 10 压铸件 (3200) 11~18精益生产线a~h(3100) 20 注射件 21 橡胶件 22 热固件 23 jy 24 y50 25 xc 及派生 26 民品大批量 27 ct杂项 28 f/yf 29 装爪类 30 装针类 31 装孔类 32 灌胶粘结类 33 绞针类 34 铆接 35 同轴产品 36 滤波产品 37 绞针产品 38 线缆产品 39 普通跳线 40 多芯缆 41 圆形粘接部件 42
private String prtdesc; //物料名称
private String mtltmrk; //物料型号/材料牌号
private String mtlspcf; //腔数
private String prtstd; //技术条件
private String mtlstat; //交货状态
private String prtgtcc; //存储华为用户型号
private String prtmdept; //主制车间
private String splytype; //供应商认证类型
private String splycode; //首选供应商码
private String mtldmsw; //毛料宽度(内径)
private String mtldmst; //毛料厚(高)度,外径
private String mtldmsl; //毛料长度
private String mtlsgrt; //材料密度(比重)
private String prtqtyraw; //毛料物料数
private String prtmaxtim; //最长存储时间
private String prtovertim; //物料准许的积压期限
private String prtrechktim; //物资复验间隔期或工模具复检周期
private String prtoiltim; //油封间隔期
private String mtlrcdchgdat; //材料数据更改日期
private String rcdchgdatd; //设计数据记录更改日期
private String rcdchgdatm; //物料存储数据记录更改日期
private String rcdchgdatp; //设置发货限制时间
private String rcdchgdatc; //取消发货限制时间
private String rcdchgctrlerd; //设计数据更改人
private String rcdchgctrlerm; //物料存储数据更改人
private String mtlctrler; //材料数据更改人
private String rcdchgctrlerp; //计划数据更改人
private String rcdchgctrlerc; //限制发货更改人
private String scheduler; //采购计划员
private String planner; //生产调度员
private String designer; //产品数据设计员
private String prtmengr; //主管工艺员,十五车间作为调度员使用
private String prtmint; //mps、mrp或pur计划重复投入的最小合并周期
private String pkmaxcount; //配套允许最大批次数
private String makespeed; //验证类型-材料部件
private String prtlt; //提前期
private String prtsflt; //安全提前期
private String prtaclt; //备料提前期
private String prtcmlt; //累计提前期
private String bas_prtcmlt; //理论累计提前期
private String prtscprt; //物料废品系数
private String prtssqty; //安全库存
private String prtavelz; //平均批量
private String prtopnt; //订货点
private String prtlz; //批量
private String prtupqty; //最高库存量
private String prtfalt; //总装配提前提
private String invqyqty; //入检取样消耗量
private String checkhgl; //平均入检合格率
private String selecthgl; //平均筛选合格率
private String invshl; //平均库存损耗率
private String invpyl; //排料利用率
private String mtllyl; //平均材料下料利用率
private String prtlprc; //计划价
private String prtstdcst; //标准成本
private String prtphlcst; //永续成本价
private String prtothcst; //其它费用
private String invttlavqty; //二级库总可用数量
private String invttlqtqty; //总合格数量
private String invttlresqty; //总限用数量
private String invttlwcqty; //总待检数量
private String invttlwsqty; //总报废数量
private String invttlalqty; //已分配数量
private String invttlelqty; //二级库已分配数量
private String invttlbaqty; //缺件数量
private String invttleaqty; //二级库缺件数量
private String bas_prtlt; //装配周期
private String prdpercent; //未用
private String delaynum; //未用
private String aimstock; //未用
private String product; //生产商
private String prtbaslt; //固定提前期
private String prtlotlt; //可变提前期
private String bas_prtbaslt; //计划固定提前期
private String bas_prtlotlt; //计划可变提前期
private String prtllc; //低位码
private String calprtlt; //重新记算提前期标记
private String prtcode; //图纸号
private String prttech; //文档说明书编号
private String releaseno; //版本号
private String bomchksign; //bom审核标记
private String sjflag; //散件标记:0-成批件,1-散件
private String invttlchgqty; //工模具使用,总修理数量
private String shflag; //''1''-涂色环
private String prtdescr; //对零件的描述,十五车间用
private String schemer; //生产计划员
private String prtprodtim; //生产周期
private String bomchkman; //bom审核人
private String bomchkdate; //bom审核日期
private String mdmchksign; //基础数据审核标记
private String mdmchkman; //基础数据审核人
private String mdmchkdate; //基础数据审核日期
private String prtlotno; //物资质量等级
private String noprtpqty; //是否取消材料定额,0-否,1-是 2007年2月28日lixin增加,mrpplang中用
private String prtljclass; //零件分类
private String cplb; //产品类别
private String purcode; //物资采购员,2008/05/07
private String jmaterfee; //军品材料费,十五车间用
private String mmaterfee; //民品材料费,十五车间用
private String zpcoef; //折批系数,十五车间用
private String oldprtno; //erp旧物料号
private String vmiflag; //vmi物料标记
private String vmiprtssqty; //vmi安全库存
private String vmiprtlz; //vmi采购批量
private String processline; //pdm工艺路线
private String drwpartno; //pdm图纸编码
private String warctlr; //物资保管员
private String wzbomchksign; //bom材料定额审核标记
private String chgstrucflg; //结构调整标记:0-否,1-是
private String mtnman; //线黄孔维护人 15a用
private String mtndate; //线黄孔维护日期 15a用
private String guke; //顾客(审签军代表姓名)
private String fddate; //首次订货日期(计算新品统计)
private String routremark; //工艺规程号
private String priority; //优先等级
private String confcode1; //第一配置码
private String maxusetime; //工装最大使用次数
private String parametera; //pdm参数a2010/09/24
private String volume; //pdm体积2010/09/24
private String routruledat; //工艺规程维护日期
private String reroutruleno; //工艺规程变更单号
private String reroutruledat; //工艺规程变更单维护日期
private String typeflag; //打子件标识 0 :非打字件 1:打字件
private String wzprttype; //物资物料标记a,b,c,d....
private String chkcycle; //检验周期
private String plndept; //计划部门
private String part_link; //超级链接
private String partview; //视图名称
private String classpath; //分类路径名
private String classpathid; //分类路径id
private String matsmallclassify; //小类(材料部件)
private String currentflag; //通用属性
private String remark; //注释
private String producedept; //制造部门
private String groupcode; //集团公司编码
private String cgzmark; //关重件标识
private String checkreport; //是否出验收报告标记 0 :否 1:是
private String simparts; //相似零件
private String patternlev; //模具等级--分类属性
private String rcdchgrsn; //发货限制原因备注
private String prtlev; //零件分级,外协用
private String color; //颜色
private String length; //长度
private String cladfilm; //镀层的最终镀种
private String xdflag; //暂停下计划标记
private String xddat; //暂停下计划时间
private String xdopendat; //暂停下计划解限时间
private String xdrsn; //暂停下计划原因
private String xddoccode; //暂停下计划相关技术单号
private String xdman; //暂停下计划人员
private String newestpro; //全新产品
private String yfitemno; //研发项目编号(零部件、工装部件)
private String dataflag; //pdm数据标记:0-erp,1-pdm
private String matbigclassify; //材料大类,从pdm发布
private String materialtype; //材料类别
private String standtype; //标准类型
private String sparemodel; //备料型号
private String projectlevel; //项目级别
private String firstuserpp; //首用工艺号-材料部件
private String prioritytype; //优选类型-材料部件
private String metacognition; //对称件-零部件
private String orignofmaterial; //材料原产地-材料部件
private String modelremark; //模具备注(零部件)
private String moulddemand; //模具需求(零部件)
private String productapparea; //产品应用领域(零部件)
private String etlid; //guid,etl使用的唯一性索引列
private String maturitygrade; //成熟度(零部件)
}

@ -7,4 +7,5 @@ package org.springblade.erpdata.pojo.dto.table;
* @date 2026-01-16 17:32
*/
public class Prtmsg {
}

@ -1,10 +1,21 @@
package org.springblade.erpdata.pojo.dto.table;
import lombok.Data;
/**
* 对应ERP中表 t_rbwoerptomes
*
* @author lqk
* @date 2026-01-16 17:32
*/
@Data
public class Rrbwoerptomes {
private String wono; //工作订单号
private String process_line_desc; //工艺路线明细
private String readtime; //读取时间
private String read_content; //读取内容
}

@ -1,10 +1,42 @@
package org.springblade.erpdata.pojo.dto.view;
import lombok.Data;
/**
* 对应ERP中视图 v_mes_rb_pk
*
* @author lqk
* @date 2026-01-16 17:34
*/
@Data
public class MesRbPk {
private String wono; //车间订单号(外协订单号)
private String splcode; //批次号
private String liverkey; //路线卡号(外协交件单号)
private String prtno; //物料号
private String prtlotno; //质量等级
private String mtltmrk; //型号
private String woporqty; //需求数量
private String wopordat; //下达时间
private String yzdd; //工作订单
private String yjgx; //一级工序(B号)
private String rtudept; //接收部门
private String updatetime; //转出时间(检验状态改为合格的时间)
private String wdavlqty; //转出数量(实收数量)
private String plndept; //计划部门代码
private String usedept; //使用部门代码
private String hbm; //计划部门
private String ybm; //使用部门
private String WOREQDAT; //需求日期
private String jhy; //计划员
private String bgy; //保管员
private String processlinedesc; //一级工艺路线
private String kdofplat; //镀种
private String prtmeterial; //材料
private String rigidity; //硬度
}

@ -1,10 +1,36 @@
package org.springblade.erpdata.pojo.dto.view;
import lombok.Data;
/**
* 对应ERP中视图 v_mes_rb_sjso
*
* @author lqk
* @date 2026-01-16 17:34
*/
@Data
public class MesRbSjso {
private String sono; //车间订单号
private String fj_splcode; //批次号
private String barcodeno; //路线卡号(配套单号)
private String prtno; //零件号
private String prtlotno; //生产标识
private String mtltmrk; //型号
private String woporqty; //需求数量
private String wopordat; //下达时间
private String wono; //工作订单号
private String prtmdept; //接收部门(主制部门)
private String fj_pkavqty; //转出数量(父件配套数量)
private String lewdeptcode; //转出部门代码
private String plndept; //计划部门代码
private String usedept; //使用部门代码
private String woreqdat; //需求日期
private String processlinedesc; //一级工艺路线
private String kdofplat; //镀种
private String prtmeterial; //材料
private String rigidity; //硬度
private String warctlr;
private String planner;
private String username;
}

@ -1,10 +1,42 @@
package org.springblade.erpdata.pojo.dto.view;
import lombok.Data;
/**
* 对应ERP中视图 v_mes_rb_sodelrecwx
*
* @author lqk
* @date 2026-01-16 17:34
*/
@Data
public class MesRbSodelrecwx {
private String wono; //车间订单号(外协订单号)
private String splcode; //批次号
private String liverkey; //路线卡号(外协交件单号)
private String prtno; //物料号
private String prtlotno; //质量等级
private String mtltmrk; //型号
private String woporqty; //需求数量
private String wopordat; //下达时间
private String zdd; //工作订单
private String jgx; //一级工序(B号)
private String rtudept; //接收部门
private String updatetime; //转出时间(检验状态改为合格的时间)
private String wdavlqty; //转出数量(实收数量)
private String plndept; //计划部门代码
private String usedept; //使用部门代码
private String hbm; //计划部门
private String ybm; //使用部门
private String WOREQDAT; //需求日期
private String hy; //计划员
private String gy; //保管员
private String processlinedesc; //一级工艺路线
private String kdofplat; //镀种
private String prtmeterial; //材料
private String rigidity; //硬度
}

@ -1,10 +1,42 @@
package org.springblade.erpdata.pojo.dto.view;
import lombok.Data;
/**
* 对应ERP中视图 v_mes_rb_sodelreczg
*
* @author lqk
* @date 2026-01-16 17:34
*/
@Data
public class MesRbSodelreczg {
private String wono; //车间订单号(外协订单号)
private String splcode; //批次号
private String liverkey; //路线卡号(外协交件单号)
private String prtno; //物料号
private String prtlotno; //质量等级
private String mtltmrk; //型号
private String woporqty; //需求数量
private String wopordat; //下达时间
private String zdd; //工作订单
private String jgx; //一级工序(B号)
private String rtudept; //接收部门
private String updatetime; //转出时间(检验状态改为合格的时间)
private String wdavlqty; //转出数量(实收数量)
private String plndept; //计划部门代码
private String usedept; //使用部门代码
private String hbm; //计划部门
private String ybm; //使用部门
private String WOREQDAT; //需求日期
private String hy; //计划员
private String gy; //保管员
private String processlinedesc; //一级工艺路线
private String kdofplat; //镀种
private String prtmeterial; //材料
private String rigidity; //硬度
}

@ -1,10 +1,42 @@
package org.springblade.erpdata.pojo.dto.view;
import lombok.Data;
/**
* 对应ERP中视图 v_mes_rb_wxpromotion
*
* @author lqk
* @date 2026-01-16 17:34
*/
@Data
public class MesRbWxpromotion {
private String wono; //车间订单号(外协订单号)
private String splcode; //批次号
private String liverkey; //路线卡号(外协交件单号)
private String prtno; //物料号
private String prtlotno; //质量等级
private String mtltmrk; //型号
private String woporqty; //需求数量
private String wopordat; //下达时间
private String zdd; //工作订单
private String jgx; //一级工序(B号)
private String rtudept; //接收部门
private String updatetime; //转出时间(检验状态改为合格的时间)
private String wdavlqty; //转出数量(实收数量)
private String plndept; //计划部门代码
private String usedept; //使用部门代码
private String hbm; //计划部门
private String ybm; //使用部门
private String WOREQDAT; //需求日期
private String hy; //计划员
private String gy; //保管员
private String processlinedesc; //一级工艺路线
private String kdofplat; //镀种
private String prtmeterial; //材料
private String rigidity; //硬度
}

@ -35,7 +35,7 @@ public class OrderEnvJob {
* 创建安全巡检任务定时器运行...
*
*/
@Scheduled(cron = "0/20 * * * * ?")
// @Scheduled(cron = "0/20 * * * * ?")
public void rpAcidMistTower() {
log.info("开始酸雾塔报警记录数据查询...");
@ -48,7 +48,7 @@ public class OrderEnvJob {
log.info("同步酸雾塔报警记录数据查询...");
}
@Scheduled(cron = "0 0 0/1 * * ? ")
// @Scheduled(cron = "0 0 0/1 * * ? ")
public void eneUpdateUsed() {
if ("false".equals(jobSafeEnable)) {
@ -66,7 +66,7 @@ public class OrderEnvJob {
}
}
@Scheduled(cron = "0 0/3 * * * ?")
// @Scheduled(cron = "0 0/3 * * * ?")
public void bsTowerSosRec() {
log.info("开始酸雾塔PH报警......");

@ -26,7 +26,7 @@ public class OrderSafeJob {
* 创建安全巡检任务定时器运行...
*
*/
@Scheduled(cron = "0 0 0,2,5,7 * * ? ")
// @Scheduled(cron = "0 0 0,2,5,7 * * ? ")
public void createSafPatrolTask() {
log.info("开始创建安全巡检任务定时器运行...");
@ -39,7 +39,7 @@ public class OrderSafeJob {
log.info("同步创建安全巡检任务定时器运行...已完成...");
}
@Scheduled(cron = "0 0 8 * * ? ")
// @Scheduled(cron = "0 0 8 * * ? ")
public void handleSafPatrolTask() {
if ("false".equals(jobSafeEnable)) {

@ -210,7 +210,7 @@ public class CertificateMaintenanceController extends BladeController {
* 更新证书维护状态
* TODO 以后需要交由PowerJob服务统一管理
*/
@Scheduled(cron = "0 0 0 * * ?") // 每天凌晨0点执行
// @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨0点执行
public void updateMaintenanceStatus() {
certificateMaintenanceService.updateMaintenanceStatus();
}

@ -167,4 +167,12 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
* @param statusCode
*/
void receiveOrderStatusFromOldMes(String cardNo, Integer statusCode);
/**
* <p>Description: 路线卡号查询生产订单 </p>
*
* @param cardNo 路线卡号
* @return: YieldOrder
*/
YieldOrder getYoByCardNo(String cardNo);
}

@ -12,6 +12,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.exception.BusinessException;
import org.springblade.common.utils.StringPrefixUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.DateUtil;
@ -636,6 +637,17 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
}
}
@Override
public YieldOrder getYoByCardNo(String cardNo) {
LambdaQueryWrapper<YieldOrder> queryWrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, cardNo);
YieldOrder yieldOrder = baseMapper.selectOne(queryWrapper);
// TODO : 待完善
if (yieldOrder == null) {
throw new ServiceException("生产订单未同步,请稍后操作");
}
return yieldOrder;
}
/**
* 验证零件子件信息
*

@ -0,0 +1,58 @@
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;
import io.swagger.v3.oas.annotations.tags.Tag;
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.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.BatchPrepareVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springblade.desk.produce.wrapper.WorkOrderWrapper;
import org.springframework.web.bind.annotation.*;
/**
* 热表车间订单
* @author litao
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/workOrder")
@Tag(name = "热表车间订单", description = "接口")
public class RbProduceManageController extends BladeController {
private final IWorkOrderService workOrderService;
@GetMapping("/page")
@ApiOperationSupport(order = 1)
@Operation(summary = "车间订单列表分页", description = "传入WorkOrderVO")
public R<IPage<WorkOrderVO>> page(WorkOrderDTO workOrder, Query query) {
IPage<WorkOrderVO> pages = workOrderService.selectWorkOrderPage(Condition.getPage(query), workOrder);
return R.data(WorkOrderWrapper.build().listWorkOrderVO(pages));
}
@GetMapping(value = "/batchesPrepare/{woId}")
@ApiOperationSupport(order = 2)
@Operation(summary = "分批准备数据", description = "传入车间订单ID")
public R<BatchPrepareVO> batchesPrepare(@PathVariable Long woId) {
return R.data(workOrderService.batchesPrepare(woId));
}
@PostMapping(value = "/inBatches")
@ApiOperationSupport(order = 3)
@Operation(summary = "分批", description = "传入WorkOrderVO")
public R inBatches(@RequestBody WorkOrder workOrder) {
Long userId = AuthUtil.getUserId();
return R.data(workOrderService.inBatches(workOrder.getId(), workOrder, userId));
}
}

@ -0,0 +1,17 @@
package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.desk.produce.pojo.entity.BsProcedureTeam;
import java.util.List;
/**
* 工序下的班组 Mapper 接口
*
* @author BladeX
* @since 2025-11-28
*/
public interface BsProcedureTeamMapper extends BaseMapper<BsProcedureTeam> {
List<BsProcedureTeam> findBsProcedureTeamByPpsId(Long id);
}

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.desk.produce.mapper.BsProcedureTeamMapper">
<select id="findBsProcedureTeamByPpsId" resultType="org.springblade.desk.produce.pojo.entity.BsProcedureTeam">
select a.* from bs_procedure_team a
inner join bs_procedure_set b on a.PPS_ID= b.PPS_ID
inner join BS_TEAM_SET c on a.TS_ID = c.TS_ID
where b.pps_id = #{id} and c.DELETED = 0 order by c.TS_ID
</select>
</mapper>

@ -0,0 +1,13 @@
package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.desk.produce.pojo.entity.MacToolUse;
/**
* 设备工装使用记录 Mapper 接口
*
* @author BladeX
*/
public interface MacToolUseMapper extends BaseMapper<MacToolUse> {
}

@ -0,0 +1,13 @@
package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.desk.produce.pojo.entity.MakeRec;
/**
* 加工记录 Mapper 接口
*
* @author BladeX
*/
public interface MakeRecMapper extends BaseMapper<MakeRec> {
}

@ -0,0 +1,37 @@
package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import java.util.List;
/**
* 车间订单表 Mapper 接口
*
* @author BladeX
* @since 2025-11-28
*/
public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
/**
* 自定义分页
*
* @param page 分页参数
* @param workOrder 查询参数
* @return List<WorkOrderVO>
*/
List<WorkOrderVO> selectWorkOrderPage(IPage page, WorkOrderDTO workOrder);
WorkOrder getMaxByCodePattern(String codePattern);
WorkOrder getMaxByCardNo(String cardNo, String ypCode);
WorkOrder getWorkOrderByCardNo(String code, short i);
WorkOrder getMaxByBatchNo(String codePattern, String ypCode);
WorkOrder getMaxByMesCardNo(String codePattern);
}

@ -0,0 +1,165 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.desk.produce.mapper.WorkOrderMapper">
<!-- 通用查询映射结果 -->
<resultMap id="workOrderResultMap" type="org.springblade.desk.produce.pojo.entity.WorkOrder">
<result column="TS_ID" property="tsId"/>
<result column="OC_ID" property="ocId"/>
<result column="TEST_QTY" property="testQty"/>
<result column="LOSS_QTY" property="lossQty"/>
<result column="PLATE_SINGLE_QUOTA" property="plateSingleQuota"/>
<result column="PUSH_FLAG" property="pushFlag"/>
<result column="PLATE_GOODS_CODE" property="plateGoodsCode"/>
<result column="PGR_ID" property="pgrId"/>
<result column="QUOTA_EXCEPTIONAL" property="quotaExceptional"/>
<result column="MES_CARD_NO" property="mesCardNo"/>
<result column="RECEPTION_TIME" property="receptionTime"/>
<result column="OUT_TIME" property="outTime"/>
<result column="COLLABORATE" property="collaborate"/>
<result column="LAST_INSTORE_TIME" property="lastInstoreTime"/>
<result column="MEET_CYCLE" property="meetCycle"/>
<result column="MEMO" property="memo"/>
<result column="SCHED_STATUS" property="schedStatus"/>
<result column="READ_STATUS" property="readStatus"/>
<result column="QC_REWORK_CODE" property="qcReworkCode"/>
<result column="OLD_RUN_STATUS" property="oldRunStatus"/>
<result column="RE_IN_STORE" property="reInStore"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
<result column="ID" property="id"/>
<result column="YO_ID" property="yoId"/>
<result column="CARD_NO" property="cardNo"/>
<result column="BATCH_NO" property="batchNo"/>
<result column="WO_CODE" property="woCode"/>
<result column="MAKE_QTY" property="makeQty"/>
<result column="PLAN_END_DATE" property="planEndDate"/>
<result column="WP_ID" property="wpId"/>
<result column="INVENTORY_QTY" property="inventoryQty"/>
<result column="RUN_STATUS" property="runStatus"/>
<result column="PICKING_STATUS" property="pickingStatus"/>
<result column="OEM" property="oem"/>
<result column="PRIORITY" property="priority"/>
<result column="WOR_ID" property="worId"/>
<result column="APPROVAL_STATUS" property="approvalStatus"/>
<result column="SCRAP_QTY" property="scrapQty"/>
<result column="OEM_OUT" property="oemOut"/>
<result column="OEM_TYPE" property="oemType"/>
<result column="REWORK_CODE" property="reworkCode"/>
<result column="REWORK_NO" property="reworkNo"/>
<result column="PLANNER" property="planner"/>
<result column="DISPATCHER" property="dispatcher"/>
<result column="PRINT_FLAG" property="printFlag"/>
<result column="SEND_DOWN_TIME" property="sendDownTime"/>
<result column="PRINT_MAN" property="printMan"/>
<result column="PUT_STORE_TIME" property="putStoreTime"/>
<result column="REWORK_MEMO" property="reworkMemo"/>
<result column="DEMAND_DATE" property="demandDate"/>
<result column="PRINT_TIME" property="printTime"/>
<result column="PRINT_CODE" property="printCode"/>
<result column="HANDOVER_TIME" property="handoverTime"/>
<result column="CLOSE_TIME" property="closeTime"/>
<result column="CLOSE_MAN" property="closeMan"/>
</resultMap>
<select id="selectWorkOrderPage" resultMap="workOrderResultMap">
SELECT
mwo.TS_ID tsId,
mwo.OC_ID ocId,
mwp.MAKE_TEAM makeTeam,
mwp.OC_ID ppsOcId,
mwp.PPS_ID ppsId,
mwo.SEND_DOWN_TIME sendDownTime,
mwo.WO_CODE woCode,
myo.YO_CODE yoCode,
myo.YP_CODE ypCode,
mwo.QC_REWORK_CODE qcReworkCode,
myo.PART_CODE partCode,
mwo.BATCH_NO batchNo,
mwo.MAKE_QTY makeQty,
mwo.RUN_STATUS runStatus,
mwo.OEM oem,
myo.PRODUCT_IDENT productIdent,
myo.PART_NAME partName,
mwo.CARD_NO cardNo,
mwo.MES_CARD_NO mesCardNo,
myo.PLATE plate,
myo.PRODUCT_TYPE productType,
mwo.PRIORITY priority,
myo.USE_DEPT useDept,
ROUND(myo.YP_AREA * mwo.MAKE_QTY,10) totalArea,
myo.YP_AREA area,
mwo.DEMAND_DATE demandDate,
mwo.MEET_CYCLE meetCycle,
mwo.dispatcher,
mwo.PLAN_END_DATE planEndDate,
mwo.PUT_STORE_TIME putStoreTime,
mwo.INVENTORY_QTY inventoryQty,
mwo.MAKE_QTY - mwo.INVENTORY_QTY notInQty,
nmwp.PPS_ID ppsIdNext,
nmwp.MAKE_TEAM makeTeamNext,
mwo.PICKING_STATUS pickingStatus,
myo.RECEIVE_USER receiveUser,
mwo.COLLABORATE collaborate,
mwo.MEMO memo
FROM MES_WORK_ORDER mwo
LEFT JOIN MES_YIELD_ORDER myo ON mwo.YO_ID = myo.ID
LEFT JOIN MES_WORK_PLAN mwp ON mwo.WP_ID = mwp.ID
LEFT JOIN MES_WORK_PLAN nmwp ON mwp.NEXT_WP_ID = nmwp.ID
<where>
is_deleted = 0
<if test="workOrder.runStatus != null and workOrder.runStatus != ''">
AND mwo.RUN_STATUS = #{workOrder.runStatus}
</if>
<if test="workOrder.cardNo != null and workOrder.cardNo != ''">
AND mwo.CARD_NO LIKE concat(concat('%', #{workOrder.cardNo}),'%')
</if>
<if test="workOrder.partCode != null and workOrder.partCode != ''">
AND myo.PART_CODE LIKE concat(concat('%', #{workOrder.partCode}),'%')
</if>
<if test="workOrder.batchNo != null and workOrder.batchNo != ''">
AND mwo.BATCH_NO LIKE concat(concat('%', #{workOrder.batchNo}),'%')
</if>
<if test="workOrder.woCode != null and workOrder.woCode != ''">
AND mwo.WO_CODE LIKE concat(concat('%', #{workOrder.woCode}),'%')
</if>
<if test="workOrder.yoCode != null and workOrder.yoCode != ''">
AND myo.YO_CODE LIKE concat(concat('%', #{workOrder.yoCode}),'%')
</if>
</where>
ORDER BY mwo.CREATE_TIME DESC
</select>
<select id="getMaxByCodePattern" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT * FROM (select * from MES_WORK_ORDER where WO_CODE like concat(#{codePattern},'%') order by WO_CODE desc) WHERE ROWNUM = 1
</select>
<select id="getMaxByCardNo" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT * FROM (select * from MES_WORK_ORDER where card_no like concat(#{cardNo},'%')
<if test="ypCode != null and ypCode != ''">
AND YP_CODE LIKE concat(#{ypCode},'%')
</if>
order by card_no desc ) WHERE ROWNUM = 1
</select>
<select id="getWorkOrderByCardNo" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT * FROM (select * from MES_WORK_ORDER where card_no = #{code}
<if test="i == -1">
and run_status = -1
</if>
order by wo_id desc ) WHERE ROWNUM = 1
</select>
<select id="getMaxByBatchNo" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT * FROM (SELECT a.*
FROM MES_WORK_ORDER a INNER JOIN MES_YIELD_ORDER b ON a.yo_id = b.id
WHERE a.batch_no LIKE concat(#{codePattern},'%') AND LENGTH(a.batch_no) = LENGTH(#{codePattern}) + 2
AND b.po_code LIKE concat(#{ypCode},'%')
ORDER BY a.batch_no DESC) WHERE ROWNUM = 1
</select>
<select id="getMaxByMesCardNo" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT * FROM (SELECT * FROM MES_WORK_ORDER WHERE mes_card_no LIKE concat(#{codePattern},'%') ORDER BY mes_card_no DESC) WHERE ROWNUM = 1
</select>
</mapper>

@ -0,0 +1,14 @@
package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
/**
* 车间订单运行记录表 Mapper 接口
*
* @author BladeX
*/
public interface WorkOrderRunMapper extends BaseMapper<WorkOrderRun> {
}

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.desk.produce.mapper.WorkOrderRunMapper">
<!-- 通用查询映射结果 -->
<resultMap id="workOrderRunResultMap" type="org.springblade.desk.produce.pojo.entity.WorkOrderRun">
<result column="ID" property="id"/>
<result column="WO_ID" property="woId"/>
<result column="WO_CODE" property="woCode"/>
<result column="RUN_TYPE" property="runType"/>
<result column="OUT_TEAM" property="outTeam"/>
<result column="IN_TEAM" property="inTeam"/>
<result column="OUT_CUSTOMER" property="outCustomer"/>
<result column="IN_CUSTOMER" property="inCustomer"/>
<result column="MEMO" property="memo"/>
<result column="APPROVAL_MAN" property="approvalMan"/>
<result column="APPROVAL_MEMO" property="approvalMemo"/>
<result column="PRINT_FLAG" property="printFlag"/>
<result column="DELIVER_KEY" property="deliverKey"/>
<result column="CLOSE_OR_NOT" property="closeOrNot"/>
<result column="PRINT_MAN" property="printMan"/>
<result column="RUN_STATUS" property="runStatus"/>
<result column="SYSTEM_DATA" property="systemData"/>
<result column="COLLABORATE" property="collaborate"/>
<result column="APPROVAL_TIME" property="approvalTime"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
</resultMap>
</mapper>

@ -0,0 +1,14 @@
package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
/**
* 车间作业计划 Mapper 接口
*
* @author BladeX
* @since 2025-11-28
*/
public interface WorkPlanMapper extends BaseMapper<WorkPlan> {
}

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.desk.produce.mapper.WorkPlanMapper">
<!-- 通用查询映射结果 -->
<resultMap id="workPlanResultMap" type="org.springblade.desk.produce.pojo.entity.WorkPlan">
<result column="ID" property="id"/>
<result column="WO_ID" property="woId"/>
<result column="PPS_ID" property="ppsId"/>
<result column="ORDERS" property="orders"/>
<result column="MAKE_MEMO" property="makeMemo"/>
<result column="HOUR_QUOTA" property="hourQuota"/>
<result column="START_TIME" property="startTime"/>
<result column="END_TIME" property="endTime"/>
<result column="MAKE_TEAM" property="makeTeam"/>
<result column="OEM" property="oem"/>
<result column="OC_ID" property="ocId"/>
<result column="FRONT_WP_ID" property="frontWpId"/>
<result column="NEXT_WP_ID" property="nextWpId"/>
<result column="TEST_QTY" property="testQty"/>
<result column="QUALIFIED_QTY" property="qualifiedQty"/>
<result column="SCRAP_QTY" property="scrapQty"/>
<result column="UNQUALIFIED_QTY" property="unqualifiedQty"/>
<result column="FACT_START_TIME" property="factStartTime"/>
<result column="FACT_END_TIME" property="factEndTime"/>
<result column="BIND_STATUS" property="bindStatus"/>
<result column="WORK_QTY" property="workQty"/>
<result column="RECEIVE_MAN" property="receiveMan"/>
<result column="HOURS" property="hours"/>
<result column="CA_ID" property="caId"/>
<result column="PRINT_TYPE" property="printType"/>
<result column="SUBSIDIARY_TEAM" property="subsidiaryTeam"/>
<result column="SUB_TYPE" property="subType"/>
<result column="CRUX_PROCESS" property="cruxProcess"/>
<result column="LOSS_QTY" property="lossQty"/>
<result column="WP_MONEY" property="wpMoney"/>
<result column="PAPERS" property="papers"/>
<result column="REFERENCE_FILE" property="referenceFile"/>
<result column="WX_NO" property="wxNo"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
</resultMap>
</mapper>

@ -0,0 +1,21 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.BsProcedureTeam;
import java.util.List;
/**
* 工序下的班组 服务类
*
* @author BladeX
* @since 2025-11-28
*/
public interface IBsProcedureTeamService extends BaseService<BsProcedureTeam> {
/**
* @Description: 指定工序已选班组
* @return List<BsProcedureTeam>
*/
List<BsProcedureTeam> findBsProcedureTeamByPpsId(Long id);
}

@ -0,0 +1,15 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.MacToolUse;
/**
* 设备工装使用记录 服务类
*
* @author BladeX
* @since 2025-11-28
*/
public interface IMacToolUseService extends BaseService<MacToolUse> {
}

@ -0,0 +1,15 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.MakeRec;
/**
* 加工记录 服务类
*
* @author BladeX
* @since 2025-11-28
*/
public interface IMakeRecService extends BaseService<MakeRec> {
}

@ -0,0 +1,14 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
/**
* 车间订单运行记录表 服务类
*
* @author BladeX
*/
public interface IWorkOrderRunService extends BaseService<WorkOrderRun> {
}

@ -0,0 +1,29 @@
package org.springblade.desk.produce.service;
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.vo.BatchPrepareVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
/**
* 车间订单表 服务类
*
* @author BladeX
* @since 2025-11-28
*/
public interface IWorkOrderService extends BaseService<WorkOrder> {
/**
* 自定义分页
*
* @param page 分页参数
* @param WorkOrder 查询参数
* @return IPage<WorkOrderVO>
*/
IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO WorkOrder);
BatchPrepareVO batchesPrepare(Long woId);
boolean inBatches(Long oldWoId, WorkOrder workOrder, Long userId);
}

@ -0,0 +1,26 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import java.util.List;
/**
* 车间作业计划 服务类
*
* @author BladeX
* @since 2025-11-28
*/
public interface IWorkPlanService extends BaseService<WorkPlan> {
void addWorkPlan(WorkOrder wo, List<WorkPlan> wpList, List<Long> deleteIds);
/**
* <p>方法名: editPreviewNextWorkPlan </p>
* <p>方法描述: 更新加工任务的上下级关系 </p>
*
* @param woId 生产车间
*/
void editPreviewNextWorkPlan(Long woId);
}

@ -0,0 +1,24 @@
package org.springblade.desk.produce.service.impl;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.produce.mapper.BsProcedureTeamMapper;
import org.springblade.desk.produce.pojo.entity.BsProcedureTeam;
import org.springblade.desk.produce.service.IBsProcedureTeamService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 工序下的班组 服务实现类
*
* @author BladeX
* @since 2025-11-28
*/
@Service
public class BsProcedureTeamServiceImpl extends BaseServiceImpl<BsProcedureTeamMapper, BsProcedureTeam> implements IBsProcedureTeamService {
@Override
public List<BsProcedureTeam> findBsProcedureTeamByPpsId(Long id) {
return baseMapper.findBsProcedureTeamByPpsId(id);
}
}

@ -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.MacToolUseMapper;
import org.springblade.desk.produce.pojo.entity.MacToolUse;
import org.springblade.desk.produce.service.IMacToolUseService;
import org.springframework.stereotype.Service;
/**
* 设备工装使用记录 服务实现类
*
* @author BladeX
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class MacToolUseServiceImpl extends BaseServiceImpl<MacToolUseMapper, MacToolUse> implements IMacToolUseService {
}

@ -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.MakeRecMapper;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.service.IMakeRecService;
import org.springframework.stereotype.Service;
/**
* 加工记录 服务实现类
*
* @author BladeX
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec> implements IMakeRecService {
}

@ -0,0 +1,20 @@
package org.springblade.desk.produce.service.impl;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.produce.mapper.WorkOrderRunMapper;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 车间订单运行记录表 服务实现类
*
* @author BladeX
* @since 2025-11-28
*/
@Service
public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, WorkOrderRun> implements IWorkOrderRunService {
}

@ -0,0 +1,454 @@
package org.springblade.desk.produce.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.WorkOrderMapper;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.vo.BatchPrepareVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.pojo.entity.InspectionTask;
import org.springblade.desk.quality.pojo.entity.PlanTest;
import org.springblade.desk.quality.service.IInspectionTaskService;
import org.springblade.desk.quality.service.IPlanTestService;
import org.springblade.desk.quality.service.IWorkPlanItemService;
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;
/**
* 车间订单表 服务实现类
*
* @author BladeX
* @since 2025-11-28
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkOrder> implements IWorkOrderService {
private final IYieldOrderService yieldOrderService;
private final IWorkPlanService workPlanService;
private final IBsProcessSetService bsProcessSetService;
private final IWorkPlanItemService workPlanItemService;
private final IInspectionTaskService iInspectionTaskService;
private final IWorkOrderRunService workOrderRunService;
private final IMakeRecService makeRecService;
private final IMacToolUseService macToolUseService;
private final IPlanTestService planTestService;
@Override
public IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO workOrder) {
return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder));
}
@Override
public BatchPrepareVO batchesPrepare(Long woId) {
WorkOrder workOrder = this.getById(woId);
YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId());
BatchPrepareVO batchPrepareVO = new BatchPrepareVO();
batchPrepareVO.setYieldOrder(yieldOrder);
batchPrepareVO.setWoCode(this.nextCode(yieldOrder.getYpCode()));
batchPrepareVO.setCardNo(this.nextCardNo(yieldOrder.getYpCode(),workOrder.getCardNo()));
batchPrepareVO.setBatchNo(this.nextBatchNo(yieldOrder.getYpCode(),workOrder.getBatchNo()));
batchPrepareVO.setMesCardNo(this.nextMesCardNo(workOrder.getMesCardNo()));
return batchPrepareVO;
}
@Override
public boolean inBatches(Long oldWoId, WorkOrder workOrder, Long userId) {
WorkOrder oldWo = this.getById(oldWoId);
WorkOrder newWo = new WorkOrder();
YieldOrder newYie = new YieldOrder();
YieldOrder oldYie = yieldOrderService.getById(oldWo.getYoId());
BeanUtils.copyProperties(oldWo, newWo);
BeanUtils.copyProperties(oldYie, newYie);
newYie.setId(null);
newYie.setYpQty(workOrder.getMakeQty());
newYie.setBatchNo(workOrder.getBatchNo());
newYie.setCardNo(workOrder.getCardNo());
newYie.setMemo("分批创建订单,用于二次来查原单");
newYie.setStatus(YieldOrderEnum.STATUS_PROCESSING.getCode());
yieldOrderService.save(newYie);
YieldOrder newPj1 = yieldOrderService.getYoByCardNo(workOrder.getCardNo());
newWo.setId(null);
newWo.setYoId(newPj1.getId());
newWo.setMakeQty(workOrder.getMakeQty());
newWo.setWoCode(workOrder.getWoCode());
newWo.setBatchNo(workOrder.getBatchNo());
newWo.setOemType(-1);
newWo.setCardNo(workOrder.getCardNo());
newWo.setMemo(workOrder.getMemo());
newWo.setMesCardNo(this.nextMesCardNo(oldWo.getMesCardNo()));
oldWo.setMakeQty(oldWo.getMakeQty() - newWo.getMakeQty());
this.addWorkOrder(newWo);
//保存作业计划
List<WorkPlan> oldList = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, oldWoId));
List<WorkPlan> wpList = new ArrayList<>(oldList.size());
for (WorkPlan oldWp : oldList) {
WorkPlan wp = new WorkPlan();
BeanUtil.copyProperties(oldWp,wp);
wp.setId(null);
wp.setQualifiedQty(newWo.getMakeQty());
wp.setWorkQty(newWo.getMakeQty());
if (wp.getStatus() == 2) {
wp.setWorkQty(0L);
} else if (wp.getStatus() == 1) {
wp.setWorkQty(0L);
wp.setQualifiedQty(0L);
}
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());
if (!"镀后接收".equals(processSet.getName())) {
wp.setFactEndTime(oldWp.getFactEndTime());
}
wp.setCheckItemList(workPlanItemService.listByWorkPlanId(oldWp.getId()));
wp.setInspectionTask(iInspectionTaskService.getPrWorkCheckByWpId(oldWp.getId()));
wpList.add(wp);
}
//产生车间运行记录信息
WorkOrderRun oldRun = workOrderRunService.getById(oldWo.getWorId());
WorkOrderRun wr = WorkOrderRun.builder().woId(newWo.getId()).woCode(newWo.getWoCode()).runType(WorkOrderRun.RUN_TYPE_2)
.inTeam(oldRun != null ? oldRun.getInTeam() : null).memo("分批(厂内)").approvalMan(userId).systemData("1")
.collaborate(newWo.getCollaborate()).runStatus(WorkOrderRun.RUN_STATUS_ISSUED).build();
workOrderRunService.save(wr);
newWo.setWorId(wr.getId());
//保存作业计划
this.calculationWp(newWo, wpList);
// 转存工序的加工信息
this.saveProcessMarkRec(oldList, wpList);
return true;
}
private void addWorkOrder(WorkOrder wo) {
wo.setInventoryQty(0);
wo.setCreateTime(new Date());
wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_NORMAL);
wo.setPickingStatus(WorkOrder.PICKING_STATUS_NOT);
if (wo.getOem() == null) {
wo.setOem("0");
}
if (StringUtils.isBlank(wo.getMesCardNo())) {
String code = this.cardNextCode();
//验证此编码是否重复
long count = this.count(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getMesCardNo, code));
if (count > 0) {
code = this.cardNextCode();
}
wo.setMesCardNo(code);
}
this.save(wo);
}
private String cardNextCode() {
String codePattern = "RBMES" + getRand("YYMM", 0);
int randNum1 = (int) (Math.random() * (1000 - 100 + 1) + 100);
int randNum2 = (int) (Math.random() * (1000 - 100 + 1) + 100);
// 下个编码
String code = codePattern + randNum1 + randNum2;
long count = this.count(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getMesCardNo, code));
if (count > 0) {
code = cardNextCode();
}
return code;
}
public String getRand(String datePatten, int randLen) {
Calendar now = Calendar.getInstance();
StringBuilder rtn = new StringBuilder();
String st = "";
int t = now.get(Calendar.YEAR);
if (datePatten.contains("YY")) {
if (datePatten.contains("YYYY")) {
st = t + "";
} else {
st = t + "";
if (st.length() >= 2) {
st = st.substring(st.length() - 2);
}
}
}
rtn.append(st);
if (datePatten.contains("MM")) {
t = now.get(Calendar.MONTH) + 1;
st = t < 10 ? "0" + t : "" + t;
rtn.append(st);
}
if (datePatten.contains("DD")) {
t = now.get(Calendar.DAY_OF_MONTH);
st = t < 10 ? "0" + t : "" + t;
rtn.append(st);
}
if (datePatten.contains("hh")) {
t = now.get(Calendar.HOUR_OF_DAY);
st = t < 10 ? "0" + t : "" + t;
rtn.append(st);
}
if (datePatten.contains("mm")) {
t = now.get(Calendar.MINUTE);
st = t < 10 ? "0" + t : "" + t;
rtn.append(st);
}
if (datePatten.contains("ss")) {
t = now.get(Calendar.SECOND);
st = t < 10 ? "0" + t : "" + t;
rtn.append(st);
}
if (datePatten.contains("ts")) {
t = now.get(Calendar.MILLISECOND);
if (t < 10) {
st = "00" + t;
} else if (t < 100) {
st = "0" + t;
} else {
st = "" + t;
}
rtn.append(st);
}
rtn.append(randSn(randLen));
return rtn.toString();
}
private String randSn(int randNum) {
StringBuilder t = new StringBuilder();
for(int i = 0; i < randNum; ++i) {
double dblRnd = Math.random() * 10.0;
int intRnd = (int)dblRnd;
t.append(intRnd);
}
return t.toString();
}
private void calculationWp(WorkOrder wo, List<WorkPlan> wpList) {
workPlanService.addWorkPlan(wo, wpList, null);
//计算上下级关系
workPlanService.editPreviewNextWorkPlan(wo.getId());
//获取当前工序及最后一道工序完成日期
List<WorkPlan> list = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, wo.getId()));
WorkPlan wp = this.beforeOneWorkPlan(list);
if (wp == null) {
throw new ServiceException("无工序数据,请联系工艺员");
}
if (wp.getFrontWpId() != null && WorkPlan.STATUS_NO_START.equals(wp.getStatus())) {
WorkPlan frontWp = workPlanService.getById(wp.getFrontWpId());
frontWp.setStatus(WorkPlan.STATUS_WORK_OK);
frontWp.setFactEndTime(null);
wo.setWpId(frontWp.getId());
} else {
wo.setWpId(wp.getId());
}
this.updateById(wo);
}
protected WorkPlan beforeOneWorkPlan(List<WorkPlan> list) {
WorkPlan rtn = null;
for (WorkPlan wp : list) {
if (WorkPlan.STATUS_COMPLETE > wp.getStatus()) {
rtn = wp;
break;
}
}
return rtn;
}
private void saveProcessMarkRec(List<WorkPlan> oldList, List<WorkPlan> wpList) {
for (WorkPlan prWorkPlan : oldList) {
// 如果已经当前工序大于加工中,
if (prWorkPlan.getStatus() > WorkPlan.STATUS_START) {
MakeRec newPrMakeRec = null;
MacToolUse newPrMacToolUse = null;
PlanTest newPlanTest = null;
for (WorkPlan workPlan : wpList) {
// 找到相同的工序
if (prWorkPlan.getOrders().equals(workPlan.getOrders())) {
// 报工记录
List<MakeRec> makeRecList = makeRecService.list(Wrappers.lambdaQuery(MakeRec.class).eq(MakeRec::getWpId, prWorkPlan.getId()));
if (makeRecList != null && !makeRecList.isEmpty()) {
// 保存报工记录
for (MakeRec prMakeRec : makeRecList) {
newPrMakeRec = new MakeRec();
BeanUtils.copyProperties(prMakeRec, newPrMakeRec);
newPrMakeRec.setId(null);
newPrMakeRec.setWpId(workPlan.getId());
makeRecService.save(newPrMakeRec);
}
}
// 绑定记录
List<MacToolUse> processBingingRec = macToolUseService.list(Wrappers.lambdaQuery(MacToolUse.class).eq(MacToolUse::getWpId, prWorkPlan.getId()));
if (processBingingRec != null && !processBingingRec.isEmpty()) {
for (MacToolUse prMacToolUse : processBingingRec) {
newPrMacToolUse = new MacToolUse();
BeanUtils.copyProperties(prMacToolUse, newPrMacToolUse);
newPrMacToolUse.setId(null);
newPrMacToolUse.setWpId(workPlan.getId());
macToolUseService.save(newPrMacToolUse);
}
}
// 检验记录
InspectionTask inspectionTask = iInspectionTaskService.getPrWorkCheckByWpId(prWorkPlan.getId());
if (inspectionTask != null && inspectionTask.getId() != null) {
InspectionTask newPrWorkCheck = new InspectionTask();
BeanUtils.copyProperties(inspectionTask, newPrWorkCheck);
newPrWorkCheck.setId(null);
newPrWorkCheck.setWpId(workPlan.getId());
iInspectionTaskService.save(inspectionTask);
}
// 转试记录
List<PlanTest> prPlanTests = planTestService.list(Wrappers.lambdaQuery(PlanTest.class).eq(PlanTest::getWpId, prWorkPlan.getId()));
if (prPlanTests != null && !prPlanTests.isEmpty()) {
for (PlanTest planTest : prPlanTests) {
newPlanTest = new PlanTest();
BeanUtils.copyProperties(planTest, newPlanTest);
newPlanTest.setId(null);
newPlanTest.setWpId(workPlan.getId());
planTestService.save(newPlanTest);
}
}
}
}
}
}
}
private String nextMesCardNo(String mesCardNo) {
// 自增总长度
int len = 2;
// 自增值
int num = 0;
// 编码模式
String codePattern = mesCardNo;
// 当前模式下最大编码
WorkOrder workOrder = baseMapper.getMaxByMesCardNo(codePattern);
if (workOrder != null && workOrder.getMesCardNo().length() != codePattern.length()) {
num = Integer.parseInt(workOrder.getMesCardNo().substring(codePattern.length(), codePattern.length() + len));
}
num++;
// 下个编码
String code = codePattern + prefix(String.valueOf(num), "0", len);
WorkOrder oldWorkOrder = baseMapper.getMaxByMesCardNo(code);
if (oldWorkOrder != null && oldWorkOrder.getId() != null) {
return this.nextMesCardNo(code);
} else {
return code;
}
}
private String nextBatchNo(String ypCode, String batchNo) {
// 自增总长度
int len = 2;
// 自增值
int num = 0;
// 编码模式
String codePattern = batchNo + "-";
// 当前模式下最大编码
WorkOrder workOrder = baseMapper.getMaxByBatchNo(codePattern, ypCode);
if (workOrder != null && workOrder.getBatchNo().length() != codePattern.length()) {
num = Integer.parseInt(workOrder.getBatchNo().substring(codePattern.length(), codePattern.length() + len));
}
num++;
// 下个编码
return codePattern + prefix(String.valueOf(num), "0", len);
}
private String nextCardNo(String ypCode, String cardNo) {
// 自增总长度
int len = 2;
// 自增值
int num = 0;
// 当前模式下最大编码
WorkOrder workOrder = baseMapper.getMaxByCardNo(cardNo, ypCode);
if (workOrder != null && workOrder.getCardNo().length() != cardNo.length()) {
num = Integer.parseInt(workOrder.getCardNo().substring(cardNo.length(), cardNo.length() + len));
}
num++;
// 下个编码
String code = cardNo + prefix(String.valueOf(num), "0", len);
WorkOrder oldWorkOrder = baseMapper.getWorkOrderByCardNo(code, (short) -1);
if (oldWorkOrder != null && oldWorkOrder.getId() != null) {
return this.nextCardNo(ypCode, code);
} else {
return code;
}
}
private String nextCode(String code) {
// 自增总长度
int len = 3;
// 自增值
int num = 0;
// 编码模式
String codePattern = code + "-R";
// 当前模式下最大编码
WorkOrder workOrder = baseMapper.getMaxByCodePattern(codePattern);
if (workOrder != null) {
num = Integer.parseInt(workOrder.getWoCode().substring(codePattern.length(), codePattern.length() + len));
}
num++;
// 下个编码
return codePattern + prefix(String.valueOf(num), "0", len);
}
public String prefix(String stringToFix, String fixChar, int targetLen) {
int len = stringToFix.length();
for(int i = 0; i < targetLen - len; i += fixChar.length()) {
stringToFix = fixChar + stringToFix;
}
return stringToFix;
}
}

@ -0,0 +1,216 @@
package org.springblade.desk.produce.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.pojo.entity.DsProcessMeasuringToolEntity;
import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity;
import org.springblade.desk.dashboard.service.*;
import org.springblade.desk.produce.mapper.WorkPlanMapper;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.pojo.entity.InspectionTask;
import org.springblade.desk.quality.pojo.entity.WorkPlanItem;
import org.springblade.desk.quality.pojo.entity.WorkPlanItemDetail;
import org.springblade.desk.quality.pojo.vo.WorkPlanItemDetailVO;
import org.springblade.desk.quality.pojo.vo.WorkPlanItemVO;
import org.springblade.desk.quality.service.IInspectionTaskService;
import org.springblade.desk.quality.service.IPlanTestService;
import org.springblade.desk.quality.service.IWorkPlanItemService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 车间作业计划 服务实现类
*
* @author BladeX
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan> implements IWorkPlanService {
private final IBsProcedureTeamService bsProcedureTeamService;
private final IBsProcessSetService bsProcessSetService;
private final IDsProcessService dsProcessService;
private final IPrReworkProcessService prReworkProcessService;
private final IWorkPlanItemService workPlanItemService;
private final IInspectionTaskService inspectionTaskService;
private final IWorkOrderRunService workOrderRunService;
private final IDsProcessMeasuringToolService processMeasuringToolService;
private final IDsProcessProjectService dsProcessProjectService;
private final IMakeRecService makeRecService;
private final IMacToolUseService macToolUseService;
private final IPlanTestService planTestService;
@Override
public void addWorkPlan(WorkOrder wo, List<WorkPlan> wpList, List<Long> deleteIds) {
if (wpList != null) {
//特殊班组
BsTeamSetEntity st;
List<BsProcedureTeam> ptLst;
String str = "";
for (WorkPlan wp : wpList) {
ObjectUtils.defaultIfNull(wp, new WorkPlan());
wp.setWoId(wo.getId());
wp.setTestQty(0);
wp.setScrapQty(0);
wp.setCreateTime(new Date());
wp.setUnqualifiedQty(0);
//判定工序是否特殊工序,如果是,则附属班组存在值
if (wp.getMakeTeam() != null) {
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());
if (processSet != null && "1".equals(processSet.getIsSpecial()) && wp.getSubsidiaryTeam() == null && wp.getOcId() == null) {
ptLst = bsProcedureTeamService.findBsProcedureTeamByPpsId(processSet.getId());
if (ptLst != null && ptLst.size() > 0) {
wp.setSubsidiaryTeam(ptLst.get(0).getTsId());
}
}
}
if (wp.getOcId() != null) {
wp.setOem("1");
}
this.save(wp);
if (wp.getPid() != null && wp.getRpId() != null) {
List<DsProcessProjectEntity> miList = dsProcessProjectService.list(Wrappers.lambdaQuery(DsProcessProjectEntity.class).eq(DsProcessProjectEntity::getProcessId, wp.getPid()));
List<DsProcessMeasuringToolEntity> gaugeList = processMeasuringToolService.list(Wrappers.lambdaQuery(DsProcessMeasuringToolEntity.class).eq(DsProcessMeasuringToolEntity::getProcessId, wp.getPid()));
if (!miList.isEmpty()) {
Map<String, List<DsProcessMeasuringToolEntity>> miMap = null;
if (gaugeList != null) {
miMap = gaugeList.stream().collect(Collectors.groupingBy(DsProcessMeasuringToolEntity::getTrialNo));
}
List<WorkPlanItem> checkItemList = new ArrayList<>(miList.size());
for (DsProcessProjectEntity mi : miList) {
//zxh 20250514 正式工艺生成订单时,为wpi增加赋值工时数据,暂不考虑返修工艺
// wpi = new WorkPlanItem(mi.getTrialNo(), mi.getProjectName(), mi.getProjectStandard(),mi.getProHours(),mi.getPrepareHours());
WorkPlanItemVO wpi = new WorkPlanItemVO();
wpi.setItemCode(mi.getTrialNo());
wpi.setItemName(mi.getProjectName());
wpi.setStandardName(mi.getProjectStandard());
wpi.setHourQuota(mi.getPrepareHours());
wpi.setHourPrepare(mi.getPrepareHours());
if (miMap != null && !miMap.isEmpty()) {
List<DsProcessMeasuringToolEntity> list = miMap.get(mi.getTrialNo());
if (list != null && !list.isEmpty()) {
List<WorkPlanItemDetailVO> itemList = new ArrayList<>(list.size());
for (DsProcessMeasuringToolEntity toolEntity : list) {
WorkPlanItemDetailVO item = new WorkPlanItemDetailVO();
item.setTestType("1".equals(toolEntity.getTestType()) ? "镀前" : "镀后");
item.setRuleSize(toolEntity.getToolSize());
item.setTools(toolEntity.getTool());
item.setMtId(toolEntity.getId());
itemList.add(item);
}
wpi.setWpItemDetailList(itemList);
}
}
checkItemList.add(wpi);
}
wp.setCheckItemList(checkItemList);
str = str + "工序号:" + wp.getOrders() + "订单id:" + wp.getId() + "试验项目个数:" + checkItemList.size() + "--";
}
if (wp.getPid() != null) {
wp.setCruxProcess(dsProcessService.getById(wp.getPid()).getIsMain());
} else if (wp.getRpId() != null) {
wp.setCruxProcess(prReworkProcessService.getById(wp.getRpId()).getCruxProcess());
}
}
log.info(str);
//复制检验明细
if (wp.getCheckItemList() != null && !wp.getCheckItemList().isEmpty()) {
workPlanItemService.saveCheckItem(wp, wp.getCheckItemList(), null, "");
}
//复制检验记录
InspectionTask inspectionTask = wp.getInspectionTask();
if (inspectionTask != null) {
InspectionTask newWc = new InspectionTask();
BeanUtils.copyProperties(inspectionTask, newWc);
newWc.setId(null);
newWc.setWpId(wp.getId());
newWc.setCheckQty(wo.getMakeQty());
newWc.setQualifiedQty(wo.getMakeQty());
WorkOrderRun workOrderRun = workOrderRunService.getById(wo.getWorId());
inspectionTaskService.saveOrEdit(newWc, workOrderRun.getCreateUser());
}
}
}
if (deleteIds != null) {
for (Long wpId : deleteIds) {
//删除报工记录
makeRecService.remove(Wrappers.lambdaQuery(MakeRec.class).eq(MakeRec::getWpId, wpId));
//删除设备绑定记录
macToolUseService.remove(Wrappers.lambdaQuery(MacToolUse.class).eq(MacToolUse::getWpId, wpId));
//删除加工明细
workPlanItemService.remove(Wrappers.lambdaQuery(WorkPlanItem.class).eq(WorkPlanItem::getWpId, wpId));
//删除检验记录
inspectionTaskService.remove(Wrappers.lambdaQuery(InspectionTask.class).eq(InspectionTask::getWpId, wpId));
// todo 删除镀前出入库记录
// List<PrPlateAround> paList = prPlateAroundService.listByWpId(wpId);
// WorkPlan workPlan = this.getById(wpId);
// if (!paList.isEmpty()) {
// for (PrPlateAround prPlateAround : paList) {
// // 如果有出库记录,删除上序的入库记录
// if (PrPlateAround.BEFORE_PLAN_OUT.equals(prPlateAround.getPaType())) {
// if (workPlan.getFrontWpId() != null) {
// PrPlateAround prPlateAround1 = prPlateAroundService.getPrPlateAround(prWorkPlan.getFrontWorkPlan().getWpId(), PrPlateAround.BEFORE_PLAT_IN);
// if (prPlateAround1 != null && prPlateAround1.getPaId() != null) {
// prPlateAroundService.delete(prPlateAround1.getPaId());
// }
// }
// }
// prPlateAroundService.delete(prPlateAround.getPaId());
// }
// }
this.removeById(wpId);
}
}
}
@Override
public void editPreviewNextWorkPlan(Long woId) {
List<WorkPlan> wpList = this.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, woId));
if (wpList == null || wpList.isEmpty()) {
return;
}
WorkPlan frontWp = null;
for (WorkPlan wp : wpList) {
// 先清空本工序的上下级任务,然后在赋值,防止最后一到工序的上下级关系混乱
wp.setFrontWpId(null);
wp.setNextWpId(null);
wp.setCreateTime(new Date());
wp.setFrontWpId(frontWp.getId());
if (frontWp != null) {
frontWp.setNextWpId(wp.getId());
}
frontWp = wp;
this.updateById(wp);
}
}
}

@ -0,0 +1,40 @@
package org.springblade.desk.produce.wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import java.util.List;
import java.util.Objects;
/**
* 车间订单表 包装类,返回视图层所需的字段
*
* @since 2026-1-19
*/
public class WorkOrderWrapper extends BaseEntityWrapper<WorkOrder, WorkOrderVO> {
public static WorkOrderWrapper build() {
return new WorkOrderWrapper();
}
@Override
public WorkOrderVO entityVO(WorkOrder workOrder) {
WorkOrderVO workOrderVO = Objects.requireNonNull(BeanUtil.copyProperties(workOrder, WorkOrderVO.class));
// User createUser = UserCache.getUser(workOrderVO.getCreateUser());
// User updateUser = UserCache.getUser(workOrderVO.getUpdateUser());
// workOrderVO.setCreateUserName(createUser.getName());
// workOrderVO.setUpdateUserName(updateUser.getName());
return workOrderVO;
}
public IPage<WorkOrderVO> listWorkOrderVO(IPage<WorkOrderVO> pages) {
List<WorkOrderVO> workOrderVos = pages.getRecords();
pages.setRecords(workOrderVos);
return pages;
}
}

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.quality.excel.WorkPlanItemDetailExcel;
import org.springblade.desk.quality.pojo.entity.WorkPlanItem;
import org.springblade.desk.quality.pojo.entity.WorkPlanItemDetail;
import org.springblade.desk.quality.pojo.vo.WorkPlanItemDetailVO;
@ -48,4 +49,14 @@ public interface IWorkPlanItemDetailService extends BaseService<WorkPlanItemDeta
List<WorkPlanItemDetail> listByWorkPlanItemId(Long workPlanItemId);
List<WorkPlanItemDetailVO> listVOByWorkPlanItemId(Long workPlanItemId);
/**
* <p>方法名: saveItemDetail </p>
* <p>方法描述: 新增明细 </p>
*
* @param wpi 检验项
* @param itemDetailList 明细
* @param deleteIds 删除Id
*/
void saveItemDetail(WorkPlanItem wpi, List<WorkPlanItemDetail> itemDetailList, List<Long> deleteIds);
}

@ -6,6 +6,7 @@ package org.springblade.desk.quality.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.quality.excel.WorkPlanItemExcel;
import org.springblade.desk.quality.pojo.entity.WorkPlanItem;
import org.springblade.desk.quality.pojo.vo.WorkPlanItemVO;
@ -47,4 +48,8 @@ public interface IWorkPlanItemService extends BaseService<WorkPlanItem> {
List<WorkPlanItem> listByTaskId(Long taskId);
List<WorkPlanItemVO> listVOByTaskId(Long taskId);
void saveCheckItem(WorkPlan wp, List<WorkPlanItem> checkItemList, List<Long> deleteIds, String s);
void deleteItem(List<Long> deleteIds);
}

@ -13,6 +13,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.dashboard.pojo.entity.DsProcessMeasuringToolEntity;
import org.springblade.desk.dashboard.service.IDsProcessMeasuringToolService;
import org.springblade.desk.quality.excel.WorkPlanItemDetailExcel;
import org.springblade.desk.quality.mapper.WorkPlanItemDetailMapper;
import org.springblade.desk.quality.pojo.entity.WorkPlanItem;
@ -47,6 +49,8 @@ public class WorkPlanItemDetailServiceImpl extends BaseServiceImpl<WorkPlanItemD
@Resource
private IDictClient dictClient;
private final IDsProcessMeasuringToolService processMeasuringToolService;
@Override
public IPage<WorkPlanItemDetailVO> selectWorkPlanItemDetailPage(IPage<WorkPlanItemDetailVO> page, WorkPlanItemDetailVO workPlanItemDetail) {
return page.setRecords(baseMapper.selectWorkPlanItemDetailPage(page, workPlanItemDetail));
@ -93,4 +97,28 @@ public class WorkPlanItemDetailServiceImpl extends BaseServiceImpl<WorkPlanItemD
}
return listVO;
}
@Override
public void saveItemDetail(WorkPlanItem wpi, List<WorkPlanItemDetail> itemDetailList, List<Long> deleteIds) {
if (itemDetailList != null) {
itemDetailList.forEach(item -> {
WorkPlanItemDetail detail = new WorkPlanItemDetail();
detail.setWorkPlanItemId(wpi.getId());
detail.setTestType(item.getTestType());
detail.setMtId(item.getMtId());
detail.setRuleSize(item.getRuleSize());
// 保存量具信息
if (item.getMtId() == null) {
detail.setTools(item.getTools());
}else {
DsProcessMeasuringToolEntity toolEntity = processMeasuringToolService.getById(item.getMtId());
detail.setTools(toolEntity != null ? toolEntity.getTool() : null);
}
this.save(detail);
});
}
if (deleteIds != null) {
baseMapper.deleteByIds(deleteIds);
}
}
}

@ -7,20 +7,25 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.jsonwebtoken.lang.Collections;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import org.springblade.desk.basic.util.IdUtil;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.quality.constant.InspectionItemConst;
import org.springblade.desk.quality.excel.WorkPlanItemExcel;
import org.springblade.desk.quality.mapper.WorkPlanItemMapper;
import org.springblade.desk.quality.pojo.entity.InspectionItem;
import org.springblade.desk.quality.pojo.entity.Standard;
import org.springblade.desk.quality.pojo.entity.WorkPlanItem;
import org.springblade.desk.quality.pojo.entity.WorkPlanItemDetail;
import org.springblade.desk.quality.pojo.vo.InspectionItemVO;
import org.springblade.desk.quality.pojo.vo.StandardVO;
import org.springblade.desk.quality.pojo.vo.WorkPlanItemVO;
@ -137,4 +142,47 @@ public class WorkPlanItemServiceImpl extends BaseServiceImpl<WorkPlanItemMapper,
}
return listVO;
}
@Override
public void saveCheckItem(WorkPlan wp, List<WorkPlanItem> checkItemList, List<Long> deleteIds, String s) {
if (checkItemList != null) {
checkItemList.forEach(item -> {
WorkPlanItem wpi = new WorkPlanItem();
wpi.setWpId(wp.getId());
wpi.setCheckResult(item.getCheckResult());
wpi.setItemName(item.getItemName());
wpi.setItemCode(item.getItemCode());
wpi.setStandardName(item.getStandardName());
wpi.setCheckUserId(item.getCheckUserId());
wpi.setCheckDate(item.getCheckDate());
//zxh 20250514 wpi中增加工时字段后在所有wpi的save方法下增加工时字段的set方法
//zxh 20250702 优化set
wpi.setHourQuota(item.getHourQuota() != null ? item.getHourQuota() : 0);
wpi.setHourPrepare(item.getHourPrepare() != null ? item.getHourPrepare() : 0);
this.save(wpi);
List<WorkPlanItemDetail> itemDetails = wpItemDetailService.list(Wrappers.lambdaQuery(WorkPlanItemDetail.class).eq(WorkPlanItemDetail::getWorkPlanItemId, wpi.getId()));
if (Collections.isEmpty(itemDetails)) {
wpItemDetailService.saveItemDetail(wpi, itemDetails, null);
}
});
}
//zxh 20241217 厚度检测已完成不允许删除
if (deleteIds != null) {
for (Long deleteId : deleteIds) {
WorkPlanItem prWorkPlanItem = this.getById(deleteId);
if (prWorkPlanItem != null && prWorkPlanItem.getCheckUserId() != null && "厚度检测".equals(prWorkPlanItem.getItemName())) {
throw new ServiceException("厚度检测已完成,不允许删除");
}
}
}
deleteItem(deleteIds);
}
@Override
public void deleteItem(List<Long> deleteIds) {
if (deleteIds != null) {
baseMapper.deleteByIds(deleteIds);
wpItemDetailService.remove(Wrappers.lambdaQuery(WorkPlanItemDetail.class).in(WorkPlanItemDetail::getWorkPlanItemId, deleteIds));
}
}
}

@ -0,0 +1,21 @@
package org.springblade.erpdata.mapper;
import com.baomidou.mybatisplus.core.mapper.Mapper;
import org.springblade.erpdata.pojo.dto.view.MesRbSjso;
import java.util.List;
/**
* Mapper 接口
*
* @author lqk
*/
public interface ErpMesRbSjsoMapper extends Mapper {
/**
* 从ERP视图中获取要同步的推进计划转工单
*
* @return
*/
List<MesRbSjso> getMesRbSjsoErpList();
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "org.springblade.erpdata.mapper.ErpMesRbSjsoMapper">
<select id = "getMesRbSjsoErpList" resultType = "org.springblade.erpdata.pojo.dto.view.MesRbSjso">
SELECT * FROM v_mes_rb_sjso WHERE is_deleted = 0
</select>
</mapper>

@ -0,0 +1,21 @@
package org.springblade.erpdata.mapper;
import com.baomidou.mybatisplus.core.mapper.Mapper;
import org.springblade.erpdata.pojo.dto.view.MesRbSodelrecwx;
import java.util.List;
/**
* Mapper 接口
*
* @author lqk
*/
public interface ErpMesRbSodelrecwxMapper extends Mapper {
/**
* 从ERP视图中获取要同步的推进计划转工单
*
* @return
*/
List<MesRbSodelrecwx> getMesRbSodelrecwxErpList();
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "org.springblade.erpdata.mapper.ErpMesRbSodelrecwxMapper">
<select id = "getMesRbSodelrecwxErpList" resultType = "org.springblade.erpdata.pojo.dto.view.MesRbSodelrecwx">
SELECT * FROM v_mes_rb_sodelrecwx WHERE is_deleted = 0
</select>
</mapper>

@ -0,0 +1,22 @@
package org.springblade.erpdata.mapper;
import com.baomidou.mybatisplus.core.mapper.Mapper;
import org.springblade.erpdata.pojo.dto.view.MesRbSjso;
import org.springblade.erpdata.pojo.dto.view.MesRbWxpromotion;
import java.util.List;
/**
* Mapper 接口
*
* @author lqk
*/
public interface ErpMesRbWxpromotionMapper extends Mapper {
/**
* 从ERP视图中获取要同步的推进计划转工单
*
* @return
*/
List<MesRbWxpromotion> getMesRbWxpromotionErpList();
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "org.springblade.erpdata.mapper.ErpMesRbWxpromotionMapper">
<select id = "getMesRbWxpromotionErpList" resultType = "org.springblade.erpdata.pojo.dto.view.MesRbWxpromotion">
SELECT * FROM v_mes_rb_wxpromotion WHERE is_deleted = 0
</select>
</mapper>

@ -0,0 +1,14 @@
package org.springblade.erpdata.service;
/**
* ERP数据查询service
*
* @author lqk
*/
public interface IErpMesRbSjsoService {
/**
* 同步推进计划转工单
*/
void synMesRbSjso();
}

@ -0,0 +1,14 @@
package org.springblade.erpdata.service;
/**
* ERP数据查询service
*
* @author lqk
*/
public interface IErpMesRbSodelrecwxService {
/**
* 同步数据
*/
void synMesRbSodelrecwx();
}

@ -0,0 +1,14 @@
package org.springblade.erpdata.service;
/**
* ERP数据查询service
*
* @author lqk
*/
public interface IErpMesRbWxpromotionService {
/**
* 同步数据
*/
void synMesRbWxpromotion();
}

@ -0,0 +1,28 @@
package org.springblade.erpdata.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.order.feign.IApsClient;
import org.springblade.erpdata.mapper.ErpMesRbSjsoMapper;
import org.springblade.erpdata.service.IErpMesRbSjsoService;
import org.springframework.stereotype.Service;
/**
* @author lqk
* @date 2025-11-26 9:39
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class ErpMesRbSjsoServiceImpl implements IErpMesRbSjsoService {
private final ErpMesRbSjsoMapper mesRbSjsoMapper;
private final IApsClient apsClient;
@Override
public void synMesRbSjso() {
}
}

@ -0,0 +1,26 @@
package org.springblade.erpdata.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.order.feign.IApsClient;
import org.springblade.erpdata.mapper.ErpMesRbSodelrecwxMapper;
import org.springblade.erpdata.service.IErpMesRbSodelrecwxService;
import org.springframework.stereotype.Service;
/**
* @author lqk
* @date 2025-11-26 9:39
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class ErpMesRbSodelrecwxServiceImpl implements IErpMesRbSodelrecwxService {
private final ErpMesRbSodelrecwxMapper mesRbSodelrecwxMapper;
private final IApsClient apsClient;
@Override
public void synMesRbSodelrecwx() {
}
}

@ -0,0 +1,28 @@
package org.springblade.erpdata.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.order.feign.IApsClient;
import org.springblade.erpdata.mapper.ErpMesRbWxpromotionMapper;
import org.springblade.erpdata.service.IErpMesRbWxpromotionService;
import org.springframework.stereotype.Service;
/**
* @author lqk
* @date 2025-11-26 9:39
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class ErpMesRbWxpromotionServiceImpl implements IErpMesRbWxpromotionService {
private final ErpMesRbWxpromotionMapper mesRbWxpromotionMapper;
private final IApsClient apsClient;
@Override
public void synMesRbWxpromotion() {
}
}
Loading…
Cancel
Save