Merge remote-tracking branch 'origin/master'

develop-QA
wusiyu 3 months ago
commit 02dce1834f
  1. 8
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/BaseValue.java
  2. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/WorkCenter.java
  3. 137
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/WorkTank.java
  4. 34
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartToolVO.java
  5. 58
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java
  6. 22
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/ListProProcessDTO.java
  7. 23
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TransferBillDTO.java
  8. 22
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TurnTypeDTO.java
  9. 21
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdatePriorityDTO.java
  10. 25
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/UpdateStatusDTO.java
  11. 77
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java
  12. 72
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java
  13. 45
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlanRun.java
  14. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/AuditFile.java
  15. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestVO.java
  16. 114
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankTaskCopyVO.java
  17. 31
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/json/serializer/IdSerializer.java
  18. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/PlatingController.java
  19. 74
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsCraftController.java
  20. 33
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsProcessMoldToolController.java
  21. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml
  22. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java
  23. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java
  24. 87
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsCraftServiceImpl.java
  25. 46
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
  26. 49
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProcessMoldToolServiceImpl.java
  27. 37
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/EquipmentController.java
  28. 29
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/FeiBaSetController.java
  29. 32
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.xml
  30. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  31. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  32. 51
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java
  33. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/PlateAroundMapper.java
  34. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanRunMapper.java
  35. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java
  36. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java
  37. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  38. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanRunService.java
  39. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java
  40. 123
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  41. 154
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  42. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanRunServiceImpl.java
  43. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestExcel.java
  44. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestItemExcel.java
  45. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestService2.java
  46. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java
  47. 18
      doc/sql/mes/increase-260120.sql

@ -24,4 +24,12 @@ public interface BaseValue {
* No
*/
Integer NO = 0;
/**
*
*/
Integer ON = 1;
/**
*
*/
Integer OFF = 0;
}

@ -18,7 +18,7 @@ import java.io.Serial;
* @since 2025-12-16
*/
@Data
@TableName("BA_WORK_CENTER")
@TableName("BS_WORK_CENTER")
@Schema(description = "WorkCenter Entity对象")
@EqualsAndHashCode(callSuper = true)
public class WorkCenter extends BaseEntity {

@ -4,10 +4,13 @@
package org.springblade.desk.basic.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
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.util.json.serializer.IdSerializer;
import org.springblade.desk.util.json.serializer.IntegerAllToStringSerializer;
import java.io.Serial;
@ -23,80 +26,82 @@ import java.io.Serial;
@EqualsAndHashCode(callSuper = true)
public class WorkTank extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@Serial
private static final long serialVersionUID = 1L;
/**
* [作业槽]编码
*/
/**
* [作业槽]编码
*/
public static final String COL_WORK_TANK_CODE = "WORK_TANK_CODE";
/**
* [作业槽]类型
*/
/**
* [作业槽]类型
*/
public static final String COL_WORK_TANK_TYPE = "WORK_TANK_TYPE";
/**
* [作业槽]名称
*/
/**
* [作业槽]名称
*/
public static final String COL_NAME = "NAME";
/**
* 排序
*/
/**
* 排序
*/
public static final String COL_SORT = "SORT";
/**
* 备注
*/
/**
* 备注
*/
public static final String COL_REMARK = "REMARK";
/**
* 检测成分
*/
/**
* 检测成分
*/
public static final String COL_TEST_ELEMENT = "TEST_ELEMENT";
/**
* [作业中心]id
*/
/**
* [作业中心]id
*/
public static final String COL_WORKSTATION_ID = "WORKSTATION_ID";
/**
* 操作[用户]id
*/
/**
* 操作[用户]id
*/
public static final String COL_OP_USER_ID = "OP_USER_ID";
/**
* [作业槽]编码
*/
@Schema(description = "[作业槽]编码")
private String workTankCode;
/**
* [作业槽]类型
*/
@Schema(description = "[作业槽]类型")
private Long workTankType;
/**
* [作业槽]名称
*/
@Schema(description = "[作业槽]名称")
private String name;
/**
* 排序
*/
@Schema(description = "排序")
private Long sort;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
/**
* 检测成分
*/
@Schema(description = "检测成分")
private String testElement;
/**
* [作业中心]id
*/
@Schema(description = "[作业中心]id")
private Long workstationId;
/**
* 操作[用户]id
*/
@Schema(description = "操作[用户]id")
private Long opUserId;
/**
* [作业槽]编码
*/
@Schema(description = "[作业槽]编码")
private String workTankCode;
/**
* [作业槽]类型
*/
@Schema(description = "[作业槽]类型")
private Long workTankType;
/**
* [作业槽]名称
*/
@Schema(description = "[作业槽]名称")
private String name;
/**
* 排序
*/
@Schema(description = "排序")
private Long sort;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
/**
* 检测成分
*/
@Schema(description = "检测成分")
private String testElement;
/**
* [作业中心]id
*/
@JsonSerialize(using = IdSerializer.class)
@Schema(description = "[作业中心]id")
private Long workstationId;
/**
* 操作[用户]id
*/
@JsonSerialize(using = IdSerializer.class)
@Schema(description = "操作[用户]id")
private Long opUserId;
}

@ -0,0 +1,34 @@
package org.springblade.desk.dashboard.pojo.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 零件加工所需工装信息表 视图实体类
*
* @author BladeX
* @since 2025-11-12
*/
@Data
public class DsPartToolVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 名称
*/
private String name;
/**
* 编码
*/
private String code;
/**
* 备注
*/
private String memo;
}

@ -24,6 +24,59 @@ public class YieldOrder extends BaseEntity {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* 待接收
*/
public static Integer CUR_STATUS_NORMAL = 0;
/**
* 大仓已接
*/
public static Integer CUR_STATUS_STORAGE = 1;
/**
* 已派工
*/
public static Integer CUR_STATUS_DISPATCHED = 2;
/**
* 已出库
*/
public static Integer CUR_STATUS_OUT = 3;
/**
* 加工中
*/
public static Integer CUR_STATUS_PROCESSING = 5;
/**
* 已完工
*/
public static Integer CUR_STATUS_COMPLETED = 15;
/**
* 已关闭
*/
public static Integer CUR_STATUS_VOIDED = 21;
/**
* 热表订单
*/
public static Integer YIELD_TYPE_1 = 1;
/**
* 烧结订单
*/
public static Integer YIELD_TYPE_2 = 2;
/**
* 玻璃饼
*/
public static Integer YIELD_TYPE_3 = 3;
/**
* 壳体
*/
public static Integer YIELD_TYPE_4 = 4;
/**
* 插针
*/
public static Integer YIELD_TYPE_5 = 5;
/**
* 石墨模
*/
public static Integer YIELD_TYPE_6 = 6;
/**
* 作业中心
*/
@ -347,6 +400,11 @@ public class YieldOrder extends BaseEntity {
@TableField(value = "RECEIVE_TIME")
private Date receiveTime;
/**
* 需求镀层物料编码
*/
@TableField(value = "PLATE_GOODS_CODE")
private String plateGoodsCode;
/**
* 物料需求数量
*/

@ -0,0 +1,22 @@
package org.springblade.desk.produce.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 获取转外协所需数据 数据传输对象实体类
* @author litao
*/
@Data
public class ListProProcessDTO {
@Schema(description = "车间订单ID集合")
private List<Long> woIds;
@Schema(description = "转换类型:1-外协,2-厂内")
private Integer runType;
}

@ -0,0 +1,23 @@
package org.springblade.desk.produce.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
import java.util.List;
/**
* 转外协(单个/批量) 数据传输对象实体类
* @author litao
*/
@Data
public class TransferBillDTO {
@Schema(description = "车间订单运行记录")
private List<WorkOrderRun> workOrderRuns;
@Schema(description = "作业计划运行明细")
private List<WorkPlanRun> workPlanRuns;
}

@ -0,0 +1,22 @@
package org.springblade.desk.produce.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 转烧结 数据传输对象实体类
* @author litao
*/
@Data
public class TurnTypeDTO {
@Schema(description = "生产订单id")
private Long id;
@Schema(description = "订单类型")
private Integer yieldType;
}

@ -0,0 +1,21 @@
package org.springblade.desk.produce.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* 更改车间订单优先级 数据传输对象实体类
* @author litao
*/
@Data
public class UpdatePriorityDTO {
@Schema(description = "生产订单id")
private Long id;
@Schema(description = "需求交期")
private Date demandDate;
}

@ -0,0 +1,25 @@
package org.springblade.desk.produce.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 修改订单状态 数据传输对象实体类
* @author litao
*/
@Data
public class UpdateStatusDTO {
@Schema(description = "车间订单ID集合")
private List<Long> idArr;
@Schema(description = "状态")
private Integer status;
@Schema(description = "备注")
private String memo;
}

@ -0,0 +1,77 @@
package org.springblade.desk.produce.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.util.Date;
/**
* 镀前镀后 实体类
*
* @author BladeX
*/
@Data
@TableName("MES_PLATE_AROUND")
@Schema(description = "PlateAround对象")
@EqualsAndHashCode(callSuper = true)
public class PlateAround extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 镀前入库
*/
public static Short BEFORE_PLAT_IN = 1;
/**
* 镀前出库
*/
public static Short BEFORE_PLAN_OUT = 2;
/**
* 镀后入库
*/
public static Short AFTER_PLAN_IN = 3;
/**
* 状态 新建
*/
public static Short CUR_STATUS_NEW = 1;
/**
* 状态 完成
*/
public static Short CUR_STATUS_OK = 2;
@Schema(description = "单号")
private String paCode;
@Schema(description = "作业计划")
private Long wpId;
@Schema(description = "班组")
private Long tsId;
@Schema(description = "供应商")
private Long ocId;
@Schema(description = "类型")
private Short paType;
@Schema(description = "数量")
private Double quantity = 0d;
@Schema(description = "重量")
private Double weight = 0d;
@Schema(description = "制单时间")
private Date makeTime;
@Schema(description = "制单人")
private Long makeMan;
@Schema(description = "状态")
private Short curStatus = 1;
}

@ -26,104 +26,104 @@ public class WorkOrder extends BaseEntity {
/**
* 未下达
*/
public static Short RUN_STATUS_NORMAL = 1;
public static Integer RUN_STATUS_NORMAL = 1;
/**
* 已下达
*/
public static Short RUN_STATUS_ISSUED = 2;
public static Integer RUN_STATUS_ISSUED = 2;
/**
* 加工中
*/
public static Short RUN_STATUS_RECEIVE = 3;
public static Integer RUN_STATUS_RECEIVE = 3;
/**
* 检验中
*/
public static Short RUN_STATUS_CHECK = 4;
public static Integer RUN_STATUS_CHECK = 4;
/**
* 工艺变更
*/
public static Short RUN_STATUS_CRAFT_CHANGE = 5;
public static Integer RUN_STATUS_CRAFT_CHANGE = 5;
/**
* 审理中
*/
public static Short RUN_STATUS_HEAR = 13;
public static Integer RUN_STATUS_HEAR = 13;
/**
* 已完工
*/
public static Short RUN_STATUS_COMPLETED = 15;
public static Integer RUN_STATUS_COMPLETED = 15;
/**
* 已交接
*/
public static Short RUN_STATUS_HANDOVER = 17;
public static Integer RUN_STATUS_HANDOVER = 17;
/**
* 返工
*/
public static Short RUN_STATUS_REWORK = 19;
public static Integer RUN_STATUS_REWORK = 19;
/**
* 报废
*/
public static Short RUN_STATUS_SCRAP = 20;
public static Integer RUN_STATUS_SCRAP = 20;
/**
* 已关闭
*/
public static Short RUN_STATUS_VOIDED = 21;
public static Integer RUN_STATUS_VOIDED = 21;
/**
* 正常
*/
public static Short PRIORITY_NORMAL = 1;
public static Integer PRIORITY_NORMAL = 1;
/**
* 项目要求日期急件
*/
public static Short PRIORITY_PRO_IMP = 2;
public static Integer PRIORITY_PRO_IMP = 2;
/**
* 合同急件
*/
public static Short PRIORITY_PACT_IMP = 3;
public static Integer PRIORITY_PACT_IMP = 3;
/**
* 会议绩效急件
*/
public static Short PRIORITY_PERF_IMP = 4;
public static Integer PRIORITY_PERF_IMP = 4;
/**
* 调度标注急件
*/
public static Short PRIORITY_SCH_IMP = 5;
public static Integer PRIORITY_SCH_IMP = 5;
/**
* 1:正常
*/
public static Short APPROVAL_STATUS_NORMAL = 1;
public static Integer APPROVAL_STATUS_NORMAL = 1;
/**
* 2:审批中
*/
public static Short APPROVAL_STATUS_UNDER = 2;
public static Integer APPROVAL_STATUS_UNDER = 2;
/**
* 3:不通过
*/
public static Short APPROVAL_STATUS_FAIL = 3;
public static Integer APPROVAL_STATUS_FAIL = 3;
/**
* 4:通过
*/
public static Short APPROVAL_STATUS_VIA = 4;
public static Integer APPROVAL_STATUS_VIA = 4;
/**
* 整单外协
*/
public static Short OEM_TYPE_WHOLE = 1;
public static Integer OEM_TYPE_WHOLE = 1;
/**
* 工序外协
*/
public static Short OEM_TYPE_SINGLE = 2;
public static Integer OEM_TYPE_SINGLE = 2;
/**
* 未领取
*/
public static Short PICKING_STATUS_NOT = 0;
public static Integer PICKING_STATUS_NOT = 0;
/**
* 已领取
*/
public static Short PICKING_STATUS_OK = 1;
public static Integer PICKING_STATUS_OK = 1;
public static Map<Short, String> runStatusMap = new HashMap<>(11);
public static Map<Short, String> priorityMap = new HashMap<Short, String>(5);
public static Map<Short, String> approvalStatusMap = new HashMap<Short, String>(4);
public static Map<Short, String> pickingStatusMap = new HashMap<Short, String>(2);
public static Map<Integer, String> runStatusMap = new HashMap<>(11);
public static Map<Integer, String> priorityMap = new HashMap<Integer, String>(5);
public static Map<Integer, String> approvalStatusMap = new HashMap<Integer, String>(4);
public static Map<Integer, String> pickingStatusMap = new HashMap<Integer, String>(2);
static {
runStatusMap.put(RUN_STATUS_NORMAL, "未下达");
@ -170,12 +170,12 @@ public class WorkOrder extends BaseEntity {
* 试验数量
*/
@Schema(description = "试验数量")
private Short testQty;
private Integer testQty;
/**
* 损耗数量
*/
@Schema(description = "损耗数量")
private Short lossQty;
private Integer lossQty;
/**
* 镀层单件定额
*/
@ -230,7 +230,7 @@ public class WorkOrder extends BaseEntity {
* 会议要求周期
*/
@Schema(description = "会议要求周期")
private Short meetCycle;
private Integer meetCycle;
/**
* 备注
*/
@ -240,12 +240,12 @@ public class WorkOrder extends BaseEntity {
* 排产状态;1已下发
*/
@Schema(description = "排产状态;1、已下发")
private Short schedStatus;
private Integer schedStatus;
/**
* 是否已准备(烧结车间订单专用默认为空1是代表已准备)
*/
@Schema(description = "是否已准备(烧结车间订单专用,默认为空,1是代表已准备)")
private Short readStatus;
private Integer readStatus;
/**
* 返工单号(仅状态为19的车间订单在生产监控展示)
*/
@ -255,7 +255,7 @@ public class WorkOrder extends BaseEntity {
* 原订单状态
*/
@Schema(description = "原订单状态")
private Short oldRunStatus;
private Integer oldRunStatus;
/**
* 返工入库类型;0:按B号1按返工描述
*/
@ -310,7 +310,7 @@ public class WorkOrder extends BaseEntity {
* 领料状态;0.未领1.已领
*/
@Schema(description = "领料状态;0.未领,1.已领")
private Short pickingStatus;
private Integer pickingStatus;
/**
* 是否外协
*/
@ -330,7 +330,7 @@ public class WorkOrder extends BaseEntity {
* 审批状态;1:正常2:审批中3:不通过4:通过
*/
@Schema(description = "审批状态;1:正常,2:审批中,3:不通过,4:通过")
private Short approvalStatus;
private Integer approvalStatus;
/**
* 报废数量
*/

@ -0,0 +1,45 @@
package org.springblade.desk.produce.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.util.Date;
/**
* 作业计划运行明细 实体类
*
* @author BladeX
*/
@Data
@TableName("MES_WORK_ORDER_RUN")
@Schema(description = "WorkPlanRun对象")
@EqualsAndHashCode(callSuper = true)
public class WorkPlanRun extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "车间订单运行记录")
private Long worId;
@Schema(description = "作业计划工序")
private Long wpId;
@Schema(description = "工艺能力")
private Long caId;
@Schema(description = "处理工序")
private Boolean handle;
@Schema(description = "计划开始")
private Date startTime;
@Schema(description = "计划结束")
private Date endTime;
}

@ -10,10 +10,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.desk.util.json.serializer.Integer0ToEmptyStringSerializer;
import org.springblade.desk.util.json.serializer.IntegerAllToStringSerializer;
import java.io.Serial;
import java.math.BigDecimal;
/**
* [工艺文件] 实体类

@ -35,6 +35,8 @@ public class CycleTestVO extends CycleTest {
private String cycleTestStandardName;
@Schema(description = "[周期试验标准][附件]id")
private Long cycleTestStandardAttachId;
@Schema(description = "[周期试验标准][附件]原始名称")
private String cycleTestStandardAttachOriginalName;
@Schema(description = "工艺员[用户]姓名")
private String processUserName;
@Schema(description = "试验技术员[用户]姓名")

@ -21,62 +21,62 @@ import java.time.LocalDate;
@Data
@EqualsAndHashCode(callSuper = true)
public class LiquidTankTaskCopyVO extends LiquidTankTaskCopy {
@Serial
private static final long serialVersionUID = 1L;
@Serial
private static final long serialVersionUID = 1L;
/**
* 作业中心 name
*/
@Schema(description = "作业中心 name")
private String wcName;
/**
* todo:temp
*/
@Schema(description = "药品物料编码")
private String drugMaterialCode = "111122223333";
/**
*
*/
@Schema(description = "化验人[用户]名称")
private String testUserRealName;
@Schema(description = "复检化验人[用户]名称")
private String repeatTestUserRealName;
@Schema(description = "工艺主管[用户]名称")
private String processUserRealName;
@Schema(description = "审核[用户]名称")
private String reviewUserRealName;
@Schema(description = "发药[用户]名称")
private String sendDurgUserRealName;
@Schema(description = "收药[用户]名称")
private String receiveDurgUserRealName;
@Schema(description = "作业槽名称")
private String workTankName;
@Schema(description = "加药量[计算公式]名称")
private String addDrugFormulaName;
@Schema(description = "添加后理论值[计算公式]名称")
private String afterTheoryFormulaName;
@Schema(description = "班组名称")
private String tsName;
@Schema(description = "任务状态")
private String statusValue;
@Schema(description = "槽液对象")
private LiquidTank liquidTank;
@Schema(description = "取样时间(报告)")
private LocalDate sampleDate;
@Schema(description = "化验频率(报告)")
private String testFrequency;
@Schema(description = "有效期")
private LocalDate validDate;
@Schema(description = "超出规范极限调整后的结果(报告)")
private String outRangeResult;
@Schema(description = "槽液清理记录(报告)")
private String clearRecord;
@Schema(description = "药品计算公式(报告) 加药量[计算公式] 公式内容")
private String reportFormulaContent;
@Schema(description = "药品监督员签名(报告)")
private String drugSuUserSign;
@Schema(description = "药品监督员签名(报告)")
private String drugAddUserSign;
@Schema(description = "控制规范(报告)")
private String norm;
/**
* [作业中心]name
*/
@Schema(description = "[作业中心]name")
private String wcName;
/**
* todo: 尚未实现 WMS对接
*/
@Schema(description = "药品物料编码")
private String drugMaterialCode;
/**
*
*/
@Schema(description = "化验人[用户]名称")
private String testUserRealName;
@Schema(description = "复检化验人[用户]名称")
private String repeatTestUserRealName;
@Schema(description = "工艺主管[用户]名称")
private String processUserRealName;
@Schema(description = "审核[用户]名称")
private String reviewUserRealName;
@Schema(description = "发药[用户]名称")
private String sendDurgUserRealName;
@Schema(description = "收药[用户]名称")
private String receiveDurgUserRealName;
@Schema(description = "作业槽名称")
private String workTankName;
@Schema(description = "加药量[计算公式]名称")
private String addDrugFormulaName;
@Schema(description = "添加后理论值[计算公式]名称")
private String afterTheoryFormulaName;
@Schema(description = "班组名称")
private String tsName;
@Schema(description = "任务状态")
private String statusValue;
@Schema(description = "槽液对象")
private LiquidTank liquidTank;
@Schema(description = "取样时间(报告)")
private LocalDate sampleDate;
@Schema(description = "化验频率(报告)")
private String testFrequency;
@Schema(description = "有效期")
private LocalDate validDate;
@Schema(description = "超出规范极限调整后的结果(报告)")
private String outRangeResult;
@Schema(description = "槽液清理记录(报告)")
private String clearRecord;
@Schema(description = "药品计算公式(报告) 加药量[计算公式] 公式内容")
private String reportFormulaContent;
@Schema(description = "药品监督员签名(报告)")
private String drugSuUserSign;
@Schema(description = "药品监督员签名(报告)")
private String drugAddUserSign;
@Schema(description = "控制规范(报告)")
private String norm;
}

@ -0,0 +1,31 @@
package org.springblade.desk.util.json.serializer;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdScalarSerializer;
import java.io.IOException;
/**
* 自定义Long序列化器0L值 null 序列化为空字符串其他值正常序列化
*/
public class IdSerializer extends StdScalarSerializer<Long> {
/**
* 提供无参构造器指定处理的类型为Integer
*/
public IdSerializer() {
super(Long.class);
}
@Override
public void serialize(Long value, JsonGenerator gen, SerializerProvider provider)
throws IOException {
// 核心逻辑:判断值是否为null或0,是则写空字符串,否则写原数值
if (value == null || value == 0L) {
gen.writeString(""); // 0或null时返回空字符串
} else {
gen.writeString("" + value); // 返回字符串类型
}
}
}

@ -28,6 +28,7 @@ import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.constant.BAModuleConst;
import org.springblade.desk.basic.constant.BaseCol;
import org.springblade.desk.basic.constant.BaseValue;
import org.springblade.desk.basic.excel.PlatingExcel;
import org.springblade.desk.basic.pojo.entity.Plating;
@ -84,6 +85,7 @@ public class PlatingController extends BladeController {
public R<IPage<PlatingVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> plating,
Query query) {
QueryWrapper<Plating> qw = Condition.getQueryWrapper(plating, Plating.class);
qw.orderByAsc(BaseCol.ID);
IPage<Plating> pages = service.page(Condition.getPage(query), qw);
IPage<PlatingVO> pagesVO = PlatingWrapper.build().pageVO(pages);
pagesVO.getRecords()

@ -1,61 +1,35 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.dashboard.controller;
import io.swagger.v3.oas.annotations.tags.Tag;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.Parameter;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.annotation.IsAdmin;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
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.annotation.IsAdmin;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.dashboard.pojo.vo.DsCraftExpireVO;
import org.springblade.desk.dashboard.pojo.vo.DsPartSynthesisVO;
import org.springblade.desk.dashboard.pojo.vo.DsProcessSynthesisVO;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.dashboard.excel.DsCraftExcel;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity;
import org.springblade.desk.dashboard.pojo.vo.DsCraftExpireVO;
import org.springblade.desk.dashboard.pojo.vo.DsCraftVO;
import org.springblade.desk.dashboard.excel.DsCraftExcel;
import org.springblade.desk.dashboard.wrapper.DsCraftWrapper;
import org.springblade.desk.dashboard.pojo.vo.DsProcessSynthesisVO;
import org.springblade.desk.dashboard.service.IDsCraftService;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.constant.BladeConstant;
import java.util.Map;
import org.springblade.desk.dashboard.wrapper.DsCraftWrapper;
import org.springblade.desk.oldv1.pojo.ResultInfo;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 零件工艺信息表 控制器
@ -71,8 +45,6 @@ public class DsCraftController extends BladeController {
private final IDsCraftService dsCraftService;
/**
* 工序详情
*/
@ -84,8 +56,6 @@ public class DsCraftController extends BladeController {
return R.data(detail);
}
/**
* 零件工艺信息表 分页
*/
@ -166,7 +136,6 @@ public class DsCraftController extends BladeController {
ExcelUtil.export(response, "零件工艺信息表数据" + DateUtil.time(), "零件工艺信息表数据表", list, DsCraftExcel.class);
}
/**
* 根据零件ID查询工艺版本号
*/
@ -188,5 +157,10 @@ public class DsCraftController extends BladeController {
}
@PostMapping(value = "/getToolsByPartId")
@Operation(summary = "根据零件ID查询需要的工装列表", description = "零件ID")
public ResultInfo getToolsByPartId(@Parameter(description = "零件号", required = true) Long partId) {
return ResultInfo.ok(dsCraftService.getToolsByPartId(partId));
}
}

@ -25,34 +25,33 @@
*/
package org.springblade.desk.dashboard.controller;
import io.swagger.v3.oas.annotations.tags.Tag;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.Parameter;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.annotation.IsAdmin;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
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.annotation.IsAdmin;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.dashboard.excel.DsProcessMoldToolExcel;
import org.springblade.desk.dashboard.pojo.entity.DsProcessMoldToolEntity;
import org.springblade.desk.dashboard.pojo.vo.DsProcessMoldToolVO;
import org.springblade.desk.dashboard.excel.DsProcessMoldToolExcel;
import org.springblade.desk.dashboard.wrapper.DsProcessMoldToolWrapper;
import org.springblade.desk.dashboard.service.IDsProcessMoldToolService;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.constant.BladeConstant;
import java.util.Map;
import org.springblade.desk.dashboard.wrapper.DsProcessMoldToolWrapper;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 工序工装模具表 控制器

@ -36,13 +36,26 @@
</select>
<select id="selectDsCraftByIds" resultType="org.springblade.desk.dashboard.pojo.entity.DsCraftEntity">
select * from DS_CRAFT where is_deleted = 0
select * from DS_CRAFT
where is_deleted = 0
AND ID IN
<foreach collection="craftIds" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
<select id = "listByPartCode" resultType="org.springblade.desk.dashboard.pojo.entity.DsCraftEntity">
SELECT *
FROM(
SELECT craft.*
FROM DS_CRAFT craft
LEFT JOIN ds_part part ON craft.part_id = part.id
WHERE is_deleted = 0 and
) t
WHERE rownum = 1
ORDER BY craft.PART_VERSIONS desck
</select>
<select id="selectDsCraftByPartId" resultType="org.springblade.desk.dashboard.pojo.vo.DsCraftExpireVO">
select * from DS_CRAFT where is_deleted = 0 and PART_ID = #{partId}
</select>

@ -63,6 +63,8 @@ public interface DsCraftMapper extends BaseMapper<DsCraftEntity> {
List<DsCraftEntity> selectDsCraftByIds(@Param("craftIds")List<Long> craftIds);
List<DsCraftEntity> listByPartCode(@Param("partCode")String partCode);
List<DsCraftExpireVO> selectDsCraftByPartId(@Param("partId")Long partId);
List<DsCraftVO> selectCraftByPartId(@Param("partId")Long partId);

@ -32,6 +32,7 @@ import org.springblade.desk.dashboard.excel.DsCraftExcel;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity;
import org.springblade.desk.dashboard.pojo.vo.DsCraftExpireVO;
import org.springblade.desk.dashboard.pojo.vo.DsCraftVO;
import org.springblade.desk.dashboard.pojo.vo.DsPartToolVO;
import org.springblade.desk.dashboard.pojo.vo.DsProcessSynthesisVO;
import java.util.List;
@ -92,7 +93,6 @@ public interface IDsCraftService extends BaseService<DsCraftEntity> {
*/
List<DsCraftEntity> listByPartId(Long partId);
/**
* 根据零件号查询工艺信息
* @param partId
@ -140,5 +140,10 @@ public interface IDsCraftService extends BaseService<DsCraftEntity> {
*/
DsCraftEntity getReworkCraft(Long partId, String changeNo);
/**
* 根据零件ID查询需要的工装列表
* @param partId
* @return
*/
List<DsPartToolVO> getToolsByPartId(Long partId);
}

@ -28,21 +28,20 @@ package org.springblade.desk.dashboard.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.ObjectUtils;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.desk.dashboard.excel.DsCraftExcel;
import org.springblade.desk.dashboard.mapper.DsCraftMapper;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.vo.DsCraftExpireVO;
import org.springblade.desk.dashboard.pojo.vo.DsCraftVO;
import org.springblade.desk.dashboard.pojo.vo.DsPartToolVO;
import org.springblade.desk.dashboard.pojo.vo.DsProcessSynthesisVO;
import org.springblade.desk.dashboard.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
@ -53,27 +52,18 @@ import java.util.stream.Collectors;
* @since 2025-11-12
*/
@Service
@RequiredArgsConstructor
public class DsCraftServiceImpl extends BaseServiceImpl<DsCraftMapper, DsCraftEntity> implements IDsCraftService {
@Autowired
DsCraftMapper craftMapper;
private final IDsPartService partService;
@Autowired
@Lazy
IDsPartService partService;
private final IDsProcessService processService;
@Autowired
@Lazy
IDsProcessService processService;
private final IDsProcessProjectService processProjectService;
@Autowired
IDsProcessProjectService processProjectService;
private final IDsProcessMeasuringToolService processMeasuringToolService;
@Autowired
IDsProcessMeasuringToolService processMeasuringToolService;
@Autowired
IDsProcessMoldToolService processMoldToolService;
private final IDsProcessMoldToolService processMoldToolService;
@Override
@ -123,12 +113,12 @@ public class DsCraftServiceImpl extends BaseServiceImpl<DsCraftMapper, DsCraftEn
@Override
public List<DsCraftEntity> selectDsCraftByIds(List<Long> craftIds) {
return craftMapper.selectDsCraftByIds(craftIds);
return baseMapper.selectDsCraftByIds(craftIds);
}
@Override
public List<DsCraftExpireVO> getVersion(Long partId) {
return craftMapper.selectDsCraftByPartId(partId);
return baseMapper.selectDsCraftByPartId(partId);
}
@Override
@ -140,17 +130,16 @@ public class DsCraftServiceImpl extends BaseServiceImpl<DsCraftMapper, DsCraftEn
@Override
public List<DsCraftVO> selectDsCraftByPartId(Long partId) {
return craftMapper.selectCraftByPartId(partId);
return baseMapper.selectCraftByPartId(partId);
}
@Override
public List<DsCraftVO> selectDsCraftByPartId(Long partId, String version, String rank) {
return craftMapper.selectCraft(partId,version,rank);
return baseMapper.selectCraft(partId, version, rank);
}
@Override
public boolean addOrEdit(DsCraftEntity craft) {
if(null != craft.getId()){
updateById(craft);
}else {
@ -169,10 +158,10 @@ public class DsCraftServiceImpl extends BaseServiceImpl<DsCraftMapper, DsCraftEn
@Override
public String getNewestVersion(Long partId) {
List<DsCraftVO> craftVOList = craftMapper.selectCraftByPartId(partId);
List<DsCraftVO> craftVOList = baseMapper.selectCraftByPartId(partId);
Optional<String> latestVersion = craftVOList.stream()
.map(DsCraftVO::getPartVersions)
.max(Comparator.naturalOrder());
.map(DsCraftVO::getPartVersions)
.max(Comparator.naturalOrder());
if (latestVersion.isPresent()) {
// 输出: 最新版本号
System.out.println("最新版本号: " + latestVersion.get());
@ -183,11 +172,49 @@ public class DsCraftServiceImpl extends BaseServiceImpl<DsCraftMapper, DsCraftEn
@Override
public DsCraftEntity getPartCraft(Long partId, String rank, String newestVersion) {
return craftMapper.getPartCraft(partId,rank,newestVersion);
return baseMapper.getPartCraft(partId, rank, newestVersion);
}
@Override
public DsCraftEntity getReworkCraft(Long partId, String changeNo) {
return craftMapper.getReworkCraft(partId,changeNo);
return baseMapper.getReworkCraft(partId, changeNo);
}
@Override
public List<DsPartToolVO> getToolsByPartId(Long partId) {
// 从零件工艺的工艺中拿取工装
List<DsPartToolVO> dartAllModelList = new ArrayList<>();
DsPartToolVO dartAllModel;
DsPartToolVO dartAllModel1;
List<DsCraftEntity> dsCraftList = this.listByPartId(partId);
if (dsCraftList != null && dsCraftList.size() > 0) {
for (DsCraftEntity dsCraft : dsCraftList) {
List<DsProcessEntity> dsProcessList = processService.selectDsProcessByCraftId(dsCraft.getId());
if (dsProcessList != null && dsProcessList.size() > 0) {
for (DsProcessEntity dsProcess : dsProcessList) {
List<DsProcessMoldToolEntity> dsToolsInfos = processMoldToolService.selectDsProcessMoldToolByProcessId(dsProcess.getId());
if (dsToolsInfos != null && dsToolsInfos.size() > 0) {
for (DsProcessMoldToolEntity dsToolsInfo : dsToolsInfos) {
dartAllModel = new DsPartToolVO();
dartAllModel.setCode(dsToolsInfo.getMoldCode());
dartAllModel.setName(dsToolsInfo.getMoldName());
dartAllModelList.add(dartAllModel);
//周新昊 20240920 增加查询工装的子件
List<DsPartEntity> dsPartSubs = partService.selectDsPartByPatCode(dsToolsInfo.getMoldCode(), null);
if (dsPartSubs != null && dsPartSubs.size() > 0) {
for (DsPartEntity dsPartSub : dsPartSubs) {
dartAllModel1 = new DsPartToolVO();
dartAllModel1.setCode(dsPartSub.getPartCode());
dartAllModel1.setName(dsPartSub.getPartName());
dartAllModelList.add(dartAllModel1);
}
}
}
}
}
}
}
}
return dartAllModelList;
}
}

@ -1,47 +1,23 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.dashboard.service.impl;
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 org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.dashboard.constant.TaskingConstant;
import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.vo.*;
import org.springblade.desk.dashboard.excel.DsPartExcel;
import org.springblade.desk.dashboard.mapper.DsPartMapper;
import org.springblade.desk.dashboard.pojo.entity.*;
import org.springblade.desk.dashboard.pojo.vo.*;
import org.springblade.desk.dashboard.service.*;
import org.springblade.system.feign.IUserClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@ -159,9 +135,13 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
@Override
public List<DsPartEntity> selectDsPartByPatCode(String partCode, Integer sinTerType) {
Wrapper<DsPartEntity> queryWrapper = Wrappers.lambdaQuery(DsPartEntity.class)
.eq(DsPartEntity::getPartCode, partCode)
.eq(DsPartEntity::getSinTerType, sinTerType);
LambdaQueryWrapper<DsPartEntity> queryWrapper = Wrappers.lambdaQuery(DsPartEntity.class)
.eq(DsPartEntity::getPartCode, partCode);
if (Func.isNotEmpty(sinTerType)) {
queryWrapper.eq(DsPartEntity::getSinTerType, sinTerType);
}
return baseMapper.selectList(queryWrapper);
}

@ -1,42 +1,17 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.dashboard.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.RequiredArgsConstructor;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.dashboard.excel.DsProcessMoldToolExcel;
import org.springblade.desk.dashboard.mapper.DsProcessMoldToolMapper;
import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity;
import org.springblade.desk.dashboard.pojo.entity.DsProcessMoldToolEntity;
import org.springblade.desk.dashboard.pojo.vo.DsProcessMoldToolVO;
import org.springblade.desk.dashboard.excel.DsProcessMoldToolExcel;
import org.springblade.desk.dashboard.mapper.DsProcessMoldToolMapper;
import org.springblade.desk.dashboard.pojo.vo.PrReworkProcessVO;
import org.springblade.desk.dashboard.service.IDsProcessMoldToolService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.util.CollectionUtils;
import java.util.List;
@ -48,11 +23,9 @@ import java.util.List;
* @since 2025-11-12
*/
@Service
@RequiredArgsConstructor
public class DsProcessMoldToolServiceImpl extends BaseServiceImpl<DsProcessMoldToolMapper, DsProcessMoldToolEntity> implements IDsProcessMoldToolService {
@Autowired
DsProcessMoldToolMapper processMoldToolMapper;
@Override
public IPage<DsProcessMoldToolVO> selectDsProcessMoldToolPage(IPage<DsProcessMoldToolVO> page, DsProcessMoldToolVO dsProcessMoldTool) {
return page.setRecords(baseMapper.selectDsProcessMoldToolPage(page, dsProcessMoldTool));
@ -70,12 +43,12 @@ public class DsProcessMoldToolServiceImpl extends BaseServiceImpl<DsProcessMoldT
@Override
public List<DsProcessMoldToolEntity> selectDsProcessMoldToolByProcessIds(List<Long> processIds) {
return processMoldToolMapper.selectDsProcessMoldToolByProcessIds(processIds);
return baseMapper.selectDsProcessMoldToolByProcessIds(processIds);
}
@Override
public List<DsProcessMoldToolEntity> selectDsProcessMoldToolByProcessId(Long processId) {
return processMoldToolMapper.selectDsProcessMoldToolByProcessId(processId);
return baseMapper.selectDsProcessMoldToolByProcessId(processId);
}
@Override
@ -97,9 +70,9 @@ public class DsProcessMoldToolServiceImpl extends BaseServiceImpl<DsProcessMoldT
public boolean saveReworkProcessMoldTool(PrReworkProcessVO prReworkProcess, List<DsProcessMoldToolVO> processMoldToolVOList) {
if(!CollectionUtils.isEmpty(processMoldToolVOList)){
for (DsProcessMoldToolVO dsProcessMoldToolVO : processMoldToolVOList) {
if(null != dsProcessMoldToolVO.getId()){
if (null != dsProcessMoldToolVO.getId()) {
updateById(dsProcessMoldToolVO);
}else {
} else {
dsProcessMoldToolVO.setProcessId(prReworkProcess.getId());
save(dsProcessMoldToolVO);
}

@ -25,41 +25,36 @@
*/
package org.springblade.desk.device.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import jakarta.annotation.PostConstruct;
import lombok.AllArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.annotation.IsAdmin;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.device.pojo.entity.EquipmentEntity;
import org.springblade.desk.device.pojo.excel.EquipmentExcel;
import org.springblade.desk.device.pojo.vo.EquipmentStatusStatisticsVO;
import org.springblade.desk.order.wrapper.AssayContentWrapper;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.device.pojo.entity.EquipmentEntity;
import org.springblade.desk.device.pojo.vo.EquipmentVO;
import org.springblade.desk.device.wrapper.EquipmentWrapper;
import org.springblade.desk.device.service.IEquipmentService;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.constant.BladeConstant;
import java.util.Map;
import org.springblade.desk.device.wrapper.EquipmentWrapper;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 设备信息表 控制器

@ -1,41 +1,36 @@
package org.springblade.desk.device.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import jakarta.annotation.PostConstruct;
import lombok.AllArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.annotation.IsAdmin;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.device.pojo.entity.FeiBaSetEntity;
import org.springblade.desk.device.pojo.excel.FeiBaSetExcel;
import org.springblade.desk.device.pojo.vo.FeiBaSetVO;
import org.springblade.desk.device.service.IFeiBaSetService;
import org.springblade.desk.device.wrapper.EquipmentWrapper;
import org.springblade.desk.device.wrapper.FeiBaSetWrapper;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.constant.BladeConstant;
import java.util.Map;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 飞靶设置 控制器

@ -3,17 +3,22 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "org.springblade.desk.order.mapper.YieldOrderMapper">
<!-- 定义基础公共字段 -->
<sql id = "baseCommonFields">
yo.ID, yo.TENANT_ID, yo.CREATE_USER, yo.CREATE_DEPT, yo.CREATE_TIME, yo.UPDATE_USER, yo.UPDATE_TIME, yo.STATUS, yo.IS_DELETED,
YO_CODE, yo.YP_CODE, yo.PART_CODE, yo.PRODUCT_TYPE, yo.PART_NAME, yo.PLATE, yo.PRODUCT_IDENT, yo.USE_DEPT, yo.YP_AREA, yo.DEMAND_DATE,
PLAN_USER, yo.RELEASE_DATE, yo.MEMO, yo.CARD_NO, yo.BATCH_NO, yo.SITE_WORK, yo.YP_QTY, yo.ROAM_NO, yo.PRIMARY_CRAFT, yo.ROAM_NO_NEXT,
PDM_URL, yo.CUSTODIAN, yo.REWORK_CODE, yo.REWORK_NO, yo.ENTRUST_DEPT, yo.REWORK_MEMO, yo.BUSINESS_TYPE, yo.ASSIGN_MAN, yo.ASSIGN_TIME,
RECSEQ_NO, yo.MANUAL_INCREASE, yo.YIELD_TYPE, yo.FATHER_YO_ID, yo.NEW_LEV_FLAG, yo.PRODUCE_BOOL, yo.USE_DEPT_CODE, yo.YP_PRODUCT_LINE,
YP_MEMO, yo.SJ_MOLD_PREPARATION, yo.SJ_KIT_PREPARATION, yo.PK_USERNAME, yo.PK_DATE, yo.KIT_PREPARATION_MAN, yo.KIT_PREPARATION_TIME,
PRIORITY_APS, yo.PRIORITY_ERP, yo.VALIDATION_RESULT, yo.VALIDATION_MOMO, yo.VALIDATION_TIME, yo.VALIDATION_USER, yo.RECEIVE_STATUS,
WORK_CENTER_ID, yo.ERROR_INFO, yo.RECEIVE_USER, yo.RECEIVE_TIME, yo.GOODS_DEMAND, yo.TOOLS_DEMAND, yo.PLATE_GOODS_CODE
</sql>
<select id = "selectPage" resultType = "org.springblade.desk.order.pojo.entity.YieldOrder">
SELECT ID, TENANT_ID, CREATE_USER, CREATE_DEPT, CREATE_TIME, UPDATE_USER, UPDATE_TIME, STATUS, IS_DELETED,
YO_CODE, YP_CODE, PART_CODE, PRODUCT_TYPE, PART_NAME, PLATE, PRODUCT_IDENT, USE_DEPT, YP_AREA, DEMAND_DATE,
PLAN_USER, RELEASE_DATE, MEMO, CARD_NO, BATCH_NO, SITE_WORK, YP_QTY, ROAM_NO, PRIMARY_CRAFT, ROAM_NO_NEXT, PDM_URL,
CUSTODIAN, REWORK_CODE, REWORK_NO, ENTRUST_DEPT, REWORK_MEMO, BUSINESS_TYPE, ASSIGN_MAN, ASSIGN_TIME, RECSEQ_NO,
MANUAL_INCREASE, YIELD_TYPE, FATHER_YO_ID, NEW_LEV_FLAG, PRODUCE_BOOL, USE_DEPT_CODE, YP_PRODUCT_LINE, YP_MEMO,
SJ_MOLD_PREPARATION, SJ_KIT_PREPARATION, PK_USERNAME, PK_DATE, KIT_PREPARATION_MAN, KIT_PREPARATION_TIME, PRIORITY_APS,
PRIORITY_ERP, VALIDATION_RESULT, VALIDATION_MOMO, VALIDATION_TIME, VALIDATION_USER, RECEIVE_STATUS, WORK_CENTER_ID,
ERROR_INFO, RECEIVE_USER, RECEIVE_TIME, GOODS_DEMAND
FROM MES_YIELD_ORDER
SELECT <include refid="baseCommonFields" />
FROM MES_YIELD_ORDER yo
WHERE IS_DELETED = 0
<if test = "yieldTypeList != null and yieldTypeList.size() > 0">
AND YIELD_TYPE IN
@ -54,14 +59,7 @@
</select>
<select id = "pageMaterialApply" resultType = "org.springblade.desk.order.pojo.entity.YieldOrder">
SELECT yo.ID, yo.TENANT_ID, yo.CREATE_USER, yo.CREATE_DEPT, yo.CREATE_TIME, yo.UPDATE_USER, yo.UPDATE_TIME, yo.STATUS, yo.IS_DELETED,
YO_CODE, YP_CODE, PART_CODE, PRODUCT_TYPE, PART_NAME, PLATE, PRODUCT_IDENT, USE_DEPT, YP_AREA, DEMAND_DATE,
PLAN_USER, RELEASE_DATE, MEMO, CARD_NO, BATCH_NO, SITE_WORK, YP_QTY, ROAM_NO, PRIMARY_CRAFT, ROAM_NO_NEXT, PDM_URL,
CUSTODIAN, REWORK_CODE, REWORK_NO, ENTRUST_DEPT, REWORK_MEMO, BUSINESS_TYPE, ASSIGN_MAN, ASSIGN_TIME, RECSEQ_NO,
MANUAL_INCREASE, YIELD_TYPE, FATHER_YO_ID, NEW_LEV_FLAG, PRODUCE_BOOL, USE_DEPT_CODE, YP_PRODUCT_LINE, YP_MEMO,
SJ_MOLD_PREPARATION, SJ_KIT_PREPARATION, PK_USERNAME, PK_DATE, KIT_PREPARATION_MAN, KIT_PREPARATION_TIME, PRIORITY_APS,
PRIORITY_ERP, VALIDATION_RESULT, VALIDATION_MOMO, VALIDATION_TIME, VALIDATION_USER, RECEIVE_STATUS, WORK_CENTER_ID,
ERROR_INFO, RECEIVE_USER, RECEIVE_TIME, GOODS_DEMAND
SELECT <include refid="baseCommonFields" />
FROM MES_YIELD_ORDER yo
LEFT JOIN MES_PLATE_GOODS_RECORD_DETAIL grd ON yo.id = grd.YO_ID
WHERE yo.IS_DELETED = 0 AND grd.ID IS NULL

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

@ -33,6 +33,8 @@ import org.springblade.desk.order.pojo.entity.YieldOrderCraft;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.service.IYieldOrderCraftService;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.WorkOrderMapper;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -57,6 +59,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
private final IDsCraftService dsCraftService;
private final IDsProcessService dsProcessService;
private final WorkOrderMapper workOrderMapper;
@Value("${business.oldMes.url}")
private String oldMesUrl;
@ -648,6 +651,21 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return yieldOrder;
}
@Override
public void updateYieldStatus(Long yoId, Integer curStatus, double v) {
YieldOrder yo = this.getById(yoId);
if (YieldOrder.CUR_STATUS_VOIDED.equals(curStatus)) {
//整单报废
List<WorkOrder> listWo = workOrderMapper.selectList(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, yo.getId()));
boolean completed = listWo.stream().map(wo -> WorkOrder.RUN_STATUS_VOIDED.equals(wo.getRunStatus())).findAny().isPresent();
if (completed) {
yo.setStatus(curStatus);
}
// 生产计划状态变为已完工时,推送至新mes,更新订单状态
// httpRequestService.pushYieldOrderStatusToNewMes(yo.getCardNo(), curStatus);
}
}
/**
* 验证零件子件信息
*

@ -1,6 +1,5 @@
package org.springblade.desk.produce.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
@ -9,13 +8,13 @@ import lombok.RequiredArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.dto.*;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.BatchPrepareVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springblade.desk.produce.wrapper.WorkOrderWrapper;
import org.springframework.web.bind.annotation.*;
@ -32,6 +31,8 @@ public class RbProduceManageController extends BladeController {
private final IWorkOrderService workOrderService;
private final IWorkOrderRunService workOrderRunService;
@GetMapping("/page")
@ApiOperationSupport(order = 1)
@Operation(summary = "车间订单列表分页", description = "传入WorkOrderVO")
@ -49,10 +50,52 @@ public class RbProduceManageController extends BladeController {
@PostMapping(value = "/inBatches")
@ApiOperationSupport(order = 3)
@Operation(summary = "分批", description = "传入WorkOrderVO")
@Operation(summary = "分批", description = "传入WorkOrder")
public R inBatches(@RequestBody WorkOrder workOrder) {
Long userId = AuthUtil.getUserId();
return R.data(workOrderService.inBatches(workOrder.getId(), workOrder, userId));
}
@PostMapping(value = "/turnType")
@ApiOperationSupport(order = 4)
@Operation(summary = "转烧结", description = "传入YieldOrder")
public R turnType(@RequestBody TurnTypeDTO turnTypeDTO) {
Long userId = AuthUtil.getUserId();
return R.data(workOrderService.turnType(turnTypeDTO.getId(), turnTypeDTO.getYieldType(), userId));
}
@PostMapping(value = "/updateStatus")
@ApiOperationSupport(order = 5)
@Operation(summary = "关闭", description = "传入UpdateStatusDTO")
public R updateStatus(@RequestBody UpdateStatusDTO updateStatusDTO) {
Long userId = AuthUtil.getUserId();
return R.data(workOrderService.updateStatus(updateStatusDTO.getIdArr(), updateStatusDTO.getStatus(), userId, updateStatusDTO.getMemo()));
}
@PostMapping(value = "/listProProcess")
@ApiOperationSupport(order = 6)
@Operation(summary = "获取转外协所需数据", description = "传入produceManageDTO")
public R listProProcess(@RequestBody ListProProcessDTO listProProcessDTO) {
return R.data(workOrderRunService.listProProcess(listProProcessDTO));
}
@PostMapping(value = "/transferBill")
@ApiOperationSupport(order = 7)
@Operation(summary = "转外协(单个/批量)", description = "传入produceManageDTO")
public R transferBill(@RequestBody TransferBillDTO transferBillDTO) {
Long userId = AuthUtil.getUserId();
return R.data(workOrderService.transferBill(transferBillDTO.getWorkOrderRuns(), transferBillDTO.getWorkPlanRuns()));
}
@PostMapping(value = "/updatePriority")
@ApiOperationSupport(order = 8)
@Operation(summary = "更改车间订单优先级", description = "传入WorkOrder")
public R updatePriority(@RequestBody UpdatePriorityDTO updatePriorityDTO) {
WorkOrder wo = workOrderService.getById(updatePriorityDTO.getId());
wo.setPriority(WorkOrder.PRIORITY_SCH_IMP);
wo.setDemandDate(updatePriorityDTO.getDemandDate());
return R.data(workOrderService.updateById(wo));
}
}

@ -0,0 +1,13 @@
package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.desk.produce.pojo.entity.PlateAround;
/**
* 镀前镀后 Mapper 接口
*
* @author BladeX
*/
public interface PlateAroundMapper extends BaseMapper<PlateAround> {
}

@ -0,0 +1,13 @@
package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
/**
* 作业计划运行明细 Mapper 接口
*
* @author BladeX
*/
public interface WorkPlanRunMapper extends BaseMapper<WorkPlanRun> {
}

@ -0,0 +1,14 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.PlateAround;
/**
* 镀前镀后 服务类
*
* @author BladeX
*/
public interface IPlateAroundService extends BaseService<PlateAround> {
}

@ -1,7 +1,11 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
import java.util.List;
/**
* 车间订单运行记录表 服务类
@ -10,5 +14,9 @@ import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
*/
public interface IWorkOrderRunService extends BaseService<WorkOrderRun> {
/**
* <p>方法名: listProProcess </p>
* <p>方法描述: 转单加载组装数据 </p>
*/
List<WorkPlanRun> listProProcess(ListProProcessDTO listProProcessDTO);
}

@ -4,9 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
import org.springblade.desk.produce.pojo.vo.BatchPrepareVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import java.util.List;
/**
* 车间订单表 服务类
*
@ -26,4 +30,10 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
BatchPrepareVO batchesPrepare(Long woId);
boolean inBatches(Long oldWoId, WorkOrder workOrder, Long userId);
boolean turnType(Long id, Integer yieldType, Long userId);
boolean updateStatus(List<Long> idArr, Integer status, Long userId, String memo);
boolean transferBill(List<WorkOrderRun> workOrderRuns, List<WorkPlanRun> workPlanRuns);
}

@ -0,0 +1,14 @@
package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
/**
* 作业计划运行明细 服务类
*
* @author BladeX
*/
public interface IWorkPlanRunService extends BaseService<WorkPlanRun> {
}

@ -0,0 +1,21 @@
package org.springblade.desk.produce.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.produce.mapper.PlateAroundMapper;
import org.springblade.desk.produce.pojo.entity.PlateAround;
import org.springblade.desk.produce.service.IPlateAroundService;
import org.springframework.stereotype.Service;
/**
* 镀前镀后 服务实现类
*
* @author BladeX
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, PlateAround> implements IPlateAroundService {
}

@ -1,20 +1,141 @@
package org.springblade.desk.produce.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.produce.mapper.WorkOrderRunMapper;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springblade.desk.produce.service.IWorkPlanService;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static com.alibaba.fastjson2.util.DateUtils.DEFAULT_ZONE_ID;
/**
* 车间订单运行记录表 服务实现类
*
* @author BladeX
* @since 2025-11-28
*/
@Service
@RequiredArgsConstructor
public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, WorkOrderRun> implements IWorkOrderRunService {
private final IWorkPlanService prWorkPlanService;
private final IBsProcessSetService bsProcessSetService;
@Override
public List<WorkPlanRun> listProProcess(ListProProcessDTO listProProcessDTO) {
List<Long> woIds = listProProcessDTO.getWoIds();
Integer runType = listProProcessDTO.getRunType();
if (CollectionUtils.isEmpty(woIds) || runType == null) {
return null;
}
Long curWoId = woIds.get(0);
List<WorkPlan> wpList = prWorkPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, curWoId));
List<WorkPlanRun> wprList = new ArrayList<>(wpList.size());
// 拿出第一个单子对应的可以派外协的工序
String proName = "";
for (WorkPlan wp : wpList) {
WorkPlanRun wpr = new WorkPlanRun();
//验证
if (!this.checkWp(wp, runType)) {
continue;
}
//转厂内时所有工序自动标记
if (WorkOrderRun.RUN_TYPE_2.equals(runType)) {
wpr.setHandle(Boolean.TRUE);
} else {
wpr.setHandle(Boolean.FALSE);
}
//组装工序号和工序id,用于批量验证是否一致
if (StringUtils.isBlank(proName)) {
proName = wp.getOrders() + "_" + wp.getPpsId();
} else {
proName = proName + "," + wp.getOrders() + "_" + wp.getPpsId();
}
wpr.setCaId(wp.getCaId());
wpr.setStartTime(localDateTimeToDate(wp.getStartTime()));
wpr.setEndTime(localDateTimeToDate(wp.getEndTime()));
wpr.setWpId(wp.getWoId());
wprList.add(wpr);
}
//如果是批量操作
if (woIds.size() > 1) {
//从集合里面提出首单id
woIds.remove(curWoId);
//验证其他车间订单是否满足条件
for (Long aLong : woIds) {
wpList = prWorkPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, aLong));
// 拿出其他单子可以派外协的工序与第一条做对比
String otherProName = "";
for (WorkPlan wp : wpList) {
//验证
if (!this.checkWp(wp, runType)) {
continue;
}
//组装工序号和工序id,用于批量验证是否一致
if (StringUtils.isBlank(otherProName)) {
otherProName = wp.getOrders() + "_" + wp.getPpsId();
} else {
otherProName = otherProName + "," + wp.getOrders() + "_" + wp.getPpsId();
}
}
if (!proName.equals(otherProName)) {
throw new ServiceException("请选择相同的可转出的工序进行操作!!!");
}
}
}
return wprList;
}
private boolean checkWp(WorkPlan wp, Integer runType) {
//不分派工序不能操作
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());
if (processSet == null) {
return false;
}
if ("1".equals(processSet.getIsDispatch())) {
return false;
}
//如果是转厂内,则非厂外的工序跳过
if (WorkOrderRun.RUN_TYPE_2.equals(runType) && "0".equals(wp.getOem())) {
return false;
}
return true;
}
/**
* LocalDateTime Date
* @param localDateTime
* @return
*/
private Date localDateTimeToDate(LocalDateTime localDateTime) {
// 空值校验,避免空指针异常
if (localDateTime == null) {
return null;
}
// 1. LocalDateTime + 时区 → ZonedDateTime → Instant
Instant instant = localDateTime.atZone(DEFAULT_ZONE_ID).toInstant();
// 2. Instant → Date
return Date.from(instant);
}
}

@ -29,10 +29,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.rmi.ServerException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* 车间订单表 服务实现类
@ -63,6 +60,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final IPlanTestService planTestService;
private final IWorkPlanRunService workPlanRunService;
private final IPlateAroundService plateAroundService;
@Override
public IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO workOrder) {
return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder));
@ -154,6 +155,151 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return true;
}
@Override
public boolean turnType(Long id, Integer yieldType, Long userId) {
YieldOrder yieldOrder = yieldOrderService.getById(id);
if (yieldOrder == null || yieldType == null) {
return false;
}
yieldOrder.setYieldType(yieldType);
return yieldOrderService.updateById(yieldOrder);
}
@Override
public boolean updateStatus(List<Long> idArr, Integer runStatus, Long userId, String memo) {
for (Long aLong : idArr) {
WorkOrder workOrder = this.getById(aLong);
workOrder.setMemo(memo);
this.updateStatusFun(workOrder, runStatus, userId);
}
return true;
}
@Override
public boolean transferBill(List<WorkOrderRun> workOrderRunList, List<WorkPlanRun> wprList) {
if (wprList == null || wprList.isEmpty()) {
return false;
}
WorkOrder wo;
List<WorkPlan> wpList;
List<WorkPlanRun> newWprList;
//组装选择好的工序
Map<String, WorkPlanRun> map = new HashMap<>();
for (WorkPlanRun item : wprList) {
WorkPlan workPlan = workPlanService.getById(item.getWpId());
map.put(workPlan.getOrders() + "_" + workPlan.getPpsId(), item);
}
for (WorkOrderRun workOrderRun : workOrderRunList) {
wo = this.getById(workOrderRun.getWoId());
// 拿出对应的运行记录
wpList = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, wo.getId()));
newWprList = new ArrayList<>(wpList.size());
WorkPlanRun oldWpr;
WorkPlanRun wpr;
for (WorkPlan wp : wpList) {
//验证
if (!this.checkWp(wp, workOrderRun.getRunType())) {
continue;
}
//获取到通用的工序信息
oldWpr = map.get(wp.getOrders() + "_" + wp.getPpsId());
//创建各自的工序运行信息
wpr = new WorkPlanRun();
wpr.setWpId(wp.getId());
wpr.setCaId(oldWpr.getCaId());
wpr.setHandle(oldWpr.getHandle());
wpr.setStartTime(oldWpr.getStartTime());
wpr.setEndTime(oldWpr.getEndTime());
newWprList.add(wpr);
}
workOrderRun.setOutCustomer(wo.getOcId());
workOrderRun.setOutTeam(wo.getTsId());
workOrderRun.setWoCode(wo.getWoCode());
workOrderRun.setSystemData("0");
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_UNDER);
workOrderRunService.save(workOrderRun);
wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_UNDER);
Boolean frontHandle = null;
for (WorkPlanRun item : newWprList) {
//当前序选中,上序不允许不选
if (frontHandle != null && !frontHandle && item.getHandle()) {
if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType())) {
throw new ServiceException("product.frontHandle");
} else if (WorkOrderRun.RUN_TYPE_2.equals(workOrderRun.getRunType())) {
throw new ServiceException("product.nextHandle");
}
}
item.setWorId(workOrderRun.getId());
workPlanRunService.save(item);
frontHandle = item.getHandle();
}
//验证当前工序是否有镀前入库
WorkPlan wp = workPlanService.getById(wo.getWpId());
if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType()) && wp.getStatus() > WorkPlan.STATUS_START) {
PlateAround pa = plateAroundService.getOne(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getWpId, wp.getId()).eq(PlateAround::getPaType, PlateAround.BEFORE_PLAT_IN));
if (pa == null) {
//下序外协,当前工序需要镀前入库
throw new ServiceException("未找到工序【"+wp.getPpsId()+"】镀前入库记录,无法转单!");
}
}
}
return true;
}
private boolean checkWp(WorkPlan wp, Short runType) {
//不分派工序不能操作
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());
if (processSet == null) {
return false;
}
if ("1".equals(processSet.getIsDispatch())) {
return false;
}
//如果是转厂内,则非厂外的工序跳过
if (WorkOrderRun.RUN_TYPE_2.equals(runType) && "0".equals(wp.getOem())) {
return false;
}
return true;
}
private void updateStatusFun(WorkOrder workOrder, Integer runStatus, Long userId) {
workOrder.setRunStatus(runStatus);
if (WorkOrder.RUN_STATUS_VOIDED.equals(runStatus)) {
//整单报废
yieldOrderService.updateYieldStatus(workOrder.getYoId(), YieldOrder.CUR_STATUS_VOIDED, 0d);
WorkOrderRun workOrderRun = workOrderRunService.getById(workOrder.getWorId());
if (workOrderRun != null) {
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_VOIDED);
workOrderRunService.updateById(workOrderRun);
}
workOrder.setCloseMan(userId);
workOrder.setCloseTime(new Date());
// 如果是烧结部件,子件同样关闭
YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId());
if (YieldOrder.YIELD_TYPE_2.equals(yieldOrder.getYieldType())) {
List<WorkOrder> prWorkOrderList = this.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, yieldOrder.getId()));
if (prWorkOrderList != null && !prWorkOrderList.isEmpty()) {
for (WorkOrder prWorkOrder : prWorkOrderList) {
if (prWorkOrder.getRunStatus() < WorkOrder.RUN_STATUS_COMPLETED) {
// 修改为关闭
prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_VOIDED);
this.updateById(prWorkOrder);
}
}
}
}
}
}
private void addWorkOrder(WorkOrder wo) {
wo.setInventoryQty(0);
wo.setCreateTime(new Date());

@ -0,0 +1,21 @@
package org.springblade.desk.produce.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.produce.mapper.WorkPlanRunMapper;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
import org.springblade.desk.produce.service.IWorkPlanRunService;
import org.springframework.stereotype.Service;
/**
* 作业计划运行明细 服务实现类
*
* @author BladeX
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class WorkPlanRunServiceImpl extends BaseServiceImpl<WorkPlanRunMapper, WorkPlanRun> implements IWorkPlanRunService {
}

@ -57,6 +57,9 @@ public class CycleTestExcel implements Serializable {
@ColumnWidth(20)
@ExcelProperty("试验件材料")
private String testMat;
@ColumnWidth(20)
@ExcelProperty("工艺员")
private String processUserName;
@Schema(description = "试验周期")
@ColumnWidth(20)
@ExcelProperty("试验周期")
@ -75,4 +78,7 @@ public class CycleTestExcel implements Serializable {
@ColumnWidth(20)
@ExcelProperty("更新时间")
private Date updateTime;
@ColumnWidth(40)
@ExcelProperty("试验标准文件名")
private String cycleTestStandardAttachOriginalName;
}

@ -47,4 +47,10 @@ public class CycleTestItemExcel implements Serializable {
@ColumnWidth(20)
@ExcelProperty("执行标准")
private String cycleTestStandardName;
/**
* 试验文件
*/
@ColumnWidth(40)
@ExcelProperty("试验文件")
private String originalName;
}

@ -14,6 +14,7 @@ import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.constant.BaseCol;
import org.springblade.desk.basic.service.IPlatingService;
import org.springblade.desk.basic.util.IdUtil;
import org.springblade.desk.quality.constant.CycleTestTaskConst;
import org.springblade.desk.quality.mapper.CycleTestMapper;
import org.springblade.desk.quality.pojo.entity.CycleTest;
@ -28,6 +29,7 @@ import org.springblade.desk.quality.util.JobExtUtil;
import org.springblade.desk.quality.wrapper.CycleTestStandardWrapper;
import org.springblade.desk.quality.wrapper.CycleTestWrapper;
import org.springblade.resource.feign.IAttachClient;
import org.springblade.resource.pojo.entity.Attach;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.UserInfo;
@ -165,11 +167,11 @@ public class CycleTestService2 {
*/
public void setVOValue(CycleTestVO vo) {
R<UserInfo> uiUP = userClient.userInfo(vo.getUpdateUser());
if (uiUP.getData().getUser() != null) {
if (uiUP.isSuccess() && uiUP.getData().getUser() != null) {
vo.setUpdateUserName(uiUP.getData().getUser().getName());
}
R<UserInfo> uiPro = userClient.userInfo(vo.getProcessUserId());
if (uiPro.getData().getUser() != null) {
if (uiPro.isSuccess() && uiPro.getData().getUser() != null) {
vo.setProcessUserName(uiPro.getData().getUser().getName());
}
CycleTestItem item = itemService.getById(vo.getCycleTestItemId());
@ -185,6 +187,12 @@ public class CycleTestService2 {
Long attachId = standard.getStandardAttachId();
vo.setCycleTestStandardName(standard.getName());
vo.setCycleTestStandardAttachId(attachId);
if (IdUtil.isValid(attachId)) {
R<Attach> attachR = attachClient.detailById(attachId);
if (attachR.isSuccess() && attachR.getData() != null) {
vo.setCycleTestStandardAttachOriginalName(attachR.getData().getOriginalName());
}
}
}
}
vo.setTestTypeName(dictClient.getValue(

@ -120,11 +120,11 @@ public class CycleTestTaskService2 {
qw.in(BaseCol.STATUS, CycleTestTaskConst.S_PENDING_ACCEPT, CycleTestTaskConst.S_PENDING_TEST);
}
// 创建时间正序
qw.orderByAsc(BaseCol.CREATE_TIME);
// qw.orderByAsc(BaseCol.CREATE_TIME);
qw.orderByAsc(CycleTestTask.COL_CODE);
// 状态正序
qw.orderByAsc(BaseCol.STATUS);
IPage<CycleTestTask> pages = service.page(
Condition.getPage(query), qw);
// qw.orderByAsc(BaseCol.STATUS);
IPage<CycleTestTask> pages = service.page(Condition.getPage(query), qw);
IPage<CycleTestTaskVO> pagesVO = CycleTestTaskWrapper.build().pageVO(pages);
pagesVO.getRecords()
.stream()

@ -68,13 +68,17 @@ ALTER TABLE mes_assay_content_detail
COMMENT ON COLUMN mes_assay_content_detail.add_val IS '添加量值';
ALTER TABLE mes_yield_order
ADD goods_demand DECIMAL(20, 10) NULL;
ADD goods_demand NUMBER(20,10) NULL;
COMMENT ON COLUMN mes_yield_order.goods_demand IS '物料需求数量';
ALTER TABLE mes_yield_order
ADD tools_demand DATE NULL;
ADD tools_demand NUMBER(20,10) NULL;
COMMENT ON COLUMN mes_yield_order.tools_demand IS '工装需求数量';
ALTER TABLE mes_yield_order
ADD PLATE_GOODS_CODE NVARCHAR2(255) NULL;
COMMENT ON COLUMN mes_yield_order.PLATE_GOODS_CODE IS '需求镀层物料编码';
CREATE TABLE mes_mold_apply
(
id NUMBER(20, 0) NOT NULL ENABLE,
@ -90,7 +94,7 @@ CREATE TABLE mes_mold_apply
part_name VARCHAR2(255) NULL,
tool_code VARCHAR2(255) NULL,
tool_name VARCHAR2(255) NULL,
apply_num DECIMAL(20, 10) NULL,
apply_num NUMBER(20,10) NULL,
plan_type_code VARCHAR2(255) NULL,
plan_type_name VARCHAR2(255) NULL,
need_date DATE NULL,
@ -140,7 +144,7 @@ CREATE TABLE mes_mold_demand
part_name VARCHAR2(255) NULL,
tool_code VARCHAR2(255) NULL,
tool_name VARCHAR2(255) NULL,
demand_num DECIMAL(20, 10) NULL,
demand_num NUMBER(20,10) NULL,
plan_type_code VARCHAR2(255) NULL,
plan_type_name VARCHAR2(255) NULL,
need_date DATE NULL,
@ -150,12 +154,12 @@ CREATE TABLE mes_mold_demand
releaser VARCHAR2(255) NULL,
memo VARCHAR2(255) NULL,
"SOURCE" DECIMAL(8, 0) NULL,
stock_num DECIMAL(20, 10) NULL,
occupy_num DECIMAL(20, 10) NULL,
stock_num NUMBER(20,10) NULL,
occupy_num NUMBER(20,10) NULL,
link_order_ids VARCHAR2(255) NULL,
mo_code VARCHAR2(100) NULL,
mo_name VARCHAR2(100) NULL,
quantity DECIMAL(20, 10) NULL,
quantity NUMBER(20,10) NULL,
yp_id DECIMAL(20, 0) NULL,
erp_id DECIMAL(20, 0) NULL,
erp_wo_code VARCHAR2(100) NULL,

Loading…
Cancel
Save