Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
149d810332
|
@ -0,0 +1,18 @@
|
|||
package nccloud.web.mmpac.issue.action;
|
||||
|
||||
import nccloud.web.platform.print.AbstractPrintAction;
|
||||
|
||||
/**
|
||||
* 生产领料-备料计划列表打印
|
||||
*/
|
||||
public class IssuePrintAction extends AbstractPrintAction {
|
||||
@Override
|
||||
public String getPrintServiceModule() {
|
||||
return "mmpac";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPrintServiceName() {
|
||||
return "nccloud.pubimpl.mmpac.issue.service.IssuePickmPrintOperator";
|
||||
}
|
||||
}
|
|
@ -173,7 +173,7 @@ public class PmoToPlmAction implements ICommonAction {
|
|||
throw new BusinessException(result.get("msg") + "");
|
||||
} else {
|
||||
// µ÷ÕûPLM´«Êä״̬
|
||||
String updateSql = "update mm_mo set vdef13 = 'ÊÇ' where cpmohid = '[cpmohid]'";
|
||||
String updateSql = "update mm_mo set vdef13 = 'Y' where cpmohid = '[cpmohid]'";
|
||||
updateSql = updateSql.replace("[cpmohid]", parentVO.getPrimaryKey());
|
||||
getDao().executeUpdate(updateSql);
|
||||
resultList.add(result);
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<actions>
|
||||
<action>
|
||||
<name>mmpac.issue.issuepickmquery</name>
|
||||
<label>生产领料备料计划查询</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssuePickmQueryAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.issuereqpickmquery</name>
|
||||
<label>生产领料备料申请查询</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueReqPickmQueryAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.queryIssueObtainStockAccountNum</name>
|
||||
<label>生产领料获取库存量</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueObtainStockAccountNumAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.issueDestIssueAction</name>
|
||||
<label>生产领料领料</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueDestIssueAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.issueReserveMaterialAction</name>
|
||||
<label>生产领料备料</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueReserveMaterialAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.issueQueryFromPickm</name>
|
||||
<label>生产领料来源备料计划跳转</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueQueryFromPickmAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.isseQueryFromReqPickm</name>
|
||||
<label>生产领料来源备料申请跳转</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueQueryFromReqPickmAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.isseQueryFromPutPlan</name>
|
||||
<label>生产领料来源投放计划跳转</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueQueryFromPutPlanAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.isseQueryFromDispatchlist</name>
|
||||
<label>生产领料来源工序派工单跳转</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueQueryFromDispatchlistAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.issueQueryFromDirectTrans</name>
|
||||
<label>生产领料来源备料计划直接备料跳转</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueQueryFromDirectTrans</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.issueDirectTransQuery</name>
|
||||
<label>生产领料直接备料查询</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueDirectTransQueryAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.issueDirectTransAction</name>
|
||||
<label>生产领料直接备料处理</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueDirectTransAction</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.issueQueryFromPutPlanDirectTrans</name>
|
||||
<label>生产领料来源投放计划直接备料跳转</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueQueryFromPutPlanDirectTrans</clazz>
|
||||
</action>
|
||||
<action>
|
||||
<name>mmpac.issue.checkIsNccNative</name>
|
||||
<label>生产领料下游单据按钮查看是否为云原生环境</label>
|
||||
<clazz>nccloud.web.mmpac.issue.action.IssueCheckIsNccNative</clazz>
|
||||
</action>
|
||||
|
||||
</actions>
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
package nc.bs.mmpac.pmo.pac0002.bp;
|
||||
|
||||
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterDelSyncEpicMesRule;
|
||||
import nc.bs.mmpac.pmo.pac0002.bp.rule.WithUpdatePickmRule;
|
||||
import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint;
|
||||
import nc.bs.mmpac.pmo.pac0002.rule.PMOATPUpdateWithParaRule;
|
||||
|
@ -98,5 +99,6 @@ public class PMODeleteBP {
|
|||
IRule<PMOAggVO> billcoderule = new ReturnBillCodeRule("55A2", "vbillcode", "pk_group", "pk_org");
|
||||
processer.addAfterRule(billcoderule);
|
||||
processer.addAfterRule(new WithUpdatePickmRule());
|
||||
processer.addAfterRule(new AfterDelSyncEpicMesRule());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -165,7 +165,7 @@ public class AfterApproveSyncPLMRule implements IRule<PMOAggVO> {
|
|||
throw new BusinessException(result.get("msg").toString());
|
||||
} else {
|
||||
// 调整PLM传输状态
|
||||
String updateSql = "update mm_mo set vdef13 = '是' where cpmohid = '[cpmohid]'";
|
||||
String updateSql = "update mm_mo set vdef13 = 'Y' where cpmohid = '[cpmohid]'";
|
||||
updateSql = updateSql.replace("[cpmohid]", parentVO.getPrimaryKey());
|
||||
getDao().executeUpdate(updateSql);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,158 @@
|
|||
package nc.bs.mmpac.pmo.pac0002.bp.rule;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import nc.bs.logging.Log;
|
||||
import nc.bs.uapbd.util.MyHelper;
|
||||
import nc.bs.uapbd.util.ThirdPartyPostRequestUtil;
|
||||
import nc.impl.pubapp.pattern.rule.IRule;
|
||||
import nc.util.mmf.framework.base.MMArrayUtil;
|
||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
|
||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO;
|
||||
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
|
||||
import nc.vo.org.DeptVO;
|
||||
import nc.vo.org.OrgVO;
|
||||
import nc.vo.pub.BusinessException;
|
||||
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 流程生产订单删除后同步艾普MES
|
||||
*
|
||||
* @author mzr
|
||||
* @date 2025/9/16
|
||||
*/
|
||||
public class AfterDelSyncEpicMesRule implements IRule<PMOAggVO> {
|
||||
|
||||
private static final String LOG_INFO_NAME = "dldzlog";
|
||||
|
||||
private static final Log logDl = Log.getInstance(LOG_INFO_NAME);
|
||||
private static final String pmoUrl = "/prj-v5-web/ext/api/workOrder";
|
||||
private Map<String, String> configParams;
|
||||
private Map<String, String> deptParams;
|
||||
|
||||
@Override
|
||||
public void process(PMOAggVO[] pmoAggVOS) {
|
||||
if (MMArrayUtil.isEmpty(pmoAggVOS)) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
configParams = MyHelper.getConfigParams("Dldz-config", null);
|
||||
if (configParams.isEmpty()) {
|
||||
// throw new BusinessException("电力电子的艾普MES接口缺少配置");
|
||||
logDl.error("电力电子的艾普MES接口缺少配置");
|
||||
return;
|
||||
}
|
||||
deptParams = MyHelper.getConfigParams("Dldz-dept", null);
|
||||
if (deptParams.isEmpty()) {
|
||||
// throw new BusinessException("电力电子的艾普MES接口缺少部门编码映射配置");
|
||||
logDl.error("电力电子的艾普MES接口缺少部门编码映射配置");
|
||||
return;
|
||||
}
|
||||
String deptRange = String.join(",", deptParams.keySet());
|
||||
configParams.put("deptRange", deptRange);
|
||||
List<PMOAggVO> filteredOrders = checkAndFilterBillSrcOrg(pmoAggVOS);
|
||||
if (filteredOrders.isEmpty()) {
|
||||
// logDl.error("没有符合条件的生产订单需要同步到艾普MES系统。");
|
||||
return;
|
||||
}
|
||||
// logDl.info("开始同步生产订单到艾普MES系统,符合条件的订单数量: " + filteredOrders.size());
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
// 推送到艾普MES系统
|
||||
for (PMOAggVO aggVO : filteredOrders) {
|
||||
buildSyncData(aggVO, jsonArray);
|
||||
}
|
||||
if (!jsonArray.isEmpty()) {
|
||||
JSONObject data = new JSONObject();
|
||||
data.put("workOrders", jsonArray);
|
||||
pushData(pmoUrl, data);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logDl.error("删除同步生产订单到艾普MES系统失败: " + e.getMessage(), e);
|
||||
ExceptionUtils.wrappException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 组装数据-流程生产订单+备料计划
|
||||
*/
|
||||
private void buildSyncData(PMOAggVO aggVO, JSONArray orderArr) throws BusinessException {
|
||||
PMOHeadVO headVo = aggVO.getParentVO();
|
||||
// 组织
|
||||
String pkOrg = headVo.getPk_org();
|
||||
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
|
||||
// 组装数据
|
||||
JSONObject orderParam = new JSONObject();
|
||||
orderParam.put("type", "D"); // 删除标识
|
||||
orderParam.put("companyCode", orgCode);// 公司编码
|
||||
orderParam.put("workOrderCode", headVo.getVbillcode());// 工单号
|
||||
orderArr.add(orderParam);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 调用MES的生产工单接口推送ERP的流程生产订单和备料计划或推送出厂编号
|
||||
*
|
||||
* @param param 请求体
|
||||
* @throws BusinessException 如果发生非特定可忽略的错误
|
||||
*/
|
||||
private void pushData(String reqUrl, Object param) throws BusinessException {
|
||||
String responseString = null;
|
||||
try {
|
||||
// 转json字符串的时候保留null值
|
||||
String jsonStr = JSON.toJSONString(param, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
|
||||
logDl.error("EpicMes-PMO-del-param = " + jsonStr);
|
||||
String baseUrl = configParams.get("epicMesUrl");
|
||||
String requestUrl = baseUrl + reqUrl;
|
||||
logDl.error(" EpicMes-PMO-del-url = " + requestUrl);
|
||||
responseString = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, jsonStr);
|
||||
logDl.error(" EpicMes-PMO-del-res = " + responseString);
|
||||
|
||||
JSONObject resultObj = JSONObject.parseObject(responseString);
|
||||
if (!"1".equals(resultObj.getString("flag"))) {
|
||||
logDl.error("EpicMes-PMO-del-error,result[" + resultObj.toJSONString() + "]");
|
||||
throw new BusinessException("艾普MES返回错误信息:" + resultObj.getString("msg"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logDl.error(" 调用MES或处理响应时发生错误。原始响应: " + responseString + " 错误: " + e.getMessage(), e);
|
||||
throw new BusinessException("调用艾普MES或处理响应时发生错误:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检查并筛选需要同步的单据
|
||||
*/
|
||||
private List<PMOAggVO> checkAndFilterBillSrcOrg(PMOAggVO[] pmoAggVOS) throws BusinessException {
|
||||
List<PMOAggVO> aggvoList = new ArrayList<>();
|
||||
for (PMOAggVO aggVo : pmoAggVOS) {
|
||||
String pkOrg = aggVo.getParentVO().getPk_org();
|
||||
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
|
||||
// 检查当前组织是否为电力电子
|
||||
if (MyHelper.checkIfDldzOrg(orgCode, configParams)) {
|
||||
continue;
|
||||
}
|
||||
// 按照部门筛选生产订单,只传消弧车间、电容车间、成套车间(部门是配置项)
|
||||
PMOItemVO childrenVO = aggVo.getChildrenVO()[0];
|
||||
String cdeptid = childrenVO.getCdeptid();
|
||||
String deptCode = MyHelper.transferField(DeptVO.getDefaultTableName(), DeptVO.CODE, DeptVO.PK_DEPT, cdeptid);
|
||||
// 如果部门不在范围内则跳过本次循环
|
||||
String deptRange = configParams.get("deptRange");
|
||||
if (deptCode == null || !deptRange.contains(deptCode)) {
|
||||
continue;
|
||||
}
|
||||
aggvoList.add(aggVo);
|
||||
}
|
||||
|
||||
return aggvoList;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -339,7 +339,7 @@ public class SyncEpicMesUtil {
|
|||
if (jsonArray.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
obj.put("releaseNo", jsonArray.toString());
|
||||
obj.put("releaseNo", jsonArray);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
package nccloud.pubimpl.mmpac.issue.service;
|
||||
|
||||
import nc.impl.pubapp.pattern.data.bill.BillQuery;
|
||||
import nc.vo.mmpac.reqpickm.consts.ReqPickmLangConsts;
|
||||
import nc.vo.mmpac.reqpickm.entity.AggReqPickmVO;
|
||||
import nc.vo.mmpac.reqpickm.entity.ReqPickmItemVO;
|
||||
import nc.vo.mmpac.reqpickm.entity.ReqPickmSumVO;
|
||||
import nc.vo.mmpub.util.BillBodySortUtils;
|
||||
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||
import nccloud.pubitf.mmpub.pub.print.BaseMetaPrintService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 生产领料-备料计划列表打印服务类
|
||||
*/
|
||||
public class IssuePickmPrintOperator extends BaseMetaPrintService {
|
||||
@Override
|
||||
public Object[] getDatas(String[] ids) {
|
||||
BillQuery<AggReqPickmVO> query = new BillQuery(AggReqPickmVO.class);
|
||||
String[] uniqueIds = this.removeDuplicates(ids);
|
||||
AggReqPickmVO[] vos = query.query(uniqueIds);
|
||||
if (null == vos || vos.length == 0) {
|
||||
ExceptionUtils.wrappBusinessException(ReqPickmLangConsts.getEdit_msg());
|
||||
}
|
||||
|
||||
BillBodySortUtils.sort(vos, "vrowno", ReqPickmItemVO.class);
|
||||
BillBodySortUtils.sort(vos, "vrowno", ReqPickmSumVO.class);
|
||||
return vos;
|
||||
}
|
||||
|
||||
private String[] removeDuplicates(String[] ids) {
|
||||
if (null == ids) {
|
||||
return new String[0];
|
||||
} else if (ids.length <= 1) {
|
||||
return ids;
|
||||
} else {
|
||||
List<String> uniqueIdList = new ArrayList();
|
||||
|
||||
for (int i = 0; i < ids.length; ++i) {
|
||||
String id = ids[i];
|
||||
if (!uniqueIdList.contains(id)) {
|
||||
uniqueIdList.add(id);
|
||||
}
|
||||
}
|
||||
|
||||
String[] uniqueIds = (String[]) uniqueIdList.toArray(new String[0]);
|
||||
return uniqueIds;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,10 +13,12 @@ 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.MapProcessor;
|
||||
import nc.vo.bd.material.MaterialVO;
|
||||
import nc.vo.bd.material.marbasclass.MarBasClassVO;
|
||||
import nc.vo.bd.material.stock.MaterialStockVO;
|
||||
import nc.vo.fi.pub.SqlUtils;
|
||||
import nc.vo.org.OrgVO;
|
||||
import nc.vo.pub.BusinessException;
|
||||
|
||||
|
@ -183,11 +185,22 @@ public class MaterialToEpicMesListener implements IBusinessListener {
|
|||
}
|
||||
|
||||
private String getGoodsType(String pkMaterial) throws BusinessException {
|
||||
String targetCode = configParams.get("dldzOrg");
|
||||
String[] orgItem = targetCode.split(",");
|
||||
String inStr = SqlUtils.getInStr("b.code", orgItem, Boolean.TRUE);
|
||||
// 物料-库存信息-物料类型 DR=分销补货;FR=工厂补货;MR=制造件;PR=采购件;OT=委外件;ET=其他
|
||||
// mesÎïÁÏÀàÐÍ ÖÆÔì1 ÆäËü0
|
||||
// mes物料类型 制造1 其它0(ERP多个组织中如果有一个是制造件就传1)
|
||||
String mesType = "0";
|
||||
String martype = MyHelper.transferField(MaterialStockVO.getDefaultTableName(), MaterialStockVO.MARTYPE, MaterialStockVO.PK_MATERIAL, pkMaterial);
|
||||
if ("MR".equals(martype)) {
|
||||
// String martype = MyHelper.transferField(MaterialStockVO.getDefaultTableName(), MaterialStockVO.MARTYPE, MaterialStockVO.PK_MATERIAL, pkMaterial);
|
||||
String countSql = "SELECT count(1)" +
|
||||
" FROM bd_materialstock a" +
|
||||
" LEFT JOIN org_stockorg b ON a.pk_org = b.pk_stockorg" +
|
||||
" WHERE a.dr = 0 AND a.martype = 'MR' " +
|
||||
" AND a.pk_material = '[pkMaterial]'" +
|
||||
" AND " + inStr;
|
||||
countSql = countSql.replace("[pkMaterial]", pkMaterial);
|
||||
Integer num = (Integer) new BaseDAO().executeQuery(countSql, new ColumnProcessor());
|
||||
if (num > 0) {
|
||||
mesType = "1";
|
||||
}
|
||||
return mesType;
|
||||
|
|
Loading…
Reference in New Issue