212 lines
12 KiB
Java
212 lines
12 KiB
Java
package com.yem.wm.utils;
|
||
|
||
|
||
import kd.bos.data.BusinessDataReader;
|
||
import kd.bos.dataentity.OperateOption;
|
||
import kd.bos.dataentity.entity.DynamicObject;
|
||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||
import kd.bos.dataentity.metadata.IDataEntityType;
|
||
import kd.bos.entity.EntityMetadataCache;
|
||
import kd.bos.entity.MainEntityType;
|
||
import kd.bos.entity.botp.runtime.ConvertOperationResult;
|
||
import kd.bos.entity.botp.runtime.PushArgs;
|
||
import kd.bos.entity.datamodel.IRefrencedataProvider;
|
||
import kd.bos.entity.datamodel.ListSelectedRow;
|
||
import kd.bos.entity.operate.OperateOptionConst;
|
||
import kd.bos.entity.operate.result.OperationResult;
|
||
import kd.bos.exception.KDBizException;
|
||
import kd.bos.orm.query.QCP;
|
||
import kd.bos.orm.query.QFilter;
|
||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||
import kd.bos.servicehelper.botp.ConvertServiceHelper;
|
||
import kd.bos.servicehelper.operation.OperationServiceHelper;
|
||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||
import org.apache.commons.lang3.StringUtils;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
|
||
public class IABudgetCommon {
|
||
|
||
/**
|
||
* 外销合同下推生成内审预算单
|
||
*/
|
||
public static void pushToGeneration(DynamicObject dataEntity, int[] selectRows, String entryKey) {
|
||
deleteExistIAData(dataEntity, selectRows, entryKey);
|
||
String billtype = dataEntity.getString("yem_billtype.number");
|
||
// 整机按照单据头下推
|
||
// 配件按照分录下推
|
||
String from = dataEntity.getDataEntityType().getName();
|
||
String to = "yem_im_intauditbusa";
|
||
Long id = dataEntity.getLong("id");
|
||
String ruleId = "";
|
||
List<ListSelectedRow> selectedRows = new ArrayList<>();
|
||
|
||
// 内贸整机合同 || 外贸整机合同
|
||
// if ("yem_es_salesorder_nmzj".equals(billtype) || "yem_es_salesorder_ZJ".equals(billtype)) {
|
||
if (StringUtils.containsIgnoreCase(billtype, "salesorder") && StringUtils.containsIgnoreCase(billtype, "zj")) {
|
||
ruleId = "1934363427698911232";//外销合同 >> 内审预算单(整机)
|
||
if (StringUtils.containsIgnoreCase(billtype, "x")) {//变更单
|
||
ruleId = "1995630519982761984";//(yem)外销合同变更单 >> 内审预算单(整机)
|
||
}
|
||
DynamicObjectCollection materialinfo = dataEntity.getDynamicObjectCollection(entryKey);
|
||
for (int selectRowId : selectRows) {
|
||
DynamicObject object = materialinfo.get(selectRowId);
|
||
ListSelectedRow srcBillRows = new ListSelectedRow(id);
|
||
srcBillRows.setEntryPrimaryKeyValue(object.getPkValue());
|
||
srcBillRows.setEntryEntityKey(entryKey);
|
||
selectedRows.add(srcBillRows);
|
||
}
|
||
}
|
||
|
||
// 内贸配件合同 || 外贸配件合同
|
||
// if ("yem_es_salesorder_nmpj".equals(billtype) || "yem_es_salesorder_PJ".equals(billtype)) {
|
||
if (StringUtils.containsIgnoreCase(billtype, "salesorder") && StringUtils.containsIgnoreCase(billtype, "pj")) {
|
||
ruleId = "1934358354914736128";//外销合同 >> 内审预算单(配件)
|
||
if (StringUtils.containsIgnoreCase(billtype, "x")) {
|
||
ruleId = "1995638449608075264";//(yem)外销合同变更单 >> 内审预算单(配件)
|
||
}
|
||
ListSelectedRow srcBillRows = new ListSelectedRow(id);
|
||
selectedRows.add(srcBillRows);
|
||
}
|
||
|
||
// 外贸客户需求单-配件 || 内贸客户需求单-配件
|
||
if ("yem_im_inclientdema_pj".equals(billtype) || "yem_im_clientdema_pj".equals(billtype)) {
|
||
ruleId = "1936311988980316160";
|
||
ListSelectedRow srcBillRows = new ListSelectedRow(id);
|
||
selectedRows.add(srcBillRows);
|
||
}
|
||
|
||
// 外贸客户需求单-整机 || 内贸客户需求单-整机
|
||
if ("yem_im_inclientdeman_zj".equals(billtype) || "yem_im_clientdeman_zj".equals(billtype)) {
|
||
ruleId = "1936312822665345024";
|
||
DynamicObjectCollection materialinfo = dataEntity.getDynamicObjectCollection(entryKey);
|
||
for (int selectRowId : selectRows) {
|
||
DynamicObject object = materialinfo.get(selectRowId);
|
||
ListSelectedRow srcBillRows = new ListSelectedRow(id);
|
||
srcBillRows.setEntryPrimaryKeyValue(object.getPkValue());
|
||
srcBillRows.setEntryEntityKey(entryKey);
|
||
selectedRows.add(srcBillRows);
|
||
}
|
||
}
|
||
|
||
PushArgs pushArgs = new PushArgs();
|
||
pushArgs.setSourceEntityNumber(from); // 必选,源单标识
|
||
pushArgs.setTargetEntityNumber(to); // 必选,目标单标识
|
||
pushArgs.setHasRight(false); // 可选,传入true,不检查目标单新增权
|
||
pushArgs.setRuleId(ruleId); // 可选,传入本次下推使用的转换规则id;传入空值,由系统自动寻找合适的转换规则
|
||
pushArgs.setBuildConvReport(true); // 是否输出详细错误报告
|
||
pushArgs.setSelectedRows(selectedRows); // 必选,设置需要下推的源单及分录内码
|
||
|
||
ConvertOperationResult pushResult = ConvertServiceHelper.push(pushArgs);
|
||
if (pushResult.isSuccess()) {
|
||
// 获取生成的目标单数据包
|
||
MainEntityType targetMainType = EntityMetadataCache.getDataEntityType(to);
|
||
List<DynamicObject> targetBillObjs = pushResult.loadTargetDataObjects(new IRefrencedataProvider() {
|
||
@Override
|
||
public void fillReferenceData(Object[] objs, IDataEntityType dType) {
|
||
BusinessDataReader.loadRefence(objs, dType);
|
||
}
|
||
}, targetMainType);
|
||
// 设置保存参数,调用目标单保存服务,保存目标单(保存时自动反写源单)
|
||
OperateOption saveOption = OperateOption.create();
|
||
saveOption.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true)); // 不执行警告级别校验器
|
||
saveOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, String.valueOf(true)); // 不显示交互提示,自动执行到底
|
||
saveOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true)); // 全部校验通过才保存
|
||
DynamicObjectCollection materialinfo = dataEntity.getDynamicObjectCollection(entryKey);
|
||
for (DynamicObject target : targetBillObjs) {
|
||
int index = targetBillObjs.indexOf(target);
|
||
OperationResult saveResult = SaveServiceHelper.saveOperate(to, new DynamicObject[]{target}, saveOption);
|
||
// 判断保存结果
|
||
if (!saveResult.isSuccess()) {
|
||
throw new KDBizException("生成的内审预算单保存失败:" + saveResult.getMessage());
|
||
} else {
|
||
String IAno = target.getString("billno");
|
||
long IAid = target.getLong("id");
|
||
for (DynamicObject object : materialinfo) {
|
||
int idx = materialinfo.indexOf(object);
|
||
if (idx == selectRows[index]) {
|
||
object.set("yem_intauditbusano", IAno);
|
||
object.set("yem_intauditbusaid", IAid);
|
||
if ("yem_es_salesorder_nmzj".equals(billtype) || "yem_es_salesorder_ZJ".equals(billtype) || "yem_im_inclientdeman_zj".equals(billtype) || "yem_im_clientdeman_zj".equals(billtype)) {
|
||
bingEntryConfigInfo(target, object);
|
||
SaveServiceHelper.save(new DynamicObject[]{target});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
SaveServiceHelper.save(new DynamicObject[]{dataEntity});
|
||
} else {
|
||
String message = pushResult.getMessage();
|
||
throw new KDBizException("下推失败:" + message);
|
||
}
|
||
}
|
||
|
||
private static void bingEntryConfigInfo(DynamicObject target, DynamicObject object) {
|
||
// 外销合同-多功能配置
|
||
DynamicObjectCollection multiconfig = object.getDynamicObjectCollection("yem_multiconfig");
|
||
// 内审预算-订单配置要求
|
||
DynamicObjectCollection intauditbusa = target.getDynamicObjectCollection("yem_im_intauditbusa_b");
|
||
for (DynamicObject dynamicObject : multiconfig) {
|
||
DynamicObject add = intauditbusa.addNew();
|
||
// 配置类型
|
||
add.set("yem_configurtype", dynamicObject.get("yem_configurtype"));
|
||
// 配置名称
|
||
add.set("yem_configurname", dynamicObject.get("yem_configurname"));
|
||
// 标准销售加价(结算币别)
|
||
add.set("yem_marketraiseprice", dynamicObject.get("yem_marketraiseprice"));
|
||
// 单台数量
|
||
add.set("yem_unitsetnumber", dynamicObject.get("yem_unitsetnumber"));
|
||
// 单台加价金额(结算币别)
|
||
add.set("yem_unitsetamount", dynamicObject.get("yem_unitsetamount"));
|
||
// 单台加价金额(本位币)
|
||
add.set("yem_unitsetamountbase", dynamicObject.get("yem_unitsetamountbase"));
|
||
}
|
||
}
|
||
|
||
private static void deleteExistIAData(DynamicObject dataEntity, int[] selectRows, String entryKey) {
|
||
DynamicObjectCollection materialinfo = dataEntity.getDynamicObjectCollection(entryKey);
|
||
for (int selectRowId : selectRows) {
|
||
DynamicObject object = materialinfo.get(selectRowId);
|
||
Object objId = object.get("yem_intauditbusaid");
|
||
if (YEM.isEmpty(objId)) continue;
|
||
Long id = (Long) objId;
|
||
DynamicObject IA = BusinessDataServiceHelper.loadSingle("yem_im_intauditbusa", "id, billno, billstatus", new QFilter[]{new QFilter("id", QCP.equals, id)});
|
||
if (YEM.isEmpty(IA)) continue;
|
||
String billstatus = IA.getString("billstatus");
|
||
String billno = IA.getString("billno");
|
||
OperateOption option = YEM.getOption();
|
||
if ("C".equals(billstatus)) {
|
||
OperationResult unaudit = OperationServiceHelper.executeOperate("unaudit", "yem_im_intauditbusa", new Object[]{id}, option);
|
||
if (unaudit.isSuccess()) {
|
||
OperationResult delete = OperationServiceHelper.executeOperate("delete", "yem_im_intauditbusa", new Object[]{id}, option);
|
||
if (!delete.isSuccess()) {
|
||
throw new KDBizException(String.format("删除内审预算单 [ %s ] 失败,原因:[ %s ],请手动删除后重新生成!", billno, delete.getMessage()));
|
||
}
|
||
} else {
|
||
throw new KDBizException(String.format("反审核内审预算单 [ %s ] 失败,原因:[ %s ],请手动反审核删除后重新生成!", billno, unaudit.getMessage()));
|
||
}
|
||
}
|
||
if ("B".equals(billstatus)) {
|
||
OperationResult unsubmit = OperationServiceHelper.executeOperate("unsubmit", "yem_im_intauditbusa", new Object[]{id}, option);
|
||
if (unsubmit.isSuccess()) {
|
||
OperationResult delete = OperationServiceHelper.executeOperate("delete", "yem_im_intauditbusa", new Object[]{id}, option);
|
||
if (!delete.isSuccess()) {
|
||
throw new KDBizException(String.format("删除内审预算单 [ %s ] 失败,原因:[ %s ],请手动删除后重新生成!", billno, delete.getMessage()));
|
||
}
|
||
} else {
|
||
throw new KDBizException(String.format("撤销内审预算单 [ %s ] 失败,原因:[ %s ],请手动撤销删除后重新生成!", billno, unsubmit.getMessage()));
|
||
}
|
||
}
|
||
if ("A".equals(billstatus)) {
|
||
OperationResult delete = OperationServiceHelper.executeOperate("delete", "yem_im_intauditbusa", new Object[]{id}, option);
|
||
if (!delete.isSuccess()) {
|
||
throw new KDBizException(String.format("删除内审预算单 [ %s ] 失败,原因:[ %s ],请手动删除后重新生成!", billno, delete.getMessage()));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|