Merge branch 'develop-QA'

develop-QA
Tom Li 4 months ago
commit 00171c4436
  1. 25
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/CycleTestTaskGenOneTimeProcessor.java
  2. 17
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaAviatorConst.java
  3. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java
  4. 11
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlatingVO.java
  5. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/constant/InspectionTaskConst.java
  6. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ICycleTestTaskClient.java
  7. 17
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/feign/ILquidTankTaskClient.java
  8. 10
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/CycleTestTask.java
  9. 9
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/InspectionTask.java
  10. 14
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/CycleTestSearch.java
  11. 13
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/CycleTestTaskSearch.java
  12. 17
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/JobExt.java
  13. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestTaskVO.java
  14. 36
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/CycleTestVO.java
  15. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskDetailVO.java
  16. 31
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankReportDetailVO.java
  17. 9
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankReportVO.java
  18. 8
      blade-service/blade-desk/pom.xml
  19. 29
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/config/AviatorConfig.java
  20. 46
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/func/CustomFunctionRegistry.java
  21. 32
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/service/AviatorService.java
  22. 60
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/AviatorController.java
  23. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BasicClazzController.java
  24. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/PlatingController.java
  25. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/ProdMarkController.java
  26. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/RelTeamSetUserController.java
  27. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/TeamSetController.java
  28. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkCenterController.java
  29. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/WorkTankController.java
  30. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/AuditFileController.java
  31. 32
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestController.java
  32. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestItemController.java
  33. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/CycleTestTaskController.java
  34. 309
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankReportController.java
  35. 234
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestExcel.java
  36. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestItemExcel.java
  37. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/CycleTestTaskExcel.java
  38. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/CycleTestTaskClient.java
  39. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/feign/LiquidTankTaskClient.java
  40. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestItemMapper.xml
  41. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestMapper.java
  42. 76
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestMapper.xml
  43. 32
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/CycleTestTaskMapper.xml
  44. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestItemService2.java
  45. 45
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestService2.java
  46. 29
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/CycleTestTaskService2.java
  47. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ICycleTestService.java
  48. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankReportService.java
  49. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskCopyService.java
  50. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/ILiquidTankTaskService.java
  51. 32
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IRelTankReportItemService.java
  52. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/CycleTestServiceImpl.java
  53. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java
  54. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankReportServiceImpl.java
  55. 34
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java
  56. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java
  57. 41
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/JobExtUtil.java
  58. 37
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/wrapper/LiquidTankReportDetailWrapper.java

@ -1,25 +0,0 @@
package org.springblade.job.processor.quality;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.quality.feign.ICycleTestTaskClient;
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 {
@Resource
private ICycleTestTaskClient client;
@Override
public ProcessResult process(TaskContext context) throws Exception {
client.generateOneTime();
return new ProcessResult(true);
}
}

@ -0,0 +1,17 @@
package org.springblade.desk.basic.constant;
public interface FormulaAviatorConst {
/**
* 添加点
*/
String ADD = "add";
/**
* 测量值
*/
String TEST = "test";
/**
* 体积
*/
String VOL = "vol";
}

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

@ -3,6 +3,7 @@
*/ */
package org.springblade.desk.basic.pojo.vo; package org.springblade.desk.basic.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springblade.desk.basic.pojo.entity.Plating; import org.springblade.desk.basic.pojo.entity.Plating;
@ -21,4 +22,14 @@ public class PlatingVO extends Plating {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
* [镀种分类]Name
*/
@Schema(description = "[镀种分类]Name")
private Long bcName;
/**
* [镀种小类]Name
*/
@Schema(description = "[镀种小类]Name")
private Long subClassName;
} }

@ -6,7 +6,6 @@ public interface InspectionTaskConst {
* 热表 * 热表
*/ */
Integer FROM_TYPE_RB = 1; Integer FROM_TYPE_RB = 1;
/** /**
* 烧结 * 烧结
*/ */
@ -28,4 +27,9 @@ public interface InspectionTaskConst {
* NA * NA
*/ */
Integer CHECK_RESULT_NA = 3; Integer CHECK_RESULT_NA = 3;
/**
* 烧结包装防护
*/
String PROCESS_NAME_SJBZFH = "烧结包装防护";
} }

@ -13,8 +13,6 @@ public interface ICycleTestTaskClient {
String GENERATE_AUTO = API_PREFIX + "/generate-auto"; 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_REMIND = API_PREFIX + "/check-redmind";
String CHECK_OUT = API_PREFIX + "/check-out"; String CHECK_OUT = API_PREFIX + "/check-out";
@ -22,9 +20,6 @@ public interface ICycleTestTaskClient {
@GetMapping(GENERATE_AUTO) @GetMapping(GENERATE_AUTO)
void generateAuto(); void generateAuto();
@GetMapping(GENERATE_ONE_TIME)
void generateOneTime();
@GetMapping(CHECK_REMIND) @GetMapping(CHECK_REMIND)
void checkRemind(); void checkRemind();

@ -13,13 +13,18 @@ public interface ILquidTankTaskClient {
String API_PREFIX = "/feign/client/qa/lquid-tank-task"; 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) String CHECK_OUT = API_PREFIX + "/check-out";
public List generate();
@GetMapping(TIMEOUT) @GetMapping(GENERATE_AUTO)
public List timeout(); void generateAuto();
@GetMapping(CHECK_REMIND)
void checkRemind();
@GetMapping(CHECK_OUT)
void checkOut();
} }

@ -309,4 +309,14 @@ public class CycleTestTask extends BaseEntity {
*/ */
@Schema(description = "超期原因") @Schema(description = "超期原因")
private String reasonForOut; private String reasonForOut;
/**
* 临期天数
*/
@Schema(description = "临期天数")
private Integer dayToPlanedFinish;
/**
* 超期天数
*/
@Schema(description = "超期天数")
private Integer dayToOut;
} }

@ -167,6 +167,10 @@ public class InspectionTask extends BaseEntity {
* 接收日期 * 接收日期
*/ */
public static final String COL_RECEIVE_DATE = "RECEIVE_DATE"; 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 = "接收日期") @Schema(description = "接收日期")
private LocalDateTime receiveDate; private LocalDateTime receiveDate;
/**
* 工序名称
*/
@Schema(description = "工序名称")
private String processName;
} }

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

@ -30,7 +30,6 @@ public class CycleTestTaskSearch extends CycleTestTask {
private Date createTimeEnd; private Date createTimeEnd;
@Schema(description = "状态数组") @Schema(description = "状态数组")
private List<Integer> statusList; private List<Integer> statusList;
/** /**
* [周期试验项目]名称 * [周期试验项目]名称
*/ */
@ -63,6 +62,18 @@ public class CycleTestTaskSearch extends CycleTestTask {
@JsonDeserialize(using = LocalDateTimeEndOfDayDeserializer.class) @JsonDeserialize(using = LocalDateTimeEndOfDayDeserializer.class)
@Schema(description = "一次性任务生成日期-结束") @Schema(description = "一次性任务生成日期-结束")
private LocalDateTime oneTimeGenDateEnd; private LocalDateTime oneTimeGenDateEnd;
/**
* 一次性任务生成日期-开始
*/
@JsonDeserialize(using = DateBeginOfDayDeserializer.class)
@Schema(description = "生成日期-开始")
private Date genDatetimeStart;
/**
* 一次性任务生成日期-结束
*/
@JsonDeserialize(using = DateEndOfDayDeserializer.class)
@Schema(description = "生成日期-结束")
private Date genDatetimeEnd;
/** /**
* 下发时间-开始 * 下发时间-开始
*/ */

@ -2,17 +2,28 @@ package org.springblade.desk.quality.pojo.request;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data @Data
@EqualsAndHashCode @EqualsAndHashCode
@ToString
public class JobExt { public class JobExt {
/**
*
*/
public static final Integer WEEK = 1; public static final Integer WEEK = 1;
/**
*
*/
public static final Integer MONTH = 2; public static final Integer MONTH = 2;
/**
*
*/
public static final Integer YEAR = 3; public static final Integer YEAR = 3;
/**
* 自定义CRON
*/
public static final Integer CUSTOM = 4; public static final Integer CUSTOM = 4;
/** /**

@ -3,10 +3,12 @@
*/ */
package org.springblade.desk.quality.pojo.vo; package org.springblade.desk.quality.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springblade.desk.quality.pojo.entity.CycleTestTask; import org.springblade.desk.quality.pojo.entity.CycleTestTask;
import org.springblade.desk.util.json.serializer.IntegerAllToStringSerializer;
import java.io.Serial; import java.io.Serial;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -61,8 +63,9 @@ public class CycleTestTaskVO extends CycleTestTask {
/** /**
* 临期天数 * 临期天数
*/ */
@JsonSerialize(using = IntegerAllToStringSerializer.class)
@Schema(description = "临期天数") @Schema(description = "临期天数")
private String countDayToPlanedFinish; private Integer countDayToPlanedFinish;
/** /**
* 填报[附件]附件地址 * 填报[附件]附件地址
*/ */

@ -6,6 +6,7 @@ package org.springblade.desk.quality.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springblade.desk.quality.pojo.entity.CycleTest; import org.springblade.desk.quality.pojo.entity.CycleTest;
import java.io.Serial; import java.io.Serial;
@ -18,61 +19,34 @@ import java.io.Serial;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class CycleTestVO extends CycleTest { public class CycleTestVO extends CycleTest {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
* [周期试验项目]名称
*/
@Schema(description = "[周期试验项目]名称") @Schema(description = "[周期试验项目]名称")
private String cycleTestItemName; private String cycleTestItemName;
/**
* [周期试验项目]试验条件
*/
@Schema(description = "[周期试验项目]试验条件") @Schema(description = "[周期试验项目]试验条件")
private String cycleTestItemCondition; private String cycleTestItemCondition;
/**
* [周期试验标准]id
*/
@Schema(description = "[周期试验标准]id") @Schema(description = "[周期试验标准]id")
private Long cycleTestStandardId; private Long cycleTestStandardId;
/**
* [周期试验标准]名称
*/
@Schema(description = "[周期试验标准]名称") @Schema(description = "[周期试验标准]名称")
private String cycleTestStandardName; private String cycleTestStandardName;
/**
* [周期试验标准][附件]id
*/
@Schema(description = "[周期试验标准][附件]id") @Schema(description = "[周期试验标准][附件]id")
private Long cycleTestStandardAttachId; private Long cycleTestStandardAttachId;
/**
* 工艺员[用户]姓名
*/
@Schema(description = "工艺员[用户]姓名") @Schema(description = "工艺员[用户]姓名")
private String processUserName; private String processUserName;
/**
* 试验技术员[用户]姓名
*/
@Schema(description = "试验技术员[用户]姓名") @Schema(description = "试验技术员[用户]姓名")
private String testUserName; private String testUserName;
/**
* 更新[用户]姓名
*/
@Schema(description = "更新[用户]姓名") @Schema(description = "更新[用户]姓名")
private String updateUserName; private String updateUserName;
/**
* 试验件类型 名称
*/
@Schema(description = "试验件类型 名称") @Schema(description = "试验件类型 名称")
private String testTypeName; private String testTypeName;
/** @Schema(description = "[周期试验标准]")
* [周期试验标准]
*/
@Schema(description = "standard")
private CycleTestStandardVO standard; private CycleTestStandardVO standard;
@Schema(description = "[镀种]多个名称") @Schema(description = "[镀种]多个名称")
private String plateNames; private String plateNames;
@Schema(description = "试验周期")
private String jobExtShowText;
} }

@ -28,12 +28,6 @@ public class InspectionTaskDetailVO extends InspectionTask {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
* todo:
*/
@Schema(description = "工序名称")
private String processName = "工序名称A";
private InspectionTaskListVO orderInfo; private InspectionTaskListVO orderInfo;
private List<RemindMsg> remindMsgList; private List<RemindMsg> remindMsgList;

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

@ -9,6 +9,7 @@ import lombok.EqualsAndHashCode;
import org.springblade.desk.quality.pojo.entity.LiquidTankReport; import org.springblade.desk.quality.pojo.entity.LiquidTankReport;
import java.io.Serial; import java.io.Serial;
import java.util.List;
/** /**
* [槽液报告] 视图实体类 * [槽液报告] 视图实体类
@ -19,9 +20,9 @@ import java.io.Serial;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class LiquidTankReportVO extends LiquidTankReport { public class LiquidTankReportVO extends LiquidTankReport {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Schema(description = "维护人") @Schema(description = "维护人")
private String updateUserRealName; private String updateUserRealName;
} }

@ -110,6 +110,14 @@
<groupId>org.springblade</groupId> <groupId>org.springblade</groupId>
<artifactId>blade-scheduling-api</artifactId> <artifactId>blade-scheduling-api</artifactId>
</dependency> </dependency>
<!-- Source: https://mvnrepository.com/artifact/com.googlecode.aviator/aviator -->
<!-- SpringBoot 3 + JDK 17 项目必须使用Aviator 5.3.0 及以上版本,低版本存在兼容性和功能限制 -->
<!-- Aviator表达式引擎核心依赖 -->
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>5.4.3</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

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

@ -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<String, Object> env, AviatorObject arg1) {
String value = (String) arg1.getValue(env);
return new AviatorString("自定义结果: " + value);
}
});
}
}

@ -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<String, Object> variables) {
try {
return aviatorEvaluator.execute(expression, variables);
} catch (Exception e) {
throw new RuntimeException("表达式执行失败: " + e.getMessage(), e);
}
}
}

@ -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<String, Object> request) {
String expression = (String) request.get("expression");
Map<String, Object> variables = (Map<String, Object>) request.get("variables");
return aviatorService.evaluateExpression(expression, variables);
}
@GetMapping("/customFunc")
public Object customFunc() {
// 直接使用注册的自定义函数
return aviatorEvaluator.execute(
"myCustomFunc('Hello')",
Collections.emptyMap()
);
}
}

@ -18,6 +18,7 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Condition;
@ -116,6 +117,7 @@ public class BasicClazzController extends BladeController {
public R<List<BasicClazzVO>> listForSelectPlatingAssort() { public R<List<BasicClazzVO>> listForSelectPlatingAssort() {
LambdaQueryWrapper<BasicClazz> qw = Wrappers.lambdaQuery(); LambdaQueryWrapper<BasicClazz> qw = Wrappers.lambdaQuery();
qw.eq(BasicClazz::getBizType, BasicClazzConst.TYPE_PLATING_ASSORT); qw.eq(BasicClazz::getBizType, BasicClazzConst.TYPE_PLATING_ASSORT);
qw.eq(BasicClazz::getIsDeleted, CommonConstant.DELETE_FALSE);
List<BasicClazz> list = service.list(qw); List<BasicClazz> list = service.list(qw);
List<BasicClazzVO> listVO = BasicClazzWrapper.build().listVO(list); List<BasicClazzVO> listVO = BasicClazzWrapper.build().listVO(list);
return R.data(listVO); return R.data(listVO);

@ -35,7 +35,6 @@ import org.springblade.desk.basic.pojo.vo.PlatingVO;
import org.springblade.desk.basic.service.IPlatingService; import org.springblade.desk.basic.service.IPlatingService;
import org.springblade.desk.basic.util.ExcelExtUtil; import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.basic.wrapper.PlatingWrapper; import org.springblade.desk.basic.wrapper.PlatingWrapper;
import org.springblade.desk.quality.pojo.entity.ReviewDuty;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -46,7 +45,7 @@ import java.util.stream.Collectors;
/** /**
* [镀种] 控制器 * [镀种] 控制器
* * mes v1: bs_plating
* @author Tom Shuo * @author Tom Shuo
* @since 2026-01-05 * @since 2026-01-05
*/ */

@ -41,6 +41,7 @@ import java.util.stream.Collectors;
/** /**
* [生产标识] 控制器 * [生产标识] 控制器
* mes v1:
* *
* @author Tom Shuo * @author Tom Shuo
* @since 2025-12-22 * @since 2025-12-22

@ -41,6 +41,7 @@ import java.util.stream.Collectors;
/** /**
* [班组用户关联] 控制器 * [班组用户关联] 控制器
* mes v1: 二期新加
* *
* @author Tom Shuo * @author Tom Shuo
* @since 2026-01-13 * @since 2026-01-13

@ -40,6 +40,7 @@ import java.util.Map;
/** /**
* [班组] 控制器 * [班组] 控制器
* mes v1: bs_team_set * mes v1: bs_team_set
*
* @author Tom Shuo * @author Tom Shuo
* @since 2025-12-16 * @since 2025-12-16
*/ */

@ -40,6 +40,7 @@ import java.util.Map;
/** /**
* [作业中心] 控制器 * [作业中心] 控制器
* mes v1: bs_work_center * mes v1: bs_work_center
*
* @author Tom Shuo * @author Tom Shuo
* @since 2025-12-16 * @since 2025-12-16
*/ */

@ -40,6 +40,7 @@ import java.util.Map;
/** /**
* [作业槽] 控制器 * [作业槽] 控制器
* mes v1: * mes v1:
*
* @author Tom Shuo * @author Tom Shuo
* @since 2025-12-16 * @since 2025-12-16
*/ */

@ -84,7 +84,6 @@ public class AuditFileController extends BladeController {
Query query) { Query query) {
// QueryWrapper<AuditFile> qw = Condition.getQueryWrapper(map, AuditFile.class); // QueryWrapper<AuditFile> qw = Condition.getQueryWrapper(map, AuditFile.class);
AuditFileSearch search = BeanUtil.toBeanIgnoreError(map, AuditFileSearch.class); AuditFileSearch search = BeanUtil.toBeanIgnoreError(map, AuditFileSearch.class);
log.info("search = " + search);
IPage<AuditFile> pages = service.listSearch(Condition.getPage(query), search); IPage<AuditFile> pages = service.listSearch(Condition.getPage(query), search);
IPage<AuditFileVO> pagesVO = AuditFileWrapper.build().pageVO(pages); IPage<AuditFileVO> pagesVO = AuditFileWrapper.build().pageVO(pages);
pagesVO.getRecords() pagesVO.getRecords()

@ -3,6 +3,7 @@
*/ */
package org.springblade.desk.quality.controller; 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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; 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.basic.util.ExcelExtUtil;
import org.springblade.desk.quality.constant.QAModuleConst; import org.springblade.desk.quality.constant.QAModuleConst;
import org.springblade.desk.quality.excel.CycleTestExcel; 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.entity.CycleTest;
import org.springblade.desk.quality.pojo.request.CycleTestBatUpdateCycle; 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.request.CycleTestSubmit;
import org.springblade.desk.quality.pojo.vo.CycleTestVO; import org.springblade.desk.quality.pojo.vo.CycleTestVO;
import org.springblade.desk.quality.service.CycleTestService2; import org.springblade.desk.quality.service.CycleTestService2;
@ -41,6 +44,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* [周期试验] 控制器 * [周期试验] 控制器
@ -49,11 +53,11 @@ import java.util.Map;
* @since 2025-11-17 * @since 2025-11-17
*/ */
@RestController @RestController
@RequestMapping(QAModuleConst.CONTROLLER_PREFIX + "/CycleTest")
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Slf4j @Slf4j
@RequestMapping(QAModuleConst.CONTROLLER_PREFIX + "/CycleTest")
@Tag(name = "[QA][周期试验]", description = "[周期试验]接口") @Tag(name = "[QA][周期试验]", description = "[周期试验]接口")
public class CycleTestController extends BladeController { public class CycleTestController extends BladeController {
@ -81,9 +85,17 @@ public class CycleTestController extends BladeController {
@GetMapping("/list") @GetMapping("/list")
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
@Operation(summary = "list分页", description = "传入cycleTest") @Operation(summary = "list分页", description = "传入cycleTest")
public R<IPage<CycleTestVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> cycleTest, public R<IPage<CycleTestVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> map,
Query query) { Query query) {
return service2.list(cycleTest, query); // 填充bean
CycleTestSearch search = BeanUtil.toBeanIgnoreError(map, CycleTestSearch.class);
log.info("search = " + search);
IPage<CycleTestVO> 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") @GetMapping("/export-excel")
@ApiOperationSupport(order = 8) @ApiOperationSupport(order = 8)
@Operation(summary = "导出数据", description = "传入cycleTest") @Operation(summary = "导出数据", description = "传入cycleTest")
public void exportCycleTest(@Parameter(hidden = true) @RequestParam Map<String, Object> cycleTest, public void exportCycleTest(@Parameter(hidden = true) @RequestParam Map<String, Object> map,
BladeUser bladeUser, HttpServletResponse response) { BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<CycleTest> queryWrapper = Condition.getQueryWrapper(cycleTest, CycleTest.class); // QueryWrapper<CycleTest> queryWrapper = Condition.getQueryWrapper(cycleTest, CycleTest.class);
//if (!AuthUtil.isAdministrator()) { //if (!AuthUtil.isAdministrator()) {
// queryWrapper.lambda().eq(CycleTest::getTenantId, bladeUser.getTenantId()); // queryWrapper.lambda().eq(CycleTest::getTenantId, bladeUser.getTenantId());
//} //}
//queryWrapper.lambda().eq(CycleTestEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); //queryWrapper.lambda().eq(CycleTestEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
List<CycleTestExcel> list = service.exportCycleTest(queryWrapper); CycleTestSearch search = BeanUtil.toBeanIgnoreError(map, CycleTestSearch.class);
log.info("search = " + search);
List<CycleTestVO> listVO = service.listSearchWithoutPage(search);
listVO.stream()
.peek(service2::setVOValue)
.collect(Collectors.toList());
List<CycleTestExcel> listExcel = BeanUtil.copyToList(listVO, CycleTestExcel.class);
ExcelUtil.export(response, "[周期试验]数据" + DateUtil.time(), ExcelUtil.export(response, "[周期试验]数据" + DateUtil.time(),
"[周期试验]数据表", list, CycleTestExcel.class); "[周期试验]数据表", listExcel, CycleTestExcel.class);
} }
@PostMapping("/update-process-user-bat") @PostMapping("/update-process-user-bat")

@ -3,6 +3,7 @@
*/ */
package org.springblade.desk.quality.controller; 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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@ -80,8 +81,7 @@ public class CycleTestItemController extends BladeController {
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
@Operation(summary = "list分页", description = "传入cycleTestItem") @Operation(summary = "list分页", description = "传入cycleTestItem")
public R<IPage<CycleTestItemVO>> list( public R<IPage<CycleTestItemVO>> list(
@Parameter(hidden = true) @RequestParam Map<String, Object> cycleTestItem, @Parameter(hidden = true) @RequestParam Map<String, Object> cycleTestItem, Query query) {
Query query) {
return service2.list(cycleTestItem, 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(CycleTestItem::getTenantId, bladeUser.getTenantId());
//} //}
//queryWrapper.lambda().eq(CycleTestItemEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); //queryWrapper.lambda().eq(CycleTestItemEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
List<CycleTestItemExcel> list = service.exportCycleTestItem(queryWrapper);
List<CycleTestItemVO> listVO = service2.listWithoutPage(cycleTestItem);
List<CycleTestItemExcel> listExcel = BeanUtil.copyToList(listVO, CycleTestItemExcel.class);
ExcelUtil.export(response, "[周期试验项目]数据" + DateUtil.time(), ExcelUtil.export(response, "[周期试验项目]数据" + DateUtil.time(),
"[周期试验项目]数据表", list, "[周期试验项目]数据表", listExcel,
CycleTestItemExcel.class); CycleTestItemExcel.class);
} }

@ -168,9 +168,8 @@ public class CycleTestTaskController extends BladeController {
//} //}
//queryWrapper.lambda().eq(CycleTestTaskEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); //queryWrapper.lambda().eq(CycleTestTaskEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
List<CycleTestTaskVO> list = service.listSearchWithoutPage(search); List<CycleTestTaskVO> list = service.listSearchWithoutPage(search);
// todo:excel格式 // excel 导出字段
List<CycleTestTaskExcel> listExcel = BeanUtil.copyToList(list, CycleTestTaskExcel.class); List<CycleTestTaskExcel> listExcel = BeanUtil.copyToList(list, CycleTestTaskExcel.class);
ExcelUtil.export(response, "[周期试验任务]数据" + DateUtil.time(), ExcelUtil.export(response, "[周期试验任务]数据" + DateUtil.time(),
"[周期试验任务]数据表", listExcel, CycleTestTaskExcel.class); "[周期试验任务]数据表", listExcel, CycleTestTaskExcel.class);
@ -219,10 +218,10 @@ public class CycleTestTaskController extends BladeController {
return service.fill(id, isDone, testDate, testAttachId, reasonForNo, reasonForOut); return service.fill(id, isDone, testDate, testAttachId, reasonForNo, reasonForOut);
} }
@GetMapping("/testAuto") @GetMapping("/generateAuto")
@ApiOperationSupport(order = 12) @ApiOperationSupport(order = 12)
@Operation(summary = "testAuto", description = "") @Operation(summary = "generateAuto", description = "")
public R testAuto() { public R generateAuto() {
service.generateAuto(); service.generateAuto();
return R.success(); return R.success();
} }

@ -28,8 +28,11 @@ import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.quality.constant.QAModuleConst; import org.springblade.desk.quality.constant.QAModuleConst;
import org.springblade.desk.quality.excel.LiquidTankReportExcel; import org.springblade.desk.quality.excel.LiquidTankReportExcel;
import org.springblade.desk.quality.pojo.entity.LiquidTankReport; 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.pojo.vo.LiquidTankReportVO;
import org.springblade.desk.quality.service.ILiquidTankReportService; 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.springblade.desk.quality.wrapper.LiquidTankReportWrapper;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -54,179 +57,183 @@ import java.util.Map;
public class LiquidTankReportController extends BladeController { public class LiquidTankReportController extends BladeController {
@Resource @Resource
private ILiquidTankReportService service; private ILiquidTankReportService service;
@Resource
/** private ILiquidTankTaskCopyService liquidTankTaskCopyService;
* [槽液报告] 详情
*/ /**
@GetMapping("/detail") * [槽液报告] 详情
@ApiOperationSupport(order = 10) */
@Operation(summary = "详情", description = "传入LiquidTankReport Obj") @GetMapping("/detail")
public R<LiquidTankReportVO> detail(LiquidTankReport liquidTankReport) { @ApiOperationSupport(order = 10)
QueryWrapper<LiquidTankReport> qw = Condition.getQueryWrapper(liquidTankReport); @Operation(summary = "详情", description = "传入LiquidTankReport Obj")
LiquidTankReport detail = service.getOne(qw); public R<LiquidTankReportDetailVO> detail(LiquidTankReport liquidTankReport) {
LiquidTankReportVO detailVO = LiquidTankReportWrapper.build().entityVO(detail); QueryWrapper<LiquidTankReport> qw = Condition.getQueryWrapper(liquidTankReport);
return R.data(detailVO); LiquidTankReport detail = service.getOne(qw);
} LiquidTankReportDetailVO detailVO = LiquidTankReportDetailWrapper.build().entityVO(detail);
// 直接查询明细列表
/** detailVO.setCopyList(liquidTankTaskCopyService.getListByLiquidTankReportId(detailVO.getId()));
* [槽液报告] list分页 return R.data(detailVO);
*/ }
@GetMapping("/list")
@ApiOperationSupport(order = 20) /**
@Operation(summary = "list分页", description = "传入LiquidTankReport Obj") * [槽液报告] list分页
public R<IPage<LiquidTankReportVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTankReport, */
Query query) { @GetMapping("/list")
@ApiOperationSupport(order = 20)
@Operation(summary = "list分页", description = "传入LiquidTankReport Obj")
public R<IPage<LiquidTankReportVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTankReport,
Query query) {
QueryWrapper<LiquidTankReport> qw = Condition.getQueryWrapper(liquidTankReport, LiquidTankReport.class); QueryWrapper<LiquidTankReport> qw = Condition.getQueryWrapper(liquidTankReport, LiquidTankReport.class);
IPage<LiquidTankReport> pages = service.page(Condition.getPage(query), qw); IPage<LiquidTankReport> pages = service.page(Condition.getPage(query), qw);
IPage<LiquidTankReportVO> pagesVO = LiquidTankReportWrapper.build().pageVO(pages); IPage<LiquidTankReportVO> pagesVO = LiquidTankReportWrapper.build().pageVO(pages);
return R.data(pagesVO); return R.data(pagesVO);
} }
/** /**
* [槽液报告] page分页 * [槽液报告] page分页
*/ */
@GetMapping("/page") @GetMapping("/page")
@ApiOperationSupport(order = 21) @ApiOperationSupport(order = 21)
@Operation(summary = "page分页", description = "传入LiquidTankReport Obj") @Operation(summary = "page分页", description = "传入LiquidTankReport Obj")
public R<IPage<LiquidTankReportVO>> page(LiquidTankReportVO liquidTankReport, Query query) { public R<IPage<LiquidTankReportVO>> page(LiquidTankReportVO liquidTankReport, Query query) {
IPage<LiquidTankReportVO> pagesVO = service.selectLiquidTankReportPage( IPage<LiquidTankReportVO> pagesVO = service.selectLiquidTankReportPage(
Condition.getPage(query), liquidTankReport Condition.getPage(query), liquidTankReport
); );
return R.data(pagesVO); return R.data(pagesVO);
} }
/** /**
* [槽液报告] list下拉选择 * [槽液报告] list下拉选择
*/ */
@GetMapping("/listForSelect") @GetMapping("/listForSelect")
@ApiOperationSupport(order = 22) @ApiOperationSupport(order = 22)
@Operation(summary = "list下拉选择", description = "") @Operation(summary = "list下拉选择", description = "")
public R<List<LiquidTankReportVO>> listForSelect() { public R<List<LiquidTankReportVO>> listForSelect() {
List<LiquidTankReport> list = service.list(); List<LiquidTankReport> list = service.list();
List<LiquidTankReportVO> listVO = LiquidTankReportWrapper.build().listVO(list); List<LiquidTankReportVO> listVO = LiquidTankReportWrapper.build().listVO(list);
return R.data(listVO); 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") @PostMapping("/saveBat")
@ApiOperationSupport(order = 31) @ApiOperationSupport(order = 31)
@Operation(summary = "新增批量", description = "传入LiquidTankReport List") @Operation(summary = "新增批量", description = "传入LiquidTankReport List")
public R saveBat(@Valid @RequestBody List<LiquidTankReport> addList) { public R saveBat(@Valid @RequestBody List<LiquidTankReport> addList) {
addList.forEach(one -> { addList.forEach(one -> {
one.setId(null); one.setId(null);
}); });
return R.status(service.saveBatch(addList)); return R.status(service.saveBatch(addList));
} }
/** /**
* [槽液报告] 修改一条 * [槽液报告] 修改一条
*/ */
@PostMapping("/update") @PostMapping("/update")
@ApiOperationSupport(order = 40) @ApiOperationSupport(order = 40)
@Operation(summary = "修改一条", description = "传入LiquidTankReport Obj") @Operation(summary = "修改一条", description = "传入LiquidTankReport Obj")
public R update(@Valid @RequestBody LiquidTankReport updateOne) { public R update(@Valid @RequestBody LiquidTankReport updateOne) {
return R.status(service.updateById(updateOne)); return R.status(service.updateById(updateOne));
} }
/** /**
* [槽液报告] 修改批量 * [槽液报告] 修改批量
*/ */
@PostMapping("/updateBat") @PostMapping("/updateBat")
@ApiOperationSupport(order = 41) @ApiOperationSupport(order = 41)
@Operation(summary = "修改批量", description = "传入LiquidTankReport List") @Operation(summary = "修改批量", description = "传入LiquidTankReport List")
public R updateBat(@Valid @RequestBody List<LiquidTankReport> updateList) { public R updateBat(@Valid @RequestBody List<LiquidTankReport> updateList) {
return R.status(service.updateBatchById(updateList)); return R.status(service.updateBatchById(updateList));
} }
/** /**
* [槽液报告] 新增或修改一条 * [槽液报告] 新增或修改一条
*/ */
@PostMapping("/submit") @PostMapping("/submit")
@ApiOperationSupport(order = 50) @ApiOperationSupport(order = 50)
@Operation(summary = "新增或修改一条", description = "传入LiquidTankReport Obj") @Operation(summary = "新增或修改一条", description = "传入LiquidTankReport Obj")
public R submit(@Valid @RequestBody LiquidTankReport mergeOne) { public R submit(@Valid @RequestBody LiquidTankReport mergeOne) {
return R.status(service.saveOrUpdate(mergeOne)); return R.status(service.saveOrUpdate(mergeOne));
} }
/** /**
* [槽液报告] 新增或修改批量 * [槽液报告] 新增或修改批量
*/ */
@PostMapping("/submitBat") @PostMapping("/submitBat")
@ApiOperationSupport(order = 51) @ApiOperationSupport(order = 51)
@Operation(summary = "新增或修改批量", description = "传入LiquidTankReport List") @Operation(summary = "新增或修改批量", description = "传入LiquidTankReport List")
public R submitBat(@Valid @RequestBody List<LiquidTankReport> mergeList) { public R submitBat(@Valid @RequestBody List<LiquidTankReport> mergeList) {
return R.status(service.saveOrUpdateBatch(mergeList)); return R.status(service.saveOrUpdateBatch(mergeList));
} }
/** /**
* [槽液报告] 逻辑删除 * [槽液报告] 逻辑删除
*/ */
@PostMapping("/remove") @PostMapping("/remove")
@ApiOperationSupport(order = 61) @ApiOperationSupport(order = 61)
@Operation(summary = "逻辑删除", description = "传入ids") @Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(service.deleteLogic(Func.toLongList(ids))); return R.status(service.deleteLogic(Func.toLongList(ids)));
} }
/** /**
* [槽液报告] 导出Excel * [槽液报告] 导出Excel
*/ */
@GetMapping("/exportExcel") @GetMapping("/exportExcel")
@ApiOperationSupport(order = 70) @ApiOperationSupport(order = 70)
@Operation(summary = "导出Excel", description = "传入LiquidTankReport") @Operation(summary = "导出Excel", description = "传入LiquidTankReport")
public void exportExcel(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTankReport, public void exportExcel(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTankReport,
BladeUser bladeUser, HttpServletResponse response) { BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<LiquidTankReport> qw = Condition.getQueryWrapper(liquidTankReport, LiquidTankReport.class); QueryWrapper<LiquidTankReport> qw = Condition.getQueryWrapper(liquidTankReport, LiquidTankReport.class);
//if (!AuthUtil.isAdministrator()) { //if (!AuthUtil.isAdministrator()) {
// queryWrapper.lambda().eq(LiquidTankReport::getTenantId, bladeUser.getTenantId()); // queryWrapper.lambda().eq(LiquidTankReport::getTenantId, bladeUser.getTenantId());
//} //}
//queryWrapper.lambda().eq(LiquidTankReportEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); //queryWrapper.lambda().eq(LiquidTankReportEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
List<LiquidTankReportExcel> list = service.exportLiquidTankReport(qw); List<LiquidTankReportExcel> list = service.exportLiquidTankReport(qw);
ExcelUtil.export(response, "[槽液报告]数据" + DateUtil.time(), ExcelUtil.export(response, "[槽液报告]数据" + DateUtil.time(),
"[槽液报告]数据表", list, LiquidTankReportExcel.class); "[槽液报告]数据表", list, LiquidTankReportExcel.class);
} }
/** /**
* [槽液报告] 下载Excel模板 * [槽液报告] 下载Excel模板
*/ */
@GetMapping("/downloadExcelTemplate") @GetMapping("/downloadExcelTemplate")
@ApiOperationSupport(order = 71) @ApiOperationSupport(order = 71)
@Operation(summary = "下载Excel模板", description = "") @Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<org.springframework.core.io.Resource> downloadExcelTemplate() { public ResponseEntity<org.springframework.core.io.Resource> downloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate( return ExcelExtUtil.downloadXlsTemplate(
"Excel/QA/ImportTemplate-CycleTestItem.xls", "Excel/QA/ImportTemplate-CycleTestItem.xls",
"导入模版-周期试验项目.xls"); "导入模版-周期试验项目.xls");
} }
/** /**
* [槽液报告] 导入Excel * [槽液报告] 导入Excel
*/ */
@PostMapping("/importExcel") @PostMapping("/importExcel")
@ApiOperationSupport(order = 72) @ApiOperationSupport(order = 72)
@Operation(summary = "导入Excel", description = "MultipartFile") @Operation(summary = "导入Excel", description = "MultipartFile")
public R importExcel(@RequestParam("file") MultipartFile file) { public R importExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file); R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) { if (checkR != null) {
return checkR; return checkR;
} }
List<LiquidTankReport> importList = ExcelUtil.read( List<LiquidTankReport> importList = ExcelUtil.read(
file, 0, 1, LiquidTankReport.class file, 0, 1, LiquidTankReport.class
); );
return R.status(service.saveBatch(importList)); return R.status(service.saveBatch(importList));
} }
} }

@ -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.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date;
/** /**
@ -28,193 +30,49 @@ import java.time.LocalDateTime;
@ContentRowHeight(18) @ContentRowHeight(18)
public class CycleTestExcel implements Serializable { public class CycleTestExcel implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** @Schema(description = "[镀种]多个名称")
* [周期试验]编码 @ColumnWidth(20)
*/ @ExcelProperty("镀种")
@ColumnWidth(20) private String plateNames;
@ExcelProperty("[周期试验]编码") @Schema(description = "[周期试验项目]名称")
private String code; @ColumnWidth(20)
/** @ExcelProperty("试验项目")
* [周期试验]类型 private String cycleTestItemName;
*/ @Schema(description = "[周期试验项目]试验条件")
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("[周期试验]类型") @ExcelProperty("试验条件")
private Long cycleTestType; private String cycleTestItemCondition;
/** @Schema(description = "[周期试验标准]名称")
* 名称 @ColumnWidth(20)
*/ @ExcelProperty("试验标准")
@ColumnWidth(20) private String cycleTestStandardName;
@ExcelProperty("名称") @Schema(description = "试验件类型 名称")
private String name; @ColumnWidth(20)
/** @ExcelProperty("试验件")
* [班组]id private String testTypeName;
*/ @Schema(description = "试验件材料")
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("[班组]id") @ExcelProperty("试验件材料")
private BigDecimal teamId; private String testMat;
/** @Schema(description = "试验周期")
* [供应商]id @ColumnWidth(20)
*/ @ExcelProperty("试验周期")
@ColumnWidth(20) private String jobExtShowText;
@ExcelProperty("[供应商]id") @Schema(description = "最小试验数量")
private BigDecimal supplierId; @ColumnWidth(20)
/** @ExcelProperty("最小试验数量")
* [周期试验项目]id private Integer minDoTestCount;
*/ @Schema(description = "提前下发天数")
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("[周期试验项目]id") @ExcelProperty("提前下发天数")
private BigDecimal cycleTestItemId; private Integer genBefore;
/** @ColumnWidth(20)
* 试验件类型-[1]:零件;[2]:试片; @ExcelProperty("超期提醒天数")
*/ private Integer remind;
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("试验件类型-[1]:零件;[2]:试片;") @ExcelProperty("更新时间")
private BigDecimal testType; private Date updateTime;
/**
* 工艺员[用户]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;
} }

@ -45,6 +45,6 @@ public class CycleTestItemExcel implements Serializable {
* 试验标准 * 试验标准
*/ */
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("试验标准") @ExcelProperty("执行标准")
private String standard; private String cycleTestStandardName;
} }

@ -76,7 +76,7 @@ public class CycleTestTaskExcel implements Serializable {
*/ */
@Schema(description = "工艺员[用户]姓名") @Schema(description = "工艺员[用户]姓名")
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("状态") @ExcelProperty("工艺员")
private String processUserName; private String processUserName;
/** /**
* 任务生成时间 * 任务生成时间

@ -17,11 +17,6 @@ public class CycleTestTaskClient implements ICycleTestTaskClient {
service.generateAuto(); service.generateAuto();
} }
@Override
public void generateOneTime() {
service.generateOneTime();
}
@Override @Override
public void checkRemind() { public void checkRemind() {
service.checkRemind(); service.checkRemind();

@ -3,6 +3,9 @@ package org.springblade.desk.quality.feign;
import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Hidden;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springblade.desk.quality.pojo.entity.LiquidTankTask; 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.springblade.desk.quality.service.LiquidTankTaskService222;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -13,16 +16,21 @@ import java.util.List;
public class LiquidTankTaskClient implements ILquidTankTaskClient { public class LiquidTankTaskClient implements ILquidTankTaskClient {
@Resource @Resource
private LiquidTankTaskService222 service; private ILiquidTankTaskService service;
@Override @Override
public List<LiquidTankTask> generate() { public void generateAuto() {
return null;// todo: service.generateAuto();
} }
@Override @Override
public List<LiquidTankTask> timeout() { public void checkRemind() {
return service.timeout(); service.checkRemind();
}
@Override
public void checkOut() {
service.checkOut();
} }
} }

@ -18,7 +18,7 @@
<select id="selectCycleTestItemPage" resultMap="cycleTestItemResultMap"> <select id="selectCycleTestItemPage" resultMap="cycleTestItemResultMap">
SELECT * SELECT *
FROM QA_CYCLE_TEST_ITEM FROM QA_CYCLE_TEST_ITEM
WHERE is_deleted = 0 WHERE IS_DELETED = 0
<if test="q.name != null and q.name != ''"> <if test="q.name != null and q.name != ''">
AND NAME LIKE '%' || #{q.name} || '%' AND NAME LIKE '%' || #{q.name} || '%'
</if> </if>

@ -9,7 +9,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springblade.desk.quality.excel.CycleTestExcel; import org.springblade.desk.quality.excel.CycleTestExcel;
import org.springblade.desk.quality.pojo.entity.CycleTest; import org.springblade.desk.quality.pojo.entity.CycleTest;
import org.springblade.desk.quality.pojo.request.CycleTestSearch;
import org.springblade.desk.quality.pojo.vo.CycleTestVO; import org.springblade.desk.quality.pojo.vo.CycleTestVO;
import org.springblade.desk.quality.pojo.vo.InspectionTaskListVO;
import java.util.List; import java.util.List;
@ -37,4 +39,8 @@ public interface CycleTestMapper extends BaseMapper<CycleTest> {
* @return List<CycleTestExcel> * @return List<CycleTestExcel>
*/ */
List<CycleTestExcel> exportCycleTest(@Param("ew") Wrapper<CycleTest> queryWrapper); List<CycleTestExcel> exportCycleTest(@Param("ew") Wrapper<CycleTest> queryWrapper);
List<CycleTestVO> listSearch(IPage<CycleTestVO> page, @Param("q") CycleTestSearch q);
List<CycleTestVO> listSearchWithoutPage(@Param("q") CycleTestSearch q);
} }

@ -42,7 +42,7 @@
<select id="selectCycleTestPage" resultMap="cycleTestResultMap"> <select id="selectCycleTestPage" resultMap="cycleTestResultMap">
SELECT * SELECT *
FROM QA_CYCLE_TEST FROM QA_CYCLE_TEST
WHERE is_deleted = 0 WHERE IS_DELETED = 0
<if test="q.cycleTestItemId != null and q.cycleTestItemId != 0"> <if test="q.cycleTestItemId != null and q.cycleTestItemId != 0">
AND CYCLE_TEST_ITEM_ID = #{q.cycleTestItemId} AND CYCLE_TEST_ITEM_ID = #{q.cycleTestItemId}
</if> </if>
@ -54,4 +54,78 @@
SELECT * SELECT *
FROM QA_CYCLE_TEST ${ew.customSqlSegment} FROM QA_CYCLE_TEST ${ew.customSqlSegment}
</select> </select>
<select id="listSearch"
resultType="org.springblade.desk.quality.pojo.vo.CycleTestVO">
SELECT t.*
FROM QA_CYCLE_TEST t
-- 用户 bl_user
LEFT JOIN BLADE_USER bl_user on t.PROCESS_USER_ID = bl_user.ID
-- 试验项目 item
LEFT JOIN QA_CYCLE_TEST_ITEM item ON t.CYCLE_TEST_ITEM_ID = item.ID
-- 试验标准 std
LEFT JOIN QA_CYCLE_TEST_STANDARD std ON item.CYCLE_TEST_STANDARD_ID = std.ID
WHERE (
t.IS_DELETED = 0
)
<if test="q.cycleTestItemId != null">
AND t.CYCLE_TEST_ITEM_ID = #{q.cycleTestItemId}
</if>
<if test="q.plateId != null and q.plateId != ''">
AND ',' || t.PLATE_IDS || ',' LIKE '%,' || #{q.plateId} || ',%'
</if>
<if test="q.testType != null and q.testType != 0">
AND t.TEST_TYPE = #{q.testType}
</if>
<if test="q.cycleTestItemCondition != null and q.cycleTestItemCondition != ''">
AND item.CONDITION LIKE '%' || #{q.cycleTestItemCondition} || '%'
</if>
<if test="q.cycleTestStandardName != null and q.cycleTestStandardName != ''">
AND std.NAME LIKE '%' || #{q.cycleTestStandardName} || '%'
</if>
<if test="q.processUserId != null">
AND t.PROCESS_USER_ID = #{q.processUserId}
</if>
<if test="q.jobType != null">
AND t.JOB_TYPE = #{q.jobType}
</if>
ORDER BY t.ID DESC
</select>
<select id="listSearchWithoutPage"
resultType="org.springblade.desk.quality.pojo.vo.CycleTestVO">
SELECT t.*
FROM QA_CYCLE_TEST t
-- 用户 bl_user
LEFT JOIN BLADE_USER bl_user on t.PROCESS_USER_ID = bl_user.ID
-- 试验项目 item
LEFT JOIN QA_CYCLE_TEST_ITEM item ON t.CYCLE_TEST_ITEM_ID = item.ID
-- 试验标准 std
LEFT JOIN QA_CYCLE_TEST_STANDARD std ON item.CYCLE_TEST_STANDARD_ID = std.ID
WHERE (
t.IS_DELETED = 0
)
<if test="q.cycleTestItemId != null">
AND t.CYCLE_TEST_ITEM_ID = #{q.cycleTestItemId}
</if>
<if test="q.plateId != null and q.plateId != ''">
AND ',' || t.PLATE_IDS || ',' LIKE '%,' || #{q.plateId} || ',%'
</if>
<if test="q.testType != null and q.testType != 0">
AND t.TEST_TYPE = #{q.testType}
</if>
<if test="q.cycleTestItemCondition != null and q.cycleTestItemCondition != ''">
AND item.CONDITION LIKE '%' || #{q.cycleTestItemCondition} || '%'
</if>
<if test="q.cycleTestStandardName != null and q.cycleTestStandardName != ''">
AND std.NAME LIKE '%' || #{q.cycleTestStandardName} || '%'
</if>
<if test="q.processUserId != null">
AND t.PROCESS_USER_ID = #{q.processUserId}
</if>
<if test="q.jobType != null">
AND t.JOB_TYPE = #{q.jobType}
</if>
ORDER BY t.ID DESC
</select>
</mapper> </mapper>

@ -37,6 +37,8 @@
<result column="FLAG_APPROACH" property="flagApproach"/> <result column="FLAG_APPROACH" property="flagApproach"/>
<result column="FLAG_OUT" property="flagOut"/> <result column="FLAG_OUT" property="flagOut"/>
<result column="REASON_FOR_OUT" property="reasonForOut"/> <result column="REASON_FOR_OUT" property="reasonForOut"/>
<result column="DAY_TO_PLANED_FINISH" property="dayToPlanedFinish"/>
<result column="DAY_TO_OUT" property="dayToOut"/>
</resultMap> </resultMap>
<select id="selectCycleTestTaskPage" resultMap="cycleTestTaskResultMap"> <select id="selectCycleTestTaskPage" resultMap="cycleTestTaskResultMap">
@ -103,12 +105,21 @@
<if test="q.createTimeEnd != null"> <if test="q.createTimeEnd != null">
AND t.CREATE_TIME &lt;= #{q.createTimeEnd} AND t.CREATE_TIME &lt;= #{q.createTimeEnd}
</if> </if>
<if test="q.genDatetimeStart != null">
AND t.CREATE_TIME &gt;= #{q.genDatetimeStart}
</if>
<if test="q.genDatetimeEnd != null">
AND t.CREATE_TIME &lt;= #{q.genDatetimeEnd}
</if>
<if test="q.testType != null"> <if test="q.testType != null">
AND t.TEST_TYPE = #{q.testType} AND t.TEST_TYPE = #{q.testType}
</if> </if>
<if test="q.code != null and q.code != ''"> <if test="q.code != null and q.code != ''">
AND t.CODE LIKE '%' || #{q.code} || '%' AND t.CODE LIKE '%' || #{q.code} || '%'
</if> </if>
<if test="q.cycleTestItemId != null">
AND item.ID = #{q.cycleTestItemId}
</if>
<if test="q.cycleTestItemName != null and q.cycleTestItemName != ''"> <if test="q.cycleTestItemName != null and q.cycleTestItemName != ''">
AND item.NAME LIKE '%' || #{q.cycleTestItemName} || '%' AND item.NAME LIKE '%' || #{q.cycleTestItemName} || '%'
</if> </if>
@ -145,6 +156,12 @@
<if test="q.finishDateEnd != null"> <if test="q.finishDateEnd != null">
AND t.FINISH_DATE &lt;= #{q.finishDateEnd} AND t.FINISH_DATE &lt;= #{q.finishDateEnd}
</if> </if>
<if test="q.dayToPlanedFinish != null">
AND t.DAY_TO_PLANED_FINISH = #{q.dayToPlanedFinish}
</if>
<if test="q.dayToOut != null">
AND t.DAY_TO_OUT = #{q.dayToOut}
</if>
ORDER BY t.STATUS ASC,t.CREATE_TIME ASC ORDER BY t.STATUS ASC,t.CREATE_TIME ASC
</select> </select>
@ -187,12 +204,21 @@
<if test="q.createTimeEnd != null"> <if test="q.createTimeEnd != null">
AND t.CREATE_TIME &lt;= #{q.createTimeEnd} AND t.CREATE_TIME &lt;= #{q.createTimeEnd}
</if> </if>
<if test="q.genDatetimeStart != null">
AND t.CREATE_TIME &gt;= #{q.genDatetimeStart}
</if>
<if test="q.genDatetimeEnd != null">
AND t.CREATE_TIME &lt;= #{q.genDatetimeEnd}
</if>
<if test="q.testType != null"> <if test="q.testType != null">
AND t.TEST_TYPE = #{q.testType} AND t.TEST_TYPE = #{q.testType}
</if> </if>
<if test="q.code != null and q.code != ''"> <if test="q.code != null and q.code != ''">
AND t.CODE LIKE '%' || #{q.code} || '%' AND t.CODE LIKE '%' || #{q.code} || '%'
</if> </if>
<if test="q.cycleTestItemId != null">
AND item.ID = #{q.cycleTestItemId}
</if>
<if test="q.cycleTestItemName != null and q.cycleTestItemName != ''"> <if test="q.cycleTestItemName != null and q.cycleTestItemName != ''">
AND item.NAME LIKE '%' || #{q.cycleTestItemName} || '%' AND item.NAME LIKE '%' || #{q.cycleTestItemName} || '%'
</if> </if>
@ -229,6 +255,12 @@
<if test="q.finishDateEnd != null"> <if test="q.finishDateEnd != null">
AND t.FINISH_DATE &lt;= #{q.finishDateEnd} AND t.FINISH_DATE &lt;= #{q.finishDateEnd}
</if> </if>
<if test="q.dayToPlanedFinish != null">
AND t.DAY_TO_PLANED_FINISH = #{q.dayToPlanedFinish}
</if>
<if test="q.dayToOut != null">
AND t.DAY_TO_OUT = #{q.dayToOut}
</if>
ORDER BY t.STATUS ASC,t.CREATE_TIME ASC ORDER BY t.STATUS ASC,t.CREATE_TIME ASC
</select> </select>
</mapper> </mapper>

@ -47,9 +47,7 @@ public class CycleTestItemService2 {
* @param query * @param query
* @return * @return
*/ */
public R<IPage<CycleTestItemVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> map, public R<IPage<CycleTestItemVO>> list(Map<String, Object> map, Query query) {
Query query) {
QueryWrapper<CycleTestItem> qw = Condition.getQueryWrapper(map, CycleTestItem.class); QueryWrapper<CycleTestItem> qw = Condition.getQueryWrapper(map, CycleTestItem.class);
qw.orderByDesc(BaseCol.ID); qw.orderByDesc(BaseCol.ID);
IPage<CycleTestItem> pages = service.page(Condition.getPage(query), qw); IPage<CycleTestItem> pages = service.page(Condition.getPage(query), qw);
@ -61,6 +59,23 @@ public class CycleTestItemService2 {
return R.data(pagesVO); return R.data(pagesVO);
} }
/**
* list 不分页
*
* @param map
* @return
*/
public List<CycleTestItemVO> listWithoutPage(Map<String, Object> map) {
QueryWrapper<CycleTestItem> qw = Condition.getQueryWrapper(map, CycleTestItem.class);
qw.orderByDesc(BaseCol.ID);
List<CycleTestItem> pages = service.list(qw);
List<CycleTestItemVO> pagesVO = CycleTestItemWrapper.build().listVO(pages);
pagesVO.stream()
.peek(this::setVOValue)
.collect(Collectors.toList());
return pagesVO;
}
/** /**
* search * search
* *

@ -1,5 +1,6 @@
package org.springblade.desk.quality.service; 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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Parameter; 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.CycleTestItem;
import org.springblade.desk.quality.pojo.entity.CycleTestStandard; import org.springblade.desk.quality.pojo.entity.CycleTestStandard;
import org.springblade.desk.quality.pojo.request.CycleTestBatUpdateCycle; 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.request.JobExt;
import org.springblade.desk.quality.pojo.vo.CycleTestVO; import org.springblade.desk.quality.pojo.vo.CycleTestVO;
import org.springblade.desk.quality.pojo.vo.CycleTestStandardVO; 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.CycleTestStandardWrapper;
import org.springblade.desk.quality.wrapper.CycleTestWrapper; import org.springblade.desk.quality.wrapper.CycleTestWrapper;
import org.springblade.resource.feign.IAttachClient; import org.springblade.resource.feign.IAttachClient;
@ -128,20 +131,18 @@ public class CycleTestService2 {
} }
/** /**
* list * list 不分页
* *
* @param cycleTest * @param cycleTest
* @param query
* @return * @return
*/ */
public R<IPage<CycleTestVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> cycleTest, public List<CycleTestVO> listWithoutPage(Map<String, Object> cycleTest) {
Query query) { QueryWrapper<CycleTest> qw = Condition.getQueryWrapper(cycleTest, CycleTest.class);
IPage<CycleTest> pages = service.page(Condition.getPage(query), qw.orderByAsc(BaseCol.ID);
Condition.getQueryWrapper(cycleTest, CycleTest.class).orderByAsc(BaseCol.ID) List<CycleTest> pages = service.list(qw);
); List<CycleTestVO> pagesVO = CycleTestWrapper.build().listVO(pages);
IPage<CycleTestVO> pagesVO = CycleTestWrapper.build().pageVO(pages); pagesVO.stream().peek(this::setVOValue).collect(Collectors.toList());
pagesVO.getRecords().stream().peek(this::setVOValue).collect(Collectors.toList()); return pagesVO;
return R.data(pagesVO);
} }
/** /**
@ -194,16 +195,22 @@ public class CycleTestService2 {
{ {
StringBuilder names = new StringBuilder(); StringBuilder names = new StringBuilder();
List<Long> idList = Func.toLongList(vo.getPlateIds()); List<Long> idList = Func.toLongList(vo.getPlateIds());
idList.forEach(id -> { // 循环拼接
names.append(platingService.getById(id).getPlating()); for (int i = 0; i < idList.size(); i++) {
names.append(","); names.append(platingService.getById(idList.get(i)).getPlating());
}); if (i != idList.size() - 1) { // 去掉结尾,
String namesF = names.toString(); names.append(",");
if (StringUtils.isNotBlank(namesF) && StringUtils.endsWith(namesF, ",")) { }
// 去掉结尾, }
StringUtils.removeEnd(namesF, ","); 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);
} }
} }
} }

@ -278,10 +278,6 @@ public class CycleTestTaskService2 {
return true; return true;
} }
public void generateOneTime() {
List<CycleTest> ctList = cycleTestService.list();
}
/** /**
* 手动生成 * 手动生成
* *
@ -472,15 +468,10 @@ public class CycleTestTaskService2 {
.toInstant(); .toInstant();
return mapper.selectCount( return mapper.selectCount(
new LambdaQueryWrapper<CycleTestTask>() new LambdaQueryWrapper<CycleTestTask>()
.between(CycleTestTask::getCreateTime, .between(CycleTestTask::getCreateTime, Date.from(leftInstant), Date.from(rightInstant))
Date.from(leftInstant), Date.from(rightInstant))
); );
} }
private LocalDate issueDate(CycleTestTask t) {
return null;
}
/** /**
* 任务计划结束日期/超期日期 * 任务计划结束日期/超期日期
* *
@ -514,7 +505,7 @@ public class CycleTestTaskService2 {
} }
/** /**
* 临期天数 * 计算临期天数
* 临期天数 0时红色 * 临期天数 0时红色
* 临期天数 0~7 橙色 * 临期天数 0~7 橙色
* 临期天数 >= 7时黄色 * 临期天数 >= 7时黄色
@ -526,18 +517,18 @@ public class CycleTestTaskService2 {
* @param id * @param id
* @return * @return
*/ */
public String getCountDayToOut(Long id) { public Integer getCountDayToOut(Long id) {
CycleTestTask task = service.getById(id); CycleTestTask task = service.getById(id);
if (Objects.equals(task.getStatus(), CycleTestTaskConst.S_PENDING_ACCEPT) || if (Objects.equals(task.getStatus(), CycleTestTaskConst.S_PENDING_ACCEPT) ||
Objects.equals(task.getStatus(), CycleTestTaskConst.S_PENDING_TEST)) { Objects.equals(task.getStatus(), CycleTestTaskConst.S_PENDING_TEST)) {
LocalDate outLD = getOutDate(id); LocalDate outLD = getOutDate(id);
if (outLD == null) { if (outLD == null) {
return ""; return 0;
} }
long daysDiff = ChronoUnit.DAYS.between(LocalDate.now(), outLD); 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))) { if (todayLD.isEqual(remindLD) || (todayLD.isAfter(remindLD) && todayLD.isBefore(outLD))) {
task.setFlagOut(BaseValue.NO); task.setFlagOut(BaseValue.NO);
task.setFlagApproach(BaseValue.YES); task.setFlagApproach(BaseValue.YES);
// 更新状态 // todo:消息中心 进行临期提醒
service.updateById(task);
} }
// 设置临期天数
task.setDayToPlanedFinish(getCountDayToOut(task.getId()));
// 更新状态
service.updateById(task);
} }
} }
@ -591,6 +585,7 @@ public class CycleTestTaskService2 {
if (todayLD.isEqual(outLD) || todayLD.isAfter(outLD)) { if (todayLD.isEqual(outLD) || todayLD.isAfter(outLD)) {
task.setFlagOut(BaseValue.YES); task.setFlagOut(BaseValue.YES);
task.setFlagApproach(BaseValue.NO); task.setFlagApproach(BaseValue.NO);
// todo:消息中心 进行超期提醒
// 更新状态 // 更新状态
service.updateById(task); service.updateById(task);
} }

@ -10,6 +10,7 @@ import org.springblade.core.tool.api.R;
import org.springblade.desk.quality.excel.CycleTestExcel; import org.springblade.desk.quality.excel.CycleTestExcel;
import org.springblade.desk.quality.excel.CycleTestExcelImport; import org.springblade.desk.quality.excel.CycleTestExcelImport;
import org.springblade.desk.quality.pojo.entity.CycleTest; 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.request.CycleTestSubmit;
import org.springblade.desk.quality.pojo.vo.CycleTestVO; import org.springblade.desk.quality.pojo.vo.CycleTestVO;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -41,6 +42,10 @@ public interface ICycleTestService extends BaseService<CycleTest> {
*/ */
List<CycleTestExcel> exportCycleTest(Wrapper<CycleTest> queryWrapper); List<CycleTestExcel> exportCycleTest(Wrapper<CycleTest> queryWrapper);
IPage<CycleTestVO> listSearch(IPage<CycleTestVO> page, CycleTestSearch search);
List<CycleTestVO> listSearchWithoutPage(CycleTestSearch search);
/** /**
* VO * VO
* *

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService; import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.quality.excel.LiquidTankReportExcel; import org.springblade.desk.quality.excel.LiquidTankReportExcel;
import org.springblade.desk.quality.pojo.entity.LiquidTankReport; 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.pojo.vo.LiquidTankReportVO;
import java.util.List; import java.util.List;

@ -45,4 +45,6 @@ public interface ILiquidTankTaskCopyService extends BaseService<LiquidTankTaskCo
R generateReport(@Valid @RequestBody List<LiquidTankTaskCopy> list); R generateReport(@Valid @RequestBody List<LiquidTankTaskCopy> list);
R generateWave(@Valid @RequestBody List<LiquidTankTaskCopy> list); R generateWave(@Valid @RequestBody List<LiquidTankTaskCopy> list);
List<LiquidTankTaskCopyVO> getListByLiquidTankReportId(Long liquidTankReportId);
} }

@ -66,4 +66,10 @@ public interface ILiquidTankTaskService extends BaseService<LiquidTankTask> {
R finishFail(Long id, String finishReason); R finishFail(Long id, String finishReason);
void setVOValue(LiquidTankTaskVO vo); void setVOValue(LiquidTankTaskVO vo);
void generateAuto();
void checkRemind();
void checkOut();
} }

@ -19,20 +19,22 @@ import java.util.List;
* @since 2025-12-18 * @since 2025-12-18
*/ */
public interface IRelTankReportItemService extends BaseService<RelTankReportItem> { public interface IRelTankReportItemService extends BaseService<RelTankReportItem> {
/**
* 自定义分页
*
* @param page 分页参数
* @param relTankReportItem 查询参数
* @return IPage<RelTankReportItemVO>
*/
IPage<RelTankReportItemVO> selectRelTankReportItemPage(IPage<RelTankReportItemVO> page, RelTankReportItemVO relTankReportItem);
/** /**
* 导出数据 * 自定义分页
* *
* @param queryWrapper 查询条件 * @param page 分页参数
* @return List<RelTankReportItemExcel> * @param relTankReportItem 查询参数
*/ * @return IPage<RelTankReportItemVO>
List<RelTankReportItemExcel> exportRelTankReportItem(Wrapper<RelTankReportItem> queryWrapper); */
IPage<RelTankReportItemVO> selectRelTankReportItemPage(IPage<RelTankReportItemVO> page,
RelTankReportItemVO relTankReportItem);
/**
* 导出数据
*
* @param queryWrapper 查询条件
* @return List<RelTankReportItemExcel>
*/
List<RelTankReportItemExcel> exportRelTankReportItem(Wrapper<RelTankReportItem> queryWrapper);
} }

@ -14,6 +14,8 @@ import lombok.EqualsAndHashCode;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl; 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.api.R;
import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.config.RoleConfig; 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.mapper.CycleTestMapper;
import org.springblade.desk.quality.pojo.entity.CycleTest; import org.springblade.desk.quality.pojo.entity.CycleTest;
import org.springblade.desk.quality.pojo.entity.CycleTestItem; 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.request.CycleTestSubmit;
import org.springblade.desk.quality.pojo.vo.CycleTestVO; import org.springblade.desk.quality.pojo.vo.CycleTestVO;
import org.springblade.desk.quality.service.ICycleTestItemService; import org.springblade.desk.quality.service.ICycleTestItemService;
@ -35,6 +38,8 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* [周期试验] 服务实现类 * [周期试验] 服务实现类
@ -73,6 +78,16 @@ public class CycleTestServiceImpl extends BaseServiceImpl<CycleTestMapper, Cycle
return cycleTestList; return cycleTestList;
} }
@Override
public IPage<CycleTestVO> listSearch(IPage<CycleTestVO> page, CycleTestSearch search) {
return page.setRecords(baseMapper.listSearch(page, search));
}
@Override
public List<CycleTestVO> listSearchWithoutPage(CycleTestSearch search) {
return baseMapper.listSearchWithoutPage(search);
}
@Override @Override
public void setVOValue(CycleTestVO vo) { public void setVOValue(CycleTestVO vo) {

@ -169,6 +169,12 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
// 新建 InspectionTask // 新建 InspectionTask
InspectionTask task = new InspectionTask(); InspectionTask task = new InspectionTask();
task.setId(null); task.setId(null);
//
if (Objects.equals(fromType, InspectionTaskConst.FROM_TYPE_RB)) {
task.setProcessName(InspectionTaskConst.PROCESS_NAME_SJBZFH);
} else {
task.setProcessName("测试工序2000");
}
task.setStatus(InspectionTaskConst.CHECK_RESULT_TODO); task.setStatus(InspectionTaskConst.CHECK_RESULT_TODO);
// todo: fake data // todo: fake data
task.setWoId(2002227460172464129L); task.setWoId(2002227460172464129L);

@ -11,12 +11,17 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.basic.util.IdUtil;
import org.springblade.desk.quality.excel.LiquidTankReportExcel; import org.springblade.desk.quality.excel.LiquidTankReportExcel;
import org.springblade.desk.quality.mapper.LiquidTankReportMapper; import org.springblade.desk.quality.mapper.LiquidTankReportMapper;
import org.springblade.desk.quality.pojo.entity.LiquidTankReport; 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.pojo.vo.LiquidTankReportVO;
import org.springblade.desk.quality.service.ILiquidTankReportService; import org.springblade.desk.quality.service.ILiquidTankReportService;
import org.springblade.desk.quality.service.ILiquidTankTaskCopyService;
import org.springblade.desk.quality.service.IRelTankReportItemService;
import org.springblade.system.feign.IUserClient; import org.springblade.system.feign.IUserClient;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -32,7 +37,11 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Slf4j @Slf4j
public class LiquidTankReportServiceImpl extends BaseServiceImpl<LiquidTankReportMapper, LiquidTankReport> implements ILiquidTankReportService { public class LiquidTankReportServiceImpl extends BaseServiceImpl<LiquidTankReportMapper, LiquidTankReport>
implements ILiquidTankReportService {
@Resource
private IRelTankReportItemService relTankReportItemService;
@Resource @Resource
private IUserClient userClient; private IUserClient userClient;
@ -53,6 +62,8 @@ public class LiquidTankReportServiceImpl extends BaseServiceImpl<LiquidTankRepor
@Override @Override
public void setVOValue(LiquidTankReportVO vo) { public void setVOValue(LiquidTankReportVO vo) {
vo.setUpdateUserRealName(userClient.userInfo(vo.getUpdateUser()).getData().getUser().getRealName()); if (IdUtil.isValid(vo.getUpdateUser())) {
vo.setUpdateUserRealName(userClient.userInfo(vo.getUpdateUser()).getData().getUser().getRealName());
}
} }
} }

@ -5,7 +5,9 @@ package org.springblade.desk.quality.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -22,9 +24,11 @@ import org.springblade.desk.quality.pojo.vo.LiquidTankTaskCopyVO;
import org.springblade.desk.quality.pojo.vo.LiquidTankTaskVO; import org.springblade.desk.quality.pojo.vo.LiquidTankTaskVO;
import org.springblade.desk.quality.service.*; import org.springblade.desk.quality.service.*;
import org.springblade.desk.quality.util.CodeUtil; import org.springblade.desk.quality.util.CodeUtil;
import org.springblade.desk.quality.wrapper.LiquidTankTaskCopyWrapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -41,6 +45,9 @@ import java.util.List;
public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTaskCopyMapper, LiquidTankTaskCopy> public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTaskCopyMapper, LiquidTankTaskCopy>
implements ILiquidTankTaskCopyService { implements ILiquidTankTaskCopyService {
@Resource
private IWorkCenterService workCenterService;
@Resource @Resource
private ILiquidTankReportService reportService; private ILiquidTankReportService reportService;
@Resource @Resource
@ -53,8 +60,7 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTas
private IRelTankReportItemService relReportItemService; private IRelTankReportItemService relReportItemService;
@Resource @Resource
private IRelTankWaveItemService relTankWaveItemService; private IRelTankWaveItemService relTankWaveItemService;
@Resource
private IWorkCenterService workCenterService;
@Override @Override
public IPage<LiquidTankTaskCopyVO> selectLiquidTankTaskCopyPage(IPage<LiquidTankTaskCopyVO> page, LiquidTankTaskCopyVO liquidTankTaskCopy) { public IPage<LiquidTankTaskCopyVO> selectLiquidTankTaskCopyPage(IPage<LiquidTankTaskCopyVO> page, LiquidTankTaskCopyVO liquidTankTaskCopy) {
@ -86,7 +92,7 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTas
} }
WorkCenter wc = workCenterService.getById(list.get(0).getWorkCenterId()); WorkCenter wc = workCenterService.getById(list.get(0).getWorkCenterId());
if (wc == null) { if (wc == null) {
return R.fail("WorkCenter错误"); return R.fail("作业中心错误");
} }
// 保存copy任务list数据 // 保存copy任务list数据
updateBatchById(list); updateBatchById(list);
@ -103,7 +109,7 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTas
// 保存关联关系 // 保存关联关系
relReportItemService.save(item); relReportItemService.save(item);
} }
return R.success(); return R.success("生成报告成功");
} }
@Transactional @Transactional
@ -114,7 +120,7 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTas
} }
WorkCenter wc = workCenterService.getById(list.get(0).getWorkCenterId()); WorkCenter wc = workCenterService.getById(list.get(0).getWorkCenterId());
if (wc == null) { if (wc == null) {
return R.fail("WorkCenter错误"); return R.fail("作业中心错误");
} }
// 保存copy任务list数据 // 保存copy任务list数据
updateBatchById(list); updateBatchById(list);
@ -129,6 +135,22 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTas
// 保存关联关系 // 保存关联关系
relTankWaveItemService.save(item); relTankWaveItemService.save(item);
} }
return R.success(); return R.success("生成曲线成功");
}
@Override
public List<LiquidTankTaskCopyVO> getListByLiquidTankReportId(Long liquidTankReportId) {
LambdaQueryWrapper<RelTankReportItem> qw = Wrappers.lambdaQuery();
qw.eq(RelTankReportItem::getLiquidTankReportId, liquidTankReportId);
List<RelTankReportItem> relList = relReportItemService.list(qw);
List<LiquidTankTaskCopyVO> 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;
} }
} }

@ -293,17 +293,18 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl<LiquidTankTaskMap
} }
/** /**
* todo:
* 定时运行:每天00:00 * 定时运行:每天00:00
* 周期性自动生成槽液任务 * 周期性自动生成槽液任务
* *
* @return 所有生成的任务 * @return 所有生成的任务
*/ */
public List<LiquidTankTask> generateAuto() { public void generateAuto() {
log.info("========generate========start"); log.info("========generate========start");
// 如果是节假日,则跳过生成。 // 如果是节假日,则跳过生成。 todo:
if (false) { if (false) {
log.info("节假日,则跳过生成。"); log.info("节假日,则跳过生成。");
return null; return;
} }
// 查询所有启用的槽液。 // 查询所有启用的槽液。
List<LiquidTank> tankList = liquidTankService.list( List<LiquidTank> tankList = liquidTankService.list(
@ -327,7 +328,16 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl<LiquidTankTaskMap
rList.add(task); rList.add(task);
} }
log.info("========generate========end"); log.info("========generate========end");
return rList; }
@Override
public void checkRemind() {
// todo:
}
@Override
public void checkOut() {
// todo:
} }
/** /**

@ -2,6 +2,7 @@ package org.springblade.desk.quality.util;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.quality.pojo.request.JobExt; import org.springblade.desk.quality.pojo.request.JobExt;
import java.time.*; import java.time.*;
@ -244,6 +245,46 @@ public class JobExtUtil {
return dow == DayOfWeek.MONDAY; return dow == DayOfWeek.MONDAY;
} }
/**
* JobExt 对象语义化界面表达
*
* @param je
* @return
*/
public static String getShowText(JobExt je) {
if (je == null) {
return "";
}
Integer type = je.getJobType();
if (type == null || type == 0) {
return "无效的类型";
}
StringBuilder sb = new StringBuilder();
if (type.equals(WEEK)) {
if (StringUtils.isBlank(je.getJobTypeWeekValue())) {
return "";
}
List<Integer> list = Func.toIntList(je.getJobTypeWeekValue());
sb.append(list.size());
sb.append("次/周");
} else if (type.equals(MONTH)) {
if (StringUtils.isBlank(je.getJobTypeMonthValue())) {
return "";
}
List<String> list = Func.toStrList(je.getJobTypeMonthValue());
sb.append(list.size());
sb.append("次/月");
} else if (type.equals(YEAR)) {
if (StringUtils.isBlank(je.getJobTypeYearValue())) {
return "";
}
List<String> list = Func.toStrList(je.getJobTypeYearValue());
sb.append(list.size());
sb.append("次/年");
}
return sb.toString();
}
/** /**
* 测试执行 * 测试执行
* *

@ -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<LiquidTankReport, LiquidTankReportDetailVO> {
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;
}
}
Loading…
Cancel
Save