流程生产订单审批后推送高压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.impl.pubapp.pattern.rule.IRule;
|
||||
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.PMOHeadVO;
|
||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
|
||||
|
|
@ -45,7 +46,9 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
|||
return imsDao;
|
||||
}
|
||||
|
||||
// 表头-表名
|
||||
private static final String HEAD_TABLE = "BIPOrderMainTab";
|
||||
// 表体-表名
|
||||
private static final String BODY_TABLE = "BIPOrderDetailTab";
|
||||
private static final String[] HEAD_COLUMNS = {"cpmohid", "pk_org", "cplanfactoryid", "dbilldate", "vbillcode", "ctrantypeid", "vtrantypecode", "fbillstatus",
|
||||
"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 {
|
||||
for (PMOAggVO vo : useVOs) {
|
||||
PMOHeadVO pmoHeadVO = vo.getParentVO();
|
||||
PMOItemVO[] itemVOS = vo.getChildrenVO();
|
||||
// 判断物料的业务单元是否是高压加工车间,不是则跳过
|
||||
// 判断订单业务单元是否是高压IMS组织,如果是则跳过
|
||||
String pkOrg = pmoHeadVO.getPk_org();
|
||||
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
|
||||
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) {
|
||||
Map<String, SQLParameter> itemMap = new HashMap<>();
|
||||
// 构建明细表SQL
|
||||
String bodySql = buildInsertSQL(BODY_TABLE, BODY_COLUMNS);
|
||||
// 添加表体参数
|
||||
SQLParameter bodyParams = buildBodyParameters(item, pmoHeadVO);
|
||||
itemMap.put(bodySql, bodyParams);
|
||||
bodyParameterList.add(itemMap);
|
||||
String bodyPrimaryKeyValue = (String) item.getAttributeValue("cmoid");
|
||||
String bodySql = buildSQL(BODY_TABLE, BODY_COLUMNS, "cmoid", bodyPrimaryKeyValue);
|
||||
SQLParameter bodyParams = buildBodyParameters(item, pmoHeadVO, bodySql.contains("UPDATE"));
|
||||
bodySqlList.add(bodySql);
|
||||
bodyParameterList.add(bodyParams);
|
||||
}
|
||||
pushData(headSql, headParams, 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);
|
||||
pushData(headSql, headParams, bodySqlList, bodyParameterList);
|
||||
}
|
||||
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 {
|
||||
|
|
@ -149,6 +138,20 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
|||
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) {
|
||||
int columnCount = columns.length;
|
||||
StringBuilder sqlBuilder = new StringBuilder();
|
||||
|
|
@ -173,43 +176,114 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
|||
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) {
|
||||
SQLParameter headParams = new SQLParameter();
|
||||
for (String column : HEAD_COLUMNS) {
|
||||
if ("status".equals(column)) {
|
||||
continue;
|
||||
boolean first = true;
|
||||
for (String column : columns) {
|
||||
// 主键字段不更新
|
||||
if (!column.equals(pkColumn)) {
|
||||
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;
|
||||
}
|
||||
|
||||
private SQLParameter buildBodyParameters(PMOItemVO item, PMOHeadVO pmoHeadVO) {
|
||||
private SQLParameter buildBodyParameters(PMOItemVO item, PMOHeadVO pmoHeadVO, boolean isUpdate) {
|
||||
SQLParameter bodyParams = new SQLParameter();
|
||||
for (String column : BODY_COLUMNS) {
|
||||
Object value;
|
||||
if ("vbillcode".equals(column)) {
|
||||
value = pmoHeadVO.getAttributeValue(column);
|
||||
} else {
|
||||
value = item.getAttributeValue(column);
|
||||
|
||||
if (isUpdate) {
|
||||
// UPDATE情况:不包含主键字段在参数前面,主键作为WHERE条件在最后
|
||||
for (String column : BODY_COLUMNS) {
|
||||
if (!"cmoid".equals(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);
|
||||
}
|
||||
}
|
||||
// 根据字段类型选择不同的空值处理方式
|
||||
if (bodyNumFields.contains(column)) {
|
||||
value = skipNullForNumber(value);
|
||||
} else {
|
||||
value = skipNull(value);
|
||||
// 添加主键作为WHERE条件
|
||||
bodyParams.addParam(item.getAttributeValue("cmoid"));
|
||||
} else {
|
||||
// INSERT情况:包含所有字段
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -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