feat(mmpac): 增加C038组织vdef7(启源单据号)重复校验逻辑

This commit is contained in:
mzr 2025-10-14 10:00:44 +08:00
parent e39327ab16
commit 3b92d6f854
1 changed files with 48 additions and 27 deletions

View File

@ -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<BilltypeVO> collection = (List<BilltypeVO>) 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<String, Object> bodyInfo = (Map<String, Object>) 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<AggWrVO> aggWrVOS = TransferCodeToPKTool.transferAggVO(voList);
//翻译报告类型
// 翻译报告类型
for (AggWrVO aggWrVO : aggWrVOS) {
List<BilltypeVO> collection = (List<BilltypeVO>) 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<String, Object> headInfo, List<Map<String, Object>> itemInfos, BaseDAO baseDAO)
@ -590,7 +606,7 @@ public class WrResource extends AbstractNCCRestResource {
for (Map<String, Object> itemMap : itemInfos) {
// 处理MES相关字段自动赋值
processMESFields(itemMap, baseDAO);
// 处理质量信息中的仓库转换
if (itemMap.containsKey(QUALITYTABLE)) {
List<Map<String, Object>> qualityInfos = (List<Map<String, Object>>) 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<String, Object> 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<Map<String, Object>> qualityInfos, BaseDAO baseDAO)
private void processWarehouseConversion(List<Map<String, Object>> qualityInfos, BaseDAO baseDAO)
throws BusinessException {
if (qualityInfos == null || qualityInfos.isEmpty()) {
return;
}
for (Map<String, Object> 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 如果仓库不存在
*/