diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/logistics/OrderBoxRefinement.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/logistics/OrderBoxRefinement.java new file mode 100644 index 00000000..69c4975d --- /dev/null +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/logistics/OrderBoxRefinement.java @@ -0,0 +1,23 @@ +package org.springblade.job.processor.logistics; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import tech.powerjob.worker.core.processor.ProcessResult; +import tech.powerjob.worker.core.processor.TaskContext; +import tech.powerjob.worker.core.processor.sdk.BasicProcessor; + +/** + * 物流订单绑定模块 + */ +@Component +@Data +@Slf4j +public class OrderBoxRefinement implements BasicProcessor { + @Override + public ProcessResult process(TaskContext taskContext) throws Exception { + System.out.println("hello world"); + log.info("hello world"); + return new ProcessResult(true); + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/AGVCallBack.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/AGVCallBackDto.java similarity index 93% rename from blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/AGVCallBack.java rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/AGVCallBackDto.java index 0d08ede8..c7758e62 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/AGVCallBack.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/AGVCallBackDto.java @@ -1,11 +1,11 @@ -package org.springblade.desk.logistics.pojo.entity; +package org.springblade.desk.logistics.pojo.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data @Schema(description = "箱绑定接收") -public class AGVCallBack { +public class AGVCallBackDto { /** * 请求编号,每个请求都要一个唯一 * 编号, 同一个请求重复提交, 使 diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/BoxBinding.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/BoxBindingDto.java similarity index 69% rename from blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/BoxBinding.java rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/BoxBindingDto.java index c82c5ed5..f7c4712f 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/BoxBinding.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/BoxBindingDto.java @@ -1,14 +1,13 @@ -package org.springblade.desk.logistics.pojo.entity; +package org.springblade.desk.logistics.pojo.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import lombok.EqualsAndHashCode; import java.util.ArrayList; @Data @Schema(description = "箱绑定接收表") -public class BoxBinding { +public class BoxBindingDto { private String boxBarcode; private ArrayList orderIdList; private Long wcId; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/TaskDto.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/TaskDto.java new file mode 100644 index 00000000..fffc4570 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/dto/TaskDto.java @@ -0,0 +1,57 @@ +package org.springblade.desk.logistics.pojo.dto; +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; + +/** + * 物流任务实体类 + * + * @author: liweidong + * @create: 2026-03-03 + */ +@Data +@Schema(description = "物流任务对象") + +public class TaskDto extends BaseEntity { + + /** + * 箱条码 + */ + @Schema(description = "箱条码") + private String boxBarcode; + + /** + * 站点ID + */ + @Schema(description = "站点ID") + private Long stationId; + + /** + * 作业中心ID + */ + @Schema(description = "作业中心ID") + private Long wcId; + /** + * 当前状态 0:退回(超重) 1:站点 2:库位 3:等待 4:回库 5:结束 + */ + @Schema(description = "当前状态 0:退回(超重) 1:站点 2:库位 3:等待 4:回库 5:结束") + private Integer taskStatus; + /** + * 开始时间 + */ + @Schema(description = "开始时间") + private Date startTime; + /** + * 结束时间 + */ + @Schema(description = "结束时间") + private Date endTime; + + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/TaskExecuteRecord.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/TaskExecuteRecord.java index f138f560..40b450f2 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/TaskExecuteRecord.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/TaskExecuteRecord.java @@ -35,7 +35,7 @@ public class TaskExecuteRecord extends BaseEntity { public static final String STATUS_START = "start"; /** - * 状态常量:走出储位 + * 状态常量:结束 */ public static final String STATUS_END = "end"; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/TaskVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/TaskVO.java new file mode 100644 index 00000000..f808ee7f --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/TaskVO.java @@ -0,0 +1,25 @@ +package org.springblade.desk.logistics.pojo.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.desk.device.pojo.entity.EquipmentEntity; +import org.springblade.desk.logistics.pojo.entity.Task; + +import java.io.Serial; +@Data +@EqualsAndHashCode(callSuper = true) +public class TaskVO extends Task { + @Serial + private static final long serialVersionUID = 1L; + /** + * 主键ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + /** + * 状态名称 + */ +// String statusName; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MakeRec.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MakeRec.java index 38756649..973bb4bc 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MakeRec.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MakeRec.java @@ -35,7 +35,7 @@ public class MakeRec extends BaseEntity { private Double workQty = 0d; @Schema(description = "报废数量") - private Integer scrapQty = 0; + private Double scrapQty = 0d; @Schema(description = "色标数量") private Double flagQty = 0d; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesQcProduceRunEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesQcProduceRunEntity.java index 1ac925d0..ba4c90d5 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesQcProduceRunEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesQcProduceRunEntity.java @@ -75,12 +75,12 @@ public class MesQcProduceRunEntity extends BaseEntity { * 入槽时间 */ @Schema(description = "入槽时间") - private Date inDate; + private String inDate; /** * 出槽时间 */ @Schema(description = "出槽时间") - private Date outDate; + private String outDate; /** * 生产状态 */ @@ -160,7 +160,7 @@ public class MesQcProduceRunEntity extends BaseEntity { * 软起时间 */ @Schema(description = "软起时间") - private Date softWorkTime; + private String softWorkTime; /** * 电压 */ @@ -207,13 +207,28 @@ public class MesQcProduceRunEntity extends BaseEntity { @Schema(description = "参数7") private String dataSeven; - @TableField(exist = false) - private Date dataThirteen; + @Schema(description = "参数值8") + private String dataEight; - @TableField(exist = false) - private Date dataTwelve; + @Schema(description = "参数值9") + private String dataNine; - @TableField(exist = false) - private Date dataFourteen; + @Schema(description = "参数值10") + private String dataTen; + + @Schema(description = "参数值11、露点") + private String dataEleven; + + @Schema(description = "参数值12、存储保温结束") + private String dataTwelve; + + @Schema(description = "参数值13、存储保温开始") + private String dataThirteen; + + @Schema(description = "参数值14、真空度") + private String dataFourteen; + + @Schema(description = "初始电压") + private String startVol; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveDetailEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveDetailEntity.java index 54aba47f..4c2947b0 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveDetailEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveDetailEntity.java @@ -49,12 +49,12 @@ public class MesRbFilePreserveDetailEntity extends BaseEntity { * 时间 */ @Schema(description = "时间") - private Date rfpdTime; + private String rfpdTime; /** * 是否合格 */ @Schema(description = "是否合格") - private BigDecimal qualified; + private String qualified; /** * 参数名称 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveSlotEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveSlotEntity.java index c2458208..341edb6e 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveSlotEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/MesRbFilePreserveSlotEntity.java @@ -49,7 +49,7 @@ public class MesRbFilePreserveSlotEntity extends BaseEntity { * 模板类型 */ @Schema(description = "模板类型") - private String rfpsType; + private Short rfpsType; /** * 维护时间 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorFileSlotVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorFileSlotVO.java index 78a718e1..9cd3dd63 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorFileSlotVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorFileSlotVO.java @@ -15,6 +15,15 @@ import java.util.List; @Data public class ProduceMonitorFileSlotVO { + @Schema(description = "模板类型") + private Short rfpsType; + + @Schema(description = "插入序号") + private String insertIndex; + + @Schema(description = "槽号序号") + private String slotIndex; + @Schema(description = "槽位/工步") private String slotName; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanDataVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanDataVO.java index e4177faa..3e99fc04 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanDataVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanDataVO.java @@ -40,7 +40,7 @@ public class ProduceMonitorPlanDataVO { private List dsRbFilePreserveSlotList; @Schema(description = "检验记录") - private List prWorkCheck; + private ProduceMonitorWorkCheckVO prWorkCheck; @Schema(description = "转试记录") private List trialItemList; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanItemVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanItemVO.java index 1c352860..0091e48f 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanItemVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanItemVO.java @@ -3,6 +3,7 @@ package org.springblade.desk.produce.pojo.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.time.LocalDateTime; import java.util.Date; /** @@ -15,16 +16,16 @@ import java.util.Date; public class ProduceMonitorPlanItemVO { @Schema(description = "项目编号") - private String trialNo; + private String itemCode; @Schema(description = "项目名称") - private String trialItem; + private String itemName; @Schema(description = "标准") - private String trialStandard; + private String standardName; @Schema(description = "测试值") - private String scrapQty; + private String checkValue; @Schema(description = "试验数量") private Double testQty = 0d; @@ -36,12 +37,12 @@ public class ProduceMonitorPlanItemVO { private Double checkQty = 0d; @Schema(description = "检验结果") - private String checkValue; + private String checkResult; @Schema(description = "检验人") private String checkMan; @Schema(description = "检验时间") - private Date checkDate; + private LocalDateTime checkDate; } \ No newline at end of file diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/UnBingDeviceVo.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/UnBingDeviceVo.java index 6d9ba688..ca019bbe 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/UnBingDeviceVo.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/UnBingDeviceVo.java @@ -18,7 +18,7 @@ public class UnBingDeviceVo { private String fiveData; private String sixData; private String sevenData; - private Date dataFourteen; + private String dataFourteen; private String tempSlot; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/InspectionTask.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/InspectionTask.java index a9d53d3a..49c15568 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/InspectionTask.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/InspectionTask.java @@ -329,7 +329,7 @@ public class InspectionTask extends BaseEntity { * 返工数 */ @Schema(description = "返工数") - private Long reworkQty; + private Double reworkQty; /** * [作业计划]id */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/AGVDockingController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/AGVDockingController.java index e765fe39..83f32964 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/AGVDockingController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/AGVDockingController.java @@ -5,7 +5,8 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import org.springblade.core.tool.api.R; -import org.springblade.desk.logistics.pojo.entity.AGVCallBack; + +import org.springblade.desk.logistics.pojo.dto.AGVCallBackDto; import org.springblade.desk.logistics.service.IOrderBoxService; import org.springblade.desk.logistics.service.ITaskExecuteRecordService; import org.springframework.web.bind.annotation.PostMapping; @@ -34,7 +35,7 @@ public class AGVDockingController { summary = "agv小车回调接口", description = "AGV小车回调接口" ) - public R agvCallback(@RequestBody AGVCallBack agvCallBack ){ + public R agvCallback(@RequestBody AGVCallBackDto agvCallBack ){ // 1.参数合法性校验 if (agvCallBack == null || agvCallBack.getTaskCode().trim().isEmpty()) { return R.fail("任务单号不能为空"); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBoxController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBoxController.java index 363d3990..37acc733 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBoxController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBoxController.java @@ -1,22 +1,31 @@ package org.springblade.desk.logistics.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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 lombok.AllArgsConstructor; 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.tool.api.R; import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity; import org.springblade.desk.dashboard.service.IBsWorkCenterService; -import org.springblade.desk.dashboard.wrapper.BsWorkCenterWrapper; -import org.springblade.desk.logistics.pojo.entity.BoxBinding; +import org.springblade.desk.device.pojo.entity.EquipmentEntity; +import org.springblade.desk.device.pojo.vo.EquipmentVO; +import org.springblade.desk.logistics.pojo.dto.BoxBindingDto; +import org.springblade.desk.logistics.pojo.dto.TaskDto; +import org.springblade.desk.logistics.pojo.vo.TaskVO; import org.springblade.desk.logistics.service.IOrderBoxService; +import org.springblade.desk.logistics.service.ITaskService; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; -import java.util.List; /** * 订单箱子 控制器 @@ -31,6 +40,7 @@ import java.util.List; public class OrderBoxController extends BladeController { private final IOrderBoxService iOrderBoxService; private final IBsWorkCenterService bsWorkCenterService; + private final ITaskService taskService; @PostMapping("/getWeighing") @@ -70,7 +80,7 @@ public class OrderBoxController extends BladeController { summary = "绑定箱条码和订单", description = "绑定箱条码和订单信息内容" ) - public R boxBinding(@RequestBody BoxBinding boxBinding){ + public R boxBinding(@RequestBody BoxBindingDto boxBinding){ // 1.参数合法性校验 if (boxBinding == null || boxBinding.getBoxBarcode().trim().isEmpty()) { return R.fail("箱条码不能为空"); @@ -81,6 +91,24 @@ public class OrderBoxController extends BladeController { return iOrderBoxService.boxBinding(boxBinding); } + /** + * 任务表 自定义分页 + */ + @GetMapping("/page") + @ApiOperationSupport(order = 4) + @Operation(summary = "分页", description = "") + @Parameters({ + @Parameter(name = "boxBarcode", description = "箱条码", in = ParameterIn.QUERY, schema = @Schema(type = "String")), + @Parameter(name = "stationId", description = "站点ID", in = ParameterIn.QUERY, schema = @Schema(type = "Long")), + @Parameter(name = "wcId", description = "作业中心ID", in = ParameterIn.QUERY, schema = @Schema(type = "Long")), + @Parameter(name = "taskStatus", description = "当前状态 0:退回(超重) 1:站点 2:库位 3:等待 4:回库 5:结束", in = ParameterIn.QUERY, schema = @Schema(type = "Integer")), + @Parameter(name = "startTime", description = "开始时间", in = ParameterIn.QUERY, schema = @Schema(type = "Date")), + @Parameter(name = "endTime", description = "结束时间", in = ParameterIn.QUERY, schema = @Schema(type = "Date")) + }) + public R> page(@Parameter(hidden = true) TaskDto taskDto, Query query) { + IPage pages = taskService.selectPage(Condition.getPage(query), taskDto); + return R.data(pages); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskMapper.java index 16122207..3fab30f4 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskMapper.java @@ -1,10 +1,26 @@ package org.springblade.desk.logistics.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +import org.springblade.desk.device.pojo.entity.EquipmentEntity; +import org.springblade.desk.device.pojo.vo.EquipmentVO; +import org.springblade.desk.logistics.pojo.dto.TaskDto; import org.springblade.desk.logistics.pojo.entity.Task; import org.springblade.desk.logistics.pojo.entity.WeighData; +import org.springblade.desk.logistics.pojo.vo.TaskVO; + +import java.util.List; + public interface TaskMapper extends BaseMapper { Task selectByBoxBarcode(@Param("boxBarcode") String boxBarcode); + /** + * 自定义分页 + * + * @param page 分页参数 + * @param taskDto 查询参数 + * @return List + */ + List selectEquipmentPage(IPage page, TaskDto taskDto); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskMapper.xml index 635ac486..12e3e6a9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskMapper.xml @@ -12,4 +12,35 @@ AND BOX_BARCODE = #{boxBarcode} AND TASK_STATUS NOT IN (2, 9); + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBoxService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBoxService.java index 2987a5ce..4af6129e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBoxService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IOrderBoxService.java @@ -1,7 +1,7 @@ package org.springblade.desk.logistics.service; import org.springblade.core.tool.api.R; -import org.springblade.desk.logistics.pojo.entity.BoxBinding; +import org.springblade.desk.logistics.pojo.dto.BoxBindingDto; import java.math.BigDecimal; @@ -35,7 +35,7 @@ public interface IOrderBoxService { * - 成功:R.success(),携带绑定成功的提示或绑定记录数 * - 失败:R.fail(),携带失败原因(如箱条码不存在、订单已绑定、唯一约束冲突等) */ - R boxBinding(BoxBinding boxBinding); + R boxBinding(BoxBindingDto boxBinding); /** * 箱条码与订单解绑 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskExecuteRecordService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskExecuteRecordService.java index 91a31155..09108594 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskExecuteRecordService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskExecuteRecordService.java @@ -27,8 +27,8 @@ package org.springblade.desk.logistics.service; import org.springblade.core.mp.base.BaseService; import org.springblade.core.tool.api.R; -import org.springblade.desk.logistics.pojo.entity.AGVCallBack; -import org.springblade.desk.logistics.pojo.entity.OrderBind; +import org.springblade.desk.logistics.pojo.dto.AGVCallBackDto; + import org.springblade.desk.logistics.pojo.entity.TaskExecuteRecord; import org.springblade.desk.logistics.pojo.vo.AgvSchedulingTaskVO; @@ -40,7 +40,7 @@ import org.springblade.desk.logistics.pojo.vo.AgvSchedulingTaskVO; */ public interface ITaskExecuteRecordService extends BaseService { - R agvCallback(AGVCallBack agvCallBack); + R agvCallback(AGVCallBackDto agvCallBack); /** * 虚拟货架与起点(站点信息)进行绑定接口 @@ -60,7 +60,4 @@ public interface ITaskExecuteRecordService extends BaseService { * @return */ Task getBoxBarcode(String boxBarcode); + + IPage selectPage(IPage page, TaskDto taskDto); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IVirtualShelvesService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IVirtualShelvesService.java index 74d38f05..f0ac1ea8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IVirtualShelvesService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IVirtualShelvesService.java @@ -26,13 +26,8 @@ package org.springblade.desk.logistics.service; import org.springblade.core.mp.base.BaseService; -import org.springblade.core.tool.api.R; -import org.springblade.desk.logistics.pojo.entity.AGVCallBack; -import org.springblade.desk.logistics.pojo.entity.TaskExecuteRecord; import org.springblade.desk.logistics.pojo.entity.VirtualShelves; -import java.util.List; - /** * 虚拟货架 服务类 * diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java index 9a6d621d..0abe20fc 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java @@ -5,11 +5,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; +import org.springblade.desk.logistics.pojo.dto.BoxBindingDto; import org.springblade.desk.logistics.pojo.entity.*; import org.springblade.desk.logistics.service.*; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.service.IYieldOrderService; -import org.springblade.system.pojo.entity.AuthClient; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -19,7 +19,6 @@ import java.util.stream.Collectors; import static org.springblade.desk.logistics.pojo.entity.OrderBind.STATUS_UNBINDED; import static org.springblade.desk.logistics.pojo.entity.Station.STATUS_OCCUPIED; -import static org.springblade.desk.logistics.pojo.entity.Task.STATUS_FINISHED; /** * 订单箱业务实现类 @@ -120,7 +119,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { * - 失败:R.fail(),携带具体失败原因(如参数为空、订单已绑定、重量超限等) */ @Override - public R boxBinding(BoxBinding boxBinding) { + public R boxBinding(BoxBindingDto boxBinding) { log.info("接收到箱绑定实际参数:{}", boxBinding); // 1. 入参非空校验(基础防护) @@ -309,12 +308,12 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { } // 2. 站点无可用则查询可用库位(状态为占用的库位) - List locationList = iLocationService.list(new LambdaQueryWrapper().eq(Location::getLocationStatus, Location.STATUS_OCCUPIED)); + List locationList = iLocationService.list(new LambdaQueryWrapper().eq(Location::getLocationStatus, Location.STATUS_FREE)); if (!CollectionUtils.isEmpty(locationList)) { task.setLocationId(locationList.get(0).getId()); // 分配第一个可用库位 // 更新库位状态为空闲(锁定库位) Location location = locationList.get(0); - location.setLocationStatus(Location.STATUS_FREE); + location.setLocationStatus(Location.STATUS_OCCUPIED); iLocationService.updateById(location); return R.data(task); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StorageMonitoringServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StorageMonitoringServiceImpl.java index 283fcacf..3b707009 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StorageMonitoringServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StorageMonitoringServiceImpl.java @@ -1,50 +1,185 @@ package org.springblade.desk.logistics.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.logistics.pojo.entity.Location; +import org.springblade.desk.logistics.pojo.entity.Station; import org.springblade.desk.logistics.pojo.entity.Task; import org.springblade.desk.logistics.service.ILocationService; import org.springblade.desk.logistics.service.IStationService; import org.springblade.desk.logistics.service.IStorageMonitoringService; import org.springblade.desk.logistics.service.ITaskService; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import java.util.HashSet; -import java.util.Set; +import java.util.List; -@Service +/** + * 仓储监控服务实现类 + *

+ * 核心业务: + * 1. 定时(每5秒)扫描系统中所有空闲状态的站点 + * 2. 为每个空闲站点匹配最早创建的待库位任务 + * 3. 更新任务关联库位为空闲状态,并绑定站点与任务关系 + * 4. 触发AGV小车移动指令(待实现) + *

+ * 设计思路: + * - 采用定时任务自动巡检,减少人工干预 + * - 按任务创建时间升序匹配,保证任务执行的公平性 + * - 增加多层空值防护和状态校验,避免无效数据库操作 + * + * @author (可补充作者信息) + * @date 2026-03-05 + * @version 1.0 + */ +@Service // Spring业务层注解,将类注册为Spring Bean +@Slf4j // Lombok日志注解,自动生成log对象,无需手动创建Logger public class StorageMonitoringServiceImpl implements IStorageMonitoringService { - private static final Set RUNNING_STATUSES = new HashSet<>(); - - static { - // 初始化运行中任务状态 - RUNNING_STATUSES.add(Task.STATUS_START); // 任务启动 - RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_START); // 输送机启动 - RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_END); // 输送机结束 - RUNNING_STATUSES.add(Task.STATUS_STATION); // 站点状态 - RUNNING_STATUSES.add(Task.STATUS_LOCATION); // 库位状态 - RUNNING_STATUSES.add(Task.STATUS_WAITING); // 等待状态 - RUNNING_STATUSES.add(Task.STATUS_STATION_RECEIVE);// 站点接收 - RUNNING_STATUSES.add(Task.STATUS_BACK_TO_STORAGE);// 返库状态 - } + /** - * 任务服务:处理箱绑定任务的创建、状态更新、删除等 + * 任务业务服务:提供任务的CRUD、状态查询、条件筛选等操作 */ - private final ITaskService iTaskService; + private final ITaskService taskService; + /** - * 站点服务:处理站点状态(占用/空闲)管理 + * 站点业务服务:提供站点状态管理、站点信息查询等操作 */ - private final IStationService iStationService; + private final IStationService stationService; + /** - * 库位服务:处理库位状态(占用/空闲)管理 + * 库位业务服务:提供库位状态更新、库位信息查询等操作 */ - private final ILocationService iLocationService; - public StorageMonitoringServiceImpl(ITaskService iTaskService, IStationService iStationService, ILocationService iLocationService) { - this.iTaskService = iTaskService; - this.iStationService = iStationService; - this.iLocationService = iLocationService; + private final ILocationService locationService; + + /** + * 构造器注入依赖(Spring官方推荐方式) + *

+ * 优势: + * 1. 强制依赖注入,避免NPE(空指针异常) + * 2. 便于单元测试时模拟依赖 + * 3. 符合依赖倒置原则,降低耦合 + * + * @param taskService 任务服务Bean(Spring自动注入) + * @param stationService 站点服务Bean(Spring自动注入) + * @param locationService 库位服务Bean(Spring自动注入) + */ + public StorageMonitoringServiceImpl(ITaskService taskService, IStationService stationService, ILocationService locationService) { + this.taskService = taskService; + this.stationService = stationService; + this.locationService = locationService; } - @Override + /** + * 仓储空闲站点监控核心方法(定时执行) + *

+ * 执行频率:每5秒执行一次 + * 核心流程: + * 1. 拉取全量空闲状态的站点列表 + * 2. 遍历每个空闲站点,匹配对应工位的待库位任务 + * 3. 对首个任务关联的库位执行「置为空闲」操作 + * 4. 绑定任务与站点关系,更新站点预占用状态 + * 5. 触发AGV小车移动指令(待实现) + *

+ * 异常防护: + * - 空集合直接返回,避免循环空指针 + * - 库位ID/任务/库位信息空值校验,跳过异常数据 + * - 状态未变化时跳过更新,减少数据库IO + */ + @Scheduled(cron = "*/5 * * * * ?") // Spring定时任务注解,cron表达式控制执行频率 + @Override // 实现IStorageMonitoringService接口的抽象方法 public void monitoringStation() { + // ========== 步骤1:查询所有空闲状态的站点 ========== + List stationList = stationService.list( + new LambdaQueryWrapper() + .eq(Station::getStationStatus, Station.STATUS_FREE) // 筛选条件:站点状态为空闲 + ); + // 日志打印空闲站点数量,便于监控和问题排查 + log.info("【仓储监控】定时任务执行 - 查询到空闲站点数量:{}", stationList == null ? 0 : stationList.size()); + + // 空值防护:无空闲站点时直接返回,避免后续无效操作 + if (stationList == null || stationList.isEmpty()) { + log.warn("【仓储监控】定时任务执行 - 未查询到空闲站点,任务提前结束"); + return; + } + + // ========== 步骤2:遍历空闲站点处理关联任务 ========== + int processedCount = 0; // 统计成功处理的站点数量 + for (Station station : stationList) { + // 打印当前处理的站点信息,便于定位单站点异常 + log.info("【仓储监控】开始处理站点 - 站点ID:{},工位ID:{}", station.getId(), station.getWcId()); + + try { + // ========== 步骤2.1:查询对应工位的待库位任务(按创建时间升序) ========== + List taskList = taskService.list( + new LambdaQueryWrapper() + .eq(Task::getTaskStatus, Task.STATUS_LOCATION) // 任务状态:待库位 + .eq(Task::getWcId, station.getWcId()) // 匹配当前站点的工位ID + .orderByAsc(Task::getCreateTime) // 按创建时间升序,优先处理最早创建的任务 + ); + + // 无待处理任务时跳过当前站点 + if (taskList == null || taskList.isEmpty()) { + log.info("【仓储监控】站点ID:{} - 未查询到待库位任务,跳过处理", station.getId()); + continue; + } + + // ========== 步骤2.2:获取首个任务并校验关联库位ID ========== + Task firstTask = taskList.get(0); // 取最早创建的待库位任务 + Long locationId = firstTask.getLocationId(); // 获取任务关联的库位ID + log.info("【仓储监控】站点ID:{} - 匹配到首个待库位任务,任务ID:{},关联库位ID:{}", + station.getId(), firstTask.getId(), locationId); + + // 空值防护:库位ID为空时跳过,避免后续查询异常 + if (locationId == null) { + log.error("【仓储监控】任务ID:{} - 关联库位ID为空,跳过当前站点处理", firstTask.getId()); + continue; + } + + // ========== 步骤2.3:查询库位信息并更新状态为空闲 ========== + Location location = locationService.getById(locationId); // 根据库位ID查询库位信息 + // 库位不存在时跳过 + if (location == null) { + log.error("【仓储监控】库位ID:{} - 库位信息不存在,跳过当前站点处理", locationId); + continue; + } + + // 状态校验:库位已为空闲时跳过更新,减少数据库操作 + if (Location.STATUS_FREE.equals(location.getLocationStatus())) { + log.info("【仓储监控】库位ID:{} - 已为空闲状态,无需更新", locationId); + } else { + // 更新库位状态为空闲 + location.setLocationStatus(Location.STATUS_FREE); + boolean updateResult = locationService.updateById(location); + if (updateResult) { + log.info("【仓储监控】库位ID:{} - 状态更新为空闲成功", locationId); + } else { + log.error("【仓储监控】库位ID:{} - 状态更新为空闲失败,跳过后续操作", locationId); + continue; // 更新失败时不触发AGV指令 + } + } + + // ========== 步骤2.4:绑定任务与站点关系,更新站点预占用状态 ========== + firstTask.setStationId(station.getId()); // 任务绑定当前站点ID + taskService.updateById(firstTask); // 保存任务关联关系 + station.setStationStatus(Station.PRE_STATUS_OCCUPIED); // 站点置为预占用状态 + stationService.updateById(station); // 保存站点状态 + + // ========== 步骤2.5:触发AGV小车移动指令(待实现) ========== + log.info("【仓储监控】站点ID:{} - 准备调用AGV接口,任务ID:{},库位ID:{}", + station.getId(), firstTask.getId(), locationId); + // todo: 调用AGV接口传递任务ID和站点ID,触发小车移动 + // agvService.dispatchAgv(firstTask.getId(), station.getId()); + + processedCount++; // 成功处理计数+1 + + } catch (Exception e) { + // 单个站点处理异常不影响其他站点,记录异常日志便于排查 + log.error("【仓储监控】站点ID:{} - 处理过程中发生异常,跳过当前站点", station.getId(), e); + continue; + } + } + // ========== 任务结束:打印处理结果 ========== + log.info("【仓储监控】定时任务执行完成 - 总计扫描空闲站点:{},成功处理:{}", stationList.size(), processedCount); } -} +} \ No newline at end of file diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java index 0b23d803..1f581628 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java @@ -1,28 +1,4 @@ -/** - * BladeX Commercial License Agreement - * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. - *

- * Use of this software is governed by the Commercial License Agreement - * obtained after purchasing a license from BladeX. - *

- * 1. This software is for development use only under a valid license - * from BladeX. - *

- * 2. Redistribution of this software's source code to any third party - * without a commercial license is strictly prohibited. - *

- * 3. Licensees may copyright their own code but cannot use segments - * from this software for such purposes. Copyright of this software - * remains with BladeX. - *

- * Using this software signifies agreement to this License, and the software - * must not be used for illegal purposes. - *

- * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is - * not liable for any claims arising from secondary or illegal development. - *

- * Author: Chill Zhuang (bladejava@qq.com) - */ + package org.springblade.desk.logistics.service.impl; import cn.hutool.core.util.IdUtil; @@ -33,24 +9,26 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.api.R; -import org.springblade.desk.logistics.mapper.OrderBindMapper; import org.springblade.desk.logistics.mapper.TaskExecuteRecordMapper; -import org.springblade.desk.logistics.pojo.entity.AGVCallBack; -import org.springblade.desk.logistics.pojo.entity.OrderBind; +import org.springblade.desk.logistics.pojo.dto.AGVCallBackDto; import org.springblade.desk.logistics.pojo.entity.TaskExecuteRecord; import org.springblade.desk.logistics.pojo.vo.AgvSchedulingTaskVO; import org.springblade.desk.logistics.service.IOrderBindService; import org.springblade.desk.logistics.service.ITaskExecuteRecordService; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** - * 物流小车对接实体类 服务实现类 + * 物流AGV小车任务执行记录服务实现类 + *

+ * 核心功能: + * 1. 处理AGV小车执行任务后的回调通知 + * 2. 更新任务执行记录的状态、起始/结束位置等关键信息 + * 3. 任务完成时触发后续的业务接口调用(东哥接口) * * @author BladeX * @since 2025-11-12 @@ -59,27 +37,88 @@ import java.util.Map; @Slf4j public class TaskExecuteRecordServiceImpl extends BaseServiceImpl implements ITaskExecuteRecordService { - + /** + * AGV小车任务状态回调接口 + *

+ * 处理逻辑: + * 1. 接收AGV小车的回调参数,记录日志并校验任务单号是否存在 + * 2. 清理回调方法名的空格,更新任务执行记录的方法字段 + * 3. 根据不同的任务状态(启动/出仓/结束)更新对应的位置信息 + * 4. 保存更新后的任务记录,失败则返回错误结果 + * 5. 任务结束时触发东哥接口调用(待实现) + * + * @param agvCallBack AGV小车回调参数实体,包含任务单号、执行方法、当前位置等信息 + * @return R 统一返回结果: + * - 成功:R.success() + * - 失败:R.fail(错误信息) + */ @Override - public R agvCallback(AGVCallBack agvCallBack) { - log.info("agv小车接口调用参数入参:{}",agvCallBack); - List list = list(new LambdaQueryWrapper().eq(TaskExecuteRecord::getId, agvCallBack.getTaskCode()).orderByDesc(TaskExecuteRecord::getCreateTime)); - if (list==null||list.size()==0) { + public R agvCallback(AGVCallBackDto agvCallBack) { + // 记录AGV回调入参,便于问题排查 + log.info("agv小车接口调用参数入参:{}", agvCallBack); + + // 1. 根据任务单号查询最新的任务执行记录(按创建时间降序,取第一条) + List list = list( + new LambdaQueryWrapper() + .eq(TaskExecuteRecord::getId, agvCallBack.getTaskCode()) + .orderByDesc(TaskExecuteRecord::getCreateTime) + ); + + // 校验:未查询到任务记录,返回失败 + if (list == null || list.isEmpty()) { + log.warn("AGV回调失败:未查询到任务单号为{}的执行记录", agvCallBack.getTaskCode()); return R.fail("未查询到该任务单号"); } + + // 取最新的任务执行记录 TaskExecuteRecord taskExecuteRecord = list.get(0); + + // 2. 清理方法名中的空格(避免因空格导致状态判断错误) String method = agvCallBack.getMethod().replaceAll(" ", ""); taskExecuteRecord.setMethod(method); - if (!updateById(taskExecuteRecord)) { + + // 3. 根据不同的任务状态更新对应的位置信息 + switch (method) { + // 任务启动/出仓状态:更新起始位置 + case TaskExecuteRecord.STATUS_START: + case TaskExecuteRecord.STATUS_OUTBIN: + taskExecuteRecord.setStartPos(agvCallBack.getCurrentPositionCode()); + log.info("任务单号{}:更新起始位置为{},状态为{}", + agvCallBack.getTaskCode(), agvCallBack.getCurrentPositionCode(), method); + break; + // 任务结束状态:更新结束位置 + case TaskExecuteRecord.STATUS_END: + taskExecuteRecord.setEndPos(agvCallBack.getCurrentPositionCode()); + log.info("任务单号{}:更新结束位置为{},状态为{}", + agvCallBack.getTaskCode(), agvCallBack.getCurrentPositionCode(), method); + break; + // 其他状态:暂不处理位置信息 + default: + log.info("任务单号{}:状态{}无需更新位置信息", agvCallBack.getTaskCode(), method); + break; + } + + // 4. 保存更新后的任务记录 + boolean updateResult = updateById(taskExecuteRecord); + if (!updateResult) { + log.error("AGV回调失败:任务单号{}的执行记录更新保存失败", agvCallBack.getTaskCode()); return R.fail("保存该任务单号失败"); } + + // 5. 任务结束状态:触发后续的东哥接口调用(待实现) if (method.equals(TaskExecuteRecord.STATUS_END)) { + log.info("任务单号{}已完成,准备调用东哥接口", agvCallBack.getTaskCode()); //todo: 调用东哥接口 + // eastBrotherService.notifyTaskComplete(agvCallBack.getTaskCode()); } + + // 回调处理成功 + log.info("AGV回调成功:任务单号{}的执行记录已更新,状态为{}", agvCallBack.getTaskCode(), method); return R.success(); } + @Override public boolean boundVirtualShelves(String virtualShelvesCode, String stationCode) { String url = "http://172.22.252.10:8181/rcms/services/rest/hikRpcService/bindPodAndBerth"; @@ -197,3 +236,4 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl implement public Task getBoxBarcode(String boxBarcode) { return taskMapper.selectByBoxBarcode(boxBarcode); } + + @Override + public IPage selectPage(IPage page, TaskDto taskDto) { + List taskVOList = taskMapper.selectEquipmentPage(page, taskDto); + return page.setRecords(taskVOList); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java index 5fcd0c40..a9d9e270 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java @@ -3,8 +3,11 @@ 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.entity.MacToolUse; +import org.springblade.desk.produce.pojo.entity.MesQcProduceRunEntity; +import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO; import java.util.List; +import java.util.Map; /** * 设备,工装使用记录 Mapper 接口 @@ -15,4 +18,8 @@ public interface MacToolUseMapper extends BaseMapper { MacToolUse getTcDataByWoId(Long woId); List queryMacToolUse(IPage page, MacToolUse macToolUse); + + List listSlotInfo(Long id, int isGr, int isCx); + + MesQcProduceRunEntity getBoxInfoByWpIdMtnCode(Long id); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml index 11a324c3..e57b62b5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml @@ -34,5 +34,56 @@ + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MesQcProduceRunMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MesQcProduceRunMapper.java index 3f02040e..6d753935 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MesQcProduceRunMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MesQcProduceRunMapper.java @@ -27,4 +27,5 @@ public interface MesQcProduceRunMapper extends BaseMapper List selectMesQcProduceRunPage(IPage page, MesQcProduceRunVO mesQcProduceRun); + List listPrByWpIdIndex(Long id, int i, int i1); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/QcProduceRunMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/QcProduceRunMapper.xml index 0f9cd761..a36c8fde 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/QcProduceRunMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/QcProduceRunMapper.xml @@ -49,7 +49,15 @@ - + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java index bc68102c..c4cb058c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java @@ -3,6 +3,9 @@ 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.entity.MacToolUse; +import org.springblade.desk.produce.pojo.entity.MesQcProduceRunEntity; +import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO; import java.util.List; @@ -31,4 +34,20 @@ public interface IMacToolUseService extends BaseService { IPage queryMacToolUse(IPage page, MacToolUse macToolUse); MacToolUse getTcDataByWoId(Long woId); + + /** + * 获取工位信息 + * + * @param workPlan + * @return + */ + List listSlotInfo(WorkPlan workPlan); + + List getDataByWpIdAndIndexList(Long id, String number); + + MesQcProduceRunEntity getBoxInfoByWpIdMtnCode(Long id); + + MacToolUse getDataByWpIdAndIndex(Long id, String number); + + MacToolUse getHangNumIsNull(Long id); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesQcProduceRunService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesQcProduceRunService.java index aef41d80..806deb44 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesQcProduceRunService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesQcProduceRunService.java @@ -5,6 +5,8 @@ import org.springblade.core.mp.base.BaseService; import org.springblade.desk.produce.pojo.entity.MesQcProduceRunEntity; import org.springblade.desk.produce.pojo.vo.MesQcProduceRunVO; +import java.util.List; + /** * 生产追溯 服务类 * @@ -29,4 +31,8 @@ public interface IMesQcProduceRunService extends BaseService listPrByWpIdIndexAndMtnCode(List list, String mtnCode); + + List listPrByWpIdIndex(Long id, int i, Boolean aTrue); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesRbFilePreserveDetailService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesRbFilePreserveDetailService.java index b102f1f1..75e97bbe 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesRbFilePreserveDetailService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesRbFilePreserveDetailService.java @@ -5,6 +5,8 @@ import org.springblade.core.mp.base.BaseService; import org.springblade.desk.produce.pojo.entity.MesRbFilePreserveDetailEntity; import org.springblade.desk.produce.pojo.vo.MesRbFilePreserveDetailVO; +import java.util.List; + /** * 热表电子档案维护-明细 服务类 * @@ -21,4 +23,5 @@ public interface IMesRbFilePreserveDetailService extends BaseService selectMesRbFilePreserveDetailPage(IPage page, MesRbFilePreserveDetailVO mesRbFilePreserveDetail); + List getByRfpsId(Long id); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesRbFilePreserveSlotService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesRbFilePreserveSlotService.java index 1c9861ba..6cea9406 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesRbFilePreserveSlotService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMesRbFilePreserveSlotService.java @@ -24,4 +24,5 @@ public interface IMesRbFilePreserveSlotService extends BaseService selectMesRbFilePreserveSlotPage(IPage page, MesRbFilePreserveSlotVO mesRbFilePreserveSlot); + List getByRfpId(Long aLong); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java index fcc6d61b..05a69120 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java @@ -8,6 +8,7 @@ import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO; 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.WorkPlan; import org.springblade.desk.produce.pojo.entity.WorkPlanRun; import org.springblade.desk.produce.pojo.vo.BatchPrepareVO; import org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO; @@ -165,4 +166,12 @@ public interface IWorkOrderService extends BaseService { * @param wpId 工单id */ ProduceMonitorPlanDataVO getPlanDetail(Long wpId); + + /** + *

方法名: getProcessByWp

+ *

方法描述: 组装生产追溯数据

+ * + * @param workPlan 工单计划 + */ + void getProcessByWp(ProduceMonitorPlanDataVO planDataVO, WorkPlan workPlan); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java index 1ea939ed..cddcf93b 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java @@ -1,21 +1,25 @@ package org.springblade.desk.produce.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; 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.device.pojo.entity.RackSetEntity; import org.springblade.desk.device.service.IRackSetService; import org.springblade.desk.produce.mapper.MacToolUseMapper; import org.springblade.desk.produce.pojo.entity.MacToolUse; +import org.springblade.desk.produce.pojo.entity.MesQcProduceRunEntity; +import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO; import org.springblade.desk.produce.service.IMacToolUseService; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Random; +import java.util.*; import static com.fasterxml.jackson.databind.type.LogicalType.DateTime; @@ -30,6 +34,8 @@ import static com.fasterxml.jackson.databind.type.LogicalType.DateTime; public class MacToolUseServiceImpl extends BaseServiceImpl implements IMacToolUseService { private final IRackSetService rackSetService; + + private final IBsProcessSetService bsProcessSetService; @Override public String nextCode(int i) { // 编码模式 @@ -84,6 +90,43 @@ public class MacToolUseServiceImpl extends BaseServiceImpl listSlotInfo(WorkPlan workPlan) { + BsProcessSetEntity processSet = bsProcessSetService.getById(workPlan.getPpsId()); + if ("固溶".equals(processSet.getName())) { + return baseMapper.listSlotInfo(workPlan.getId(), 1, 0); + } + List slotListVos = baseMapper.listSlotInfo(workPlan.getId(), 0, 1); + if (CollectionUtils.isEmpty(slotListVos)) { + slotListVos = baseMapper.listSlotInfo(workPlan.getId(), 0, 0); + } + return slotListVos; + } + + @Override + public List getDataByWpIdAndIndexList(Long id, String number) { + return this.list(Wrappers.lambdaQuery(MacToolUse.class).eq(MacToolUse::getWpId, id).eq(MacToolUse::getMtuIndex, number)); + } + + @Override + public MesQcProduceRunEntity getBoxInfoByWpIdMtnCode(Long id) { + MesQcProduceRunEntity qcProduceRun = baseMapper.getBoxInfoByWpIdMtnCode(id); + qcProduceRun.setWorkSlot("烘干"); + return qcProduceRun; + } + + @Override + public MacToolUse getDataByWpIdAndIndex(Long id, String number) { + List macToolUses = this.list(Wrappers.lambdaQuery(MacToolUse.class).eq(MacToolUse::getWpId, id).eq(MacToolUse::getMtuIndex, number).orderByDesc(MacToolUse::getId)); + return CollectionUtils.isNotEmpty(macToolUses) ? macToolUses.get(0) : null; + } + + @Override + public MacToolUse getHangNumIsNull(Long id) { + List macToolUses = this.list(Wrappers.lambdaQuery(MacToolUse.class).eq(MacToolUse::getWpId, id).isNotNull(MacToolUse::getHangNum)); + return CollectionUtils.isNotEmpty(macToolUses) ? macToolUses.get(0) : null; + } + public static final int time2Integer(Date d) { Calendar cal = Calendar.getInstance(); cal.setTime(d); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java index 702b6d1d..b3f4e36f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java @@ -1,5 +1,6 @@ package org.springblade.desk.produce.service.impl; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import jodd.bean.BeanUtil; @@ -217,8 +218,7 @@ public class MakeRecServiceImpl extends BaseServiceImpl MesQcProduceRunEntity qcProduceRun = new MesQcProduceRunEntity(); qcProduceRun.setMtnCode(code); qcProduceRun.setWorkSlot("热处理自检"); - - qcProduceRun.setInDate(new Date()); + qcProduceRun.setInDate(DateUtil.now()); qcProduceRun.setDataOne(makeRecDTO.getResource()); qcProduceRun.setDataTwo(makeRecDTO.getNum()); qcProduceRun.setDataThree(makeRecDTO.getThickness()); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesQcProduceRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesQcProduceRunServiceImpl.java index ac90f019..49b72e09 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesQcProduceRunServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesQcProduceRunServiceImpl.java @@ -35,5 +35,14 @@ public class MesQcProduceRunServiceImpl extends BaseServiceImpl listPrByWpIdIndexAndMtnCode(List list, String mtnCode) { + return this.list(Wrappers.lambdaQuery(MesQcProduceRunEntity.class).eq(MesQcProduceRunEntity::getMtnCode, mtnCode).in(MesQcProduceRunEntity::getMtnCode, list)); + } + + @Override + public List listPrByWpIdIndex(Long id, int i, Boolean aTrue) { + return baseMapper.listPrByWpIdIndex(id, i, aTrue ? 1 : 0); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesRbFilePreserveDetailServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesRbFilePreserveDetailServiceImpl.java index f0827607..0b3e47ab 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesRbFilePreserveDetailServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesRbFilePreserveDetailServiceImpl.java @@ -1,6 +1,7 @@ package org.springblade.desk.produce.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.desk.produce.mapper.MesRbFilePreserveDetailMapper; import org.springblade.desk.produce.pojo.entity.MesRbFilePreserveDetailEntity; @@ -8,6 +9,8 @@ import org.springblade.desk.produce.pojo.vo.MesRbFilePreserveDetailVO; import org.springblade.desk.produce.service.IMesRbFilePreserveDetailService; import org.springframework.stereotype.Service; +import java.util.List; + /** * 热表电子档案维护-明细 服务实现类 * @@ -22,5 +25,10 @@ public class MesRbFilePreserveDetailServiceImpl extends BaseServiceImpl getByRfpsId(Long id) { + return this.list(Wrappers.lambdaQuery(MesRbFilePreserveDetailEntity.class).eq(MesRbFilePreserveDetailEntity::getRfpsId, id).orderByAsc(MesRbFilePreserveDetailEntity::getDetailIndex)); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesRbFilePreserveSlotServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesRbFilePreserveSlotServiceImpl.java index 32d7d2ce..99aad606 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesRbFilePreserveSlotServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MesRbFilePreserveSlotServiceImpl.java @@ -1,5 +1,6 @@ package org.springblade.desk.produce.service.impl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springblade.desk.produce.mapper.MesRbFilePreserveSlotMapper; import org.springblade.desk.produce.pojo.entity.MesRbFilePreserveSlotEntity; import org.springblade.desk.produce.pojo.vo.MesRbFilePreserveSlotVO; @@ -24,6 +25,10 @@ public class MesRbFilePreserveSlotServiceImpl extends BaseServiceImpl getByRfpId(Long aLong) { + return this.list(Wrappers.lambdaQuery(MesRbFilePreserveSlotEntity.class).eq(MesRbFilePreserveSlotEntity::getRfpId, aLong)); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java index d5858304..71d4ebc4 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java @@ -1,5 +1,6 @@ package org.springblade.desk.produce.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.BeanUtils; @@ -37,7 +38,9 @@ import org.springblade.desk.quality.service.IWorkPlanItemService; import org.springblade.scheduling.pojo.entity.ProcessSetEntity; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -271,7 +274,7 @@ public class PdaSaveServiceImpl extends BaseServiceImpllambdaQuery().eq(RackSetEntity::getRsCode, unBingVo.getRsCode())); // 查询飞靶 @@ -364,7 +368,6 @@ public class PdaSaveServiceImpl extends BaseServiceImpl 0) { for (MesQcProduceRunEntity qcProduceRun : qcProduceRuns) { - qcProduceRun.setOutDate(new Date()); + qcProduceRun.setOutDate(DateUtil.now()); if (unBingDeviceVo.getOneData() != null) { - qcProduceRun.setDataThirteen(new Date()); // 保温开始时间 + qcProduceRun.setDataThirteen(DateUtil.now()); // 保温开始时间 } if (unBingDeviceVo.getThreeData() != null) { - qcProduceRun.setDataTwelve(new Date()); // 保温结束时间 + qcProduceRun.setDataTwelve(DateUtil.now()); // 保温结束时间 } qcProduceRun.setTempSlot(unBingDeviceVo.getTempSlot()); // 退火温度 qcProduceRun.setDataFourteen(unBingDeviceVo.getDataFourteen()); // 退火温度 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index 5dc09f47..dc0eb813 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -21,9 +21,17 @@ import org.springblade.core.tool.utils.StringUtil; import org.springblade.desk.basic.constant.FlowConst; import org.springblade.desk.basic.service.IProcessAbilityService; import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; +import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.service.IBsProcessSetService; +import org.springblade.desk.dashboard.service.IBsTeamSetService; import org.springblade.desk.dashboard.service.IDsPartService; +import org.springblade.desk.device.pojo.entity.EquipmentEntity; +import org.springblade.desk.device.pojo.entity.FeiBaSetEntity; +import org.springblade.desk.device.pojo.entity.RackSetEntity; +import org.springblade.desk.device.service.IEquipmentService; +import org.springblade.desk.device.service.IFeiBaSetService; +import org.springblade.desk.device.service.IRackSetService; import org.springblade.desk.order.mapper.YieldOrderMapper; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; @@ -41,8 +49,11 @@ import org.springblade.desk.produce.pojo.vo.*; 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.pojo.entity.ProReTemplate; +import org.springblade.desk.quality.pojo.entity.WorkPlanItem; import org.springblade.desk.quality.service.IInspectionTaskService; import org.springblade.desk.quality.service.IPlanTestService; +import org.springblade.desk.quality.service.IProReTemplateService; import org.springblade.desk.quality.service.IWorkPlanItemService; import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import org.springblade.erpdata.feign.IErpDataProduceClient; @@ -60,6 +71,7 @@ import java.io.ByteArrayOutputStream; import java.time.Duration; import java.time.Instant; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -106,6 +118,24 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectWorkOrderPage(IPage page, WorkOrderDTO workOrder) { return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder)); @@ -119,8 +149,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl wpList = new ArrayList<>(oldList.size()); for (WorkPlan oldWp : oldList) { WorkPlan wp = new WorkPlan(); - BeanUtil.copyProperties(oldWp,wp); + BeanUtil.copyProperties(oldWp, wp); wp.setId(null); @@ -303,7 +333,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl makeRecs = makeRecService.list(Wrappers.lambdaQuery(MakeRec.class).eq(MakeRec::getWpId, wpId)); + if (CollectionUtils.isNotEmpty(makeRecs)) { + List makeRecVos = new ArrayList<>(); + for (MakeRec makeRec : makeRecs) { + ProduceMonitorMakeRecVO makeRecVO = new ProduceMonitorMakeRecVO(); + BeanUtils.copyProperties(makeRec, makeRecVO); + makeRecVO.setWorker(UserCache.getUser(makeRec.getWorker()) != null ? UserCache.getUser(makeRec.getWorker()).getRealName() : ""); + makeRecVos.add(makeRecVO); + } + planDataVO.setMrList(makeRecVos); + } + + this.getProcessByWp(planDataVO, workPlan); + + // 设备使用详情 + List macToolUses = macToolUseService.list(Wrappers.lambdaQuery(MacToolUse.class).eq(MacToolUse::getWpId, workPlan.getId()).eq(MacToolUse::getMtuIndex, "2").orderBy(true, true, MacToolUse::getMtnCode)); + if (CollectionUtils.isNotEmpty(macToolUses)) { + List mtuList = new ArrayList<>(); + // 设备信息 + List equipmentEntities = equipmentService.listByIds(macToolUses.stream().map(MacToolUse::getEquipmentCard).toList()); + Map equipmentEntityMap = equipmentEntities.stream().collect(Collectors.toMap(EquipmentEntity::getId, eq -> eq)); + // 飞靶信息 + List feiBaSetEntities = feiBaSetService.listByIds(macToolUses.stream().map(MacToolUse::getBsFeiBaSet).toList()); + Map feiBaSetEntityMap = feiBaSetEntities.stream().collect(Collectors.toMap(FeiBaSetEntity::getId, fb -> fb)); + // 挂具信息 + List rackSetEntities = rackSetService.listByIds(macToolUses.stream().map(MacToolUse::getBsRackSet).toList()); + Map rackSetEntityMap = rackSetEntities.stream().collect(Collectors.toMap(RackSetEntity::getId, rack -> rack)); + for (MacToolUse macToolUse : macToolUses) { + ProduceMonitorMtuListVO mtuListVO = new ProduceMonitorMtuListVO(); + mtuListVO.setHangNum(macToolUse.getHangNum()); + mtuListVO.setRsCode(rackSetEntityMap.get(macToolUse.getBsRackSet()) != null ? rackSetEntityMap.get(macToolUse.getBsRackSet()).getRsCode() : ""); + mtuListVO.setFsCode(feiBaSetEntityMap.get(macToolUse.getBsFeiBaSet()) != null ? feiBaSetEntityMap.get(macToolUse.getBsFeiBaSet()).getFsCode() : ""); + mtuListVO.setDeviceCode(equipmentEntityMap.get(macToolUse.getEquipmentCard()) != null ? equipmentEntityMap.get(macToolUse.getEquipmentCard()).getDeviceName() : ""); + mtuList.add(mtuListVO); + } + planDataVO.setMtuList(mtuList); + } + + // 检验记录 + InspectionTask prWorkCheckByWpId = inspectionTaskService.getPrWorkCheckByWpId(wpId); + ProduceMonitorWorkCheckVO workCheckVO = new ProduceMonitorWorkCheckVO(); + BeanUtils.copyProperties(prWorkCheckByWpId, workCheckVO); + planDataVO.setPrWorkCheck(workCheckVO); + + // 转试记录 + List planTests = planTestService.list(Wrappers.lambdaQuery(PlanTest.class).eq(PlanTest::getWpId, wpId)); + if (CollectionUtils.isNotEmpty(planTests)) { + planDataVO.setTrialItemList(planTests); + } + + // 检验项目 + List workPlanItems = workPlanItemService.list(Wrappers.lambdaQuery(WorkPlanItem.class).eq(WorkPlanItem::getWpId, wpId)); + if (CollectionUtils.isNotEmpty(workPlanItems)) { + List itemVos = new ArrayList<>(); + for (WorkPlanItem workPlanItem : workPlanItems) { + ProduceMonitorPlanItemVO itemVO = new ProduceMonitorPlanItemVO(); + BeanUtils.copyProperties(workPlanItem, itemVO); + itemVO.setCheckMan(UserCache.getUser(workPlanItem.getCheckUserId()) != null ? UserCache.getUser(workPlanItem.getCheckUserId()).getRealName() : ""); + itemVos.add(itemVO); + } + planDataVO.setItemList(itemVos); + } + return planDataVO; + } + + @Override + public void getProcessByWp(ProduceMonitorPlanDataVO planDataVO, WorkPlan workPlan) { + List qcProduceRunsList; + if (WorkPlan.PRINT_TYPE_PROCESS.equals(workPlan.getPrintType())) { + // 同槽信息 + planDataVO.setSlotList(macToolUseService.listSlotInfo(workPlan)); + // 过程质量记录 + List dsRbFilePreserveSlotList = new ArrayList<>(); + BsTeamSetEntity bsTeamSet = teamSetService.getById(workPlan.getMakeTeam()); + if (bsTeamSet != null) { + MacToolUse prMacToolUse; + List preserveSlotList; + MesQcProduceRunEntity boxInfo; + + // 根据电子档案维护组装数据(上线前) 分槽 + List dataByWpIdAndIndexList = macToolUseService.getDataByWpIdAndIndexList(workPlan.getId(), "1"); + if (CollectionUtils.isNotEmpty(dataByWpIdAndIndexList)) { + for (MacToolUse prMacToolUseItem : dataByWpIdAndIndexList) { + if (prMacToolUseItem != null && prMacToolUseItem.getId() != null) { + // 获取模板数据 + preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(prMacToolUseItem.getRfpId())); + qcProduceRunsList = qcProduceRunService.listPrByWpIdIndexAndMtnCode(dataByWpIdAndIndexList.stream().map(MacToolUse::getMtnCode).toList(), prMacToolUseItem.getMtnCode()); + // 烘箱信息(从设备,工装使用记录获取) + boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId()); + if (boxInfo.getInDate() != null) { + qcProduceRunsList.add(boxInfo); + } + + if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) { + + // 2025-07-23 线上迁移修改删除了日志打印 + // cdl 20250218 修改分槽同一槽号连续出现 + this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUseItem); + } + } + } + } + + + // 根据电子档案维护组装数据(自动) + prMacToolUse = macToolUseService.getDataByWpIdAndIndex(workPlan.getId(), "2"); + if (prMacToolUse != null && prMacToolUse.getId() != null) { + // 获取模板数据 + List dsRbFilePreserveList; + BsProcessSetEntity processSet = bsProcessSetService.getById(workPlan.getPpsId()); + if (workPlan.getPpsId() != null && ("喷砂".equals(processSet.getName()) || "涂色标".equals(processSet.getName()))) { + dsRbFilePreserveList = proReTemplateService.getDataByWcIdAndPpsId(null, workPlan.getPpsId(), Boolean.TRUE); + } else { + dsRbFilePreserveList = proReTemplateService.getDataByWcIdAndPpsId(bsTeamSet.getWcId(), workPlan.getPpsId(), Boolean.TRUE); + } + if (dsRbFilePreserveList != null && !dsRbFilePreserveList.isEmpty()) { + preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(dsRbFilePreserveList.get(0).getId()); + qcProduceRunsList = qcProduceRunService.listPrByWpIdIndex(workPlan.getId(), 2, Boolean.TRUE); + + // 烘箱信息(从设备,工装使用记录获取) + boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId()); + if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty() && boxInfo.getInDate() != null) { + qcProduceRunsList.add(boxInfo); + } + if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) { + // cdl 20250218 修改分槽同一槽号连续出现 + this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUse); + } + } + // 获取额外面积数据 +// BsAdditionalMess dataByMtuCode = bsAdditionalMessDao.getDataByOneData(prMacToolUse.getMtnCode(), BsAdditionalMess.TYPE_ONE); +// workPlan.setBsAdditionalMess(dataByMtuCode); + } + + // 根据电子档案维护组装数据(线下) + //zxh 20250117 解决单工序绑定两个手动记录只显示一个问题 + List prMacToolUseList = macToolUseService.getDataByWpIdAndIndexList(workPlan.getId(), "3"); + if (prMacToolUseList != null && !prMacToolUseList.isEmpty()) { + for (MacToolUse prMacToolUseSd : prMacToolUseList) { + if (prMacToolUseSd != null && prMacToolUseSd.getId() != null) { + // 获取模板数据 + preserveSlotList = mesRbFilePreserveSlotService.getByRfpId(Long.valueOf(prMacToolUseSd.getRfpId())); + qcProduceRunsList = qcProduceRunService.listPrByWpIdIndexAndMtnCode(prMacToolUseList.stream().map(MacToolUse::getMtnCode).toList(), prMacToolUseSd.getMtnCode()); + // 烘箱信息(从设备,工装使用记录获取) + boxInfo = macToolUseService.getBoxInfoByWpIdMtnCode(workPlan.getId()); + if (boxInfo.getInDate() != null) { + qcProduceRunsList.add(boxInfo); + } + + if (qcProduceRunsList != null && !qcProduceRunsList.isEmpty()) { + + // cdl 20250218 修改分槽同一槽号连续出现 + this.setRbFilePreserveData(preserveSlotList, qcProduceRunsList, workPlan, dsRbFilePreserveSlotList, prMacToolUseSd); + } + } + } + } + } + planDataVO.setDsRbFilePreserveSlotList(dsRbFilePreserveSlotList); + } + } + + private void setRbFilePreserveData(List preserveSlotList, List qcProduceRunsList, WorkPlan workPlan, List dsRbFilePreserveSlotList, MacToolUse prMacToolUse) { + List dsRbFilePreserveDetailList = null; + ProduceMonitorFileSlotVO newDsRbFilePreserveSlot = null; + MesRbFilePreserveDetailEntity newDsRbFilePreserveDetail = null; + + Map preserveSlotMap = preserveSlotList.stream().collect(Collectors.toMap(MesRbFilePreserveSlotEntity::getSlotName, java.util.function.Function.identity())); + List temporaryList = new ArrayList<>(); + for (MesQcProduceRunEntity qcProduceRun : qcProduceRunsList) { + // 根据维护的电子档案的槽号找寻对应生产追溯的的数据 + if (StringUtils.isBlank(qcProduceRun.getWorkSlot())) { + continue; + } + MesRbFilePreserveSlotEntity dsRbFilePreserveSlot = preserveSlotMap.get(qcProduceRun.getWorkSlot().trim()); + + if ("水膜连续性检查".equals(qcProduceRun.getWorkSlot().trim())) { + qcProduceRun.setQualified("1"); + } + + // cdl 20250218 修改分槽同一槽号连续出现 + this.setTemplateData(dsRbFilePreserveSlot, qcProduceRun, newDsRbFilePreserveSlot, dsRbFilePreserveDetailList, + newDsRbFilePreserveDetail, workPlan, temporaryList, prMacToolUse); + } + + // 判断是不是自动线并且有水墨连续性 + MacToolUse macToolUse = macToolUseService.getHangNumIsNull(workPlan.getId()); + if (macToolUse != null && macToolUse.getId() != null) { + List smSlotList = preserveSlotList.stream().filter(i -> i.getSlotName().contains("水膜连续性")).toList(); + for (MesRbFilePreserveSlotEntity dsRbFilePreserveSlot : smSlotList) { + if (dsRbFilePreserveSlot.getSlotName().contains("水膜连续性")) { + MesQcProduceRunEntity qcProduceRun = new MesQcProduceRunEntity(); + qcProduceRun.setQualified("1"); + // cdl 20250218 修改分槽同一槽号连续出现 + this.setTemplateData(dsRbFilePreserveSlot, qcProduceRun, newDsRbFilePreserveSlot, dsRbFilePreserveDetailList, + newDsRbFilePreserveDetail, workPlan, temporaryList, prMacToolUse); + } + } + } + dsRbFilePreserveSlotList.addAll(temporaryList.stream().sorted(Comparator.comparing(ProduceMonitorFileSlotVO::getSlotIndex)).toList()); + } + + private void setTemplateData(MesRbFilePreserveSlotEntity dsRbFilePreserveSlot, MesQcProduceRunEntity qcProduceRun, ProduceMonitorFileSlotVO newDsRbFilePreserveSlot, List dsRbFilePreserveDetailList, MesRbFilePreserveDetailEntity newDsRbFilePreserveDetail, WorkPlan workPlan, List temporaryList, MacToolUse prMacToolUse) { + if (dsRbFilePreserveSlot != null && dsRbFilePreserveSlot.getId() != null) { + // Date转String + + // 装入槽子对应的信息 + newDsRbFilePreserveSlot = new ProduceMonitorFileSlotVO(); + newDsRbFilePreserveSlot.setRfpsType(dsRbFilePreserveSlot.getRfpsType()); + newDsRbFilePreserveSlot.setInsertIndex(dsRbFilePreserveSlot.getInsertIndex()); + newDsRbFilePreserveSlot.setSlotName(dsRbFilePreserveSlot.getSlotName()); + newDsRbFilePreserveSlot.setSlotIndex(dsRbFilePreserveSlot.getSlotIndex()); + + List preserveDetailList = mesRbFilePreserveDetailService.getByRfpsId(dsRbFilePreserveSlot.getId()); + if (!preserveDetailList.isEmpty()) { + dsRbFilePreserveDetailList = new ArrayList<>(); + for (int i = 0; i < preserveDetailList.size(); i++) { + MesRbFilePreserveDetailEntity dsRbFilePreserveDetail = preserveDetailList.get(i); + Short rfpsType = 0; + if (dsRbFilePreserveDetail != null && dsRbFilePreserveDetail.getRfpsId() != null) { + rfpsType = mesRbFilePreserveSlotService.getById(dsRbFilePreserveDetail.getRfpsId()).getRfpsType(); + } + newDsRbFilePreserveDetail = new MesRbFilePreserveDetailEntity(); + newDsRbFilePreserveDetail.setDetailName(dsRbFilePreserveDetail.getDetailName()); + newDsRbFilePreserveDetail.setDetailIndex(dsRbFilePreserveDetail.getDetailIndex()); + // 工艺要求 + newDsRbFilePreserveDetail.setAsk(dsRbFilePreserveDetail.getAsk()); + newDsRbFilePreserveDetail.setParamName(dsRbFilePreserveDetail.getParamName()); + if (i == 0) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getInDate()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getOutDate()); + } + if (rfpsType == 1) { // 模板一 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } + } else if (rfpsType == 2) { // 模板二 + if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } + } else if (rfpsType == 3) { // 模板三 + if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } + } else if (rfpsType == 4) { // 模板四 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } else if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } + } else if (rfpsType == 5 || rfpsType == 22) { // 模板五 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } else if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } + } else if (rfpsType == 6) { // 模板六 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } else if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } else if (i == 5) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix()); + } + } else if (rfpsType == 7) { // 模板七 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } + } else if (rfpsType == 8) { // 模板八 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } + } else if (rfpsType == 9) { // 模板九 + if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } + } else if (rfpsType == 10) { // 模板十 + if (i == 0) { + newDsRbFilePreserveDetail.setQualified(qcProduceRun.getQualified()); + } + } else if (rfpsType == 11) { // 模板十一 + if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } + } else if (rfpsType == 12) { // 模板十二 + if (i == 0) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataOne()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo()); + } else if (i == 2) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataThree()); + } + } else if (rfpsType == 13) { // 模板十三 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } else if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } else if (i == 5) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix()); + } else if (i == 6) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven()); + } else if (i == 7) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight()); + } else if (i == 8) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine()); + } else if (i == 9) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen()); + } + } else if (rfpsType == 14) { // 模板十四 + if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } else if (i == 5) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour()); + } else if (i == 6) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } else if (i == 7) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix()); + } else if (i == 8) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven()); + } else if (i == 9) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight()); + } else if (i == 10) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine()); + } else if (i == 11) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen()); + } + } else if (rfpsType == 15) { // 模板十五 + if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } else if (i == 5) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataFour()); + } else if (i == 6) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } else if (i == 7) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix()); + } else if (i == 8) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven()); + } else if (i == 9) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight()); + } else if (i == 10) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine()); + } else if (i == 11) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen()); + } else if (i == 12) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEleven()); + } else if (i == 13) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwelve()); + } + } else if (rfpsType == 16) { // 模板十六 + if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } else if (i == 5) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour()); + } else if (i == 6) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } else if (i == 7) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix()); + } else if (i == 8) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven()); + } else if (i == 9) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight()); + } else if (i == 10) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine()); + } else if (i == 11) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen()); + } else if (i == 12) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEleven()); + } else if (i == 13) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwelve()); + } else if (i == 14) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThirteen()); + } else if (i == 15) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFourteen()); + } + } else if (rfpsType == 17) { // 模板十七 + if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwo()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } else if (i == 5) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour()); + } else if (i == 6) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } else if (i == 7) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix()); + } + } else if (rfpsType == 18) { // 模板十八 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } + } else if (rfpsType == 19) { // 模板十九 //zxh 20250519 新增模板19和模板20 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } else if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } else if (i == 5) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix()); + } else if (i == 6) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven()); + } else if (i == 7) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataEight()); + } else if (i == 8) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine()); + } else if (i == 9) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTen()); + } else if (i == 10) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEleven()); + } else if (i == 11) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getDataTwelve()); + } + } else if (rfpsType == 20) { // 模板二十 + if (i == 0) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getInDate()); + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getInDate()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getInDate()); + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getInDate()); + } else if (i == 2) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getOutDate()); + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getOutDate()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setRfpdTime(qcProduceRun.getOutDate()); + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getOutDate()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } else if (i == 5) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix()); + } else if (i == 6) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven()); + } else if (i == 7) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight()); + } + } else if (rfpsType == 21) { // 模板十三 + if (i == 0) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataOne()); + } else if (i == 1) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataTwo()); + } else if (i == 2) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataThree()); + } else if (i == 3) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFour()); + } else if (i == 4) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataFive()); + } else if (i == 5) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSix()); + } else if (i == 6) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataSeven()); + } else if (i == 7) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataEight()); + } else if (i == 8) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getDataNine()); + } + } + String detailName = dsRbFilePreserveDetail.getDetailName(); + if (detailName != null) { + if (detailName.contains("温度")) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getTempSlot()); + } else if (detailName.contains("电导率")) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getEleRate()); + } else if (detailName.contains("电流") && !(detailName.contains("壳体") || detailName.contains("插针"))) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getEleStream()); + } else if (detailName.contains("链速")) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getVSpeed()); + } else if (detailName.contains("镍离子")) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getNiValue()); + } else if (detailName.contains("pH值")) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getPhValue()); + } + //zxh 20250604 新增软起时间和工作电压 + else if (detailName.contains("软起时间")) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getSoftWorkTime()); + } else if (detailName.contains("工作电压")) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getVoltage()); + } else if (detailName.contains("初始电压")) { + newDsRbFilePreserveDetail.setParamValue(qcProduceRun.getStartVol()); + } + + } + dsRbFilePreserveDetailList.add(newDsRbFilePreserveDetail); + } + newDsRbFilePreserveSlot.setChildrenList(dsRbFilePreserveDetailList); + } + temporaryList.add(newDsRbFilePreserveSlot); + } } public String prefix(String stringToFix, String fixChar, int targetLen) { int len = stringToFix.length(); - for(int i = 0; i < targetLen - len; i += fixChar.length()) { + for (int i = 0; i < targetLen - len; i += fixChar.length()) { stringToFix = fixChar + stringToFix; } return stringToFix; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java index c3be1c49..2717c19c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java @@ -11,6 +11,7 @@ import org.springblade.desk.quality.excel.ProReTemplateExcel; import org.springblade.desk.quality.pojo.entity.ProReTemplate; import org.springblade.desk.quality.pojo.vo.ProReTemplateVO; +import java.math.BigDecimal; import java.util.List; /** @@ -51,4 +52,6 @@ public interface IProReTemplateService extends EnBaseService { R upgradeVer(Long id); R removeFromDetail(Long tankId); + + List getDataByWcIdAndPpsId(BigDecimal wcId, Long ppsId, Boolean aTrue); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java index 90d8ed63..7944e1e2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java @@ -5,7 +5,9 @@ package org.springblade.desk.quality.service.impl; import cn.hutool.core.bean.BeanUtil; 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 jakarta.annotation.Resource; import lombok.AllArgsConstructor; import lombok.Data; @@ -29,6 +31,7 @@ import org.springblade.system.feign.ISysClient; import org.springblade.system.feign.IUserClient; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.*; /** @@ -132,4 +135,14 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl getDataByWcIdAndPpsId(BigDecimal wcId, Long ppsId, Boolean aTrue) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ProReTemplate.class); + queryWrapper.eq(wcId != null, ProReTemplate::getWcId, wcId); + queryWrapper.eq(ProReTemplate::getPpsId, ppsId); + queryWrapper.eq(ProReTemplate::getLine, aTrue ? "0" : "1"); + queryWrapper.eq(ProReTemplate::getStatus, 2); + return this.list(queryWrapper); + } }