From 3b92d6f854a69b468d17cc138e77c34a0ea72703 Mon Sep 17 00:00:00 2001 From: mzr Date: Tue, 14 Oct 2025 10:00:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(mmpac):=20=E5=A2=9E=E5=8A=A0C038=E7=BB=84?= =?UTF-8?q?=E7=BB=87vdef7(=E5=90=AF=E6=BA=90=E5=8D=95=E6=8D=AE=E5=8F=B7)?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E6=A0=A1=E9=AA=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nccloud/openapi/mmpac/wr/WrResource.java | 75 ++++++++++++------- 1 file changed, 48 insertions(+), 27 deletions(-) diff --git a/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java b/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java index 2730eb61..0dae270d 100644 --- a/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java +++ b/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java @@ -20,6 +20,7 @@ import nc.vo.pub.billtype.BilltypeVO; import nc.vo.pub.lang.UFDate; import nc.vo.pubapp.AppContext; import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.ws.opm.pub.utils.result.APIErrCodeEnum; import nccloud.api.mmpac.wr.IAPIWrMaintain; import nccloud.api.rest.utils.NCCRestUtils; import nccloud.api.rest.utils.ResultMessageUtil; @@ -134,8 +135,8 @@ public class WrResource extends AbstractNCCRestResource { BaseDAO baseDAO = new BaseDAO(); for (AggWrVO aggWrVO : aggWrVOS) { List collection = (List) baseDAO.retrieveByClause(BilltypeVO.class, " pk_billtypecode='" + aggWrVO.getParentVO().getVtrantypecode() + "'"); - if(collection==null||collection.size()==0){ - throw new BusinessException("翻译报告类型失败,检查报告类型编码【"+aggWrVO.getParentVO().getVtrantypecode()+"】"); + if (collection == null || collection.size() == 0) { + throw new BusinessException("翻译报告类型失败,检查报告类型编码【" + aggWrVO.getParentVO().getVtrantypecode() + "】"); } aggWrVO.getParentVO().setVtrantypeid(collection.get(0).getPk_billtypeid()); aggWrVO.getParentVO().setDbilldate(new UFDate()); @@ -305,6 +306,19 @@ public class WrResource extends AbstractNCCRestResource { Map bodyInfo = (Map) paramMap.get(BODYTABLE); itemInfos.add(bodyInfo); } + // 精密(C038)专项需求,vdef7(启源MES单据号)有值且能在数据库中查到,则返回提示请勿重复添加 + if ("C038".equals(headInfo.get("pk_org"))) { + if (MMValueCheck.isEmpty(headInfo.get("vdef7"))) { + return ResultMessageUtil.exceptionToJSON("精密铸造组织需要传vdef7(启源MES单据号)的值", APIErrCodeEnum.BUSINESSEXCCODE.getCode()); + } + String vdef7 = headInfo.get("vdef7") + ""; + String countSql = "select count(1) from mm_wr where dr = 0 and vdef7 = '" + vdef7 + "'"; + // NCCForUAPLogger.debug("countSql = " + countSql); + Integer num = (Integer) new BaseDAO().executeQuery(countSql, new ColumnProcessor()); + if (num > 0) { + return ResultMessageUtil.exceptionToJSON("C038组织下单号(" + vdef7 + ")已存在,请勿重复添加", APIErrCodeEnum.BUSINESSEXCCODE.getCode()); + } + } // 预处理数据:处理仓库转换和MES相关字段 preProcessMesData(headInfo, itemInfos, baseDAO); @@ -356,11 +370,11 @@ public class WrResource extends AbstractNCCRestResource { voList.add(vo); IAPIWrMaintain server = NCLocator.getInstance().lookup(IAPIWrMaintain.class); List aggWrVOS = TransferCodeToPKTool.transferAggVO(voList); - //翻译报告类型 + // 翻译报告类型 for (AggWrVO aggWrVO : aggWrVOS) { List collection = (List) baseDAO.retrieveByClause(BilltypeVO.class, " pk_billtypecode='" + aggWrVO.getParentVO().getVtrantypecode() + "'"); - if(collection==null||collection.size()==0){ - throw new BusinessException("翻译报告类型失败,检查报告类型编码【"+aggWrVO.getParentVO().getVtrantypecode()+"】"); + if (collection == null || collection.size() == 0) { + throw new BusinessException("翻译报告类型失败,检查报告类型编码【" + aggWrVO.getParentVO().getVtrantypecode() + "】"); } aggWrVO.getParentVO().setVtrantypeid(collection.get(0).getPk_billtypeid()); aggWrVO.getParentVO().setDbilldate(new UFDate()); @@ -573,15 +587,17 @@ public class WrResource extends AbstractNCCRestResource { } server.delete(deleteVos.toArray(new AggWrVO[0])); return ResultMessageUtil.toJSON(new String[0], "生产报告删除成功"); - } catch (Exception e) { return ResultMessageUtil.exceptionToJSON(e); + } catch (Exception e) { + return ResultMessageUtil.exceptionToJSON(e); } } /** * 预处理数据:包含仓库转换和MES相关字段处理 - * @param headInfo 表头信息 + * + * @param headInfo 表头信息 * @param itemInfos 表体信息列表 - * @param baseDAO 数据库操作对象 + * @param baseDAO 数据库操作对象 * @throws BusinessException 处理失败时抛出异常 */ private void preProcessMesData(Map headInfo, List> itemInfos, BaseDAO baseDAO) @@ -590,7 +606,7 @@ public class WrResource extends AbstractNCCRestResource { for (Map itemMap : itemInfos) { // 处理MES相关字段自动赋值 processMESFields(itemMap, baseDAO); - + // 处理质量信息中的仓库转换 if (itemMap.containsKey(QUALITYTABLE)) { List> qualityInfos = (List>) itemMap.get(QUALITYTABLE); @@ -598,51 +614,52 @@ public class WrResource extends AbstractNCCRestResource { } } } - + /** * 处理MES相关字段自动赋值 * 如果用户code是MES,那么将cbmoid保持和vbsrcid一致,cbmobid保持和vbsrcrowid一致 * 增加vbmobillcode单据号,通过cbmoid查询流程生产订单表的vbillcode + * * @param itemMap 表体信息 * @param baseDAO 数据库操作对象 * @throws BusinessException 查询失败时抛出异常 */ private void processMESFields(Map itemMap, BaseDAO baseDAO) throws BusinessException { - //检查是否需要处理MES字段 + // 检查是否需要处理MES字段 // 这里可以通过上下文、用户信息或其他标识来判断 // 暂时通过检查是否存在特定字段来判断是MES用户 boolean isMESUser = isMESUser(itemMap); - + if (!isMESUser) { return; } - + try { - //设置cbmoid保持和vbsrcid一致 + // 设置cbmoid保持和vbsrcid一致 if (itemMap.containsKey("vbsrcid") && MMValueCheck.isNotEmpty(itemMap.get("vbsrcid"))) { itemMap.put("cbmoid", itemMap.get("vbsrcid")); } - + // 设置cbmobid保持和vbsrcrowid一致 if (itemMap.containsKey("vbsrcrowid") && MMValueCheck.isNotEmpty(itemMap.get("vbsrcrowid"))) { itemMap.put("cbmobid", itemMap.get("vbsrcrowid")); } - // 通过cbmoid查询流程生产订单表的vbillcode + // 通过cbmoid查询流程生产订单表的vbillcode if (itemMap.containsKey("cbmoid") && MMValueCheck.isNotEmpty(itemMap.get("cbmoid"))) { String cbmoid = String.valueOf(itemMap.get("cbmoid")); String sql = "SELECT vbillcode FROM mm_pmo WHERE cpmohid = ? AND dr = 0"; SQLParameter param = new SQLParameter(); param.addParam(cbmoid); String vbillcode = (String) baseDAO.executeQuery(sql, param, new ColumnProcessor()); - + if (MMValueCheck.isEmpty(vbillcode)) { throw new BusinessException("通过流程生产订单主键【" + cbmoid + "】查询不到对应的单据号,请检查数据"); } - + itemMap.put("vbmobillcode", vbillcode); } - + } catch (Exception e) { if (e instanceof BusinessException) { throw e; @@ -650,9 +667,11 @@ public class WrResource extends AbstractNCCRestResource { throw new BusinessException("处理MES字段失败:" + e.getMessage()); } } - /** + + /** * 判断是否为MES用户 * 通过获取线程上下文中的用户编码来判断是否为MES用户 + * * @param itemMap 表体信息(保留参数以保持方法签名一致性) * @return 是否为MES用户 */ @@ -661,29 +680,30 @@ public class WrResource extends AbstractNCCRestResource { try { // 获取当前线程上下文中的用户编码 String userCode = InvocationInfoProxy.getInstance().getUserCode(); - + // 判断用户编码是否为MES return "MES".equals(userCode); - + } catch (Exception e) { // 如果获取用户编码失败,记录日志并返回false Log.getInstance("mm-mes").error("获取用户编码失败:" + e.getMessage(), e); return false; } } - + /** * 处理仓库转换(将原有的仓库转换逻辑包装成独立函数) + * * @param qualityInfos 质量信息列表 - * @param baseDAO 数据库操作对象 + * @param baseDAO 数据库操作对象 * @throws BusinessException 转换失败时抛出异常 */ - private void processWarehouseConversion(List> qualityInfos, BaseDAO baseDAO) + private void processWarehouseConversion(List> qualityInfos, BaseDAO baseDAO) throws BusinessException { if (qualityInfos == null || qualityInfos.isEmpty()) { return; } - + for (Map qualityInfo : qualityInfos) { if (qualityInfo.containsKey("cgwarehouseid") && MMValueCheck.isNotEmpty(qualityInfo.get("cgwarehouseid"))) { String warehouseValue = String.valueOf(qualityInfo.get("cgwarehouseid")); @@ -696,8 +716,9 @@ public class WrResource extends AbstractNCCRestResource { /** * 转换仓库编码为主键 * 首先假设传入值是主键,如果查询不到,再假设是编码进行查询 + * * @param warehouseValue 仓库值(可能是主键或编码) - * @param baseDAO 数据库操作对象 + * @param baseDAO 数据库操作对象 * @return 仓库主键 * @throws BusinessException 如果仓库不存在 */