物料分类同步高压ims
This commit is contained in:
parent
d25831d6ba
commit
1d9fc5495b
|
|
@ -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 {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue