Browse Source

添加检验单一个接口

master
shenzhouyu 1 week ago
parent
commit
299fce9182
  1. 74
      cclqms-java/src/main/java/com/gaotao/modules/api/controller/QcInspectionTaskApiController.java
  2. 154
      cclqms-java/src/main/java/com/gaotao/modules/api/dto/AutogenerateInspectionTaskRequestDto.java
  3. 60
      cclqms-java/src/main/java/com/gaotao/modules/api/dto/AutogenerateInspectionTaskResponseDto.java
  4. 98
      cclqms-java/src/main/java/com/gaotao/modules/pms/service/Impl/QcServiceImpl.java
  5. 9
      cclqms-java/src/main/java/com/gaotao/modules/pms/service/QcService.java

74
cclqms-java/src/main/java/com/gaotao/modules/api/controller/QcInspectionTaskApiController.java

@ -0,0 +1,74 @@
package com.gaotao.modules.api.controller;
import com.gaotao.modules.api.dto.AutogenerateInspectionTaskRequestDto;
import com.gaotao.modules.api.dto.AutogenerateInspectionTaskResponseDto;
import com.gaotao.modules.pms.data.QcFAIRecordData;
import com.gaotao.modules.pms.service.QcService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
import java.util.Map;
/**
* 检验任务对外开放接口
* 供其它系统调用自动生成检验任务GetAutogenerateinspectiontasks
*/
@Slf4j
@Api(tags = "QC检验任务开放接口")
@RestController
@RequestMapping("/api/qc")
public class QcInspectionTaskApiController {
@Autowired
private QcService qcService;
/**
* 自动生成检验任务
*
* @param request 请求参数
* @return 响应结果含检验单号
*/
@ApiOperation(value = "自动生成检验任务", notes = "其它系统调用,自动生成 IQC/IPQC/FQC/OQC/SQC 等检验任务")
@PostMapping(value = "/autogenerateInspectionTasks",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public AutogenerateInspectionTaskResponseDto autogenerateInspectionTasks(
@Valid @RequestBody AutogenerateInspectionTaskRequestDto request) {
try {
log.info("收到自动生成检验任务请求,inspectionType: {}, site: {}, buNo: {}, partNo: {}, orderNo: {}",
request.getInspectionType(), request.getSite(), request.getBuNo(),
request.getPartNo(), request.getOrderNo());
QcFAIRecordData data = new QcFAIRecordData();
BeanUtils.copyProperties(request, data);
if (StringUtils.isBlank(data.getBu())
&& StringUtils.isNotBlank(request.getSite())
&& StringUtils.isNotBlank(request.getBuNo())) {
data.setBu(request.getSite() + "_" + request.getBuNo());
}
Map<String, Object> result = qcService.autogenerateInspectionTasksApi(data, request.getInspectionType());
String inspectionNo = data.getInspectionNo();
if (StringUtils.isBlank(inspectionNo) && result != null && result.get("inspectionNo") != null) {
inspectionNo = String.valueOf(result.get("inspectionNo"));
}
log.info("自动生成检验任务完成,inspectionType: {}, inspectionNo: {}",
request.getInspectionType(), inspectionNo);
return AutogenerateInspectionTaskResponseDto.success(inspectionNo, result);
} catch (RuntimeException e) {
log.error("自动生成检验任务业务异常", e);
return AutogenerateInspectionTaskResponseDto.failure("处理失败: " + e.getMessage());
} catch (Exception e) {
log.error("自动生成检验任务未预期异常", e);
return AutogenerateInspectionTaskResponseDto.failure("系统内部错误,请联系管理员");
}
}
}

154
cclqms-java/src/main/java/com/gaotao/modules/api/dto/AutogenerateInspectionTaskRequestDto.java

@ -0,0 +1,154 @@
package com.gaotao.modules.api.dto;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
* 自动生成检验任务对外开放接口请求DTO
*/
@Data
public class AutogenerateInspectionTaskRequestDto {
/**
* 检验类型IQC / IPQC / FQC / OQC / SQC
*/
@NotBlank(message = "检验类型不能为空")
private String inspectionType;
/**
* 工厂编码可与 buNo 分开传也可通过 bu=site_buNo 合并传
*/
private String site;
/**
* 部门/事业部编码
*/
private String buNo;
/**
* site_buNo 合并字段 1001_01
*/
private String bu;
/**
* 标签条码 / 卷号
*/
private String rollNo;
/**
* 批次号
*/
private String batchNo;
/**
* 工单号或订单号
*/
private String orderNo;
/**
* 派工单号 / 工序序号
*/
private String seqNo;
/**
* 采购订单号优先于 orderNo
*/
private String poOrderNo;
/**
* 采购订单行号优先于 seqNo
*/
private String poItemNo;
/**
* 下达号
*/
private String releaseNo;
/**
* 行号
*/
private String lineNo;
/**
* 工序名称
*/
private String operationDesc;
/**
* 机台号
*/
private String resourceId;
/**
* 物料编码
*/
private String partNo;
/**
* IPQC 细分类型编码如巡检编码会与 IPQC 前缀组合
*/
private String inspectionTypeNo;
/**
* 送检数量
*/
private BigDecimal rollQty;
/**
* 工单数量 / 批量
*/
private String lotsize;
/**
* 创建人账号无登录态时建议传入
*/
private String createBy;
/**
* 用户名可作为 createBy / inspectorBy 兜底
*/
private String userName;
/**
* 检验员 / 送检人账号
*/
private String inspectorBy;
/**
* 供应商编码
*/
private String supplierNo;
/**
* 客户编码
*/
private String customerNo;
/**
* 模板编码默认 *
*/
private String templateId;
/**
* 特殊要求
*/
private String specialRequirements;
/**
* 任务来源
*/
private String taskSource;
/**
* 关联单据号 FQC 检验单号
*/
private String documentNo;
/**
* 语言CN / EN
*/
private String languageCode;
}

60
cclqms-java/src/main/java/com/gaotao/modules/api/dto/AutogenerateInspectionTaskResponseDto.java

@ -0,0 +1,60 @@
package com.gaotao.modules.api.dto;
import lombok.Data;
import java.util.Map;
/**
* 自动生成检验任务对外开放接口响应DTO
*/
@Data
public class AutogenerateInspectionTaskResponseDto {
/**
* 返回编码0成功/1失败
*/
private String code;
/**
* 返回消息
*/
private String msg;
/**
* 生成的检验单号
*/
private String inspectionNo;
/**
* 存储过程原始返回数据
*/
private Map<String, Object> data;
public static AutogenerateInspectionTaskResponseDto success() {
AutogenerateInspectionTaskResponseDto response = new AutogenerateInspectionTaskResponseDto();
response.setCode("0");
response.setMsg("创建检验任务成功");
return response;
}
public static AutogenerateInspectionTaskResponseDto success(String message) {
AutogenerateInspectionTaskResponseDto response = new AutogenerateInspectionTaskResponseDto();
response.setCode("0");
response.setMsg(message);
return response;
}
public static AutogenerateInspectionTaskResponseDto success(String inspectionNo, Map<String, Object> data) {
AutogenerateInspectionTaskResponseDto response = success();
response.setInspectionNo(inspectionNo);
response.setData(data);
return response;
}
public static AutogenerateInspectionTaskResponseDto failure(String message) {
AutogenerateInspectionTaskResponseDto response = new AutogenerateInspectionTaskResponseDto();
response.setCode("1");
response.setMsg(message);
return response;
}
}

98
cclqms-java/src/main/java/com/gaotao/modules/pms/service/Impl/QcServiceImpl.java

@ -5414,6 +5414,104 @@ public class QcServiceImpl implements QcService {
}
}
/**
* 对外开放调用存储过程 GetAutogenerateinspectiontasks 自动生成检验任务
*/
@Override
@Transactional
public Map<String, Object> autogenerateInspectionTasksApi(QcFAIRecordData data, String inspectionTypeKey) {
if (data == null) {
throw new RuntimeException(pmsI18nHelper.text("pms.error.param.required", null, "请求参数不能为空!"));
}
if (StringUtils.isBlank(inspectionTypeKey)) {
throw new RuntimeException(pmsI18nHelper.text("pms.error.inspectionType.required", null, "检验类型不能为空!"));
}
if (data.getBu() != null && data.getBu().split("_").length >= 2) {
data.setSite(data.getBu().split("_")[0]);
data.setBuNo(data.getBu().split("_")[1]);
} else if (StringUtils.isBlank(data.getSite()) || StringUtils.isBlank(data.getBuNo())) {
throw new RuntimeException(pmsI18nHelper.text("pms.error.siteBu.invalid", null, "工厂和部门有误!"));
}
String createBy = "";
try {
SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
if (sysUserEntity != null && sysUserEntity.getUsername() != null) {
createBy = sysUserEntity.getUsername();
}
} catch (Exception ignored) {
// 对外开放 API 可能无登录态忽略
}
if (StringUtils.isBlank(createBy)) {
createBy = StringUtils.isNotBlank(data.getCreateBy()) ? data.getCreateBy()
: (StringUtils.isNotBlank(data.getUserName()) ? data.getUserName() : "");
}
String inspectorBy = StringUtils.isNotBlank(data.getInspectorBy()) ? data.getInspectorBy()
: (StringUtils.isNotBlank(data.getUserName()) ? data.getUserName()
: (StringUtils.isNotBlank(data.getCreateBy()) ? data.getCreateBy() : createBy));
String inspectionType = resolveAutogenerateInspectionType(inspectionTypeKey, data.getInspectionTypeNo());
String orderNo = StringUtils.isNotBlank(data.getPoOrderNo()) ? data.getPoOrderNo()
: (data.getOrderNo() == null ? "" : data.getOrderNo());
String seqNo = StringUtils.isNotBlank(data.getPoItemNo()) ? data.getPoItemNo()
: (data.getSeqNo() == null ? "" : data.getSeqNo());
String supplierId = StringUtils.isNotBlank(data.getSupplierNo()) ? data.getSupplierNo() : "";
String customerId = StringUtils.isNotBlank(data.getCustomerNo()) ? data.getCustomerNo() : "";
String templateId = StringUtils.isNotBlank(data.getTemplateId()) ? data.getTemplateId() : "*";
String orderQty = data.getLotsize() != null ? String.valueOf(data.getLotsize())
: (data.getRollQty() == null ? "0" : String.valueOf(data.getRollQty()));
List<Object> params = new ArrayList<>();
params.add(data.getSite());
params.add(data.getBuNo());
params.add(data.getRollNo() == null ? "" : data.getRollNo());
params.add(data.getBatchNo() == null ? "" : data.getBatchNo());
params.add(orderNo);
params.add(seqNo);
params.add(data.getReleaseNo() == null ? "" : data.getReleaseNo());
params.add(data.getLineNo() == null ? "" : data.getLineNo());
params.add(data.getOperationDesc() == null ? "" : data.getOperationDesc());
params.add(data.getResourceId() == null ? "" : data.getResourceId());
params.add(data.getPartNo() == null ? "" : data.getPartNo());
params.add(inspectionType);
params.add(data.getRollQty() == null ? "0" : String.valueOf(data.getRollQty()));
params.add(orderQty);
params.add(createBy);
params.add(inspectorBy);
params.add(supplierId);
params.add(customerId);
params.add(templateId);
params.add(data.getSpecialRequirements() == null ? "" : data.getSpecialRequirements());
if (data.getTaskSource() != null && data.getTaskSource().equals("FQC导入")) {
params.add("任务新增");
} else {
params.add(data.getTaskSource() == null ? "" : data.getTaskSource());
}
params.add(pmsI18nHelper.resolveProcedureLanguageCode(data.getLanguageCode()));
params.add(data.getDocumentNo() == null ? "" : data.getDocumentNo());
logger.info("autogenerateInspectionTasksApi params:{}", params);
List<Map<String, Object>> resultList = procedureDao.getProcedureData("GetAutogenerateinspectiontasks", params);
if (resultList == null || resultList.isEmpty()) {
throw new RuntimeException(pmsI18nHelper.text("pms.error.inspection.create.failed", null, "创建检验任务失败!"));
}
Map<String, Object> result = resultList.get(0);
String code = result.get("resultCode") != null ? String.valueOf(result.get("resultCode"))
: (result.get("code") != null ? String.valueOf(result.get("code")) : "200");
String msg = result.get("resultMsg") != null ? String.valueOf(result.get("resultMsg"))
: (result.get("message") != null ? String.valueOf(result.get("message")) : "");
if ("400".equalsIgnoreCase(code) || (StringUtils.isNotBlank(msg) && msg.contains("未获取到检验数据"))) {
throw new RuntimeException(msg);
}
String inspectionNo = extractInspectionNoFromProcedureResult(result);
if (StringUtils.isNotBlank(inspectionNo)) {
data.setInspectionNo(inspectionNo);
result.put("inspectionNo", inspectionNo);
}
return result;
}
private void updateReleaseNoLineNoAfterAdd(QcFAIRecordData data, String inspectionTypeKey, Map<String, Object> result) {
if (StringUtils.isBlank(data.getReleaseNo()) && StringUtils.isBlank(data.getLineNo())) {
return;

9
cclqms-java/src/main/java/com/gaotao/modules/pms/service/QcService.java

@ -412,4 +412,13 @@ public interface QcService {
R saveEquipmentFolderLocationList(QCEquipmentFolderLocation inData);
void deleteEquipmentFolderLocationList(List<QCEquipmentFolderLocation> inData);
/**
* 对外开放调用存储过程 GetAutogenerateinspectiontasks 自动生成检验任务
*
* @param data 检验任务参数
* @param inspectionTypeKey 检验类型IQC / IPQC / FQC / OQC / SQC
* @return 存储过程返回结果 resultCoderesultMsginspectionNo
*/
Map<String, Object> autogenerateInspectionTasksApi(QcFAIRecordData data, String inspectionTypeKey);
}
Loading…
Cancel
Save