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

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.ThirdPartyPostRequestUtil;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.bd.defdoc.DefdocVO;
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.SaleOrderHVO;
import nc.vo.so.m30.entity.SaleOrderVO;
import nccloud.api.rest.utils.ResultMessageUtil;
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.web.action.itf.ICommonAction;
import nccloud.framework.web.container.IRequest;
import nccloud.framework.web.json.JsonFactory;
import nccloud.framework.web.ui.pattern.billcard.BillCardOperator;
import nccloud.pubitf.so.saleorder.service.ISaleOrderQueryWebService;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class SaleOrderToQmsAction implements ICommonAction {
private static final BaseDAO dao = new BaseDAO();
private static final String LOG_INFO_NAME = "qyMesLog";
private static final Log logger = Log.getInstance(LOG_INFO_NAME);
private static final String reqUrl = "/IF_QyErpApi.ashx?action=addxsht";
private Map<String, String> configParams;
public SaleOrderToQmsAction() {
}
public Object doAction(IRequest request) {
try {
String read = request.read();
IJson json = JsonFactory.create();
QueryInfo info = (QueryInfo)json.fromJson(read, QueryInfo.class);
ISaleOrderQueryWebService service = (ISaleOrderQueryWebService)ServiceLocator.find(ISaleOrderQueryWebService.class);
BillCardOperator operator = new BillCardOperator(info.getPageid());
SaleOrderVO saleorderVO = service.querySaleOrderVObyId(info.getPk());
String json = request.read();
logger.error("SaleOrderToQmsAction-Param:" + json);
Map<String, Object> paraMap = (Map) JsonFactory.create().fromJson(json, Map.class);
List<String> pkList = (List<String>) paraMap.get("pk");
if (pkList == null || pkList.isEmpty()) {
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);
if (configParams.isEmpty()) {
throw new BusinessException("箱变的QMS接口缺少配置");
}
return buildSyncData(new SaleOrderVO[]{saleorderVO});
buildSyncData(new SaleOrderVO[]{saleorderVO});
return ResultMessageUtil.toJSON(true, "推送成功");
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
return null;
}
}
/**
* 构建同步数据
*
* @return
*/
private List<Map<String, Object>> buildSyncData(SaleOrderVO[] useVOs) throws BusinessException {
private void buildSyncData(SaleOrderVO[] useVOs) throws BusinessException {
BaseDAO baseDAO = new BaseDAO();
List<Map<String, Object>> requestList = new ArrayList<>();
Date now = new Date();
HYPubBO hybo = new HYPubBO();
for (SaleOrderVO vo : useVOs) {
SaleOrderHVO pmoHeadVO = vo.getParentVO();
SaleOrderBVO[] itemVOS = vo.getChildrenVO();
String csaleorderid = pmoHeadVO.getCsaleorderid();
// 判断业务单元是否是箱变公司不是则跳过
String pkOrg = vo.getParentVO().getPk_org();
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
if (checkIfOrg(orgCode, configParams)) {
continue;
throw new BusinessException("当前组织非箱变,无法推送");
}
String billType = pmoHeadVO.getVtrantypecode();
if (checkBillType(billType)) {
throw new BusinessException("当前单据类型非推送类型,无法推送");
}
// 组装数据
JSONObject singleObj = new JSONObject();
String vbillcode = pmoHeadVO.getVbillcode();
SaleOrderHVO pmoHeadVO = vo.getParentVO();
SaleOrderBVO[] itemVOS = vo.getChildrenVO();
singleObj.put("batchid", now);
String vdef6 = pmoHeadVO.getVdef6();
String contractNum = getDefCode("zdy-001", vdef6);
@ -118,12 +129,6 @@ public class SaleOrderToQmsAction implements ICommonAction {
JSONArray contentArray = new JSONArray();
for (SaleOrderBVO item : itemVOS) {
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() + "' ";
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("bz", item.getVrownote());
Object project_name = hybo.findColValue("bd_project", "project_name", " project_name = '" + item.getCprojectid() + "' ");
itemObj.put("xmmc", project_name);
itemObj.put("xsddh", vbillcode);// 销售订单号
itemObj.put("qdhh", item.getCrowno());// 行号
itemObj.put("jqbz", 0);// 结清标志
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);
/*
@ -177,7 +200,6 @@ public class SaleOrderToQmsAction implements ICommonAction {
*/
pushData(singleObj);
}
return requestList;
}
/**
@ -219,6 +241,20 @@ public class SaleOrderToQmsAction implements ICommonAction {
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) {
String res = "";

View File

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

View File

@ -13,6 +13,7 @@ import nc.bs.uapbd.util.MyHelper;
import nc.bs.uapbd.util.ThirdPartyPostRequestUtil;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.bd.defdoc.DefdocVO;
import nc.vo.org.OrgVO;
@ -24,6 +25,7 @@ import nc.vo.so.m30.entity.SaleOrderVO;
import nccloud.baseapp.core.log.NCCForUAPLogger;
import java.util.Date;
import java.util.List;
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 String reqUrl = "/IF_QyErpApi.ashx?action=addxsht";
private Map<String, String> configParams;
private static final BaseDAO dao = new BaseDAO();
public AfterApprovingSynchronizeRuleQMS() {
}
@ -63,17 +65,23 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule<SaleOrderVO> {
Date now = new Date();
HYPubBO hybo = new HYPubBO();
for (SaleOrderVO vo : useVOs) {
SaleOrderHVO pmoHeadVO = vo.getParentVO();
SaleOrderBVO[] itemVOS = vo.getChildrenVO();
String csaleorderid = pmoHeadVO.getCsaleorderid();
// 判断业务单元是否是箱变公司不是则跳过
String pkOrg = vo.getParentVO().getPk_org();
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
if (checkIfOrg(orgCode, configParams)) {
continue;
}
String billType = pmoHeadVO.getVtrantypecode();
if (checkBillType(billType)){
continue;
}
// 组装数据
JSONObject singleObj = new JSONObject();
String vbillcode = pmoHeadVO.getVbillcode();
SaleOrderHVO pmoHeadVO = vo.getParentVO();
SaleOrderBVO[] itemVOS = vo.getChildrenVO();
singleObj.put("batchid", now);
String vdef6 = pmoHeadVO.getVdef6();
String contractNum = getDefCode("zdy-001", vdef6);
@ -104,12 +112,6 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule<SaleOrderVO> {
JSONArray contentArray = new JSONArray();
for (SaleOrderBVO item : itemVOS) {
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() + "' ";
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("bz", item.getVrownote());
Object project_name = hybo.findColValue("bd_project", "project_name", " project_name = '" + item.getCprojectid() + "' ");
itemObj.put("xmmc", project_name);
itemObj.put("xsddh", vbillcode);// 销售订单号
itemObj.put("qdhh", item.getCrowno());// 行号
itemObj.put("jqbz", 0);// 结清标志
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);
/*
@ -204,6 +224,20 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule<SaleOrderVO> {
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) {
String res = "";