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.operate.result.OperationResult; 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.OperationServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.util.StringUtils; 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"); String tqq9_srcnumber = dynamicObject.getString("tqq9_srcnumber"); if (StringUtils.isNotEmpty(tqq9_srcnumber)) { return; } 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")}); generateMaterialInfo(targetEntityNumber, targetBillIds, success, bjlc, gzlc, shlc); targetEntityNumber = "bd_materialpurchaseinfo";//物料采购信息 //目标单标识 pushArgs.setTargetEntityNumber(targetEntityNumber); ruleId = "2350906360427737088"; //传入转换规则id pushArgs.setRuleId(ruleId); //执行下推 result = ConvertServiceHelper.pushAndSave(pushArgs); //获取下推目标单id targetBillIds = result.getTargetBillIds(); success = result.isSuccess(); generateMaterialInfo(targetEntityNumber, targetBillIds, success, bjlc, gzlc, shlc); ruleId = "2352406985778951168"; targetEntityNumber = "bd_materialsalinfo";//物料销售信息 //目标单标识 pushArgs.setTargetEntityNumber(targetEntityNumber); //传入转换规则id pushArgs.setRuleId(ruleId); //执行下推 result = ConvertServiceHelper.pushAndSave(pushArgs); //获取下推目标单id targetBillIds = result.getTargetBillIds(); success = result.isSuccess(); generateMaterialInfo(targetEntityNumber, targetBillIds, success, bjlc, gzlc, shlc); ruleId = "2352399204346786816"; targetEntityNumber = "bd_materialcalinfo";//物料核算信息 //目标单标识 pushArgs.setTargetEntityNumber(targetEntityNumber); //传入转换规则id pushArgs.setRuleId(ruleId); //执行下推 result = ConvertServiceHelper.pushAndSave(pushArgs); //获取下推目标单id targetBillIds = result.getTargetBillIds(); success = result.isSuccess(); generateMaterialInfo(targetEntityNumber, targetBillIds, success, bjlc, gzlc, shlc); /*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()); }*/ } } /** * 生成对应的物料业务信息(库存、采购、销售) * * @param targetEntityNumber 目标单据标识 * @param targetBillIds 下推成功的目标单据id * @param success 是否下推成功 * @param bjlc 北京组织 * @param gzlc 广州组织 * @param shlc 上海组织 */ private void generateMaterialInfo(String targetEntityNumber, Set targetBillIds, boolean success, DynamicObject bjlc, DynamicObject gzlc, DynamicObject 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); sh.set("srccreateorg", 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); DynamicObject gz = (DynamicObject) new CloneUtils(false, true).clone(sh); OperationResult submitResult = OperationServiceHelper.executeOperate("submit", targetEntityNumber, new DynamicObject[]{sh}, OperateOption.create()); if (submitResult.isSuccess()) { OperationResult auditResult = OperationServiceHelper.executeOperate("audit", targetEntityNumber, new DynamicObject[]{sh}, OperateOption.create()); } bj.set("createorg", bjlc); bj.set("srccreateorg", bjlc); SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create()); bj.set("mbdmasterid", bj.getLong("id")); SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create()); submitResult = OperationServiceHelper.executeOperate("submit", targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create()); if (submitResult.isSuccess()) { OperationResult auditResult = OperationServiceHelper.executeOperate("audit", targetEntityNumber, new DynamicObject[]{bj}, OperateOption.create()); } gz.set("createorg", gzlc); gz.set("srccreateorg", gzlc); SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create()); gz.set("mbdmasterid", gz.getLong("id")); SaveServiceHelper.saveOperate(targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create()); submitResult = OperationServiceHelper.executeOperate("submit", targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create()); if (submitResult.isSuccess()) { OperationResult auditResult = OperationServiceHelper.executeOperate("audit", targetEntityNumber, new DynamicObject[]{gz}, OperateOption.create()); } } } } } }