推送到高压ims中间表
This commit is contained in:
parent
6af9b3c082
commit
f7c81f9585
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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 "";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue