mmpac生产报告: 增加 MES 数据处理功能
- 新增 preProcessMesData 方法预处理 MES 数据 - 实现 processMESFields 方法自动赋值 MES 相关字段 - 添加 processWarehouseConversion 方法处理仓库转换逻辑 -优化 convertWarehouseCodeToPk 方法查询仓库主键
This commit is contained in:
parent
c112da9a0f
commit
941dec1543
|
@ -1,18 +1,18 @@
|
|||
package nccloud.openapi.mmpac.wr;
|
||||
|
||||
|
||||
import nc.bs.dao.BaseDAO;
|
||||
import nc.bs.framework.common.InvocationInfoProxy;
|
||||
import nc.bs.framework.common.NCLocator;
|
||||
import nc.bs.logging.Log;
|
||||
import nc.bs.uif2.validation.ValidationFailure;
|
||||
import nc.jdbc.framework.SQLParameter;
|
||||
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||
import nc.util.mmf.framework.base.MMArrayUtil;
|
||||
import nc.util.mmf.framework.base.MMCollectionUtil;
|
||||
import nc.util.mmf.framework.base.MMNumberUtil;
|
||||
import nc.util.mmf.framework.base.MMValueCheck;
|
||||
import nc.vo.mmpac.wr.entity.AggWrVO;
|
||||
import nc.vo.mmpac.wr.entity.WrItemVO;
|
||||
import nc.vo.mmpac.wr.entity.WrQualityVO;
|
||||
import nc.vo.mmpac.wr.entity.WrSerialNoVO;
|
||||
import nc.vo.mmpac.wr.entity.WrVO;
|
||||
import nc.vo.mmpac.wr.entity.*;
|
||||
import nc.vo.mmpac.wr.enumeration.WrBillStatusEnum;
|
||||
import nc.vo.pub.BusinessException;
|
||||
import nc.vo.pub.VOStatus;
|
||||
|
@ -31,14 +31,7 @@ import javax.ws.rs.Consumes;
|
|||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
@Path("mmpac/wr")
|
||||
public class WrResource extends AbstractNCCRestResource {
|
||||
|
@ -312,6 +305,9 @@ public class WrResource extends AbstractNCCRestResource {
|
|||
Map<String, Object> bodyInfo = (Map<String, Object>) paramMap.get(BODYTABLE);
|
||||
itemInfos.add(bodyInfo);
|
||||
}
|
||||
|
||||
// 预处理数据:处理仓库转换和MES相关字段
|
||||
preProcessMesData(headInfo, itemInfos, baseDAO);
|
||||
AggWrVO vo = new AggWrVO();
|
||||
WrVO head = new WrVO();
|
||||
head.setPk_group(AppContext.getInstance().getPkGroup());
|
||||
|
@ -577,9 +573,169 @@ 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 itemInfos 表体信息列表
|
||||
* @param baseDAO 数据库操作对象
|
||||
* @throws BusinessException 处理失败时抛出异常
|
||||
*/
|
||||
private void preProcessMesData(Map<String, Object> headInfo, List<Map<String, Object>> itemInfos, BaseDAO baseDAO)
|
||||
throws BusinessException {
|
||||
// 处理表体信息中的数据转换
|
||||
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);
|
||||
processWarehouseConversion(qualityInfos, baseDAO);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理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用户
|
||||
boolean isMESUser = isMESUser(itemMap);
|
||||
|
||||
if (!isMESUser) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 设置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
|
||||
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;
|
||||
}
|
||||
throw new BusinessException("处理MES字段失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 判断是否为MES用户
|
||||
* 通过获取线程上下文中的用户编码来判断是否为MES用户
|
||||
* @param itemMap 表体信息(保留参数以保持方法签名一致性)
|
||||
* @return 是否为MES用户
|
||||
*/
|
||||
|
||||
private boolean isMESUser(Map<String, Object> itemMap) {
|
||||
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 数据库操作对象
|
||||
* @throws BusinessException 转换失败时抛出异常
|
||||
*/
|
||||
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"));
|
||||
String warehousePk = convertWarehouseCodeToPk(warehouseValue, baseDAO);
|
||||
qualityInfo.put("cgwarehouseid", warehousePk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换仓库编码为主键
|
||||
* 首先假设传入值是主键,如果查询不到,再假设是编码进行查询
|
||||
* @param warehouseValue 仓库值(可能是主键或编码)
|
||||
* @param baseDAO 数据库操作对象
|
||||
* @return 仓库主键
|
||||
* @throws BusinessException 如果仓库不存在
|
||||
*/
|
||||
private String convertWarehouseCodeToPk(String warehouseValue, BaseDAO baseDAO) throws BusinessException {
|
||||
if (MMValueCheck.isEmpty(warehouseValue)) {
|
||||
return warehouseValue;
|
||||
}
|
||||
try {
|
||||
// 首先假设是主键,直接查询
|
||||
String sql = "SELECT pk_stordoc FROM bd_stordoc WHERE pk_stordoc = ? AND dr = 0";
|
||||
SQLParameter param = new SQLParameter();
|
||||
param.addParam(warehouseValue);
|
||||
String result = (String) baseDAO.executeQuery(sql, param, new ColumnProcessor());
|
||||
|
||||
if (MMValueCheck.isNotEmpty(result)) {
|
||||
// 主键查询成功,直接返回
|
||||
return warehouseValue;
|
||||
}
|
||||
|
||||
// 主键查询失败,假设是编码查询
|
||||
sql = "SELECT pk_stordoc FROM bd_stordoc WHERE code = ? AND dr = 0";
|
||||
param = new SQLParameter();
|
||||
param.addParam(warehouseValue);
|
||||
result = (String) baseDAO.executeQuery(sql, param, new ColumnProcessor());
|
||||
|
||||
if (MMValueCheck.isNotEmpty(result)) {
|
||||
// 编码查询成功,返回主键
|
||||
return result;
|
||||
}
|
||||
|
||||
// 都查询不到,抛出异常
|
||||
throw new BusinessException("仓库【" + warehouseValue + "】不存在,请检查仓库编码或主键");
|
||||
|
||||
} catch (Exception e) {
|
||||
if (e instanceof BusinessException) {
|
||||
throw e;
|
||||
}
|
||||
throw new BusinessException("查询仓库信息失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue