From f7c81f95852b9bdafd50221b29a5d2f5175d8047 Mon Sep 17 00:00:00 2001 From: lihao Date: Sun, 28 Sep 2025 15:46:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E9=80=81=E5=88=B0=E9=AB=98=E5=8E=8Bim?= =?UTF-8?q?s=E4=B8=AD=E9=97=B4=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/MaterialToGyImsListener.java | 200 ++++++++++++++++++ .../src/public/nc/bs/uapbd/util/MyHelper.java | 21 ++ 2 files changed, 221 insertions(+) create mode 100644 uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyImsListener.java diff --git a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyImsListener.java b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyImsListener.java new file mode 100644 index 00000000..69e0b798 --- /dev/null +++ b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyImsListener.java @@ -0,0 +1,200 @@ +package nccloud.api.uapbd.material.listener; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import nc.bs.bd.assignservice.multiorg.MultiOrgAssignVO; +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.dao.DAOException; +import nc.bs.logging.Log; +import nc.bs.trade.business.HYPubBO; +import nc.bs.uapbd.util.MyHelper; +import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; +import nc.jdbc.framework.processor.ColumnProcessor; +import nc.jdbc.framework.processor.MapListProcessor; +import nc.jdbc.framework.processor.MapProcessor; +import nc.vo.bd.material.MaterialVO; +import nc.vo.bd.material.marbasclass.MarBasClassVO; +import nc.vo.bd.material.stock.MaterialStockVO; +import nc.vo.bd.pub.BDCacheQueryUtil; +import nc.vo.fi.pub.SqlUtils; +import nc.vo.org.OrgVO; +import nc.vo.pub.BusinessException; + +import java.util.*; + +public class MaterialToGyImsListener 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(); + + // EventType是事件编码 1009分配后新增 1012 取消分配后删除 + if ("1009".equals(eventType) ) { + configParams = MyHelper.getConfigParams("gy-config", null); + if (configParams.isEmpty()) { + throw new BusinessException("高压的gymes接口缺少配置"); + } + MaterialStockVO[] materialStockVOS = ArrayClassConvertUtil.convert(objs, MaterialStockVO.class); + for (MaterialStockVO materialStockVO : materialStockVOS) { + String pkOrg = materialStockVO.getPk_org(); + String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + Integer num = MyHelper.checkIfOrg1(configParams, materialStockVO.getPk_materialstock(), "imsOrg"); + if ((num <= 0)) { + continue; + }else { + String materialid = ((MaterialStockVO) objs[0]).getPk_material(); + MaterialVO[] useVOs = (MaterialVO[]) BDCacheQueryUtil.queryVOsByIDs( + MaterialVO.class, + MaterialVO.PK_MATERIAL, + new String[]{materialid}, + new String[]{MaterialVO.PK_MEASDOC}); + + pushIms(useVOs); + } + } +// String materialid = ((MaterialStockVO) objs[0]).getPk_material(); +// MaterialVO[] useVOs = (MaterialVO[]) BDCacheQueryUtil.queryVOsByIDs( +// MaterialVO.class, +// MaterialVO.PK_MATERIAL, +// new String[]{materialid}, +// new String[]{MaterialVO.PK_MEASDOC}); +// +// pushIms(useVOs); + }else if ("1069".equals(eventType) || "1069".equals(eventType) ) { + MaterialVO[] useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class); +// 更新启用状态 + + updateEnableStatus(useVOs); + + + + } + } + + private void updateEnableStatus(MaterialVO[] useVOs) throws BusinessException { + // 执行单条SQL插入 + BaseDAO gyimsDao = new BaseDAO("gyims"); + gyimsDao.setAddTimeStamp(false); + List code=new ArrayList<>(); + for (MaterialVO materialVO : useVOs) { + Integer num = MyHelper.checkIfOrg(configParams,materialVO.getPk_material(), "imsOrg"); + if(num<=0){ + continue; + }else{ + code.add(materialVO.getPk_material()); + } + } + if(code.isEmpty()){ + return; + } + Integer enableStatus = useVOs[0].getEnablestate(); + String sql="update BIPItemTab set enableStatus=" + enableStatus + " where pk_material='" + code + "'"; + gyimsDao.executeUpdate(sql); + + } + + private void pushIms(MaterialVO[] useVOs) throws BusinessException { + // 执行单条SQL插入 + BaseDAO gyimsDao = new BaseDAO("gyims"); + gyimsDao.setAddTimeStamp(false); + List code=new ArrayList<>(); + for (MaterialVO materialVO : useVOs) { + code.add(materialVO.getPk_material()); + } + String placeholders = String.join(",", Collections.nCopies(code.size(), "?")); + placeholders=code.get(0); + String sql = " \t\tSELECT\n" + + "\t* \n" + + "from bd_material a " + + "where a.pk_material IN ('" + placeholders + "')"; + List> remain = (List>) new BaseDAO("design").executeQuery(sql, new MapListProcessor()); + +// 定义需要插入的字段(与表结构一致) + String[] fields = { + "pk_material", "code", "name", "materialspec", "materialtype", + "materialshortname", "pk_measdoc", "pk_marbasclass", "memo", + "enablestate", "itemtype", "itemattribute", "itemmodel", "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 selectSql="SELECT count(1) from BIPItemTab where pk_material=‘" +data.get("pk_material")+ "'"; + int num = (int) gyimsDao.executeQuery(selectSql,new ColumnProcessor()); + if(num>0){ + updateStatus((String) data.get("pk_material"),"D"); + continue; + } + + data.put("status","C"); + 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(", "); + } + } + +// 完整插入SQL + String updateSql = "INSERT INTO BIPItemTab (" + 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); + String sql="update BIPItemTab set status='" + type.toString() + "' where pk_material='" + pk + "'"; + gyimsDao.executeUpdate(sql); + } + + + +} diff --git a/uapbd/src/public/nc/bs/uapbd/util/MyHelper.java b/uapbd/src/public/nc/bs/uapbd/util/MyHelper.java index 689c2a05..0a157b8d 100644 --- a/uapbd/src/public/nc/bs/uapbd/util/MyHelper.java +++ b/uapbd/src/public/nc/bs/uapbd/util/MyHelper.java @@ -185,6 +185,27 @@ public class MyHelper { return (Integer) dao.executeQuery(countSql, new ColumnProcessor()); } + /** + * 检查物料仓库的组织是否符合条件 + */ + public static Integer checkIfOrg1(Map configParams, String pk_materialstock, String orgFlag) throws BusinessException { + String targetCode = configParams.get(orgFlag); + if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { + throw new BusinessException("未配置组织参数"); + } + String[] orgItem = targetCode.split(","); + String inStr = SqlUtils.getInStr("b.code", orgItem, Boolean.TRUE); + String countSql = "SELECT count(1)" + + " FROM bd_materialstock a" + + " LEFT JOIN org_stockorg b ON a.pk_org = b.pk_stockorg" + + " WHERE " + + " a.pk_materialstock = '[pk_materialstock]'" + + " AND " + inStr; + countSql = countSql.replace("[pk_materialstock]", pk_materialstock); + // NCCForUAPLogger.debug(countSql); + return (Integer) dao.executeQuery(countSql, new ColumnProcessor()); + } + public static String skipNull(Object value) { if ((value == null) || (value.toString().trim().length() == 0)) { return "";