箱变-启源-销售订单推送优化

This commit is contained in:
mzr 2025-10-22 23:44:16 +08:00
parent 3bbc32ec31
commit c960746a00
3 changed files with 113 additions and 43 deletions

View File

@ -17,6 +17,7 @@ import nc.bs.trade.business.HYSuperDMO;
import nc.bs.uapbd.util.MyHelper; import nc.bs.uapbd.util.MyHelper;
import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; import nc.bs.uapbd.util.ThirdPartyPostRequestUtil;
import nc.jdbc.framework.processor.ColumnProcessor; import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.jdbc.framework.processor.MapProcessor; import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.bd.defdoc.DefdocVO; import nc.vo.bd.defdoc.DefdocVO;
import nc.vo.org.OrgVO; import nc.vo.org.OrgVO;
@ -25,69 +26,79 @@ import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.so.m30.entity.SaleOrderBVO; import nc.vo.so.m30.entity.SaleOrderBVO;
import nc.vo.so.m30.entity.SaleOrderHVO; import nc.vo.so.m30.entity.SaleOrderHVO;
import nc.vo.so.m30.entity.SaleOrderVO; import nc.vo.so.m30.entity.SaleOrderVO;
import nccloud.api.rest.utils.ResultMessageUtil;
import nccloud.baseapp.core.log.NCCForUAPLogger; import nccloud.baseapp.core.log.NCCForUAPLogger;
import nccloud.dto.so.saleorder.entity.QueryInfo;
import nccloud.framework.core.json.IJson;
import nccloud.framework.service.ServiceLocator; import nccloud.framework.service.ServiceLocator;
import nccloud.framework.web.action.itf.ICommonAction; import nccloud.framework.web.action.itf.ICommonAction;
import nccloud.framework.web.container.IRequest; import nccloud.framework.web.container.IRequest;
import nccloud.framework.web.json.JsonFactory; import nccloud.framework.web.json.JsonFactory;
import nccloud.framework.web.ui.pattern.billcard.BillCardOperator;
import nccloud.pubitf.so.saleorder.service.ISaleOrderQueryWebService; import nccloud.pubitf.so.saleorder.service.ISaleOrderQueryWebService;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class SaleOrderToQmsAction implements ICommonAction { public class SaleOrderToQmsAction implements ICommonAction {
private static final BaseDAO dao = new BaseDAO();
private static final String LOG_INFO_NAME = "qyMesLog"; private static final String LOG_INFO_NAME = "qyMesLog";
private static final Log logger = Log.getInstance(LOG_INFO_NAME); private static final Log logger = Log.getInstance(LOG_INFO_NAME);
private static final String reqUrl = "/IF_QyErpApi.ashx?action=addxsht"; private static final String reqUrl = "/IF_QyErpApi.ashx?action=addxsht";
private Map<String, String> configParams; private Map<String, String> configParams;
public SaleOrderToQmsAction() { public SaleOrderToQmsAction() {
} }
public Object doAction(IRequest request) { public Object doAction(IRequest request) {
try { try {
String read = request.read(); String json = request.read();
IJson json = JsonFactory.create(); logger.error("SaleOrderToQmsAction-Param:" + json);
QueryInfo info = (QueryInfo)json.fromJson(read, QueryInfo.class); Map<String, Object> paraMap = (Map) JsonFactory.create().fromJson(json, Map.class);
ISaleOrderQueryWebService service = (ISaleOrderQueryWebService)ServiceLocator.find(ISaleOrderQueryWebService.class); List<String> pkList = (List<String>) paraMap.get("pk");
BillCardOperator operator = new BillCardOperator(info.getPageid()); if (pkList == null || pkList.isEmpty()) {
SaleOrderVO saleorderVO = service.querySaleOrderVObyId(info.getPk()); throw new BusinessException("销售订单传值为空");
}
ISaleOrderQueryWebService service = ServiceLocator.find(ISaleOrderQueryWebService.class);
SaleOrderVO saleorderVO = service.querySaleOrderVObyId(pkList.get(0));
if (saleorderVO == null) {
throw new BusinessException("未查询到对应的销售订单");
}
configParams = MyHelper.getConfigParams("xb-config", null); configParams = MyHelper.getConfigParams("xb-config", null);
if (configParams.isEmpty()) { if (configParams.isEmpty()) {
throw new BusinessException("箱变的QMS接口缺少配置"); throw new BusinessException("箱变的QMS接口缺少配置");
} }
return buildSyncData(new SaleOrderVO[]{saleorderVO}); buildSyncData(new SaleOrderVO[]{saleorderVO});
return ResultMessageUtil.toJSON(true, "推送成功");
} catch (BusinessException e) { } catch (BusinessException e) {
ExceptionUtils.wrappException(e); ExceptionUtils.wrappException(e);
return null; return null;
} }
} }
/** /**
* 构建同步数据 * 构建同步数据
*
* @return
*/ */
private List<Map<String, Object>> buildSyncData(SaleOrderVO[] useVOs) throws BusinessException { private void buildSyncData(SaleOrderVO[] useVOs) throws BusinessException {
BaseDAO baseDAO = new BaseDAO(); BaseDAO baseDAO = new BaseDAO();
List<Map<String, Object>> requestList = new ArrayList<>();
Date now = new Date(); Date now = new Date();
HYPubBO hybo = new HYPubBO(); HYPubBO hybo = new HYPubBO();
for (SaleOrderVO vo : useVOs) { for (SaleOrderVO vo : useVOs) {
SaleOrderHVO pmoHeadVO = vo.getParentVO();
SaleOrderBVO[] itemVOS = vo.getChildrenVO();
String csaleorderid = pmoHeadVO.getCsaleorderid();
// 判断业务单元是否是箱变公司不是则跳过 // 判断业务单元是否是箱变公司不是则跳过
String pkOrg = vo.getParentVO().getPk_org(); String pkOrg = vo.getParentVO().getPk_org();
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
if (checkIfOrg(orgCode, configParams)) { if (checkIfOrg(orgCode, configParams)) {
continue; throw new BusinessException("当前组织非箱变,无法推送");
}
String billType = pmoHeadVO.getVtrantypecode();
if (checkBillType(billType)) {
throw new BusinessException("当前单据类型非推送类型,无法推送");
} }
// 组装数据 // 组装数据
JSONObject singleObj = new JSONObject(); JSONObject singleObj = new JSONObject();
String vbillcode = pmoHeadVO.getVbillcode();
SaleOrderHVO pmoHeadVO = vo.getParentVO();
SaleOrderBVO[] itemVOS = vo.getChildrenVO();
singleObj.put("batchid", now); singleObj.put("batchid", now);
String vdef6 = pmoHeadVO.getVdef6(); String vdef6 = pmoHeadVO.getVdef6();
String contractNum = getDefCode("zdy-001", vdef6); String contractNum = getDefCode("zdy-001", vdef6);
@ -118,12 +129,6 @@ public class SaleOrderToQmsAction implements ICommonAction {
JSONArray contentArray = new JSONArray(); JSONArray contentArray = new JSONArray();
for (SaleOrderBVO item : itemVOS) { for (SaleOrderBVO item : itemVOS) {
JSONObject itemObj = new JSONObject(); JSONObject itemObj = new JSONObject();
// itemObj.put("sgdh", item.getSgdh());
// itemObj.put("xshth", item.getVdef1());
// itemObj.put("htqdxh", item.getHtqdxh());
// Object no = hybo.findColValue("bd_material", "code", "pk_material = '"+item.getCmaterialvid()+"' ");
//
// Object name = hybo.findColValue("bd_material", "name", "pk_material = '"+item.getCmaterialvid()+"' ");
String wlsql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + item.getCmaterialvid() + "' "; String wlsql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + item.getCmaterialvid() + "' ";
Map<String, Object> mrlmap = (Map<String, Object>) baseDAO.executeQuery(wlsql, new MapProcessor()); Map<String, Object> mrlmap = (Map<String, Object>) baseDAO.executeQuery(wlsql, new MapProcessor());
@ -140,12 +145,30 @@ public class SaleOrderToQmsAction implements ICommonAction {
itemObj.put("jhrq", ""); itemObj.put("jhrq", "");
} }
itemObj.put("bz", item.getVrownote()); itemObj.put("bz", item.getVrownote());
Object project_name = hybo.findColValue("bd_project", "project_name", " project_name = '" + item.getCprojectid() + "' "); itemObj.put("xsddh", vbillcode);// 销售订单号
itemObj.put("xmmc", project_name); itemObj.put("qdhh", item.getCrowno());// 行号
itemObj.put("jqbz", 0);// 结清标志
contentArray.add(itemObj); contentArray.add(itemObj);
} }
if (itemVOS.length > 0) {
SaleOrderBVO itemVO = itemVOS[0];
// 项目名称
Object project_name = hybo.findColValue("bd_project", "project_name", " pk_project = '" + itemVO.getCprojectid() + "' ");
singleObj.put("xmmc", project_name);
}
// 查询删除的子表
String delSql = " select crowno,csaleorderid from so_saleorder_b where csaleorderid = '" + csaleorderid + "' and dr = 1 ";
List<Map<String, String>> delList = (List<Map<String, String>>) dao.executeQuery(delSql, new MapListProcessor());
if (delList != null && !delList.isEmpty()) {
for (Map<String, String> delMap : delList) {
JSONObject delObj = new JSONObject();
delObj.put("xsddh", vbillcode);// 销售订单号
delObj.put("qdhh", delMap.get("crowno"));// 行号
delObj.put("jqbz", 1);// 结清标志
delObj.put("dhsl", 0);// 订货数量
contentArray.add(delObj);
}
}
singleObj.put("Content", contentArray); singleObj.put("Content", contentArray);
/* /*
@ -177,7 +200,6 @@ public class SaleOrderToQmsAction implements ICommonAction {
*/ */
pushData(singleObj); pushData(singleObj);
} }
return requestList;
} }
/** /**
@ -219,6 +241,20 @@ public class SaleOrderToQmsAction implements ICommonAction {
return true; return true;
} }
private boolean checkBillType(String code) throws BusinessException {
String targetCode = configParams.get("soBillType");
if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) {
throw new BusinessException("未配置单据类型参数");
}
String[] types = targetCode.split(",");
for (String type : types) {
if (!type.isEmpty() && type.equals(code)) {
return true;
}
}
return false;
}
private String getDefCode(String code, String pk_defdoc) { private String getDefCode(String code, String pk_defdoc) {
String res = ""; String res = "";

View File

@ -391,7 +391,7 @@
<clazz>nccloud.web.so.ref.SaleorderGridReferAction</clazz> <clazz>nccloud.web.so.ref.SaleorderGridReferAction</clazz>
</action> </action>
<action> <action>
<name>so.refer.SaleOrderToQms</name> <name>so.saleorder.SaleOrderToQms</name>
<label>销售订单推送qms</label> <label>销售订单推送qms</label>
<clazz>nccloud.web.so.saleorder.action.SaleOrderToQmsAction</clazz> <clazz>nccloud.web.so.saleorder.action.SaleOrderToQmsAction</clazz>
</action> </action>

View File

@ -13,6 +13,7 @@ import nc.bs.uapbd.util.MyHelper;
import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; import nc.bs.uapbd.util.ThirdPartyPostRequestUtil;
import nc.impl.pubapp.pattern.rule.IRule; import nc.impl.pubapp.pattern.rule.IRule;
import nc.jdbc.framework.processor.ColumnProcessor; import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.jdbc.framework.processor.MapProcessor; import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.bd.defdoc.DefdocVO; import nc.vo.bd.defdoc.DefdocVO;
import nc.vo.org.OrgVO; import nc.vo.org.OrgVO;
@ -24,6 +25,7 @@ import nc.vo.so.m30.entity.SaleOrderVO;
import nccloud.baseapp.core.log.NCCForUAPLogger; import nccloud.baseapp.core.log.NCCForUAPLogger;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -34,7 +36,7 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule<SaleOrderVO> {
private static final Log logger = Log.getInstance(LOG_INFO_NAME); private static final Log logger = Log.getInstance(LOG_INFO_NAME);
private static final String reqUrl = "/IF_QyErpApi.ashx?action=addxsht"; private static final String reqUrl = "/IF_QyErpApi.ashx?action=addxsht";
private Map<String, String> configParams; private Map<String, String> configParams;
private static final BaseDAO dao = new BaseDAO();
public AfterApprovingSynchronizeRuleQMS() { public AfterApprovingSynchronizeRuleQMS() {
} }
@ -63,17 +65,23 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule<SaleOrderVO> {
Date now = new Date(); Date now = new Date();
HYPubBO hybo = new HYPubBO(); HYPubBO hybo = new HYPubBO();
for (SaleOrderVO vo : useVOs) { for (SaleOrderVO vo : useVOs) {
SaleOrderHVO pmoHeadVO = vo.getParentVO();
SaleOrderBVO[] itemVOS = vo.getChildrenVO();
String csaleorderid = pmoHeadVO.getCsaleorderid();
// 判断业务单元是否是箱变公司不是则跳过 // 判断业务单元是否是箱变公司不是则跳过
String pkOrg = vo.getParentVO().getPk_org(); String pkOrg = vo.getParentVO().getPk_org();
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
if (checkIfOrg(orgCode, configParams)) { if (checkIfOrg(orgCode, configParams)) {
continue; continue;
} }
String billType = pmoHeadVO.getVtrantypecode();
if (checkBillType(billType)){
continue;
}
// 组装数据 // 组装数据
JSONObject singleObj = new JSONObject(); JSONObject singleObj = new JSONObject();
String vbillcode = pmoHeadVO.getVbillcode();
SaleOrderHVO pmoHeadVO = vo.getParentVO();
SaleOrderBVO[] itemVOS = vo.getChildrenVO();
singleObj.put("batchid", now); singleObj.put("batchid", now);
String vdef6 = pmoHeadVO.getVdef6(); String vdef6 = pmoHeadVO.getVdef6();
String contractNum = getDefCode("zdy-001", vdef6); String contractNum = getDefCode("zdy-001", vdef6);
@ -104,12 +112,6 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule<SaleOrderVO> {
JSONArray contentArray = new JSONArray(); JSONArray contentArray = new JSONArray();
for (SaleOrderBVO item : itemVOS) { for (SaleOrderBVO item : itemVOS) {
JSONObject itemObj = new JSONObject(); JSONObject itemObj = new JSONObject();
// itemObj.put("sgdh", item.getSgdh());
// itemObj.put("xshth", item.getVdef1());
// itemObj.put("htqdxh", item.getHtqdxh());
// Object no = hybo.findColValue("bd_material", "code", "pk_material = '"+item.getCmaterialvid()+"' ");
//
// Object name = hybo.findColValue("bd_material", "name", "pk_material = '"+item.getCmaterialvid()+"' ");
String wlsql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + item.getCmaterialvid() + "' "; String wlsql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + item.getCmaterialvid() + "' ";
Map<String, Object> mrlmap = (Map<String, Object>) baseDAO.executeQuery(wlsql, new MapProcessor()); Map<String, Object> mrlmap = (Map<String, Object>) baseDAO.executeQuery(wlsql, new MapProcessor());
@ -126,12 +128,30 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule<SaleOrderVO> {
itemObj.put("jhrq", ""); itemObj.put("jhrq", "");
} }
itemObj.put("bz", item.getVrownote()); itemObj.put("bz", item.getVrownote());
Object project_name = hybo.findColValue("bd_project", "project_name", " project_name = '" + item.getCprojectid() + "' "); itemObj.put("xsddh", vbillcode);// 销售订单号
itemObj.put("xmmc", project_name); itemObj.put("qdhh", item.getCrowno());// 行号
itemObj.put("jqbz", 0);// 结清标志
contentArray.add(itemObj); contentArray.add(itemObj);
} }
if (itemVOS.length > 0) {
SaleOrderBVO itemVO = itemVOS[0];
// 项目名称
Object project_name = hybo.findColValue("bd_project", "project_name", " pk_project = '" + itemVO.getCprojectid() + "' ");
singleObj.put("xmmc", project_name);
}
// 查询删除的子表
String delSql = " select crowno,csaleorderid from so_saleorder_b where csaleorderid = '" + csaleorderid + "' and dr = 1 ";
List<Map<String, String>> delList = (List<Map<String, String>>) dao.executeQuery(delSql, new MapListProcessor());
if (delList != null && !delList.isEmpty()) {
for (Map<String, String> delMap : delList) {
JSONObject delObj = new JSONObject();
delObj.put("xsddh", vbillcode);// 销售订单号
delObj.put("qdhh", delMap.get("crowno"));// 行号
delObj.put("jqbz", 1);// 结清标志
delObj.put("dhsl", 0);// 订货数量
contentArray.add(delObj);
}
}
singleObj.put("Content", contentArray); singleObj.put("Content", contentArray);
/* /*
@ -204,6 +224,20 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule<SaleOrderVO> {
return true; return true;
} }
private boolean checkBillType(String code) throws BusinessException {
String targetCode = configParams.get("soBillType");
if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) {
throw new BusinessException("未配置单据类型参数");
}
String[] types = targetCode.split(",");
for (String type : types) {
if (!type.isEmpty() && type.equals(code)) {
return true;
}
}
return false;
}
private String getDefCode(String code, String pk_defdoc) { private String getDefCode(String code, String pk_defdoc) {
String res = ""; String res = "";