修复 excel导入,excel导出 的问题。

develop-QA
Tom Li 5 months ago
parent e7c3bfeda1
commit f308acce00
  1. 4
      blade-ops/blade-develop/src/test/java/org/springblade/test/CodeGeneratorVer2.java
  2. 23
      blade-ops/blade-develop/src/test/resources/templates/api-fast/controller.java.btl
  3. 1
      blade-ops/blade-develop/src/test/resources/templates/api-fast/entity.java.btl
  4. 1
      blade-ops/blade-develop/src/test/resources/templates/api-fast/entityExcel.java.btl
  5. 1
      blade-ops/blade-develop/src/test/resources/templates/api-fast/mapper.java.btl
  6. 1
      blade-ops/blade-develop/src/test/resources/templates/api-fast/service.java.btl
  7. 1
      blade-ops/blade-develop/src/test/resources/templates/api-fast/serviceImpl.java.btl
  8. 1
      blade-ops/blade-develop/src/test/resources/templates/api-fast/wrapper.java.btl
  9. 4
      blade-ops/blade-develop/src/test/resources/templates/code.properties
  10. 7
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/IotHardnessDeleteProcessor.java
  11. 32
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/IotThicknessDeleteProcessor.java
  12. 4
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/quality/package-info.java
  13. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/ColValue.java
  14. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/Excel.java
  15. 200
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java
  16. 35
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/TestController.java
  17. 215
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/gen/LiquidTankExportExcel.java
  18. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/gen/LiquidTankGenExcel.java
  19. 41
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/listener/LiquidTankListener.java
  20. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/gen/LiquidTankGenMapper.java
  21. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/dto/gen/LiquidTankGenDTO.java
  22. 140
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTank.java
  23. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/pojo/vo/gen/LiquidTankGenVO.java
  24. 30
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/LquidTankService.java
  25. 22
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/TestService.java
  26. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/gen/ILiquidTankGenService.java
  27. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/gen/LiquidTankGenServiceImpl.java
  28. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/wrapper/gen/LiquidTankGenWrapper.java

@ -41,7 +41,7 @@ public class CodeGeneratorVer2 {
/**
* 代码生成的模块名
*/
public static String CODE_NAME = "[周期试验任务]";
public static String CODE_NAME = "";
/**
* 代码所在服务名
*/
@ -57,7 +57,7 @@ public class CodeGeneratorVer2 {
/**
* 需要生成的表名(两者只能取其一)
*/
public static String[] INCLUDE_TABLES = {"QA_CYCLE_TEST_TASK"};
public static String[] INCLUDE_TABLES = {"QA_LIQUID_TANK"};
/**
* 需要排除的表名(两者只能取其一)
*/

@ -47,7 +47,7 @@ import jakarta.servlet.http.HttpServletResponse;
#if(hasServiceName) {
@RequestMapping("${serviceName!}/${entityKeyPath!}")
#}else{
@RequestMapping("/${entityKeyPath!}")
@RequestMapping("/${entityKey!}")
#}
@Tag(name = "${table.comment!}", description = "${table.comment!}接口")
#if(isNotEmpty(superControllerClass)){
@ -65,7 +65,7 @@ public class ${table.controllerName!} {
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@Operation(summary = "详情", description = "传入${entityKeyPath!}")
@Operation(summary = "详情", description = "传入${entityKey!}")
public R<${entityKey!}GenVO> detail(${entityKey!} ${entityKeyPath!}) {
${entityKey!} detail = ${entityKeyPath!}GenService.getOne(Condition.getQueryWrapper(${entityKeyPath!}));
return R.data(${entityKey!}GenWrapper.build().entityVO(detail));
@ -76,7 +76,7 @@ public class ${table.controllerName!} {
*/
@GetMapping("/list")
@ApiOperationSupport(order = 2)
@Operation(summary = "分页", description = "传入${entityKeyPath!}")
@Operation(summary = "分页", description = "传入${entityKey!}")
public R<IPage<${entityKey!}GenVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> ${entityKeyPath!}, Query query) {
IPage<${entityKey!}> pages = ${entityKeyPath!}GenService.page(Condition.getPage(query), Condition.getQueryWrapper(${entityKeyPath!}, ${entityKey!}.class));
return R.data(${entityKey!}GenWrapper.build().pageVO(pages));
@ -88,7 +88,7 @@ public class ${table.controllerName!} {
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@Operation(summary = "详情", description = "传入${entityKeyPath!}")
@Operation(summary = "详情", description = "传入${entityKey!}")
public R<${entityKey!}> detail(${entityKey!} ${entityKeyPath!}) {
${entityKey!} detail = ${entityKeyPath!}GenService.getOne(Condition.getQueryWrapper(${entityKeyPath!}));
return R.data(detail);
@ -99,7 +99,7 @@ public class ${table.controllerName!} {
*/
@GetMapping("/list")
@ApiOperationSupport(order = 2)
@Operation(summary = "分页", description = "传入${entityKeyPath!}")
@Operation(summary = "分页", description = "传入${entityKey!}")
public R<IPage<${entityKey!}Entity>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> ${entityKeyPath!}, Query query) {
IPage<${entityKey!}Entity> pages = ${entityKeyPath!}GenService.page(Condition.getPage(query), Condition.getQueryWrapper(${entityKeyPath!}, ${entityKey!}Entity.class));
return R.data(pages);
@ -112,7 +112,7 @@ public class ${table.controllerName!} {
*/
@GetMapping("/page")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入${entityKeyPath!}")
@Operation(summary = "分页", description = "传入${entityKey!}")
public R<IPage<${entityKey!}GenVO>> page(${entityKey!}GenVO ${entityKeyPath!}, Query query) {
IPage<${entityKey!}GenVO> pages = ${entityKeyPath!}GenService.select${entityKey!}Page(Condition.getPage(query), ${entityKeyPath!});
return R.data(pages);
@ -123,7 +123,7 @@ public class ${table.controllerName!} {
*/
@PostMapping("/save")
@ApiOperationSupport(order = 4)
@Operation(summary = "新增", description = "传入${entityKeyPath!}")
@Operation(summary = "新增", description = "传入${entityKey!}")
public R save(@Valid @RequestBody ${entityKey!} ${entityKeyPath!}) {
return R.status(${entityKeyPath!}GenService.save(${entityKeyPath!}));
}
@ -133,7 +133,7 @@ public class ${table.controllerName!} {
*/
@PostMapping("/update")
@ApiOperationSupport(order = 5)
@Operation(summary = "修改", description = "传入${entityKeyPath!}")
@Operation(summary = "修改", description = "传入${entityKey!}")
public R update(@Valid @RequestBody ${entityKey!} ${entityKeyPath!}) {
return R.status(${entityKeyPath!}GenService.updateById(${entityKeyPath!}));
}
@ -143,7 +143,7 @@ public class ${table.controllerName!} {
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 6)
@Operation(summary = "新增或修改", description = "传入${entityKeyPath!}")
@Operation(summary = "新增或修改", description = "传入${entityKey!}")
public R submit(@Valid @RequestBody ${entityKey!} ${entityKeyPath!}) {
return R.status(${entityKeyPath!}GenService.saveOrUpdate(${entityKeyPath!}));
}
@ -174,9 +174,9 @@ public class ${table.controllerName!} {
* 导出数据
*/
@IsAdmin
@GetMapping("/export-${entityKeyPath!}")
@GetMapping("/export-excel")
@ApiOperationSupport(order = 8)
@Operation(summary = "导出数据", description = "传入${entityKeyPath!}")
@Operation(summary = "导出数据", description = "传入${entityKey!}")
public void export${entityKey!}(@Parameter(hidden = true) @RequestParam Map<String, Object> ${entityKeyPath!}, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<${entityKey!}> queryWrapper = Condition.getQueryWrapper(${entityKeyPath!}, ${entityKey!}.class);
//if (!AuthUtil.isAdministrator()) {
@ -186,5 +186,4 @@ public class ${table.controllerName!} {
List<${entityKey!}GenExcel> list = ${entityKeyPath!}GenService.export${entityKey!}(queryWrapper);
ExcelUtil.export(response, "${table.comment!}数据" + DateUtil.time(), "${table.comment!}数据表", list, ${entityKey!}GenExcel.class);
}
}

@ -81,5 +81,4 @@ public class ${entityKey!} implements Serializable {
#}
#}
#}
}

@ -43,5 +43,4 @@ public class ${entityKey!}GenExcel implements Serializable {
private ${x.propertyType!} ${x.propertyName!};
#}
#}
}

@ -36,5 +36,4 @@ public interface ${table.mapperName!} extends ${superMapperClass!}<${entityKey!}
* @return List<${entityKey!}Excel>
*/
List<${entityKey!}GenExcel> export${entityKey!}(@Param("ew") Wrapper<${entityKey!}> queryWrapper);
}

@ -42,5 +42,4 @@ public interface ${table.serviceName!} extends IService<${entity!}> {
* @return List<${entityKey!}Excel>
*/
List<${entityKey!}GenExcel> export${entityKey!}(Wrapper<${entityKey!}> queryWrapper);
}

@ -44,5 +44,4 @@ public class ${table.serviceImplName!} extends ServiceImpl<${table.mapperName!},
//});
return ${entityKeyPath!}List;
}
}

@ -32,5 +32,4 @@ public class ${entityKey!}GenWrapper extends BaseEntityWrapper<${entityKey!}, ${
return ${entityKeyPath!}VO;
}
}

@ -6,7 +6,7 @@
# QA
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@192.168.76.131:1521/orcl
spring.datasource.url=jdbc:oracle:thin:@49.232.74.228:1521/orcl
spring.datasource.username=JONHON_MES
spring.datasource.password=oracle123456
spring.datasource.password=123456
author=Tom Shuo

@ -10,6 +10,10 @@ import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
import tech.powerjob.worker.log.OmsLogger;
/**
* 定时:每天03:00执行
* cron:0 0 3 * * ?
*/
@Component
@Data
@Slf4j
@ -20,8 +24,9 @@ public class IotHardnessDeleteProcessor implements BasicProcessor {
@Override
public ProcessResult process(TaskContext context) throws Exception {
OmsLogger omsLogger = context.getOmsLogger();
OmsLogger log = context.getOmsLogger();
Integer deleted = client.deleteHistory();
log.info("deleted = {}", deleted);
return new ProcessResult(true);
}
}

@ -0,0 +1,32 @@
package org.springblade.job.processor.quality;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.quality.feign.IIotThicknessClient;
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;
/**
* 定时:每天00:00执行
* cron:0 0 0 * * ?
*/
@Component
@Data
@Slf4j
public class IotThicknessDeleteProcessor implements BasicProcessor {
@Resource
private IIotThicknessClient client;
@Override
public ProcessResult process(TaskContext context) throws Exception {
OmsLogger log = context.getOmsLogger();
Integer deleted = client.deleteHistory();
log.info("deleted = {}", deleted);
return new ProcessResult(true);
}
}

@ -0,0 +1,4 @@
/**
* 质检模块相关定时任务
*/
package org.springblade.job.processor.quality;

@ -10,4 +10,9 @@ public interface ColValue {
* 禁用
*/
Integer STATE_DISABLE = 0;
/**
* admin user id
*/
Long ADMIN_USER_ID = 1123598821738675201L;
}

@ -0,0 +1,8 @@
package org.springblade.desk.quality.constant;
public interface Excel {
String EXT_XLS = ".xls";
String EXT_XLSX = ".xlsx";
}

@ -12,6 +12,8 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
@ -21,12 +23,14 @@ import org.springblade.core.secure.annotation.IsAdmin;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.quality.constant.Excel;
import org.springblade.desk.quality.excel.gen.LiquidTankGenExcel;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import org.springblade.desk.quality.pojo.vo.gen.LiquidTankGenVO;
import org.springblade.desk.quality.service.gen.ILiquidTankGenService;
import org.springblade.desk.quality.wrapper.gen.LiquidTankGenWrapper;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
@ -37,103 +41,131 @@ import java.util.Map;
* @author Tom Shuo
* @since 2025-11-14
*/
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("/qa/liquidTank")
@RequestMapping("/qa/LiquidTank")
@Tag(name = "[槽液]", description = "[槽液]接口")
public class LiquidTankController extends BladeController {
private final ILiquidTankGenService liquidTankGenService;
private final ILiquidTankGenService genService;
/**
* [槽液] 详情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@Operation(summary = "详情", description = "传入liquidTank")
public R<LiquidTankGenVO> detail(LiquidTank liquidTank) {
LiquidTank detail = liquidTankGenService.getOne(Condition.getQueryWrapper(liquidTank));
return R.data(LiquidTankGenWrapper.build().entityVO(detail));
}
/**
* [槽液] 详情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@Operation(summary = "详情", description = "传入liquidTank")
public R<LiquidTankGenVO> detail(LiquidTank liquidTank) {
LiquidTank detail = genService.getOne(Condition.getQueryWrapper(liquidTank));
return R.data(LiquidTankGenWrapper.build().entityVO(detail));
}
/**
* [槽液] 分页
*/
@GetMapping("/list")
@ApiOperationSupport(order = 2)
@Operation(summary = "分页", description = "传入liquidTank")
public R<IPage<LiquidTankGenVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTank, Query query) {
IPage<LiquidTank> pages = liquidTankGenService.page(Condition.getPage(query), Condition.getQueryWrapper(liquidTank, LiquidTank.class));
return R.data(LiquidTankGenWrapper.build().pageVO(pages));
}
/**
* [槽液] 分页
*/
@GetMapping("/list")
@ApiOperationSupport(order = 2)
@Operation(summary = "分页", description = "传入liquidTank")
public R<IPage<LiquidTankGenVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTank, Query query) {
IPage<LiquidTank> pages = genService.page(Condition.getPage(query), Condition.getQueryWrapper(liquidTank, LiquidTank.class));
return R.data(LiquidTankGenWrapper.build().pageVO(pages));
}
/**
* [槽液] 自定义分页
*/
@GetMapping("/page")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入liquidTank")
public R<IPage<LiquidTankGenVO>> page(LiquidTankGenVO liquidTank, Query query) {
IPage<LiquidTankGenVO> pages = liquidTankGenService.selectLiquidTankPage(Condition.getPage(query), liquidTank);
return R.data(pages);
}
/**
* [槽液] 自定义分页
*/
@GetMapping("/page")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入liquidTank")
public R<IPage<LiquidTankGenVO>> page(LiquidTankGenVO liquidTank, Query query) {
IPage<LiquidTankGenVO> pages = genService.selectLiquidTankPage(Condition.getPage(query), liquidTank);
return R.data(pages);
}
/**
* [槽液] 新增
*/
@PostMapping("/save")
@ApiOperationSupport(order = 4)
@Operation(summary = "新增", description = "传入liquidTank")
public R save(@Valid @RequestBody LiquidTank liquidTank) {
return R.status(liquidTankGenService.save(liquidTank));
}
/**
* [槽液] 新增
*/
@PostMapping("/save")
@ApiOperationSupport(order = 4)
@Operation(summary = "新增", description = "传入liquidTank")
public R save(@Valid @RequestBody LiquidTank liquidTank) {
return R.status(genService.save(liquidTank));
}
/**
* [槽液] 修改
*/
@PostMapping("/update")
@ApiOperationSupport(order = 5)
@Operation(summary = "修改", description = "传入liquidTank")
public R update(@Valid @RequestBody LiquidTank liquidTank) {
return R.status(liquidTankGenService.updateById(liquidTank));
}
/**
* [槽液] 修改
*/
@PostMapping("/update")
@ApiOperationSupport(order = 5)
@Operation(summary = "修改", description = "传入liquidTank")
public R update(@Valid @RequestBody LiquidTank liquidTank) {
return R.status(genService.updateById(liquidTank));
}
/**
* [槽液] 新增或修改
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 6)
@Operation(summary = "新增或修改", description = "传入liquidTank")
public R submit(@Valid @RequestBody LiquidTank liquidTank) {
return R.status(liquidTankGenService.saveOrUpdate(liquidTank));
}
/**
* [槽液] 新增或修改
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 6)
@Operation(summary = "新增或修改", description = "传入liquidTank")
public R submit(@Valid @RequestBody LiquidTank liquidTank) {
return R.status(genService.saveOrUpdate(liquidTank));
}
/**
* [槽液] 删除
*/
@PostMapping("/remove")
@ApiOperationSupport(order = 7)
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(liquidTankGenService.deleteLogic(Func.toLongList(ids)));
}
/**
* [槽液] 删除
*/
@PostMapping("/remove")
@ApiOperationSupport(order = 7)
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(genService.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-liquidTank")
@ApiOperationSupport(order = 8)
@Operation(summary = "导出数据", description = "传入liquidTank")
public void exportLiquidTank(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTank, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<LiquidTank> queryWrapper = Condition.getQueryWrapper(liquidTank, LiquidTank.class);
//if (!AuthUtil.isAdministrator()) {
// queryWrapper.lambda().eq(LiquidTank::getTenantId, bladeUser.getTenantId());
//}
//queryWrapper.lambda().eq(LiquidTankEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
List<LiquidTankGenExcel> list = liquidTankGenService.exportLiquidTank(queryWrapper);
ExcelUtil.export(response, "[槽液]数据" + DateUtil.time(), "[槽液]数据表", list, LiquidTankGenExcel.class);
}
/**
* 导出数据
*/
@GetMapping("/export-excel")
@ApiOperationSupport(order = 8)
@Operation(summary = "导出数据", description = "传入liquidTank")
public void exportLiquidTank(@Parameter(hidden = true) @RequestParam Map<String, Object> liquidTank,
BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<LiquidTank> queryWrapper = Condition.getQueryWrapper(liquidTank, LiquidTank.class);
//if (!AuthUtil.isAdministrator()) {
// queryWrapper.lambda().eq(LiquidTank::getTenantId, bladeUser.getTenantId());
//}
//queryWrapper.lambda().eq(LiquidTankEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
List<LiquidTankGenExcel> list = genService.exportLiquidTank(queryWrapper);
ExcelUtil.export(response, "[槽液]数据" + DateUtil.time(), "[槽液]数据表",
list, LiquidTankGenExcel.class);
}
/**
* 导入数据
*/
@PostMapping("/import-excel")
@ApiOperationSupport(order = 9)
@Operation(summary = "导入数据", description = "MultipartFile")
public R importLiquidTank(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return R.fail("请上传文件");
}
String fileName = file.getOriginalFilename();
if (StringUtils.isBlank(fileName)) {
return R.fail("文件名为空");
}
if (!StringUtils.endsWith(fileName, Excel.EXT_XLS) &&
!StringUtils.endsWith(fileName, Excel.EXT_XLSX)) {
return R.fail("格式不正确");
}
List<LiquidTank> list = ExcelUtil.read(file, 0, 1, LiquidTank.class);
if (list.isEmpty()) {
log.info("list.isEmpty");
}
list.forEach(lt -> log.info("LiquidTank - {}", lt));
genService.saveBatch(list);
return R.success("导入成功");
}
}

@ -0,0 +1,35 @@
package org.springblade.desk.quality.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.api.R;
import org.springblade.desk.quality.service.TestService;
import org.springblade.system.pojo.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@AllArgsConstructor
@RequestMapping("/qa/test")
@Tag(name = "[test]", description = "[test]接口")
public class TestController extends BladeController {
@Resource
private TestService service;
/**
* [] 详情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@Operation(summary = "详情", description = "详情")
public R<User> detail(@RequestParam Long userId) {
return service.getOneUser(userId);
}
}

@ -0,0 +1,215 @@
/**
* Author: Tom Shuo
*/
package org.springblade.desk.quality.excel.gen;
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 lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* [槽液] Excel实体类
*
* @author Tom Shuo
* @since 2025-11-14
*/
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class LiquidTankExportExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 任务前缀
*/
@ColumnWidth(20)
@ExcelProperty("任务前缀")
private String taskPrefix;
/**
* [作业中心]id
*/
@ColumnWidth(20)
@ExcelProperty("[作业中心]id")
private Long workCenterId;
/**
* 槽液编码/槽号
*/
@ColumnWidth(20)
@ExcelProperty("槽液编码/槽号")
private String code;
/**
* 待测成分
*/
@ColumnWidth(20)
@ExcelProperty("待测成分")
private String testElement;
/**
* 药品名称
*/
@ColumnWidth(20)
@ExcelProperty("药品名称")
private String drugName;
/**
* 药品[物料]id
*/
@ColumnWidth(20)
@ExcelProperty("药品[物料]id")
private Long drugMaterialId;
/**
* 药品[物料]编码
*/
@ColumnWidth(20)
@ExcelProperty("药品[物料]编码")
private String drugMaterialCode;
/**
* 药品物料名称
*/
@ColumnWidth(20)
@ExcelProperty("药品物料名称")
private String drugMaterialName;
/**
* 工艺含量
*/
@ColumnWidth(20)
@ExcelProperty("工艺含量")
private String processContent;
/**
* 目标值
*/
@ColumnWidth(20)
@ExcelProperty("目标值")
private Long targetValue;
/**
* 目标上下限
*/
@ColumnWidth(20)
@ExcelProperty("目标上下限")
private String bound;
/**
* 添加点
*/
@ColumnWidth(20)
@ExcelProperty("添加点")
private Long fillingLocation;
/**
* 体积
*/
@ColumnWidth(20)
@ExcelProperty("体积")
private Long volume;
/**
* 单位
*/
@ColumnWidth(20)
@ExcelProperty("单位")
private String unit;
/**
* 分析周期
*/
@ColumnWidth(20)
@ExcelProperty("分析周期")
private Integer analysisCycle;
/**
* 有效期
*/
@ColumnWidth(20)
@ExcelProperty("有效期")
private LocalDateTime validDate;
/**
* 上次化验日期
*/
@ColumnWidth(20)
@ExcelProperty("上次化验日期")
private LocalDateTime lastTest;
/**
* 槽液到期日期
*/
@ColumnWidth(20)
@ExcelProperty("槽液到期日期")
private LocalDateTime expiryDate;
/**
* 化验人[用户]id
*/
@ColumnWidth(20)
@ExcelProperty("化验人[用户]id")
private Long testUserId;
/**
* 工艺主管[用户]id
*/
@ColumnWidth(20)
@ExcelProperty("工艺主管[用户]id")
private Long processUserId;
/**
* 温度范围
*/
@ColumnWidth(20)
@ExcelProperty("温度范围")
private String temperatureRange;
/**
* 实测温度
*/
@ColumnWidth(20)
@ExcelProperty("实测温度")
private String temperatureActual;
/**
* ph范围
*/
@ColumnWidth(20)
@ExcelProperty("ph范围")
private String phRange;
/**
* 实测ph值
*/
@ColumnWidth(20)
@ExcelProperty("实测ph值")
private String phActual;
/**
* 目标上限
*/
@ColumnWidth(20)
@ExcelProperty("目标上限")
private String targetValueMax;
/**
* 目标下限
*/
@ColumnWidth(20)
@ExcelProperty("目标下限")
private String targetValueMin;
/**
* 药品批次号
*/
@ColumnWidth(20)
@ExcelProperty("药品批次号")
private String drugBatNum;
/**
* 加药后化验值
*/
@ColumnWidth(20)
@ExcelProperty("加药后化验值")
private String postTestValue;
/**
* 是否合格
*/
@ColumnWidth(20)
@ExcelProperty("是否合格")
private Long qualified;
/**
* [计量单位]id
*/
@ColumnWidth(20)
@ExcelProperty("[计量单位]id")
private Long unitId;
}

@ -4,23 +4,24 @@
package org.springblade.desk.quality.excel.gen;
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 lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import org.springblade.core.mp.base.BaseEntity;
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 java.io.Serial;
/**
* [槽液] Excel实体类
*
* @author Tom Shuo
* @since 2025-11-14
* @since 2025-11-18
*/
@Data
@ColumnWidth(25)

@ -0,0 +1,41 @@
package org.springblade.desk.quality.excel.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.ListUtils;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import org.springblade.desk.quality.service.gen.ILiquidTankGenService;
import java.util.List;
public class LiquidTankListener implements ReadListener<LiquidTank> {
private static final int BATCH_SIZE = 100;
public LiquidTankListener(ILiquidTankGenService genService) {
this.genService = genService;
}
private ILiquidTankGenService genService;
private List<LiquidTank> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_SIZE);
@Override
public void invoke(LiquidTank data, AnalysisContext context) {
cachedDataList.add(data);
if (cachedDataList.size() >= BATCH_SIZE) {
saveData();
cachedDataList.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
if (!cachedDataList.isEmpty()) {
saveData();
}
}
private void saveData() {
genService.saveBatch(cachedDataList);
}
}

@ -3,21 +3,20 @@
*/
package org.springblade.desk.quality.mapper.gen;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import org.springblade.desk.quality.pojo.vo.gen.LiquidTankGenVO;
import org.springblade.desk.quality.excel.gen.LiquidTankGenExcel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.quality.excel.gen.LiquidTankGenExcel;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import org.springblade.desk.quality.pojo.vo.gen.LiquidTankGenVO;
import java.util.List;
/**
* [槽液] Mapper 接口
*
* @author Tom Shuo
* @since 2025-11-14
* @since 2025-11-18
*/
public interface LiquidTankGenMapper extends BaseMapper<LiquidTank> {

@ -3,17 +3,16 @@
*/
package org.springblade.desk.quality.pojo.dto.gen;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import java.io.Serial;
/**
* [槽液] 数据传输对象实体类
*
* @author Tom Shuo
* @since 2025-11-14
* @since 2025-11-18
*/
@Data
@EqualsAndHashCode(callSuper = true)

@ -3,21 +3,21 @@
*/
package org.springblade.desk.quality.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import org.springblade.core.mp.base.BaseEntity;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* [槽液] 实体类
*
* @author Tom Shuo
* @since 2025-11-14
* @since 2025-11-18
*/
@Data
@TableName("QA_LIQUID_TANK")
@ -31,16 +31,140 @@ public class LiquidTank extends BaseEntity {
/**
* 任务前缀
*/
@Schema(description = "任务前缀")
public static final String COL_TASK_PREFIX = "TASK_PREFIX";
/**
* [作业中心]id
*/
public static final String COL_WORK_CENTER_ID = "WORK_CENTER_ID";
/**
* 槽液编码/槽号
*/
public static final String COL_CODE = "CODE";
/**
* 待测成分
*/
public static final String COL_TEST_ELEMENT = "TEST_ELEMENT";
/**
* 药品名称
*/
public static final String COL_DRUG_NAME = "DRUG_NAME";
/**
* 药品[物料]id
*/
public static final String COL_DRUG_MATERIAL_ID = "DRUG_MATERIAL_ID";
/**
* 药品[物料]编码
*/
public static final String COL_DRUG_MATERIAL_CODE = "DRUG_MATERIAL_CODE";
/**
* 药品物料名称
*/
public static final String COL_DRUG_MATERIAL_NAME = "DRUG_MATERIAL_NAME";
/**
* 工艺含量
*/
public static final String COL_PROCESS_CONTENT = "PROCESS_CONTENT";
/**
* 目标值
*/
public static final String COL_TARGET_VALUE = "TARGET_VALUE";
/**
* 目标上下限
*/
public static final String COL_BOUND = "BOUND";
/**
* 添加点
*/
public static final String COL_FILLING_LOCATION = "FILLING_LOCATION";
/**
* 体积
*/
public static final String COL_VOLUME = "VOLUME";
/**
* 单位
*/
public static final String COL_UNIT = "UNIT";
/**
* 分析周期
*/
public static final String COL_ANALYSIS_CYCLE = "ANALYSIS_CYCLE";
/**
* 有效期
*/
public static final String COL_VALID_DATE = "VALID_DATE";
/**
* 上次化验日期
*/
public static final String COL_LAST_TEST = "LAST_TEST";
/**
* 槽液到期日期
*/
public static final String COL_EXPIRY_DATE = "EXPIRY_DATE";
/**
* 化验人[用户]id
*/
public static final String COL_TEST_USER_ID = "TEST_USER_ID";
/**
* 工艺主管[用户]id
*/
public static final String COL_PROCESS_USER_ID = "PROCESS_USER_ID";
/**
* 温度范围
*/
public static final String COL_TEMPERATURE_RANGE = "TEMPERATURE_RANGE";
/**
* 实测温度
*/
public static final String COL_TEMPERATURE_ACTUAL = "TEMPERATURE_ACTUAL";
/**
* ph范围
*/
public static final String COL_PH_RANGE = "PH_RANGE";
/**
* 实测ph值
*/
public static final String COL_PH_ACTUAL = "PH_ACTUAL";
/**
* 目标上限
*/
public static final String COL_TARGET_VALUE_MAX = "TARGET_VALUE_MAX";
/**
* 目标下限
*/
public static final String COL_TARGET_VALUE_MIN = "TARGET_VALUE_MIN";
/**
* 药品批次号
*/
public static final String COL_DRUG_BAT_NUM = "DRUG_BAT_NUM";
/**
* 加药后化验值
*/
public static final String COL_POST_TEST_VALUE = "POST_TEST_VALUE";
/**
* 是否合格
*/
public static final String COL_QUALIFIED = "QUALIFIED";
/**
* [计量单位]id
*/
public static final String COL_UNIT_ID = "UNIT_ID";
/**
* 任务前缀
*/
@ExcelProperty(value = "任务前缀", index = 0)
@Schema(description = "任务前缀")
private String taskPrefix;
/**
* [作业中心]id
*/
@ExcelProperty(value = "[作业中心]id", index = 1)
@Schema(description = "[作业中心]id")
private BigDecimal workCenterId;
/**
* 槽液编码/槽号
*/
@ExcelProperty(value = "槽液编码/槽号", index = 2)
@Schema(description = "槽液编码/槽号")
private String code;
/**

@ -3,17 +3,16 @@
*/
package org.springblade.desk.quality.pojo.vo.gen;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import java.io.Serial;
/**
* [槽液] 视图实体类
*
* @author Tom Shuo
* @since 2025-11-14
* @since 2025-11-18
*/
@Data
@EqualsAndHashCode(callSuper = true)

@ -0,0 +1,30 @@
package org.springblade.desk.quality.service;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.quality.mapper.gen.LiquidTankGenMapper;
import org.springframework.stereotype.Service;
@Service
@Data
@Slf4j
public class LquidTankService {
@Resource
private LiquidTankGenMapper mapper;
/**
* todo: 尚未确定具体实现
* 生产需求计算
*
* @return
*/
public Boolean productCal() {
return Boolean.TRUE;
}
public void importExcel() {
}
}

@ -0,0 +1,22 @@
package org.springblade.desk.quality.service;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
import org.springframework.stereotype.Service;
@Service
@Data
@Slf4j
public class TestService {
@Resource
private IUserClient userClient;
public R<User> getOneUser(Long userId) {
return userClient.userInfoById(userId);
}
}

@ -4,19 +4,18 @@
package org.springblade.desk.quality.service.gen;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.quality.excel.gen.LiquidTankGenExcel;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import org.springblade.desk.quality.pojo.vo.gen.LiquidTankGenVO;
import org.springblade.desk.quality.excel.gen.LiquidTankGenExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
/**
* [槽液] 服务类
*
* @author Tom Shuo
* @since 2025-11-14
* @since 2025-11-18
*/
public interface ILiquidTankGenService extends BaseService<LiquidTank> {
/**

@ -3,23 +3,22 @@
*/
package org.springblade.desk.quality.service.impl.gen;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.quality.excel.gen.LiquidTankGenExcel;
import org.springblade.desk.quality.mapper.gen.LiquidTankGenMapper;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import org.springblade.desk.quality.pojo.vo.gen.LiquidTankGenVO;
import org.springblade.desk.quality.excel.gen.LiquidTankGenExcel;
import org.springblade.desk.quality.mapper.gen.LiquidTankGenMapper;
import org.springblade.desk.quality.service.gen.ILiquidTankGenService;
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.util.List;
/**
* [槽液] 服务实现类
*
* @author Tom Shuo
* @since 2025-11-14
* @since 2025-11-18
*/
@Service
public class LiquidTankGenServiceImpl extends BaseServiceImpl<LiquidTankGenMapper, LiquidTank> implements ILiquidTankGenService {

@ -7,14 +7,13 @@ import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.desk.quality.pojo.entity.LiquidTank;
import org.springblade.desk.quality.pojo.vo.gen.LiquidTankGenVO;
import java.util.Objects;
/**
* [槽液] 包装类,返回视图层所需的字段
*
* @author Tom Shuo
* @since 2025-11-14
* @since 2025-11-18
*/
public class LiquidTankGenWrapper extends BaseEntityWrapper<LiquidTank, LiquidTankGenVO> {

Loading…
Cancel
Save