dobe_comic8/main/java/shkd/repc/recon/formplugin/MaterialSaveCarryNumberPlug...

302 lines
14 KiB
Java
Raw Normal View History

package shkd.repc.recon.formplugin;
2025-04-25 07:44:28 +00:00
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.coderule.api.CodeRuleInfo;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
2025-04-25 07:44:28 +00:00
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");
//监听分录物料F7
BasedataEdit bEdit = this.getView().getControl("qeug_material");
bEdit.addAfterF7SelectListener(this);
}
@Override
public void beforeItemClick(BeforeItemClickEvent evt) {
super.beforeItemClick(evt);
String key = evt.getItemKey().toLowerCase();
2025-04-25 07:44:28 +00:00
String name = this.getModel().getDataEntityType().getName();
//合同非定额物料保存
if ("bar_save".equals(key)&&"recon_contractbill".equals(name)) {
2025-05-06 02:40:48 +00:00
this.carryMaterialNumber("qeug_orderformentry","qeug_material","qeug_materialnames");
2025-04-25 07:44:28 +00:00
}
//采购订单保存
else if ("save".equals(key)&&"repe_orderform".equals(name)){
2025-05-06 02:40:48 +00:00
this.carryMaterialNumber("orderformentry","material","qeug_materialnames");
2025-04-25 07:44:28 +00:00
}
//采购需求保存
else if ("qeug_baritemap".equals(key)&&"recon_settleplanbill".equals(name)){
2025-05-06 02:40:48 +00:00
this.carryMaterialNumber("qeug_cgxqentry","qeug_materialmasterid","qeug_materialname");
}
}
/**
* 携带物料编码
2025-04-25 07:44:28 +00:00
* @param entryLogotype 分录标识
2025-05-06 02:40:48 +00:00
* @param materialIdLogotype 物料ID标识
* @param materialNameLogotype 物料名称标识
*/
2025-05-06 02:40:48 +00:00
private void carryMaterialNumber(String entryLogotype,String materialIdLogotype,String materialNameLogotype) {
2025-04-25 07:44:28 +00:00
DynamicObjectCollection entryEntity = this.getModel().getEntryEntity(entryLogotype);
if (entryEntity != null && entryEntity.size() != 0) {
for (int i = 0; i < entryEntity.size(); i++) {
2025-05-06 02:40:48 +00:00
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){
2025-05-06 02:40:48 +00:00
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);
}
2025-05-06 02:40:48 +00:00
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});
}
2025-04-25 07:44:28 +00:00
/**
* 编码存在但是二开属性为空的字段自动带出数据
* @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);
}
}
}
}