| | |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.operatelog.core.util.OperateLogUtils; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.iqc.vo.MesQcIqcImportExcelVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.iqc.vo.MesQcIqcPageReqVO; |
| | |
| | | import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import com.mzt.logapi.starter.annotation.LogRecord; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | import static cn.iocoder.yudao.module.mes.enums.LogRecordConstants.*; |
| | | |
| | | /** |
| | | * MES 来料检验单(IQC) Service 实现类 |
| | |
| | | } |
| | | |
| | | private void validateIqcSaveData(MesQcIqcSaveReqVO reqVO) { |
| | | // 空字符串也需要写入,以支持编辑时清空手填名称。 |
| | | if (reqVO.getVendorName() != null) { |
| | | reqVO.setVendorName(reqVO.getVendorName().trim()); |
| | | } |
| | | // 校验编号唯一 |
| | | validateIqcCodeUnique(reqVO.getId(), reqVO.getCode()); |
| | | // 校验供应商存在 |
| | | if (reqVO.getVendorId() != null) { |
| | | srmSupplierApi.getSupplier(reqVO.getVendorId()); |
| | | var supplier = srmSupplierApi.getSupplier(reqVO.getVendorId()).getCheckedData(); |
| | | if (reqVO.getVendorName() == null && supplier != null) { |
| | | reqVO.setVendorName(supplier.getName()); |
| | | } |
| | | } |
| | | // 校验物料存在(使用 MDM 物料) |
| | | if (reqVO.getItemId() != null) { |
| | |
| | | iqc.setSourceLineId(line.getId()); |
| | | iqc.setSourceDocCode(noticeCode); |
| | | iqc.setVendorId(vendorId); |
| | | if (vendorId != null) { |
| | | var supplier = srmSupplierApi.getSupplier(vendorId).getCheckedData(); |
| | | if (supplier != null) { |
| | | iqc.setVendorName(supplier.getName()); |
| | | } |
| | | } |
| | | iqc.setItemId(line.getItemId()); |
| | | iqc.setReceivedQuantity(line.getArrivalQuantity()); |
| | | iqc.setCheckQuantity(BigDecimal.ZERO); // 待填写 |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @LogRecord(type = MES_QC_IQC_TYPE, subType = MES_QC_IQC_IMPORT_SUB_TYPE, bizNo = "0", |
| | | success = MES_QC_IQC_IMPORT_SUCCESS) |
| | | public MesQcImportRespVO importIqcList(List<MesQcIqcImportExcelVO> importList) { |
| | | MesQcImportRespVO respVO = MesQcImportRespVO.builder() |
| | | .createList(new ArrayList<>()).failureList(new LinkedHashMap<>()).build(); |
| | | if (CollUtil.isEmpty(importList)) { |
| | | // 空文件也要给日志文案兜底,避免 {{#importSummary}} 取不到值 |
| | | OperateLogUtils.putImportSummary(respVO.getCreateList(), null, respVO.getFailureList()); |
| | | return respVO; |
| | | } |
| | | qcImportHelper.startImport(); |
| | |
| | | respVO.getFailureList().put(label, MesQcImportHelper.resolveImportErrorMessage(ex)); |
| | | } |
| | | } |
| | | // 记录导入结果汇总,供 @LogRecord 的 success 文案引用 |
| | | OperateLogUtils.putImportSummary(respVO.getCreateList(), null, respVO.getFailureList()); |
| | | return respVO; |
| | | } |
| | | |
| | |
| | | } |
| | | reqVO.setName(row.getName().trim()); |
| | | reqVO.setItemId(qcImportHelper.resolveItemId(row.getItemCode())); |
| | | reqVO.setVendorId(qcImportHelper.resolveVendorId(row.getVendorName())); |
| | | reqVO.setVendorName(StrUtil.trimToEmpty(row.getVendorName())); |
| | | reqVO.setVendorBatch(StrUtil.trimToNull(row.getVendorBatch())); |
| | | reqVO.setTemplateId(qcImportHelper.resolveTemplateId(row.getTemplateName())); |
| | | // 3. 数量:合格品 + 不合格品 必须等于本次接收数量(接收数量留空则自动合计) |
| | |
| | | reqVO.setReceiveDate(qcImportHelper.parseRequiredDateTime(row.getReceiveDate(), "来料日期")); |
| | | reqVO.setRemark(StrUtil.trimToNull(row.getRemark())); |
| | | // 5. 去重:同一 物料 + 供应商 + 供应商批次 + 来料日期 的来料检验单不可重复导入 |
| | | MesQcIqcDO duplicate = CollUtil.getFirst(iqcMapper.selectListByImportKey(reqVO.getItemId(), reqVO.getVendorId(), |
| | | MesQcIqcDO duplicate = CollUtil.getFirst(iqcMapper.selectListByImportKey(reqVO.getItemId(), reqVO.getVendorName(), |
| | | reqVO.getVendorBatch(), reqVO.getReceiveDate())); |
| | | if (duplicate != null) { |
| | | throw MesQcImportHelper.duplicateExistingException(buildImportKeyDesc(row), "来料检验单", |