质量模块。

develop-QA
Tom Li 3 months ago
parent 4100dfed1e
commit 9c0941f05d
  1. 48
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/InspectionTask.java
  2. 9
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/ReviewSheet.java
  3. 9
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/WorkPlanItemDetail.java
  4. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/request/InspectionTaskSearch.java
  5. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskListVO.java
  6. 18
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/ReviewSheetDutyBatchVO.java
  7. 18
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/ReviewSheetDutyPartVO.java
  8. 18
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/ReviewSheetRelevantBatchVO.java
  9. 18
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/ReviewSheetRelevantPartVO.java
  10. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemDetailVO.java
  11. 21
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/config/RoleConfig.java
  12. 315
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/RelTeamSetUserController.java
  13. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/InspectionTaskConst.java
  14. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/constant/ReviewSheetConst.java
  15. 22
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/InspectionTaskController.java
  16. 110
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/ReviewSheetController.java
  17. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/excel/WorkPlanItemDetailExcel.java
  18. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/InspectionTaskMapper.java
  19. 83
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/InspectionTaskMapper.xml
  20. 47
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.java
  21. 174
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml
  22. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/WorkPlanItemDetailMapper.xml
  23. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IInspectionTaskService.java
  24. 101
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/InspectionTaskServiceImpl.java
  25. 65
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ReviewSheetServiceImpl.java
  26. 12
      blade-service/blade-desk/src/main/resources/application-dev.yml

@ -40,9 +40,9 @@ public class InspectionTask extends BaseEntity {
*/
public static final String COL_NAME = "NAME";
/**
* []id
* [车间订]id
*/
public static final String COL_WORK_ORDER_ID = "WORK_ORDER_ID";
public static final String COL_WO_ID = "WO_ID";
/**
* [制品]id
*/
@ -68,9 +68,9 @@ public class InspectionTask extends BaseEntity {
*/
public static final String COL_BATCH_NUMBER = "BATCH_NUMBER";
/**
* []编码
* [车间订]编码
*/
public static final String COL_WORK_ORDER_CODE = "WORK_ORDER_CODE";
public static final String COL_WO_CODE = "WO_CODE";
/**
* [工序]编码
*/
@ -156,9 +156,17 @@ public class InspectionTask extends BaseEntity {
*/
public static final String COL_FROM_TYPE = "FROM_TYPE";
/**
* 生产订单类型
* [生产订单]类型
*/
public static final String COL_YIELD_ORDER_TYPE = "YIELD_ORDER_TYPE";
/**
* [生产订单]id
*/
public static final String COL_YIELD_ORDER_ID = "YIELD_ORDER_ID";
/**
* 接收日期
*/
public static final String COL_RECEIVE_DATE = "RECEIVE_DATE";
/**
* [检验任务]编码
@ -171,15 +179,15 @@ public class InspectionTask extends BaseEntity {
@Schema(description = "[检验任务]类型")
private Long inspectionTaskType;
/**
* [检验任务]
* [检验任务]名称
*/
@Schema(description = "[检验任务]")
@Schema(description = "[检验任务]名称")
private String name;
/**
* []id
* [车间订]id
*/
@Schema(description = "[单]id")
private Long workOrderId;
@Schema(description = "[车间订单]id")
private Long woId;
/**
* [制品]id
*/
@ -211,10 +219,10 @@ public class InspectionTask extends BaseEntity {
@Schema(description = "生产批次号")
private Long batchNumber;
/**
* []编码
* [车间订]编码
*/
@Schema(description = "[单]编码")
private String workOrderCode;
@Schema(description = "[车间订单]编码")
private String woCode;
/**
* [工序]编码
*/
@ -321,8 +329,18 @@ public class InspectionTask extends BaseEntity {
@Schema(description = "来源类型")
private Integer fromType;
/**
* 生产订单类型
* [生产订单]类型
*/
@Schema(description = "生产订单类型")
@Schema(description = "[生产订单]类型")
private Integer yieldOrderType;
/**
* [生产订单]id
*/
@Schema(description = "[生产订单]id")
private Integer yieldOrderId;
/**
* 接收日期
*/
@Schema(description = "接收日期")
private LocalDateTime receiveDate;
}

@ -19,6 +19,9 @@ import java.time.LocalDateTime;
* qc_review_sheet_internal QcReviewSheetInternal 热表内部审理记录表
* qc_review_sheet_internalredo QcReviewSheetInternalredo 热表内部审理记录表返修
* qc_review_sheet_internalsj QcReviewSheetInternalsj 热表内部审理记录表烧结
* <p>
* <p>
* status 默认 -1
*
* @author Tom Shuo
* @since 2026-01-06
@ -129,7 +132,7 @@ public class ReviewSheet extends BaseEntity {
*/
public static final String COL_BIZ_TYPE = "BIZ_TYPE";
/**
* 物料号
* 物料号/零件号
*/
public static final String COL_PART_CODE = "PART_CODE";
/**
@ -306,9 +309,9 @@ public class ReviewSheet extends BaseEntity {
@Schema(description = "业务类型-[1]:内部审理返修;[2]:内部审理报废;[3]:ERP审理;")
private Integer bizType;
/**
* 物料号
* 物料号/零件号
*/
@Schema(description = "物料号")
@Schema(description = "物料号/零件号")
private String partCode;
/**
* 批次号

@ -85,9 +85,9 @@ public class WorkPlanItemDetail extends BaseEntity {
@Schema(description = "[工序检验项]id")
private Long workPlanItemId;
/**
* 测量类型-[1]镀前;[2]:镀后;
* 测量类型;
*/
@Schema(description = "测量类型-[1]镀前;[2]:镀后;")
@Schema(description = "测量类型")
private String testType;
/**
* 尺寸
@ -144,4 +144,9 @@ public class WorkPlanItemDetail extends BaseEntity {
*/
@Schema(description = "[量具]id")
private Long mtId;
/**
* 实际[量具]id
*/
@Schema(description = "实际[量具]id")
private Long actMtId;
}

@ -25,12 +25,16 @@ public class InspectionTaskSearch extends InspectionTask {
private String prodIdent;
@Schema(description = "需求部门")
private String needDeptName;
@Schema(description = "需求[部门]id")
private String needDeptId;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "分批号")
private String poBatchNo;
@Schema(description = "当前工序")
private Long currentProcessId;
@Schema(description = "上个工序")
private Long frontProcessId;
@Schema(description = "下个工序")
private Long nextProcessId;
@Schema(description = "生产数量")

@ -72,7 +72,7 @@ public class InspectionTaskListVO extends InspectionTask {
@Schema(description = "生产数量")
private Double poQty = 2002d;
@Schema(description = "接收时间")
private LocalDateTime receiveDate = LocalDateTime.now();
private LocalDateTime receiveDate;
@Schema(description = "订单-产品号")
@ -106,5 +106,5 @@ public class InspectionTaskListVO extends InspectionTask {
private String sameNo = "tank-1001";
// todo:
@Schema(description = "材料")
private String material = "铜";
private String material = "铜";
}

@ -0,0 +1,18 @@
package org.springblade.desk.quality.pojo.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 责任批号
*/
@Data
@EqualsAndHashCode()
public class ReviewSheetDutyBatchVO {
private String dutyBatch;
public ReviewSheetDutyBatchVO(String dutyBatch) {
this.dutyBatch = dutyBatch;
}
}

@ -0,0 +1,18 @@
package org.springblade.desk.quality.pojo.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 责任零件
*/
@Data
@EqualsAndHashCode()
public class ReviewSheetDutyPartVO {
private String dutyPart;
public ReviewSheetDutyPartVO(String dutyPart) {
this.dutyPart = dutyPart;
}
}

@ -0,0 +1,18 @@
package org.springblade.desk.quality.pojo.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 相关批号
*/
@Data
@EqualsAndHashCode()
public class ReviewSheetRelevantBatchVO {
private String relevantBatch;
public ReviewSheetRelevantBatchVO(String relevantBatch) {
this.relevantBatch = relevantBatch;
}
}

@ -0,0 +1,18 @@
package org.springblade.desk.quality.pojo.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 相关零件
*/
@Data
@EqualsAndHashCode()
public class ReviewSheetRelevantPartVO {
private String relevantPart;
public ReviewSheetRelevantPartVO(String relevantPart) {
this.relevantPart = relevantPart;
}
}

@ -24,4 +24,7 @@ public class WorkPlanItemDetailVO extends WorkPlanItemDetail {
@Schema(description = "[量具]名称")
private String mtName = "标尺1";
@Schema(description = "实际[量具]名称")
private String actMtName = "游标卡尺QW";
}

@ -10,12 +10,27 @@ import org.springframework.stereotype.Component;
public class RoleConfig {
/**
* 工艺员角色id
* 工艺员[角色]id
*/
private Long processEngineerId;
/**
* 工艺员角色alias
* 工艺员[角色]alias
*/
private String processEngineerAlias;
/**
* 热表检验员[角色]id
*/
private Long rbCheckerId;
/**
* 热表检验员[角色]alias
*/
private String rbCheckerAlias;
/**
* 烧结检验员[角色]id
*/
private Long sjCheckerId;
/**
* 烧结检验员[角色]alias
*/
private String sjCheckerAlias;
}

@ -24,6 +24,7 @@ import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.constant.BAModuleConst;
import org.springblade.desk.basic.excel.RelTeamSetUserExcel;
import org.springblade.desk.basic.pojo.entity.RelTeamSetUser;
import org.springblade.desk.basic.pojo.vo.RelTeamSetUserVO;
@ -45,7 +46,7 @@ import java.util.stream.Collectors;
* @since 2026-01-13
*/
@RestController
@RequestMapping("/RelTeamSetUser")
@RequestMapping(BAModuleConst.CONTROLLER_PREFIX + "/RelTeamSetUser")
@Data
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ -54,184 +55,184 @@ import java.util.stream.Collectors;
public class RelTeamSetUserController extends BladeController {
@Resource
private IRelTeamSetUserService service;
/**
* [班组用户关联] 详情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 10)
@Operation(summary = "详情", description = "传入RelTeamSetUser Obj")
public R<RelTeamSetUserVO> detail(RelTeamSetUser relTeamSetUser) {
QueryWrapper<RelTeamSetUser> qw = Condition.getQueryWrapper(relTeamSetUser);
RelTeamSetUser detail = service.getOne(qw);
RelTeamSetUserVO detailVO = RelTeamSetUserWrapper.build().entityVO(detail);
service.setVOValue(detailVO);
return R.data(detailVO);
}
/**
* [班组用户关联] list分页
*/
@GetMapping("/list")
@ApiOperationSupport(order = 20)
@Operation(summary = "list分页", description = "传入RelTeamSetUser Obj")
public R<IPage<RelTeamSetUserVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> relTeamSetUser,
Query query) {
private IRelTeamSetUserService service;
/**
* [班组用户关联] 详情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 10)
@Operation(summary = "详情", description = "传入RelTeamSetUser Obj")
public R<RelTeamSetUserVO> detail(RelTeamSetUser relTeamSetUser) {
QueryWrapper<RelTeamSetUser> qw = Condition.getQueryWrapper(relTeamSetUser);
RelTeamSetUser detail = service.getOne(qw);
RelTeamSetUserVO detailVO = RelTeamSetUserWrapper.build().entityVO(detail);
service.setVOValue(detailVO);
return R.data(detailVO);
}
/**
* [班组用户关联] list分页
*/
@GetMapping("/list")
@ApiOperationSupport(order = 20)
@Operation(summary = "list分页", description = "传入RelTeamSetUser Obj")
public R<IPage<RelTeamSetUserVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> relTeamSetUser,
Query query) {
QueryWrapper<RelTeamSetUser> qw = Condition.getQueryWrapper(relTeamSetUser, RelTeamSetUser.class);
IPage<RelTeamSetUser> pages = service.page(Condition.getPage(query), qw);
IPage<RelTeamSetUserVO> pagesVO = RelTeamSetUserWrapper.build().pageVO(pages);
pagesVO.getRecords()
.stream()
.peek(service::setVOValue)
.collect(Collectors.toList());
return R.data(pagesVO);
}
/**
* [班组用户关联] page分页
*/
@GetMapping("/page")
@ApiOperationSupport(order = 21)
@Operation(summary = "page分页", description = "传入RelTeamSetUser Obj")
public R<IPage<RelTeamSetUserVO>> page(RelTeamSetUserVO relTeamSetUser, Query query) {
IPage<RelTeamSetUserVO> pagesVO = service.selectRelTeamSetUserPage(
Condition.getPage(query), relTeamSetUser
);
return R.data(pagesVO);
}
/**
IPage<RelTeamSetUser> pages = service.page(Condition.getPage(query), qw);
IPage<RelTeamSetUserVO> pagesVO = RelTeamSetUserWrapper.build().pageVO(pages);
pagesVO.getRecords()
.stream()
.peek(service::setVOValue)
.collect(Collectors.toList());
return R.data(pagesVO);
}
/**
* [班组用户关联] page分页
*/
@GetMapping("/page")
@ApiOperationSupport(order = 21)
@Operation(summary = "page分页", description = "传入RelTeamSetUser Obj")
public R<IPage<RelTeamSetUserVO>> page(RelTeamSetUserVO relTeamSetUser, Query query) {
IPage<RelTeamSetUserVO> pagesVO = service.selectRelTeamSetUserPage(
Condition.getPage(query), relTeamSetUser
);
return R.data(pagesVO);
}
/**
* [班组用户关联] list下拉选择
*/
@GetMapping("/listForSelect")
@ApiOperationSupport(order = 22)
@Operation(summary = "list下拉选择", description = "")
@Operation(summary = "list下拉选择", description = "")
public R<List<RelTeamSetUserVO>> listForSelect() {
List<RelTeamSetUser> list = service.list();
List<RelTeamSetUserVO> listVO = RelTeamSetUserWrapper.build().listVO(list);
return R.data(listVO);
List<RelTeamSetUser> list = service.list();
List<RelTeamSetUserVO> listVO = RelTeamSetUserWrapper.build().listVO(list);
return R.data(listVO);
}
/**
* [班组用户关联] 新增一条
*/
@PostMapping("/save")
@ApiOperationSupport(order = 30)
@Operation(summary = "新增一条", description = "传入RelTeamSetUser Obj")
public R save(@Valid @RequestBody RelTeamSetUser addOne) {
addOne.setId(null);
return R.status(service.save(addOne));
}
/**
* [班组用户关联] 新增一条
*/
@PostMapping("/save")
@ApiOperationSupport(order = 30)
@Operation(summary = "新增一条", description = "传入RelTeamSetUser Obj")
public R save(@Valid @RequestBody RelTeamSetUser addOne) {
addOne.setId(null);
return R.status(service.save(addOne));
}
/**
/**
* [班组用户关联] 新增批量
*/
@PostMapping("/saveBat")
@ApiOperationSupport(order = 31)
@Operation(summary = "新增批量", description = "传入RelTeamSetUser List")
public R saveBat(@Valid @RequestBody List<RelTeamSetUser> addList) {
addList.forEach(one -> {
one.setId(null);
});
return R.status(service.saveBatch(addList));
}
/**
* [班组用户关联] 修改一条
*/
@PostMapping("/update")
@ApiOperationSupport(order = 40)
@Operation(summary = "修改一条", description = "传入RelTeamSetUser Obj")
public R update(@Valid @RequestBody RelTeamSetUser updateOne) {
return R.status(service.updateById(updateOne));
}
@PostMapping("/saveBat")
@ApiOperationSupport(order = 31)
@Operation(summary = "新增批量", description = "传入RelTeamSetUser List")
public R saveBat(@Valid @RequestBody List<RelTeamSetUser> addList) {
addList.forEach(one -> {
one.setId(null);
});
return R.status(service.saveBatch(addList));
}
/**
* [班组用户关联] 修改一条
*/
@PostMapping("/update")
@ApiOperationSupport(order = 40)
@Operation(summary = "修改一条", description = "传入RelTeamSetUser Obj")
public R update(@Valid @RequestBody RelTeamSetUser updateOne) {
return R.status(service.updateById(updateOne));
}
/**
* [班组用户关联] 修改批量
*/
@PostMapping("/updateBat")
@ApiOperationSupport(order = 41)
@Operation(summary = "修改批量", description = "传入RelTeamSetUser List")
@Operation(summary = "修改批量", description = "传入RelTeamSetUser List")
public R updateBat(@Valid @RequestBody List<RelTeamSetUser> updateList) {
return R.status(service.updateBatchById(updateList));
}
/**
* [班组用户关联] 新增或修改一条
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 50)
@Operation(summary = "新增或修改一条", description = "传入RelTeamSetUser Obj")
public R submit(@Valid @RequestBody RelTeamSetUser mergeOne) {
return R.status(service.saveOrUpdate(mergeOne));
}
/**
/**
* [班组用户关联] 新增或修改一条
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 50)
@Operation(summary = "新增或修改一条", description = "传入RelTeamSetUser Obj")
public R submit(@Valid @RequestBody RelTeamSetUser mergeOne) {
return R.status(service.saveOrUpdate(mergeOne));
}
/**
* [班组用户关联] 新增或修改批量
*/
@PostMapping("/submitBat")
@ApiOperationSupport(order = 51)
@Operation(summary = "新增或修改批量", description = "传入RelTeamSetUser List")
public R submitBat(@Valid @RequestBody List<RelTeamSetUser> mergeList) {
return R.status(service.saveOrUpdateBatch(mergeList));
}
/**
* [班组用户关联] 逻辑删除
*/
@PostMapping("/remove")
@ApiOperationSupport(order = 61)
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(service.deleteLogic(Func.toLongList(ids)));
}
/**
* [班组用户关联] 导出Excel
*/
@GetMapping("/exportExcel")
@ApiOperationSupport(order = 70)
@Operation(summary = "导出Excel", description = "传入RelTeamSetUser")
public void exportExcel(@Parameter(hidden = true) @RequestParam Map<String, Object> relTeamSetUser,
BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<RelTeamSetUser> qw = Condition.getQueryWrapper(relTeamSetUser, RelTeamSetUser.class);
//if (!AuthUtil.isAdministrator()) {
// queryWrapper.lambda().eq(RelTeamSetUser::getTenantId, bladeUser.getTenantId());
//}
//queryWrapper.lambda().eq(RelTeamSetUserEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
List<RelTeamSetUserExcel> list = service.exportRelTeamSetUser(qw);
ExcelUtil.export(response, "[班组用户关联]数据" + DateUtil.time(),
"[班组用户关联]数据表", list, RelTeamSetUserExcel.class);
}
/**
@PostMapping("/submitBat")
@ApiOperationSupport(order = 51)
@Operation(summary = "新增或修改批量", description = "传入RelTeamSetUser List")
public R submitBat(@Valid @RequestBody List<RelTeamSetUser> mergeList) {
return R.status(service.saveOrUpdateBatch(mergeList));
}
/**
* [班组用户关联] 逻辑删除
*/
@PostMapping("/remove")
@ApiOperationSupport(order = 61)
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(service.deleteLogic(Func.toLongList(ids)));
}
/**
* [班组用户关联] 导出Excel
*/
@GetMapping("/exportExcel")
@ApiOperationSupport(order = 70)
@Operation(summary = "导出Excel", description = "传入RelTeamSetUser")
public void exportExcel(@Parameter(hidden = true) @RequestParam Map<String, Object> relTeamSetUser,
BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<RelTeamSetUser> qw = Condition.getQueryWrapper(relTeamSetUser, RelTeamSetUser.class);
//if (!AuthUtil.isAdministrator()) {
// queryWrapper.lambda().eq(RelTeamSetUser::getTenantId, bladeUser.getTenantId());
//}
//queryWrapper.lambda().eq(RelTeamSetUserEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
List<RelTeamSetUserExcel> list = service.exportRelTeamSetUser(qw);
ExcelUtil.export(response, "[班组用户关联]数据" + DateUtil.time(),
"[班组用户关联]数据表", list, RelTeamSetUserExcel.class);
}
/**
* [班组用户关联] 下载Excel模板
*/
@GetMapping("/downloadExcelTemplate")
@ApiOperationSupport(order = 71)
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<org.springframework.core.io.Resource> downloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/QA/ImportTemplate-CycleTestItem.xls",
"导入模版-周期试验项目.xls");
}
/**
* [班组用户关联] 导入Excel
*/
@PostMapping("/importExcel")
@ApiOperationSupport(order = 72)
@Operation(summary = "导入Excel", description = "MultipartFile")
public R importExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) {
return checkR;
}
List<RelTeamSetUser> importList = ExcelUtil.read(
file, 0, 1, RelTeamSetUser.class
);
return R.status(service.saveBatch(importList));
}
@GetMapping("/downloadExcelTemplate")
@ApiOperationSupport(order = 71)
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<org.springframework.core.io.Resource> downloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/QA/ImportTemplate-CycleTestItem.xls",
"导入模版-周期试验项目.xls");
}
/**
* [班组用户关联] 导入Excel
*/
@PostMapping("/importExcel")
@ApiOperationSupport(order = 72)
@Operation(summary = "导入Excel", description = "MultipartFile")
public R importExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) {
return checkR;
}
List<RelTeamSetUser> importList = ExcelUtil.read(
file, 0, 1, RelTeamSetUser.class
);
return R.status(service.saveBatch(importList));
}
}

@ -5,12 +5,12 @@ public interface InspectionTaskConst {
/**
* 热表
*/
Integer TYPE_RB = 1;
Integer FROM_TYPE_RB = 1;
/**
* 烧结
*/
Integer TYPE_SJ = 2;
Integer FROM_TYPE_SJ = 2;
/**
* 未检验

@ -5,11 +5,6 @@ package org.springblade.desk.quality.constant;
*/
public interface ReviewSheetConst {
/**
* 初始化
*/
Integer S_INIT = 0;
interface BizType {
/**
* [1]:内部审理返修
@ -26,10 +21,14 @@ public interface ReviewSheetConst {
}
interface STATUS {
/**
* 初始化
*/
Integer S_INIT = -1;
/**
* 新建 内部 ERP 都用
*/
Integer S_NEW = 1;
Integer S_NEW = -1;
/**
* 待审理 内部用 ERP不用
*/
@ -56,7 +55,7 @@ public interface ReviewSheetConst {
/**
* 初始化
*/
Integer REVIEW_STATUS_0 = 0;
Integer REVIEW_STATUS_INIT = -1;
/**
* 让步接收
*/
@ -87,6 +86,8 @@ public interface ReviewSheetConst {
Integer REVIEW_STATUS_15 = 15;
}
// 一期状态 整合
// interface SELF {
// /**
// * 编制中

@ -14,17 +14,24 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.config.RoleConfig;
import org.springblade.desk.basic.constant.BaseCol;
import org.springblade.desk.basic.pojo.vo.UrlVO;
import org.springblade.desk.quality.constant.CycleTestTaskConst;
import org.springblade.desk.quality.constant.InspectionTaskConst;
import org.springblade.desk.quality.constant.QAModuleConst;
import org.springblade.desk.quality.excel.InspectionTaskExcel;
import org.springblade.desk.quality.pojo.entity.CycleTestTask;
import org.springblade.desk.quality.pojo.entity.InspectionTask;
import org.springblade.desk.quality.pojo.request.InspectionTaskSearch;
import org.springblade.desk.quality.pojo.request.InspectionTaskStartNew;
@ -49,6 +56,7 @@ import java.util.Map;
* @author Tom Shuo
* @since 2025-11-14
*/
@Slf4j
@RestController
@Data
@EqualsAndHashCode(callSuper = true)
@ -60,6 +68,8 @@ public class InspectionTaskController extends BladeController {
private IInspectionTaskService service;
@Resource
private InspectionTaskService2 service2;
@Resource
private RoleConfig roleConfig;
/**
* [检验任务] 详情
@ -82,6 +92,18 @@ public class InspectionTaskController extends BladeController {
@Operation(summary = "分页", description = "传入inspectionTask")
public R<IPage<InspectionTaskListVO>> listSearch(
@Parameter(hidden = true) @RequestParam(required = false) InspectionTaskSearch search, Query query) {
log.info("getUserRole = {}", AuthUtil.getUserRole());
// 热表 烧结 检验员 数据区分。
if (AuthUtil.getUserRole().contains(roleConfig.getRbCheckerAlias())) {
search.setFromType(InspectionTaskConst.FROM_TYPE_RB);
}
if (AuthUtil.getUserRole().contains(roleConfig.getSjCheckerAlias())) {
search.setFromType(InspectionTaskConst.FROM_TYPE_SJ);
}
if (AuthUtil.getUserRole().contains(roleConfig.getRbCheckerAlias()) &&
AuthUtil.getUserRole().contains(roleConfig.getSjCheckerAlias())) {
search.setFromType(null);
}
IPage<InspectionTaskListVO> pagesVO = service.listSearch(Condition.getPage(query), search);
return R.data(pagesVO);
}

@ -117,7 +117,7 @@ public class ReviewSheetController extends BladeController {
public R<IPage<ReviewSheetInitVO>> listInit(@Parameter() @RequestBody
ReviewSheetInitSearch search, Query query) {
Map demo = new HashMap();
demo.put(BaseRequest.STATUS, ReviewSheetConst.S_INIT);
demo.put(BaseRequest.STATUS, ReviewSheetConst.STATUS.S_INIT);
QueryWrapper<ReviewSheet> qw = Condition.getQueryWrapper(demo, ReviewSheet.class);
IPage<ReviewSheet> pages = service.page(Condition.getPage(query), qw);
IPage<ReviewSheetInitVO> pagesVO = ReviewSheetInitWrapper.build().pageVO(pages);
@ -146,7 +146,11 @@ public class ReviewSheetController extends BladeController {
Map demo = new HashMap();
QueryWrapper<ReviewSheet> qw = Condition.getQueryWrapper(demo, ReviewSheet.class);
Integer bizType = search.getBizType();
qw.eq((bizType != null && bizType != 0), ReviewSheet.COL_BIZ_TYPE, search.getBizType());
if (bizType != null && bizType != 0) {
qw.eq(ReviewSheet.COL_BIZ_TYPE, search.getBizType());
} else {
qw.ne(ReviewSheet.COL_BIZ_TYPE, ReviewSheetConst.BizType.T_ERP);
}
// qw.eq(ReviewSheet.COL_REVIEW_STATUS, ReviewSheetConst.SELF.S_JUDGE);
IPage<ReviewSheet> pages = service.page(Condition.getPage(query), qw);
IPage<ReviewSheetRedoScrapVO> pagesVO = ReviewSheetRedoScrapWrapper.build().pageVO(pages);
@ -160,22 +164,22 @@ public class ReviewSheetController extends BladeController {
/**
* [生产处置单] list分页
*/
@PostMapping("/listSelf")
@ApiOperationSupport(order = 20)
@Operation(summary = "内部list分页", description = "传入ReviewSheet Obj")
public R<IPage<ReviewSheetSelfVO>> listSelf(@Parameter() @RequestBody
ReviewSheetSelfSearch search, Query query) {
Map demo = new HashMap();
QueryWrapper<ReviewSheet> qw = Condition.getQueryWrapper(demo, ReviewSheet.class);
qw.in(ReviewSheet.COL_BIZ_TYPE, ReviewSheetConst.BizType.T_SELF_REDO, ReviewSheetConst.BizType.T_SELF_SCRAP);
IPage<ReviewSheet> pages = service.page(Condition.getPage(query), qw);
IPage<ReviewSheetSelfVO> pagesVO = ReviewSheetSelfWrapper.build().pageVO(pages);
pagesVO.getRecords()
.stream()
.peek(service::setSelfVOValue)
.collect(Collectors.toList());
return R.data(pagesVO);
}
// @PostMapping("/listSelf")
// @ApiOperationSupport(order = 20)
// @Operation(summary = "内部list分页", description = "传入ReviewSheet Obj")
// public R<IPage<ReviewSheetSelfVO>> listSelf(@Parameter() @RequestBody
// ReviewSheetSelfSearch search, Query query) {
// Map demo = new HashMap();
// QueryWrapper<ReviewSheet> qw = Condition.getQueryWrapper(demo, ReviewSheet.class);
// qw.in(ReviewSheet.COL_BIZ_TYPE, ReviewSheetConst.BizType.T_SELF_REDO, ReviewSheetConst.BizType.T_SELF_SCRAP);
// IPage<ReviewSheet> pages = service.page(Condition.getPage(query), qw);
// IPage<ReviewSheetSelfVO> pagesVO = ReviewSheetSelfWrapper.build().pageVO(pages);
// pagesVO.getRecords()
// .stream()
// .peek(service::setSelfVOValue)
// .collect(Collectors.toList());
// return R.data(pagesVO);
// }
/**
* [生产处置单] list分页
@ -232,8 +236,6 @@ public class ReviewSheetController extends BladeController {
@Operation(summary = "copy相同数据到from车间订单id", description = "传入 [车间订单]id")
public R sameCopyFromHiWO(@Parameter(description = "列表id") @RequestParam Long id,
@Parameter(description = "车间订单Id") @RequestParam Long woId) {
// todo:
// 找到的历史审理单
return service.sameCopyFromHiWO(id, woId);
}
@ -431,4 +433,72 @@ public class ReviewSheetController extends BladeController {
public R fill(@Valid @RequestBody ReviewSheetDetailVO vo) {
return service.fill(vo);
}
@GetMapping("/getRSDutyPartList")
@ApiOperationSupport(order = 51)
@Operation(summary = "责任零件list", description = "")
public R getRSDutyPartList(@Parameter(description = "id") @RequestParam Long id) {
ReviewSheetDutyPartVO vo1 = new ReviewSheetDutyPartVO("21E8-571-3000-K5");
ReviewSheetDutyPartVO vo2 = new ReviewSheetDutyPartVO("21E8-003-11234-K5");
ReviewSheetDutyPartVO vo3 = new ReviewSheetDutyPartVO("21E8-001-1625-H8-N");
ReviewSheetDutyPartVO vo4 = new ReviewSheetDutyPartVO("21E8-570-3238-K8");
ReviewSheetDutyPartVO vo5 = new ReviewSheetDutyPartVO("21E8-570-1066-K5");
List<ReviewSheetDutyPartVO> list = new ArrayList<>();
list.add(vo1);
list.add(vo2);
list.add(vo3);
list.add(vo4);
list.add(vo5);
return R.data(list);
}
@GetMapping("/getRSDutyBatchList")
@ApiOperationSupport(order = 52)
@Operation(summary = "责任批号list", description = "")
public R getRSDutyBatchList(@Parameter(description = "id") @RequestParam Long id) {
ReviewSheetDutyBatchVO vo1 = new ReviewSheetDutyBatchVO("L1022312073");
ReviewSheetDutyBatchVO vo2 = new ReviewSheetDutyBatchVO("Y0572401499");
ReviewSheetDutyBatchVO vo3 = new ReviewSheetDutyBatchVO("Y7952401087");
ReviewSheetDutyBatchVO vo4 = new ReviewSheetDutyBatchVO("Y5432403515");
ReviewSheetDutyBatchVO vo5 = new ReviewSheetDutyBatchVO("2402-XC-6566-JII-W664");
List<ReviewSheetDutyBatchVO> list = new ArrayList<>();
list.add(vo1);
list.add(vo2);
list.add(vo3);
list.add(vo4);
list.add(vo5);
return R.data(list);
}
@GetMapping("/getRSRelevantPartList")
@ApiOperationSupport(order = 51)
@Operation(summary = "相关零件list", description = "")
public R getRSRelevantPartList(@Parameter(description = "id") @RequestParam Long id) {
ReviewSheetRelevantPartVO vo1 = new ReviewSheetRelevantPartVO("21E8-571-3000-K5");
ReviewSheetRelevantPartVO vo2 = new ReviewSheetRelevantPartVO("21E8-003-11234-K5");
ReviewSheetRelevantPartVO vo3 = new ReviewSheetRelevantPartVO("21E8-001-1625-H8-N");
ReviewSheetRelevantPartVO vo4 = new ReviewSheetRelevantPartVO("21E8-570-3238-K8");
ReviewSheetRelevantPartVO vo5 = new ReviewSheetRelevantPartVO("21E8-570-1066-K5");
List<ReviewSheetRelevantPartVO> list = new ArrayList<>();
list.add(vo1);
list.add(vo2);
list.add(vo3);
list.add(vo4);
list.add(vo5);
return R.data(list);
}
@GetMapping("/getRSRelevantBatchList")
@ApiOperationSupport(order = 51)
@Operation(summary = "相关批号list", description = "")
public R getRSRelevantBatchList(@Parameter(description = "id") @RequestParam Long id) {
ReviewSheetRelevantBatchVO vo1 = new ReviewSheetRelevantBatchVO("24022001");
ReviewSheetRelevantBatchVO vo2 = new ReviewSheetRelevantBatchVO("23122001");
ReviewSheetRelevantBatchVO vo3 = new ReviewSheetRelevantBatchVO("2401200101");
List<ReviewSheetRelevantBatchVO> list = new ArrayList<>();
list.add(vo1);
list.add(vo2);
list.add(vo3);
return R.data(list);
}
}

@ -35,7 +35,7 @@ public class WorkPlanItemDetailExcel implements Serializable {
*/
@ColumnWidth(20)
@ExcelProperty("[工序检验项]id")
private BigDecimal workPlanItemId;
private Long workPlanItemId;
/**
* 测量类型-[1]镀前;[2]:镀后;
*/
@ -107,5 +107,5 @@ public class WorkPlanItemDetailExcel implements Serializable {
*/
@ColumnWidth(20)
@ExcelProperty("[量具]id")
private BigDecimal mtId;
private Long mtId;
}

@ -41,5 +41,4 @@ public interface InspectionTaskMapper extends BaseMapper<InspectionTask> {
List<InspectionTaskExcel> exportInspectionTask(@Param("ew") Wrapper<InspectionTask> queryWrapper);
List<InspectionTaskListVO> listSearch(IPage<InspectionTaskListVO> page, @Param("q") InspectionTaskSearch search);
}

@ -10,14 +10,14 @@
<result column="INSPECTION_TASK_TYPE" property="inspectionTaskType"/>
<result column="STATUS" property="status"/>
<result column="NAME" property="name"/>
<result column="WORK_ORDER_ID" property="workOrderId"/>
<result column="WO_ID" property="woId"/>
<result column="PRODUCT_ID" property="productId"/>
<result column="PROCESS_ID" property="processId"/>
<result column="CHECK_USER_ID" property="checkUserId"/>
<result column="PRODUCT_CODE" property="productCode"/>
<result column="PRODUCT_SN" property="productSn"/>
<result column="BATCH_NUMBER" property="batchNumber"/>
<result column="WORK_ORDER_CODE" property="workOrderCode"/>
<result column="WO_CODE" property="woCode"/>
<result column="PROCESS_CODE" property="processCode"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_TIME" property="createTime"/>
@ -46,6 +46,8 @@
<result column="WP_ID" property="wpId"/>
<result column="FROM_TYPE" property="fromType"/>
<result column="YIELD_ORDER_TYPE" property="yieldOrderType"/>
<result column="YIELD_ORDER_ID" property="yieldOrderId"/>
<result column="RECEIVE_DATE" property="receiveDate"/>
</resultMap>
<select id="selectInspectionTaskPage" resultMap="inspectionTaskResultMap">
@ -62,34 +64,83 @@
<select id="listSearch"
resultType="org.springblade.desk.quality.pojo.vo.InspectionTaskListVO">
SELECT task.*
FROM QA_INSPECTION_TASK task
SELECT t.*
FROM QA_INSPECTION_TASK t
-- 车间作业计划 wp
-- LEFT JOIN RB_PR_WORK_PLAN wp ON task.WP_ID = wp.ID
LEFT JOIN MES_WORK_PLAN wp ON t.WP_ID = wp.ID
-- 车间订单 wo
-- LEFT JOIN PR_WORK_ORDER wo ON wp.WO_ID = wo.ID
LEFT JOIN MES_WORK_ORDER wo ON wp.WO_ID = wo.ID
-- 生产订单 yo
LEFT JOIN MES_YIELD_ORDER yo ON wo.YO_ID = yo.ID
-- 工序
LEFT JOIN DS_PROCESS ps ON wp.ORDERS = ps.PROCESS_CODE
-- 外协厂商 oem
LEFT JOIN BA_OEM oem ON wp.OC_ID = oem.ID
-- 班组 ts
-- LEFT JOIN BA_TEAM_SET ts ON wp.MAKE_TEAM = ts.ID
-- 外协厂商 oem
-- LEFT JOIN BA_OEM oem ON wp.OC_ID = oem.ID
-- 工序
-- LEFT JOIN BS_PROCEDURE_SET ON wp.
-- LEFT JOIN BLADE_DEPT bl_dept on task.CREATE_DEPT = bl_dept.ID
-- 部门
LEFT JOIN BLADE_DEPT bl_dept on t.CREATE_DEPT = bl_dept.ID
WHERE (
task.IS_DELETED = 0
t.IS_DELETED = 0
-- AND wp.IS_DELETED = 0
-- AND wo.IS_DELETED = 0
-- AND ps.IS_DELETED = 0
-- AND oem.IS_DELETED = 0
-- AND bl_dept.IS_DELETED = 0
)
<if test="q.wpId != null">
AND task.WP_ID = #{q.wpId}
AND t.WP_ID = #{q.wpId}
</if>
<if test="q.status != null">
AND task.STATUS = #{q.status}
AND t.STATUS = #{q.status}
</if>
<if test="q.fromType != null">
AND task.FROM_TYPE = #{q.fromType}
AND t.FROM_TYPE = #{q.fromType}
</if>
<if test="q.receiveDateStart != null">
AND rs.RECEIVE_DATE &gt;= #{q.receiveDateStart}
</if>
<if test="q.receiveDateStart != null">
AND rs.RECEIVE_DATE &lt;= #{q.receiveDateEnd}
</if>
-- wp
<if test="q.teamSetId != null">
AND wo.MAKE_TEAM = #{q.teamSetId}
</if>
<if test="q.oemId != null">
AND wp.OC_ID = #{q.oemId}
</if>
<if test="q.frontProcessId != null">
AND wp.FRONT_WP_ID = #{q.frontProcessId}
</if>
<if test="q.nextProcessId != null">
AND wp.NEXT_WP_ID = #{q.nextProcessId}
</if>
-- wo
<if test="q.cardNo != null and q.cardNo != ''">
AND wo.CARD_NO = #{q.cardNo}
</if>
<if test="q.woCode != null">
AND wo.WO_ID = #{q.woCode}
</if>
<if test="q.partCode != null and q.partCode != ''">
AND wo.PART_CODE = #{q.partCode}
</if>
<if test="q.batchNo != null and q.batchNo != ''">
AND wo.BATCH_NO = #{q.batchNo}
</if>
<if test="q.poQty != null">
AND wo.MAKE_QTY = #{q.poQty}
</if>
-- yo
<if test="q.prodIdent != null and q.prodIdent != ''">
AND yo.PRODUCT_IDENT = #{q.prodIdent}
</if>
-- ps
<if test="q.currentProcessId != null">
AND ps.ID = #{q.currentProcessId}
</if>
ORDER BY task.ID DESC
-- oem
ORDER BY t.ID DESC
</select>
</mapper>

@ -9,7 +9,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.quality.excel.ReviewSheetExcel;
import org.springblade.desk.quality.pojo.entity.ReviewSheet;
import org.springblade.desk.quality.pojo.vo.ReviewSheetDetailVO;
import org.springblade.desk.quality.pojo.request.InspectionTaskSearch;
import org.springblade.desk.quality.pojo.request.ReviewSheetErpSearch;
import org.springblade.desk.quality.pojo.request.ReviewSheetInitSearch;
import org.springblade.desk.quality.pojo.request.ReviewSheetRedoScrapSearch;
import org.springblade.desk.quality.pojo.vo.*;
import java.util.List;
@ -21,20 +25,29 @@ import java.util.List;
*/
public interface ReviewSheetMapper extends BaseMapper<ReviewSheet> {
/**
* 自定义分页
*
* @param page 分页参数
* @param reviewSheet 查询参数
* @return List<ReviewSheetVO>
*/
List<ReviewSheetDetailVO> selectReviewSheetPage(IPage page, ReviewSheetDetailVO reviewSheet);
/**
* 获取导出数据
*
* @param queryWrapper 查询条件
* @return List<ReviewSheetExcel>
*/
List<ReviewSheetExcel> exportReviewSheet(@Param("ew") Wrapper<ReviewSheet> queryWrapper);
/**
* 自定义分页
*
* @param page 分页参数
* @param reviewSheet 查询参数
* @return List<ReviewSheetVO>
*/
List<ReviewSheetDetailVO> selectReviewSheetPage(IPage page, ReviewSheetDetailVO reviewSheet);
/**
* 获取导出数据
*
* @param queryWrapper 查询条件
* @return List<ReviewSheetExcel>
*/
List<ReviewSheetExcel> exportReviewSheet(@Param("ew") Wrapper<ReviewSheet> queryWrapper);
List<ReviewSheetInitVO> listInit(IPage<ReviewSheetInitVO> page,
@Param("q") ReviewSheetInitSearch search);
List<ReviewSheetRedoScrapVO> listReviewRedoScrap(IPage<ReviewSheetRedoScrapVO> page,
@Param("q") ReviewSheetRedoScrapSearch search);
List<ReviewSheetErpVO> listErp(IPage<ReviewSheetRedoScrapVO> page,
@Param("q") ReviewSheetErpSearch search);
}

@ -62,4 +62,178 @@
SELECT *
FROM QA_REVIEW_SHEET ${ew.customSqlSegment}
</select>
<select id="listInit"
resultType="org.springblade.desk.quality.pojo.vo.ReviewSheetInitVO">
SELECT rs.*
FROM QA_REVIEW_SHEET rs
-- 车间作业计划 wp
LEFT JOIN MES_WORK_PLAN wp ON rs.WP_ID = wp.ID
-- 车间订单 wo
LEFT JOIN MES_WORK_ORDER wo ON rs.WO_ID = wo.ID
-- 外协厂商 oem
LEFT JOIN BA_OEM oem ON wp.OC_ID = oem.ID
WHERE (
rs.IS_DELETED = 0
AND wp.IS_DELETED = 0
AND wo.IS_DELETED = 0
AND oem.IS_DELETED = 0
)
<if test="q.status != null">
AND rs.STATUS = #{q.status}
</if>
<if test="q.bizType != null">
AND rs.BIZ_TYPE = #{q.bizType}
</if>
<if test="q.reviewOrderMode != null">
AND rs.REVIEW_ORDER_MODE = #{q.reviewOrderMode}
</if>
<if test="q.upCode != null">
AND rs.UP_CODE = #{q.upCode}
</if>
<if test="q.rsCode != null">
AND rs.RS_CODE = #{q.rsCode}
</if>
<if test="q.prodCode != null and q.prodCode != ''">
AND wo.XXXX = #{q.prodCode}
</if>
<if test="q.prodName != null and q.prodName != ''">
AND wo.XXXX = #{q.prodName}
</if>
<if test="q.prodTypeName != null and q.prodTypeName != ''">
AND wo.XXXX = #{q.prodTypeName}
</if>
<if test="q.prodIdent != null and q.prodIdent != ''">
AND wo.XXXX = #{q.prodIdent}
</if>
<if test="q.batchNo != null">
AND rs.BATCH_NO = #{q.batchNo}
</if>
<if test="q.cardNo != null">
AND wo.CARD_NO = #{q.cardNo}
</if>
<if test="q.createTimeStart != null">
AND rs.CREATE_TIME &gt;= #{q.createTimeStart}
</if>
<if test="q.createTimeEnd != null">
AND rs.CREATE_TIME &lt;= #{q.createTimeEnd}
</if>
<if test="q.reviewTimeStart != null">
AND rs.REVIEW_DATE &gt;= #{q.reviewTimeStart}
</if>
<if test="q.reviewTimeEnd != null">
AND rs.REVIEW_DATE &lt;= #{q.reviewTimeEnd}
</if>
<if test="q.rsCode != null and q.rsCode != ''">
AND rs.RS_CODE = #{q.rsCode}
</if>
<if test="q.woCode != null and q.woCode != ''">
AND rs.WO_CODE = #{q.woCode}
</if>
<if test="q.partCode != null and q.partCode != ''">
AND rs.PART_CODE = #{q.partCode}
</if>
<if test="q.oemName!= null and q.oemName != ''">
AND oem.ABBREVIATION = '%' || #{q.oemName} || '%'
</if>
ORDER BY task.ID DESC
</select>
<select id="listReviewRedoScrap"
resultType="org.springblade.desk.quality.pojo.vo.ReviewSheetRedoScrapVO">
SELECT rs.*
FROM QA_REVIEW_SHEET rs
-- 车间作业计划 wp
LEFT JOIN MES_WORK_PLAN wp ON rs.WP_ID = wp.ID
-- 车间订单 wo
LEFT JOIN MES_WORK_ORDER wo ON rs.WO_ID = wo.ID
-- 外协厂商 oem
LEFT JOIN BA_OEM oem ON wp.OC_ID = oem.ID
WHERE (
rs.IS_DELETED = 0
AND wp.IS_DELETED = 0
AND wo.IS_DELETED = 0
AND oem.IS_DELETED = 0
)
<if test="q.status != null">
AND rs.STATUS = #{q.status}
</if>
<if test="q.bizType != null">
AND rs.BIZ_TYPE IN (1, 2)
</if>
<if test="q.createTimeStart != null">
AND rs.CREATE_TIME &gt;= #{q.createTimeStart}
</if>
<if test="q.createTimeEnd != null">
AND rs.CREATE_TIME &lt;= #{q.createTimeEnd}
</if>
<if test="q.reviewTimeStart != null">
AND rs.REVIEW_DATE &gt;= #{q.reviewTimeStart}
</if>
<if test="q.reviewTimeEnd != null">
AND rs.REVIEW_DATE &lt;= #{q.reviewTimeEnd}
</if>
<if test="q.rsCode != null and q.rsCode != ''">
AND rs.RS_CODE = #{q.rsCode}
</if>
<if test="q.woCode != null and q.woCode != ''">
AND rs.WO_CODE = #{q.woCode}
</if>
<if test="q.partCode != null and q.partCode != ''">
AND rs.PART_CODE = #{q.partCode}
</if>
<if test="q.oemName!= null and q.oemName != ''">
AND oem.ABBREVIATION = '%' || #{q.oemName} || '%'
</if>
ORDER BY task.ID DESC
</select>
<select id="listErp"
resultType="org.springblade.desk.quality.pojo.vo.ReviewSheetErpVO">
SELECT rs.*
FROM QA_REVIEW_SHEET rs
-- 车间作业计划 wp
LEFT JOIN MES_WORK_PLAN wp ON rs.WP_ID = wp.ID
-- 车间订单 wo
LEFT JOIN MES_WORK_ORDER wo ON rs.WO_ID = wo.ID
-- 外协厂商 oem
LEFT JOIN BA_OEM oem ON wp.OC_ID = oem.ID
WHERE (
rs.IS_DELETED = 0
AND wp.IS_DELETED = 0
AND wo.IS_DELETED = 0
AND oem.IS_DELETED = 0
)
<if test="q.status != null">
AND rs.STATUS = #{q.status}
</if>
<if test="q.bizType != null">
AND rs.BIZ_TYPE = 3
</if>
<if test="q.createTimeStart != null">
AND rs.CREATE_TIME &gt;= #{q.createTimeStart}
</if>
<if test="q.createTimeEnd != null">
AND rs.CREATE_TIME &lt;= #{q.createTimeEnd}
</if>
<if test="q.reviewTimeStart != null">
AND rs.REVIEW_DATE &gt;= #{q.reviewTimeStart}
</if>
<if test="q.reviewTimeEnd != null">
AND rs.REVIEW_DATE &lt;= #{q.reviewTimeEnd}
</if>
<if test="q.rsCode != null and q.rsCode != ''">
AND rs.RS_CODE = #{q.rsCode}
</if>
<if test="q.woCode != null and q.woCode != ''">
AND rs.WO_CODE = #{q.woCode}
</if>
<if test="q.partCode != null and q.partCode != ''">
AND rs.PART_CODE = #{q.partCode}
</if>
<if test="q.batchNo != null and q.batchNo != ''">
AND rs.PART_CODE = #{q.batchNo}
</if>
ORDER BY task.ID DESC
</select>
</mapper>

@ -19,6 +19,7 @@
<result column="GAUGE_VALUE7" property="gaugeValue7"/>
<result column="GAUGE_VALUE8" property="gaugeValue8"/>
<result column="MT_ID" property="mtId"/>
<result column="ACT_MT_ID" property="actMtId"/>
</resultMap>
<select id="selectWorkPlanItemDetailPage" resultMap="workPlanItemDetailResultMap">

@ -105,7 +105,7 @@ public interface IInspectionTaskService extends BaseService<InspectionTask> {
* @param start
* @return
*/
public R<InspectionTask> startNew(InspectionTaskStartNew start);
public R startNew(InspectionTaskStartNew start);
public R fill(InspectionTaskDetailVO detailVO);
@ -115,5 +115,5 @@ public interface IInspectionTaskService extends BaseService<InspectionTask> {
R sameResultCopy(Long sourceId, Long targetId);
Integer refreshStatusAndQty(Long id);
InspectionTask refreshStatusAndQty(Long id);
}

@ -94,7 +94,7 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
vo.setOrderInfo(taskListVO);
// todo:
RemindMsg msg1 = new RemindMsg();
msg1.setRemindContent("提醒信息-AAAA");
msg1.setRemindContent("提醒信息-" + System.currentTimeMillis());
List<RemindMsg> msgList = new ArrayList<>();
msgList.add(msg1);
vo.setRemindMsgList(msgList);
@ -153,16 +153,32 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
* @return
*/
@Transactional
public R<InspectionTask> startNew(InspectionTaskStartNew start) {
public R startNew(InspectionTaskStartNew start) {
// todo:check工单有效性
// todo:check工序有效性
// todo:check制品有效性
addTask(InspectionTaskConst.FROM_TYPE_RB);
addTask(InspectionTaskConst.FROM_TYPE_SJ);
// 最终返回R
return R.success("成功生成检测任务!");
}
public void addTask(Integer fromType) {
// 新建 InspectionTask
InspectionTask task = new InspectionTask();
task.setId(null);
task.setStatus(InspectionTaskConst.CHECK_RESULT_TODO);
// todo: fake data
task.setWoId(2002227460172464129L);
// todo: fake data
task.setWoCode("WO-N251233302-R001");
// todo: fake data
task.setWpId(2002227460206018562L);
// 接收时间为空
task.setReceiveDate(null);
task.setFromType(fromType);
// 新插入 Task
save(task);
// 查询工序用到的,所有启用的检验项目。
@ -176,7 +192,7 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
);
}
if (itemList == null || itemList.isEmpty()) {
return R.fail("没有关联的检测项目!");
// return R.fail("没有关联的检测项目!");
}
// 创建关联的 WorkPlanItem 集合。
for (InspectionItem iItem : itemList) {
@ -207,10 +223,6 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
}
}
}
// 最终返回R
R<InspectionTask> rFinal = R.success("成功生成检测任务!");
rFinal.setData(task);
return rFinal;
}
@Override
@ -218,23 +230,26 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
// 更新 Task
updateById(detailVO);
for (WorkPlanItemVO wpItemVO : detailVO.getWpItemList()) {
WorkPlanItem wpItem = new WorkPlanItem();
BeanUtil.copyProperties(wpItemVO, wpItem);
if (!InspectionTaskConst.CHECK_RESULT_TODO.equals(wpItem.getCheckResult())) {
WorkPlanItem wpItemDB = wpItemService.getById(wpItemVO.getId());
if (InspectionTaskConst.CHECK_RESULT_TODO.equals(wpItemDB.getCheckResult()) &&
!InspectionTaskConst.CHECK_RESULT_TODO.equals(wpItemVO.getCheckResult())) { // 数据库中是待检测的,新传入数据不是待检测的。
// copy from VO
BeanUtil.copyProperties(wpItemVO, wpItemDB);
BladeUser bu = AuthUtil.getUser();
if (bu != null) {
log.info("bu = {}", bu);
wpItem.setCheckUserId(bu.getUserId());
// 赋值 质检员
wpItemDB.setCheckUserId(bu.getUserId());
}
wpItem.setCheckDate(LocalDateTime.now());
// 赋值 质检时间
wpItemDB.setCheckDate(LocalDateTime.now());
}
// 更新 WorkPlanItem
wpItemService.updateById(wpItem);
wpItemService.updateById(wpItemDB);
//
for (WorkPlanItemDetailVO wpItemDetailVO : wpItemVO.getWpItemDetailList()) {
WorkPlanItemDetail wpItemDetail = new WorkPlanItemDetail();
BeanUtil.copyProperties(wpItemDetailVO, wpItemDetail);
wpItemDetail.setWorkPlanItemId(wpItem.getId());
wpItemDetail.setWorkPlanItemId(wpItemDB.getId());
if (IdUtil.isValid(wpItemDetail.getId())) {
// 更新 WorkPlanItemDetail
wpItemDetailService.updateById(wpItemDetail);
@ -252,9 +267,7 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
@Override
public IPage<InspectionTaskListVO> listSearch(IPage<InspectionTaskListVO> page, InspectionTaskSearch search) {
List<InspectionTaskListVO> listVO = baseMapper.listSearch(page, search);
//
for (InspectionTaskListVO oneVO : listVO) {
refreshStatusAndQty(oneVO.getId());
setListVOValue(oneVO);
}
return page.setRecords(listVO);
@ -265,10 +278,21 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
// LambdaQueryWrapper<InspectionTask> qw = Wrappers.lambdaQuery();
// todo: 需要生产支持
// qw.eq(InspectionTask::getId, 2010909559614988290L);
List<InspectionTask> list = baseMapper.selectList(null).subList(0, 2);
List<InspectionTaskListVO> listVO = InspectionTaskListWrapper.build().listVO(list);
for (InspectionTaskListVO one : listVO) {
setListVOValue(one);
LambdaQueryWrapper<InspectionTask> qw = Wrappers.lambdaQuery(InspectionTask.class)
.orderByAsc(InspectionTask::getId);
List<InspectionTask> listAll = baseMapper.selectList(qw);
List<InspectionTask> list = null;
// todo:fake
if (listAll.size() >= 2) {
list = listAll.subList(0, 2);
}
List<InspectionTaskListVO> listVO = null;
if (list != null && !list.isEmpty()) {
listVO = InspectionTaskListWrapper.build().listVO(list);
for (InspectionTaskListVO one : listVO) {
setListVOValue(one);
}
}
return R.data(listVO);
}
@ -321,8 +345,14 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
return R.data(count);
}
/**
* 刷新状态和数量
*
* @param id
* @return
*/
@Override
public Integer refreshStatusAndQty(Long id) {
public InspectionTask refreshStatusAndQty(Long id) {
InspectionTask task = getById(id);
if (null == task) {
throw new IllegalArgumentException("error id!");
@ -340,8 +370,12 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
log.info("countOK = {}", countOK);
log.info("countNO = {}", countNO);
log.info("countNA = {}", countNA);
if (countOK != 0 || countNO != 0 || countNA != 0) {
// 设置接收时间
task.setReceiveDate(LocalDateTime.now());
}
// checkResult 处理
int checkResult = InspectionTaskConst.CHECK_RESULT_TODO; // 默认TODO
int checkResult = InspectionTaskConst.CHECK_RESULT_TODO; // 默认 数据库
if (countToDo == 0) { // 未检验为0
if (countOK == itemList.size()) { // 全部item 合格
checkResult = InspectionTaskConst.CHECK_RESULT_OK;
@ -351,18 +385,31 @@ public class InspectionTaskServiceImpl extends BaseServiceImpl<InspectionTaskMap
checkResult = InspectionTaskConst.CHECK_RESULT_NG;
}
}
// 最新状态
task.setCheckResult(checkResult);
// 保存最新状态
task.setStatus(checkResult);
// 更新
updateById(task);
//
// 如果检验任务结果不合格,创建 生产处置单
if (checkResult == InspectionTaskConst.CHECK_RESULT_NG) {
addRsSheet(id);
}
return task;
}
public void addRsSheet(Long id) {
InspectionTask task = getById(id);
if (InspectionTaskConst.CHECK_RESULT_NG.equals(task.getCheckResult())) {
if (!rsSubService.existTaskId(id)) {
ReviewSheet rs = new ReviewSheet();
rs.setStatus(ReviewSheetConst.S_INIT);
// rs.setRsCode("RS" + System.currentTimeMillis());
rs.setStatus(ReviewSheetConst.STATUS.S_INIT);
rs.setReviewStatus(ReviewSheetConst.ERP_REVIEW_S.REVIEW_STATUS_INIT);
rs.setTaskId(id);
rsSubService.save(rs);
rs.setRsCode("RS" + rs.getId()); // todo:fake data
rsSubService.updateById(rs);
}
}
return checkResult;
}
}

@ -16,9 +16,13 @@ import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.exception.BusinessException;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.constant.BaseRequest;
import org.springblade.desk.basic.constant.BaseValue;
import org.springblade.desk.basic.service.en.impl.EnBaseServiceImpl;
import org.springblade.desk.basic.util.IdUtil;
import org.springblade.desk.quality.constant.InspectionTaskConst;
@ -36,6 +40,7 @@ import org.springblade.desk.quality.service.IReviewFaultService;
import org.springblade.desk.quality.service.IReviewSheetService;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.UserInfo;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@ -89,13 +94,25 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
@Override
public void setRedoScrapVOValue(ReviewSheetRedoScrapVO vo) {
vo.setRsCode("" + vo.getId());
vo.setWoCode("" + vo.getId());
// todo:临时显示
// vo.setRsCode("" + vo.getId());
// vo.setWoCode("" + vo.getId());
if (IdUtil.isValid(vo.getReviewUserId())) {
R<UserInfo> uiR = userClient.userInfo(vo.getReviewUserId());
if (uiR != null && uiR.isSuccess() && uiR.getData() != null) {
vo.setReviewUserRealName(uiR.getData().getUser().getRealName());
}
}
}
@Override
public void setErpVOValue(ReviewSheetErpVO vo) {
if (IdUtil.isValid(vo.getReviewUserId())) {
R<UserInfo> uiR = userClient.userInfo(vo.getReviewUserId());
if (uiR != null && uiR.isSuccess() && uiR.getData() != null) {
vo.setReviewUserRealName(uiR.getData().getUser().getRealName());
}
}
}
@Override
@ -197,6 +214,7 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
@Override
public R fill(ReviewSheetDetailVO vo) {
log.info("ReviewSheetDetailVO vo = {}", vo.toString());
// 关联rsId
for (ReviewFaultVO voF : vo.getFaultList()) {
voF.setReviewSheetId(vo.getId());
@ -224,28 +242,40 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
// 提交类型
Integer submitType = vo.getSubmitType();
// 内部
Integer bizType = vo.getBizType();
// biz类型
rs.setBizType(bizType);
if (
ReviewSheetConst.BizType.T_SELF_REDO.equals(rs.getBizType()) ||
ReviewSheetConst.BizType.T_SELF_SCRAP.equals(rs.getBizType())
) {
if (ReviewSheetConst.SUBMIT_TYPE.T_SELF.equals(submitType)) { // 提交
if (ReviewSheetConst.SUBMIT_TYPE.T_SELF.equals(submitType)) { // 内部提交
// 当前状态
rs.setStatus(ReviewSheetConst.STATUS.S_JUDGE);
} else if (ReviewSheetConst.SUBMIT_TYPE.T_SELF_TEMP.equals(submitType)) { // 暂存
rs.setStatus(ReviewSheetConst.STATUS.S_NEW);
// 审核状态 内部用不到
rs.setReviewStatus(ReviewSheetConst.ERP_REVIEW_S.REVIEW_STATUS_INIT);
}
}
// ERP
if (ReviewSheetConst.BizType.T_ERP.equals(rs.getBizType())) {
if (ReviewSheetConst.SUBMIT_TYPE.T_ERP_TEMP.equals(submitType)) { // 暂存
// 当前状态
rs.setStatus(ReviewSheetConst.STATUS.S_NEW);
// 审核状态
rs.setReviewStatus(ReviewSheetConst.ERP_REVIEW_S.REVIEW_STATUS_INIT);
}
if (ReviewSheetConst.SUBMIT_TYPE.T_ERP_QA.equals(submitType) ||
ReviewSheetConst.SUBMIT_TYPE.T_ERP_CRAFT.equals(submitType) ||
ReviewSheetConst.SUBMIT_TYPE.T_ERP_DES.equals(submitType) ||
ReviewSheetConst.SUBMIT_TYPE.T_ERP_DES_CHANGE.equals(submitType)) { // 外部提交
// 当前状态
rs.setStatus(ReviewSheetConst.STATUS.S_HEAR);
// 审核状态
rs.setReviewStatus(ReviewSheetConst.ERP_REVIEW_S.REVIEW_STATUS_INIT);
}
}
// 保存标记位
rs.setHasSaved(BaseValue.YES);
// 处置单
saveOrUpdate(rs);
return R.success("成功");
@ -261,7 +291,15 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
ReviewSheet rs = getById(id);
rs.setSelfReviewFlag(selfReviewFlag);
rs.setMemo(memo);
rs.setReviewStatus(ReviewSheetConst.STATUS.S_COMPLETE);
// 修改状态, 内部审理没有审理状态概念。
rs.setStatus(ReviewSheetConst.STATUS.S_COMPLETE);
BladeUser bu = AuthUtil.getUser();
if (bu != null) {
// 赋值 审理[用户]id
rs.setReviewUserId(bu.getUserId());
}
// 审理时间
rs.setReviewDate(LocalDateTime.now());
updateById(rs);
Integer bizType = rs.getBizType();
if (ReviewSheetConst.BizType.T_SELF_REDO.equals(bizType)) { // 返工 todo
@ -275,10 +313,15 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
@Override
public R sameCopyFromHiWO(Long id, Long woId) {
// todo:
// todo:
// 找到的历史审理单
ReviewSheet rsS = getOneByWoId(woId);
if (rsS == null) {
return R.fail("找不到对应历史数据!");
}
// 目标
ReviewSheet rsT = getById(id);
if (rsS == null || rsT == null) {
if (rsT == null) {
return R.fail("");
}
//
@ -302,11 +345,11 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
BeanUtil.copyProperties(rsS, rsT, BaseRequest.ID);
// 目标生产处置单 字段处理
// 当前状态
rsT.setStatus(ReviewSheetConst.S_INIT);
rsT.setStatus(ReviewSheetConst.STATUS.S_NEW);
rsT.setWoCode("");
rsT.setWoId(null);
// 审理状态
rsT.setReviewStatus(ReviewSheetConst.ERP_REVIEW_S.REVIEW_STATUS_0);
rsT.setReviewStatus(ReviewSheetConst.ERP_REVIEW_S.REVIEW_STATUS_INIT);
// 引用的 车间订单id
rsT.setRefWoId(woId);
return R.status(updateById(rsT));
@ -316,6 +359,7 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
public ReviewSheet getOneByWoId(Long woId) {
LambdaQueryWrapper<ReviewSheet> qw = Wrappers.lambdaQuery();
qw.eq(ReviewSheet::getWoId, woId);
qw.eq(ReviewSheet::getIsDeleted, BladeConstant.DB_NOT_DELETED);
return baseMapper.selectOne(qw);
}
@ -323,6 +367,7 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper,
public ReviewSheet getByRsCode(String rsCode) {
LambdaQueryWrapper<ReviewSheet> qw = Wrappers.lambdaQuery();
qw.eq(ReviewSheet::getRsCode, rsCode);
qw.eq(ReviewSheet::getIsDeleted, BladeConstant.DB_NOT_DELETED);
qw.orderByDesc(ReviewSheet::getId);
return baseMapper.selectOne(qw);
}

@ -23,12 +23,20 @@ business:
#角色配置
role-config:
#工艺员角色id
#工艺员[角色]id
process-engineer-id: "1993624442365915137"
# 49 tencent cloud
#process-engineer-id: "2004331529923555330"
#工艺员角色alias
#工艺员[角色]alias
process-engineer-alias: "process_engineer"
#热表检验员[角色]id
rb-checker-id: "2011703987044114434"
#热表检验员[角色]alias
rb-checker-alias: "sj_checker"
#烧结检验员[角色]id
sj-checker-id: "2011704109077389313"
#烧结检验员[角色]alias
sj-checker-alias: "rb_checker"
request:
measuringTool:

Loading…
Cancel
Save