package shkd.repc.recon.formplugin; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.coderule.api.CodeRuleInfo; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.datamodel.IBillModel; import kd.bos.entity.datamodel.IDataModel; import kd.bos.entity.datamodel.ListSelectedRowCollection; import kd.bos.form.control.events.BeforeItemClickEvent; import kd.bos.form.field.BasedataEdit; import kd.bos.form.field.events.AfterF7SelectEvent; import kd.bos.form.field.events.AfterF7SelectListener; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.coderule.CodeRuleServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.servicehelper.org.OrgUnitServiceHelper; import kd.sdk.plugin.Plugin; import java.util.EventObject; /** * 动态表单插件 * 带出物料编码 */ public class MaterialSaveCarryNumberPlugin extends AbstractBillPlugIn implements Plugin, AfterF7SelectListener { private static final String BOS_ORG = "bos_org";//组织实体 private static final String BD_MATERIAL = "bd_material";//物料实体 @Override public void registerListener(EventObject e) { super.registerListener(e); this.addItemClickListeners("tbmain"); String name = this.getModel().getDataEntityType().getName(); if (StringUtils.equals(name,"recon_contractbill")){ //监听分录物料F7-合同非定额物料 BasedataEdit bEdit = this.getView().getControl("qeug_material"); bEdit.addAfterF7SelectListener(this); }else if (StringUtils.equals(name,"repe_orderform")){ //监听分录物料F7-采购订单物料 BasedataEdit bEdit = this.getView().getControl("material"); bEdit.addAfterF7SelectListener(this); }else if (StringUtils.equals(name,"recon_settleplanbill")){ //监听分录物料F7-采购订单物料 BasedataEdit bEdit = this.getView().getControl("qeug_materialmasterid"); bEdit.addAfterF7SelectListener(this); } } @Override public void beforeItemClick(BeforeItemClickEvent evt) { super.beforeItemClick(evt); String key = evt.getItemKey().toLowerCase(); String name = this.getModel().getDataEntityType().getName(); //合同非定额物料保存 if ("bar_save".equals(key)&&"recon_contractbill".equals(name)) { this.carryMaterialNumber("qeug_orderformentry","qeug_material","qeug_materialnames"); } //采购订单保存 else if ("save".equals(key)&&"repe_orderform".equals(name)){ this.carryMaterialNumber("orderformentry","material","qeug_materialnames"); } //采购需求保存 else if ("qeug_baritemap".equals(key)&&"recon_settleplanbill".equals(name)){ this.carryMaterialNumber("qeug_cgxqentry","qeug_materialmasterid","qeug_materialname"); } } /** * 携带物料编码 * @param entryLogotype 分录标识 * @param materialIdLogotype 物料ID标识 * @param materialNameLogotype 物料名称标识 */ private void carryMaterialNumber(String entryLogotype,String materialIdLogotype,String materialNameLogotype) { DynamicObjectCollection entryEntity = this.getModel().getEntryEntity(entryLogotype); if (entryEntity != null && entryEntity.size() != 0) { for (int i = 0; i < entryEntity.size(); i++) { DynamicObject material = entryEntity.get(i).getDynamicObject(materialIdLogotype);//物料-基础资料 String type = entryEntity.get(i).getString("qeug_materialtypeid.name");//物料分类 String model = entryEntity.get(i).getString("qeug_importmodel");//规格型号 String unit = entryEntity.get(i).getString("qeug_importunit");//规格型号 String brand = entryEntity.get(i).getString("qeug_brand");//规格型号 String extModel = entryEntity.get(i).getString("qeug_model");//规格型号 Long id; if (material==null){ String name = entryEntity.get(i).getString(materialNameLogotype); if (name!=null&&!"".equals(name)){ //查询系统已有编码 id = this.getExitMaterialId(name,model); if (id==null){ //新增物料 id=this.addNewMaterial(name,type,model,unit,brand,extModel); } this.getModel().setValue(materialIdLogotype,id,i); } } } } } /** * 查询系统中有的物料id * @param materialName 名称 * @param materialModel 规格类型 * @return */ private Long getExitMaterialId(String materialName, String materialModel) { QFilter qFilter = new QFilter("name", QCP.equals, materialName); qFilter.and("modelnum",QCP.equals,materialModel); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("bd_material", qFilter.toArray()); if (dynamicObject!=null){ return dynamicObject.getLong("id"); } return null; } /** * 新增物料-带出id * @param name 名称 * @param type 分类 * @param model 规格型号 * @param unit 单位 * @param brand 品牌 * @param extModel 型号 * @return */ private Long addNewMaterial(String name, String type, String model, String unit, String brand, String extModel) { DynamicObject bd_material; Long id = null; try { bd_material = BusinessDataServiceHelper.newDynamicObject(BD_MATERIAL); //物料编码 DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("bd_material"); CodeRuleInfo codeRule = CodeRuleServiceHelper.getCodeRule(dynamicObject.getDataEntityType().getName(), dynamicObject, null); bd_material.set("number", CodeRuleServiceHelper.getNumber(codeRule, dynamicObject)); //物料名称 bd_material.set("name", name); //所属组织 long rootOrgId = OrgUnitServiceHelper.getRootOrgId(); DynamicObject org = BusinessDataServiceHelper.loadSingle(rootOrgId, BOS_ORG); if (null != org) { bd_material.set("createorg", org); } //物料单位 QFilter unitQFilter = new QFilter("name", QCP.equals, unit); DynamicObject measureUnits = BusinessDataServiceHelper.loadSingle("bd_measureunits", unitQFilter.toArray()); if (null != measureUnits) { bd_material.set("baseunit", measureUnits); } bd_material.set("modelnum", model);//规格 bd_material.set("materialtype", "1");//物料类型:物资 //业务属性 DynamicObjectCollection collection = bd_material.getDynamicObjectCollection("serviceattribute"); DynamicObject serviceAttribute = BusinessDataServiceHelper.loadSingle("bd_serviceattribute", (new QFilter("number", QCP.equals, "1001")).toArray()); if (serviceAttribute!=null){ DynamicObject dynamicObject1 = new DynamicObject(collection.getDynamicObjectType()); dynamicObject1.set("fbasedataId",serviceAttribute); collection.add(dynamicObject1); } bd_material.set("qeug_brand",brand);//品牌 bd_material.set("qeug_model",extModel);//型号 bd_material.set("enable", "1");//使用状态:可用 bd_material.set("status", "C");//数据状态:审核 bd_material.set("ctrlstrategy", "5");//控制策略:全局共享 bd_material.set("enablepur",true);//可采购 bd_material.set("enablesale",true);//可销售 bd_material.set("enableinv",true);//可库存 SaveServiceHelper.save(new DynamicObject[]{bd_material}); //物料分类映射 DynamicObject group = BusinessDataServiceHelper.loadSingle("bd_materialgroup", (new QFilter("name", QCP.equals, type)).toArray()); if (group==null) { //待分类 group = BusinessDataServiceHelper.loadSingle("bd_materialgroup", (new QFilter("number", QCP.equals, "waitgroup")).toArray()); } id = bd_material.getLong("id"); this.newMaterialType(id,group); } catch (Exception e) { this.getView().showMessage(e.getMessage()); } return id; } /** * 新增物料分类映射表数据 * @param materialId * @param group */ private void newMaterialType(Long materialId, DynamicObject group) { DynamicObject materialType = BusinessDataServiceHelper.newDynamicObject("bd_materialgroupdetail"); //分类标准 DynamicObject standard = BusinessDataServiceHelper.loadSingle("bd_materialgroupstandard", (new QFilter("number", QCP.equals, "JBFLBZ")).toArray()); materialType.set("standard",standard); materialType.set("group",group); //物料 materialType.set("material",materialId); SaveServiceHelper.save(new DynamicObject[]{materialType}); } /** * 编码存在,但是二开属性为空的字段自动带出数据 * @param e */ @Override public void afterLoadData(EventObject e) { super.afterLoadData(e); IBillModel model = (IBillModel) this.getModel(); Object pkValue = model.getPKValue(); String name = this.getModel().getDataEntityType().getName(); if ("recon_contractbill".equals(name)){ this.carryMaterialAttribute(pkValue,name,"qeug_orderformentry","qeug_material","qeug_materialnames"); }else if ("repe_orderform".equals(name)){ this.carryMaterialAttribute(pkValue,name,"orderformentry","material","qeug_materialnames"); } } private void carryMaterialAttribute(Object pkValue,String name,String entryLogotype,String materialLogotype,String materialNameLgt){ DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(pkValue, name); if (dynamicObject!=null){ DynamicObjectCollection collection = dynamicObject.getDynamicObjectCollection(entryLogotype); if (collection!=null&&collection.size()!=0){ for (DynamicObject entry : collection) { DynamicObject material = entry.getDynamicObject(materialLogotype); if (material!=null){ DynamicObject queryMaterial = BusinessDataServiceHelper.loadSingle(material.getPkValue(), "bd_material"); if (queryMaterial!=null){ //物料名称 String materialName = entry.getString(materialNameLgt); if (StringUtils.isEmpty(materialName)){ String queryName = queryMaterial.getString("name"); if (StringUtils.isNotEmpty(queryName)){ entry.set(materialNameLgt,queryName); } } //物料分类 String materialType = entry.getString("qeug_importmaterialtype"); if (StringUtils.isEmpty(materialType)){ String queryType = queryMaterial.getString("group.name"); if (StringUtils.isNotEmpty(queryType)){ entry.set("qeug_importmaterialtype",queryType); } } //物料规格 String materialModel = entry.getString("qeug_importmodel"); if (StringUtils.isEmpty(materialModel)){ String queryModel = queryMaterial.getString("modelnum"); if (StringUtils.isNotEmpty(queryModel)){ entry.set("qeug_importmodel",queryModel); } } //物料单位 String materialUnit= entry.getString("qeug_importunit"); if (StringUtils.isEmpty(materialUnit)){ String queryUnit = queryMaterial.getString("baseunit.name"); if (StringUtils.isNotEmpty(queryUnit)){ entry.set("qeug_importunit",queryUnit); } } //物料品牌 String materialBrand= entry.getString("qeug_brand"); if (StringUtils.isEmpty(materialBrand)){ String queryBrand = queryMaterial.getString("qeug_brand"); if (StringUtils.isNotEmpty(queryBrand)){ entry.set("qeug_brand",queryBrand); } } //物料型号 String materialExtModel= entry.getString("qeug_model"); if (StringUtils.isEmpty(materialExtModel)){ String queryExtModel = queryMaterial.getString("qeug_model"); if (StringUtils.isNotEmpty(queryExtModel)){ entry.set("qeug_model",queryExtModel); } } } } } } } SaveServiceHelper.update(dynamicObject); } /** * 选完物料后带出当前行的物料类型基础资料 * @param afterF7SelectEvent */ @Override public void afterF7Select(AfterF7SelectEvent afterF7SelectEvent) { //获取当前选中行号 int currentRowIndex = afterF7SelectEvent.getCurrentRowIndex(); //所选数据 ListSelectedRowCollection listSelectedRowCollection = afterF7SelectEvent.getListSelectedRowCollection(); Object[] primaryKeyValues = listSelectedRowCollection.getPrimaryKeyValues(); //物料id Object primaryKeyValue = primaryKeyValues[0]; //获取映射表 DynamicObject groupStandard = BusinessDataServiceHelper.loadSingle("bd_materialgroupdetail", new QFilter("material.id", QCP.equals, primaryKeyValue).toArray()); if (groupStandard != null) { DynamicObject group = groupStandard.getDynamicObject("group"); if (group != null) { this.getModel().setValue("qeug_materialtypeid", group, currentRowIndex); this.getView().updateView("qeug_materialtypeid", currentRowIndex); } } } }