Browse Source

Merge remote-tracking branch 'origin/dev' into pre

dzx 1 year ago
parent
commit
44861406c8

+ 60 - 0
src/main/java/com/xjrsoft/module/ledger/controller/LedgeViewController.java

@@ -0,0 +1,60 @@
+package com.xjrsoft.module.ledger.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.module.ledger.vo.GetWorkflowInfoVo;
+import com.xjrsoft.module.ledger.vo.LedgerConfigVo;
+import com.xjrsoft.module.workflow.entity.WorkflowExtra;
+import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
+import com.xjrsoft.module.workflow.service.IWorkflowExtraService;
+import com.xjrsoft.module.workflow.service.IWorkflowFormRelationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @title: 台账导出
+ * @Author szs
+ * @Date: 2024-03-20
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/ledger" + "/LedgeView")
+@Api(value = "/ledger" + "/LedgeView", tags = "查看")
+@AllArgsConstructor
+public class LedgeViewController {
+
+    private IWorkflowFormRelationService workflowFormRelationService;
+
+    private IWorkflowExtraService workflowExtraService;
+
+    @GetMapping("/getWorkflowInfo")
+    @ApiOperation(value = "获取流程信息")
+    public RT<GetWorkflowInfoVo>  getWorkflowInfo(@RequestParam Long id) {
+        GetWorkflowInfoVo info = new GetWorkflowInfoVo();
+        List<WorkflowFormRelation> relations = workflowFormRelationService.list(new QueryWrapper<WorkflowFormRelation>().lambda().eq(WorkflowFormRelation::getFormKeyValue, id));
+
+        if (!relations.isEmpty()) {
+            info.setProcessId(relations.get(0).getProcessId());
+        }
+
+
+        //查询最后一个节点的taskId
+        List<WorkflowExtra> taskList = workflowExtraService.list(
+                new QueryWrapper<WorkflowExtra>().lambda()
+                        .eq(WorkflowExtra::getProcessId, info.getProcessId())
+                        .orderByDesc(WorkflowExtra::getStartTime)
+        );
+        if (!taskList.isEmpty()) {
+            info.setTaskId(taskList.get(0).getTaskId());
+        }
+        return RT.ok(info);
+    }
+}

+ 105 - 33
src/main/java/com/xjrsoft/module/ledger/controller/LedgerExportController.java

@@ -1,47 +1,72 @@
 package com.xjrsoft.module.ledger.controller;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.db.Entity;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.alibaba.excel.util.ListUtils;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.module.ledger.dto.LedgerExportDataDto;
+import com.xjrsoft.module.ledger.entity.LedgerConfig;
 import com.xjrsoft.module.ledger.entity.LedgerConfigRelease;
 import com.xjrsoft.module.ledger.service.ILedgerConfigReleaseService;
 import com.xjrsoft.module.ledger.service.ILedgerConfigService;
-import com.xjrsoft.module.system.service.IMenuService;
+import com.xjrsoft.module.magicapi.service.IMagicApiService;
+import com.xjrsoft.module.magicapi.vo.MagicApiInfoVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.ssssssss.magicapi.core.service.MagicAPIService;
+import org.ssssssss.magicapi.modules.db.model.PageResult;
 
 import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
-* @title: 台账导出
-* @Author szs
-* @Date: 2024-03-20
-* @Version 1.0
-*/
+ * @title: 台账导出
+ * @Author szs
+ * @Date: 2024-03-20
+ * @Version 1.0
+ */
 @RestController
-@RequestMapping("/ledger" + "/ledgerConfig")
-@Api(value = "/ledger"  + "/ledgerConfig",tags = "台账导出")
+@RequestMapping("/ledger" + "/LedgerExport")
+@Api(value = "/ledger" + "/LedgerExport", tags = "台账导出")
 @AllArgsConstructor
 public class LedgerExportController {
 
     private ILedgerConfigReleaseService ledgerConfigReleaseService;
 
+    private ILedgerConfigService ledgerConfigService;
+
+    private IMagicApiService magicApiService;
+
+    private MagicAPIService magicAPIService;
+
     @PostMapping("/export-query")
     @ApiOperation(value = "导出")
     public ResponseEntity<byte[]> exportData(@Valid @RequestBody LedgerExportDataDto dto) {
+//    @GetMapping("/export-query")
+//    @ApiOperation(value = "导出")
+//    public ResponseEntity<byte[]> exportData(@Valid LedgerExportDataDto dto) {
         LedgerConfigRelease release = ledgerConfigReleaseService.getById(dto.getConfigIntoId());
-        if(release == null){
+        if (release == null) {
+            throw new MyException("导出数据失败");
+        }
+
+        LedgerConfig ledgerConfig = ledgerConfigService.getById(release.getLedgerConfigId());
+
+        if (ledgerConfig == null) {
             throw new MyException("导出数据失败");
         }
 
@@ -49,37 +74,36 @@ public class LedgerExportController {
         JsonObject jsonObject = parser.parse(release.getConfigJson()).getAsJsonObject();
 
         JsonArray columnConfigs = jsonObject.get("columnConfigs").getAsJsonArray();
-        //构建excel头
-        buildExcelHeader(columnConfigs);
 
-        for (JsonElement element : columnConfigs) {
+        JsonObject apiInfo = jsonObject.get("apiInfo").getAsJsonObject();
+        //构建excel头
+        List<List<String>> headlist = buildExcelHeader(columnConfigs);
 
-//            System.out.println(element.getAsJsonObject().get("key").getAsString());
+        List<List<Object>> dataList = buildExcelDataList(apiInfo, headlist, dto.getQueryParam());
 
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot).head(headlist).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
 
+        String encodedFileName = "";
+        try{
+            encodedFileName = URLEncoder.encode(ledgerConfig.getName() , "UTF-8");
+        }catch (Exception e){
 
         }
 
-
-//        List<WfSubscriptionExcelVo> customerList = wfSubscriptionService.getList(dto);
-//        ByteArrayOutputStream bot = new ByteArrayOutputStream();
-//        EasyExcel.write(bot, WfSubscriptionExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
-
-//        return RT.fileStream(bot.toByteArray(), "WfSubscription" + ExcelTypeEnum.XLSX.getValue());
-
-
-
-//        // 写法1
-//        String fileName = TestFileUtil.getPath() + "noModelWrite" + System.currentTimeMillis() + ".xlsx";
-//        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
-//        EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList());
-        return null;
+        return RT.fileStream(bot.toByteArray(), encodedFileName + ExcelTypeEnum.XLSX.getValue());
     }
 
-    private List<List<String>> buildExcelHeader(JsonArray columnConfigs){
+    /**
+     * 构建excel标题列
+     *
+     * @param columnConfigs
+     * @return
+     */
+    private List<List<String>> buildExcelHeader(JsonArray columnConfigs) {
         List<List<String>> list = ListUtils.newArrayList();
         for (JsonElement element : columnConfigs) {
-            String key = element.getAsJsonObject().get("label").getAsString();
+            String key = element.getAsJsonObject().get("field").getAsString();
             List<String> head = ListUtils.newArrayList();
             head.add(key);
             list.add(head);
@@ -87,4 +111,52 @@ public class LedgerExportController {
         return list;
     }
 
+    /**
+     * 构建数据集合
+     *
+     * @param apiInfo
+     * @return
+     */
+    private List<List<Object>> buildExcelDataList(JsonObject apiInfo, List<List<String>> headlist, Map<String, Object> queryParam) {
+        //获取magicApi的id
+        String apiId = apiInfo.get("apiId").getAsString();
+
+        //获取magicApi的入参
+        JsonArray apiParams = apiInfo.get("apiParams").getAsJsonArray();
+        JsonArray tableInfo = apiParams.get(0).getAsJsonObject().get("tableInfo").getAsJsonArray();
+
+        MagicApiInfoVo info = magicApiService.info(apiId);
+        Map<String, Object> params = new HashMap<>();
+
+
+        for (JsonElement element : tableInfo) {
+            String key = element.getAsJsonObject().get("name").getAsString();
+            if (queryParam != null && queryParam.containsKey(key) && queryParam.get(key) != null) {
+                params.put(key, queryParam.get(key));
+            }
+        }
+        if (!params.containsKey("limit")) {
+            params.put("limit", 1);
+        }
+        if (!params.containsKey("size")) {
+            params.put("size", Integer.MAX_VALUE);
+        }
+        PageResult res = magicAPIService.execute(info.getMethod(), info.getPath(), params);
+
+        List<List<Object>> list = ListUtils.newArrayList();
+
+        for (Object obj : res.getList()) {
+            List<Object> data = ListUtils.newArrayList();
+
+            Entity rowValue = Convert.convert(Entity.class, obj);
+
+            for (List<String> head : headlist){
+                data.add(rowValue.get(head.get(0)));
+            }
+
+            list.add(data);
+        }
+        return list;
+    }
+
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/ledger/dto/LedgerExportDataDto.java

@@ -19,5 +19,5 @@ import java.util.Map;
 public class LedgerExportDataDto{
     private Long configIntoId;
 
-    private Map<String, String> queryParam;
+    private Map<String, Object> queryParam;
 }

+ 26 - 0
src/main/java/com/xjrsoft/module/ledger/vo/GetWorkflowInfoVo.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.ledger.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 台账配置表表单出参
+* @Author dzx
+* @Date: 2024-03-06
+* @Version 1.0
+*/
+@Data
+public class GetWorkflowInfoVo {
+
+    /**
+    * 流程id
+    */
+    @ApiModelProperty("流程id")
+    private String processId;
+
+    /**
+     * 任务id
+     */
+    @ApiModelProperty("任务id")
+    private String taskId;
+}