Browse Source

增加附件下载插件测试

turborao 6 days ago
parent
commit
c243e4a053

+ 89 - 0
code/base/nckd-jimin-base-helper/src/main/java/nckd/base/helper/AttachmentDownloadListPlugin.java

@@ -0,0 +1,89 @@
+package nckd.base.helper;
+
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.entity.MainEntityType;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.ext.fi.bei.util.EmptyUtil;
+import kd.bos.fileservice.FileService;
+import kd.bos.fileservice.FileServiceFactory;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.list.BillList;
+import kd.bos.list.IListView;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+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.servicehelper.AttachmentServiceHelper;
+import kd.bos.util.StringUtils;
+import kd.sdk.plugin.Plugin;
+
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 标准单据列表插件
+ */
+public class AttachmentDownloadListPlugin extends AbstractListPlugin implements Plugin {
+    private static final Log logger = LogFactory.getLog(AttachmentDownloadListPlugin.class);
+
+    public void afterDoOperation(AfterDoOperationEventArgs args) {
+        super.afterDoOperation(args);
+        String operateKey = args.getOperateKey();
+        OperationResult operationResult = args.getOperationResult();
+
+        BillList billList = (BillList)this.getControl("billlistap");
+        String billForm = ((IListView)this.getView()).getBillFormId();
+        String attForm = getAttachmentPanelName(billForm);
+        ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+        Object billid = null;
+        if (!selectedRows.isEmpty()) {
+            if(selectedRows.size() > 1 ){
+                this.getView().showErrorNotification("请选择一条数据!");
+                return;
+            }
+            List<Object>  payBillIdList = Arrays.asList(selectedRows.getPrimaryKeyValues());
+            billid = payBillIdList.get(0);
+        }else{
+            return;
+        }
+        if (operationResult != null && operationResult.isSuccess() && "downloadFile".equals(operateKey)) {
+            if(StringUtils.isEmpty(attForm) && EmptyUtil.isEmpty(billid)){
+                this.getView().showErrorNotification("没有附件可下载!");
+                return;
+            }
+            List<Map<String, Object>> list = AttachmentServiceHelper.getAttachments(billForm, billid, attForm);
+            for (Map map : list) {
+                String url = map.get("url").toString();//获取到url
+                FileService fileService = FileServiceFactory.getAttachmentFileService();
+                String path = fileService.getFileServiceExt().getRealPath(url);
+                InputStream inputStream = fileService.getInputStream(url);
+                String downloadUrl =  FileSECUtils.getFileUrlByEncodeSEC(path,inputStream);
+                this.getView().download(downloadUrl);
+            }
+        }
+    }
+
+
+    public String getAttachmentPanelName(String billformId ) {
+        MainEntityType entityType = EntityMetadataCache.getDataEntityType(billformId);
+        FormMetadata taskMeta = (FormMetadata) MetadataDao.readRuntimeMeta(MetadataDao.getIdByNumber(entityType.getName(), MetaCategory.Form), MetaCategory.Form);
+        // 元数据所有字段内容
+        List<ControlAp<?>> items = taskMeta.getItems();
+        for (ControlAp<?> item: items) {
+            // 判断元素类型是否是附件面板控件
+            if (item instanceof AttachmentPanelAp) {
+                String key = item.getKey();
+                return key;
+            }
+        }
+        return null;
+    }
+
+}