lfx 1 рік тому
батько
коміт
78352a9dcc

+ 2 - 0
mjava-pake/pom.xml

@@ -2,6 +2,8 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>

+ 17 - 0
mjava-pake/src/main/java/com/malk/pake/schedule/ScheduleTask.java

@@ -1,6 +1,7 @@
 package com.malk.pake.schedule;
 
 import cn.hutool.http.HttpUtil;
+import com.malk.pake.service.PkMaintenanceWarningService;
 import com.malk.pake.service.PkWorkingHoursService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +24,8 @@ public class ScheduleTask {
 
     @Autowired
     private PkWorkingHoursService pkWorkingHoursService;
+    @Autowired
+    private PkMaintenanceWarningService pkMaintenanceWarningService;
 
     /**
      * 工时填写提醒-按月
@@ -71,4 +74,18 @@ public class ScheduleTask {
             e.printStackTrace();
         }
     }
+
+    /**
+     * 工程维保项目-维保预警
+     * 每天10:00重新计算维保剩余天数及变更维保预警状态,根据状态发送提醒
+     */
+    @Scheduled(cron = "0 0 10 * * ?")
+    public void maintenanceWarning() {
+        log.info("工程维保项目-维保预警");
+        try {
+            pkMaintenanceWarningService.warning();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 7 - 0
mjava-pake/src/main/java/com/malk/pake/service/PkMaintenanceWarningService.java

@@ -0,0 +1,7 @@
+package com.malk.pake.service;
+
+public interface PkMaintenanceWarningService {
+
+    void warning();
+
+}

+ 119 - 0
mjava-pake/src/main/java/com/malk/pake/service/impl/PkMaintenanceWarningServiceImpl.java

@@ -0,0 +1,119 @@
+package com.malk.pake.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.pake.service.PkMaintenanceWarningService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Notice;
+import com.malk.utils.UtilDateTime;
+import com.malk.utils.UtilEnv;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.Period;
+import java.util.*;
+
+@Service
+@Slf4j
+public class PkMaintenanceWarningServiceImpl implements PkMaintenanceWarningService {
+
+    @Autowired
+    private DDClient ddClient;
+    @Autowired
+    private DDClient_Notice ddClient_notice;
+    @Autowired
+    private YDClient ydClient;
+
+    private static String FORM_UUID="FORM-NO96679107GDYGUK9SM8T42G95KA2KZOMUELL4";
+
+    @Override
+    public void warning() {
+        LocalDate now=LocalDate.now();
+        int weekDay=now.getDayOfWeek().getValue();
+        List<Map> list= (List<Map>)ydClient.queryData(YDParam.builder().formUuid(FORM_UUID)
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_lleuoajr","工程维保")))
+                .build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        for (int i = 0; i < list.size(); i++) {
+            Map formData=UtilMap.getMap(list.get(i),"formData");
+            String formInstanceId=UtilMap.getString(list.get(i),"formInstanceId");
+            log.info("进度:{}/{}",i+1,list.size());
+            if(formData.containsKey("dateField_lvkegbgm")&&formData.containsKey("dateField_lvkegbgp")){
+                // 重新计算 维保剩余天数
+                LocalDateTime startTime= UtilDateTime.getLocalDateTimeFromTimestamp(UtilMap.getLong(formData,"dateField_lvkegbgm"));
+                LocalDateTime endTime=UtilDateTime.getLocalDateTimeFromTimestamp(UtilMap.getLong(formData,"dateField_lvkegbgp"));
+                if(startTime.isAfter(LocalDate.now().atStartOfDay())){
+                    startTime=LocalDate.now().atStartOfDay();
+                }
+                Period period=Period.between(startTime.toLocalDate(),endTime.toLocalDate());
+                int days=period.getDays();
+                String stats="";
+                // 提醒人员 仰洪波[033069386520314088]  肖林[810]
+                List<String> users=Arrays.asList("033069386520314088","810");
+                users.addAll(UtilMap.getList(formData,"employeeField_lqq12vtb_id"));
+                users.addAll(UtilMap.getList(formData,"employeeField_llemcq8c_id"));
+                String projectName=UtilMap.getString(formData,"textField_llemcq7b");
+                String url="https://bmogyb.aliwork.com/APP_UNSAR4O4Y7NBDUYXLIP4/formDetail/FORM-NO96679107GDYGUK9SM8T42G95KA2KZOMUELL4?formInstId="+formInstanceId;
+                boolean isSend=!"关闭".equals(UtilMap.getString(formData,"radioField_lw4p0nnl"));
+                if(days<0){
+                    stats="已过期";
+                    // 每天提醒
+                    sendNotice(users,"维保已过期,请及时续约,如无需继续维保,请及时更新系统维保信息。",url,isSend,projectName);
+                }else if(days>=0 && days<=90){
+                    stats="3个月内到期";
+                    // 周一到周五
+                    if(weekDay >= 1 && weekDay <= 5){
+                        sendNotice(users,"维保即将到期,请及时续约",url,isSend,projectName);
+                    }
+                }else if(days>=91 && days<=180){
+                    stats="6个月内到期";
+                    // 周一
+                    if(weekDay == 1){
+                        sendNotice(users,"维保即将到期,请做好维保合同续约准备",url,isSend,projectName);
+                    }
+                }else{
+                    stats="未到期";
+                    // 每年7-12月,每月1号10:00提醒1次
+                    if(now.getDayOfMonth()==1&&now.getMonthValue()>=7){
+                        sendNotice(users,"请提醒客户做好相关维保预算",url,isSend,projectName);
+                    }
+                }
+                Map upMap=new HashMap();
+                upMap.put("numberField_lvkegbgk",days);
+                upMap.put("selectField_lvkegbgn",stats);
+                ydClient.operateData(YDParam.builder().formInstId(formInstanceId).updateFormDataJson(JSONObject.toJSONString(upMap)).build(), YDConf.FORM_OPERATION.update);
+            }else{
+                log.info("未配置时间!");
+            }
+        }
+    }
+
+    private void sendNotice(List<String> users,String msg,String url,boolean isSend,String name){
+        if(!isSend){
+            return;
+        }
+        if(users==null||users.size()<1){
+            log.info("提醒用户列表为空");
+            return;
+        }
+        if(!UtilEnv.ENV_PROD.equals(UtilEnv.getActiveProfile())){
+            log.info("非生产环境,消息转发到开发人员。应收到人员列表:{}",users);
+            users= Arrays.asList("153620324221442254");
+        }
+        Map cardMap=new HashMap();
+        cardMap.put("btn_json_list",Arrays.asList(UtilMap.map("title, action_url","查看详情",url)));
+        cardMap.put("title","项目维保预警提醒");
+        cardMap.put("markdown","### 项目维保预警提醒  \n  项目【"+name+"】  \n  "+msg);
+        cardMap.put("btn_orientation",1);
+        Map msgMap=new HashMap();
+        msgMap.put("msgtype","action_card");
+        msgMap.put("action_card",cardMap);
+        ddClient_notice.sendNotification(ddClient.getAccessToken(),users,null,false,msgMap);
+    }
+}

+ 3 - 3
mjava-pake/src/main/resources/application-dev.yml

@@ -12,9 +12,9 @@ logging:
 
 # dingtalk
 dingtalk:
-  agentId: 2691784047
-  appKey: dinghbynhnd2dbgypmsa # dingn3i8b1htbuealing
-  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq #yrKb6sUl2sAT0YoQJ-1us1xYY9AWR4RG5RLlBA1Uaz1cVsbbfwcklVxVTeyDa1y_
+  agentId: 2664607479
+  appKey: dingn3i8b1htbuealing
+  appSecret: yrKb6sUl2sAT0YoQJ-1us1xYY9AWR4RG5RLlBA1Uaz1cVsbbfwcklVxVTeyDa1y_
   corpId:
   aesKey:
   token:

+ 24 - 0
mjava-pake/src/main/resources/application-prod.yml

@@ -0,0 +1,24 @@
+server:
+  port: 8104
+  servlet:
+    context-path: /pake
+enable:
+  scheduling: true
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/pake/log/
+  level:
+    com.malk.*: info
+
+# dingtalk
+dingtalk:
+  agentId: 2664607479
+  appKey: dingn3i8b1htbuealing
+  appSecret: yrKb6sUl2sAT0YoQJ-1us1xYY9AWR4RG5RLlBA1Uaz1cVsbbfwcklVxVTeyDa1y_
+  corpId:
+  aesKey:
+  token:
+# aliwork
+aliwork:
+  appType: APP_UNSAR4O4Y7NBDUYXLIP4
+  systemToken: HP666C71JQMCDBUHBETIS992J3SW3XKUKBCKL53

+ 8 - 9
mjava-pake/src/test/java/com/malk/pake/WorkingHoursTest.java

@@ -1,12 +1,8 @@
 package com.malk.pake;
 
 
-import com.alibaba.fastjson.JSONObject;
+import com.malk.pake.service.PkMaintenanceWarningService;
 import com.malk.pake.service.PkWorkingHoursService;
-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;
@@ -14,10 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
 @Slf4j
 @SpringBootTest
 @RunWith(SpringRunner.class)
@@ -25,9 +17,16 @@ public class WorkingHoursTest {
 
     @Autowired
     private PkWorkingHoursService pkWorkingHoursService;
+    @Autowired
+    private PkMaintenanceWarningService pkMaintenanceWarningService;
 
     @Test
     public void test(){
         pkWorkingHoursService.fillInReminderPeople();
     }
+
+    @Test
+    public void testYd(){
+        pkMaintenanceWarningService.warning();
+    }
 }