非定额物料分类改为基础资料F7

This commit is contained in:
李贵强 2025-05-08 14:47:44 +08:00
parent 4dd746909a
commit 7057e05c1f
2 changed files with 85 additions and 59 deletions

View File

@ -33,16 +33,17 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
private static final String BD_MATERIAL = "bd_material";//物料实体 private static final String BD_MATERIAL = "bd_material";//物料实体
private static final Set<ImportMaterial> materialList=new HashSet<>(); private static final Set<ImportMaterial> materialList = new HashSet<>();
//TODO: 生成物料逻辑迁移到导入过程中,获取excel行 //TODO: 生成物料逻辑迁移到导入过程中,获取excel行
@Override @Override
public void queryImportBasedata(QueryImportBasedataEventArgs e) { public void queryImportBasedata(QueryImportBasedataEventArgs e) {
super.queryImportBasedata(e); super.queryImportBasedata(e);
DynamicObject targetObj = ((RowMapper) e.getSource()).getTargetObj(); DynamicObject targetObj = ((RowMapper) e.getSource()).getTargetObj();
IDataEntityType dataEntityType = targetObj.getDataEntityType(); IDataEntityType dataEntityType = targetObj.getDataEntityType();
if (null!=dataEntityType){ if (null != dataEntityType) {
String name = dataEntityType.getName(); String name = dataEntityType.getName();
if (StringUtils.equals("qeug_orderformentry",name)){ if (StringUtils.equals("qeug_orderformentry", name)) {
Map<BasedataItem, List<Object>> searchResult = e.getSearchResult(); Map<BasedataItem, List<Object>> searchResult = e.getSearchResult();
for (Map.Entry<BasedataItem, List<Object>> entry : searchResult.entrySet()) { for (Map.Entry<BasedataItem, List<Object>> entry : searchResult.entrySet()) {
List<Object> basedata = entry.getValue(); List<Object> basedata = entry.getValue();
@ -50,8 +51,8 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
if (basedata.isEmpty()) { if (basedata.isEmpty()) {
String entityNumber = entry.getKey().getEntityNumber(); String entityNumber = entry.getKey().getEntityNumber();
//只针对物料 //只针对物料
if ("bd_material".equals(entityNumber)){ if ("bd_material".equals(entityNumber)) {
Long materialId = newMaterial(entry.getKey().getSearchValue(),materialList); Long materialId = newMaterial(entry.getKey().getSearchValue(), materialList);
basedata.add(materialId); basedata.add(materialId);
} }
} else { } else {
@ -67,7 +68,8 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
} }
} }
} }
private Long newMaterial(String number,Set<ImportMaterial> set){
private Long newMaterial(String number, Set<ImportMaterial> set) {
DynamicObject bd_material = null; DynamicObject bd_material = null;
Long id = null; Long id = null;
try { try {
@ -94,53 +96,53 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
//业务属性 //业务属性
DynamicObjectCollection collection = bd_material.getDynamicObjectCollection("serviceattribute"); DynamicObjectCollection collection = bd_material.getDynamicObjectCollection("serviceattribute");
DynamicObject serviceAttribute = BusinessDataServiceHelper.loadSingle("bd_serviceattribute", (new QFilter("number", QCP.equals, "1001")).toArray()); 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 dynamicObject = new DynamicObject(collection.getDynamicObjectType());
dynamicObject.set("fbasedataId",serviceAttribute); dynamicObject.set("fbasedataId", serviceAttribute);
collection.add(dynamicObject); collection.add(dynamicObject);
} }
bd_material.set("qeug_brand",materialByNumber.getMaterialBrand());//品牌 bd_material.set("qeug_brand", materialByNumber.getMaterialBrand());//品牌
bd_material.set("qeug_model",materialByNumber.getMaterialExtModel());//型号 bd_material.set("qeug_model", materialByNumber.getMaterialExtModel());//型号
bd_material.set("enable", "1");//使用状态:可用 bd_material.set("enable", "1");//使用状态:可用
bd_material.set("status", "C");//数据状态:审核 bd_material.set("status", "C");//数据状态:审核
bd_material.set("ctrlstrategy", "5");//控制策略:全局共享 bd_material.set("ctrlstrategy", "5");//控制策略:全局共享
bd_material.set("enablepur",true);//可采购 bd_material.set("enablepur", true);//可采购
bd_material.set("enablesale",true);//可销售 bd_material.set("enablesale", true);//可销售
bd_material.set("enableinv",true);//可库存 bd_material.set("enableinv", true);//可库存
SaveServiceHelper.save(new DynamicObject[]{bd_material}); SaveServiceHelper.save(new DynamicObject[]{bd_material});
//物料分类映射 //物料分类映射
DynamicObject group = BusinessDataServiceHelper.loadSingle("bd_materialgroup", (new QFilter("name", QCP.equals, materialByNumber.getMaterialType())).toArray()); 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"); id = bd_material.getLong("id");
this.newMaterialType(id,group); this.newMaterialType(id, group);
} catch (Exception e) { } catch (Exception e) {
this.getView().showMessage(e.getMessage()); this.getView().showMessage(e.getMessage());
} }
return id; return id;
} }
private String checkMaterial(String materialName, String materialModel) { private String checkMaterial(String materialName, String materialModel) {
QFilter qFilter = new QFilter("name", QCP.equals, materialName); 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()); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("bd_material", qFilter.toArray());
if (dynamicObject!=null){ if (dynamicObject != null) {
return dynamicObject.getString("number"); return dynamicObject.getString("number");
} }
return null; return null;
} }
private void newMaterialType(Long materialId,DynamicObject group){ private void newMaterialType(Long materialId, DynamicObject group) {
DynamicObject materialType = BusinessDataServiceHelper.newDynamicObject("bd_materialgroupdetail"); DynamicObject materialType = BusinessDataServiceHelper.newDynamicObject("bd_materialgroupdetail");
//分类标准 //分类标准
DynamicObject standard = BusinessDataServiceHelper.loadSingle("bd_materialgroupstandard", (new QFilter("number", QCP.equals, "JBFLBZ")).toArray()); DynamicObject standard = BusinessDataServiceHelper.loadSingle("bd_materialgroupstandard", (new QFilter("number", QCP.equals, "JBFLBZ")).toArray());
materialType.set("standard",standard); materialType.set("standard", standard);
materialType.set("group",group); materialType.set("group", group);
//物料 //物料
materialType.set("material",materialId); materialType.set("material", materialId);
SaveServiceHelper.save(new DynamicObject[]{materialType}); SaveServiceHelper.save(new DynamicObject[]{materialType});
} }
@ -156,14 +158,15 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
} }
materialList.clear(); materialList.clear();
Set<String> existCodes = new HashSet<>(); Set<String> existComb = new HashSet<>();
// 获取已存在的物料编码 // 获取已存在的物料名称+规格组合
DynamicObjectCollection orderFormEntry = (DynamicObjectCollection) this.getModel().getValue("qeug_orderformentry"); DynamicObjectCollection orderFormEntry = (DynamicObjectCollection) this.getModel().getValue("qeug_orderformentry");
if (orderFormEntry != null && !orderFormEntry.isEmpty()) { if (orderFormEntry != null && !orderFormEntry.isEmpty()) {
for (DynamicObject dynamicObject : orderFormEntry) { for (DynamicObject dynamicObject : orderFormEntry) {
String number = dynamicObject.getString("qeug_material.number"); String name = dynamicObject.getString("qeug_materialnames");
existCodes.add(number); 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(); JSONObject data = importData.getData();
Map<String, Object> map = data.toJavaObject(Map.class); Map<String, Object> map = data.toJavaObject(Map.class);
JSONObject material = (JSONObject) map.get("qeug_material");//物料编码 JSONObject material = (JSONObject) map.get("qeug_material");//物料编码
String number=null; String number = null;
ImportMaterial importMaterial = new ImportMaterial(); ImportMaterial importMaterial = new ImportMaterial();
// 如果 material 为空 // 如果 material 为空
if (material == null) { if (material == null) {
//TODO:判断物料是否已在系统 //TODO:判断物料是否已在系统
number= this.checkMaterial((String) map.get("qeug_materialnames"),(String) map.get("qeug_importmodel")); number = this.checkMaterial((String) map.get("qeug_materialnames"), (String) map.get("qeug_importmodel"));
if (number==null){ if (number == null) {
DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("bd_material"); DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("bd_material");
CodeRuleInfo codeRule = CodeRuleServiceHelper.getCodeRule(dynamicObject.getDataEntityType().getName(), CodeRuleInfo codeRule = CodeRuleServiceHelper.getCodeRule(dynamicObject.getDataEntityType().getName(),
dynamicObject, null); dynamicObject, null);
@ -200,12 +203,14 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
importMaterial.setMaterialNumber(material.getString("number")); importMaterial.setMaterialNumber(material.getString("number"));
} }
//物料类型校验 //物料类型校验
String impMaterialType = (String) map.get("qeug_importmaterialtype"); String typeName="待分类";
if (!validMaterialTypes.contains(impMaterialType)) { JSONObject materialType = (JSONObject) map.get("qeug_materialtypeid");//物料分类
map.replace("qeug_importmaterialtype", "待分类"); if (materialType!=null && validMaterialTypes.contains(materialType.getString("name"))){
typeName = materialType.getString("name");
} }
importMaterial.setMaterialName((String) map.get("qeug_materialnames")); 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.setMaterialModel((String) map.get("qeug_importmodel"));
importMaterial.setMaterialUnit((String) map.get("qeug_importunit")); importMaterial.setMaterialUnit((String) map.get("qeug_importunit"));
importMaterial.setMaterialBrand((String) map.get("qeug_brand")); importMaterial.setMaterialBrand((String) map.get("qeug_brand"));
@ -223,7 +228,7 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
} }
// 进行校验 // 进行校验
Map<Integer, String> indexVsMsgMap = validateEntry(entryEntityImportDataList, existCodes); Map<Integer, String> indexVsMsgMap = validateEntry(entryEntityImportDataList, existComb);
Set<Integer> indexSet = indexVsMsgMap.keySet(); Set<Integer> indexSet = indexVsMsgMap.keySet();
Map<String, List<Object>> logMap = e.getEntryDataMap(); Map<String, List<Object>> logMap = e.getEntryDataMap();
ImportLogger importLogger = (ImportLogger) logMap.get(entryName).get(0); ImportLogger importLogger = (ImportLogger) logMap.get(entryName).get(0);
@ -255,12 +260,11 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
/** /**
* 校验物料名称物料单位 * 校验物料名称物料单位
* @param entryDataList * @param entryDataList
* @param existingMaterialCodes * @param existComb
* @return * @return
*/ */
private Map<Integer, String> validateEntry(List<ImportEntryData> entryDataList,Set<String> existingMaterialCodes) { private Map<Integer, String> validateEntry(List<ImportEntryData> entryDataList,Set<String> existComb) {
Map<Integer, String> indexVsMsgMap = new HashMap<>(); Map<Integer, String> indexVsMsgMap = new HashMap<>();
// Set<String> encounteredMaterialCodes = new HashSet<>(); // 用于记录当前批次中的物料编码
for (int i = 0; i < entryDataList.size(); i++) { for (int i = 0; i < entryDataList.size(); i++) {
ImportEntryData entryData = entryDataList.get(i); ImportEntryData entryData = entryDataList.get(i);
@ -268,33 +272,23 @@ public class ContractMaterialImportPlugin extends AbstractFormPlugin {
// 获取当前行的 JSONObject 数据 // 获取当前行的 JSONObject 数据
JSONObject data = entryData.getData(); JSONObject data = entryData.getData();
Map<String, Object> map = data.toJavaObject(Map.class); Map<String, Object> map = data.toJavaObject(Map.class);
//JSONObject material = (JSONObject) map.get("qeug_material");
// 获取物料编码和物料单位
//String materialCode = material.getString("number"); // 物料编码
String materialUnit = (String) map.get("qeug_importunit"); // 物料单位 String materialUnit = (String) map.get("qeug_importunit"); // 物料单位
// 获取当前行号 // 获取当前行号
Integer rowNum = (Integer) entryData.getData().get("rowNum"); Integer rowNum = (Integer) entryData.getData().get("rowNum");
// 校验物料编码和物料单位 //校验物料单位
// if (materialCode == null || materialCode.trim().isEmpty()) {
// indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料编码不能为空或空字符串");
// }
if (materialUnit == null || materialUnit.trim().isEmpty()) { if (materialUnit == null || materialUnit.trim().isEmpty()) {
indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料单位不能为空或空字符串"); indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料单位不能为空或空字符串");
} }
// 校验物料编码是否重复 String name = (String) map.get("qeug_materialnames"); // 物料单位
// if (encounteredMaterialCodes.contains(materialCode)) { String model = (String) map.get("qeug_importmodel"); // 物料单位
// indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料编码重复");
// } else { // 校验物料编码是否已经存在于当前页面的表格中
// encounteredMaterialCodes.add(materialCode); if (existComb.contains(name.trim()+model.trim())) {
// } indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料+规格已存在,请勿重复导入");
// }
// // 校验物料编码是否已经存在于当前页面的表格中
// if (existingMaterialCodes.contains(materialCode)) {
// indexVsMsgMap.put(rowNum, "" + (i + 1) + "行:物料编码已存在,不能重复");
// }
} }
return indexVsMsgMap; return indexVsMsgMap;

View File

@ -7,7 +7,11 @@ import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.utils.StringUtils; import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.datamodel.IBillModel; import kd.bos.entity.datamodel.IBillModel;
import kd.bos.entity.datamodel.IDataModel; import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.form.control.events.BeforeItemClickEvent; 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.QCP;
import kd.bos.orm.query.QFilter; import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper; 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";//组织实体 private static final String BOS_ORG = "bos_org";//组织实体
@ -32,6 +36,9 @@ public class MaterialSaveCarryNumberPlugin extends AbstractBillPlugIn implements
public void registerListener(EventObject e) { public void registerListener(EventObject e) {
super.registerListener(e); super.registerListener(e);
this.addItemClickListeners("tbmain"); this.addItemClickListeners("tbmain");
//监听分录物料F7
BasedataEdit bEdit = this.getView().getControl("qeug_material");
bEdit.addAfterF7SelectListener(this);
} }
@Override @Override
@ -65,7 +72,7 @@ public class MaterialSaveCarryNumberPlugin extends AbstractBillPlugIn implements
if (entryEntity != null && entryEntity.size() != 0) { if (entryEntity != null && entryEntity.size() != 0) {
for (int i = 0; i < entryEntity.size(); i++) { for (int i = 0; i < entryEntity.size(); i++) {
DynamicObject material = entryEntity.get(i).getDynamicObject(materialIdLogotype);//物料-基础资料 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 model = entryEntity.get(i).getString("qeug_importmodel");//规格型号
String unit = entryEntity.get(i).getString("qeug_importunit");//规格型号 String unit = entryEntity.get(i).getString("qeug_importunit");//规格型号
String brand = entryEntity.get(i).getString("qeug_brand");//规格型号 String brand = entryEntity.get(i).getString("qeug_brand");//规格型号
@ -267,4 +274,29 @@ public class MaterialSaveCarryNumberPlugin extends AbstractBillPlugIn implements
} }
SaveServiceHelper.update(dynamicObject); 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);
}
}
}
} }