From 7057e05c1f8939549417bc981ee5cc2c38c88030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=B4=B5=E5=BC=BA?= Date: Thu, 8 May 2025 14:47:44 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=9E=E5=AE=9A=E9=A2=9D=E7=89=A9=E6=96=99?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E6=94=B9=E4=B8=BA=E5=9F=BA=E7=A1=80=E8=B5=84?= =?UTF-8?q?=E6=96=99F7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ContractMaterialImportPlugin.java | 108 +++++++++--------- .../MaterialSaveCarryNumberPlugin.java | 36 +++++- 2 files changed, 85 insertions(+), 59 deletions(-) diff --git a/main/java/shkd/repc/recon/formplugin/ContractMaterialImportPlugin.java b/main/java/shkd/repc/recon/formplugin/ContractMaterialImportPlugin.java index 3fc52a9..0a53722 100644 --- a/main/java/shkd/repc/recon/formplugin/ContractMaterialImportPlugin.java +++ b/main/java/shkd/repc/recon/formplugin/ContractMaterialImportPlugin.java @@ -27,22 +27,23 @@ import java.util.*; /** * 合同表单插件-合同非定额物料导入 */ -public class ContractMaterialImportPlugin extends AbstractFormPlugin { +public class ContractMaterialImportPlugin extends AbstractFormPlugin { private static final String BOS_ORG = "bos_org";//组织实体 private static final String BD_MATERIAL = "bd_material";//物料实体 - private static final Set materialList=new HashSet<>(); + private static final Set materialList = new HashSet<>(); + //TODO: 生成物料逻辑迁移到导入过程中,获取excel行 @Override public void queryImportBasedata(QueryImportBasedataEventArgs e) { super.queryImportBasedata(e); DynamicObject targetObj = ((RowMapper) e.getSource()).getTargetObj(); IDataEntityType dataEntityType = targetObj.getDataEntityType(); - if (null!=dataEntityType){ + if (null != dataEntityType) { String name = dataEntityType.getName(); - if (StringUtils.equals("qeug_orderformentry",name)){ + if (StringUtils.equals("qeug_orderformentry", name)) { Map> searchResult = e.getSearchResult(); for (Map.Entry> entry : searchResult.entrySet()) { List basedata = entry.getValue(); @@ -50,8 +51,8 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin { if (basedata.isEmpty()) { String entityNumber = entry.getKey().getEntityNumber(); //只针对物料 - if ("bd_material".equals(entityNumber)){ - Long materialId = newMaterial(entry.getKey().getSearchValue(),materialList); + if ("bd_material".equals(entityNumber)) { + Long materialId = newMaterial(entry.getKey().getSearchValue(), materialList); basedata.add(materialId); } } else { @@ -67,7 +68,8 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin { } } } - private Long newMaterial(String number,Set set){ + + private Long newMaterial(String number, Set set) { DynamicObject bd_material = null; Long id = null; try { @@ -94,53 +96,53 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin { //业务属性 DynamicObjectCollection collection = bd_material.getDynamicObjectCollection("serviceattribute"); DynamicObject serviceAttribute = BusinessDataServiceHelper.loadSingle("bd_serviceattribute", (new QFilter("number", QCP.equals, "1001")).toArray()); - if (serviceAttribute!=null){ + if (serviceAttribute != null) { DynamicObject dynamicObject = new DynamicObject(collection.getDynamicObjectType()); - dynamicObject.set("fbasedataId",serviceAttribute); + dynamicObject.set("fbasedataId", serviceAttribute); collection.add(dynamicObject); } - bd_material.set("qeug_brand",materialByNumber.getMaterialBrand());//品牌 - bd_material.set("qeug_model",materialByNumber.getMaterialExtModel());//型号 + bd_material.set("qeug_brand", materialByNumber.getMaterialBrand());//品牌 + bd_material.set("qeug_model", materialByNumber.getMaterialExtModel());//型号 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);//可库存 + 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, materialByNumber.getMaterialType())).toArray()); - if (group==null) { + if (group == null) { //待分类 - group = BusinessDataServiceHelper.loadSingle("bd_materialgroup", (new QFilter("number", QCP.equals, "waitgroup")).toArray()); + group = BusinessDataServiceHelper.loadSingle("bd_materialgroup", (new QFilter("number", QCP.equals, "waitgroup")).toArray()); } id = bd_material.getLong("id"); - this.newMaterialType(id,group); + this.newMaterialType(id, group); } catch (Exception e) { this.getView().showMessage(e.getMessage()); } return id; -} + } private String checkMaterial(String materialName, String materialModel) { QFilter qFilter = new QFilter("name", QCP.equals, materialName); - qFilter.and("modelnum",QCP.equals,materialModel); + qFilter.and("modelnum", QCP.equals, materialModel); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("bd_material", qFilter.toArray()); - if (dynamicObject!=null){ + if (dynamicObject != null) { return dynamicObject.getString("number"); } return null; } - private void newMaterialType(Long materialId,DynamicObject 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("standard", standard); + materialType.set("group", group); //物料 - materialType.set("material",materialId); + materialType.set("material", materialId); SaveServiceHelper.save(new DynamicObject[]{materialType}); } @@ -156,14 +158,15 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin { } materialList.clear(); - Set existCodes = new HashSet<>(); + Set existComb = new HashSet<>(); - // 获取已存在的物料编码 + // 获取已存在的物料名称+规格组合 DynamicObjectCollection orderFormEntry = (DynamicObjectCollection) this.getModel().getValue("qeug_orderformentry"); if (orderFormEntry != null && !orderFormEntry.isEmpty()) { for (DynamicObject dynamicObject : orderFormEntry) { - String number = dynamicObject.getString("qeug_material.number"); - existCodes.add(number); + String name = dynamicObject.getString("qeug_materialnames"); + String model = dynamicObject.getString("qeug_importmodel"); + existComb.add(name.trim()+model.trim()); } } @@ -177,14 +180,14 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin { JSONObject data = importData.getData(); Map map = data.toJavaObject(Map.class); JSONObject material = (JSONObject) map.get("qeug_material");//物料编码 - String number=null; + String number = null; ImportMaterial importMaterial = new ImportMaterial(); // 如果 material 为空 if (material == null) { //TODO:判断物料是否已在系统 - number= this.checkMaterial((String) map.get("qeug_materialnames"),(String) map.get("qeug_importmodel")); - if (number==null){ + number = this.checkMaterial((String) map.get("qeug_materialnames"), (String) map.get("qeug_importmodel")); + if (number == null) { DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("bd_material"); CodeRuleInfo codeRule = CodeRuleServiceHelper.getCodeRule(dynamicObject.getDataEntityType().getName(), dynamicObject, null); @@ -200,12 +203,14 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin { importMaterial.setMaterialNumber(material.getString("number")); } //物料类型校验 - String impMaterialType = (String) map.get("qeug_importmaterialtype"); - if (!validMaterialTypes.contains(impMaterialType)) { - map.replace("qeug_importmaterialtype", "待分类"); + String typeName="待分类"; + JSONObject materialType = (JSONObject) map.get("qeug_materialtypeid");//物料分类 + if (materialType!=null && validMaterialTypes.contains(materialType.getString("name"))){ + typeName = materialType.getString("name"); + } importMaterial.setMaterialName((String) map.get("qeug_materialnames")); - importMaterial.setMaterialType((String) map.get("qeug_importmaterialtype")); + importMaterial.setMaterialType(typeName); importMaterial.setMaterialModel((String) map.get("qeug_importmodel")); importMaterial.setMaterialUnit((String) map.get("qeug_importunit")); importMaterial.setMaterialBrand((String) map.get("qeug_brand")); @@ -223,7 +228,7 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin { } // 进行校验 - Map indexVsMsgMap = validateEntry(entryEntityImportDataList, existCodes); + Map indexVsMsgMap = validateEntry(entryEntityImportDataList, existComb); Set indexSet = indexVsMsgMap.keySet(); Map> logMap = e.getEntryDataMap(); ImportLogger importLogger = (ImportLogger) logMap.get(entryName).get(0); @@ -255,12 +260,11 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin { /** * 校验物料名称、物料单位 * @param entryDataList - * @param existingMaterialCodes + * @param existComb * @return */ - private Map validateEntry(List entryDataList,Set existingMaterialCodes) { + private Map validateEntry(List entryDataList,Set existComb) { Map indexVsMsgMap = new HashMap<>(); -// Set encounteredMaterialCodes = new HashSet<>(); // 用于记录当前批次中的物料编码 for (int i = 0; i < entryDataList.size(); i++) { ImportEntryData entryData = entryDataList.get(i); @@ -268,33 +272,23 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin { // 获取当前行的 JSONObject 数据 JSONObject data = entryData.getData(); Map map = data.toJavaObject(Map.class); - //JSONObject material = (JSONObject) map.get("qeug_material"); - // 获取物料编码和物料单位 - //String materialCode = material.getString("number"); // 物料编码 String materialUnit = (String) map.get("qeug_importunit"); // 物料单位 // 获取当前行号 Integer rowNum = (Integer) entryData.getData().get("rowNum"); - // 校验物料编码和物料单位 -// if (materialCode == null || materialCode.trim().isEmpty()) { -// indexVsMsgMap.put(rowNum, "第" + (i + 1) + "行:物料编码不能为空或空字符串"); -// } + //校验物料单位 if (materialUnit == null || materialUnit.trim().isEmpty()) { indexVsMsgMap.put(rowNum, "第" + (i + 1) + "行:物料单位不能为空或空字符串"); } - // 校验物料编码是否重复 -// if (encounteredMaterialCodes.contains(materialCode)) { -// indexVsMsgMap.put(rowNum, "第" + (i + 1) + "行:物料编码重复"); -// } else { -// encounteredMaterialCodes.add(materialCode); -// } -// -// // 校验物料编码是否已经存在于当前页面的表格中 -// if (existingMaterialCodes.contains(materialCode)) { -// indexVsMsgMap.put(rowNum, "第" + (i + 1) + "行:物料编码已存在,不能重复"); -// } + String name = (String) map.get("qeug_materialnames"); // 物料单位 + String model = (String) map.get("qeug_importmodel"); // 物料单位 + + // 校验物料编码是否已经存在于当前页面的表格中 + if (existComb.contains(name.trim()+model.trim())) { + indexVsMsgMap.put(rowNum, "第" + (i + 1) + "行:物料+规格已存在,请勿重复导入"); + } } return indexVsMsgMap; diff --git a/main/java/shkd/repc/recon/formplugin/MaterialSaveCarryNumberPlugin.java b/main/java/shkd/repc/recon/formplugin/MaterialSaveCarryNumberPlugin.java index 091b7d6..0244169 100644 --- a/main/java/shkd/repc/recon/formplugin/MaterialSaveCarryNumberPlugin.java +++ b/main/java/shkd/repc/recon/formplugin/MaterialSaveCarryNumberPlugin.java @@ -7,7 +7,11 @@ 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; @@ -22,7 +26,7 @@ import java.util.EventObject; * 动态表单插件 * 带出物料编码 */ -public class MaterialSaveCarryNumberPlugin extends AbstractBillPlugIn implements Plugin { +public class MaterialSaveCarryNumberPlugin extends AbstractBillPlugIn implements Plugin, AfterF7SelectListener { private static final String BOS_ORG = "bos_org";//组织实体 @@ -32,6 +36,9 @@ public class MaterialSaveCarryNumberPlugin extends AbstractBillPlugIn implements public void registerListener(EventObject e) { super.registerListener(e); this.addItemClickListeners("tbmain"); + //监听分录物料F7 + BasedataEdit bEdit = this.getView().getControl("qeug_material"); + bEdit.addAfterF7SelectListener(this); } @Override @@ -65,7 +72,7 @@ public class MaterialSaveCarryNumberPlugin extends AbstractBillPlugIn implements 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_importmaterialtype");//物料分类 + 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");//规格型号 @@ -267,4 +274,29 @@ public class MaterialSaveCarryNumberPlugin extends AbstractBillPlugIn implements } 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); + } + } + } } \ No newline at end of file