Merge branch 'qms/zhangke' into qms/develop

This commit is contained in:
funny 2026-05-27 18:43:41 +08:00
commit 179730148d
14 changed files with 1079 additions and 405 deletions

View File

@ -248,7 +248,7 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <configuration>
<skip>true</skip> <mainClass>com.nflg.qms.admin.QmsApplication</mainClass>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>

View File

@ -4,25 +4,29 @@ import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleAddQO;
import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleAuditQO; import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleAuditQO;
import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleEditQO; import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleEditQO;
import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleSearchQO; import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleSearchQO;
import com.nflg.qms.admin.pojo.vo.PqcInspectionPointListVO;
import com.nflg.qms.admin.pojo.vo.PqcInspectionRuleDetailVO; import com.nflg.qms.admin.pojo.vo.PqcInspectionRuleDetailVO;
import com.nflg.qms.admin.pojo.vo.PqcInspectionRuleVO; import com.nflg.qms.admin.pojo.vo.PqcInspectionRuleVO;
import com.nflg.qms.admin.service.QmsPqcInspectionRuleControllerService; import com.nflg.qms.admin.service.QmsPqcInspectionRuleControllerService;
import com.nflg.wms.common.constant.Constant; import com.nflg.wms.common.constant.Constant;
import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.vo.QmsPqcInspectionPointItemsGroupedVO; import com.nflg.wms.common.pojo.qo.PqcInspectionRuleExportQO;
import com.nflg.wms.common.util.MultilingualUtil; import com.nflg.wms.common.util.MultilingualUtil;
import com.nflg.wms.repository.entity.DictionaryItem; import com.nflg.wms.repository.entity.DictionaryItem;
import com.nflg.wms.repository.service.IDictionaryItemService; import com.nflg.wms.repository.service.IDictionaryItemService;
import com.nflg.wms.starter.BaseController; import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* PQC检验规则管理 * PQC检验规则管理
@ -53,31 +57,16 @@ public class QmsPqcInspectionRuleController extends BaseController {
return ApiResult.success(ruleControllerService.getDetail(id)); return ApiResult.success(ruleControllerService.getDetail(id));
} }
/**
* 根据机型编号查询该机型最新启用PQC规则下的检查点列表
*/
@GetMapping("/points")
public ApiResult<List<PqcInspectionPointListVO>> listPointsByModelNo(@NotNull String modelNo) {
return ApiResult.success(ruleControllerService.listPointsByModelNo(modelNo));
}
/**
* 根据检查点ID查询对应的检测项列表分组返回
* 返回三类关键物料拍照类工序检查-自检复核类工序检查-QC检测类
*/
@GetMapping("/items")
public ApiResult<QmsPqcInspectionPointItemsGroupedVO> listItemsByInspectionPointId(@NotNull Long inspectionPointId) {
return ApiResult.success(ruleControllerService.listItemsByInspectionPointIdGrouped(inspectionPointId));
}
/** /**
* 新增规则 * 新增规则
*/ */
@PostMapping("/add") @PostMapping("/add")
@Transactional @Transactional
public ApiResult<Void> add(@Valid @RequestBody PqcInspectionRuleAddQO qo) { public ApiResult<Map<String, Long>> add(@Valid @RequestBody PqcInspectionRuleAddQO qo) {
ruleControllerService.add(qo); Long id = ruleControllerService.add(qo);
return ApiResult.success(); Map<String, Long> result = new HashMap<>();
result.put("id", id);
return ApiResult.success(result);
} }
/** /**
@ -85,9 +74,11 @@ public class QmsPqcInspectionRuleController extends BaseController {
*/ */
@PostMapping("/edit") @PostMapping("/edit")
@Transactional @Transactional
public ApiResult<Void> edit(@Valid @RequestBody PqcInspectionRuleEditQO qo) { public ApiResult<Map<String, Long>> edit(@Valid @RequestBody PqcInspectionRuleEditQO qo) {
ruleControllerService.edit(qo); Long id = ruleControllerService.edit(qo);
return ApiResult.success(); Map<String, Long> result = new HashMap<>();
result.put("id", id);
return ApiResult.success(result);
} }
/** /**
@ -124,11 +115,23 @@ public class QmsPqcInspectionRuleController extends BaseController {
*/ */
@PostMapping("/toggleDisabled") @PostMapping("/toggleDisabled")
@Transactional @Transactional
public ApiResult<Void> toggleDisabled(@NotNull Long id) { public ApiResult<Void> toggleDisabled(@NotNull @RequestParam Long id) {
ruleControllerService.toggleDisabled(id); ruleControllerService.toggleDisabled(id);
return ApiResult.success(); return ApiResult.success();
} }
/**
* 删除检查点含其下检查项
*/
@PostMapping("/deletePoint")
@Transactional
public ApiResult<Map<String, Long>> deletePoint(@NotNull @RequestParam Long pointId) {
Long ruleId = ruleControllerService.deletePoint(pointId);
Map<String, Long> result = new HashMap<>();
result.put("id", ruleId);
return ApiResult.success(result);
}
/** /**
* 获取步装字典 * 获取步装字典
*/ */
@ -137,4 +140,34 @@ public class QmsPqcInspectionRuleController extends BaseController {
return ApiResult.success(dictionaryItemService.getListByDictionaryCode( return ApiResult.success(dictionaryItemService.getListByDictionaryCode(
Constant.DICTIONARY_STEP_POSITION, MultilingualUtil.getLanguage())); Constant.DICTIONARY_STEP_POSITION, MultilingualUtil.getLanguage()));
} }
/**
* 导出PQC检测规则
* 如果ids不为空则导出指定ID数据否则导出查询条件匹配的全部数据
*/
@PostMapping("/export")
public void export(HttpServletResponse response, @Valid @RequestBody PqcInspectionRuleExportQO qo) throws IOException {
ruleControllerService.export(response, qo);
}
/**
* 下载导入模板
*/
@GetMapping("/importTemplate")
public void importTemplate(HttpServletResponse response) throws IOException {
ruleControllerService.downloadTemplate(response);
}
/**
* 导入PQC检测规则
* @param file Excel文件
* @param importMode 导入方式overwrite=覆盖导入append=追加导入
*/
@PostMapping("/import")
@Transactional
public ApiResult<?> importData(@RequestParam("file") MultipartFile file,
@NotNull(message = "导入方式不能为空") @RequestParam String importMode) throws Exception {
ruleControllerService.importFromExcel(file, importMode);
return ApiResult.success();
}
} }

View File

@ -47,15 +47,13 @@ public class PqcInspectionRuleAddQO {
private Long stepDicItemId; private Long stepDicItemId;
/** /**
* 检查点编号必填 * 检查点编号
*/ */
@NotBlank(message = "检查点编号不能为空")
private String inspectionPointCode; private String inspectionPointCode;
/** /**
* 检查点名称必填 * 检查点名称
*/ */
@NotBlank(message = "检查点名称不能为空")
private String inspectionPointName; private String inspectionPointName;
/** /**
@ -78,9 +76,9 @@ public class PqcInspectionRuleAddQO {
private String inspectionContent; private String inspectionContent;
/** /**
* 检查类型0=工序检查1=关键物料拍照2=全部必填 * 检查类型0=工序检查1=关键物料拍照2=关键物料采集多选
*/ */
private Integer inspectionType; private List<Integer> inspectionType;
/** /**
* 判定类型0=目视1=量具必填 * 判定类型0=目视1=量具必填

View File

@ -86,9 +86,9 @@ public class PqcInspectionRuleEditQO {
private String inspectionContent; private String inspectionContent;
/** /**
* 检查类型 * 检查类型多选
*/ */
private Integer inspectionType; private List<Integer> inspectionType;
/** /**
* 判定类型 * 判定类型

View File

@ -4,6 +4,7 @@ import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* 检查项VO * 检查项VO
@ -20,70 +21,45 @@ public class PqcInspectionPointItemVO {
/** /**
* 检查点ID * 检查点ID
*/ */
private Long pointId; private Long inspectionCodeId;
/** /**
* 检验规则ID * 排序
*/
private Long ruleId;
/**
* 检查项名称
*/
private String itemName;
/**
* 检查项编码
*/
private String itemCode;
/**
* 检验标准
*/
private String standard;
/**
* 检验方法
*/
private String inspectionMethod;
/**
* 上限值
*/
private String upperLimit;
/**
* 下限值
*/
private String lowerLimit;
/**
* 单位
*/
private String unit;
/**
* 检查顺序
*/ */
private Integer sort; private Integer sort;
/** /**
* 是否必填0-1- * 检查内容
*/ */
private Short isRequired; private String inspectionContent;
/** /**
* 备注 * 检查类型0=工序检查1=关键物料拍照2=关键物料采集多选返回数组
*/ */
private String remark; private List<Integer> inspectionType;
/** /**
* 创建人ID * 判定类型0=目视1=量具
*/ */
private Long createId; private Integer inspectionMethods;
/** /**
* 创建人名称 * 样例图地址
*/
private String inspectionImgUrl;
/**
* 星级1-3级
*/
private Integer inspectionLevel;
/**
* 创建人编号
*/
private Long createBy;
/**
* 创建人姓名
*/ */
private String createName; private String createName;
@ -93,17 +69,17 @@ public class PqcInspectionPointItemVO {
private LocalDateTime createTime; private LocalDateTime createTime;
/** /**
* 修改人ID * 修改人编号
*/ */
private Long modifyId; private Long updateBy;
/** /**
* 修改人 * 修改人
*/ */
private String modifyName; private String updateName;
/** /**
* 修改时间 * 修改时间
*/ */
private LocalDateTime modifyTime; private LocalDateTime updateTime;
} }

View File

@ -19,37 +19,37 @@ public class PqcInspectionPointVO {
private Long id; private Long id;
/** /**
* 检验规则ID * 规则主表ID
*/ */
private Long ruleId; private Long pqcRuleId;
/**
* 步装名称
*/
private String stepName;
/**
* 步装字典ID
*/
private Long stepDicItemId;
/**
* 检查点编号
*/
private String inspectionPointCode;
/** /**
* 检查点名称 * 检查点名称
*/ */
private String pointName; private String inspectionPointName;
/** /**
* 检查点编码 * 创建人编号
*/ */
private String pointCode; private Long createBy;
/** /**
* 检查顺序 * 创建人姓名
*/
private Integer sort;
/**
* 备注
*/
private String remark;
/**
* 创建人ID
*/
private Long createId;
/**
* 创建人名称
*/ */
private String createName; private String createName;
@ -59,19 +59,19 @@ public class PqcInspectionPointVO {
private LocalDateTime createTime; private LocalDateTime createTime;
/** /**
* 修改人ID * 修改人编号
*/ */
private Long modifyId; private Long updateBy;
/** /**
* 修改人 * 修改人
*/ */
private String modifyName; private String updateName;
/** /**
* 修改时间 * 修改时间
*/ */
private LocalDateTime modifyTime; private LocalDateTime updateTime;
/** /**
* 检查项列表 * 检查项列表

View File

@ -19,72 +19,52 @@ public class PqcInspectionRuleDetailVO {
private Long id; private Long id;
/** /**
* 规则编码 * 机型编号
*/ */
private String ruleCode; private String modelNo;
/** /**
* 规则名称 * 规则编号
*/ */
private String ruleName; private String pqcRuleCode;
/** /**
* 物料编码 * 版本号
*/ */
private String materialCode; private Integer ruleVersion;
/** /**
* 物料描述 * 是否禁用
*/ */
private String materialName; private Boolean isDisabled;
/** /**
* 规则类型 * 审核状态0=未审核1=已审核2=已驳回
*/ */
private Short ruleType; private Integer auditStatus;
/** /**
* 规则类型名称 * 驳回原因
*/ */
private String ruleTypeName; private String auditRemark;
/** /**
* 适用工序 * 审核人姓名
*/ */
private String processCode; private String auditUserName;
/** /**
* 适用工序名称 * 审核时间
*/ */
private String processName; private LocalDateTime auditDateTime;
/** /**
* 审核状态0-待审核1-审核通过2-审核不通过 * 创建人编号
*/ */
private Short auditStatus; private Long createBy;
/** /**
* 审核状态名称 * 创建人姓名
*/
private String auditStatusName;
/**
* 启用状态0-停用1-启用
*/
private Short enableStatus;
/**
* 备注
*/
private String remark;
/**
* 创建人ID
*/
private Long createId;
/**
* 创建人名称
*/ */
private String createName; private String createName;
@ -94,34 +74,19 @@ public class PqcInspectionRuleDetailVO {
private LocalDateTime createTime; private LocalDateTime createTime;
/** /**
* 修改人ID * 修改人编号
*/ */
private Long modifyId; private Long updateBy;
/** /**
* 修改人 * 修改人
*/ */
private String modifyName; private String updateName;
/** /**
* 修改时间 * 修改时间
*/ */
private LocalDateTime modifyTime; private LocalDateTime updateTime;
/**
* 审核人
*/
private String auditBy;
/**
* 审核时间
*/
private LocalDateTime auditTime;
/**
* 审核说明
*/
private String auditMsg;
/** /**
* 检查点列表 * 检查点列表

View File

@ -5,12 +5,15 @@ import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleAddQO;
import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleAuditQO; import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleAuditQO;
import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleEditQO; import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleEditQO;
import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleSearchQO; import com.nflg.qms.admin.pojo.qo.PqcInspectionRuleSearchQO;
import com.nflg.qms.admin.pojo.vo.PqcInspectionPointListVO;
import com.nflg.qms.admin.pojo.vo.PqcInspectionRuleDetailVO; import com.nflg.qms.admin.pojo.vo.PqcInspectionRuleDetailVO;
import com.nflg.qms.admin.pojo.vo.PqcInspectionRuleVO; import com.nflg.qms.admin.pojo.vo.PqcInspectionRuleVO;
import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.vo.QmsPqcInspectionPointItemsGroupedVO; import com.nflg.wms.common.pojo.qo.PqcInspectionRuleExportQO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
@ -30,13 +33,15 @@ public interface QmsPqcInspectionRuleControllerService {
/** /**
* 新增规则 * 新增规则
* @return 新创建的规则ID
*/ */
void add(PqcInspectionRuleAddQO qo); Long add(PqcInspectionRuleAddQO qo);
/** /**
* 编辑规则含版本管理 * 编辑规则含版本管理
* 已审核规则有变化时会 fork 出新版本返回实际保存的规则ID
*/ */
void edit(PqcInspectionRuleEditQO qo); Long edit(PqcInspectionRuleEditQO qo);
/** /**
* 批量删除规则只能删除未审核的 * 批量删除规则只能删除未审核的
@ -58,10 +63,27 @@ public interface QmsPqcInspectionRuleControllerService {
*/ */
void toggleDisabled(Long id); void toggleDisabled(Long id);
List<PqcInspectionPointListVO> listPointsByModelNo(String modelNo); /**
* 删除检查点含其下检查项
* 已审核规则会 fork 出新版本后执行删除返回新版本规则ID未审核规则返回原规则ID
*/
Long deletePoint(Long pointId);
/** /**
* 根据检查点ID查询检测项列表分组返回 * 导入PQC检测规则
* @param file Excel文件
* @param importMode 导入方式overwrite=覆盖导入append=追加导入
*/ */
QmsPqcInspectionPointItemsGroupedVO listItemsByInspectionPointIdGrouped(Long inspectionPointId); void importFromExcel(MultipartFile file, String importMode) throws Exception;
/**
* 导出PQC检测规则
* 如果ids不为空则导出指定ID数据否则导出查询条件匹配的全部数据
*/
void export(HttpServletResponse response, PqcInspectionRuleExportQO qo) throws IOException;
/**
* 下载导入模板
*/
void downloadTemplate(HttpServletResponse response) throws IOException;
} }

View File

@ -0,0 +1,94 @@
package com.nflg.wms.common.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import org.ttzero.excel.annotation.ExcelColumn;
import org.ttzero.excel.annotation.MediaColumn;
/**
* PQC检测规则 导出DTO
* 将规则检查点检查项三层结构展平为单行导出
*/
@Data
@Accessors(chain = true)
public class PqcInspectionRuleExportDTO {
/**
* 机型编号
*/
@ExcelColumn("机型编号")
private String modelNo;
/**
* 步装名称
*/
@ExcelColumn("步装名称")
private String stepName;
/**
* 检查点编号
*/
@ExcelColumn("检查点编号")
private String inspectionPointCode;
/**
* 检查点名称
*/
@ExcelColumn("检查点名称")
private String inspectionPointName;
/**
* 检查项内容
*/
@ExcelColumn("检查项内容")
private String inspectionContent;
/**
* 检查项类别工序检查/关键物料采集拍照/全部
*/
@ExcelColumn("检查项类别")
private String inspectionTypeText;
/**
* 检测方法目视/量具
*/
@ExcelColumn("检测方法")
private String inspectionMethodsText;
/**
* 等级1-3
*/
@ExcelColumn("等级")
private String inspectionLevelText;
/**
* 实例图
*/
@ExcelColumn("实例图")
@MediaColumn
private String inspectionImage;
/**
* 排序
*/
@ExcelColumn("排序")
private Integer sort;
/**
* 规则编号
*/
@ExcelColumn("规则编号")
private String pqcRuleCode;
/**
* 版本号
*/
@ExcelColumn("版本号")
private Integer ruleVersion;
/**
* 审核状态
*/
@ExcelColumn("审核状态")
private String auditStatusText;
}

View File

@ -0,0 +1,80 @@
package com.nflg.wms.common.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import org.ttzero.excel.annotation.ExcelColumn;
/**
* PQC检测规则 导入DTO
* Excel模板列机型编号*, 步装名称*, 检查点编号*, 检查点名称, 检查项内容*, 检查项类别*, 检测方法*, 等级*, 实例图, 排序
*/
@Data
@Accessors(chain = true)
public class PqcInspectionRuleImportDTO {
/**
* 机型编号必填
*/
@ExcelColumn("机型编号*")
private String modelNo;
/**
* 步装名称必填
*/
@ExcelColumn("步装名称*")
private String stepName;
/**
* 检查点编号必填
*/
@ExcelColumn("检查点编号*")
private String inspectionPointCode;
/**
* 检查点名称可选
*/
@ExcelColumn("检查点名称")
private String inspectionPointName;
/**
* 检查项内容必填
*/
@ExcelColumn("检查项内容*")
private String inspectionContent;
/**
* 检查项类别必填工序检查/关键物料采集拍照/全部
*/
@ExcelColumn("检查项类别*")
private String inspectionTypeText;
/**
* 检测方法必填目视/量具
*/
@ExcelColumn("检测方法*")
private String inspectionMethodsText;
/**
* 等级必填1-3
*/
@ExcelColumn("等级*")
private String inspectionLevelText;
/**
* 实例图可选支持DISPIMG公式
*/
@ExcelColumn("实例图")
private String inspectionImage;
/**
* 排序可选
*/
@ExcelColumn("排序")
private Integer sort;
/**
* 错误信息导入时填写
*/
@ExcelColumn("错误信息")
private String error;
}

View File

@ -0,0 +1,32 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import java.util.List;
/**
* PQC检测规则 导出请求参数
*/
@Data
public class PqcInspectionRuleExportQO {
/**
* 指定导出的规则ID列表可选为空则导出查询条件匹配的全部数据
*/
private List<Long> ids;
/**
* 查询条件可选当ids为空时用于导出查询条件匹配的数据
*/
private String modelNo;
private String pqcRuleCode;
private Boolean isDisabled;
private Integer auditStatus;
private String createTimeStart;
private String createTimeEnd;
}

View File

@ -47,7 +47,7 @@ public class QmsPqcInspectionPointItems implements Serializable {
private String inspectionContent; private String inspectionContent;
/** /**
* 检查类型0=工序检查1=关键物料拍照2=全部 * 检查类型位标志支持多选bit0=工序检查(1), bit1=关键物料拍照(2), bit2=关键物料采集(4)
*/ */
private Integer inspectionType; private Integer inspectionType;

View File

@ -41,13 +41,14 @@ public class RustFSServiceImpl implements FileUploadService {
@Override @Override
public String upload(String filePath, InputStream stream, String contentType) throws Exception { public String upload(String filePath, InputStream stream, String contentType) throws Exception {
ensureBucketExists(); ensureBucketExists();
byte[] bytes = stream.readAllBytes();
s3Client.putObject( s3Client.putObject(
PutObjectRequest.builder() PutObjectRequest.builder()
.bucket(bucketName) .bucket(bucketName)
.key(filePath) .key(filePath)
.contentType(contentType) .contentType(contentType)
.build(), .build(),
RequestBody.fromInputStream(stream, stream.available()) RequestBody.fromBytes(bytes)
); );
return StrUtil.format("{}/{}/{}", domain, bucketName, filePath); return StrUtil.format("{}/{}/{}", domain, bucketName, filePath);
} }