流程生产订单审批后推送高压IMS-增加修改sql
This commit is contained in:
parent
5570e015b4
commit
ad7bd64aa0
|
|
@ -6,6 +6,7 @@ import nc.bs.logging.Log;
|
||||||
import nc.bs.uapbd.util.MyHelper;
|
import nc.bs.uapbd.util.MyHelper;
|
||||||
import nc.impl.pubapp.pattern.rule.IRule;
|
import nc.impl.pubapp.pattern.rule.IRule;
|
||||||
import nc.jdbc.framework.SQLParameter;
|
import nc.jdbc.framework.SQLParameter;
|
||||||
|
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
|
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
|
||||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO;
|
import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO;
|
||||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
|
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
|
||||||
|
|
@ -45,7 +46,9 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
||||||
return imsDao;
|
return imsDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 表头-表名
|
||||||
private static final String HEAD_TABLE = "BIPOrderMainTab";
|
private static final String HEAD_TABLE = "BIPOrderMainTab";
|
||||||
|
// 表体-表名
|
||||||
private static final String BODY_TABLE = "BIPOrderDetailTab";
|
private static final String BODY_TABLE = "BIPOrderDetailTab";
|
||||||
private static final String[] HEAD_COLUMNS = {"cpmohid", "pk_org", "cplanfactoryid", "dbilldate", "vbillcode", "ctrantypeid", "vtrantypecode", "fbillstatus",
|
private static final String[] HEAD_COLUMNS = {"cpmohid", "pk_org", "cplanfactoryid", "dbilldate", "vbillcode", "ctrantypeid", "vtrantypecode", "fbillstatus",
|
||||||
"approver", "approvertime", "billmaker", "dmakedate", "vnote", "creator", "creationtime", "status"};
|
"approver", "approvertime", "billmaker", "dmakedate", "vnote", "creator", "creationtime", "status"};
|
||||||
|
|
@ -85,54 +88,40 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建同步数据
|
* 构建同步数据逻辑,根据主键判断是新增还是更新
|
||||||
*/
|
*/
|
||||||
private void buildSyncData(PMOAggVO[] useVOs) throws BusinessException {
|
private void buildSyncData(PMOAggVO[] useVOs) throws BusinessException {
|
||||||
for (PMOAggVO vo : useVOs) {
|
for (PMOAggVO vo : useVOs) {
|
||||||
PMOHeadVO pmoHeadVO = vo.getParentVO();
|
PMOHeadVO pmoHeadVO = vo.getParentVO();
|
||||||
PMOItemVO[] itemVOS = vo.getChildrenVO();
|
PMOItemVO[] itemVOS = vo.getChildrenVO();
|
||||||
// 判断物料的业务单元是否是高压加工车间,不是则跳过
|
// 判断订单业务单元是否是高压IMS组织,如果是则跳过
|
||||||
String pkOrg = pmoHeadVO.getPk_org();
|
String pkOrg = pmoHeadVO.getPk_org();
|
||||||
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
|
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
|
||||||
if (checkIfOrg(orgCode, configParams)) {
|
if (checkIfOrg(orgCode, configParams)) {
|
||||||
continue;
|
// continue;
|
||||||
}
|
}
|
||||||
// 表头
|
|
||||||
// 构建插入表头数据的SQL
|
|
||||||
String headSql = buildInsertSQL(HEAD_TABLE, HEAD_COLUMNS);
|
|
||||||
|
|
||||||
SQLParameter headParams = buildHeadParameters(pmoHeadVO);
|
// 获取主键值
|
||||||
List<Map<String, SQLParameter>> bodyParameterList = new ArrayList<>();
|
String headPrimaryKeyValue = (String) pmoHeadVO.getAttributeValue("cpmohid");
|
||||||
|
|
||||||
|
// 根据是否存在记录构建相应的SQL
|
||||||
|
String headSql = buildSQL(HEAD_TABLE, HEAD_COLUMNS, "cpmohid", headPrimaryKeyValue);
|
||||||
|
SQLParameter headParams = buildHeadParameters(pmoHeadVO, headSql.contains("UPDATE"));
|
||||||
|
|
||||||
|
// 处理表体数据
|
||||||
|
List<String> bodySqlList = new ArrayList<>();
|
||||||
|
List<SQLParameter> bodyParameterList = new ArrayList<>();
|
||||||
|
|
||||||
for (PMOItemVO item : itemVOS) {
|
for (PMOItemVO item : itemVOS) {
|
||||||
Map<String, SQLParameter> itemMap = new HashMap<>();
|
String bodyPrimaryKeyValue = (String) item.getAttributeValue("cmoid");
|
||||||
// 构建明细表SQL
|
String bodySql = buildSQL(BODY_TABLE, BODY_COLUMNS, "cmoid", bodyPrimaryKeyValue);
|
||||||
String bodySql = buildInsertSQL(BODY_TABLE, BODY_COLUMNS);
|
SQLParameter bodyParams = buildBodyParameters(item, pmoHeadVO, bodySql.contains("UPDATE"));
|
||||||
// 添加表体参数
|
bodySqlList.add(bodySql);
|
||||||
SQLParameter bodyParams = buildBodyParameters(item, pmoHeadVO);
|
bodyParameterList.add(bodyParams);
|
||||||
itemMap.put(bodySql, bodyParams);
|
|
||||||
bodyParameterList.add(itemMap);
|
|
||||||
}
|
}
|
||||||
pushData(headSql, headParams, bodyParameterList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
pushData(headSql, headParams, bodySqlList, bodyParameterList);
|
||||||
* 推送同步数据
|
|
||||||
*/
|
|
||||||
private void pushData(String headSql, SQLParameter headParams, List<Map<String, SQLParameter>> bodyParameterList) throws BusinessException {
|
|
||||||
logger.error("gyIms-PMO-headSql = " + headSql);
|
|
||||||
int HeadRowsAffected = getImsDao().executeUpdate(headSql, headParams);
|
|
||||||
if (HeadRowsAffected != 1) {
|
|
||||||
NCCForUAPLogger.debug("gyIms-PMO-headSql = " + headSql);
|
|
||||||
}
|
}
|
||||||
for (Map<String, SQLParameter> map : bodyParameterList) {
|
|
||||||
String bodySql = map.keySet().iterator().next();
|
|
||||||
int bodyRowsAffected = getImsDao().executeUpdate(bodySql, map.get(bodySql));
|
|
||||||
if (bodyRowsAffected != 1) {
|
|
||||||
NCCForUAPLogger.debug("gyIms-PMO-bodySql = " + bodySql);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// logger.error("gyIms-PMO-res = " + result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkIfOrg(String code, Map<String, String> configParams) throws BusinessException {
|
private boolean checkIfOrg(String code, Map<String, String> configParams) throws BusinessException {
|
||||||
|
|
@ -149,6 +138,20 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildSQL(String tableName, String[] columns, String pkColumn, Object pkValue) throws BusinessException {
|
||||||
|
// 检查记录是否存在
|
||||||
|
String checkSql = "SELECT COUNT(1) FROM " + tableName + " WHERE " + pkColumn + " = '" + pkValue + "'";
|
||||||
|
Integer count = (Integer) getImsDao().executeQuery(checkSql, new ColumnProcessor());
|
||||||
|
|
||||||
|
if (count > 0) {
|
||||||
|
// 构建UPDATE SQL
|
||||||
|
return buildUpdateSQL(tableName, columns, pkColumn);
|
||||||
|
} else {
|
||||||
|
// 构建INSERT SQL
|
||||||
|
return buildInsertSQL(tableName, columns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String buildInsertSQL(String tableName, String[] columns) {
|
private String buildInsertSQL(String tableName, String[] columns) {
|
||||||
int columnCount = columns.length;
|
int columnCount = columns.length;
|
||||||
StringBuilder sqlBuilder = new StringBuilder();
|
StringBuilder sqlBuilder = new StringBuilder();
|
||||||
|
|
@ -173,43 +176,114 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
||||||
return sqlBuilder.toString();
|
return sqlBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildUpdateSQL(String tableName, String[] columns, String pkColumn) {
|
||||||
|
StringBuilder sqlBuilder = new StringBuilder();
|
||||||
|
sqlBuilder.append("UPDATE ").append(tableName).append(" SET ");
|
||||||
|
|
||||||
private SQLParameter buildHeadParameters(PMOHeadVO pmoHeadVO) {
|
boolean first = true;
|
||||||
SQLParameter headParams = new SQLParameter();
|
for (String column : columns) {
|
||||||
for (String column : HEAD_COLUMNS) {
|
// 主键字段不更新
|
||||||
if ("status".equals(column)) {
|
if (!column.equals(pkColumn)) {
|
||||||
continue;
|
if (!first) {
|
||||||
|
sqlBuilder.append(", ");
|
||||||
|
}
|
||||||
|
sqlBuilder.append(column).append(" = ?");
|
||||||
|
first = false;
|
||||||
}
|
}
|
||||||
Object value = pmoHeadVO.getAttributeValue(column);
|
|
||||||
if (headNumFields.contains(column)) {
|
|
||||||
value = skipNullForNumber(value);
|
|
||||||
} else {
|
|
||||||
value = skipNull(value);
|
|
||||||
}
|
|
||||||
headParams.addParam(value);
|
|
||||||
}
|
}
|
||||||
// status C=创建U=修改2=处理完成
|
|
||||||
headParams.addParam("C");// 默认状态为C(新增)
|
sqlBuilder.append(" WHERE ").append(pkColumn).append(" = ?");
|
||||||
|
return sqlBuilder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private SQLParameter buildHeadParameters(PMOHeadVO pmoHeadVO, boolean isUpdate) {
|
||||||
|
SQLParameter headParams = new SQLParameter();
|
||||||
|
|
||||||
|
if (isUpdate) {
|
||||||
|
// UPDATE情况:不包含主键字段在参数前面,主键作为WHERE条件在最后
|
||||||
|
for (String column : HEAD_COLUMNS) {
|
||||||
|
if (!"cpmohid".equals(column)) { // 主键字段不作为更新字段
|
||||||
|
if ("status".equals(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Object value = pmoHeadVO.getAttributeValue(column);
|
||||||
|
if (headNumFields.contains(column)) {
|
||||||
|
value = skipNullForNumber(value);
|
||||||
|
} else {
|
||||||
|
value = skipNull(value);
|
||||||
|
}
|
||||||
|
headParams.addParam(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// status C=创建U=修改2=处理完成
|
||||||
|
headParams.addParam("U"); // 更新状态为U(修改)
|
||||||
|
// 添加主键作为WHERE条件
|
||||||
|
headParams.addParam(pmoHeadVO.getAttributeValue("cpmohid"));
|
||||||
|
} else {
|
||||||
|
// INSERT情况:包含所有字段
|
||||||
|
for (String column : HEAD_COLUMNS) {
|
||||||
|
if ("status".equals(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Object value = pmoHeadVO.getAttributeValue(column);
|
||||||
|
if (headNumFields.contains(column)) {
|
||||||
|
value = skipNullForNumber(value);
|
||||||
|
} else {
|
||||||
|
value = skipNull(value);
|
||||||
|
}
|
||||||
|
headParams.addParam(value);
|
||||||
|
}
|
||||||
|
// status C=创建U=修改2=处理完成
|
||||||
|
headParams.addParam("C"); // 默认状态为C(新增)
|
||||||
|
}
|
||||||
|
|
||||||
return headParams;
|
return headParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
private SQLParameter buildBodyParameters(PMOItemVO item, PMOHeadVO pmoHeadVO) {
|
private SQLParameter buildBodyParameters(PMOItemVO item, PMOHeadVO pmoHeadVO, boolean isUpdate) {
|
||||||
SQLParameter bodyParams = new SQLParameter();
|
SQLParameter bodyParams = new SQLParameter();
|
||||||
for (String column : BODY_COLUMNS) {
|
|
||||||
Object value;
|
if (isUpdate) {
|
||||||
if ("vbillcode".equals(column)) {
|
// UPDATE情况:不包含主键字段在参数前面,主键作为WHERE条件在最后
|
||||||
value = pmoHeadVO.getAttributeValue(column);
|
for (String column : BODY_COLUMNS) {
|
||||||
} else {
|
if (!"cmoid".equals(column)) { // 主键字段不作为更新字段
|
||||||
value = item.getAttributeValue(column);
|
Object value;
|
||||||
|
if ("vbillcode".equals(column)) {
|
||||||
|
value = pmoHeadVO.getAttributeValue(column);
|
||||||
|
} else {
|
||||||
|
value = item.getAttributeValue(column);
|
||||||
|
}
|
||||||
|
// 数值字段需要特殊处理空值
|
||||||
|
if (bodyNumFields.contains(column)) {
|
||||||
|
value = skipNullForNumber(value);
|
||||||
|
} else {
|
||||||
|
value = skipNull(value);
|
||||||
|
}
|
||||||
|
bodyParams.addParam(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 根据字段类型选择不同的空值处理方式
|
// 添加主键作为WHERE条件
|
||||||
if (bodyNumFields.contains(column)) {
|
bodyParams.addParam(item.getAttributeValue("cmoid"));
|
||||||
value = skipNullForNumber(value);
|
} else {
|
||||||
} else {
|
// INSERT情况:包含所有字段
|
||||||
value = skipNull(value);
|
for (String column : BODY_COLUMNS) {
|
||||||
|
Object value;
|
||||||
|
if ("vbillcode".equals(column)) {
|
||||||
|
value = pmoHeadVO.getAttributeValue(column);
|
||||||
|
} else {
|
||||||
|
value = item.getAttributeValue(column);
|
||||||
|
}
|
||||||
|
// 数值字段需要特殊处理空值
|
||||||
|
if (bodyNumFields.contains(column)) {
|
||||||
|
value = skipNullForNumber(value);
|
||||||
|
} else {
|
||||||
|
value = skipNull(value);
|
||||||
|
}
|
||||||
|
bodyParams.addParam(value);
|
||||||
}
|
}
|
||||||
bodyParams.addParam(value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return bodyParams;
|
return bodyParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -260,5 +334,26 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 推送数据到IMS系统
|
||||||
|
*/
|
||||||
|
private void pushData(String headSql, SQLParameter headParams, List<String> bodySqlList, List<SQLParameter> bodyParameterList) throws BusinessException {
|
||||||
|
logger.error("gyIms-PMO-headSql = " + headSql);
|
||||||
|
int headRowsAffected = getImsDao().executeUpdate(headSql, headParams);
|
||||||
|
if (headRowsAffected != 1) {
|
||||||
|
NCCForUAPLogger.debug("gyIms-PMO-headSql = " + headSql);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < bodySqlList.size(); i++) {
|
||||||
|
String bodySql = bodySqlList.get(i);
|
||||||
|
SQLParameter parameter = bodyParameterList.get(i);
|
||||||
|
int bodyRowsAffected = getImsDao().executeUpdate(bodySql, parameter);
|
||||||
|
if (bodyRowsAffected != 1) {
|
||||||
|
NCCForUAPLogger.debug("gyIms-PMO-bodySql = " + bodySql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// logger.error("gyIms-PMO-res = " + result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue