Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
0a1bc358e6
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding='gb2312'?>
|
||||
<module displayname="erm" name="erm">
|
||||
<dependencies>
|
||||
</dependencies>
|
||||
</module>
|
|
@ -0,0 +1,140 @@
|
|||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package nccloud.web.erm.action.billmanage;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import nc.bs.logging.Log;
|
||||
import nc.nccloud.util.erm.expenseaccount.Func;
|
||||
import nc.vo.ep.bx.JKBXHeaderVO;
|
||||
import nc.vo.ml.NCLangRes4VoTransl;
|
||||
import nccloud.dto.baseapp.querytree.dataformat.Condition;
|
||||
import nccloud.dto.baseapp.querytree.dataformat.PageInfo;
|
||||
import nccloud.dto.baseapp.querytree.dataformat.QueryCondition;
|
||||
import nccloud.dto.baseapp.querytree.dataformat.QueryTreeFormatVO;
|
||||
import nccloud.dto.baseapp.querytree.dataformat.Value;
|
||||
import nccloud.framework.core.exception.ExceptionUtils;
|
||||
import nccloud.framework.core.json.IJson;
|
||||
import nccloud.framework.service.ServiceLocator;
|
||||
import nccloud.framework.web.container.IRequest;
|
||||
import nccloud.framework.web.json.JsonFactory;
|
||||
import nccloud.framework.web.ui.model.row.Row;
|
||||
import nccloud.framework.web.ui.pattern.grid.Grid;
|
||||
import nccloud.framework.web.ui.pattern.grid.GridOperator;
|
||||
import nccloud.pubitf.erm.billmanage.IBillManageService;
|
||||
import nccloud.web.erm.action.lic.AbstractLicAction;
|
||||
import nccloud.web.erm.util.expenseaccount.initbills.InitBillsUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
public class BillQueryAction extends AbstractLicAction {
|
||||
private Log log = Log.getInstance(this.getClass());
|
||||
|
||||
public BillQueryAction() {
|
||||
}
|
||||
|
||||
public Object doRealAction(IRequest request) {
|
||||
JKBXHeaderVO[] jkbxvos = new JKBXHeaderVO[0];
|
||||
Grid grid = new Grid();
|
||||
PageInfo pageInfo = null;
|
||||
|
||||
try {
|
||||
if (request == null) {
|
||||
ExceptionUtils.wrapBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("20110011makebill", "020110011makebill-0000"));
|
||||
}
|
||||
|
||||
IJson json = JsonFactory.create();
|
||||
String read = request.read();
|
||||
if (StringUtils.isEmpty(read)) {
|
||||
ExceptionUtils.wrapBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("20110011makebill", "020110011makebill-0000"));
|
||||
}
|
||||
|
||||
QueryTreeFormatVO info = (QueryTreeFormatVO)json.fromJson(read, QueryTreeFormatVO.class);
|
||||
if (null == info) {
|
||||
ExceptionUtils.wrapBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("20110011makebill", "020110011makebill-0000"));
|
||||
}
|
||||
|
||||
if (info.getUserdefObj() != null) {
|
||||
QueryCondition queryCon = new QueryCondition();
|
||||
List<Condition> conditions = new ArrayList();
|
||||
|
||||
for(Map.Entry<String, Object> entry : info.getUserdefObj().entrySet()) {
|
||||
Condition con = new Condition();
|
||||
con.setField((String)entry.getKey());
|
||||
Value value = new Value();
|
||||
value.setFirstvalue((String)entry.getValue());
|
||||
con.setValue(value);
|
||||
conditions.add(con);
|
||||
}
|
||||
|
||||
queryCon.setConditions(conditions);
|
||||
info.setQuerycondition(queryCon);
|
||||
}
|
||||
|
||||
IBillManageService billManageService = (IBillManageService)ServiceLocator.find(IBillManageService.class);
|
||||
String[] pks = null;
|
||||
if (info.getQuerycondition() != null) {
|
||||
jkbxvos = (JKBXHeaderVO[])billManageService.queryBillInfoByPage(info).toArray(jkbxvos);
|
||||
} else {
|
||||
ExceptionUtils.wrapBusinessException("请传入查询条件");
|
||||
}
|
||||
|
||||
if (jkbxvos == null || jkbxvos.length == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
pks = new String[jkbxvos.length];
|
||||
|
||||
for(int i = 0; i < jkbxvos.length; ++i) {
|
||||
if (jkbxvos[i] != null) {
|
||||
pks[i] = jkbxvos[i].getPk_jkbx();
|
||||
}
|
||||
}
|
||||
|
||||
GridOperator go = new GridOperator("201104DJCX_LIST");
|
||||
grid = go.toGrid(jkbxvos);
|
||||
InitBillsUtil.proGridDigit(grid);
|
||||
this.proGridDjztAndSpr(grid, pks);
|
||||
pageInfo = info.getPageInfo();
|
||||
} catch (Exception e) {
|
||||
this.log.error(e);
|
||||
ExceptionUtils.wrapException(e);
|
||||
}
|
||||
|
||||
JSONObject jsonObj = new JSONObject();
|
||||
jsonObj.put("pageInfo", pageInfo);
|
||||
jsonObj.put("data", grid);
|
||||
return jsonObj;
|
||||
}
|
||||
|
||||
private void proGridDjztAndSpr(Grid grid, String[] pks) throws Exception {
|
||||
IBillManageService service = (IBillManageService)ServiceLocator.find(IBillManageService.class);
|
||||
Map<String, String> busiid_username = service.qryCurApproveman(Arrays.asList(pks));
|
||||
Row[] rows = grid.getModel().getRows();
|
||||
|
||||
for(int i = 0; i < rows.length; ++i) {
|
||||
String pk_billtype = Func.toString(rows[i].getCell("pk_billtype").getValue());
|
||||
String djlxbm = Func.toString(rows[i].getCell("djlxbm").getValue());
|
||||
if (!"264a".equalsIgnoreCase(djlxbm) && !"261X".equalsIgnoreCase(pk_billtype) && !"262X".equalsIgnoreCase(pk_billtype)) {
|
||||
if ("3".equals(Func.toString(rows[i].getCell("djzt").getValue()))) {
|
||||
rows[i].getCell("djzt").setDisplay(NCLangRes4VoTransl.getNCLangRes().getStrByID("20110012billmanage", "020110012billmanage-0002"));
|
||||
}
|
||||
} else if ("3".equals(Func.toString(rows[i].getCell("djzt").getValue()))) {
|
||||
rows[i].getCell("djzt").setDisplay(NCLangRes4VoTransl.getNCLangRes().getStrByID("20110012billmanage", "020110012billmanage-0000"));
|
||||
}
|
||||
|
||||
if (busiid_username != null && busiid_username.size() > 0) {
|
||||
String pk_jkbx = Func.toString(rows[i].getCell("pk_jkbx").getValue());
|
||||
if (!StringUtils.isEmpty((CharSequence)busiid_username.get(pk_jkbx))) {
|
||||
rows[i].getCell("approver").setDisplay((String)busiid_username.get(pk_jkbx));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -136,6 +136,17 @@ public class WrResource extends AbstractNCCRestResource {
|
|||
vo.setChildren(WrItemVO.class, items.toArray(new WrItemVO[0]));
|
||||
voList.add(vo);
|
||||
IAPIWrMaintain server = NCLocator.getInstance().lookup(IAPIWrMaintain.class);
|
||||
List<AggWrVO> aggWrVOS = TransferCodeToPKTool.transferAggVO(voList);
|
||||
//翻译报告类型
|
||||
BaseDAO baseDAO = new BaseDAO();
|
||||
for (AggWrVO aggWrVO : aggWrVOS) {
|
||||
List<BilltypeVO> collection = (List<BilltypeVO>) baseDAO.retrieveByClause(BilltypeVO.class, " pk_billtypecode='" + aggWrVO.getParentVO().getVtrantypecode() + "'");
|
||||
if(collection==null||collection.size()==0){
|
||||
throw new BusinessException("翻译报告类型失败,检查报告类型编码【"+aggWrVO.getParentVO().getVtrantypecode()+"】");
|
||||
}
|
||||
aggWrVO.getParentVO().setVtrantypeid(collection.get(0).getPk_billtypeid());
|
||||
aggWrVO.getParentVO().setDbilldate(new UFDate());
|
||||
}
|
||||
AggWrVO[] aggvos = server.saveAndApprove(voList.toArray(new AggWrVO[0]));
|
||||
boolean successFlag = true;
|
||||
StringBuilder errMsg = new StringBuilder();
|
||||
|
|
|
@ -11,6 +11,7 @@ import nc.bs.mmpsc.pscsettle.rule.SettleStatusUpdateRule;
|
|||
import nc.bs.mmpsc.pscsettle.rule.approve.FillAuditInfoRule;
|
||||
import nc.bs.mmpsc.pscsettle.rule.unapprove.FilterAdjustedRule;
|
||||
import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule;
|
||||
import nc.bs.mmpub.rule.MMVOToAPRule;
|
||||
import nc.impl.pubapp.pattern.data.bill.template.UpdateBPTemplate;
|
||||
import nc.impl.pubapp.pattern.rule.IFilterRule;
|
||||
import nc.impl.pubapp.pattern.rule.IRule;
|
||||
|
@ -30,6 +31,9 @@ public class SettleApproveBP {
|
|||
}
|
||||
|
||||
private void addAfterRule(CompareAroundProcesser<AggSettleVO> processer, AggSettleVO[] originBills) {
|
||||
|
||||
IRule<AggSettleVO> var5 = new MMVOToAPRule(originBills);
|
||||
processer.addAfterRule(var5);
|
||||
}
|
||||
|
||||
private void addBeforeRule(CompareAroundProcesser<AggSettleVO> processer) {
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package nc.bs.mmpub.rule;
|
||||
|
||||
import nc.bs.mmpsc.pscsettle.bp.SettleToAPBP;
|
||||
import nc.impl.pubapp.pattern.data.vo.tool.VOConcurrentTool;
|
||||
import nc.impl.pubapp.pattern.rule.IRule;
|
||||
import nc.util.mmf.framework.base.MMArrayUtil;
|
||||
import nc.vo.mmpsc.pscsettle.entity.AggSettleVO;
|
||||
|
||||
public class MMVOToAPRule implements IRule<AggSettleVO> {
|
||||
|
||||
public MMVOToAPRule(AggSettleVO[] originBills) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void process(AggSettleVO[] vos) {
|
||||
if (!MMArrayUtil.isEmpty(vos)) {
|
||||
(new VOConcurrentTool()).checkTSWithDB(vos[0].getItemVO());
|
||||
SettleToAPBP bp = new SettleToAPBP();
|
||||
AggSettleVO[] retBills = bp.toAP(vos);
|
||||
if (retBills.length>0){
|
||||
System.out.println(1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected String getCheckField() {
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -320,17 +320,24 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
if (null == originVos || originVos.length == 0) {
|
||||
ExceptionUtils.wrappBusinessException("根据传入数据未匹配到相关数据");
|
||||
}
|
||||
Map<String, String> delMap = new HashMap<>();
|
||||
Map<String, List<String>> delBipMap = new HashMap<>();
|
||||
for (Map<String, Object> objectMap : paramList) {
|
||||
Map<String, Object> headdata = (Map<String, Object>) objectMap.get(HEADTABLE);
|
||||
delMap.put(headdata.get("csaleorderid") + "", headdata.getOrDefault("delId", "") + "");
|
||||
String csaleorderid = headdata.get("csaleorderid") + "";
|
||||
List<Object> bodyArr = (List<Object>) objectMap.get(BODYTABLE);
|
||||
List<String> delIds = new ArrayList<>();
|
||||
for (Object body : bodyArr) {
|
||||
Map<String, Object> bodydata = (Map<String, Object>) body;
|
||||
if ((bodydata.getOrDefault("vbdef11", "") + "").isEmpty()) {
|
||||
// 如果vbdef11为空则标记为新增行
|
||||
bodydata.put("status", "add");
|
||||
}
|
||||
if (!(bodydata.getOrDefault("csaleorderbid", "") + "").isEmpty()) {
|
||||
delIds.add(bodydata.get("csaleorderbid") + "");
|
||||
}
|
||||
}
|
||||
if (!delIds.isEmpty()) {
|
||||
delBipMap.put(csaleorderid, delIds);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -356,20 +363,17 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
SaleOrderVO bipVo = vosMap.get(primaryKey);
|
||||
// 设置单据状态
|
||||
hvo.setStatus(VOStatus.UPDATED);
|
||||
String delId = delMap.get(primaryKey);
|
||||
List<String> bipIds = delBipMap.get(primaryKey);
|
||||
|
||||
// 比较combinBillVOs中的BVO和vos中的BVO
|
||||
for (SaleOrderBVO bvo : vo.getChildrenVO()) {
|
||||
bvo.setStatus(VOStatus.UPDATED);
|
||||
bvo.setStatus(VOStatus.DELETED);
|
||||
String csaleorderbid = bvo.getCsaleorderbid();
|
||||
// 设置删除的物料行的状态,在bip传的数据中找不到
|
||||
if (StringUtils.isNotEmpty(delId)) {
|
||||
String[] delIds = delId.split(",", -1);
|
||||
String vbdef11 = bvo.getVbdef11();
|
||||
// 如果BIP合同销售订单的主键在删除的数组中,则设置为删除状态
|
||||
if (Arrays.asList(delIds).contains(vbdef11)) {
|
||||
bvo.setStatus(VOStatus.DELETED);
|
||||
NCCForUAPLogger.debug("findDeletedBids:" + VOStatus.DELETED + ",csaleorderbid = " + csaleorderbid);
|
||||
// 设置物料行的状态,在bip传的数据中找到则修改
|
||||
if (bipIds != null && !bipIds.isEmpty()) {
|
||||
// 明细行设置为修改状态
|
||||
if (bipIds.contains(csaleorderbid)) {
|
||||
bvo.setStatus(VOStatus.UPDATED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -508,4 +508,47 @@ public class SaleOrderResource extends NCCPubRestResource {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 合同管理系统修改ERP销售订单明细
|
||||
*
|
||||
* @author mzr
|
||||
* @date 2025/05/28
|
||||
*/
|
||||
@POST
|
||||
@Path("updateDefs")
|
||||
@Consumes({"application/json"})
|
||||
@Produces({"application/json"})
|
||||
public JSONString updateDefs(List<Map<String, Object>> paramList) {
|
||||
int num = 0;
|
||||
try {
|
||||
for (Map<String, Object> paramMap : paramList) {
|
||||
String csaleorderbid = (String) paramMap.get("csaleorderbid");
|
||||
if (StringUtils.isEmpty(csaleorderbid)) {
|
||||
return ResultMessageUtil.exceptionToJSON("传入参数为空,请检查", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
|
||||
}
|
||||
StringBuilder sql = new StringBuilder("update so_saleorder_b set ");
|
||||
SQLParameter parameter = new SQLParameter();
|
||||
for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
|
||||
if (!"csaleorderbid".equals(entry.getKey())) {
|
||||
sql.append(entry.getKey()).append(" = ?, ");
|
||||
parameter.addParam(entry.getValue());
|
||||
}
|
||||
}
|
||||
if (parameter.getCountParams() <= 0) {
|
||||
return ResultMessageUtil.toJSON("传入参数为空,请检查", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
|
||||
}
|
||||
// 删除最后的", "
|
||||
sql.delete(sql.length() - 2, sql.length());
|
||||
sql.append(" where csaleorderbid = ?");
|
||||
parameter.addParam(csaleorderbid);
|
||||
BaseDAO baseDAO = new BaseDAO();
|
||||
num += baseDAO.executeUpdate(sql.toString(), parameter);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return ResultMessageUtil.exceptionToJSON(e);
|
||||
}
|
||||
return ResultMessageUtil.toJSON(num, "销售订单修改成功,共修改" + num + "行");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -230,12 +230,12 @@ public class InvoiceDownloadAction implements ICommonAction {
|
|||
|
||||
private String doGet(String requestUrl, Map<String, String> paramMap) throws IOException {
|
||||
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
|
||||
cm.setMaxTotal(500);
|
||||
cm.setDefaultMaxPerRoute(50);
|
||||
cm.setMaxTotal(5000);
|
||||
cm.setDefaultMaxPerRoute(500);
|
||||
|
||||
RequestConfig globalConfig = RequestConfig.custom().setConnectionRequestTimeout(5000) // 连接池获取连接超时
|
||||
.setConnectTimeout(5000) // 连接建立超时
|
||||
.setSocketTimeout(20000) // 等待响应超时
|
||||
RequestConfig globalConfig = RequestConfig.custom().setConnectionRequestTimeout(50000) // 连接池获取连接超时
|
||||
.setConnectTimeout(50000) // 连接建立超时
|
||||
.setSocketTimeout(200000) // 等待响应超时
|
||||
.setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
|
||||
|
||||
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm)
|
||||
|
|
|
@ -125,22 +125,7 @@ public class ErpSaleOrderToBIPBackgroupWorkPlugin implements IBackgroundWorkPlug
|
|||
|
||||
|
||||
// 获取未推送合同销售订单更新的销售发票信息;
|
||||
String sql = " select '1' as flag,so_saleinvoice_b.cfirstbid,csaleinvoicebid " +
|
||||
"from so_saleinvoice,so_saleinvoice_b " +
|
||||
"where so_saleinvoice.csaleinvoiceid=so_saleinvoice_b.csaleinvoiceid " +
|
||||
"and so_saleinvoice.fstatusflag=2 " +
|
||||
"and nvl(so_saleinvoice_b.vbdef10,'N') in ('~','N') " +
|
||||
"and nvl(so_saleinvoice.vdef13,'~') not in ('~') " +
|
||||
"union all " +
|
||||
"select " +
|
||||
"'2' as flag, " +
|
||||
"ic_saleout_b.cfirstbillbid as cfirstbid, " +
|
||||
"ic_saleout_b.cgeneralbid as csaleinvoicebid " +
|
||||
"from ic_saleout_h, " +
|
||||
"ic_saleout_b " +
|
||||
"where ic_saleout_h.cgeneralhid = ic_saleout_b.cgeneralhid " +
|
||||
"and nvl(ic_saleout_b.vbdef4,'N') in ('~','N') " +
|
||||
"and ic_saleout_b.cfirsttype = '30'";
|
||||
String sql = " select * from v_bip_so_cron";
|
||||
|
||||
List<Map<String, String>> l_pk = (List<Map<String, String>>) new BaseDAO().executeQuery(sql.toString(), new MapListProcessor());
|
||||
if (l_pk.isEmpty()) {
|
||||
|
|
|
@ -1,21 +1,15 @@
|
|||
package nccloud.api.impl.mmbd.bom;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import nc.bs.dao.BaseDAO;
|
||||
import nc.bs.framework.common.InvocationInfoProxy;
|
||||
import nc.bs.framework.common.NCLocator;
|
||||
import nc.itf.bd.bom.bom0202.IBomBillMaintainService;
|
||||
import nc.itf.bd.bom.bom0202.IBomBillQueryService;
|
||||
import nc.itf.bd.bom.bom0202.IBomBusinessService;
|
||||
import nc.itf.mmf.busi.measure.IMeasesureService;
|
||||
import nc.itf.uif.pub.IUifService;
|
||||
import nc.jdbc.framework.SQLParameter;
|
||||
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||
import nc.mmbd.utils.factoryparam.MMBDFactoryParameter;
|
||||
import nc.pubitf.uapbd.IMaterialPubService;
|
||||
import nc.pubitf.uapbd.IMaterialPubService_C;
|
||||
|
@ -27,23 +21,8 @@ import nc.util.mmf.busi.measure.MeasureVO;
|
|||
import nc.util.mmf.busi.measure.NumScaleUtil;
|
||||
import nc.util.mmf.busi.service.OrgUnitPubService;
|
||||
import nc.util.mmf.framework.base.MMValueCheck;
|
||||
import nc.vo.bd.bom.bom0202.entity.AggBomVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomActivityVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomItemSourceVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomItemVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomLossVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomOutputsVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomPosVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomReplVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomSelectVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomUseOrgVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomVO;
|
||||
import nc.vo.bd.bom.bom0202.entity.BomWipVO;
|
||||
import nc.vo.bd.bom.bom0202.enumeration.BackflushTimeEnum;
|
||||
import nc.vo.bd.bom.bom0202.enumeration.BackflushTypeEnum;
|
||||
import nc.vo.bd.bom.bom0202.enumeration.BomCategoryEnum;
|
||||
import nc.vo.bd.bom.bom0202.enumeration.BomTypeEnum;
|
||||
import nc.vo.bd.bom.bom0202.enumeration.VersionTypeEnum;
|
||||
import nc.vo.bd.bom.bom0202.entity.*;
|
||||
import nc.vo.bd.bom.bom0202.enumeration.*;
|
||||
import nc.vo.bd.bom.bom0202.paramvo.BomHeadMtrlParam;
|
||||
import nc.vo.bd.bom.bom0202.paramvo.BomHeadMtrlResult;
|
||||
import nc.vo.bd.bom.bom0202.paramvo.BomMaterialParam;
|
||||
|
@ -67,7 +46,15 @@ import nccloud.api.rest.utils.ResultMessageUtil;
|
|||
import nccloud.vo.bd.bom.bom0202.validate.BomSavingValidation;
|
||||
import org.json.JSONString;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
|
||||
|
||||
// 2025年5月28日 电缆组织金思维BOM版本号自动计算处理
|
||||
private static final BaseDAO DAO = new BaseDAO();
|
||||
|
||||
private static String HEADTABLE = "bd_bom";
|
||||
|
||||
private static String BODYTABLE = "bd_bom_b";
|
||||
|
@ -155,6 +142,10 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
|
|||
}
|
||||
// zhangxinah ¶ÔÎïÁÏÖ÷¼ü½øÐзÒë
|
||||
dealWithMaterial(agg);
|
||||
|
||||
// 2025年5月28日 电缆组织金思维BOM版本号自动计算处理 By maolei
|
||||
handleCableOrgJinSiWeiBomVersion(agg);
|
||||
|
||||
dataSupplement(agg, userCode);
|
||||
|
||||
UFBoolean flag = (UFBoolean) agg.getParent().getAttributeValue("hbdefault");
|
||||
|
@ -1526,4 +1517,96 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
|
|||
item.setPk_useorg_v((String) agg.getParentVO().getAttributeValue("pk_org_v"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void handleCableOrgJinSiWeiBomVersion(AggBomVO agg) {
|
||||
try {
|
||||
String pk_org = (String) agg.getParent().getAttributeValue("pk_org");
|
||||
String hcmaterialid = (String) agg.getParent().getAttributeValue("hcmaterialid");
|
||||
String hversion = agg.getParent().getAttributeValue("hversion").toString();
|
||||
String cbomid = (String) agg.getParent().getAttributeValue("cbomid");
|
||||
String hvnote = (String) agg.getParent().getAttributeValue("hvnote");
|
||||
|
||||
// 检查必要字段
|
||||
if (MMValueCheck.isEmpty(hcmaterialid) || MMValueCheck.isEmpty(hversion)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 判断是否为电缆组织(组织编码C034)且备注包含"金思维"
|
||||
boolean isCableOrgJinSiWei = isCableOrganizationWithJinSiWei(pk_org, hvnote);
|
||||
|
||||
if (isCableOrgJinSiWei) {
|
||||
// 计算版本号
|
||||
String calculatedVersion = calculateBomVersion(pk_org, hcmaterialid );
|
||||
agg.getParent().setAttributeValue("hversion", calculatedVersion);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ExceptionUtils.wrappBusinessException("同步电缆组织金思维BOM版本号处理异常:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为电缆组织且备注包含金思维
|
||||
* @param pk_org 组织主键
|
||||
* @param hvnote 备注信息
|
||||
* @return 是否符合条件
|
||||
*/
|
||||
private boolean isCableOrganizationWithJinSiWei(String pk_org, String hvnote) {
|
||||
if (MMValueCheck.isEmpty(pk_org)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
// 查询组织编码
|
||||
String sql = "SELECT code FROM org_orgs WHERE pk_org = ?";
|
||||
SQLParameter param = new SQLParameter();
|
||||
param.addParam(pk_org);
|
||||
String orgCode = (String) DAO.executeQuery(sql, param, new ColumnProcessor());
|
||||
|
||||
// 判断组织编码是否为C034
|
||||
boolean isCableOrg = "C034".equals(orgCode);
|
||||
|
||||
// 判断备注是否包含"金思维"
|
||||
boolean containsJinSiWei = MMValueCheck.isNotEmpty(hvnote) && hvnote.contains("金思维");
|
||||
|
||||
return isCableOrg && containsJinSiWei;
|
||||
} catch (Exception e) {
|
||||
// 查询异常时返回false
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算BOM版本号
|
||||
* @param pk_org 组织主键
|
||||
* @param hcmaterialid 物料编码
|
||||
* @return 计算出的版本号
|
||||
*/
|
||||
private String calculateBomVersion(String pk_org, String hcmaterialid ) throws BusinessException {
|
||||
try {
|
||||
// 构建查询条件
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT MAX(TO_NUMBER(hversion)) as max_version ");
|
||||
sql.append("FROM bd_bom ");
|
||||
sql.append("WHERE pk_org = ? ");
|
||||
|
||||
SQLParameter param = new SQLParameter();
|
||||
param.addParam(pk_org);
|
||||
|
||||
// 根据物料情况添加查询条件
|
||||
sql.append("AND hcmaterialid = ? ");
|
||||
param.addParam(hcmaterialid);
|
||||
|
||||
// 只查询数字版本号,排除非数字版本
|
||||
sql.append("AND REGEXP_LIKE(hversion, '^[0-9]+$') ");
|
||||
|
||||
Long maxVersion = (Long) DAO.executeQuery(sql.toString(), param, new ColumnProcessor());
|
||||
|
||||
// 如果查询不到数据,默认版本号为1;否则最大版本号加1
|
||||
return String.valueOf((maxVersion != null ? maxVersion : 0) + 1);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new BusinessException("计算BOM版本号异常:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue