diff --git a/yem-base/yem-base-common/src/main/java/yem/base/common/module/attach/dynamic/PDFMergeDynamicPlugin.java b/yem-base/yem-base-common/src/main/java/yem/base/common/module/attach/dynamic/PDFMergeDynamicPlugin.java index 88a8697..594b706 100644 --- a/yem-base/yem-base-common/src/main/java/yem/base/common/module/attach/dynamic/PDFMergeDynamicPlugin.java +++ b/yem-base/yem-base-common/src/main/java/yem/base/common/module/attach/dynamic/PDFMergeDynamicPlugin.java @@ -7,6 +7,7 @@ import kd.bos.cache.CacheFactory; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.entity.LocaleString; import kd.bos.dataentity.resource.ResManager; import kd.bos.entity.EntityMetadataCache; import kd.bos.entity.MainEntityType; @@ -21,12 +22,17 @@ import kd.bos.form.control.AttachmentPanel; import kd.bos.form.control.Control; import kd.bos.form.control.EntryGrid; import kd.bos.form.events.AfterDoOperationEventArgs; +import kd.bos.form.field.ComboEdit; +import kd.bos.form.field.ComboItem; import kd.bos.form.plugin.AbstractFormPlugin; +import kd.bos.lang.Lang; import kd.bos.metadata.dao.MetaCategory; import kd.bos.metadata.dao.MetadataDao; import kd.bos.metadata.form.ControlAp; import kd.bos.metadata.form.FormMetadata; import kd.bos.metadata.form.control.AttachmentPanelAp; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.user.UserServiceHelper; import kd.sdk.plugin.Plugin; @@ -49,7 +55,26 @@ public class PDFMergeDynamicPlugin extends AbstractFormPlugin implements Plugin @Override public void afterCreateNewData(EventObject e) { super.afterCreateNewData(e); - initData(); + IFormView parentView = this.getView().getParentView(); + String parentFormName = parentView.getModel().getDataEntity().getDataEntityType().getName(); + DynamicObject orgBillObject = BusinessDataServiceHelper.loadSingle("bos_entityobject", + new QFilter[]{new QFilter("number", QCP.equals, parentFormName)}); + this.getView().getModel().setValue("yem_srcentity",orgBillObject); + this.getView().setEnable(false,"yem_srcentity"); + Map attachControl = getAttachControl(parentFormName); + Set attachControlKey = attachControl.keySet(); + // 初始化 [目标面板]下拉列表项集合 + String currLCId = Lang.get().toString();// 获取当前语言代码 + List entryItems = new ArrayList<>(); + for (String name : attachControlKey) { + ComboItem comboItem = new ComboItem(); + comboItem.setValue(attachControl.get(name)); + comboItem.setCaption(new LocaleString(currLCId, "" + name)); + entryItems.add(comboItem); + } + ComboEdit yemTargetkey = this.getControl("yem_targetkey"); + yemTargetkey.setComboItems(entryItems); + initData(attachControlKey); } @Override @@ -58,7 +83,11 @@ public class PDFMergeDynamicPlugin extends AbstractFormPlugin implements Plugin String operateKey = e.getOperateKey(); switch(operateKey){ case "refreshentry": // 刷新自动重新从父页面更新PDF文件明细 - initData(); + IFormView parentView = this.getView().getParentView(); + String parentFormName = parentView.getModel().getDataEntity().getDataEntityType().getName(); + Map attachControl = getAttachControl(parentFormName); + Set attachControlKey = attachControl.keySet(); + initData(attachControlKey); break; default : break; @@ -68,29 +97,26 @@ public class PDFMergeDynamicPlugin extends AbstractFormPlugin implements Plugin /** * PDF文件合并界面初始化 * */ - private void initData(){ + private void initData(Set attachControlKey){ IFormView view = this.getView(); IDataModel model = view.getModel(); + IFormView parentView = this.getView().getParentView(); // 清除分录 model.deleteEntryData("yem_entryentity"); - FormShowParameter formShowParameter = view.getFormShowParameter(); - String attachKey = formShowParameter.getCustomParam("srcAttachKey"); - if (YEM.isEmpty(attachKey))return; - IFormView parentView = view.getParentView(); - if (parentView == null) return; - DynamicObject dataEntity = parentView.getModel().getDataEntity();// 源单实体 - // 获取附件 - AttachmentPanel panel = parentView.getControl(attachKey); - List> attachs = panel.getAttachmentData(); - DynamicObjectCollection entry = model.getEntryEntity("yem_entryentity"); - for (Map attach:attachs){ - String fileName = (String) attach.get("name"); - String url = (String) attach.get("url"); - if (YEM.isEmpty(fileName)) continue; - if (fileName.endsWith(".pdf") || fileName.endsWith(".PDF")){ - int row = model.createNewEntryRow("yem_entryentity"); - model.setValue("yem_attachmentname",fileName,row); - model.setValue("yem_url",url,row); + for (String attachKey : attachControlKey) { + // 获取附件 + AttachmentPanel panel = parentView.getControl(attachKey); + List> attachs = panel.getAttachmentData(); + DynamicObjectCollection entry = model.getEntryEntity("yem_entryentity"); + for (Map attach:attachs){ + String fileName = (String) attach.get("name"); + String url = (String) attach.get("url"); + if (YEM.isEmpty(fileName)) continue; + if (fileName.endsWith(".pdf") || fileName.endsWith(".PDF")){ + int row = model.createNewEntryRow("yem_entryentity"); + model.setValue("yem_attachmentname",fileName,row); + model.setValue("yem_url",url,row); + } } } } @@ -106,29 +132,31 @@ public class PDFMergeDynamicPlugin extends AbstractFormPlugin implements Plugin super.click(evt); IFormView view = this.getView(); IFormView parentView = view.getParentView(); + if (parentView == null)return; Control source = (Control) evt.getSource(); String key = source.getKey(); // 获取需要合并的文件 EntryGrid treeEntryEntity = this.getControl("yem_entryentity"); + String yemTargetkey = (String) view.getModel().getValue("yem_targetkey"); int[] rows = treeEntryEntity.getSelectRows(); switch(key){ case "btnok": - if (rows.length == 0 ){ - this.getView().showErrorNotification(ResManager.loadKDString("请先选择需要合并的附件!", "PDFMergeDynamicPlugin_0", "yem-base")); - return; - } if (rows.length < 2 ){ this.getView().showErrorNotification(ResManager.loadKDString("请至少选择两个文件进行合并!", "PDFMergeDynamicPlugin_1", "yem-base")); return; } + if (YEM.isEmpty(yemTargetkey)){ + this.getView().showErrorNotification(ResManager.loadKDString("请先选择合并附件的目标面板!", "PDFMergeDynamicPlugin_0", "yem-base")); + return; + } Arrays.sort(rows); try { - mergeCreateFile(rows); + mergeCreateFile(rows,yemTargetkey); } catch (IOException e) { this.getView().showErrorNotification(ResManager.loadKDString("文件合并失败!", "PDFMergeDynamicPlugin_2", "yem-base")); return; } - view.returnDataToParent("success"); + view.returnDataToParent(yemTargetkey); view.close(); break; case "btncancel": @@ -144,12 +172,9 @@ public class PDFMergeDynamicPlugin extends AbstractFormPlugin implements Plugin // 合并生成文件并回传至源单 - private void mergeCreateFile(int[] rows) throws IOException { + private void mergeCreateFile(int[] rows ,String yemTargetkey ) throws IOException { // 获取源单数据 - FormShowParameter formShowParameter = this.getView().getFormShowParameter(); - String attachKey = formShowParameter.getCustomParam("targetAttachKey"); IFormView parentView = this.getView().getParentView(); - if (YEM.isEmpty(attachKey) || parentView == null)return; DynamicObject obj = parentView.getModel().getDataEntity();// 源单实体 SimpleDateFormat format = new SimpleDateFormat("HHmmss"); String date = format.format(new Date()); @@ -219,7 +244,7 @@ public class PDFMergeDynamicPlugin extends AbstractFormPlugin implements Plugin attachMap.put("creator", user == null ? "金小蝶":user.getString("name")); attachMap.put("description", "");//description attachMap.put("type", "pdf"); - attachMap.put("fattachmentpanel",attachKey); + attachMap.put("fattachmentpanel",yemTargetkey); attachMap.put("entityNum", ""); attachMap.put("billPkId", 0L); attachMap.put("billno", ""); @@ -227,9 +252,9 @@ public class PDFMergeDynamicPlugin extends AbstractFormPlugin implements Plugin attachMap.put("endProgress", true); attachMap.put("filesource", 1); attachDataList.add(attachMap); - AttachmentPanel control = this.getView().getParentView().getControl(attachKey); + AttachmentPanel control = this.getView().getParentView().getControl(yemTargetkey); control.upload(attachDataList); - this.getView().getParentView().updateView(attachKey); + this.getView().getParentView().updateView(yemTargetkey); } @@ -286,19 +311,20 @@ public class PDFMergeDynamicPlugin extends AbstractFormPlugin implements Plugin /** - * 获取源单实体所有附件面板的key + * 获取源单实体所有附件面板的key\name * @param formName 源单标识 * */ - private List getAttachControl(String formName){ + private Map getAttachControl(String formName){ MainEntityType entityType = EntityMetadataCache.getDataEntityType(formName); FormMetadata taskMeta = (FormMetadata) MetadataDao.readRuntimeMeta(MetadataDao.getIdByNumber( entityType.getName(), MetaCategory.Form), MetaCategory.Form); List> items = taskMeta.getItems(); // 附件面板标识集合。 - List attachmentPanelAp = new ArrayList<>(); + Map attachmentPanelAp = new HashMap<>(); items.forEach(item ->{ if(item instanceof AttachmentPanelAp){ - attachmentPanelAp.add(item.getKey()); + AttachmentPanelAp attachmentPanel = (AttachmentPanelAp) item; + attachmentPanelAp.put(String.valueOf(attachmentPanel.getName()),attachmentPanel.getKey()); } }); return attachmentPanelAp; diff --git a/yem-base/yem-base-common/src/main/java/yem/base/common/module/attach/form/PDFMergeFormPlugin.java b/yem-base/yem-base-common/src/main/java/yem/base/common/module/attach/form/PDFMergeFormPlugin.java new file mode 100644 index 0000000..5012ad5 --- /dev/null +++ b/yem-base/yem-base-common/src/main/java/yem/base/common/module/attach/form/PDFMergeFormPlugin.java @@ -0,0 +1,97 @@ +package yem.base.common.module.attach.form; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.bill.OperationStatus; +import kd.bos.dataentity.resource.ResManager; +import kd.bos.entity.operate.result.OperationResult; +import kd.bos.form.CloseCallBack; +import kd.bos.form.FormShowParameter; +import kd.bos.form.ShowType; +import kd.bos.form.control.Control; +import kd.bos.form.events.AfterDoOperationEventArgs; +import kd.bos.form.events.ClosedCallBackEvent; +import kd.sdk.plugin.Plugin; +import yem.base.common.utils.YEM; + +import java.util.EventObject; +import java.util.HashMap; +import java.util.Map; + +/** + * 单据界面插件 + */ +public class PDFMergeFormPlugin extends AbstractBillPlugIn implements Plugin { + + + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + Control control = this.getView().getControl("yem_pdf_merge"); + if (control != null){ + this.addClickListeners("yem_pdf_merge"); + } + + } + + @Override + public void click(EventObject evt) { + super.click(evt); + Control source = (Control) evt.getSource(); + String key = source.getKey(); + if ("yem_pdf_merge".equals(key)){ + FormShowParameter showParameter = new FormShowParameter(); + showParameter.setStatus(OperationStatus.ADDNEW); + showParameter.getOpenStyle().setShowType(ShowType.Modal); + showParameter.setFormId("yem_base_pdfmerge"); + Map map = new HashMap<>(); + map.put("srcAttachKey", "attachmentpanel"); + map.put("targetAttachKey", "signattachment"); + showParameter.setCustomParams(map); + showParameter.setCloseCallBack(new CloseCallBack(this.getClass().getName(),"yem_base_pdfmerge")); + this.getView().showForm(showParameter); + } + } + + + @Override + public void afterDoOperation(AfterDoOperationEventArgs e) { + super.afterDoOperation(e); + String operateKey = e.getOperateKey(); + OperationResult operationResult = e.getOperationResult(); + if (!operationResult.isSuccess())return; + switch(operateKey){ + case "filemerge":// 附件合并 + showFileMergePage(); + break; + default : + break; + } + } + + // 打开附件合并界面 + private void showFileMergePage(){ + FormShowParameter showParameter = new FormShowParameter(); + showParameter.setStatus(OperationStatus.ADDNEW); + showParameter.getOpenStyle().setShowType(ShowType.Modal); + showParameter.setFormId("yem_base_pdfmerge"); + showParameter.setCloseCallBack(new CloseCallBack(this.getClass().getName(),"yem_base_pdfmerge")); + this.getView().showForm(showParameter); + } + + + @Override + public void closedCallBack(ClosedCallBackEvent e) { + super.closedCallBack(e); + String actionId = e.getActionId(); + if ("yem_base_pdfmerge".equals(actionId)) { + // 返回目标附件面板key + String returnData = (String) e.getReturnData(); + if (!YEM.isEmpty(returnData)){ + // 刷新附件面板 + this.getView().updateView(returnData); + this.getView().showSuccessNotification(ResManager.loadKDString("合并PDF文件成功!", "PDFMergeFormPlugin_0", "yem-base")); + } + } + } + +} \ No newline at end of file diff --git a/yem-base/yem-base-common/src/main/java/yem/base/common/module/meta/list/FieldKeyStoreList.java b/yem-base/yem-base-common/src/main/java/yem/base/common/module/meta/list/FieldKeyStoreList.java new file mode 100644 index 0000000..0273afd --- /dev/null +++ b/yem-base/yem-base-common/src/main/java/yem/base/common/module/meta/list/FieldKeyStoreList.java @@ -0,0 +1,30 @@ +package yem.base.common.module.meta.list; + +import com.alibaba.druid.util.StringUtils; +import kd.bos.form.ShowType; +import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.report.ReportShowParameter; + + +/** + * 字段标识库 列表插件 + */ +public class FieldKeyStoreList extends AbstractListPlugin { + + @Override + public void itemClick(ItemClickEvent evt) { + super.itemClick(evt); + String key = evt.getItemKey(); + if (StringUtils.equals("yem_barrptdiff", key)) { //异常字段查询 + //获得报表显示参数 + ReportShowParameter reportShowParameter = new ReportShowParameter(); + //设置报表标识 + reportShowParameter.setFormId("yem_base_filekeydiff"); + //设置弹出页面的打开方式 + reportShowParameter.getOpenStyle().setShowType(ShowType.Modal); + //绑定子页面到当前页面 + this.getView().showForm(reportShowParameter); + } + } +} diff --git a/yem-base/yem-base-common/src/main/java/yem/base/common/module/meta/report/FileKeyDiffRptListDataPlugin.java b/yem-base/yem-base-common/src/main/java/yem/base/common/module/meta/report/FileKeyDiffRptListDataPlugin.java new file mode 100644 index 0000000..cc38404 --- /dev/null +++ b/yem-base/yem-base-common/src/main/java/yem/base/common/module/meta/report/FileKeyDiffRptListDataPlugin.java @@ -0,0 +1,159 @@ +package yem.base.common.module.meta.report; + +import kd.bos.algo.*; +import kd.bos.algo.input.CollectionInput; +import kd.bos.entity.report.AbstractReportListDataPlugin; +import kd.bos.entity.report.ReportQueryParam; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.QueryServiceHelper; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * 异常字段表 数据包插件 + */ +public class FileKeyDiffRptListDataPlugin extends AbstractReportListDataPlugin { + + private static final String algoKey = "FileKeyDiffListDataPlugin"; + public static final DataType[] DATATYPESXS = { + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType, + DataType.StringType }; + public static final String[] FIELDSXS = { + "yem_bizcloudname", + "yem_appname", + "yem_entitykey", + "yem_entityname", + "yem_modeltype", + "yem_parentname", + "yem_entitysname", + "yem_fieldnumber", + "yem_fieldnumbers", + "yem_aliasname", + "yem_fieldname", + "yem_fieldnames", + "yem_datatype", + "yem_fieldtype", + "yem_basedatatype", + "yem_textfield1"}; + + @Override + public DataSet query(ReportQueryParam queryParam, Object o) throws Throwable { + + // 创建显示行字段 + Collection coll = new ArrayList<>(); + RowMeta createRowMeta = RowMetaFactory.createRowMeta(FIELDSXS, DATATYPESXS);//字段集合 + CollectionInput collectionInput = new CollectionInput(createRowMeta, coll); + DataSet createDataSet = Algo.create(algoKey).createDataSet(collectionInput);//数据集合 + +// // 获取过滤 +// List filters = queryParam.getFilter().getFilterItems(); +// String tpv_ordernumm = null; +// for (FilterItemInfo filterItem : filters) { +// switch (filterItem.getPropName()) { +// case "tpv_ordernumm": +// tpv_ordernumm = filterItem.getString(); +// break; +// default: +// break; +// } +// } + List filterList1 = new ArrayList<>(); + filterList1.add(new QFilter("yem_fieldnumber", QCP.not_equals2, "billno")); + filterList1.add(new QFilter("yem_fieldnumber", QCP.not_equals2, "id")); + filterList1.add(new QFilter("yem_fieldnumber", QCP.not_equals2, "org")); + filterList1.add(new QFilter("yem_fieldnumber", QCP.not_equals2, "seq")); + + DataSet dataSet1 = QueryServiceHelper.queryDataSet(algoKey, "yem_base_fieldkeystore", + "id,yem_bizcloudname ,yem_appname, yem_entitykey , yem_entityname, yem_modeltype, yem_parentname," + + " yem_entitysname, yem_fieldnumber, yem_fieldnumbers, yem_aliasname, yem_fieldname, yem_fieldnames ," + + " yem_datatype, yem_fieldtype, yem_basedatatype" + ,filterList1.toArray(new QFilter[0]), "yem_fieldname desc"); + GroupbyDataSet groupby1 = dataSet1.groupBy(new String[]{"yem_fieldnumber","yem_aliasname","yem_fieldname","yem_fieldnames"}); + groupby1.minP("id","yem_bizcloudname"); + groupby1.minP("id","yem_appname"); + groupby1.minP("id","yem_entitykey"); + groupby1.minP("id","yem_entityname"); + groupby1.minP("id","yem_modeltype"); + groupby1.minP("id","yem_parentname"); + groupby1.minP("id","yem_entitysname"); + groupby1.minP("id","yem_datatype"); + groupby1.minP("id","yem_fieldtype"); + groupby1.minP("id","yem_basedatatype"); + groupby1.minP("id","yem_fieldnumbers"); + groupby1.count("yem_textfield1"); + DataSet dataSet2 = groupby1.finish(); //构造完毕,返回DataSet + dataSet2 = dataSet2.orderBy(new String[]{"yem_fieldnames"}); + + DataSet dataSet3 = dataSet2.copy(); + dataSet3 = dataSet3.select("yem_fieldnames as yem_fieldnames2"); + GroupbyDataSet groupby2 = dataSet3.groupBy(new String[]{"yem_fieldnames2"}); + groupby2.count("yem_count"); + DataSet dataSet4 = groupby2.finish(); //构造完毕,返回DataSet + dataSet4 = dataSet4.where("yem_count>1"); + + DataSet dataSet5 = dataSet4.join(dataSet2,JoinType.INNER).on("yem_fieldnames2", "yem_fieldnames") + .select("yem_bizcloudname", "yem_appname", "yem_entitykey","yem_entityname", "yem_modeltype", + "yem_parentname", "yem_entitysname", "yem_fieldnumber","yem_fieldnumbers", "yem_aliasname", + "yem_fieldname", "yem_fieldnames", "yem_datatype","yem_fieldtype", "yem_basedatatype","yem_textfield1") + .finish(); + + DataSet dataSetfinal = dataSet5.copy(); + for (Row row : dataSetfinal) { + String yem_bizcloudname = row.getString("yem_bizcloudname"); + String yem_appname = row.getString("yem_appname"); + String yem_entitykey = row.getString("yem_entitykey"); + String yem_entityname = row.getString("yem_entityname"); + String yem_modeltype = row.getString("yem_modeltype"); + String yem_parentname = row.getString("yem_parentname"); + String yem_entitysname = row.getString("yem_entitysname"); + String yem_fieldnumber = row.getString("yem_fieldnumber"); + String yem_fieldnumbers = row.getString("yem_fieldnumbers"); + String yem_aliasname = row.getString("yem_aliasname"); + String yem_fieldname = row.getString("yem_fieldname"); + String yem_fieldnames = row.getString("yem_fieldnames"); + String yem_datatype = row.getString("yem_datatype"); + String yem_fieldtype = row.getString("yem_fieldtype"); + String yem_basedatatype = row.getString("yem_basedatatype"); + String yem_textfield1 = row.getString("yem_textfield1"); + + Object[] tempData = new Object[FIELDSXS.length]; + tempData[0] = yem_bizcloudname; + tempData[1] = yem_appname; + tempData[2] = yem_entitykey; + tempData[3] = yem_entityname; + tempData[4] = yem_modeltype; + tempData[5] = yem_parentname; + tempData[6] = yem_entitysname; + tempData[7] = yem_fieldnumber; + tempData[8] = yem_fieldnumbers; + tempData[9] = yem_aliasname; + tempData[10] = yem_fieldname; + tempData[11] = yem_fieldnames; + tempData[12] = yem_datatype; + tempData[13] = yem_fieldtype; + tempData[14] = yem_basedatatype; + tempData[15] = yem_textfield1; + + coll.add(tempData); + } + + return createDataSet; + } +} diff --git a/yem-base/yem-base-common/src/main/java/yem/base/common/module/meta/task/FieldKeyStoreUpdateTaskPlugin.java b/yem-base/yem-base-common/src/main/java/yem/base/common/module/meta/task/FieldKeyStoreUpdateTaskPlugin.java new file mode 100644 index 0000000..58444ff --- /dev/null +++ b/yem-base/yem-base-common/src/main/java/yem/base/common/module/meta/task/FieldKeyStoreUpdateTaskPlugin.java @@ -0,0 +1,124 @@ +package yem.base.common.module.meta.task; + +import kd.bos.algo.DataSet; +import kd.bos.context.RequestContext; +import kd.bos.dataentity.OperateOption; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.report.FilterInfo; +import kd.bos.entity.report.ReportQueryParam; +import kd.bos.exception.KDException; +import kd.bos.orm.ORM; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.schedule.executor.AbstractTask; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.DeleteServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.sdk.plugin.Plugin; +import yem.base.common.module.meta.report.DataDictionaryRptQuery; +import yem.base.common.utils.YEM; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: 字段标识库 定时更新插件 + * @author: lib + * @date: 2025/1/9 9:54 + */ +public class FieldKeyStoreUpdateTaskPlugin extends AbstractTask implements Plugin { + + @Override + public void execute(RequestContext requestContext, Map map) throws KDException { + // 获取参数 + String bizcloudkey = (String) map.get("bizcloudkey");// 业务云标识 + String appkeys = (String) map.get("appkeys");// 应用标识拼接 + if (YEM.isEmpty(bizcloudkey) || YEM.isEmpty(appkeys))return; + String[] appkeyArray = appkeys.split(","); + for (int i = 0; i < appkeyArray.length; i++) { + String appkey = appkeyArray[i]; + // 更新数据 + try { + updateFieldKeyStore(bizcloudkey,appkey); + } catch (Throwable e) { + throw new KDException(e.getMessage()); + } + } + } + + + + /** + * @Description: 查询并更新字段标识库数据 + * @function 功能: + * 1、根据业务云、应用标识查询【数据字典】报表:获取对应应用下所有表单元数据项 + * 2、根据所查结果分别查询每个元数据 对应表单字段 + * 3、查询【字段标识库】,删除已有对应历史数据,创建最新数据 + * @purposes 定时任务更新调用 + * @param bizcloudkey 业务云标识 + * @param appkey 应用标识 + * @return void + */ + private void updateFieldKeyStore (String bizcloudkey ,String appkey) throws Throwable { + // 定义List 用以收集 新增的数据 + List creatNewList = new ArrayList<>(); + // 定义List 用以收集 涉及到的表单ID + List billIdList = new ArrayList<>(); + // 查询 业务云/应用 的所有元数据实体 + DataDictionaryRptQuery report = new DataDictionaryRptQuery(); + ReportQueryParam Param = new ReportQueryParam(); + FilterInfo filters = Param.getFilter(); + filters.addFilterItem("yem_datefilter", "1"); + filters.addFilterItem("yem_fbizcloud", bizcloudkey); + filters.addFilterItem("yem_fapp", appkey); + Param.setFilter(filters); + DataSet entityList = report.query(Param, null); + DynamicObjectCollection entityCollection = ORM.create().toPlainDynamicObjectCollection(entityList); + for (DynamicObject entity : entityCollection){ + String yemEntityid = entity.getString("yem_entityid");// 表单ID + String yemEntitykey = entity.getString("yem_entitykey");// 表单标识 + // 查询 元数据实体 的所有字段信息 + DataSet entityFields = DataDictionaryRptQuery.queryDataBill(yemEntitykey); + DynamicObjectCollection fieldsCollection = ORM.create().toPlainDynamicObjectCollection(entityFields); + for(DynamicObject fields : fieldsCollection){ + DynamicObject addNew = BusinessDataServiceHelper.newDynamicObject("yem_base_fieldkeystore"); + addNew.set("name",yemEntitykey+fields.getString("yem_number2"));//名称 + addNew.set("enable", "1");//使用状态 + addNew.set("status", "C");//数据状态 + addNew.set("yem_bizcloud",entity.getString("yem_bizcloud"));// 业务云ID + addNew.set("yem_bizcloudkey",entity.getString("yem_bizcloudkey"));// 业务云标识 + addNew.set("yem_bizcloudname",entity.getString("yem_bizcloudname"));// 业务云名称 + addNew.set("yem_appid",entity.getString("yem_appid"));// 应用ID + addNew.set("yem_appkey",entity.getString("yem_appkey"));// 应用标识 + addNew.set("yem_appname",entity.getString("yem_appname"));// 应用名称 + addNew.set("yem_dbroute",entity.getString("yem_dbroute"));// 数据库标识 + addNew.set("yem_entityid",yemEntityid);// 表单ID + addNew.set("yem_entitykey",yemEntitykey);// 表单标识 + addNew.set("yem_entityname",entity.getString("yem_entityname"));// 表单名称 + addNew.set("yem_modeltype",entity.getString("yem_modeltype"));// 模型类型 + addNew.set("yem_isv",entity.getString("yem_isv"));// 开发商标识 + addNew.set("yem_parentname",fields.getString("yem_parent2"));// 父实体名称 + addNew.set("yem_entitysname",entity.getString("yem_entity2"));// 实体名称 + addNew.set("yem_fieldnumber",fields.getString("yem_number2"));// 字段编码 + addNew.set("yem_fieldnumbers",fields.getString("yem_fullnumber2"));// 字段全编码 + addNew.set("yem_aliasname",fields.getString("yem_alias2"));// 对应数据库字段名 + addNew.set("yem_datatype",fields.getString("yem_aliastype2"));// 数据类型 + addNew.set("yem_fieldname",fields.getString("yem_name2"));// 字段名称 + addNew.set("yem_fieldnames",fields.getString("yem_fullname2"));// 字段全名 + addNew.set("yem_fieldtype",fields.getString("yem_datatype2"));// 字段类型 + addNew.set("yem_fieldtypekey",fields.getString("yem_datatype_key2"));// 字段类型key + addNew.set("yem_basedatatype",fields.getString("yem_basedatakey2"));// 基础资料类型 + creatNewList.add(addNew); + } + billIdList.add(yemEntityid); + } + // 删除 字段标识库 中的历史数据 + DeleteServiceHelper.delete("yem_base_fieldkeystore", + new QFilter[]{new QFilter("yem_entityid", QCP.in, billIdList)}); + // 保存最新的数据 + SaveServiceHelper.saveOperate("save","yem_base_fieldkeystore", + creatNewList.toArray(new DynamicObject[0]), OperateOption.create()); + } +} \ No newline at end of file diff --git a/yem-base/yem-base-common/src/main/java/yem/base/common/module/plugin/report/FileKeyDiffRptFromDataPlugin.java b/yem-base/yem-base-common/src/main/java/yem/base/common/module/plugin/report/FileKeyDiffRptFromDataPlugin.java new file mode 100644 index 0000000..f4409c1 --- /dev/null +++ b/yem-base/yem-base-common/src/main/java/yem/base/common/module/plugin/report/FileKeyDiffRptFromDataPlugin.java @@ -0,0 +1,19 @@ +package yem.base.common.module.plugin.report; + +import kd.bos.report.filter.ReportFilter; +import kd.bos.report.plugin.AbstractReportFormPlugin; + +import java.util.EventObject; + +/** + * 异常字段表 表单插件 + */ +public class FileKeyDiffRptFromDataPlugin extends AbstractReportFormPlugin { + + @Override + public void afterCreateNewData(EventObject e) { + super.afterCreateNewData(e); + ReportFilter filter = this.getView().getControl("reportfilterap"); + filter.search(); + } +}