Ver código fonte

预算导入项目点功能调整

lfx 5 meses atrás
pai
commit
6ec9ea0e09

+ 2 - 2
mjava-lanyun/src/main/java/com/malk/lanyun/controller/YdYsController.java

@@ -35,7 +35,7 @@ public class YdYsController {
     @PostMapping("saveYsDataByFile")
     public McR saveYsDataByFile(@RequestBody JSONObject param) {
         log.info("解析预算文件,入参: {} ", param);
-        McException.assertParamException_Null(param,"url","type","yearStr","year","importType");
+        McException.assertParamException_Null(param,"url","type","yearStr","year","importType","formInstanceId");
         String id= UUID.randomUUID().toString();
         String fileName = "/home/"+id+".xlsx";
         String url=ydClient.convertTemporaryUrl(param.getString("url"));
@@ -43,7 +43,7 @@ public class YdYsController {
         if(param.getString("importType").equals("项目点")){
             EasyExcel.read(fileName, Budget.class, new BudgetListenerForProject(ydClient,param.getString("type"),param.getString("yearStr"))).sheet().headRowNumber(3).doRead();
         }else{
-            EasyExcel.read(fileName, Budget.class, new BudgetListener(ydClient,param.getString("type"),param.getString("yearStr"),param.getString("year"))).sheet().headRowNumber(3).doRead();
+            EasyExcel.read(fileName, Budget.class, new BudgetListener(ydClient,param.getString("type"),param.getString("yearStr"),param.getString("year"),param.getString("formInstanceId"))).sheet().headRowNumber(3).doRead();
         }
         FileUtil.del(fileName);
         return McR.success();

+ 16 - 1
mjava-lanyun/src/main/java/com/malk/lanyun/listener/BudgetListener.java

@@ -34,19 +34,22 @@ public class BudgetListener extends AnalysisEventListener<Budget> {
     private String type;
     private String yearStr;
     private String year;
+    private String formInstanceId;
+    private int successNum=0;
 
     /**
      * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
      *
      * @param ydClient
      */
-    public BudgetListener(YDClient ydClient,String type,String yearStr,String year) {
+    public BudgetListener(YDClient ydClient,String type,String yearStr,String year,String formInstanceId) {
         System.out.println("开始解析数据");
         System.out.println("开始解析数据....");
         this.ydClient = ydClient;
         this.type = type;
         this.yearStr = yearStr;
         this.year = year;
+        this.formInstanceId=formInstanceId;
     }
 
     /**
@@ -92,6 +95,7 @@ public class BudgetListener extends AnalysisEventListener<Budget> {
 
         String[] keys={"getJanuary","getFebruary","getMarch","getApril","getMay","getJune","getJuly","getAugust","getSeptember","getOctober","getNovember","getDecember"};
         String totalYearYs=null;
+        int num=0;
         for (Budget budget:list){
             String totalYs=null;
             String kmdl=budget.getProject().split("-")[0];
@@ -102,6 +106,7 @@ public class BudgetListener extends AnalysisEventListener<Budget> {
                 String yearMonth= String.valueOf(date.atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli());
                 String data=ReflectUtil.invoke(budget, keys[i]);
                 if(data!=null&&!data.equals("")&&!data.equals("-")){
+                    num++;
                     data=data.replaceAll(",","");
                     System.out.println("月份:"+i+"科目编码:"+budget.getKmbm()+"数据值:"+data);
                     totalYs= NumberUtil.add((totalYs==null?"0":totalYs),data).toString();
@@ -119,11 +124,20 @@ public class BudgetListener extends AnalysisEventListener<Budget> {
         for (Map map:errorList){
             try {
                 operateData(map);
+                successNum++;
             } catch (Exception e) {
                 System.out.println("重试错误!"+JSONObject.toJSONString(map));
                 e.printStackTrace();
             }
         }
+        Map upMap=new HashMap();
+        upMap.put("selectField_m5f4hrlq","导入成功");
+        upMap.put("textField_m5f4hrlv","导入完成");
+        upMap.put("numberField_m5g2gy0t",list.size());
+        upMap.put("numberField_m5g2gy0u",successNum);
+        upMap.put("numberField_m5g2gy0v",num);
+        ydClient.operateData(YDParam.builder().formInstanceId(formInstanceId).appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP").updateFormDataJson(JSONObject.toJSONString(upMap)).build(), YDConf.FORM_OPERATION.update);
         System.out.println("存储数据库成功!");
     }
 
@@ -170,6 +184,7 @@ public class BudgetListener extends AnalysisEventListener<Budget> {
         map.put("selectField_lw8tykcu","可用"); // 状态
         try {
             operateData(map);
+            successNum++;
         }catch (Exception e){
             e.printStackTrace();
             errorList.add(map);

+ 2 - 2
mjava-lanyun/src/main/java/com/malk/lanyun/listener/BudgetListenerForProject.java

@@ -155,11 +155,11 @@ public class BudgetListenerForProject extends AnalysisEventListener<Budget> {
                 table.get(UtilMap.getInt(detail,"index")).put("numberField_lrru2tnw",map.get("type5")); // 设备定额
                 String used3=UtilMap.getString(table.get(UtilMap.getInt(detail,"index")),"numberField_ludujw4f"); // 已用物耗定额
                 String used5=UtilMap.getString(table.get(UtilMap.getInt(detail,"index")),"numberField_ludujw4i"); // 已用设备定额
-                if(used3!=null&&!used3.equals("")&&!used3.equals("null")&&!used3.equals("0")){
+                if(used3!=null&&!used3.equals("null")&&!used3.equals("0")){
                     used3="0";
                 }
                 table.get(UtilMap.getInt(detail,"index")).put("numberField_lrru2tnv",NumberUtil.sub(String.valueOf(map.get("type3")),used3).toString()); // 剩余物耗定额
-                if(used5!=null&&!used5.equals("")&&!used5.equals("null")&&!used5.equals("0")){
+                if(used5!=null&&!used5.equals("null")&&!used5.equals("0")){
                     used5="0";
                 }
                 table.get(UtilMap.getInt(detail,"index")).put("numberField_ludre3z5",NumberUtil.sub(String.valueOf(map.get("type5")),used5).toString()); // 剩余设备定额

+ 97 - 0
mjava-lanyun/src/main/java/com/malk/lanyun/schedule/BudgetUploadTask.java

@@ -0,0 +1,97 @@
+package com.malk.lanyun.schedule;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.lang.UUID;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.lanyun.entity.Budget;
+import com.malk.lanyun.listener.BudgetListener;
+import com.malk.lanyun.listener.BudgetListenerForProject;
+import com.malk.lanyun.service.FService;
+import com.malk.lanyun.service.SyncAssetsService;
+import com.malk.lanyun.service.TimerService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"budget.scheduling"})
+public class BudgetUploadTask {
+
+    @Autowired
+    private YDClient ydClient;
+
+    /**
+     * 每3分钟执行一次
+     */
+    @Scheduled(cron = "20 0/3 * * * ?")
+    public void syncDingTalkFailedList() {
+        log.info("{}开始执行预算导入程序...", LocalDateTime.now());
+        List<Map> list=(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-DCBC92CE004244569BC22A759FB7D2853GEA").appType("APP_ERBDTFS82HOVBPL3NFH0")
+                        .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP").searchCondition(JSONObject.toJSONString(UtilMap.map("selectField_m5f4hrlq","待导入")))
+                        .pageSize(1).build(),
+                YDConf.FORM_QUERY.retrieve_list_all).getData();
+        log.info("查询到待导入数据条数:{}",list.size());
+        for (Map map:list){
+            System.out.println(map);
+            Map formData=UtilMap.getMap(map,"formData");
+            boolean isUpdateDe=UtilMap.getString(formData,"selectField_m4cbvkth").equals("是");
+            String formInstanceId=UtilMap.getString(map,"formInstanceId");
+            String id= UUID.randomUUID().toString();
+            String fileName = "/home/"+id+".xlsx";
+            Map upMap=UtilMap.map("selectField_m5f4hrlq, selectField_m5f4hrlr","导入中",(isUpdateDe?"导入中":"无需处理"));
+            updateState(formInstanceId,upMap);
+            upMap=new HashMap();
+            String url=ydClient.convertTemporaryUrl(UtilMap.getString(formData,"textField_m4718ynv"));
+            HttpUtil.downloadFile(url,fileName);
+            try {
+                EasyExcel.read(fileName, Budget.class, new BudgetListener(ydClient,UtilMap.getString(formData,"textField_lw8vg19m"),
+                        UtilMap.getString(formData,"textField_lw7sg8ho"),UtilMap.getString(formData,"dateField_lvxkipwr"),formInstanceId)).sheet().headRowNumber(3).doRead();
+            }catch (Exception e){
+                e.printStackTrace();
+                upMap.put("selectField_m5f4hrlq","导入失败");
+                upMap.put("textField_m5f4hrlv","导入出错!错误信息:"+e.getMessage());
+            }
+            if(isUpdateDe){
+                try {
+                    EasyExcel.read(fileName, Budget.class, new BudgetListenerForProject(ydClient,UtilMap.getString(formData,"textField_lrr3rg6h"),UtilMap.getString(formData,"textField_lw7sg8ho"))).sheet().headRowNumber(3).doRead();
+                    upMap.put("selectField_m5f4hrlr","导入成功");
+                    upMap.put("textField_m5f4hrlw","导入完成");
+                }catch (Exception e){
+                    e.printStackTrace();
+                    upMap.put("selectField_m5f4hrlr","导入失败");
+                    upMap.put("textField_m5f4hrlw","导入出错!错误信息:"+e.getMessage());
+                }
+            }
+            updateState(formInstanceId,upMap);
+            FileUtil.del(fileName);
+        }
+        log.info("{}预算导入程序执行完成!",LocalDateTime.now());
+    }
+
+    private void updateState(String formInstanceId,Map upMap){
+        ydClient.operateData(YDParam.builder().formInstanceId(formInstanceId).appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP").updateFormDataJson(JSONObject.toJSONString(upMap)).build(), YDConf.FORM_OPERATION.update);
+    }
+
+}

+ 3 - 0
mjava-lanyun/src/main/resources/application-prod.yml

@@ -13,6 +13,9 @@ nc:
   scheduling: true        # 定时任务是否执行
   multiSource: false      # 是否多数据源配置
 
+budget:
+  scheduling: true        # 定时任务是否执行
+
 spring:
   # database
   datasource:

+ 61 - 4
mjava-lanyun/src/test/java/ysTest.java

@@ -1,11 +1,16 @@
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.UUID;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSONObject;
 import com.malk.lanyun.Boot;
 import com.malk.lanyun.entity.Budget;
 import com.malk.lanyun.listener.BudgetListener;
 import com.malk.lanyun.listener.BudgetListenerForProject;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
 import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -13,6 +18,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Slf4j
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = Boot.class)
@@ -25,18 +34,66 @@ public class ysTest {
     public void test(){
         String id= UUID.randomUUID().toString();
         String fileName = "/home/"+id+".xlsx";
-        String url=ydClient.convertTemporaryUrl("/ossFileHandle?appType=APP_ERBDTFS82HOVBPL3NFH0&fileName=APP_ERBDTFS82HOVBPL3NFH0_MDk1MzU4MDE2Ni0xNDE2MzIxNDg1X01IRDY2VTgxVEsyUjdQWk9FSU9NSzVSSUtBSEkyS1gxUk1RNE1PNw$$.xlsx&instId=&type=download");
+        String url=ydClient.convertTemporaryUrl("/ossFileHandle?appType=APP_ERBDTFS82HOVBPL3NFH0&fileName=APP_ERBDTFS82HOVBPL3NFH0_MDMwNzU4MDUxOTMwNzc4MDM3XzNXODY2N0QxTExJUkhEM1JFMTEyMERLT1EyREQyTzFITFZCNU1XNw$$.xlsx&instId=&type=download");
         HttpUtil.downloadFile(url,fileName);
-        EasyExcel.read(fileName, Budget.class, new BudgetListener(ydClient,"信息技术部","2024","1704038400000")).sheet().headRowNumber(3).doRead();
+        EasyExcel.read(fileName, Budget.class, new BudgetListener(ydClient,"工程部(机关)","2025","1735660800000","")).sheet().headRowNumber(3).doRead();
     }
 
     @Test
     public void test2(){
         String id= UUID.randomUUID().toString();
+        // "{\"importType\":\"预算\",\"yearStr\":\"2025\",\"year\":1735660800000,\"type\":\"(苏州·吴江)MAX科技园\",\"url\":\"\"}"
         String fileName = "/home/"+id+".xlsx";
-        String url=ydClient.convertTemporaryUrl("/ossFileHandle?appType=APP_ERBDTFS82HOVBPL3NFH0&fileName=APP_ERBDTFS82HOVBPL3NFH0_MDk1MzU4MDE2Ni0xNDE2MzIxNDg1X01IRDY2VTgxVEsyUjdQWk9FSU9NSzVSSUtBSEkyS1gxUk1RNE1PNw$$.xlsx&instId=&type=download");
+        String url=ydClient.convertTemporaryUrl("/ossFileHandle?appType=APP_ERBDTFS82HOVBPL3NFH0&fileName=APP_ERBDTFS82HOVBPL3NFH0_MDMwNzU4MDUxOTMwNzc4MDM3XzJZODY2WTcxRVVJUjFCRkZDMjROUkFVVzc4M0MyVEMyUDJGNU1DQw$$.xlsx&instId=&type=download");
         HttpUtil.downloadFile(url,fileName);
-        EasyExcel.read(fileName, Budget.class, new BudgetListenerForProject(ydClient,"PM00177","2024")).sheet().headRowNumber(3).doRead();
+        EasyExcel.read(fileName, Budget.class, new BudgetListenerForProject(ydClient,"PM00408","2025")).sheet().headRowNumber(3).doRead();
+    }
+
+    @Test
+    public void at(){
+        List<Map> list=(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-DCBC92CE004244569BC22A759FB7D2853GEA").appType("APP_ERBDTFS82HOVBPL3NFH0")
+                        .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP").searchCondition(JSONObject.toJSONString(UtilMap.map("selectField_m5f4hrlq","待导入")))
+                        .pageSize(1).build(),
+                YDConf.FORM_QUERY.retrieve_list_all).getData();
+        for (Map map:list){
+            System.out.println(map);
+            Map formData=UtilMap.getMap(map,"formData");
+            boolean isUpdateDe=UtilMap.getString(formData,"selectField_m4cbvkth").equals("是");
+            String formInstanceId=UtilMap.getString(map,"formInstanceId");
+            String id= UUID.randomUUID().toString();
+            String fileName = "/home/"+id+".xlsx";
+            Map upMap=UtilMap.map("selectField_m5f4hrlq, selectField_m5f4hrlr","导入中",(isUpdateDe?"导入中":"无需处理"));
+            updateState(formInstanceId,upMap);
+            upMap=new HashMap();
+            String url=ydClient.convertTemporaryUrl(UtilMap.getString(formData,"textField_m4718ynv"));
+            HttpUtil.downloadFile(url,fileName);
+            try {
+                EasyExcel.read(fileName, Budget.class, new BudgetListener(ydClient,UtilMap.getString(formData,"textField_lw8vg19m"),
+                        UtilMap.getString(formData,"textField_lw7sg8ho"),UtilMap.getString(formData,"dateField_lvxkipwr"),formInstanceId)).sheet().headRowNumber(3).doRead();
+            }catch (Exception e){
+                e.printStackTrace();
+                upMap.put("selectField_m5f4hrlq","导入失败");
+                upMap.put("textField_m5f4hrlv","导入出错!错误信息:"+e.getMessage());
+            }
+            if(isUpdateDe){
+                try {
+                    EasyExcel.read(fileName, Budget.class, new BudgetListenerForProject(ydClient,UtilMap.getString(formData,"textField_lrr3rg6h"),UtilMap.getString(formData,"textField_lw7sg8ho"))).sheet().headRowNumber(3).doRead();
+                    upMap.put("selectField_m5f4hrlr","导入成功");
+                    upMap.put("textField_m5f4hrlw","导入完成");
+                }catch (Exception e){
+                    e.printStackTrace();
+                    upMap.put("selectField_m5f4hrlr","导入失败");
+                    upMap.put("textField_m5f4hrlw","导入出错!错误信息:"+e.getMessage());
+                }
+            }
+            updateState(formInstanceId,upMap);
+            FileUtil.del(fileName);
+        }
+    }
+
+    private void updateState(String formInstanceId,Map upMap){
+        ydClient.operateData(YDParam.builder().formInstanceId(formInstanceId).appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP").updateFormDataJson(JSONObject.toJSONString(upMap)).build(), YDConf.FORM_OPERATION.update);
     }