package tqq9.lc123.cloud.app.plugin.form.sys; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.LocaleString; import kd.bos.dataentity.metadata.IDataEntityProperty; import kd.bos.dataentity.metadata.dynamicobject.DynamicProperty; import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.datamodel.ListSelectedRow; import kd.bos.entity.datamodel.ListSelectedRowCollection; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.entity.operate.result.OperationResult; import kd.bos.entity.property.MulBasedataProp; import kd.bos.form.control.events.BeforeClickEvent; import kd.bos.form.control.events.BeforeItemClickEvent; import kd.bos.form.events.AfterDoOperationEventArgs; import kd.bos.form.events.BeforeDoOperationEventArgs; import kd.bos.form.operate.FormOperate; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.MetadataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import java.math.BigDecimal; import java.util.Date; import java.util.EventObject; import java.util.LinkedHashMap; import java.util.List; /** * 物料界面插件 */ public class MaterialBillPlugin extends AbstractBillPlugIn { @Override public void beforeItemClick(BeforeItemClickEvent evt) { super.beforeItemClick(evt); String itemKey = evt.getItemKey(); if("tqq9_copyandchange".equals(itemKey)){ String number = (String) this.getModel().getValue("number"); String tqq9_srcnumber = (String) this.getModel().getValue("tqq9_srcnumber"); String status = (String) this.getModel().getValue("status"); if(!"C".equals(status)){ evt.setCancel(true); this.getView().showTipNotification("当前物料不是已审核状态,不允许复制变更!"); }else { QFilter f = new QFilter("tqq9_srcnumber", "=", number); DynamicObject[] materialArr = BusinessDataServiceHelper.load("bd_material", "id", new QFilter[]{f}); if (materialArr != null && materialArr.length > 0){ this.getView().showTipNotification("当前物料已经存在变更信息,不允许复制变更!"); evt.setCancel(true); }else { if(org.apache.commons.lang3.StringUtils.isNotBlank(tqq9_srcnumber)){ this.getView().showTipNotification("当前物料为其他物料的变更信息,不允许复制变更!"); evt.setCancel(true); } } } } } @Override public void beforeDoOperation(BeforeDoOperationEventArgs args) { super.beforeDoOperation(args); FormOperate source = (FormOperate) args.getSource(); String operateKey = source.getOperateKey(); if("submit".equals(operateKey)){ //复制后修改数据在提交时记录修改的内容,如果修改内容为空,则不记录 LinkedHashMap changeMap = new LinkedHashMap(); StringBuilder changeContent = new StringBuilder(); StringBuilder changeFields = new StringBuilder(); DynamicObject dataEntity = this.getModel().getDataEntity(true); String tqq9_srcnumber = dataEntity.getString("tqq9_srcnumber"); if(StringUtils.isNotBlank(tqq9_srcnumber)){ //查询原单 QFilter qFilter = new QFilter("number", "=", tqq9_srcnumber); DynamicObject[] srcMaterialArr = BusinessDataServiceHelper.load("bd_material", "id", new QFilter[]{qFilter}); if(srcMaterialArr != null && srcMaterialArr.length > 0){ DynamicObject srcMaterial = srcMaterialArr[0]; srcMaterial = BusinessDataServiceHelper.loadSingle(srcMaterial.getPkValue(), "bd_material"); //获取实体中所有变更的属性 List iDataEntityProperties = dataEntity.getDataEntityState().GetDirtyProperties(); if(iDataEntityProperties.size()>0){ for(IDataEntityProperty prop :iDataEntityProperties){ String name = prop.getName();//字段标识 if("status".equals(name) || "useorg".equals(name) || "modifytime".equals(name)){ continue; } LocaleString displayNameLocaleStr = prop.getDisplayName(); if(displayNameLocaleStr == null){ continue; } String displayName = displayNameLocaleStr.get("zh_CN");//字段名称 String propTypeName = prop.getPropertyType().getName(); DynamicProperty property = MetadataServiceHelper.getDataEntityType("bd_material").getProperty(name); if("kd.bos.dataentity.entity.DynamicObject".equals(propTypeName)){ String aClass = MetadataServiceHelper.getDataEntityType("bd_material").getProperty(name).getClass().getName(); if("kd.bos.entity.property.MulBasedataProp".equals(aClass)){ //多选 基础资料 String selectFields = "name"; String baseEntityId = ((MulBasedataProp) prop).getBaseEntityId(); if("bd_operator".equals(baseEntityId)){ selectFields = "operatorname"; } DynamicObjectCollection dynamicObjectColl = dataEntity.getDynamicObjectCollection(name); DynamicObjectCollection dynamicObjectColl1 = srcMaterial.getDynamicObjectCollection(name); if(dynamicObjectColl != null && dynamicObjectColl.size() > 0){ String newValue = ""; for (DynamicObject dynamicObject : dynamicObjectColl) { long id = dynamicObject.getLong("fbasedataid_id"); DynamicObject obj = BusinessDataServiceHelper.loadSingle(id, baseEntityId, selectFields); String objName = obj.getString(selectFields); newValue = newValue + "," + objName; } if(dynamicObjectColl1 != null && dynamicObjectColl1.size() > 0){ String oldValue = ""; for (DynamicObject dynamicObject1 : dynamicObjectColl1) { long id = dynamicObject1.getLong("fbasedataid_id"); DynamicObject obj = BusinessDataServiceHelper.loadSingle(id, baseEntityId, selectFields); String objName = obj.getString(selectFields); oldValue = oldValue + "," + objName; } if(!oldValue.equals(newValue)){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue.substring(1)+",变更后:"+newValue.substring(1)+";"); } }else{ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:空,变更后:"+newValue.substring(1)+";"); } }else{ if(dynamicObjectColl1 != null && dynamicObjectColl1.size() > 0) { String oldValue = ""; for (DynamicObject dynamicObject1 : dynamicObjectColl1) { long id = dynamicObject1.getLong("fbasedataid_id"); DynamicObject obj = BusinessDataServiceHelper.loadSingle(id, baseEntityId, "id,name,number"); String objName = obj.getString("name"); oldValue = oldValue + "," + objName; } changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue.substring(1)+",变更后:空;"); } } }else { //基础资料 DynamicObject dynamicObject = dataEntity.getDynamicObject(name); DynamicObject dynamicObject1 = srcMaterial.getDynamicObject(name); if(dynamicObject != null){ String newValue = dynamicObject.getString("name"); if(dynamicObject1 != null){ String oldValue = dynamicObject1.getString("name"); if(!oldValue.equals(newValue)){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:"+newValue+";"); } }else{ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:空,变更后:"+newValue+";"); } }else{ if(dynamicObject1 != null) { String oldValue = dynamicObject1.getString("name"); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:空;"); changeFields.append(",").append(name); } } } }else if("java.util.Date".equals(propTypeName)){ Date newValue = dataEntity.getDate(name); Date oldValue = srcMaterial.getDate(name); if(newValue != null){ if(oldValue != null){ if(!oldValue.equals(newValue)){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:"+newValue+";"); } }else{ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:空,变更后:"+newValue+";"); } }else{ if(oldValue != null){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:空;"); } } }else if("java.lang.Integer".equals(propTypeName)){ int newValue = dataEntity.getInt(name); int oldValue = srcMaterial.getInt(name); if(newValue != oldValue){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:"+newValue+";"); } }else if("java.lang.Long".equals(propTypeName)){ long newValue = dataEntity.getLong(name); long oldValue = srcMaterial.getLong(name); if(newValue != oldValue){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:"+newValue+";"); } }else if("java.math.BigDecimal".equals(propTypeName)){ BigDecimal newValue = dataEntity.getBigDecimal(name); BigDecimal oldValue = srcMaterial.getBigDecimal(name); if(newValue != null){ if(oldValue != null){ if(oldValue.compareTo(newValue) != 0){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:"+newValue+";"); } }else{ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:空,变更后:"+newValue+";"); } }else { if(oldValue != null){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:空;"); } } }else if("boolean".equals(propTypeName)){ boolean newValue = dataEntity.getBoolean(name); boolean oldValue = srcMaterial.getBoolean(name); if(newValue != oldValue){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:"+newValue+";"); } }else { String newValue = dataEntity.getString(name); String oldValue = srcMaterial.getString(name); if(StringUtils.isNotBlank(newValue)){ if("name".equals(name)){ newValue = newValue.replaceAll("_copy",""); } if(StringUtils.isNotBlank(oldValue)){ if(!oldValue.equals(newValue)){ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:"+newValue+";"); } }else{ changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:空,变更后:"+newValue+";"); } }else{ if(StringUtils.isNotBlank(oldValue)) { changeFields.append(",").append(name); changeContent.append("字段:"+displayName+"("+name+"),变更前:"+oldValue+",变更后:空;"); } } } changeMap.put(name,displayName); } } //获取单据体中已变更的属性 // DynamicObjectCollection entryentity = dataEntity.getDynamicObjectCollection("entry_groupstandard"); // for(int x = 0; x < entryentity.size(); x++){ // DynamicObject entry = entryentity.get(x); // List iDataEntityProperties1 = entryentity.get(x).getDataEntityState().GetDirtyProperties(); // for(IDataEntityProperty prop :iDataEntityProperties1){ // String name = prop.getName(); // String propTypeName = prop.getPropertyType().getName(); // LocaleString displayNameLocaleStr = prop.getDisplayName(); // if(displayNameLocaleStr == null){ // continue; // } // LocaleString displayName1 = prop.getDisplayName(); // changeMap.put("entry_groupstandard-"+(x+1)+":"+name,displayName1); // if("kd.bos.dataentity.entity.DynamicObject".equals(propTypeName)){ // DynamicObject dynamicObject = entry.getDynamicObject(name); // }else if("java.util.Date".equals(propTypeName)){ // Date date = entry.getDate(name); // }else if("java.lang.Integer".equals(propTypeName)){ // int anInt = entry.getInt(name); // }else if("java.lang.Long".equals(propTypeName)){ // Long aLong = entry.getLong(name); // }else if("java.math.BigDecimal".equals(propTypeName)){ // BigDecimal bigDecimal = entry.getBigDecimal(name); // }else if("boolean".equals(propTypeName)){ // boolean aBoolean = entry.getBoolean(name); // }else { // String string = entry.getString(name); // } // } // } // System.out.println("单据已变更的数据是:"+changeMap); } } if(StringUtils.isNotBlank(changeContent.toString())){ this.getModel().setValue("tqq9_changeinfo_tag", changeContent); this.getModel().setValue("tqq9_changefields_tag", changeFields.substring(1)); } } if("copyandchange".equals(operateKey)) { super.beforeDoOperation(args); this.getPageCache().put("copyMatId", this.getModel().getValue("id").toString()); FormOperate operate = (FormOperate) args.getSource(); String operateNo = operate.getOperateKey(); if(operateNo.equalsIgnoreCase("copyandchange")){ DynamicObject bill = this.getModel().getDataEntity(); this.getView().getFormShowParameter().setCustomParam("copySrcBillName", bill.getString("name")); this.getView().getFormShowParameter().setCustomParam("copySrcBillNumber", bill.getString("number")); this.getView().getFormShowParameter().setCustomParam("operateKey", "copyandchange"); } } } @Override public void afterCopyData(EventObject e) { super.afterCopyData(e); String operateKey = this.getView().getFormShowParameter().getCustomParam("operateKey"); if("copyandchange".equals(operateKey)){ String copySrcBillName = this.getView().getFormShowParameter().getCustomParam("copySrcBillName"); String copySrcBillNumber = this.getView().getFormShowParameter().getCustomParam("copySrcBillNumber"); DynamicObject dataEntity = this.getModel().getDataEntity(true); dataEntity.set("name", copySrcBillName + "_copy"); dataEntity.set("tqq9_srcnumber", copySrcBillNumber); this.getView().invokeOperation("save"); } } public void afterDoOperation(AfterDoOperationEventArgs evt) { super.afterDoOperation(evt); String operateKey = evt.getOperateKey(); if (StringUtils.equals("submit",operateKey)) { getModel().setValue("tqq9_isfirst",false); SaveServiceHelper.save(new DynamicObject[]{this.getModel().getDataEntity()}); } } @Override public void propertyChanged(PropertyChangedArgs e) { super.propertyChanged(e); String name = e.getProperty().getName(); if("tqq9_brand".equals(name)){ ChangeData changeData = e.getChangeSet()[0]; Object newValue = changeData.getNewValue(); if(newValue!=null){ DynamicObject newValue1 = (DynamicObject) newValue; DynamicObject tqq9_brand= BusinessDataServiceHelper.loadSingle("tqq9_brand", new QFilter[]{new QFilter("id", QCP.in, newValue1.getLong("id"))}); DynamicObjectCollection tqq9_shcg = tqq9_brand.getDynamicObjectCollection("tqq9_shcg"); DynamicObjectCollection tqq9_bjcg = tqq9_brand.getDynamicObjectCollection("tqq9_bjcg"); DynamicObjectCollection tqq9_gzcg = tqq9_brand.getDynamicObjectCollection("tqq9_gzcg"); getModel().setValue("tqq9_shcg",tqq9_shcg); getModel().setValue("tqq9_bjcg",tqq9_bjcg); getModel().setValue("tqq9_gzcg",tqq9_gzcg); } } } }