物料分类同步高压ims

This commit is contained in:
lihao 2025-09-29 15:31:04 +08:00
parent d25831d6ba
commit 1d9fc5495b
2 changed files with 307 additions and 0 deletions

View File

@ -129,6 +129,7 @@ public class MaterialToGyImsListener implements IBusinessListener {
Integer orgCheckResult = MyHelper.checkIfOrg(configParams, materialVO.getPk_material(), "imsOrg"); Integer orgCheckResult = MyHelper.checkIfOrg(configParams, materialVO.getPk_material(), "imsOrg");
if (orgCheckResult != null && orgCheckResult > 0) { if (orgCheckResult != null && orgCheckResult > 0) {
materialCodes.add(materialVO.getPk_material()); 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 + "')"; String sql = "update BIPItemTab set enablestate = " + enableStatus + " where pk_material in ('" + codeInClause + "')";
gyimsDao.executeUpdate(sql); gyimsDao.executeUpdate(sql);
} }
private void pushIms(MaterialVO[] useVOs) throws BusinessException { private void pushIms(MaterialVO[] useVOs) throws BusinessException {
@ -192,6 +194,14 @@ public class MaterialToGyImsListener implements IBusinessListener {
} }
data.put("status","C"); 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("("); values.append("(");
// 拼接单条记录的所有字段值 // 拼接单条记录的所有字段值
@ -240,6 +250,7 @@ public class MaterialToGyImsListener implements IBusinessListener {
gyimsDao.setAddTimeStamp(false); gyimsDao.setAddTimeStamp(false);
String sql="update BIPItemTab set status='" + type.toString() + "' where pk_material='" + pk + "'"; String sql="update BIPItemTab set status='" + type.toString() + "' where pk_material='" + pk + "'";
gyimsDao.executeUpdate(sql); gyimsDao.executeUpdate(sql);
} }
@ -273,7 +284,13 @@ public class MaterialToGyImsListener implements IBusinessListener {
if (pkMaterial == null) { if (pkMaterial == null) {
continue; // 主键为空时跳过更新 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部分 // 构建SET部分
List<String> setParts = new ArrayList<>(); List<String> setParts = new ArrayList<>();
for (String field : fields) { for (String field : fields) {
@ -315,4 +332,5 @@ public class MaterialToGyImsListener implements IBusinessListener {
} }

View File

@ -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);
}
}
}
}