推送到高压ims中间表

This commit is contained in:
lihao 2025-09-28 15:46:15 +08:00
parent 6af9b3c082
commit f7c81f9585
2 changed files with 221 additions and 0 deletions

View File

@ -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<String, String> 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<String> 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<String> 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<Map<String,Object>> remain = (List<Map<String, Object>>) 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<String, Object> 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);
}
}

View File

@ -185,6 +185,27 @@ public class MyHelper {
return (Integer) dao.executeQuery(countSql, new ColumnProcessor()); return (Integer) dao.executeQuery(countSql, new ColumnProcessor());
} }
/**
* 检查物料仓库的组织是否符合条件
*/
public static Integer checkIfOrg1(Map<String, String> 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) { public static String skipNull(Object value) {
if ((value == null) || (value.toString().trim().length() == 0)) { if ((value == null) || (value.toString().trim().length() == 0)) {
return ""; return "";