Explorar o código

Merge branch 'master' of https://mc.cloudpure.cn/mjava/cont

wzy hai 2 meses
pai
achega
f661e4bf6c

+ 6 - 0
mjava-huagao/pom.xml

@@ -30,10 +30,16 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>com.malk</groupId>
             <artifactId>base</artifactId>
             <version>1.1-SNAPSHOT</version>
+            <scope>compile</scope>
         </dependency>
     </dependencies>
 

+ 0 - 1
mjava-huagao/src/main/java/com/malk/huagao/HuaGaoApplication.java

@@ -5,7 +5,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 @SpringBootApplication(scanBasePackages = {"com.malk"})
-@EnableScheduling
 public class HuaGaoApplication {
     public static void main(String[] args) {
         try {

+ 0 - 1
mjava-huagao/src/main/java/com/malk/huagao/controller/HuaGaoController.java

@@ -28,7 +28,6 @@ public class HuaGaoController {
      */
     @PostMapping("/user/sync")
     McR syncUser() {
-
         log.info("syncUser");
         huaGaoService.syncDingTalk_exclusive();
         return McR.success();

+ 136 - 0
mjava-huagao/src/main/java/com/malk/huagao/schedule/ScheduleTask.java

@@ -0,0 +1,136 @@
+package com.malk.huagao.schedule;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.huagao.service.HuaGaoService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilDateTime;
+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.time.LocalTime;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @EnableScheduling 开启定时任务 [配置参考McScheduleTask]
+ */
+@Slf4j
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(name = {"enable.scheduling"})
+public class ScheduleTask {
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private HuaGaoService huaGaoService;
+
+    /**
+     */
+    @Scheduled(cron = "0 5 2 1 * ?")
+    public void syncMonths() {
+        log.info("考勤同步-月度");
+        LocalDateTime startTime= LocalDate.now().minusMonths(1).atTime(LocalTime.MIN);
+        LocalDateTime endTime= LocalDate.now().atTime(LocalTime.MIN);
+        List<String> time= Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)),String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));
+        try {
+            huaGaoService.syncKqData(startTime,endTime);
+            compSave(time,"同步成功","");
+        }catch (Exception e){
+            e.printStackTrace();
+            compSave(time,"异常",e.getMessage());
+        }
+    }
+
+    /**
+     */
+    @Scheduled(cron = "0 0 1 * * 1")
+    public void syncWeek() {
+        log.info("考勤同步-周度");
+        LocalDateTime startTime= LocalDate.now().minusWeeks(1).atTime(LocalTime.MIN);
+        LocalDateTime endTime= LocalDate.now().atTime(LocalTime.MIN);
+        List<String> time= Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)),String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));
+        try {
+            huaGaoService.syncKqData(startTime,endTime);
+            compSave(time,"同步成功","");
+        }catch (Exception e){
+            e.printStackTrace();
+            compSave(time,"异常",e.getMessage());
+        }
+    }
+
+    /**
+     */
+    @Scheduled(cron = "0 35 0 * * ?")
+    public void syncDay() {
+        log.info("考勤同步-昨天");
+        LocalDateTime startTime= LocalDate.now().minusDays(1).atTime(LocalTime.MIN);
+        LocalDateTime endTime= LocalDate.now().atTime(LocalTime.MIN);
+        List<String> time= Arrays.asList(String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(startTime)),String.valueOf(UtilDateTime.getLocalDateTimeTimeStamp(endTime)));
+        try {
+            huaGaoService.syncKqData(startTime,endTime);
+            compSave(time,"同步成功","");
+        }catch (Exception e){
+            e.printStackTrace();
+            compSave(time,"异常",e.getMessage());
+        }
+    }
+
+    /**
+     */
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void sync() {
+        List<Map> list=(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-0D560B9D8B64464C8C885FE20B7C7C95T4IA").pageSize(1)
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_m8nud6t3","待处理"))).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        log.info("手动同步查询-结果,{}",list.size());
+        if(list==null||list.size()<1){
+            return;
+        }
+        Map data=list.get(0);
+        log.info("{}",data);
+        String formInstanceId=String.valueOf(data.get("formInstanceId"));
+        processing(formInstanceId);
+        Map formData=UtilMap.getMap(data,"formData");
+        try {
+            List<String> timeList=UtilMap.getList(formData,"cascadeDateField_m8nud6sy");
+            LocalDateTime startTime= UtilDateTime.getLocalDateTimeFromTimestamp(Long.parseLong(timeList.get(0)));
+            LocalDateTime endTime=UtilDateTime.getLocalDateTimeFromTimestamp(Long.parseLong(timeList.get(1)));
+            huaGaoService.syncKqData(startTime,endTime);
+            comp(formInstanceId,"同步成功!","");
+        }catch (Exception e){
+            e.printStackTrace();
+            comp(formInstanceId,"异常",e.getMessage());
+        }
+    }
+
+    private void processing(String id){
+        ydClient.operateData(YDParam.builder().formInstanceId(id)
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map("selectField_m8nud6t3", "处理中")))
+                .build(), YDConf.FORM_OPERATION.update);
+    }
+
+    private void comp(String id,String result,String msg){
+        ydClient.operateData(YDParam.builder().formInstanceId(id)
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map("selectField_m8nud6t3, textField_m8nud6t9, textareaField_m8nud6tb", "已完成",result,msg)))
+                .build(), YDConf.FORM_OPERATION.update);
+    }
+
+    private void compSave(List<String> time,String result,String msg){
+        ydClient.operateData(YDParam.builder().formUuid("FORM-0D560B9D8B64464C8C885FE20B7C7C95T4IA")
+                .formDataJson(JSON.toJSONString(UtilMap.map("cascadeDateField_m8nud6sy, selectField_m8nud6t3, textField_m8nud6t9, textareaField_m8nud6tb", time,"已完成",result,msg)))
+                .build(), YDConf.FORM_OPERATION.create);
+    }
+
+}

+ 3 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/HuaGaoService.java

@@ -1,5 +1,6 @@
 package com.malk.huagao.service;
 
+import java.time.LocalDateTime;
 import java.util.Map;
 
 public interface HuaGaoService {
@@ -14,4 +15,6 @@ public interface HuaGaoService {
     void resetPwd(Map data);
 
     void getCheckWorkDateDetails(Map data);
+
+    void syncKqData(LocalDateTime startTime, LocalDateTime endTime);
 }

+ 57 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/impl/HuaGaoServiceImpl.java

@@ -1,6 +1,8 @@
 package com.malk.huagao.service.impl;
 
+import cn.hutool.core.util.NumberUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.malk.huagao.service.HuaGaoService;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
@@ -12,6 +14,7 @@ import com.malk.service.dingtalk.DDClient;
 import com.malk.service.dingtalk.DDClient_Attendance;
 import com.malk.service.dingtalk.DDClient_Contacts;
 import com.malk.service.fxiaoke.FXKClient;
+import com.malk.utils.UtilDateTime;
 import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +22,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.util.*;
 
 @Slf4j
@@ -183,6 +187,59 @@ private Map crcreateUser_dingTalk(String name, String randomAccount, String rand
 
     }
 
+    @Override
+    public void syncKqData(LocalDateTime startTime, LocalDateTime endTime) {
+        String stTime=UtilDateTime.formatLocal(startTime,UtilDateTime.DATE_TIME_PATTERN);
+        String edTime=UtilDateTime.formatLocal(endTime,UtilDateTime.DATE_TIME_PATTERN);
+        List<Map> list=ydService.queryAllFormData(YDParam.builder().formUuid("FORM-5061F7AE543B429C8241EC730A6F31653NNK").build());
+        for(Map map:list){
+            Map formData= UtilMap.getMap(map,"formData");
+            String deptId=String.valueOf(UtilMap.getList(formData,"departmentSelectField_m8e4zaju_id").get(0));
+            String price=UtilMap.getString(formData,"numberField_m8e4zajw_value");
+            List<String> users=ddClient_contacts.listDepartmentUserId(ddClient.getAccessToken(),Long.parseLong(deptId));
+            for (String user : users) {
+                List<Map> valList=ddClientAttendance.getAttColumnVal(ddClient.getAccessToken(),user, Arrays.asList("82772106","89349019","82772125"),stTime,edTime);
+                if(valList!=null&&valList.size()==3){
+                    Map<String,Map<String,String>> dateMap=toDateMap(valList);
+                    for (String date:dateMap.keySet()) {
+                        Map<String,String> dataMap=dateMap.get(date);
+                        String workTime="休息".equals(dataMap.get("82772125"))?
+                                dataMap.get("89349019"): NumberUtil.add(dataMap.get("89349019"),dataMap.get("82772106")).toString();
+                        saveData(user,date,workTime,price);
+                    }
+                }
+            }
+        }
+    }
+
+    private Map<String,Map<String,String>> toDateMap(List<Map> valList){
+        Map<String,Map<String,String>>  result = new HashMap<>();
+        for(Map map:valList){
+            String columnId=UtilMap.getString(UtilMap.getMap(map,"column_vo"),"id");
+            List<Map> list=UtilMap.getList(map,"column_vals");
+            for(Map map1:list){
+                String date=UtilMap.getString(map1,"date");
+                String value=UtilMap.getString(map1,"value");
+                value=columnId.equals("82772106")?NumberUtil.round(NumberUtil.div(value,"60"),2).toString():value; // 工作时长 分钟转小时
+                if(result.containsKey(date)){
+                    result.get(date).put(columnId,value);
+                }else{
+                    result.put(date,UtilMap.map(columnId,value));
+                }
+            }
+        }
+        return result;
+    }
+
+    private void saveData(String userId,String date,String gs,String price){
+        Long dateTime= UtilDateTime.getLocalDateTimeTimeStamp(UtilDateTime.parseLocalDateTime(date));
+        Map saveMap=UtilMap.map("employeeField_m8cu0g58, dateField_m8e53oef, numberField_m8ctvm2e, numberField_m8e53oeg, numberField_m8e53oeh",
+                Arrays.asList(userId),dateTime,gs,price,NumberUtil.mul(gs,price));
+        ydClient.operateData(YDParam.builder().formUuid("FORM-78BF5DE20E244369BD475C11A5CA48A0ZAQJ")
+                .searchCondition(JSONObject.toJSONString(UtilMap.map("employeeField_m8cu0g58, dateField_m8e53oef", userId,Arrays.asList(dateTime,dateTime))))
+                .formDataJson(JSONObject.toJSONString(saveMap)).build(), YDConf.FORM_OPERATION.upsert);
+    }
+
     /**
      * 生成一个由大写字母和数字组成的八位随机账号。
      *

+ 5 - 4
mjava-huagao/src/main/resources/application-dev.yml

@@ -4,11 +4,12 @@ server:
     context-path: /huagao
 
 enable:
-  scheduling: false
+  scheduling: true
 logging:
+  config: classpath:logback-spring.xml
   path: /home/server/huagao/log/
   level:
-    com.malk.*: debug
+    com.malk.*: info
 
 # dingtalk
 dingtalk:
@@ -22,7 +23,7 @@ dingtalk:
 
 # aliwork
 aliwork:
-  appType: APP_FWH90IADKEXJ1O540RCM
-  systemToken: IDD66DC1H2ITY3HU789SK9IFJXKD2RL8BF28MBF1
+  appType: APP_BWPT6ET90UEE8IBEY9GJ
+  systemToken: 37766HD145ST2RBB9S4D37J2WMNU293GASC8M6Q
 
 

+ 61 - 0
mjava-huagao/src/main/resources/logback-spring.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="false" scanPeriod="60 seconds">
+    <springProperty scope="context" name="LOG_HOME" source="logging.path" defaultValue="/home/server/log/"/>
+    <property name="FileNamePattern" value="${LOG_HOME}%d{yyyyMM}/%d{dd}"/>
+
+    <!-- 定义控制台输出 -->
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - [%thread] - %-5level - %logger{50} - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <!--<file>${FileNamePattern}/info.log</file>-->
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${FileNamePattern}/info-%i.log</fileNamePattern>
+            <MaxHistory>30</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <MaxFileSize>30MB</MaxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
+        </layout>
+    </appender>
+
+    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
+        <discriminator>
+            <Key>processid</Key>
+            <DefaultValue>sys</DefaultValue>
+        </discriminator>
+        <sift>
+            <appender name="FILE-${processid}"
+                      class="ch.qos.logback.core.rolling.RollingFileAppender">
+                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+                    <FileNamePattern>
+                        ${FileNamePattern}/${processid}.log
+                    </FileNamePattern>
+                </rollingPolicy>
+                <layout class="ch.qos.logback.classic.PatternLayout">
+                    <Pattern>
+                        %d{yyyyMMdd:HH:mm:ss.SSS} [%thread] %-5level %msg%n
+                    </Pattern>
+                </layout>
+            </appender>
+        </sift>
+    </appender>
+
+
+    <!-- 日志输出级别 -->
+    <logger name="org.springframework" level="debug"  additivity="false"/>
+    <logger name="com.zitoo.connecter" level="debug"/>
+    <root level="INFO">
+        <appender-ref ref="stdout"/>
+        <appender-ref ref="appLogAppender"/>
+        <appender-ref ref="SIFT"/>
+    </root>
+</configuration>

+ 85 - 0
mjava-huagao/src/test/java/com/malk/huagao/YyYdTest.java

@@ -0,0 +1,85 @@
+package com.malk.huagao;
+
+import cn.hutool.core.util.NumberUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.huagao.service.HuaGaoService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Alibtrip;
+import com.malk.service.dingtalk.DDClient_Attendance;
+import com.malk.service.dingtalk.DDClient_Contacts;
+import com.malk.utils.UtilDateTime;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/***
+ * 逸耀宜搭
+ */
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class YyYdTest {
+
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private HuaGaoService huaGaoService;
+
+    @Test
+    public void test() {
+        List<Map> list=(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-0D560B9D8B64464C8C885FE20B7C7C95T4IA")                .pageSize(1)
+        .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_m8nud6t3","待处理"))).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        if(list==null||list.size()<1){
+            return;
+        }
+        Map data=list.get(0);
+        log.info("{}",data);
+        String formInstanceId=String.valueOf(data.get("formInstanceId"));
+        processing(formInstanceId);
+        Map formData=UtilMap.getMap(data,"formData");
+        try {
+            List<String> timeList=UtilMap.getList(formData,"cascadeDateField_m8nud6sy");
+            LocalDateTime startTime=UtilDateTime.getLocalDateTimeFromTimestamp(Long.parseLong(timeList.get(0)));
+            LocalDateTime endTime=UtilDateTime.getLocalDateTimeFromTimestamp(Long.parseLong(timeList.get(1)));
+            huaGaoService.syncKqData(startTime,endTime);
+            comp(formInstanceId,"同步成功!","");
+        }catch (Exception e){
+            e.printStackTrace();
+            comp(formInstanceId,"异常",e.getMessage());
+        }
+    }
+
+    private void processing(String id){
+        ydClient.operateData(YDParam.builder().formInstanceId(id)
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map("selectField_m8nud6t3", "处理中")))
+                .build(), YDConf.FORM_OPERATION.update);
+    }
+
+    private void comp(String id,String result,String msg){
+        ydClient.operateData(YDParam.builder().formInstanceId(id)
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map("selectField_m8nud6t3, textField_m8nud6t9, textareaField_m8nud6tb", "已完成",result,msg)))
+                .build(), YDConf.FORM_OPERATION.update);
+    }
+
+    @Test
+    public void test1() {
+//        List<Map> attColumns = ddClientAttendance.getAttColumns(ddClient.getAccessToken());
+//        System.out.println(attColumns);
+    }
+}

+ 1 - 3
mjava-mc/src/main/java/com/malk/mc/controller/McBotController.java

@@ -58,9 +58,7 @@ public class McBotController {
         String text=param.getJSONObject("text").getString("content");
         if(text.contains("群信息")){
             sendBotTextMsgByWebhook(param.getString("sessionWebhook"),
-                    "群ID:"+param.getString("conversationId") +
-                        "\nrobotCode:"+param.getString("robotCode") +
-                        "\nchatbotUserId:"+param.getString("chatbotUserId"));
+                    "群ID:"+param.getString("conversationId"));
         }
         return McR.success();
     }

+ 33 - 3
mjava-mc/src/main/java/com/malk/mc/controller/McDdController.java

@@ -3,19 +3,23 @@ package com.malk.mc.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.server.common.McException;
 import com.malk.server.common.McR;
+import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.dingtalk.DDClient;
 import com.malk.service.dingtalk.DDClient_Group;
 import com.malk.service.dingtalk.DDClient_Report;
+import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 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 com.malk.service.dingtalk.DDClient_Attendance;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @RestController
@@ -29,6 +33,11 @@ public class McDdController {
     @Autowired
     private DDClient ddClient;
 
+    @Autowired
+    private DDClient_Attendance ddClientAttendance;
+
+
+
     @PostMapping("/group/createGroupByTemp")
     public McR createGroupByTemp(@RequestBody JSONObject param){
         log.info("创建场景群:{}",param);
@@ -53,4 +62,25 @@ public class McDdController {
         return McR.success(result);
     }
 
+    @PostMapping("/attendence/getAttendenceDetail")
+    public McR getAttendenceDetail(@RequestBody JSONObject param) throws ParseException {
+        log.info("考勤参数详情:{}",param);
+        McException.assertParamException_Null(param,"checkDateFrom","checkDateTo","userIds");
+        String accessToken = ddClient.getAccessToken();
+        List userIds = (List) param.get("userIds");
+        String checkDateFrom = param.getString("checkDateFrom")+" 00:00:00";
+        String checkDateTo = param.getString("checkDateTo")+" 00:00:00";
+        List<Map> results = ddClientAttendance.listAttendanceRecord(accessToken, userIds, checkDateFrom, checkDateTo);
+        log.info("获取考勤详情:{}",results);
+        Set<String> addressList = new HashSet<>();
+        String address = "";
+        for(Map result:results){
+            System.out.println("result:"+result.get("userAddress"));
+            addressList.add(result.get("userAddress").toString()) ;
+        }
+        System.out.println("address:"+addressList) ;
+         address = addressList.stream().collect(Collectors.joining(","));
+        return McR.success(address);
+    }
+
 }

+ 1 - 1
mjava-mc/src/main/resources/application-dev.yml

@@ -14,7 +14,7 @@ logging:
   config: classpath:logback-spring.xml
   path: /home/server/mc/log/
   level:
-    com.malk.*: debug
+    com.malk.*: info
 
 # dingtalk
 dingtalk:

+ 103 - 0
mjava-mc/src/test/java/com/malk/mc/McTest.java

@@ -0,0 +1,103 @@
+package com.malk.mc;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.mc.service.McYdService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Extension;
+import com.malk.service.dingtalk.DDClient_Workflow;
+import com.malk.utils.UtilDateTime;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class McTest {
+
+    @Autowired
+    private DDClient_Extension ddClientExtension;
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private DDClient ddClient;
+
+    @Test
+    public void test8(){
+        MDC.put("MDC_KEY_PID","1041");
+        String str="{   \"state\": \"实施中\",   \"color\": \"绿\",   \"projectName\": \"AIOA\",   \"submitter\": \"钉三多\",   \"content\": \"三楼没空调\",   \"finishDate\": \"05月20日 12:00\",   \"redirectUrl\": \"https://www.dingtalk.com/\" }";
+        Map<String,Object> data = new HashMap();
+        data.put("imGroupOpenDeliverModel",UtilMap.map("robotCode","dingrlahvtc530jgfati"));
+
+        Map map = ddClientExtension.createAndDeliverCards(ddClient.getAccessToken(),"a2ea5959-0307-4e7e-9f1a-f86614b772ba.schema","1212",
+                UtilMap.map("cardParamMap",JSONObject.parseObject(str)),"dtv1.card//IM_GROUP.cidSkF0KW3Z18zr2/lGPqCk0g==",data);
+
+        System.out.println(map);
+    }
+
+    @Test
+    public void test9(){
+        MDC.put("MDC_KEY_PID","1041");
+        List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-3EFF01F12DFF4CA0B0A8ADD735C664B1GY5L")
+                .createFromTimeGMT(LocalDate.now().minusDays(1).toString()+" 02:00:00")
+                .createToTimeGMT(LocalDate.now().toString()+" 01:59:59").build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        String text="### 交付部今日工作安排\n";
+        List<String> userIds=new ArrayList<>();
+        for(Map map:data){
+            Map formData = (Map) map.get("formData");
+            userIds.add(String.valueOf(map.get("creatorUserId")));
+            text=text+"@"+String.valueOf(map.get("creatorUserId"))+"核心事项" + strFormat("\n"+String.valueOf(formData.get("textareaField_m8479h6d")))+"\n\n";
+        }
+        System.out.println(text);
+//        JSONObject object=new JSONObject();
+//        object.put("msgtype","text");
+//        object.put("text",UtilMap.map("content",text));
+//        object.put("at",UtilMap.map("atUserIds, isAtAll",userIds,false));
+//        String result=HttpUtil.createPost("https://oapi.dingtalk.com/robot/send?access_token=8717934232803fed4496ae5e64fa7f3c7a3db58c786e6517ce74af5208664e07")
+//                .body(JSONObject.toJSONString(object)).execute().body();
+//        System.out.println(result);
+    }
+
+    private String strFormat(String input){
+        StringBuilder output = new StringBuilder(input);
+        int count = 0;
+        int index = 0;
+
+        while ((index = output.indexOf("\n", index)) != -1) {
+            count++; // 计数器增加
+            output.insert(index + 1, "工作"+count+" "); // 在 \n 后插入数字
+            index += 2; // 跳过插入的数字,继续查找下一个 \n
+        }
+        return output.toString();
+    }
+
+    @Autowired
+    private DDClient_Workflow ddClientWorkflow;
+
+    @Test
+    public void test10(){
+        ddClientWorkflow.createTBTask(ddClient.getAccessToken(),"","标题","描述",
+                UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.now().plusDays(7).atTime(LocalTime.MAX)), Arrays.asList(""),Arrays.asList("")
+        ,UtilMap.map("appUrl, pcUrl","www","www"),false,30,UtilMap.map("dingNotify","1"));
+    }
+
+    @Test
+    public void test1(){
+        log.info("test1");
+    }
+}

+ 0 - 10
mjava-mc/src/test/java/com/malk/mc/YyYdTest.java

@@ -371,14 +371,4 @@ public class YyYdTest {
             }
         }
     }
-
-    @Autowired
-    private McYdService mcYdService;
-
-    @Test
-    public void test7(){
-        mcYdService.saveApproverToForm(UtilMap.map("formInstId, key","7fa8fd99-c513-4b7a-b74d-7466e3051e01","employeeField_m7vdpfgm"));
-    }
-
-
 }

+ 2 - 2
mjava-xzkj/src/main/java/com/malk/xzkj/controller/IVController.java

@@ -168,7 +168,7 @@ public class IVController {
             String kind = UtilMap.getString(item, "TypeDescription");
             String invoiceName = UtilMap.getString(item, "SubTypeDescription");
             if (kind.equals("全电发票")) {
-                kind = invoiceName.contains("专用发票") ? "全电专用发票" : "全电普通发票";
+                kind = invoiceName.contains("铁路电子客票")?"火车票":invoiceName.contains("专用发票") ? "全电专用发票" : "全电普通发票";
             }
             if (kind.equals("增值税发票")) {
                 kind = invoiceName.contains("增值税专用发票") ? "增值税专用发票" : "增值税普通发票";
@@ -329,7 +329,7 @@ public class IVController {
                 McException.exceptionAccess(serial + "已存在, 请勿重复提交!");
             }
             // prd 仅仅识别 报销 用途的发票
-            if (dto.getType().equals("报销") && !dto.getKindName().contains("车票") && !dto.getKindName().contains("车发票") && !dto.getKindName().contains("定额发票")) {
+            if (dto.getType().contains("报销") && !dto.getKindName().contains("车票") && !dto.getKindName().contains("车发票") && !dto.getKindName().contains("定额发票")) {
                 String serialTips = serial + "有疑问";
                 try {
                     // ppExt: 识别与验真后抬头对比 [全电票, 新版本识别接口, 返回名称为: 电子发票(普通发票) 不包含全电标识, 发类型为: 全电发票. 注意取值]