Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
9ab10106a0
|
|
@ -25,7 +25,7 @@ import java.util.*;
|
|||
* @date 2025/9/27
|
||||
*/
|
||||
public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
||||
|
||||
private String auditFlag;
|
||||
private static final String LOG_INFO_NAME = "gymeslog";
|
||||
private static final Log logger = Log.getInstance(LOG_INFO_NAME);
|
||||
private Map<String, String> configParams;
|
||||
|
|
@ -34,6 +34,10 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
|||
// IMS数据源
|
||||
public BaseDAO imsDao;
|
||||
|
||||
public AfterApproveSyncImsRule(String auditFlag) {
|
||||
this.auditFlag = auditFlag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取IMS数据源
|
||||
*/
|
||||
|
|
@ -106,9 +110,8 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
|||
String pkOrg = pmoHeadVO.getPk_org();
|
||||
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
|
||||
if (checkIfOrg(orgCode, configParams)) {
|
||||
// continue;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 获取主键值
|
||||
String headPrimaryKeyValue = (String) pmoHeadVO.getAttributeValue("cpmohid");
|
||||
|
||||
|
|
@ -226,8 +229,12 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
|||
headParams.addParam(value);
|
||||
}
|
||||
}
|
||||
// status C=创建U=修改2=处理完成
|
||||
headParams.addParam("U"); // 更新状态为U(修改)
|
||||
// status 同步状态:BIP:C-创建;U-修改D-删除 IMS:2-MES单据接收完成
|
||||
if ("N".equals(auditFlag)) {
|
||||
headParams.addParam("D");
|
||||
} else {
|
||||
headParams.addParam("U"); // 更新状态为U(修改)
|
||||
}
|
||||
// 添加主键作为WHERE条件
|
||||
headParams.addParam(pmoHeadVO.getAttributeValue("cpmohid"));
|
||||
} else {
|
||||
|
|
@ -239,12 +246,14 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
|||
Object value = pmoHeadVO.getAttributeValue(column);
|
||||
if (headNumFields.contains(column)) {
|
||||
value = skipNullForNumber(value);
|
||||
} else if (headTransferFields.contains(column)) {
|
||||
value = transferHeadFields(column, value);
|
||||
} else {
|
||||
value = skipNull(value);
|
||||
}
|
||||
headParams.addParam(value);
|
||||
}
|
||||
// status C=创建U=修改2=处理完成
|
||||
// status 同步状态:BIP:C-创建;U-修改D-删除 IMS:2-MES单据接收完成
|
||||
headParams.addParam("C"); // 默认状态为C(新增)
|
||||
}
|
||||
|
||||
|
|
@ -410,7 +419,7 @@ public class AfterApproveSyncImsRule implements IRule<PMOAggVO> {
|
|||
String sql = " select code from bd_measdoc where nvl(dr,0) = 0 and pk_measdoc = '[value]' ";
|
||||
sql = sql.replace("[value]", value.toString());
|
||||
result = (String) baseDAO.executeQuery(sql, new ColumnProcessor());
|
||||
} else if ("cdeptid".equals(column)) {
|
||||
} else if ("cdeptid".equals(column)) {
|
||||
String sql = " select code from org_dept where nvl(dr,0) = 0 and pk_dept = '[value]' ";
|
||||
sql = sql.replace("[value]", value.toString());
|
||||
result = (String) baseDAO.executeQuery(sql, new ColumnProcessor());
|
||||
|
|
|
|||
|
|
@ -129,6 +129,7 @@ public class MaterialToGyImsListener implements IBusinessListener {
|
|||
Integer orgCheckResult = MyHelper.checkIfOrg(configParams, materialVO.getPk_material(), "imsOrg");
|
||||
if (orgCheckResult != null && orgCheckResult > 0) {
|
||||
materialCodes.add(materialVO.getPk_material());
|
||||
updateStatus(materialVO.getPk_material(),"U");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -146,6 +147,7 @@ public class MaterialToGyImsListener implements IBusinessListener {
|
|||
String sql = "update BIPItemTab set enablestate = " + enableStatus + " where pk_material in ('" + codeInClause + "')";
|
||||
|
||||
gyimsDao.executeUpdate(sql);
|
||||
|
||||
}
|
||||
|
||||
private void pushIms(MaterialVO[] useVOs) throws BusinessException {
|
||||
|
|
@ -192,6 +194,14 @@ public class MaterialToGyImsListener implements IBusinessListener {
|
|||
}
|
||||
|
||||
data.put("status","C");
|
||||
String matBasClassSql="SELECT code from bd_marbasclass where pk_marbasclass='" +data.get("pk_marbasclass")+ "'";
|
||||
String matbascode = (String) new BaseDAO().executeQuery(matBasClassSql,new ColumnProcessor());
|
||||
data.put("pk_marbasclass",matbascode);
|
||||
|
||||
String unitsql="SELECT code from bd_measdoc where pk_measdoc='" +data.get("pk_measdoc")+ "'";
|
||||
String unit = (String) new BaseDAO().executeQuery(unitsql,new ColumnProcessor());
|
||||
data.put("pk_marbasclass",unit);
|
||||
|
||||
values.append("(");
|
||||
|
||||
// 拼接单条记录的所有字段值
|
||||
|
|
@ -240,6 +250,7 @@ public class MaterialToGyImsListener implements IBusinessListener {
|
|||
gyimsDao.setAddTimeStamp(false);
|
||||
String sql="update BIPItemTab set status='" + type.toString() + "' where pk_material='" + pk + "'";
|
||||
gyimsDao.executeUpdate(sql);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -273,7 +284,13 @@ public class MaterialToGyImsListener implements IBusinessListener {
|
|||
if (pkMaterial == null) {
|
||||
continue; // 主键为空时跳过更新
|
||||
}
|
||||
String matBasClassSql="SELECT code from bd_marbasclass where pk_marbasclass='" +data.get("pk_marbasclass")+ "'";
|
||||
String matbascode = (String) new BaseDAO().executeQuery(matBasClassSql,new ColumnProcessor());
|
||||
data.put("pk_marbasclass",matbascode);
|
||||
|
||||
String unitsql="SELECT code from bd_measdoc where pk_measdoc='" +data.get("pk_measdoc")+ "'";
|
||||
String unit = (String) new BaseDAO().executeQuery(unitsql,new ColumnProcessor());
|
||||
data.put("pk_marbasclass",unit);
|
||||
// 构建SET部分
|
||||
List<String> setParts = new ArrayList<>();
|
||||
for (String field : fields) {
|
||||
|
|
@ -315,4 +332,5 @@ public class MaterialToGyImsListener implements IBusinessListener {
|
|||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,289 @@
|
|||
package nccloud.api.uapbd.materialbasclass.listener;
|
||||
|
||||
import nc.bs.bd.baseservice.ArrayClassConvertUtil;
|
||||
import nc.bs.businessevent.IBusinessEvent;
|
||||
import nc.bs.businessevent.IBusinessListener;
|
||||
import nc.bs.businessevent.bd.BDCommonEvent;
|
||||
import nc.bs.dao.BaseDAO;
|
||||
import nc.bs.logging.Log;
|
||||
import nc.bs.uapbd.util.MyHelper;
|
||||
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||
import nc.jdbc.framework.processor.MapListProcessor;
|
||||
import nc.vo.bd.material.MaterialVO;
|
||||
import nc.vo.bd.material.marbasclass.MarBasClassVO;
|
||||
import nc.vo.bd.pub.BDCacheQueryUtil;
|
||||
import nc.vo.org.OrgVO;
|
||||
import nc.vo.pub.BusinessException;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class MaterialBasClassToGyImsListener implements IBusinessListener {
|
||||
private static final String LOG_INFO_NAME = "dldzlog";
|
||||
private static final Log logDl = Log.getInstance(LOG_INFO_NAME);
|
||||
private static final String reqUrl = "/prj-v5-web/ext/api/mrl";
|
||||
private Map<String, String> configParams;
|
||||
|
||||
@Override
|
||||
public void doAction(IBusinessEvent event) throws BusinessException {
|
||||
BDCommonEvent e = (BDCommonEvent) event;
|
||||
String eventType = event.getEventType();
|
||||
Object[] objs = e.getObjs();
|
||||
configParams = MyHelper.getConfigParams("gy-config", null);
|
||||
if (configParams.isEmpty()) {
|
||||
throw new BusinessException("高压的gyims接口缺少配置");
|
||||
}
|
||||
// EventType是事件编码 1002新增 1004修改 1006删除 1069停用 1071启用
|
||||
if ("1002".equals(eventType) ) {
|
||||
// configParams = MyHelper.getConfigParams("gy-config", null);
|
||||
// if (configParams.isEmpty()) {
|
||||
// throw new BusinessException("高压的gymes接口缺少配置");
|
||||
// }
|
||||
MarBasClassVO[] marBasClassVOS = ArrayClassConvertUtil.convert(objs, MarBasClassVO.class);
|
||||
// for (MarBasClassVO marBasClassVO : marBasClassVOS) {
|
||||
pushIms(marBasClassVOS);
|
||||
// }
|
||||
}else if ("1004".equals(eventType) ) {
|
||||
MarBasClassVO[] useVOs = ArrayClassConvertUtil.convert(objs, MarBasClassVO.class);
|
||||
// 更新启用状态
|
||||
|
||||
updateIms(useVOs);
|
||||
|
||||
|
||||
|
||||
}else if ("1069".equals(eventType) || "1071".equals(eventType) ) {
|
||||
MarBasClassVO[] useVOs = ArrayClassConvertUtil.convert(objs, MarBasClassVO.class);
|
||||
// 更新启用状态
|
||||
|
||||
updateEnableStatus(useVOs);
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
public static boolean contains(String[] orgItem, String target) {
|
||||
// 数组为null时直接返回false
|
||||
if (orgItem == null) {
|
||||
return false;
|
||||
}
|
||||
// 数组转List,调用contains()
|
||||
List<String> list = Arrays.asList(orgItem);
|
||||
return list.contains(target);
|
||||
}
|
||||
|
||||
private void updateEnableStatus(MarBasClassVO[] useVOs) throws BusinessException {
|
||||
if (useVOs == null || useVOs.length == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
BaseDAO gyimsDao = new BaseDAO("gyims");
|
||||
gyimsDao.setAddTimeStamp(false);
|
||||
|
||||
List<String> materialCodes = new ArrayList<>();
|
||||
for (MarBasClassVO materialVO : useVOs) {
|
||||
// Integer orgCheckResult = MyHelper.checkIfOrg(configParams, materialVO.getPk_material(), "imsOrg");
|
||||
// if (orgCheckResult != null && orgCheckResult > 0) {
|
||||
materialCodes.add(materialVO.getPk_marbasclass());
|
||||
// }
|
||||
updateStatus( materialVO.getPk_marbasclass(), "U");
|
||||
}
|
||||
|
||||
if (materialCodes.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Integer enableStatus = useVOs[0].getEnablestate();
|
||||
if (enableStatus == null) {
|
||||
throw new BusinessException("启用状态不能为空");
|
||||
}
|
||||
|
||||
|
||||
String codeInClause = String.join("','", materialCodes);
|
||||
String sql = "update BIPItemSortTab set enablestate = " + enableStatus + " where pk_marbasclass in ('" + codeInClause + "')";
|
||||
|
||||
gyimsDao.executeUpdate(sql);
|
||||
}
|
||||
|
||||
private void pushIms(MarBasClassVO[] useVOs) throws BusinessException {
|
||||
// 执行单条SQL插入
|
||||
BaseDAO gyimsDao = new BaseDAO("gyims");
|
||||
gyimsDao.setAddTimeStamp(false);
|
||||
List<String> code = new ArrayList<>();
|
||||
for (MarBasClassVO materialVO : useVOs) {
|
||||
code.add(materialVO.getPk_marbasclass());
|
||||
}
|
||||
String placeholders = String.join("','", code); // 用逗号分隔所有主键
|
||||
String sql = "select * from bd_marbasclass a where a.pk_marbasclass IN ('" + placeholders + "')";
|
||||
// String sql = " \t\tSELECT\n" +
|
||||
// "\t* \n" +
|
||||
// "from bd_marbasclass a " +
|
||||
// "where a.pk_marbasclass IN ('" + placeholders + "')";
|
||||
List<Map<String, Object>> remain = (List<Map<String, Object>>) new BaseDAO("design").executeQuery(sql, new MapListProcessor());
|
||||
|
||||
// 定义需要插入的字段(更新为指定字段)
|
||||
String[] fields = {
|
||||
"pk_marbasclass", "code", "name", "pk_parent", "avgprice",
|
||||
"averagecost", "averagepurahead", "averagemmahead", "pk_marasstframe",
|
||||
"enablestate", "status", "createdate"
|
||||
};
|
||||
|
||||
// 构建字段部分
|
||||
StringBuilder fieldNames = new StringBuilder();
|
||||
for (int i = 0; i < fields.length; i++) {
|
||||
fieldNames.append(fields[i]);
|
||||
if (i < fields.length - 1) {
|
||||
fieldNames.append(", ");
|
||||
}
|
||||
}
|
||||
|
||||
// 构建VALUES部分
|
||||
StringBuilder values = new StringBuilder();
|
||||
for (int i = 0; i < remain.size(); i++) {
|
||||
Map<String, Object> data = remain.get(i);
|
||||
String codes=configParams.get("imsMatBasClass");
|
||||
String matclasscode=data.get("code").toString();
|
||||
if (codes == null || codes.trim().isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
// 检查BIPItemSortTab中是否已存在该pk_marbasclass
|
||||
String selectSql = "SELECT count(1) from BIPItemSortTab where pk_marbasclass='" + data.get("pk_marbasclass") + "'";
|
||||
int num = (int) gyimsDao.executeQuery(selectSql, new ColumnProcessor());
|
||||
if (num > 0) {
|
||||
// 更新状态时使用pk_marbasclass
|
||||
updateStatus((String) data.get("pk_marbasclass"), "C");
|
||||
continue;
|
||||
}
|
||||
|
||||
data.put("status", "C"); // 状态字段仍保留
|
||||
|
||||
String matBasClassSql="SELECT code from bd_marbasclass where pk_marbasclass='" +data.get("pk_parent")+ "'";
|
||||
String matbascode = (String) new BaseDAO().executeQuery(matBasClassSql,new ColumnProcessor());
|
||||
data.put("pk_parent",matbascode);
|
||||
|
||||
String unitsql="SELECT code from bd_marasstframe where pk_marasstframe='" +data.get("pk_marasstframe")+ "'";
|
||||
String unit = (String) new BaseDAO().executeQuery(unitsql,new ColumnProcessor());
|
||||
data.put("pk_marasstframe",unit);
|
||||
|
||||
|
||||
values.append("(");
|
||||
|
||||
// 拼接单条记录的所有字段值(适配新字段)
|
||||
for (int j = 0; j < fields.length; j++) {
|
||||
Object value = data.get(fields[j]);
|
||||
// 处理字符串类型需要加单引号,其他类型直接拼接(根据实际类型调整)
|
||||
if (value instanceof String) {
|
||||
// 转义单引号避免SQL语法错误
|
||||
values.append("'").append(((String) value).replace("'", "''")).append("'");
|
||||
} else if (value == null) {
|
||||
values.append("NULL");
|
||||
} else {
|
||||
values.append(value);
|
||||
}
|
||||
|
||||
if (j < fields.length - 1) {
|
||||
values.append(", ");
|
||||
}
|
||||
}
|
||||
|
||||
values.append(")");
|
||||
// 最后一条记录后不加逗号
|
||||
if (i < remain.size() - 1) {
|
||||
values.append(", ");
|
||||
}
|
||||
}
|
||||
if (values.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 完整插入SQL
|
||||
String updateSql = "INSERT INTO BIPItemSortTab (" + fieldNames.toString() + ") VALUES " + values.toString();
|
||||
|
||||
try {
|
||||
int rowsAffected = gyimsDao.executeUpdate(updateSql);
|
||||
String K = "1";
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("插入失败:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateStatus(String pk, String type) throws BusinessException {
|
||||
BaseDAO gyimsDao = new BaseDAO("gyims");
|
||||
gyimsDao.setAddTimeStamp(false);
|
||||
// 更新时where条件使用pk_marbasclass(与新字段保持一致)
|
||||
String sql = "update BIPItemSortTab set status='" + type.toString() + "' where pk_marbasclass='" + pk + "'";
|
||||
gyimsDao.executeUpdate(sql);
|
||||
}
|
||||
|
||||
|
||||
private void updateIms(MarBasClassVO[] useVOs) throws BusinessException {
|
||||
// 执行单条SQL更新
|
||||
BaseDAO gyimsDao = new BaseDAO("gyims");
|
||||
gyimsDao.setAddTimeStamp(false);
|
||||
List<String> code = new ArrayList<>();
|
||||
for (MarBasClassVO materialVO : useVOs) {
|
||||
code.add(materialVO.getPk_marbasclass());
|
||||
}
|
||||
String placeholders = String.join("','", code); // 用逗号分隔所有主键
|
||||
// placeholders = code.get(0);
|
||||
String sql = " \t\tSELECT\n" +
|
||||
"\t* \n" +
|
||||
"from bd_marbasclass a " +
|
||||
"where a.pk_marbasclass IN ('" + placeholders + "')";
|
||||
List<Map<String, Object>> remain = (List<Map<String, Object>>) new BaseDAO("design").executeQuery(sql, new MapListProcessor());
|
||||
|
||||
// 定义需要插入的字段(更新为指定字段)
|
||||
String[] fields = {
|
||||
"pk_marbasclass", "code", "name", "pk_parent", "avgprice",
|
||||
"averagecost", "averagepurahead", "averagemmahead", "pk_marasstframe",
|
||||
"enablestate", "status", "createdate"
|
||||
};
|
||||
|
||||
for (Map<String, Object> data : remain) {
|
||||
// 设置状态为U更新
|
||||
data.put("status", "U");
|
||||
String pkMaterial = (String) data.get("pk_marbasclass");
|
||||
if (pkMaterial == null) {
|
||||
continue; // 主键为空时跳过更新
|
||||
}
|
||||
|
||||
// 构建SET部分
|
||||
List<String> setParts = new ArrayList<>();
|
||||
for (String field : fields) {
|
||||
if ("pk_marbasclass".equals(field)) {
|
||||
continue; // 主键作为条件,不参与更新
|
||||
}
|
||||
Object value = data.get(field);
|
||||
StringBuilder part = new StringBuilder();
|
||||
part.append(field).append("=");
|
||||
|
||||
// 处理字段值(字符串加单引号并转义,null特殊处理)
|
||||
if (value instanceof String) {
|
||||
part.append("'").append(((String) value).replace("'", "''")).append("'");
|
||||
} else if (value == null) {
|
||||
part.append("NULL");
|
||||
} else {
|
||||
part.append(value);
|
||||
}
|
||||
setParts.add(part.toString());
|
||||
}
|
||||
|
||||
if (setParts.isEmpty()) {
|
||||
continue; // 无更新字段时跳过
|
||||
}
|
||||
|
||||
// 拼接更新SQL
|
||||
String setClause = String.join(", ", setParts);
|
||||
String updateSql = "UPDATE BIPItemSortTab SET " + setClause +
|
||||
" WHERE pk_marbasclass='" + pkMaterial.replace("'", "''") + "'";
|
||||
|
||||
try {
|
||||
int rowsAffected = gyimsDao.executeUpdate(updateSql);
|
||||
String K = "1"; // 保持原代码调试标记风格
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("更新失败:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue