diff --git a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyImsListener.java b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyImsListener.java index a4b2d6c1..3fbf920a 100644 --- a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyImsListener.java +++ b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyImsListener.java @@ -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 setParts = new ArrayList<>(); for (String field : fields) { @@ -315,4 +332,5 @@ public class MaterialToGyImsListener implements IBusinessListener { + } diff --git a/uapbd/src/private/nccloud/api/uapbd/materialbasclass/listener/MaterialBasClassToGyImsListener.java b/uapbd/src/private/nccloud/api/uapbd/materialbasclass/listener/MaterialBasClassToGyImsListener.java new file mode 100644 index 00000000..bed262c5 --- /dev/null +++ b/uapbd/src/private/nccloud/api/uapbd/materialbasclass/listener/MaterialBasClassToGyImsListener.java @@ -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 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 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 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 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> remain = (List>) 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 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 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> remain = (List>) 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 data : remain) { + // 设置状态为U更新 + data.put("status", "U"); + String pkMaterial = (String) data.get("pk_marbasclass"); + if (pkMaterial == null) { + continue; // 主键为空时跳过更新 + } + + // 构建SET部分 + List 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); + } + } + } + + + +}