From 7f5689249f147b465cecad1bc5d88a4ad3511810 Mon Sep 17 00:00:00 2001 From: sez Date: Wed, 26 Nov 2025 11:43:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=90=E7=89=A9=E6=96=99=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/MaterialManualAssignOpPlugin.java | 238 ++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 lc123/cloud/app/plugin/operate/sys/MaterialManualAssignOpPlugin.java diff --git a/lc123/cloud/app/plugin/operate/sys/MaterialManualAssignOpPlugin.java b/lc123/cloud/app/plugin/operate/sys/MaterialManualAssignOpPlugin.java new file mode 100644 index 0000000..776898b --- /dev/null +++ b/lc123/cloud/app/plugin/operate/sys/MaterialManualAssignOpPlugin.java @@ -0,0 +1,238 @@ +package tqq9.lc123.cloud.app.plugin.operate.sys; + +import kd.bos.dataentity.OperateOption; +import kd.bos.dataentity.entity.CloneUtils; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.botp.runtime.ConvertOperationResult; +import kd.bos.entity.botp.runtime.PushArgs; +import kd.bos.entity.datamodel.ListSelectedRow; +import kd.bos.entity.operate.OperateOptionConst; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.entity.validate.AbstractValidator; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.basedata.BaseDataServiceHelper; +import kd.bos.servicehelper.botp.ConvertServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +/** + * + */ +public class MaterialManualAssignOpPlugin extends AbstractOperationServicePlugIn { + private static final Log logger = LogFactory.getLog(MaterialManualAssignOpPlugin.class); + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.addValidator(new AbstractValidator() { + @Override + public void validate() { + /*ExtendedDataEntity[] dataEntities1 =this.getDataEntities(); + for (ExtendedDataEntity extendedDataEntity : dataEntities1) { + DynamicObject dataEntity = extendedDataEntity.getDataEntity(); + dataEntity=BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(),"bd_material"); + String ctrlStrategy = dataEntity.getString("ctrlstrategy"); + if ("5".equals(ctrlStrategy) || "6".equals(ctrlStrategy) || "7".equals(ctrlStrategy)) { + this.addErrorMessage(extendedDataEntity,"控制策略为“自由分配”或“逐级分配”的基础数据才能分配"); + } + + }*/ + + + //Item-00000008:“自由分配”的基础数据只能由创建组织分配,组织“上海励齿”不是基础资料的创建组织 + + } + }); + } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + + DynamicObject[] dataEntities1 = e.getDataEntities(); + for (DynamicObject dynamicObject : dataEntities1) { + dynamicObject = BusinessDataServiceHelper.loadSingle(dynamicObject.getPkValue(), "bd_material"); + PushArgs pushArgs = new PushArgs(); + //源单标识 + pushArgs.setSourceEntityNumber("bd_material"); + String targetEntityNumber = "bd_materialinventoryinfo";//物料库存信息 + //目标单标识 + pushArgs.setTargetEntityNumber(targetEntityNumber); + //生成转换结果报告 + pushArgs.setBuildConvReport(true); + //不检查目标单新增权限 + pushArgs.setHasRight(true); + String tqq9_sfqyxqgl1 = dynamicObject.getString("tqq9_sfqyxqgl1");//是否启用有效期管理 + String ruleId = "2352399500154269696"; + if (!"true".equals(tqq9_sfqyxqgl1)) { + ruleId = "2352962432307067904"; + } + + + //传入转换规则id + pushArgs.setRuleId(ruleId); + // + //下推自动保存 + pushArgs.setAutoSave(true); + //设置源单选中的数据包 + List selectedRowList = new ArrayList<>(); + ListSelectedRow row = new ListSelectedRow(); + row.setPrimaryKeyValue(dynamicObject.getPkValue()); + selectedRowList.add(row); + pushArgs.setSelectedRows(selectedRowList); + //执行下推 + ConvertOperationResult result = ConvertServiceHelper.pushAndSave(pushArgs); + //获取下推目标单id + Set targetBillIds = result.getTargetBillIds(); + + boolean success = result.isSuccess(); + DynamicObject bjlc = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{new QFilter("number", QCP.equals, "BJLC")}); + DynamicObject gzlc = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{new QFilter("number", QCP.equals, "GZLC")}); + DynamicObject shlc = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{new QFilter("number", QCP.equals, "SHLC")}); + + if (success) { + if (targetBillIds.size() > 0) { + for (Object targetBillId : targetBillIds) { + OperateOption option = OperateOption.create(); + option.setVariableValue(OperateOptionConst.ISHASRIGHT, "true"); + option.setVariableValue(OperateOptionConst.ORM_SAVEOP_REMOVECACHE, "true"); + DynamicObject sh = BusinessDataServiceHelper.loadSingle(targetBillId, targetEntityNumber); + sh.set("createorg", shlc); + + + List ids = new ArrayList<>(); + ids.add((Long) targetBillId); + BaseDataServiceHelper.managePermChange(targetEntityNumber, ids, shlc.getLong("id")); + + DynamicObject bj = (DynamicObject) new CloneUtils(false, true).clone(sh); + bj.set("createorg", bjlc); + + SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create()); + + DynamicObject gz = (DynamicObject) new CloneUtils(false, true).clone(sh); + gz.set("createorg", gzlc); + + SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create()); + + + } + } + } + + targetEntityNumber = "bd_materialpurchaseinfo";//物料采购信息 + //目标单标识 + pushArgs.setTargetEntityNumber(targetEntityNumber); + ruleId = "2350906360427737088"; + //传入转换规则id + pushArgs.setRuleId(ruleId); + + //执行下推 + result = ConvertServiceHelper.pushAndSave(pushArgs); + //获取下推目标单id + targetBillIds = result.getTargetBillIds(); + success = result.isSuccess(); + if (success) { + if (targetBillIds.size() > 0) { + for (Object targetBillId : targetBillIds) { + OperateOption option = OperateOption.create(); + option.setVariableValue(OperateOptionConst.ISHASRIGHT, "true"); + option.setVariableValue(OperateOptionConst.ORM_SAVEOP_REMOVECACHE, "true"); + DynamicObject sh = BusinessDataServiceHelper.loadSingle(targetBillId, targetEntityNumber); + sh.set("createorg", shlc); + + + List ids = new ArrayList<>(); + ids.add((Long) targetBillId); + BaseDataServiceHelper.managePermChange(targetEntityNumber, ids, shlc.getLong("id")); + + DynamicObject bj = (DynamicObject) new CloneUtils(false, true).clone(sh); + bj.set("createorg", bjlc); + + SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create()); + + DynamicObject gz = (DynamicObject) new CloneUtils(false, true).clone(sh); + gz.set("createorg", gzlc); + + SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create()); + + + } + } + } + + ruleId = "2352406985778951168"; + targetEntityNumber = "bd_materialsalinfo";//物料销售信息 + //目标单标识 + pushArgs.setTargetEntityNumber(targetEntityNumber); + //传入转换规则id + pushArgs.setRuleId(ruleId); + + //执行下推 + result = ConvertServiceHelper.pushAndSave(pushArgs); + //获取下推目标单id + targetBillIds = result.getTargetBillIds(); + success = result.isSuccess(); + if (success) { + if (targetBillIds.size() > 0) { + for (Object targetBillId : targetBillIds) { + OperateOption option = OperateOption.create(); + option.setVariableValue(OperateOptionConst.ISHASRIGHT, "true"); + option.setVariableValue(OperateOptionConst.ORM_SAVEOP_REMOVECACHE, "true"); + DynamicObject sh = BusinessDataServiceHelper.loadSingle(targetBillId, targetEntityNumber); + sh.set("createorg", shlc); + + + List ids = new ArrayList<>(); + ids.add((Long) targetBillId); + BaseDataServiceHelper.managePermChange(targetEntityNumber, ids, shlc.getLong("id")); + + DynamicObject bj = (DynamicObject) new CloneUtils(false, true).clone(sh); + bj.set("createorg", bjlc); + + SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create()); + + DynamicObject gz = (DynamicObject) new CloneUtils(false, true).clone(sh); + gz.set("createorg", gzlc); + + SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create()); + + + } + } + } + + /*Set dataIds = new HashSet(); + + long id = dynamicObject.getLong("id"); + dataIds.add(id); + String useOrgId = "100000"; +// String bd_ctrl_strategy = "2"; + String entityNumber = "bd_material"; + String appId = "basedata"; +// String assign_data = "id"; + Set orgIds = new HashSet(3); + //北上广的组织id + DynamicObject[] orgs = BusinessDataServiceHelper.load("bos_adminorg", "id", + new QFilter[]{new QFilter("number", QCP.in, new String[]{"SHLC", "BJLC", "GZLC"})}); + for (DynamicObject org : orgs) { + orgIds.add(org.getLong("id")); + } + + + BaseDataResponse response = (new AssignService(entityNumber)).assign(Long.valueOf(useOrgId), appId, dataIds, orgIds, true); + if (!response.isSuccess()) { + LCLogServiceImpl lcLogService = new LCLogServiceImpl(); + lcLogService.savelog("物料手动分配失败", "", true, false, "", response.getResult().toString()); + }*/ + } + } +}