diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/device/IotEquipmentProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/device/IotEquipmentProcessor.java new file mode 100644 index 000000000..a9e006c0f --- /dev/null +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/device/IotEquipmentProcessor.java @@ -0,0 +1,28 @@ +package org.springblade.job.processor.device; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.device.feign.IotEquipmentTaskClient; +import org.springblade.desk.quality.feign.ILquidTankTaskClient; +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; +import tech.powerjob.worker.log.OmsLogger; + +/** + * 同步设备数据任务 + */ +@Component +@Slf4j +public class IotEquipmentProcessor implements BasicProcessor { + + @Resource + private IotEquipmentTaskClient iotEquipmentTaskClient; + + @Override + public ProcessResult process(TaskContext context) throws Exception { + iotEquipmentTaskClient.synchronizeEquipmentTask(); + return new ProcessResult(true); + } +} diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/CycleTestTaskGenOneTimeProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/device/IotFeiBaProcessor.java similarity index 59% rename from blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/CycleTestTaskGenOneTimeProcessor.java rename to blade-ops/blade-job/src/main/java/org/springblade/job/processor/device/IotFeiBaProcessor.java index c243dd3c6..e8f428685 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/CycleTestTaskGenOneTimeProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/device/IotFeiBaProcessor.java @@ -1,25 +1,26 @@ -package org.springblade.job.processor.quality; +package org.springblade.job.processor.device; import jakarta.annotation.Resource; -import lombok.Data; import lombok.extern.slf4j.Slf4j; -import org.springblade.desk.quality.feign.ICycleTestTaskClient; +import org.springblade.desk.device.feign.IotEquipmentTaskClient; 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 CycleTestTaskGenOneTimeProcessor implements BasicProcessor { +public class IotFeiBaProcessor implements BasicProcessor { @Resource - private ICycleTestTaskClient client; + private IotEquipmentTaskClient iotEquipmentTaskClient; @Override public ProcessResult process(TaskContext context) throws Exception { - client.generateOneTime(); + iotEquipmentTaskClient.synchronizeFeibaTask(); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/device/IotRecorderProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/device/IotRecorderProcessor.java new file mode 100644 index 000000000..4999449ce --- /dev/null +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/device/IotRecorderProcessor.java @@ -0,0 +1,26 @@ +package org.springblade.job.processor.device; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.device.feign.IotEquipmentTaskClient; +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 +@Slf4j +public class IotRecorderProcessor implements BasicProcessor { + + @Resource + private IotEquipmentTaskClient iotEquipmentTaskClient; + + @Override + public ProcessResult process(TaskContext context) throws Exception { + iotEquipmentTaskClient.synchronizeRecorderTask(); + return new ProcessResult(true); + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaAviatorConst.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaAviatorConst.java new file mode 100644 index 000000000..9314357a3 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaAviatorConst.java @@ -0,0 +1,17 @@ +package org.springblade.desk.basic.constant; + +public interface FormulaAviatorConst { + + /** + * 添加点 + */ + String ADD = "add"; + /** + * 测量值 + */ + String TEST = "test"; + /** + * 体积 + */ + String VOL = "vol"; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java index 47905fa5f..54be7051b 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java @@ -5,9 +5,9 @@ public interface FormulaConst { /** * */ - final Integer TYPE_1 = 1; + Integer TYPE_1 = 1; /** * */ - final Integer TYPE_2 = 2; + Integer TYPE_2 = 2; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlatingVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlatingVO.java index e7cb10ea2..ab4cfbd65 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlatingVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlatingVO.java @@ -3,6 +3,7 @@ */ package org.springblade.desk.basic.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.desk.basic.pojo.entity.Plating; @@ -21,4 +22,14 @@ public class PlatingVO extends Plating { @Serial private static final long serialVersionUID = 1L; + /** + * [镀种分类]Name + */ + @Schema(description = "[镀种分类]Name") + private Long bcName; + /** + * [镀种小类]Name + */ + @Schema(description = "[镀种小类]Name") + private Long subClassName; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/feign/IotEquipmentTaskClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/feign/IotEquipmentTaskClient.java new file mode 100644 index 000000000..a7d2c3060 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/feign/IotEquipmentTaskClient.java @@ -0,0 +1,42 @@ +package org.springblade.desk.device.feign; + +import org.springblade.core.launch.constant.AppConstant; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +@FeignClient( + value = AppConstant.APPLICATION_DESK_NAME +) +/** + * 同步IOT设备相关信息 + */ +public interface IotEquipmentTaskClient { + + String API_PREFIX = "/feign/device/iot-task"; + + String SYNCHRONIZE_EQUIPMENT_TASK = API_PREFIX + "/synchronize-equipment-task"; + + String SYNCHRONIZE_FEIBA_TASK = API_PREFIX + "/synchronize-feiba-task"; + + String SYNCHRONIZE_RECORDER_TASK = API_PREFIX + "/synchronize-recorder-task"; + + + /** + * 同步设备数据 + */ + @GetMapping(SYNCHRONIZE_EQUIPMENT_TASK) + void synchronizeEquipmentTask(); + + /** + * 同步飞靶数据 + */ + @GetMapping(SYNCHRONIZE_FEIBA_TASK) + void synchronizeFeibaTask(); + + /** + * 同步记录仪记录数据 + */ + @GetMapping(SYNCHRONIZE_RECORDER_TASK) + void synchronizeRecorderTask(); + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/RecorderEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/RecorderEntity.java index 960aa9664..31977e2f6 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/RecorderEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/RecorderEntity.java @@ -31,7 +31,7 @@ public class RecorderEntity extends BaseEntity { * 记录仪 */ @Schema(description = "记录仪") - private BigDecimal recorder; + private String recorder; /** * 记录时间 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/InspectionTaskConst.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/InspectionTaskConst.java index b26d920f2..d1d76b9ba 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/InspectionTaskConst.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/InspectionTaskConst.java @@ -6,7 +6,6 @@ public interface InspectionTaskConst { * 热表 */ Integer FROM_TYPE_RB = 1; - /** * 烧结 */ @@ -28,4 +27,9 @@ public interface InspectionTaskConst { * NA */ Integer CHECK_RESULT_NA = 3; + + /** + * 烧结包装防护 + */ + String PROCESS_NAME_SJBZFH = "烧结包装防护"; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ICycleTestTaskClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ICycleTestTaskClient.java index b5bd2480d..9e76d31bc 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ICycleTestTaskClient.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ICycleTestTaskClient.java @@ -13,8 +13,6 @@ public interface ICycleTestTaskClient { String GENERATE_AUTO = API_PREFIX + "/generate-auto"; - String GENERATE_ONE_TIME = API_PREFIX + "/generate-one-time"; - String CHECK_REMIND = API_PREFIX + "/check-redmind"; String CHECK_OUT = API_PREFIX + "/check-out"; @@ -22,9 +20,6 @@ public interface ICycleTestTaskClient { @GetMapping(GENERATE_AUTO) void generateAuto(); - @GetMapping(GENERATE_ONE_TIME) - void generateOneTime(); - @GetMapping(CHECK_REMIND) void checkRemind(); diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ILquidTankTaskClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ILquidTankTaskClient.java index a27fb4a31..6528587e2 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ILquidTankTaskClient.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ILquidTankTaskClient.java @@ -13,13 +13,18 @@ public interface ILquidTankTaskClient { String API_PREFIX = "/feign/client/qa/lquid-tank-task"; - String GENERATE = API_PREFIX + "/generate"; + String GENERATE_AUTO = API_PREFIX + "/generate-auto"; - String TIMEOUT = API_PREFIX + "/timeout"; + String CHECK_REMIND = API_PREFIX + "/check-redmind"; - @GetMapping(GENERATE) - public List generate(); + String CHECK_OUT = API_PREFIX + "/check-out"; - @GetMapping(TIMEOUT) - public List timeout(); + @GetMapping(GENERATE_AUTO) + void generateAuto(); + + @GetMapping(CHECK_REMIND) + void checkRemind(); + + @GetMapping(CHECK_OUT) + void checkOut(); } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/CycleTestTask.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/CycleTestTask.java index 3fa014488..e0d08c2b7 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/CycleTestTask.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/CycleTestTask.java @@ -309,4 +309,14 @@ public class CycleTestTask extends BaseEntity { */ @Schema(description = "超期原因") private String reasonForOut; + /** + * 临期天数 + */ + @Schema(description = "临期天数") + private Integer dayToPlanedFinish; + /** + * 超期天数 + */ + @Schema(description = "超期天数") + private Integer dayToOut; } 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 3d41a6902..9505fba68 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 @@ -167,6 +167,10 @@ public class InspectionTask extends BaseEntity { * 接收日期 */ public static final String COL_RECEIVE_DATE = "RECEIVE_DATE"; + /** + * [工序]名称 + */ + public static final String COL_PROCESS_NAME = "PROCESS_NAME"; /** * [检验任务]编码 @@ -343,4 +347,9 @@ public class InspectionTask extends BaseEntity { */ @Schema(description = "接收日期") private LocalDateTime receiveDate; + /** + * 工序名称 + */ + @Schema(description = "工序名称") + private String processName; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/CycleTestSearch.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/CycleTestSearch.java new file mode 100644 index 000000000..150c0a082 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/CycleTestSearch.java @@ -0,0 +1,14 @@ +package org.springblade.desk.quality.pojo.request; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springblade.desk.quality.pojo.entity.CycleTest; +import org.springblade.desk.quality.pojo.vo.CycleTestVO; + +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class CycleTestSearch extends CycleTestVO { + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/CycleTestTaskSearch.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/CycleTestTaskSearch.java index 697fe9127..3cd52023a 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/CycleTestTaskSearch.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/CycleTestTaskSearch.java @@ -30,7 +30,6 @@ public class CycleTestTaskSearch extends CycleTestTask { private Date createTimeEnd; @Schema(description = "状态数组") private List statusList; - /** * [周期试验项目]名称 */ @@ -63,6 +62,18 @@ public class CycleTestTaskSearch extends CycleTestTask { @JsonDeserialize(using = LocalDateTimeEndOfDayDeserializer.class) @Schema(description = "一次性任务生成日期-结束") private LocalDateTime oneTimeGenDateEnd; + /** + * 一次性任务生成日期-开始 + */ + @JsonDeserialize(using = DateBeginOfDayDeserializer.class) + @Schema(description = "生成日期-开始") + private Date genDatetimeStart; + /** + * 一次性任务生成日期-结束 + */ + @JsonDeserialize(using = DateEndOfDayDeserializer.class) + @Schema(description = "生成日期-结束") + private Date genDatetimeEnd; /** * 下发时间-开始 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/JobExt.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/JobExt.java index 1c9e3110f..198fba6a3 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/JobExt.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/JobExt.java @@ -2,17 +2,28 @@ package org.springblade.desk.quality.pojo.request; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.ToString; @Data @EqualsAndHashCode +@ToString public class JobExt { + /** + * 周 + */ public static final Integer WEEK = 1; - + /** + * 月 + */ public static final Integer MONTH = 2; - + /** + * 年 + */ public static final Integer YEAR = 3; - + /** + * 自定义CRON + */ public static final Integer CUSTOM = 4; /** diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestTaskVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestTaskVO.java index 1eb91fe6c..013bd2559 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestTaskVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestTaskVO.java @@ -3,10 +3,12 @@ */ package org.springblade.desk.quality.pojo.vo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.desk.quality.pojo.entity.CycleTestTask; +import org.springblade.desk.util.json.serializer.IntegerAllToStringSerializer; import java.io.Serial; import java.time.LocalDateTime; @@ -61,8 +63,9 @@ public class CycleTestTaskVO extends CycleTestTask { /** * 临期天数 */ + @JsonSerialize(using = IntegerAllToStringSerializer.class) @Schema(description = "临期天数") - private String countDayToPlanedFinish; + private Integer countDayToPlanedFinish; /** * 填报[附件]附件地址 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestVO.java index 08829e4e9..1bd0587ea 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestVO.java @@ -6,6 +6,7 @@ package org.springblade.desk.quality.pojo.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springblade.desk.quality.pojo.entity.CycleTest; import java.io.Serial; @@ -18,61 +19,34 @@ import java.io.Serial; */ @Data @EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) public class CycleTestVO extends CycleTest { @Serial private static final long serialVersionUID = 1L; - /** - * [周期试验项目]名称 - */ @Schema(description = "[周期试验项目]名称") private String cycleTestItemName; - /** - * [周期试验项目]试验条件 - */ @Schema(description = "[周期试验项目]试验条件") private String cycleTestItemCondition; - /** - * [周期试验标准]id - */ @Schema(description = "[周期试验标准]id") private Long cycleTestStandardId; - /** - * [周期试验标准]名称 - */ @Schema(description = "[周期试验标准]名称") private String cycleTestStandardName; - /** - * [周期试验标准][附件]id - */ @Schema(description = "[周期试验标准][附件]id") private Long cycleTestStandardAttachId; - /** - * 工艺员[用户]姓名 - */ @Schema(description = "工艺员[用户]姓名") private String processUserName; - /** - * 试验技术员[用户]姓名 - */ @Schema(description = "试验技术员[用户]姓名") private String testUserName; - /** - * 更新[用户]姓名 - */ @Schema(description = "更新[用户]姓名") private String updateUserName; - /** - * 试验件类型 名称 - */ @Schema(description = "试验件类型 名称") private String testTypeName; - /** - * [周期试验标准] - */ - @Schema(description = "standard") + @Schema(description = "[周期试验标准]") private CycleTestStandardVO standard; @Schema(description = "[镀种]多个名称") private String plateNames; + @Schema(description = "试验周期") + private String jobExtShowText; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskDetailVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskDetailVO.java index ac62b12b9..1c281589f 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskDetailVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskDetailVO.java @@ -28,12 +28,6 @@ public class InspectionTaskDetailVO extends InspectionTask { @Serial private static final long serialVersionUID = 1L; - /** - * todo: - */ - @Schema(description = "工序名称") - private String processName = "工序名称A"; - private InspectionTaskListVO orderInfo; private List remindMsgList; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankReportDetailVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankReportDetailVO.java new file mode 100644 index 000000000..e92c6602d --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankReportDetailVO.java @@ -0,0 +1,31 @@ +/** + * Author: Tom Shuo + */ +package org.springblade.desk.quality.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.desk.quality.pojo.entity.LiquidTankReport; +import org.springblade.desk.quality.pojo.entity.LiquidTankTaskCopy; + +import java.io.Serial; +import java.util.List; + +/** + * [槽液报告] 视图实体类 + * + * @author Tom Shuo + * @since 2025-12-18 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class LiquidTankReportDetailVO extends LiquidTankReport { + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "维护人") + private String updateUserRealName; + @Schema(description = "复制槽液任务列表") + private List copyList; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankReportVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankReportVO.java index 997e435e9..8dc4b533f 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankReportVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankReportVO.java @@ -9,6 +9,7 @@ import lombok.EqualsAndHashCode; import org.springblade.desk.quality.pojo.entity.LiquidTankReport; import java.io.Serial; +import java.util.List; /** * [槽液报告] 视图实体类 @@ -19,9 +20,9 @@ import java.io.Serial; @Data @EqualsAndHashCode(callSuper = true) public class LiquidTankReportVO extends LiquidTankReport { - @Serial - private static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; - @Schema(description = "维护人") - private String updateUserRealName; + @Schema(description = "维护人") + private String updateUserRealName; } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPacturnrecordClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPacturnrecordClient.java index d42e3096c..ee3c411ad 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPacturnrecordClient.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPacturnrecordClient.java @@ -1,28 +1,3 @@ -/** - * 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.erpdata.feign; diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPartoplinkClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPartoplinkClient.java index 28f7a6126..56ea30c25 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPartoplinkClient.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPartoplinkClient.java @@ -1,28 +1,3 @@ -/** - * 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.erpdata.feign; diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPurtosoClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPurtosoClient.java index 0ab9193aa..b212fcd5b 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPurtosoClient.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPurtosoClient.java @@ -1,28 +1,3 @@ -/** - * 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.erpdata.feign; diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbWoClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbWoClient.java index b096effd1..ba8a9a7ba 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbWoClient.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbWoClient.java @@ -1,35 +1,8 @@ -/** - * 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.erpdata.feign; -import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.launch.constant.AppConstant; import org.springblade.core.tool.api.R; -import org.springblade.erpdata.pojo.dto.AllocationDTO; import org.springblade.erpdata.pojo.dto.view.MesRbWo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Prtmsg.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Prtmsg.java index e916b0917..0e7b018d5 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Prtmsg.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Prtmsg.java @@ -1,11 +1,75 @@ package org.springblade.erpdata.pojo.dto.table; +import lombok.Data; + /** * 对应ERP中表 t_prtmsg * * @author lqk * @date 2026-01-16 17:32 */ +@Data public class Prtmsg { + private String prtarea; //面积 + + private String prtsize; //尺寸 + + private String prtmeterial; //材料 + + private String remark; //备注 + + private String hangflag; //是否挂件0--否,1--是 + + private String thofpla; //插针面积 + + private String kdofplat; //镀种 + + private String filecode; //文件号 + + private String excsttdate; //下发日期 + + private String excenddate; //有效截至日期 + + private String rigidity; //有效日期 + + private String dorules; //标记要求 + + private String cfmflag; //审核标记 0 未审核,1已审核 + + private String cmsign; //标记要求 + + private String cfmname; //审核人 + + private String cfmdate; //审核日期 + + private String chgname; //更改人 + + private String chgdate; //更改时间 + + private String zlxx; //质量信息 + + private String seqrunhr; //工时 + + private String mtntype; //维护类型:1-正常,2-虚拟零件 + + private String height; //厚度 + + private String sdnumber; //色带 + + private String sbnumber; //色标 + + private String ispaint; //是否油漆0,否,1,是 + + private String jtnumber; //箭头 + + private String mtlspcf; //规格 + + private String istrialkey; //是否试键位:0,否;1,是 + + private String iscs; //是否吹沙:0,否;1,是 + + private String seqrunhrsj; //烧结装配工时 + + private String isyz; //是否印字:0,否;1,是 } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Wo.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Wo.java index 85cf7645b..a1663428b 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Wo.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Wo.java @@ -1,10 +1,173 @@ package org.springblade.erpdata.pojo.dto.table; +import lombok.Data; + /** * 对应ERP中表 t_wo * * @author lqk * @date 2026-01-16 17:32 */ +@Data public class Wo { + + private String wono; //工作订单 + + private String splcode; //批次号 + + private String plnsign; //计划标记 + + private String qstsign; //实际质量等级 + + private String invadjcode; //入库单号 + + private String prtmdept; //主制车间号 + + private String prtudept; //使用车间号 + + private String prtno; //物料号 + + private String pkno; //配料单号 + + private String woreqdat; //wo需求日期 + + private String wopordat; //wo下达日期 + + private String woporqty; //wo需求数量 + + private String wototqty; //累计完成数量 + + private String pkflag; //生成配料单标志: ''0'' ''配料 , ''1''未配料 + + private String wosttdat; //wo实际开工日期 + + private String worelstat; //wo下达状态: ''0'' 未下达 ''1'' 已正常下达 + + private String woexcstat; //wo执行状态 ''0'' 执行中,''1''正常完成,''2''欠交完成,''3''超量完成,''4''未执行,''5''脱期完成 + + private String woclsdat; //wo关闭日期 + + private String wodueqty; //wo交付数量 + + private String woboqty; //毛需求数量 + + private String prtltstat; //提前期状态码: ''0''未检查提前期,''1''满足,''2''不满足 + + private String sprtstat; //子件可用状态码, ''0''未检查,''1''满足,''2''不满足 + + private String wotosoil; //车间生成订单so标志: ''0'' 未生成,''1''已生成 + + private String woenddat; //wo实际完工日期 + + private String mono; //制造订单号 + + private String wotopur; //wo生成采购需求计划标记 ''0'' 未生成,''1'' 已生成 + + private String wotoschdl; //wo生成工序作业单标记 ''0'' 未生成,''1''已生成 + + private String schdrelstat; //工序作业单下达标记 ''0'' 未下达,''1'' 已下达 + + private String schdrelname; //工序作业单下达标记 + + private String schdreldate; //工序作业单下达日期 + + private String itemno; //项目代码 + + private String prtlotno; //等级 + + private String prt_mask; //外协分派标记,0未分派1未分完2已分完 + + private String invstat; //入库状态 ''0''未入库 ''1''已入库(市场使用)2a毛坯状态1不需要毛坯 + + private String prtwkccode; //工作中心代码 + + private String assino; //工作定单满足计算标记,0-未计算,1-已计算 + + private String remark; //备注 + + private String mtltmrk; //型号 + + private String planner; //计划员码 + + private String chksign; //审核标记 ''0''未审核,''1'' 正式,‘2’临时,‘3’待定,‘4’无图,‘5’有存档工艺,无需晒图 ,‘6’有存档工艺,需晒图 。‘7’需要输入erp信息 ,‘8’生产计划有误 ,‘9’有正式需下临时,不晒图 + + private String chkman; //审核人 + + private String chkdate; //审核日期 + + private String woclsman; //工作订单完工人 + + private String chqty; //累计领取数 + + private String prtreqflag; //物料需求上报状态 + + private String wopowerstatus; //外协计划能力平衡:0未平衡,1正常下达,2超量未下达,3超量下达 + + private String powerremark; //外协能力平衡结果 + + private String lackreason; //清欠原因分析,0-尚待确定,1-技术问题,2-报废返修,3-物资采购,4-成件采购,5-生产组织 + + private String planbedat; //预计开工日期:在下达工作订单时计算,约定‘1111’年份未不满足开工条件 + + private String planendat; //预计完工日期:在工序作业单生成时计算 + + private String plndept; //计划部门 + + private String usedept; //使用部门 + + private String woaddqty; //加工余量 + + private String woplanner; //调度员 + + private String plnarea; //计划加工厂区(0--未定义 1--新区 2--本部) + + private String wxduedat; //外协加工实际完成日期 + + private String plntype; //计划类型 + + private String shplnflag; //送货计划标记 + + private String ycckflag; //异常审核标记1、无需审核2、需要审核未审核3、需要审核已审核 + + private String ycckman; //异常审核人 + + private String ycckdat; //异常审核日期 + + private String shdate; //送货时间 + + private String cfmflag; //机加分厂团队确认标识 0--未确认 1--已确认 + + private String pkfxflag; //配套分批放行标识 0-未放行 1-放行 + + private String wxplanner; //外协计划员 + + private String wxrecdat; //''生产订单接收日期'' + + private String cancelqty; //返修报废/取消执行数 + + private String cfmdate; //机加分厂记录工作订单分派日期 + + private String etlid; //guid,etl使用的唯一性索引列 + + private String wochkqty; //抽检数 + + private String id; //新系统同步id + + private String dataflag; //新老系统数据标识: 0-老系统,1-新系统 + + private String specreq; //特殊要求 + + private String wostopstat; //暂停标记:1-暂停,,2-冻结 + + private String wostopdat; //暂停日期 + + private String wocleanremark; //计划清理备注 + + private String wocleanmtnman; //计划清理备注维护人 + + private String wocleanmtndate; //计划清理备注维护时间 + + private String cuscode; //客户代码 + + private String prtmdeptbranch; //主制车间号对应二级中心 } diff --git a/blade-service/blade-desk/pom.xml b/blade-service/blade-desk/pom.xml index 1c8f7f5de..1c079e180 100644 --- a/blade-service/blade-desk/pom.xml +++ b/blade-service/blade-desk/pom.xml @@ -110,6 +110,14 @@ org.springblade blade-scheduling-api + + + + + com.googlecode.aviator + aviator + 5.4.3 + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/config/AviatorConfig.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/config/AviatorConfig.java new file mode 100644 index 000000000..4f1ac7626 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/config/AviatorConfig.java @@ -0,0 +1,29 @@ +package org.springblade.desk.basic.aviator.config; + +import com.googlecode.aviator.AviatorEvaluator; +import com.googlecode.aviator.AviatorEvaluatorInstance; +import com.googlecode.aviator.Options; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class AviatorConfig { + + @Bean + public AviatorEvaluatorInstance aviatorEvaluatorInstance() { + AviatorEvaluatorInstance instance = AviatorEvaluator.newInstance(); + // 核心配置项 + instance.setOption(Options.USE_USER_ENV_AS_TOP_ENV_DIRECTLY, true); // 环境变量透传 + // instance.setOption(Options.MAX_CACHE_SIZE, 2000); // 表达式缓存大小 + instance.setOption(Options.TRACE_EVAL, false); // 生产环境关闭追踪 + + // JDK17+ 优化配置 + instance.setOption(Options.OPTIMIZE_LEVEL, AviatorEvaluator.EVAL); // 优化级别 + // 开启表达式缓存,提升性能 + instance.setCachedExpressionByDefault(true); + // 注册自定义函数(如有) + // instance.addFunction(new YourCustomFunction()); + return instance; + } +} + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/func/CustomFunctionRegistry.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/func/CustomFunctionRegistry.java new file mode 100644 index 000000000..a7f323eef --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/func/CustomFunctionRegistry.java @@ -0,0 +1,46 @@ +package org.springblade.desk.basic.aviator.func; + +import com.googlecode.aviator.AviatorEvaluatorInstance; +import com.googlecode.aviator.runtime.function.AbstractFunction; +import com.googlecode.aviator.runtime.type.AviatorObject; +import com.googlecode.aviator.runtime.type.AviatorString; +import jakarta.annotation.Resource; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@ToString(callSuper = false) +@Slf4j +public class CustomFunctionRegistry implements InitializingBean { + + @Resource + private AviatorEvaluatorInstance aviatorEvaluator; + + @Override + public void afterPropertiesSet() throws Exception { + // 注册自定义函数 + // 此时 aviatorEvaluator 已被注入 + aviatorEvaluator.addFunction(new AbstractFunction() { + @Override + public String getName() { + return "myCustomFunc"; + } + + @Override + public AviatorObject call(Map env, AviatorObject arg1) { + String value = (String) arg1.getValue(env); + return new AviatorString("自定义结果: " + value); + } + }); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/service/AviatorService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/service/AviatorService.java new file mode 100644 index 000000000..38a5aef2e --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/service/AviatorService.java @@ -0,0 +1,32 @@ +package org.springblade.desk.basic.aviator.service; + +import com.googlecode.aviator.AviatorEvaluatorInstance; +import jakarta.annotation.Resource; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@ToString(callSuper = false) +@Slf4j +public class AviatorService { + + @Resource + private AviatorEvaluatorInstance aviatorEvaluator; + + public Object evaluateExpression(String expression, Map variables) { + try { + return aviatorEvaluator.execute(expression, variables); + } catch (Exception e) { + throw new RuntimeException("表达式执行失败: " + e.getMessage(), e); + } + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/AviatorController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/AviatorController.java new file mode 100644 index 000000000..4e2e80235 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/AviatorController.java @@ -0,0 +1,60 @@ +package org.springblade.desk.basic.controller; + +import com.googlecode.aviator.AviatorEvaluatorInstance; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.basic.aviator.service.AviatorService; +import org.springblade.desk.basic.constant.BAModuleConst; +import org.springframework.web.bind.annotation.*; + +import java.util.Collections; +import java.util.Map; + +@RestController +@RequestMapping(BAModuleConst.CONTROLLER_PREFIX + "/Aviator") +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@Slf4j +@Tag(name = "Aviator", description = "Aviator接口") +public class AviatorController { + + @Resource + private AviatorService aviatorService; + @Resource + private AviatorEvaluatorInstance aviatorEvaluator; + + /** + * { + * "expression": "a + b * (c - d)", + * "variables": { + * "a": 5, + * "b": 2, + * "c": 10, + * "d": 3 + * } + * } + * + * @param request + * @return + */ + @PostMapping("/evaluate") + public Object evaluate(@RequestBody Map request) { + String expression = (String) request.get("expression"); + Map variables = (Map) request.get("variables"); + return aviatorService.evaluateExpression(expression, variables); + } + + @GetMapping("/customFunc") + public Object customFunc() { + // 直接使用注册的自定义函数 + return aviatorEvaluator.execute( + "myCustomFunc('Hello')", + Collections.emptyMap() + ); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BasicClazzController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BasicClazzController.java index d13d0e088..4cbfed1fd 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BasicClazzController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BasicClazzController.java @@ -18,6 +18,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.CommonConstant; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; @@ -116,6 +117,7 @@ public class BasicClazzController extends BladeController { public R> listForSelectPlatingAssort() { LambdaQueryWrapper qw = Wrappers.lambdaQuery(); qw.eq(BasicClazz::getBizType, BasicClazzConst.TYPE_PLATING_ASSORT); + qw.eq(BasicClazz::getIsDeleted, CommonConstant.DELETE_FALSE); List list = service.list(qw); List listVO = BasicClazzWrapper.build().listVO(list); return R.data(listVO); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/PlatingController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/PlatingController.java index a2a396099..690d7e2ce 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/PlatingController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/PlatingController.java @@ -35,7 +35,6 @@ import org.springblade.desk.basic.pojo.vo.PlatingVO; import org.springblade.desk.basic.service.IPlatingService; import org.springblade.desk.basic.util.ExcelExtUtil; import org.springblade.desk.basic.wrapper.PlatingWrapper; -import org.springblade.desk.quality.pojo.entity.ReviewDuty; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -46,7 +45,7 @@ import java.util.stream.Collectors; /** * [镀种] 控制器 - * + * mes v1: bs_plating * @author Tom Shuo * @since 2026-01-05 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/ProdMarkController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/ProdMarkController.java index 8b5289abd..e2af92502 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/ProdMarkController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/ProdMarkController.java @@ -41,6 +41,7 @@ import java.util.stream.Collectors; /** * [生产标识] 控制器 + * mes v1: * * @author Tom Shuo * @since 2025-12-22 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/RelTeamSetUserController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/RelTeamSetUserController.java index 1fdbf61ad..e89a38cab 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/RelTeamSetUserController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/RelTeamSetUserController.java @@ -41,6 +41,7 @@ import java.util.stream.Collectors; /** * [班组用户关联] 控制器 + * mes v1: 二期新加 * * @author Tom Shuo * @since 2026-01-13 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/TeamSetController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/TeamSetController.java index ecf254cb6..9a3c8cd05 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/TeamSetController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/TeamSetController.java @@ -40,6 +40,7 @@ import java.util.Map; /** * [班组] 控制器 * mes v1: bs_team_set + * * @author Tom Shuo * @since 2025-12-16 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkCenterController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkCenterController.java index c8a1030a2..353a81875 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkCenterController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkCenterController.java @@ -40,6 +40,7 @@ import java.util.Map; /** * [作业中心] 控制器 * mes v1: bs_work_center + * * @author Tom Shuo * @since 2025-12-16 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkTankController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkTankController.java index c8a0ccd5b..e093a0859 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkTankController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkTankController.java @@ -40,6 +40,7 @@ import java.util.Map; /** * [作业槽] 控制器 * mes v1: + * * @author Tom Shuo * @since 2025-12-16 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/EquipmentController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/EquipmentController.java index f2c0d3383..dbf95f07a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/EquipmentController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/EquipmentController.java @@ -186,18 +186,18 @@ public class EquipmentController extends BladeController { ExcelUtil.export(response, "设备信息表数据" + DateUtil.time(), "设备信息表数据表", list, EquipmentExcel.class); } - @PostConstruct // 项目启动后立即执行一次 - public void init() { - regularlyUpdated(); - } - - /** - * 同步IOT设备数据 - * TODO 以后需要交由PowerJob服务统一管理 - */ - @Scheduled(cron = "0 0 0/23 * * ?") // 每23小时执行一次 - public void regularlyUpdated() { - equipmentService.regularlyUpdated(); - } +// @PostConstruct // 项目启动后立即执行一次 +// public void init() { +// regularlyUpdated(); +// } +// +// /** +// * 同步IOT设备数据 +// * TODO 以后需要交由PowerJob服务统一管理 +// */ +// @Scheduled(cron = "0 0 0/23 * * ?") // 每23小时执行一次 +// public void regularlyUpdated() { +// equipmentService.regularlyUpdated(); +// } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/FeiBaSetController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/FeiBaSetController.java index d552bdf8d..a6c6f38fc 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/FeiBaSetController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/FeiBaSetController.java @@ -149,17 +149,17 @@ public class FeiBaSetController extends BladeController { ExcelUtil.export(response, "飞靶设置数据" + DateUtil.time(), "飞靶设置数据表", list, FeiBaSetExcel.class); } - @PostConstruct // 项目启动后立即执行一次 - public void init() { - regularlyUpdated(); - } - - /** - * 同步IOT飞靶数据 - * TODO 以后需要交由PowerJob服务统一管理 - */ - @Scheduled(cron = "0 0 0/23 * * ?") // 每23小时执行一次 - public void regularlyUpdated() { - feiBaSetService.regularlyUpdated(); - } +// @PostConstruct // 项目启动后立即执行一次 +// public void init() { +// regularlyUpdated(); +// } +// +// /** +// * 同步IOT飞靶数据 +// * TODO 以后需要交由PowerJob服务统一管理 +// */ +// @Scheduled(cron = "0 0 0/23 * * ?") // 每23小时执行一次 +// public void regularlyUpdated() { +// feiBaSetService.regularlyUpdated(); +// } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/MeasurementRecordsController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/MeasurementRecordsController.java index 98af78a22..796569762 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/MeasurementRecordsController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/MeasurementRecordsController.java @@ -45,8 +45,8 @@ public class MeasurementRecordsController extends BladeController { @GetMapping("/page") @ApiOperationSupport(order = 3) @Operation(summary = "分页", description = "") - public R> page(@RequestParam("cmType") Integer cmType, Query query) { - IPage pages = iMeasurementRecordsService.selectMeasurementRecordsPage(Condition.getPage(query), cmType); + public R> page(@RequestParam("cmType") Integer cmType, Query query) { + IPage pages = iMeasurementRecordsService.selectMeasurementRecordsPage(Condition.getPage(query), cmType); return R.data(pages); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/RecorderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/RecorderController.java index 60e12f213..45caca8af 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/RecorderController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/RecorderController.java @@ -1,9 +1,13 @@ package org.springblade.desk.device.controller; +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.validation.Valid; @@ -16,6 +20,7 @@ import org.springblade.core.tool.utils.Func; import org.springblade.desk.device.pojo.excel.RecorderExcel; import org.springblade.desk.device.pojo.request.RecorderQuery; import org.springblade.desk.device.pojo.vo.LoadRecorderVO; +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; @@ -64,9 +69,12 @@ public class RecorderController extends BladeController { @GetMapping("/page") @ApiOperationSupport(order = 3) @Operation(summary = "分页", description = "传入recorder") + @Parameters({ + @Parameter(name = "recorder", description = "记录仪编码", in = ParameterIn.QUERY, schema = @Schema(type = "string")), + }) public R> page(RecorderVO recorder, Query query) { - IPage pages = recorderService.selectRecorderPage(Condition.getPage(query), recorder); - return R.data(pages); + IPage pages = recorderService.selectRecorderPage(Condition.getPage(query), recorder); + return R.data(RecorderWrapper.build().pageVO(pages)); } /** @@ -137,4 +145,18 @@ public class RecorderController extends BladeController { ExcelUtil.export(response, "记录仪记录数据" + DateUtil.time(), "记录仪记录数据表", list, RecorderExcel.class); } +// @PostConstruct // 项目启动后立即执行一次 +// public void init() { +// regularlyUpdated(); +// } +// +// /** +// * 同步记录仪数据 +// * TODO 以后需要交由PowerJob服务统一管理 +// */ +// @Scheduled(cron = "0 0 0/23 * * ?") // 每23小时执行一次 +// public void regularlyUpdated() { +// recorderService.regularlyUpdated(); +// } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/feign/IotEquipmentTaskClientImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/feign/IotEquipmentTaskClientImpl.java new file mode 100644 index 000000000..cd28913e1 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/feign/IotEquipmentTaskClientImpl.java @@ -0,0 +1,39 @@ +package org.springblade.desk.device.feign; + +import io.swagger.v3.oas.annotations.Hidden; +import jakarta.annotation.Resource; +import org.springblade.desk.device.service.IEquipmentService; +import org.springblade.desk.device.service.IFeiBaSetService; +import org.springblade.desk.device.service.IRecorderService; +import org.springblade.desk.quality.feign.IIotThicknessClient; +import org.springblade.desk.quality.service.IotThicknessService2; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Hidden +public class IotEquipmentTaskClientImpl implements IotEquipmentTaskClient { + + @Resource + private IEquipmentService equipmentService; + + @Resource + private IFeiBaSetService feiBaSetService; + + @Resource + private IRecorderService recorderService; + + @Override + public void synchronizeEquipmentTask() { + equipmentService.regularlyUpdated(); + } + + @Override + public void synchronizeFeibaTask() { + feiBaSetService.regularlyUpdated(); + } + + @Override + public void synchronizeRecorderTask() { + recorderService.regularlyUpdated(); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IMeasurementRecordsService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IMeasurementRecordsService.java index fdc0dc834..9d805131e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IMeasurementRecordsService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IMeasurementRecordsService.java @@ -20,7 +20,7 @@ public interface IMeasurementRecordsService { * @param cmType 查询参数 * @return IPage */ - IPage selectMeasurementRecordsPage(IPage page, Integer cmType); + IPage selectMeasurementRecordsPage(IPage page, Integer cmType); // /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IRecorderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IRecorderService.java index e24a80b3e..9ad56ce9a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IRecorderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IRecorderService.java @@ -25,7 +25,7 @@ public interface IRecorderService extends BaseService { * @param recorder 查询参数 * @return IPage */ - IPage selectRecorderPage(IPage page, RecorderVO recorder); + IPage selectRecorderPage(IPage page, RecorderVO recorder); /** @@ -43,4 +43,9 @@ public interface IRecorderService extends BaseService { * @return */ LoadRecorderVO loadCalRecorder(RecorderQuery recorderQuery); + + /** + * 同步记录仪数据 + */ + void regularlyUpdated(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/FeiBaSetServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/FeiBaSetServiceImpl.java index f282fe5ed..9ce402d36 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/FeiBaSetServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/FeiBaSetServiceImpl.java @@ -104,7 +104,7 @@ public class FeiBaSetServiceImpl extends BaseServiceImpl jsonList = JSONArray.parseArray(result.getJSONArray("result").toJSONString(), JSONObject.class); + List jsonList = JSONArray.parseArray(result.getJSONArray("data").toJSONString(), JSONObject.class); if (jsonList != null && jsonList.size() > 0) { //接口返回飞靶code即为本系统code Map equCodeObjectMap = jsonList.stream().collect(Collectors.toMap( diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/IMeasurementRecordsServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/IMeasurementRecordsServiceImpl.java index bf57fd98a..a0fac77a5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/IMeasurementRecordsServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/IMeasurementRecordsServiceImpl.java @@ -17,6 +17,7 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Duration; +import java.util.ArrayList; import java.util.List; @Slf4j @@ -32,7 +33,7 @@ public class IMeasurementRecordsServiceImpl implements IMeasurementRecordsServic private String limsUrl; @Override - public IPage selectMeasurementRecordsPage(IPage page, Integer cmType) { + public IPage selectMeasurementRecordsPage(IPage page, Integer cmType) { // 构建请求体JSON JSONObject requestBody = buildRequestBody(page, cmType); @@ -55,6 +56,7 @@ public class IMeasurementRecordsServiceImpl implements IMeasurementRecordsServic } catch (Exception e) { log.error("获取计量记录记录数据接口调用失败: {}", e.getMessage(), e); + List entityList1 = new ArrayList<>(); return page.setRecords(List.of()); // 返回空列表而不是null } } @@ -62,7 +64,7 @@ public class IMeasurementRecordsServiceImpl implements IMeasurementRecordsServic /** * 构建请求体 */ - private JSONObject buildRequestBody(IPage page, Integer cmType) { + private JSONObject buildRequestBody(IPage page, Integer cmType) { JSONObject requestBody = new JSONObject(); requestBody.put("currPage", page.getCurrent()); requestBody.put("pageSize", page.getSize()); @@ -77,12 +79,224 @@ public class IMeasurementRecordsServiceImpl implements IMeasurementRecordsServic /** * 处理HTTP响应 */ - private IPage processResponse(HttpResponse response, IPage page) { + private IPage processResponse(HttpResponse response, IPage page) { if (response.statusCode() != 200) { log.error("HTTP请求失败,状态码: {}", response.statusCode()); throw new RuntimeException("HTTP请求失败,状态码: " + response.statusCode()); } + /*String responseBody = "{\n" + + " \"success\": true,\n" + + " \"rows\": [\n" + + " {\n" + + " \"alarmState\": 1,\n" + + " \"assetsCode\": \"LS321295\",\n" + + " \"belong\": \"在用\",\n" + + " \"createdBy\": \"1397884728111006697\",\n" + + " \"createdByName\": \"超级管理员\",\n" + + " \"describe\": \"\",\n" + + " \"deviceName\": \"钢直尺\",\n" + + " \"deviceNameNo\": \"钢直尺 null\",\n" + + " \"deviceSource\": \"市计量所\",\n" + + " \"deviceWhere\": \"\",\n" + + " \"guaranteePeriod\": 0,\n" + + " \"id\": \"20542\",\n" + + " \"isOverDue\": \"4\",\n" + + " \"labId\": \"2\",\n" + + " \"labelNo\": \"长度\",\n" + + " \"model\": \"0-50cm\",\n" + + " \"needDoPage\": false,\n" + + " \"objectCheckState\": 0,\n" + + " \"objectState\": 0,\n" + + " \"serialNo\": \"\",\n" + + " \"startPage\": 1,\n" + + " \"state\": 1,\n" + + " \"str1\": \"1\",\n" + + " \"str10\": \"一次性检定合格\",\n" + + " \"str2\": \"钢直尺\",\n" + + " \"str20\": \"长度外检\",\n" + + " \"str5\": \"\",\n" + + " \"str6\": \"\",\n" + + " \"str7\": \"\",\n" + + " \"str8\": \"JJG1钢直尺检定规程\",\n" + + " \"str9\": \"\",\n" + + " \"unit\": \"C\",\n" + + " \"verificationCycle\": 1,\n" + + " \"verifyState\": 0,\n" + + " \"whenAccept\": 1464105600000,\n" + + " \"workGuideNo\": \"热表分厂\",\n" + + " \"total\": \"3809\",\n" + + " \"isOverStr\": \"正常\"\n" + + " },\n" + + " {\n" + + " \"alarmState\": 1,\n" + + " \"assetsCode\": \"LS321294\",\n" + + " \"belong\": \"在用\",\n" + + " \"createdBy\": \"1397884728111006697\",\n" + + " \"createdByName\": \"超级管理员\",\n" + + " \"describe\": \"\",\n" + + " \"deviceName\": \"钢直尺\",\n" + + " \"deviceNameNo\": \"钢直尺 null\",\n" + + " \"deviceSource\": \"市计量所\",\n" + + " \"deviceWhere\": \"\",\n" + + " \"guaranteePeriod\": 0,\n" + + " \"id\": \"20606\",\n" + + " \"isOverDue\": \"4\",\n" + + " \"labId\": \"2\",\n" + + " \"labelNo\": \"长度\",\n" + + " \"model\": \"0-30cm\",\n" + + " \"needDoPage\": false,\n" + + " \"objectCheckState\": 0,\n" + + " \"objectState\": 0,\n" + + " \"serialNo\": \"\",\n" + + " \"startPage\": 1,\n" + + " \"state\": 1,\n" + + " \"str1\": \"1\",\n" + + " \"str10\": \"一次性检定合格\",\n" + + " \"str2\": \"钢直尺\",\n" + + " \"str20\": \"长度外检\",\n" + + " \"str5\": \"\",\n" + + " \"str6\": \"\",\n" + + " \"str7\": \"\",\n" + + " \"str8\": \"JJG1钢直尺检定规程\",\n" + + " \"str9\": \"\",\n" + + " \"unit\": \"C\",\n" + + " \"verificationCycle\": 1,\n" + + " \"verifyState\": 0,\n" + + " \"whenAccept\": 1464105600000,\n" + + " \"workGuideNo\": \"热表分厂\",\n" + + " \"total\": \"3809\",\n" + + " \"isOverStr\": \"正常\"\n" + + " },\n" + + " {\n" + + " \"alarmState\": 1,\n" + + " \"assetsCode\": \"LS321296\",\n" + + " \"belong\": \"在用\",\n" + + " \"createdBy\": \"1397884728111006697\",\n" + + " \"createdByName\": \"超级管理员\",\n" + + " \"describe\": \"\",\n" + + " \"deviceName\": \"钢直尺\",\n" + + " \"deviceNameNo\": \"钢直尺 null\",\n" + + " \"deviceSource\": \"市计量所\",\n" + + " \"deviceWhere\": \"\",\n" + + " \"guaranteePeriod\": 0,\n" + + " \"id\": \"22798\",\n" + + " \"isOverDue\": \"4\",\n" + + " \"labId\": \"2\",\n" + + " \"labelNo\": \"长度\",\n" + + " \"model\": \"0-50cm\",\n" + + " \"needDoPage\": false,\n" + + " \"objectCheckState\": 0,\n" + + " \"objectState\": 0,\n" + + " \"serialNo\": \"\",\n" + + " \"startPage\": 1,\n" + + " \"state\": 1,\n" + + " \"str1\": \"1\",\n" + + " \"str10\": \"一次性检定合格\",\n" + + " \"str2\": \"钢直尺\",\n" + + " \"str20\": \"长度外检\",\n" + + " \"str5\": \"\",\n" + + " \"str6\": \"\",\n" + + " \"str7\": \"\",\n" + + " \"str8\": \"\",\n" + + " \"str9\": \"\",\n" + + " \"unit\": \"C\",\n" + + " \"verificationCycle\": 1,\n" + + " \"verifyState\": 0,\n" + + " \"whenAccept\": 1464105600000,\n" + + " \"workGuideNo\": \"热表分厂\",\n" + + " \"total\": \"3809\",\n" + + " \"isOverStr\": \"正常\"\n" + + " },\n" + + " {\n" + + " \"alarmState\": 1,\n" + + " \"assetsCode\": \"LS321296\",\n" + + " \"belong\": \"在用\",\n" + + " \"createdBy\": \"1397884728111006697\",\n" + + " \"createdByName\": \"超级管理员\",\n" + + " \"describe\": \"\",\n" + + " \"deviceName\": \"钢直尺\",\n" + + " \"deviceNameNo\": \"钢直尺 null\",\n" + + " \"deviceSource\": \"市计量所\",\n" + + " \"deviceWhere\": \"\",\n" + + " \"guaranteePeriod\": 0,\n" + + " \"id\": \"23798\",\n" + + " \"isOverDue\": \"4\",\n" + + " \"labId\": \"2\",\n" + + " \"labelNo\": \"长度\",\n" + + " \"model\": \"0-50cm\",\n" + + " \"needDoPage\": false,\n" + + " \"objectCheckState\": 0,\n" + + " \"objectState\": 0,\n" + + " \"serialNo\": \"\",\n" + + " \"startPage\": 1,\n" + + " \"state\": 1,\n" + + " \"str1\": \"1\",\n" + + " \"str10\": \"一次性检定合格\",\n" + + " \"str2\": \"钢直尺\",\n" + + " \"str20\": \"长度外检\",\n" + + " \"str5\": \"\",\n" + + " \"str6\": \"\",\n" + + " \"str7\": \"\",\n" + + " \"str8\": \"\",\n" + + " \"str9\": \"\",\n" + + " \"unit\": \"C\",\n" + + " \"verificationCycle\": 1,\n" + + " \"verifyState\": 0,\n" + + " \"whenAccept\": 1464105600000,\n" + + " \"workGuideNo\": \"热表分厂\",\n" + + " \"total\": \"3809\",\n" + + " \"isOverStr\": \"正常\"\n" + + " },{\n" + + " \"alarmState\": 1,\n" + + " \"assetsCode\": \"YQ202512057\",\n" + + " \"belong\": \"在用\",\n" + + " \"createdBy\": \"1413079875727655913\",\n" + + " \"createdByName\": \"张曼\",\n" + + " \"date1\": 1795708800000,\n" + + " \"describe\": \"±5%\",\n" + + " \"deviceName\": \"磁导率测试仪\",\n" + + " \"deviceNameNo\": \"磁导率测试仪 null\",\n" + + " \"deviceSource\": \"FOERSTER\",\n" + + " \"deviceWhere\": \"FOERSTER\",\n" + + " \"guaranteePeriod\": 12,\n" + + " \"id\": \"1527021013731116009\",\n" + + " \"isOverDue\": \"0\",\n" + + " \"labId\": \"2\",\n" + + " \"labelNo\": \"电学\",\n" + + " \"model\": \"MAGNETOSCOP1.070\",\n" + + " \"modifiedBy\": \"1413079875727655913\",\n" + + " \"modifiedByName\": \"张曼\",\n" + + " \"needDoPage\": false,\n" + + " \"objectCheckState\": 0,\n" + + " \"objectState\": 0,\n" + + " \"serialNo\": \"17175\",\n" + + " \"startPage\": 1,\n" + + " \"state\": 1,\n" + + " \"str1\": \"1\",\n" + + " \"str12\": \"1413079875727655913,1413079965921969129\",\n" + + " \"str13\": \"张曼,高佳璇\",\n" + + " \"str2\": \"磁导率测试仪\",\n" + + " \"str20\": \"电学\",\n" + + " \"str5\": \"1.068/1.069\",\n" + + " \"str6\": \"\",\n" + + " \"str8\": \"厂家检测报告\",\n" + + " \"unit\": \"B\",\n" + + " \"verificationCycle\": 1,\n" + + " \"verifyState\": 0,\n" + + " \"whenAccept\": 1764259200000,\n" + + " \"whenCreated\": 1768448919000,\n" + + " \"whenModified\": 1768448919000,\n" + + " \"whenUse\": 1764259200000,\n" + + " \"workGuideNo\": \"热表分厂\",\n" + + " \"total\": \"3809\",\n" + + " \"isOverStr\": \"正常\"\n" + + " }\n" + + " ],\n" + + " \"total\": \"3809\",\n" + + " \"recordsTotal\": \"3809\",\n" + + " \"recordsFiltered\": \"3809\"\n" + + "}";*/ String responseBody = response.body(); if (responseBody == null || responseBody.trim().isEmpty()) { log.error("响应体为空"); @@ -92,11 +306,43 @@ public class IMeasurementRecordsServiceImpl implements IMeasurementRecordsServic try { JSONObject result = JSONObject.parseObject(responseBody); if (result != null && result.getBoolean("success")) { - JSONObject data = result.getJSONObject("data"); + JSONArray data = result.getJSONArray("rows"); if (data != null) { List records = JSONArray.parseArray(data.toJSONString(), JSONObject.class); log.info("成功获取{}条计量记录记录", records != null ? records.size() : 0); - return page.setRecords(records != null ? records : List.of()); + MeasurementRecordsEntity measurementRecordsEntity; + List list = new ArrayList<>(); + for (JSONObject jsonObj : records) { + measurementRecordsEntity = new MeasurementRecordsEntity(); + measurementRecordsEntity.setMcName(jsonObj.getString("deviceName")); + measurementRecordsEntity.setNorms(jsonObj.getString("model")); + measurementRecordsEntity.setMcClass(jsonObj.getString("unit")); + measurementRecordsEntity.setLabelNo(jsonObj.getString("labelNo")); + measurementRecordsEntity.setStr2(jsonObj.getString("str2")); + measurementRecordsEntity.setMcCode(jsonObj.getString("assetsCode")); + measurementRecordsEntity.setUseUnit(jsonObj.getString("workGuideNo")); + measurementRecordsEntity.setAccuracy(jsonObj.getString("describe")); + measurementRecordsEntity.setOemCode(jsonObj.getString("serialNo")); + measurementRecordsEntity.setMcOem(jsonObj.getString("deviceWhere")); + measurementRecordsEntity.setEnableDate(jsonObj.getDate("whenUse")); + measurementRecordsEntity.setWhenDccept(jsonObj.getString("whenDccept")); + measurementRecordsEntity.setMcType(jsonObj.getString("str5")); + measurementRecordsEntity.setTestCycle(jsonObj.getInteger("guaranteePeriod")); + measurementRecordsEntity.setDueDate(jsonObj.getDate("date1")); + measurementRecordsEntity.setDate2(jsonObj.getDate("date2")); + measurementRecordsEntity.setBelong(jsonObj.getString("belong")); + measurementRecordsEntity.setWhenBuy(jsonObj.getDate("whenBuy")); + measurementRecordsEntity.setTestDept(jsonObj.getString("deviceSource")); + measurementRecordsEntity.setTestMethod(jsonObj.getString("str8")); + measurementRecordsEntity.setStr9(jsonObj.getString("str9")); + measurementRecordsEntity.setStr10(jsonObj.getString("str10")); + measurementRecordsEntity.setAssetsNo(jsonObj.getString("assetsNo")); + measurementRecordsEntity.setStr6(jsonObj.getString("str6")); + measurementRecordsEntity.setPurposeClass(jsonObj.getString("str7")); + measurementRecordsEntity.setIsOverStr(jsonObj.getString("isOverStr")); + list.add(measurementRecordsEntity); + } + return page.setRecords(list != null ? list : List.of()); } } else { String errorMsg = result != null ? result.getString("message") : "未知错误"; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/RecorderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/RecorderServiceImpl.java index 05dd26dfb..5c0cdaff2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/RecorderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/RecorderServiceImpl.java @@ -2,9 +2,14 @@ package org.springblade.desk.device.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.extern.slf4j.Slf4j; +import jakarta.annotation.Resource; +import org.springblade.desk.device.mapper.EquipmentMapper; +import org.springblade.desk.device.pojo.entity.EquipmentEntity; import org.springblade.desk.device.pojo.entity.RecorderCompareEntity; import org.springblade.desk.device.pojo.entity.RecorderEntity; import org.springblade.desk.device.pojo.excel.RecorderExcel; @@ -15,12 +20,20 @@ import org.springblade.desk.device.pojo.vo.RecorderVO; import org.springblade.desk.device.mapper.RecorderMapper; import org.springblade.desk.device.service.IRecorderCompareService; import org.springblade.desk.device.service.IRecorderService; +import org.springblade.desk.jobtransfer.pojo.entity.PostHandleEntity; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; 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 java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.*; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -30,15 +43,40 @@ import java.util.stream.Collectors; * @author qyl * @since 2026-01-06 */ +@Slf4j @Service public class RecorderServiceImpl extends BaseServiceImpl implements IRecorderService { @Autowired private IRecorderCompareService iRecorderCompareService; + @Resource + private EquipmentMapper equipmentMapper; + + @Value("${request.iotNew.url}") + private String iotNewUrl; + + @Value("${request.iot.orgId}") + private String orgId; + + @Value("${request.iot.systemId}") + private String systemId; + + // 使用JDK 17内置的HttpClient(线程安全,可复用) + private final HttpClient httpClient = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(30)) + .version(HttpClient.Version.HTTP_2) + .build(); @Override - public IPage selectRecorderPage(IPage page, RecorderVO recorder) { - return page.setRecords(baseMapper.selectRecorderPage(page, recorder)); + public IPage selectRecorderPage(IPage page, RecorderVO recorder) { + // 1. 创建条件构造器 + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + + // 2. 动态添加条件(核心!) + // 根据实体对象 entity 中字段是否为空,来动态拼接WHERE条件 + wrapper.eq(Objects.nonNull(recorder.getRecorder()), RecorderEntity::getRecorder, recorder.getRecorder()); + + return baseMapper.selectPage(page, wrapper); } @@ -137,4 +175,371 @@ public class RecorderServiceImpl extends BaseServiceImpl equipmentEntities = getNonProductionEquipment(); + + if (equipmentEntities.isEmpty()) { + log.error("同步记录仪数据失败,当前系统无非产线设备"); + return; + } + + // 批量处理设备数据,使用并行流提高处理效率(根据设备数量决定是否启用) + equipmentEntities.stream() + .filter(equipment -> processEquipmentData(equipment)) + .collect(Collectors.toList()); + } + + /** + * 获取非产线设备列表 + */ + private List getNonProductionEquipment() { + LambdaQueryWrapper equiWrapper = new LambdaQueryWrapper<>(); + equiWrapper.ne(EquipmentEntity::getCategorys, "产线设备"); + return equipmentMapper.selectList(equiWrapper); + } + + /** + * 处理单个设备的数据同步 + * + * @return 处理成功返回true,失败返回false + */ + private boolean processEquipmentData(EquipmentEntity equipmentEntity) { + try { + // 获取设备对应的记录仪信息 + RecorderEntity recorderEntity = getRecorderEntity(equipmentEntity.getDeviceCode()); + if (recorderEntity == null) { + log.warn("设备 {} 无对应的记录仪信息,跳过处理", equipmentEntity.getDeviceCode()); + return false; + } + + // 检查记录时间有效性(跳过未来时间的异常记录) + if (isFutureRecord(recorderEntity.getRecordDate())) { + log.debug("记录仪 {} 记录时间为未来时间,跳过处理", equipmentEntity.getDeviceCode()); + return false; + } + + // 计算时间范围 + TimeRange timeRange = calculateTimeRange(recorderEntity); + if (timeRange == null) { + return false; + } + + // 调用同步接口获取记录仪数据 + JSONArray dataArray = doPost(equipmentEntity.getDeviceCode(), + timeRange.getStartTime(), timeRange.getStopTime()); + + // 处理同步结果 + return processSyncResult(dataArray, equipmentEntity, recorderEntity); + + } catch (Exception e) { + log.error("处理记录仪 {} 数据时发生异常", equipmentEntity.getDeviceCode(), e); + return false; + } + } + + /** + * 获取记录仪实体 + */ + private RecorderEntity getRecorderEntity(String deviceCode) { + return this.getOne(new LambdaQueryWrapper() + .eq(RecorderEntity::getRecorder, deviceCode)); + } + + /** + * 检查记录时间是否为未来时间 + */ + private boolean isFutureRecord(Date recordDate) { + return recordDate.getTime() > System.currentTimeMillis(); + } + + /** + * 计算数据同步的时间范围 + */ + private TimeRange calculateTimeRange(RecorderEntity recorderEntity) { + // 计算基准时间点:当前时间前推8分钟(用于时间比较) + long baselineTime = OffsetDateTime.now().minusMinutes(8).toInstant().toEpochMilli(); + Instant recordInstant = recorderEntity.getRecordDate().toInstant(); + + // 设置默认查询时间范围:当前时间前推6分钟到前推5分钟 + String startTime = OffsetDateTime.now().minusMinutes(6) + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + String stopTime = OffsetDateTime.now().minusMinutes(5) + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + + // 判断记录时间是否在基准时间之前或相等 + if (recordInstant.isBefore(Instant.ofEpochMilli(baselineTime)) || + recordInstant.equals(Instant.ofEpochMilli(baselineTime))) { + + // 设置基于记录时间的开始时间 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + startTime = recordInstant.atZone(ZoneId.systemDefault()).format(formatter); + + // 如果记录时间超过当前时间10分钟,设置基于记录时间的结束时间 + if (recordInstant.plusSeconds(60 * 10).isBefore(Instant.ofEpochMilli(baselineTime))) { + stopTime = recordInstant.plusSeconds(120).atZone(ZoneId.systemDefault()).format(formatter); + } + } + + return new TimeRange(startTime, stopTime); + } + + /** + * 处理同步返回的数据 + */ + private boolean processSyncResult(JSONArray dataArray, EquipmentEntity equipment, + RecorderEntity existingRecorder) { + if (dataArray != null && !dataArray.isEmpty()) { + return processSuccessfulSync(dataArray, equipment); + } else { + return createFallbackRecord(equipment, existingRecorder); + } + } + + /** + * 处理有数据的同步结果 + */ + private boolean processSuccessfulSync(JSONArray dataArray, EquipmentEntity equipment) { + // 获取最新的一条记录 + JSONObject lastRecord = dataArray.getJSONObject(dataArray.size() - 1); + String deviceId = lastRecord.getString("deivceId"); + String value = lastRecord.getString("value"); + Date recordTime = lastRecord.getDate("timestamp"); + + // 检查记录是否已存在(去重判断) + if (isDuplicateRecord(equipment.getDeviceCode(), recordTime)) { +// log.debug("设备 {} 记录已存在,跳过保存", equipment.getDeviceCode()); + return true; + } + + // 创建新记录并保存 + return saveNewRecord(deviceId, value, recordTime); + } + + /** + * 检查重复记录 + */ + private boolean isDuplicateRecord(String deviceCode, Date recordTime) { + return this.exists(new LambdaQueryWrapper() + .eq(RecorderEntity::getRecorder, deviceCode) + .eq(RecorderEntity::getRecordDate, recordTime)); + } + + /** + * 保存新记录 + */ + private boolean saveNewRecord(String deviceId, String value, Date recordTime) { + try { + RecorderEntity recorder = new RecorderEntity(); + recorder.setRecorder(deviceId); + recorder.setRecordDate(recordTime); + recorder.setMemo(value); + return this.save(recorder); + } catch (Exception e) { + log.error("保存记录仪 {} 记录失败", deviceId, e); + return false; + } + } + + /** + * 创建无数据时的回退记录 + */ + private boolean createFallbackRecord(EquipmentEntity equipment, RecorderEntity existingRecorder) { + try { + RecorderEntity recorder = new RecorderEntity(); + recorder.setRecorder(equipment.getDeviceCode()); + recorder.setMemo(""); + + // 设置记录时间:有历史记录则基于最后记录时间,否则基于当前时间 + Date newRecordDate = calculateFallbackDate(existingRecorder); + recorder.setRecordDate(newRecordDate); + + return this.save(recorder); + } catch (Exception e) { + log.error("创建回退记录失败,记录仪:{}", equipment.getDeviceCode(), e); + return false; + } + } + + /** + * 计算回退记录的日期 + */ + private Date calculateFallbackDate(RecorderEntity existingRecorder) { + LocalDateTime baseTime; + + if (existingRecorder != null && existingRecorder.getId() != null) { + // 有历史记录:在最后记录时间基础上增加2分钟 + baseTime = existingRecorder.getRecordDate().toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime() + .plusMinutes(2); + } else { + // 无历史记录:当前时间前推5分钟 + baseTime = LocalDateTime.now().minusMinutes(5); + } + + return Date.from(baseTime.atZone(ZoneId.systemDefault()).toInstant()); + } + + /** + * 时间范围封装类 + */ + private static class TimeRange { + private final String startTime; + private final String stopTime; + + public TimeRange(String startTime, String stopTime) { + this.startTime = startTime; + this.stopTime = stopTime; + } + + public String getStartTime() { + return startTime; + } + + public String getStopTime() { + return stopTime; + } + } + /*public void regularlyUpdated() { + //查询全部非产线设备 + LambdaQueryWrapper equiWrapper = new LambdaQueryWrapper<>(); + equiWrapper.ne(EquipmentEntity::getCategorys,"产线设备"); + List equipmentEntities = equipmentMapper.selectList(equiWrapper); + if(null == equipmentEntities || equipmentEntities.size() < 1){ + log.error("同步记录仪数据失败,当前系统无非产线设备"); + return; + } + String startTime; + String stopTime; + for (EquipmentEntity equipmentEntity : equipmentEntities) { + // 获取当前时间并减去8分钟,然后转换为时间戳 + long time = OffsetDateTime.now().minusMinutes(8).toInstant().toEpochMilli(); + + // 获取当前时间并减去6分钟,然后格式化为字符串 + startTime = OffsetDateTime.now().minusMinutes(6) + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); // 使用ISO格式,包含时区信息 + + // 获取当前时间并减去5分钟,然后格式化为字符串 + stopTime = OffsetDateTime.now().minusMinutes(5) + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + RecorderEntity recorderEntity = this.getOne(new LambdaQueryWrapper().eq(RecorderEntity::getRecorder, equipmentEntity.getDeviceCode())); + if (recorderEntity == null) return; + Date recordDate = recorderEntity.getRecordDate(); + if (recordDate.getTime() > new Date().getTime()) continue; + if (recorderEntity != null && recorderEntity.getId() != null) { + if (recordDate != null) { + Instant recordInstant = recordDate.toInstant(); + if (recordInstant.isBefore(Instant.ofEpochMilli(time)) || recordInstant.equals(Instant.ofEpochMilli(time))) { + // 格式化开始时间 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 根据需求调整格式 + startTime = recordInstant.atZone(ZoneId.systemDefault()).format(formatter); + // 判断是否超过当前时间10分钟 + if (recordInstant.plusSeconds(60 * 10).isBefore(Instant.ofEpochMilli(time))) { + // 在 recordDate 基础上加2分钟作为结束时间 + stopTime = recordInstant.plusSeconds(120).atZone(ZoneId.systemDefault()).format(formatter); + } + } + } + } + //同步接口调用 + JSONArray array = doPost(equipmentEntity.getDeviceCode(), startTime, stopTime); + //处理返回数据 + RecorderEntity recorder = null; + if (array != null && array.size() > 0) { + JSONObject obj = null; + String deivceId = "", value = ""; + Date recTime = null; + obj = array.getJSONObject(array.size() - 1); + deivceId = obj.getString("deivceId"); + value = obj.getString("value"); + recTime = obj.getDate("timestamp"); + RecorderEntity getOneRecorder = this.getOne(new LambdaQueryWrapper().eq(RecorderEntity::getRecorder, equipmentEntity.getDeviceCode()) + .eq(RecorderEntity::getRecordDate,recTime)); + if (getOneRecorder != null && getOneRecorder.getId() != null) continue; + //去重 增加唯一标识 + recorder = new RecorderEntity(); + recorder.setRecorder(deivceId); + recorder.setRecordDate(recTime); + recorder.setMemo(value); + this.save(recorder); + } else { + recorder = new RecorderEntity(); + recorder.setRecorder(equipmentEntity.getDeviceCode()); + if (recorderEntity != null && recorderEntity.getId() != null) { + // 将 Date 转换为 LocalDateTime 进行操作 + LocalDateTime newRecordDate = recordDate.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime() + .plusMinutes(2); // 增加2分钟 + recorder.setRecordDate(Date.from(newRecordDate.atZone(ZoneId.systemDefault()).toInstant())); + } else { + // 当前时间减去5分钟 + LocalDateTime newRecordDate = LocalDateTime.now().minusMinutes(5); + recorder.setRecordDate(Date.from(newRecordDate.atZone(ZoneId.systemDefault()).toInstant())); + } + recorder.setMemo(""); + this.save(recorder); + } + } + }*/ + + /** + * 从IOT同步数据 + * + * @param deviceCode + * @param startTime + * @param stopTime + * @return + */ + private JSONArray doPost(String deviceCode, String startTime, String stopTime) { + log.debug("开始同步记录仪数据"); + JSONArray retuArray = null; + // 构建请求体JSON + JSONObject requestBody = buildRequestBody(deviceCode, startTime, stopTime); + // 创建HTTP请求 + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(iotNewUrl + "/deviceForZhgd/deviceDataHistory")) + .header("Content-Type", "application/json") + .header("Accept", "application/json") + .POST(HttpRequest.BodyPublishers.ofString(requestBody.toJSONString())) + .timeout(Duration.ofSeconds(60)) + .build(); + + try { + // 发送同步请求 + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + // 处理响应 + String responseBody = response.body(); + JSONObject result = JSONObject.parseObject(responseBody); + log.debug("同步记录仪数据: {}", result.toJSONString()); + if (result != null && result.getInteger("code").equals(0)) { + retuArray = result.getJSONArray("result"); + } + } catch (Exception e) { + log.error("同步记录仪数据接口调用失败: {}", e.getMessage(), e); + } + return retuArray; + } + + /** + * 构建请求体 + */ + private JSONObject buildRequestBody(String deviceCode, String startTime, String stopTime) { + JSONObject requestBody = new JSONObject(); + requestBody.put("orgId", orgId); + requestBody.put("systemId", systemId); + requestBody.put("startTime", startTime); + requestBody.put("deviceId", deviceCode); + requestBody.put("endTime", stopTime); + requestBody.put("category", ""); + log.debug("同步记录仪数据请求参数: {}", requestBody.toJSONString()); + return requestBody; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java index 16e844705..0ca67d39f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java @@ -84,7 +84,6 @@ public class AuditFileController extends BladeController { Query query) { // QueryWrapper qw = Condition.getQueryWrapper(map, AuditFile.class); AuditFileSearch search = BeanUtil.toBeanIgnoreError(map, AuditFileSearch.class); - log.info("search = " + search); IPage pages = service.listSearch(Condition.getPage(query), search); IPage pagesVO = AuditFileWrapper.build().pageVO(pages); pagesVO.getRecords() diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestController.java index ce2bd1c38..16528460d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestController.java @@ -3,6 +3,7 @@ */ package org.springblade.desk.quality.controller; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; @@ -27,8 +28,10 @@ import org.springblade.core.tool.utils.Func; import org.springblade.desk.basic.util.ExcelExtUtil; import org.springblade.desk.quality.constant.QAModuleConst; import org.springblade.desk.quality.excel.CycleTestExcel; +import org.springblade.desk.quality.pojo.entity.AuditFile; import org.springblade.desk.quality.pojo.entity.CycleTest; import org.springblade.desk.quality.pojo.request.CycleTestBatUpdateCycle; +import org.springblade.desk.quality.pojo.request.CycleTestSearch; import org.springblade.desk.quality.pojo.request.CycleTestSubmit; import org.springblade.desk.quality.pojo.vo.CycleTestVO; import org.springblade.desk.quality.service.CycleTestService2; @@ -41,6 +44,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * [周期试验] 控制器 @@ -49,11 +53,11 @@ import java.util.Map; * @since 2025-11-17 */ @RestController +@RequestMapping(QAModuleConst.CONTROLLER_PREFIX + "/CycleTest") @Data @AllArgsConstructor @EqualsAndHashCode(callSuper = true) @Slf4j -@RequestMapping(QAModuleConst.CONTROLLER_PREFIX + "/CycleTest") @Tag(name = "[QA][周期试验]", description = "[周期试验]接口") public class CycleTestController extends BladeController { @@ -81,9 +85,17 @@ public class CycleTestController extends BladeController { @GetMapping("/list") @ApiOperationSupport(order = 2) @Operation(summary = "list分页", description = "传入cycleTest") - public R> list(@Parameter(hidden = true) @RequestParam Map cycleTest, + public R> list(@Parameter(hidden = true) @RequestParam Map map, Query query) { - return service2.list(cycleTest, query); + // 填充bean + CycleTestSearch search = BeanUtil.toBeanIgnoreError(map, CycleTestSearch.class); + log.info("search = " + search); + IPage pagesVO = service.listSearch(Condition.getPage(query), search); + pagesVO.getRecords() + .stream() + .peek(service2::setVOValue) + .collect(Collectors.toList()); + return R.data(pagesVO); } /** @@ -186,16 +198,22 @@ public class CycleTestController extends BladeController { @GetMapping("/export-excel") @ApiOperationSupport(order = 8) @Operation(summary = "导出数据", description = "传入cycleTest") - public void exportCycleTest(@Parameter(hidden = true) @RequestParam Map cycleTest, + public void exportCycleTest(@Parameter(hidden = true) @RequestParam Map map, BladeUser bladeUser, HttpServletResponse response) { - QueryWrapper queryWrapper = Condition.getQueryWrapper(cycleTest, CycleTest.class); + // QueryWrapper queryWrapper = Condition.getQueryWrapper(cycleTest, CycleTest.class); //if (!AuthUtil.isAdministrator()) { // queryWrapper.lambda().eq(CycleTest::getTenantId, bladeUser.getTenantId()); //} //queryWrapper.lambda().eq(CycleTestEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); - List list = service.exportCycleTest(queryWrapper); + CycleTestSearch search = BeanUtil.toBeanIgnoreError(map, CycleTestSearch.class); + log.info("search = " + search); + List listVO = service.listSearchWithoutPage(search); + listVO.stream() + .peek(service2::setVOValue) + .collect(Collectors.toList()); + List listExcel = BeanUtil.copyToList(listVO, CycleTestExcel.class); ExcelUtil.export(response, "[周期试验]数据" + DateUtil.time(), - "[周期试验]数据表", list, CycleTestExcel.class); + "[周期试验]数据表", listExcel, CycleTestExcel.class); } @PostMapping("/update-process-user-bat") diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestItemController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestItemController.java index 5fb1214af..713ad309a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestItemController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestItemController.java @@ -3,6 +3,7 @@ */ package org.springblade.desk.quality.controller; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; @@ -80,8 +81,7 @@ public class CycleTestItemController extends BladeController { @ApiOperationSupport(order = 2) @Operation(summary = "list分页", description = "传入cycleTestItem") public R> list( - @Parameter(hidden = true) @RequestParam Map cycleTestItem, - Query query) { + @Parameter(hidden = true) @RequestParam Map cycleTestItem, Query query) { return service2.list(cycleTestItem, query); } @@ -151,9 +151,11 @@ public class CycleTestItemController extends BladeController { // queryWrapper.lambda().eq(CycleTestItem::getTenantId, bladeUser.getTenantId()); //} //queryWrapper.lambda().eq(CycleTestItemEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); - List list = service.exportCycleTestItem(queryWrapper); + + List listVO = service2.listWithoutPage(cycleTestItem); + List listExcel = BeanUtil.copyToList(listVO, CycleTestItemExcel.class); ExcelUtil.export(response, "[周期试验项目]数据" + DateUtil.time(), - "[周期试验项目]数据表", list, + "[周期试验项目]数据表", listExcel, CycleTestItemExcel.class); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestTaskController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestTaskController.java index 5f9590189..323b4c941 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestTaskController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestTaskController.java @@ -168,9 +168,8 @@ public class CycleTestTaskController extends BladeController { //} //queryWrapper.lambda().eq(CycleTestTaskEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); - List list = service.listSearchWithoutPage(search); - // todo:excel格式 + // excel 导出字段 List listExcel = BeanUtil.copyToList(list, CycleTestTaskExcel.class); ExcelUtil.export(response, "[周期试验任务]数据" + DateUtil.time(), "[周期试验任务]数据表", listExcel, CycleTestTaskExcel.class); @@ -219,10 +218,10 @@ public class CycleTestTaskController extends BladeController { return service.fill(id, isDone, testDate, testAttachId, reasonForNo, reasonForOut); } - @GetMapping("/testAuto") + @GetMapping("/generateAuto") @ApiOperationSupport(order = 12) - @Operation(summary = "testAuto", description = "") - public R testAuto() { + @Operation(summary = "generateAuto", description = "") + public R generateAuto() { service.generateAuto(); return R.success(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankReportController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankReportController.java index f4d8d1432..92290c42e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankReportController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankReportController.java @@ -28,8 +28,11 @@ import org.springblade.desk.basic.util.ExcelExtUtil; import org.springblade.desk.quality.constant.QAModuleConst; import org.springblade.desk.quality.excel.LiquidTankReportExcel; import org.springblade.desk.quality.pojo.entity.LiquidTankReport; +import org.springblade.desk.quality.pojo.vo.LiquidTankReportDetailVO; import org.springblade.desk.quality.pojo.vo.LiquidTankReportVO; import org.springblade.desk.quality.service.ILiquidTankReportService; +import org.springblade.desk.quality.service.ILiquidTankTaskCopyService; +import org.springblade.desk.quality.wrapper.LiquidTankReportDetailWrapper; import org.springblade.desk.quality.wrapper.LiquidTankReportWrapper; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -54,179 +57,183 @@ import java.util.Map; public class LiquidTankReportController extends BladeController { @Resource - private ILiquidTankReportService service; - - /** - * [槽液报告] 详情 - */ - @GetMapping("/detail") - @ApiOperationSupport(order = 10) - @Operation(summary = "详情", description = "传入LiquidTankReport Obj") - public R detail(LiquidTankReport liquidTankReport) { - QueryWrapper qw = Condition.getQueryWrapper(liquidTankReport); - LiquidTankReport detail = service.getOne(qw); - LiquidTankReportVO detailVO = LiquidTankReportWrapper.build().entityVO(detail); - return R.data(detailVO); - } - - /** - * [槽液报告] list分页 - */ - @GetMapping("/list") - @ApiOperationSupport(order = 20) - @Operation(summary = "list分页", description = "传入LiquidTankReport Obj") - public R> list(@Parameter(hidden = true) @RequestParam Map liquidTankReport, - Query query) { + private ILiquidTankReportService service; + @Resource + private ILiquidTankTaskCopyService liquidTankTaskCopyService; + + /** + * [槽液报告] 详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 10) + @Operation(summary = "详情", description = "传入LiquidTankReport Obj") + public R detail(LiquidTankReport liquidTankReport) { + QueryWrapper qw = Condition.getQueryWrapper(liquidTankReport); + LiquidTankReport detail = service.getOne(qw); + LiquidTankReportDetailVO detailVO = LiquidTankReportDetailWrapper.build().entityVO(detail); + // 直接查询明细列表 + detailVO.setCopyList(liquidTankTaskCopyService.getListByLiquidTankReportId(detailVO.getId())); + return R.data(detailVO); + } + + /** + * [槽液报告] list分页 + */ + @GetMapping("/list") + @ApiOperationSupport(order = 20) + @Operation(summary = "list分页", description = "传入LiquidTankReport Obj") + public R> list(@Parameter(hidden = true) @RequestParam Map liquidTankReport, + Query query) { QueryWrapper qw = Condition.getQueryWrapper(liquidTankReport, LiquidTankReport.class); - IPage pages = service.page(Condition.getPage(query), qw); - IPage pagesVO = LiquidTankReportWrapper.build().pageVO(pages); - return R.data(pagesVO); - } - - - /** - * [槽液报告] page分页 - */ - @GetMapping("/page") - @ApiOperationSupport(order = 21) - @Operation(summary = "page分页", description = "传入LiquidTankReport Obj") - public R> page(LiquidTankReportVO liquidTankReport, Query query) { - IPage pagesVO = service.selectLiquidTankReportPage( - Condition.getPage(query), liquidTankReport - ); - return R.data(pagesVO); - } - - /** + IPage pages = service.page(Condition.getPage(query), qw); + IPage pagesVO = LiquidTankReportWrapper.build().pageVO(pages); + return R.data(pagesVO); + } + + + /** + * [槽液报告] page分页 + */ + @GetMapping("/page") + @ApiOperationSupport(order = 21) + @Operation(summary = "page分页", description = "传入LiquidTankReport Obj") + public R> page(LiquidTankReportVO liquidTankReport, Query query) { + IPage pagesVO = service.selectLiquidTankReportPage( + Condition.getPage(query), liquidTankReport + ); + return R.data(pagesVO); + } + + /** * [槽液报告] list下拉选择 */ @GetMapping("/listForSelect") @ApiOperationSupport(order = 22) - @Operation(summary = "list下拉选择", description = "") + @Operation(summary = "list下拉选择", description = "") public R> listForSelect() { - List list = service.list(); - List listVO = LiquidTankReportWrapper.build().listVO(list); - return R.data(listVO); + List list = service.list(); + List listVO = LiquidTankReportWrapper.build().listVO(list); + return R.data(listVO); + } + + /** + * [槽液报告] 新增一条 + */ + @PostMapping("/save") + @ApiOperationSupport(order = 30) + @Operation(summary = "新增一条", description = "传入LiquidTankReport Obj") + public R save(@Valid @RequestBody LiquidTankReport addOne) { + addOne.setId(null); + return R.status(service.save(addOne)); } - /** - * [槽液报告] 新增一条 - */ - @PostMapping("/save") - @ApiOperationSupport(order = 30) - @Operation(summary = "新增一条", description = "传入LiquidTankReport Obj") - public R save(@Valid @RequestBody LiquidTankReport addOne) { - addOne.setId(null); - return R.status(service.save(addOne)); - } - - /** + /** * [槽液报告] 新增批量 */ - @PostMapping("/saveBat") - @ApiOperationSupport(order = 31) - @Operation(summary = "新增批量", description = "传入LiquidTankReport List") - public R saveBat(@Valid @RequestBody List addList) { - addList.forEach(one -> { - one.setId(null); - }); - return R.status(service.saveBatch(addList)); - } - - /** - * [槽液报告] 修改一条 - */ - @PostMapping("/update") - @ApiOperationSupport(order = 40) - @Operation(summary = "修改一条", description = "传入LiquidTankReport Obj") - public R update(@Valid @RequestBody LiquidTankReport updateOne) { - return R.status(service.updateById(updateOne)); - } + @PostMapping("/saveBat") + @ApiOperationSupport(order = 31) + @Operation(summary = "新增批量", description = "传入LiquidTankReport List") + public R saveBat(@Valid @RequestBody List addList) { + addList.forEach(one -> { + one.setId(null); + }); + return R.status(service.saveBatch(addList)); + } + + /** + * [槽液报告] 修改一条 + */ + @PostMapping("/update") + @ApiOperationSupport(order = 40) + @Operation(summary = "修改一条", description = "传入LiquidTankReport Obj") + public R update(@Valid @RequestBody LiquidTankReport updateOne) { + return R.status(service.updateById(updateOne)); + } /** * [槽液报告] 修改批量 */ @PostMapping("/updateBat") @ApiOperationSupport(order = 41) - @Operation(summary = "修改批量", description = "传入LiquidTankReport List") + @Operation(summary = "修改批量", description = "传入LiquidTankReport List") public R updateBat(@Valid @RequestBody List updateList) { return R.status(service.updateBatchById(updateList)); } - /** - * [槽液报告] 新增或修改一条 - */ - @PostMapping("/submit") - @ApiOperationSupport(order = 50) - @Operation(summary = "新增或修改一条", description = "传入LiquidTankReport Obj") - public R submit(@Valid @RequestBody LiquidTankReport mergeOne) { - return R.status(service.saveOrUpdate(mergeOne)); - } - - /** + /** + * [槽液报告] 新增或修改一条 + */ + @PostMapping("/submit") + @ApiOperationSupport(order = 50) + @Operation(summary = "新增或修改一条", description = "传入LiquidTankReport Obj") + public R submit(@Valid @RequestBody LiquidTankReport mergeOne) { + return R.status(service.saveOrUpdate(mergeOne)); + } + + /** * [槽液报告] 新增或修改批量 */ - @PostMapping("/submitBat") - @ApiOperationSupport(order = 51) - @Operation(summary = "新增或修改批量", description = "传入LiquidTankReport List") - public R submitBat(@Valid @RequestBody List mergeList) { - return R.status(service.saveOrUpdateBatch(mergeList)); - } - - /** - * [槽液报告] 逻辑删除 - */ - @PostMapping("/remove") - @ApiOperationSupport(order = 61) - @Operation(summary = "逻辑删除", description = "传入ids") - public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { - return R.status(service.deleteLogic(Func.toLongList(ids))); - } - - /** - * [槽液报告] 导出Excel - */ - @GetMapping("/exportExcel") - @ApiOperationSupport(order = 70) - @Operation(summary = "导出Excel", description = "传入LiquidTankReport") - public void exportExcel(@Parameter(hidden = true) @RequestParam Map liquidTankReport, - BladeUser bladeUser, HttpServletResponse response) { - QueryWrapper qw = Condition.getQueryWrapper(liquidTankReport, LiquidTankReport.class); - //if (!AuthUtil.isAdministrator()) { - // queryWrapper.lambda().eq(LiquidTankReport::getTenantId, bladeUser.getTenantId()); - //} - //queryWrapper.lambda().eq(LiquidTankReportEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); - List list = service.exportLiquidTankReport(qw); - ExcelUtil.export(response, "[槽液报告]数据" + DateUtil.time(), - "[槽液报告]数据表", list, LiquidTankReportExcel.class); - } - - /** + @PostMapping("/submitBat") + @ApiOperationSupport(order = 51) + @Operation(summary = "新增或修改批量", description = "传入LiquidTankReport List") + public R submitBat(@Valid @RequestBody List mergeList) { + return R.status(service.saveOrUpdateBatch(mergeList)); + } + + /** + * [槽液报告] 逻辑删除 + */ + @PostMapping("/remove") + @ApiOperationSupport(order = 61) + @Operation(summary = "逻辑删除", description = "传入ids") + public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { + return R.status(service.deleteLogic(Func.toLongList(ids))); + } + + /** + * [槽液报告] 导出Excel + */ + @GetMapping("/exportExcel") + @ApiOperationSupport(order = 70) + @Operation(summary = "导出Excel", description = "传入LiquidTankReport") + public void exportExcel(@Parameter(hidden = true) @RequestParam Map liquidTankReport, + BladeUser bladeUser, HttpServletResponse response) { + QueryWrapper qw = Condition.getQueryWrapper(liquidTankReport, LiquidTankReport.class); + //if (!AuthUtil.isAdministrator()) { + // queryWrapper.lambda().eq(LiquidTankReport::getTenantId, bladeUser.getTenantId()); + //} + //queryWrapper.lambda().eq(LiquidTankReportEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); + List list = service.exportLiquidTankReport(qw); + ExcelUtil.export(response, "[槽液报告]数据" + DateUtil.time(), + "[槽液报告]数据表", list, LiquidTankReportExcel.class); + } + + /** * [槽液报告] 下载Excel模板 */ - @GetMapping("/downloadExcelTemplate") - @ApiOperationSupport(order = 71) - @Operation(summary = "下载Excel模板", description = "") - public ResponseEntity downloadExcelTemplate() { - return ExcelExtUtil.downloadXlsTemplate( - "Excel/QA/ImportTemplate-CycleTestItem.xls", - "导入模版-周期试验项目.xls"); - } - - /** - * [槽液报告] 导入Excel - */ - @PostMapping("/importExcel") - @ApiOperationSupport(order = 72) - @Operation(summary = "导入Excel", description = "MultipartFile") - public R importExcel(@RequestParam("file") MultipartFile file) { - R checkR = ExcelExtUtil.importExcelCheck(file); - if (checkR != null) { - return checkR; - } - List importList = ExcelUtil.read( - file, 0, 1, LiquidTankReport.class - ); - return R.status(service.saveBatch(importList)); - } + @GetMapping("/downloadExcelTemplate") + @ApiOperationSupport(order = 71) + @Operation(summary = "下载Excel模板", description = "") + public ResponseEntity downloadExcelTemplate() { + return ExcelExtUtil.downloadXlsTemplate( + "Excel/QA/ImportTemplate-CycleTestItem.xls", + "导入模版-周期试验项目.xls"); + } + + /** + * [槽液报告] 导入Excel + */ + @PostMapping("/importExcel") + @ApiOperationSupport(order = 72) + @Operation(summary = "导入Excel", description = "MultipartFile") + public R importExcel(@RequestParam("file") MultipartFile file) { + R checkR = ExcelExtUtil.importExcelCheck(file); + if (checkR != null) { + return checkR; + } + List importList = ExcelUtil.read( + file, 0, 1, LiquidTankReport.class + ); + return R.status(service.saveBatch(importList)); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestExcel.java index 76763dad9..33558b2c2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestExcel.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestExcel.java @@ -8,12 +8,14 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.Date; /** @@ -28,193 +30,49 @@ import java.time.LocalDateTime; @ContentRowHeight(18) public class CycleTestExcel implements Serializable { - @Serial - private static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; - /** - * [周期试验]编码 - */ - @ColumnWidth(20) - @ExcelProperty("[周期试验]编码") - private String code; - /** - * [周期试验]类型 - */ - @ColumnWidth(20) - @ExcelProperty("[周期试验]类型") - private Long cycleTestType; - /** - * 名称 - */ - @ColumnWidth(20) - @ExcelProperty("名称") - private String name; - /** - * [班组]id - */ - @ColumnWidth(20) - @ExcelProperty("[班组]id") - private BigDecimal teamId; - /** - * [供应商]id - */ - @ColumnWidth(20) - @ExcelProperty("[供应商]id") - private BigDecimal supplierId; - /** - * [周期试验项目]id - */ - @ColumnWidth(20) - @ExcelProperty("[周期试验项目]id") - private BigDecimal cycleTestItemId; - /** - * 试验件类型-[1]:零件;[2]:试片; - */ - @ColumnWidth(20) - @ExcelProperty("试验件类型-[1]:零件;[2]:试片;") - private BigDecimal testType; - /** - * 工艺员[用户]id - */ - @ColumnWidth(20) - @ExcelProperty("工艺员[用户]id") - private BigDecimal processUserId; - /** - * 试验技术员[用户]id - */ - @ColumnWidth(20) - @ExcelProperty("试验技术员[用户]id") - private BigDecimal testUserId; - /** - * [镀种]id - */ - @ColumnWidth(20) - @ExcelProperty("[镀种]id") - private BigDecimal plateId; - /** - * 生成任务说明 - */ - @ColumnWidth(20) - @ExcelProperty("生成任务说明") - private String descGenTask; - /** - * 临期提醒说明 - */ - @ColumnWidth(20) - @ExcelProperty("临期提醒说明") - private String descRemind; - /** - * 提醒文本 - */ - @ColumnWidth(20) - @ExcelProperty("提醒文本") - private String remindText; - /** - * 排序 - */ - @ColumnWidth(20) - @ExcelProperty("排序") - private Long sort; - /** - * 备注 - */ - @ColumnWidth(20) - @ExcelProperty("备注") - private String remark; - /** - * 上次试验日期 - */ - @ColumnWidth(20) - @ExcelProperty("上次试验日期") - private LocalDateTime lastTestDate; - /** - * 生成任务JobId - */ - @ColumnWidth(20) - @ExcelProperty("生成任务JobId") - private String jobIdsGenTask; - /** - * 临期提醒JobId - */ - @ColumnWidth(20) - @ExcelProperty("临期提醒JobId") - private String jobIdsRemind; - /** - * 试验时长(天) - */ - @ColumnWidth(20) - @ExcelProperty("试验时长(天)") - private Long testDuration; - /** - * 提前下发(天) - */ - @ColumnWidth(20) - @ExcelProperty("提前下发(天)") - private Long genBefore; - /** - * 临期提醒(天) - */ - @ColumnWidth(20) - @ExcelProperty("临期提醒(天)") - private Long remind; - /** - * 定时类型-[1]:WEEK;[2]:MONTH;[3]:YEAR;[4]:CUSTOM; - */ - @ColumnWidth(20) - @ExcelProperty("定时类型-[1]:WEEK;[2]:MONTH;[3]:YEAR;[4]:CUSTOM;") - private Long jobType; - /** - * 定时WEEK值 - */ - @ColumnWidth(20) - @ExcelProperty("定时WEEK值") - private String jobTypeWeekValue; - /** - * 定时MONTH值 - */ - @ColumnWidth(20) - @ExcelProperty("定时MONTH值") - private String jobTypeMonthValue; - /** - * 定时YEAR值 - */ - @ColumnWidth(20) - @ExcelProperty("定时YEAR值") - private String jobTypeYearValue; - /** - * 定时CUSTOM值 - */ - @ColumnWidth(20) - @ExcelProperty("定时CUSTOM值") - private String jobTypeCustomValue; - /** - * 生成任务 json config - */ - @ColumnWidth(20) - @ExcelProperty("生成任务 json config") - private String jsonConfigGenTask; - /** - * 临期提醒 json config - */ - @ColumnWidth(20) - @ExcelProperty("临期提醒 json config") - private String jsonConfigRemind; - /** - * 是否顺延-[1]:是;[0]:否; - */ - @ColumnWidth(20) - @ExcelProperty("是否顺延-[1]:是;[0]:否;") - private Long isPutOff; - /** - * 最小试验数量 - */ - @ColumnWidth(20) - @ExcelProperty("最小试验数量") - private Long minDoTestCount; - /** - * 试验件材料 - */ - @ColumnWidth(20) - @ExcelProperty("试验件材料") - private String testMat; + @Schema(description = "[镀种]多个名称") + @ColumnWidth(20) + @ExcelProperty("镀种") + private String plateNames; + @Schema(description = "[周期试验项目]名称") + @ColumnWidth(20) + @ExcelProperty("试验项目") + private String cycleTestItemName; + @Schema(description = "[周期试验项目]试验条件") + @ColumnWidth(20) + @ExcelProperty("试验条件") + private String cycleTestItemCondition; + @Schema(description = "[周期试验标准]名称") + @ColumnWidth(20) + @ExcelProperty("试验标准") + private String cycleTestStandardName; + @Schema(description = "试验件类型 名称") + @ColumnWidth(20) + @ExcelProperty("试验件") + private String testTypeName; + @Schema(description = "试验件材料") + @ColumnWidth(20) + @ExcelProperty("试验件材料") + private String testMat; + @Schema(description = "试验周期") + @ColumnWidth(20) + @ExcelProperty("试验周期") + private String jobExtShowText; + @Schema(description = "最小试验数量") + @ColumnWidth(20) + @ExcelProperty("最小试验数量") + private Integer minDoTestCount; + @Schema(description = "提前下发天数") + @ColumnWidth(20) + @ExcelProperty("提前下发天数") + private Integer genBefore; + @ColumnWidth(20) + @ExcelProperty("超期提醒天数") + private Integer remind; + @ColumnWidth(20) + @ExcelProperty("更新时间") + private Date updateTime; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestItemExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestItemExcel.java index 13dfafd84..31a45b792 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestItemExcel.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestItemExcel.java @@ -45,6 +45,6 @@ public class CycleTestItemExcel implements Serializable { * 试验标准 */ @ColumnWidth(20) - @ExcelProperty("试验标准") - private String standard; + @ExcelProperty("执行标准") + private String cycleTestStandardName; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestTaskExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestTaskExcel.java index c84440e4f..6c4b39887 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestTaskExcel.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestTaskExcel.java @@ -76,7 +76,7 @@ public class CycleTestTaskExcel implements Serializable { */ @Schema(description = "工艺员[用户]姓名") @ColumnWidth(20) - @ExcelProperty("状态") + @ExcelProperty("工艺员") private String processUserName; /** * 任务生成时间 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/CycleTestTaskClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/CycleTestTaskClient.java index 564e8a192..11fe29e57 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/CycleTestTaskClient.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/CycleTestTaskClient.java @@ -17,11 +17,6 @@ public class CycleTestTaskClient implements ICycleTestTaskClient { service.generateAuto(); } - @Override - public void generateOneTime() { - service.generateOneTime(); - } - @Override public void checkRemind() { service.checkRemind(); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/LiquidTankTaskClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/LiquidTankTaskClient.java index 57eddfebe..f19869aff 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/LiquidTankTaskClient.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/LiquidTankTaskClient.java @@ -3,6 +3,9 @@ package org.springblade.desk.quality.feign; import io.swagger.v3.oas.annotations.Hidden; import jakarta.annotation.Resource; import org.springblade.desk.quality.pojo.entity.LiquidTankTask; +import org.springblade.desk.quality.service.ILiquidTankService; +import org.springblade.desk.quality.service.ILiquidTankTaskService; +import org.springblade.desk.quality.service.LiquidTankService2; import org.springblade.desk.quality.service.LiquidTankTaskService222; import org.springframework.web.bind.annotation.RestController; @@ -13,16 +16,21 @@ import java.util.List; public class LiquidTankTaskClient implements ILquidTankTaskClient { @Resource - private LiquidTankTaskService222 service; + private ILiquidTankTaskService service; @Override - public List generate() { - return null;// todo: + public void generateAuto() { + service.generateAuto(); } @Override - public List timeout() { - return service.timeout(); + public void checkRemind() { + service.checkRemind(); + } + + @Override + public void checkOut() { + service.checkOut(); } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestItemMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestItemMapper.xml index 8999cb922..5d837c361 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestItemMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestItemMapper.xml @@ -18,7 +18,7 @@ SELECT * FROM QA_CYCLE_TEST - WHERE is_deleted = 0 + WHERE IS_DELETED = 0 AND CYCLE_TEST_ITEM_ID = #{q.cycleTestItemId} @@ -54,4 +54,78 @@ SELECT * FROM QA_CYCLE_TEST ${ew.customSqlSegment} + + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestTaskMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestTaskMapper.xml index edc651154..4573c5fa6 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestTaskMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestTaskMapper.xml @@ -37,6 +37,8 @@ + + @@ -187,12 +204,21 @@ AND t.CREATE_TIME <= #{q.createTimeEnd} + + AND t.CREATE_TIME >= #{q.genDatetimeStart} + + + AND t.CREATE_TIME <= #{q.genDatetimeEnd} + AND t.TEST_TYPE = #{q.testType} AND t.CODE LIKE '%' || #{q.code} || '%' + + AND item.ID = #{q.cycleTestItemId} + AND item.NAME LIKE '%' || #{q.cycleTestItemName} || '%' @@ -229,6 +255,12 @@ AND t.FINISH_DATE <= #{q.finishDateEnd} + + AND t.DAY_TO_PLANED_FINISH = #{q.dayToPlanedFinish} + + + AND t.DAY_TO_OUT = #{q.dayToOut} + ORDER BY t.STATUS ASC,t.CREATE_TIME ASC diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestItemService2.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestItemService2.java index 461963902..87a7bdc91 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestItemService2.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestItemService2.java @@ -47,9 +47,7 @@ public class CycleTestItemService2 { * @param query * @return */ - public R> list(@Parameter(hidden = true) @RequestParam Map map, - Query query) { - + public R> list(Map map, Query query) { QueryWrapper qw = Condition.getQueryWrapper(map, CycleTestItem.class); qw.orderByDesc(BaseCol.ID); IPage pages = service.page(Condition.getPage(query), qw); @@ -61,6 +59,23 @@ public class CycleTestItemService2 { return R.data(pagesVO); } + /** + * list 不分页 + * + * @param map + * @return + */ + public List listWithoutPage(Map map) { + QueryWrapper qw = Condition.getQueryWrapper(map, CycleTestItem.class); + qw.orderByDesc(BaseCol.ID); + List pages = service.list(qw); + List pagesVO = CycleTestItemWrapper.build().listVO(pages); + pagesVO.stream() + .peek(this::setVOValue) + .collect(Collectors.toList()); + return pagesVO; + } + /** * search * diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestService2.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestService2.java index 11880fdf9..923f6c1d8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestService2.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestService2.java @@ -1,5 +1,6 @@ package org.springblade.desk.quality.service; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.v3.oas.annotations.Parameter; @@ -19,9 +20,11 @@ import org.springblade.desk.quality.pojo.entity.CycleTest; import org.springblade.desk.quality.pojo.entity.CycleTestItem; import org.springblade.desk.quality.pojo.entity.CycleTestStandard; import org.springblade.desk.quality.pojo.request.CycleTestBatUpdateCycle; +import org.springblade.desk.quality.pojo.request.CycleTestSearch; import org.springblade.desk.quality.pojo.request.JobExt; import org.springblade.desk.quality.pojo.vo.CycleTestVO; import org.springblade.desk.quality.pojo.vo.CycleTestStandardVO; +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; @@ -128,20 +131,18 @@ public class CycleTestService2 { } /** - * list + * list 不分页 * * @param cycleTest - * @param query * @return */ - public R> list(@Parameter(hidden = true) @RequestParam Map cycleTest, - Query query) { - IPage pages = service.page(Condition.getPage(query), - Condition.getQueryWrapper(cycleTest, CycleTest.class).orderByAsc(BaseCol.ID) - ); - IPage pagesVO = CycleTestWrapper.build().pageVO(pages); - pagesVO.getRecords().stream().peek(this::setVOValue).collect(Collectors.toList()); - return R.data(pagesVO); + public List listWithoutPage(Map cycleTest) { + QueryWrapper qw = Condition.getQueryWrapper(cycleTest, CycleTest.class); + qw.orderByAsc(BaseCol.ID); + List pages = service.list(qw); + List pagesVO = CycleTestWrapper.build().listVO(pages); + pagesVO.stream().peek(this::setVOValue).collect(Collectors.toList()); + return pagesVO; } /** @@ -194,16 +195,22 @@ public class CycleTestService2 { { StringBuilder names = new StringBuilder(); List idList = Func.toLongList(vo.getPlateIds()); - idList.forEach(id -> { - names.append(platingService.getById(id).getPlating()); - names.append(","); - }); - String namesF = names.toString(); - if (StringUtils.isNotBlank(namesF) && StringUtils.endsWith(namesF, ",")) { - // 去掉结尾, - StringUtils.removeEnd(namesF, ","); + // 循环拼接 + for (int i = 0; i < idList.size(); i++) { + names.append(platingService.getById(idList.get(i)).getPlating()); + if (i != idList.size() - 1) { // 去掉结尾, + names.append(","); + } + } + vo.setPlateNames(names.toString()); + } + // + { + if (vo.getJobType() != null && vo.getJobType() != 0) { + JobExt je = new JobExt(); + BeanUtil.copyProperties(vo, je); + vo.setJobExtShowText(JobExtUtil.getShowText(je)); } - vo.setPlateNames(namesF); } } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java index 7e0b0e875..fa8070c2e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java @@ -278,10 +278,6 @@ public class CycleTestTaskService2 { return true; } - public void generateOneTime() { - List ctList = cycleTestService.list(); - } - /** * 手动生成 * @@ -472,15 +468,10 @@ public class CycleTestTaskService2 { .toInstant(); return mapper.selectCount( new LambdaQueryWrapper() - .between(CycleTestTask::getCreateTime, - Date.from(leftInstant), Date.from(rightInstant)) + .between(CycleTestTask::getCreateTime, Date.from(leftInstant), Date.from(rightInstant)) ); } - private LocalDate issueDate(CycleTestTask t) { - return null; - } - /** * 任务计划结束日期/超期日期 * @@ -514,7 +505,7 @@ public class CycleTestTaskService2 { } /** - * 临期天数 + * 计算临期天数 * 临期天数 ≤ 0时,红色 * 临期天数 0~7 时,橙色 * 临期天数 >= 7时,黄色 @@ -526,18 +517,18 @@ public class CycleTestTaskService2 { * @param id * @return */ - public String getCountDayToOut(Long id) { + public Integer getCountDayToOut(Long id) { CycleTestTask task = service.getById(id); if (Objects.equals(task.getStatus(), CycleTestTaskConst.S_PENDING_ACCEPT) || Objects.equals(task.getStatus(), CycleTestTaskConst.S_PENDING_TEST)) { LocalDate outLD = getOutDate(id); if (outLD == null) { - return ""; + return 0; } long daysDiff = ChronoUnit.DAYS.between(LocalDate.now(), outLD); - return "" + (int) daysDiff; + return (int) daysDiff; } - return ""; + return 0; } /** @@ -563,9 +554,12 @@ public class CycleTestTaskService2 { if (todayLD.isEqual(remindLD) || (todayLD.isAfter(remindLD) && todayLD.isBefore(outLD))) { task.setFlagOut(BaseValue.NO); task.setFlagApproach(BaseValue.YES); - // 更新状态 - service.updateById(task); + // todo:消息中心 进行临期提醒 } + // 设置临期天数 + task.setDayToPlanedFinish(getCountDayToOut(task.getId())); + // 更新状态 + service.updateById(task); } } @@ -591,6 +585,7 @@ public class CycleTestTaskService2 { if (todayLD.isEqual(outLD) || todayLD.isAfter(outLD)) { task.setFlagOut(BaseValue.YES); task.setFlagApproach(BaseValue.NO); + // todo:消息中心 进行超期提醒 // 更新状态 service.updateById(task); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ICycleTestService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ICycleTestService.java index 99569c4c3..f79137916 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ICycleTestService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ICycleTestService.java @@ -10,6 +10,7 @@ import org.springblade.core.tool.api.R; import org.springblade.desk.quality.excel.CycleTestExcel; import org.springblade.desk.quality.excel.CycleTestExcelImport; import org.springblade.desk.quality.pojo.entity.CycleTest; +import org.springblade.desk.quality.pojo.request.CycleTestSearch; import org.springblade.desk.quality.pojo.request.CycleTestSubmit; import org.springblade.desk.quality.pojo.vo.CycleTestVO; import org.springframework.web.multipart.MultipartFile; @@ -41,6 +42,10 @@ public interface ICycleTestService extends BaseService { */ List exportCycleTest(Wrapper queryWrapper); + IPage listSearch(IPage page, CycleTestSearch search); + + List listSearchWithoutPage(CycleTestSearch search); + /** * VO * diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankReportService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankReportService.java index c6a0ea1a0..d1bd5bd3d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankReportService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankReportService.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.quality.excel.LiquidTankReportExcel; import org.springblade.desk.quality.pojo.entity.LiquidTankReport; +import org.springblade.desk.quality.pojo.vo.LiquidTankReportDetailVO; import org.springblade.desk.quality.pojo.vo.LiquidTankReportVO; import java.util.List; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java index e3dafa3f8..b1de266c4 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java @@ -45,4 +45,6 @@ public interface ILiquidTankTaskCopyService extends BaseService list); R generateWave(@Valid @RequestBody List list); + + List getListByLiquidTankReportId(Long liquidTankReportId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskService.java index c5b58bd4a..04f1b783e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskService.java @@ -66,4 +66,10 @@ public interface ILiquidTankTaskService extends BaseService { R finishFail(Long id, String finishReason); void setVOValue(LiquidTankTaskVO vo); + + void generateAuto(); + + void checkRemind(); + + void checkOut(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IRelTankReportItemService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IRelTankReportItemService.java index 1406a03de..6f17daba4 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IRelTankReportItemService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IRelTankReportItemService.java @@ -19,20 +19,22 @@ import java.util.List; * @since 2025-12-18 */ public interface IRelTankReportItemService extends BaseService { - /** - * 自定义分页 - * - * @param page 分页参数 - * @param relTankReportItem 查询参数 - * @return IPage - */ - IPage selectRelTankReportItemPage(IPage page, RelTankReportItemVO relTankReportItem); - /** - * 导出数据 - * - * @param queryWrapper 查询条件 - * @return List - */ - List exportRelTankReportItem(Wrapper queryWrapper); + /** + * 自定义分页 + * + * @param page 分页参数 + * @param relTankReportItem 查询参数 + * @return IPage + */ + IPage selectRelTankReportItemPage(IPage page, + RelTankReportItemVO relTankReportItem); + + /** + * 导出数据 + * + * @param queryWrapper 查询条件 + * @return List + */ + List exportRelTankReportItem(Wrapper queryWrapper); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/CycleTestServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/CycleTestServiceImpl.java index 32d1a3bf1..35fae8671 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/CycleTestServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/CycleTestServiceImpl.java @@ -14,6 +14,8 @@ import lombok.EqualsAndHashCode; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.desk.basic.config.RoleConfig; @@ -23,6 +25,7 @@ import org.springblade.desk.quality.excel.listener.in.CycleTestListener; import org.springblade.desk.quality.mapper.CycleTestMapper; import org.springblade.desk.quality.pojo.entity.CycleTest; import org.springblade.desk.quality.pojo.entity.CycleTestItem; +import org.springblade.desk.quality.pojo.request.CycleTestSearch; import org.springblade.desk.quality.pojo.request.CycleTestSubmit; import org.springblade.desk.quality.pojo.vo.CycleTestVO; import org.springblade.desk.quality.service.ICycleTestItemService; @@ -35,6 +38,8 @@ import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * [周期试验] 服务实现类 @@ -73,6 +78,16 @@ public class CycleTestServiceImpl extends BaseServiceImpl listSearch(IPage page, CycleTestSearch search) { + return page.setRecords(baseMapper.listSearch(page, search)); + } + + @Override + public List listSearchWithoutPage(CycleTestSearch search) { + return baseMapper.listSearchWithoutPage(search); + } + @Override public void setVOValue(CycleTestVO vo) { diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java index c9e481759..92db073e0 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java @@ -169,6 +169,12 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl implements ILiquidTankReportService { +public class LiquidTankReportServiceImpl extends BaseServiceImpl + implements ILiquidTankReportService { + + @Resource + private IRelTankReportItemService relTankReportItemService; @Resource private IUserClient userClient; @@ -53,6 +62,8 @@ public class LiquidTankReportServiceImpl extends BaseServiceImpl implements ILiquidTankTaskCopyService { + @Resource + private IWorkCenterService workCenterService; + @Resource private ILiquidTankReportService reportService; @Resource @@ -53,8 +60,7 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl selectLiquidTankTaskCopyPage(IPage page, LiquidTankTaskCopyVO liquidTankTaskCopy) { @@ -86,7 +92,7 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl getListByLiquidTankReportId(Long liquidTankReportId) { + LambdaQueryWrapper qw = Wrappers.lambdaQuery(); + qw.eq(RelTankReportItem::getLiquidTankReportId, liquidTankReportId); + List relList = relReportItemService.list(qw); + List copyList = new ArrayList<>(); + for (RelTankReportItem relOne : relList) { + Long taskId = relOne.getLiquidTankTaskId(); + LiquidTankTaskCopy copy = getById(taskId); + LiquidTankTaskCopyVO copyVO = LiquidTankTaskCopyWrapper.build().entityVO(copy); + setVOValue(copyVO); + copyList.add(copyVO); + } + return copyList; } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java index f5c313eca..2aa3425b0 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java @@ -293,17 +293,18 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl generateAuto() { + public void generateAuto() { log.info("========generate========start"); - // 如果是节假日,则跳过生成。 + // 如果是节假日,则跳过生成。 todo: if (false) { log.info("节假日,则跳过生成。"); - return null; + return; } // 查询所有启用的槽液。 List tankList = liquidTankService.list( @@ -327,7 +328,16 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl list = Func.toIntList(je.getJobTypeWeekValue()); + sb.append(list.size()); + sb.append("次/周"); + } else if (type.equals(MONTH)) { + if (StringUtils.isBlank(je.getJobTypeMonthValue())) { + return ""; + } + List list = Func.toStrList(je.getJobTypeMonthValue()); + sb.append(list.size()); + sb.append("次/月"); + } else if (type.equals(YEAR)) { + if (StringUtils.isBlank(je.getJobTypeYearValue())) { + return ""; + } + List list = Func.toStrList(je.getJobTypeYearValue()); + sb.append(list.size()); + sb.append("次/年"); + } + return sb.toString(); + } + /** * 测试执行 * diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/wrapper/LiquidTankReportDetailWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/wrapper/LiquidTankReportDetailWrapper.java new file mode 100644 index 000000000..273bf55bd --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/wrapper/LiquidTankReportDetailWrapper.java @@ -0,0 +1,37 @@ +/** + * Author: Tom Shuo + */ +package org.springblade.desk.quality.wrapper; + +import org.springblade.core.mp.support.BaseEntityWrapper; +import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.desk.quality.pojo.entity.LiquidTankReport; +import org.springblade.desk.quality.pojo.vo.LiquidTankReportDetailVO; +import org.springblade.desk.quality.pojo.vo.LiquidTankReportVO; + +import java.util.Objects; + +/** + * [槽液报告] 包装类,返回视图层所需的字段 + * + * @author Tom Shuo + * @since 2025-12-18 + */ +public class LiquidTankReportDetailWrapper extends BaseEntityWrapper { + + public static LiquidTankReportDetailWrapper build() { + return new LiquidTankReportDetailWrapper(); + } + + @Override + public LiquidTankReportDetailVO entityVO(LiquidTankReport liquidTankReport) { + LiquidTankReportDetailVO VO = Objects.requireNonNull(BeanUtil.copyProperties(liquidTankReport, LiquidTankReportDetailVO.class)); + + //User createUser = UserCache.getUser(liquidTankReport.getCreateUser()); + //User updateUser = UserCache.getUser(liquidTankReport.getUpdateUser()); + //liquidTankReportVO.setCreateUserName(createUser.getName()); + //liquidTankReportVO.setUpdateUserName(updateUser.getName()); + + return VO; + } +} diff --git a/blade-service/blade-desk/src/main/resources/application-dev.yml b/blade-service/blade-desk/src/main/resources/application-dev.yml index 16e6bd5de..1fa698f7a 100644 --- a/blade-service/blade-desk/src/main/resources/application-dev.yml +++ b/blade-service/blade-desk/src/main/resources/application-dev.yml @@ -45,17 +45,17 @@ request: orgId: 16 #业务系统id systemId: 344123 - url: http://192.168.169.32:80720 + url: "http://192.168.169.32:80720" iotNew: - url: http://192.168.169.23:8072 + url: "http://192.168.169.23:8072" #量具使用记录 measuringTool: - url: "192.168.191.11:8888" + url: "http://192.168.191.11:8888" #计量记录 lims: url: "http://192.168.169.50:30000" #飞拔信息接口请求地址 equ: - url: http://192.168.169.69 + url: "http://192.168.169.69" logging: config: classpath:logback.xml diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataSearchClient.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataSearchClient.java index f192ad71e..4c7d5cd18 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataSearchClient.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataSearchClient.java @@ -1,28 +1,3 @@ -/** - * 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.erpdata.feign; diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkMapper.java new file mode 100644 index 000000000..b7df65c94 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkMapper.java @@ -0,0 +1,22 @@ +package org.springblade.erpdata.mapper; + +import com.baomidou.mybatisplus.core.mapper.Mapper; +import org.springblade.erpdata.pojo.dto.view.MesRbPk; +import org.springblade.erpdata.pojo.dto.view.MesRbSodelreczg; + +import java.util.List; + +/** + * Mapper 接口 + * + * @author lqk + */ +public interface ErpMesRbPkMapper extends Mapper { + + /** + * 从ERP视图中获取要同步的推进计划转工单 + * + * @return + */ + List getMesRbPkErpList(); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkMapper.xml new file mode 100644 index 000000000..9648c3ad0 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkMapper.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSodelreczgMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSodelreczgMapper.java new file mode 100644 index 000000000..130834381 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSodelreczgMapper.java @@ -0,0 +1,21 @@ +package org.springblade.erpdata.mapper; + +import com.baomidou.mybatisplus.core.mapper.Mapper; +import org.springblade.erpdata.pojo.dto.view.MesRbSodelreczg; + +import java.util.List; + +/** + * Mapper 接口 + * + * @author lqk + */ +public interface ErpMesRbSodelreczgMapper extends Mapper { + + /** + * 从ERP视图中获取要同步的推进计划转工单 + * + * @return + */ + List getMesRbSodelreczgErpList(); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSodelreczgMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSodelreczgMapper.xml new file mode 100644 index 000000000..a8bec415e --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbSodelreczgMapper.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml index 6f43ba49b..80cd0dd3f 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml @@ -1,9 +1,28 @@ - + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbPkService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbPkService.java new file mode 100644 index 000000000..05b334506 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbPkService.java @@ -0,0 +1,14 @@ +package org.springblade.erpdata.service; + +/** + * ERP数据查询service + * + * @author lqk + */ +public interface IErpMesRbPkService { + + /** + * 同步数据 + */ + void synMesRbPk(); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbSodelreczgService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbSodelreczgService.java new file mode 100644 index 000000000..1a75265c6 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbSodelreczgService.java @@ -0,0 +1,14 @@ +package org.springblade.erpdata.service; + +/** + * ERP数据查询service + * + * @author lqk + */ +public interface IErpMesRbSodelreczgService { + + /** + * 同步数据 + */ + void synMesRbSodelreczg(); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbPkServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbPkServiceImpl.java new file mode 100644 index 000000000..9bb49e91f --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbPkServiceImpl.java @@ -0,0 +1,27 @@ +package org.springblade.erpdata.service.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.order.feign.IApsClient; +import org.springblade.erpdata.mapper.ErpMesRbPkMapper; +import org.springblade.erpdata.service.IErpMesRbPkService; +import org.springframework.stereotype.Service; + +/** + * @author lqk + * @date 2025-11-26 9:39 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ErpMesRbPkServiceImpl implements IErpMesRbPkService { + + private final ErpMesRbPkMapper mesRbPkMapper; + + private final IApsClient apsClient; + + @Override + public void synMesRbPk() { + + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbSodelreczgServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbSodelreczgServiceImpl.java new file mode 100644 index 000000000..ab4240f2f --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbSodelreczgServiceImpl.java @@ -0,0 +1,29 @@ +package org.springblade.erpdata.service.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.order.feign.IApsClient; +import org.springblade.erpdata.mapper.ErpMesRbSodelrecwxMapper; +import org.springblade.erpdata.mapper.ErpMesRbSodelreczgMapper; +import org.springblade.erpdata.service.IErpMesRbSodelrecwxService; +import org.springblade.erpdata.service.IErpMesRbSodelreczgService; +import org.springframework.stereotype.Service; + +/** + * @author lqk + * @date 2025-11-26 9:39 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ErpMesRbSodelreczgServiceImpl implements IErpMesRbSodelreczgService { + + private final ErpMesRbSodelreczgMapper mesRbSodelreczgMapper; + + private final IApsClient apsClient; + + @Override + public void synMesRbSodelreczg() { + + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java index 95fc08f2c..cbb8dfed8 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java @@ -35,9 +35,24 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { @Override public void synMesRbWo() { List mesRbWoList=mesRbWoMapper.getYieldPlanErpList(); + /** + * 有多个实体类 + * b1. 根据零件号从`DS_PART`表中查询零件信息 + * + * ```sql + * SELECT a.product_type, a.part_name, a.area, a.craft_way, a.config_no + * INTO v_product_type, v_part_name, v_po_area, v_craft_way, v_config_no + * FROM ds_part a WHERE a.part_code = v_prtno; + */ List yieldPlanList=new ArrayList<>(); mesRbWoList.forEach(mesRbWo -> { YieldPlan yieldPlan=new YieldPlan(); + yieldPlan.setPlanType(12001L);//赋值默认值12001 + if(mesRbWo.getProcesslinedesc().contains("封接") + ||"LX08-05-028,LX08-05-030,LX08-05-031".contains(mesRbWo.getProcessline())){ + yieldPlan.setPlanType(12002L); + yieldPlan.setPlate("烧结电镀"); + } yieldPlan.setYpCode(mesRbWo.getWono()); yieldPlan.setPartCode(mesRbWo.getPrtno()); yieldPlan.setProductType(mesRbWo.getPrtlotno()); diff --git a/doc/sql/mes/increase-260120.sql b/doc/sql/mes/increase-260120.sql index ecc072b91..8a384bb74 100644 --- a/doc/sql/mes/increase-260120.sql +++ b/doc/sql/mes/increase-260120.sql @@ -235,3 +235,8 @@ ALTER TABLE mes_yield_plan ADD check_totqty_time DATE NULL; COMMENT ON COLUMN mes_yield_plan.check_totqty_time IS '验证完工数时间'; +ALTER TABLE MES_RECORDER + MODIFY (RECORDER NVARCHAR2(255)); +--varchar不允许修改为clob类型,所以先删除再添加 +ALTER TABLE MES_RECORDER DROP COLUMN MEMO; +ALTER TABLE MES_RECORDER ADD (MEMO CLOB);