Procházet zdrojové kódy

12点定时发消息

wuweihao před 2 roky
rodič
revize
d289b83b67

+ 2 - 0
gis_application/src/main/java/com/gis/GisApplication.java

@@ -3,7 +3,9 @@ package com.gis;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
+@EnableScheduling
 @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
 public class GisApplication {
 

+ 15 - 0
gis_application/src/main/resources/application-dev.properties

@@ -28,6 +28,21 @@ spring.mvc.static-path-pattern=/${server.url.prefix}/**
 ### \u5339\u914D\u8DEF\u5F84
 spring.resources.static-locations=file:\\${server.file.path}
 
+# Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09
+spring.redis.database=0
+spring.redis.host=127.0.0.1
+spring.redis.port=6379
+spring.redis.password=
+# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4 \u5355\u4F4D ms\uFF08\u6BEB\u79D2\uFF09
+spring.redis.timeout=3000ms
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u9ED8\u8BA4\u503C\u4E5F\u662F8\u3002
+spring.redis.jedis.pool.max-idle=8
+#\u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u9ED8\u8BA4\u503C\u4E5F\u662F0\u3002
+spring.redis.jedis.pool.min-idle=0
+# \u5982\u679C\u8D4B\u503C\u4E3A-1\uFF0C\u5219\u8868\u793A\u4E0D\u9650\u5236\uFF1B\u5982\u679Cpool\u5DF2\u7ECF\u5206\u914D\u4E86maxActive\u4E2Ajedis\u5B9E\u4F8B\uFF0C\u5219\u6B64\u65F6pool\u7684\u72B6\u6001\u4E3Aexhausted(\u8017\u5C3D)\u3002
+spring.redis.jedis.pool.max-active=8
+# \u7B49\u5F85\u53EF\u7528\u8FDE\u63A5\u7684\u6700\u5927\u65F6\u95F4\uFF0C\u5355\u4F4D\u6BEB\u79D2\uFF0C\u9ED8\u8BA4\u503C\u4E3A-1\uFF0C\u8868\u793A\u6C38\u4E0D\u8D85\u65F6\u3002\u5982\u679C\u8D85\u8FC7\u7B49\u5F85\u65F6\u95F4\uFF0C\u5219\u76F4\u63A5\u629B\u51FAJedisConnectionException
+spring.redis.jedis.pool.max-wait=-1ms
 
 
 

+ 17 - 0
gis_application/src/main/resources/application-sit.properties

@@ -24,3 +24,20 @@ spring.mvc.static-path-pattern=/${server.url.prefix}/**
 ### \u5339\u914D\u8DEF\u5F84
 spring.resources.static-locations=file:${server.file.path}
 
+
+# Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09
+spring.redis.database=0
+spring.redis.host=127.0.0.1
+spring.redis.port=6379
+spring.redis.password=
+# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4 \u5355\u4F4D ms\uFF08\u6BEB\u79D2\uFF09
+spring.redis.timeout=3000ms
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u9ED8\u8BA4\u503C\u4E5F\u662F8\u3002
+spring.redis.jedis.pool.max-idle=8
+#\u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u9ED8\u8BA4\u503C\u4E5F\u662F0\u3002
+spring.redis.jedis.pool.min-idle=0
+# \u5982\u679C\u8D4B\u503C\u4E3A-1\uFF0C\u5219\u8868\u793A\u4E0D\u9650\u5236\uFF1B\u5982\u679Cpool\u5DF2\u7ECF\u5206\u914D\u4E86maxActive\u4E2Ajedis\u5B9E\u4F8B\uFF0C\u5219\u6B64\u65F6pool\u7684\u72B6\u6001\u4E3Aexhausted(\u8017\u5C3D)\u3002
+spring.redis.jedis.pool.max-active=8
+# \u7B49\u5F85\u53EF\u7528\u8FDE\u63A5\u7684\u6700\u5927\u65F6\u95F4\uFF0C\u5355\u4F4D\u6BEB\u79D2\uFF0C\u9ED8\u8BA4\u503C\u4E3A-1\uFF0C\u8868\u793A\u6C38\u4E0D\u8D85\u65F6\u3002\u5982\u679C\u8D85\u8FC7\u7B49\u5F85\u65F6\u95F4\uFF0C\u5219\u76F4\u63A5\u629B\u51FAJedisConnectionException
+spring.redis.jedis.pool.max-wait=-1ms
+

+ 16 - 0
gis_application/src/main/resources/static/dept.json

@@ -0,0 +1,16 @@
+{
+  "65038807":"平面美术部",
+  "65038809":"web开发部",
+  "65038810":"图像算法部",
+  "65038812":"应用程序研发部",
+  "65038813":"三维项目部",
+  "65038814":"硬件部",
+  "65038816":"应用程序项目部",
+  "155689133":"产品部",
+  "340357226":"测试部",
+  "340368176":"供应链管理部",
+  "426036379":"项目策划部",
+  "473169925":"项目实施部",
+  "833711085":"项目部",
+  "":""
+}

+ 54 - 0
gis_dingtalk/pom.xml

@@ -0,0 +1,54 @@
+<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/maven-v4_0_0.xsd">
+
+
+    <parent>
+        <artifactId>age_convert</artifactId>
+        <groupId>com.gis</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>gis_dingtalk</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+
+
+        <dependency>
+            <groupId>com.gis</groupId>
+            <artifactId>gis_common</artifactId>
+        </dependency>
+
+
+
+        <!-- 钉钉sdk -->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+
+        <!--轻量级http请求工具forest-->
+        <dependency>
+            <groupId>com.dtflys.forest</groupId>
+            <artifactId>forest-spring-boot-starter</artifactId>
+            <version>1.5.30</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.gis</groupId>
+            <artifactId>gis_redis</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
+
+
+    </dependencies>
+
+
+
+
+
+</project>

+ 32 - 0
gis_dingtalk/src/main/java/com/gis/dingtalk/DingClient.java

@@ -0,0 +1,32 @@
+package com.gis.dingtalk;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.dtflys.forest.annotation.*;
+import com.gis.dingtalk.dto.DingMsgDto;
+
+/**
+ * 钉钉客户端
+ */
+@BaseRequest(sslProtocol = "TLS")
+public interface DingClient {
+
+    /**
+     * 获取access_token
+     * 正常情况下access_token有效期为7200秒,有效期内重复获取返回相同结果,并自动续期。
+     */
+    @Get("https://oapi.dingtalk.com/gettoken?appkey={appkey}&appsecret={appSecret}")
+    JSONObject getToken(@Var("appkey") String appkey, @Var("appSecret") String appSecret);
+
+    /**
+     * 根据手机号获取userid
+     */
+    @Get("https://oapi.dingtalk.com/user/get_by_mobile?access_token={accessToken}&mobile={mobile}")
+    JSONObject getUserByMobile(@Var("accessToken") String accessToken, @Var("mobile") String mobile);
+
+    /**
+     * 发送钉钉消息通知
+     */
+    @Post("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={accessToken}")
+    JSONObject sendMsg(@Var("accessToken") String accessToken, @JSONBody DingMsgDto object);
+}

+ 97 - 0
gis_dingtalk/src/main/java/com/gis/dingtalk/DingTalkService.java

@@ -0,0 +1,97 @@
+package com.gis.dingtalk;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gis.dingtalk.conifg.DingTalkConstant;
+import com.gis.dingtalk.dto.DingMsgDto;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+
+/**
+ * Created by owen on 2023/6/15 0015 9:47
+ */
+@Slf4j
+@Component
+public class DingTalkService {
+
+    @Resource
+    DingClient dingClient;
+
+
+    public void sendMsgUser(){
+
+        JSONObject token = dingClient.getToken(DingTalkConstant.app_key, DingTalkConstant.app_secret);
+        String access_token = token.getString("access_token");
+        log.info("access_token:{}", access_token);
+
+
+        DingMsgDto dto = new DingMsgDto();
+        dto.setAgent_id(DingTalkConstant.agent_id);
+//        dto.setDept_id_list(deptId);
+        dto.setUserid_list("300924181521371230");
+        dto.setMsg(msgTemplateActionCard());
+        log.info("请求体: {}",dto.toString() );
+
+        dingClient.sendMsg(access_token, dto);
+        log.info("钉钉消息发送完成");
+    }
+
+
+    public void sendMsgDeveloper(String projectName, String msg){
+
+        JSONObject token = dingClient.getToken(DingTalkConstant.app_key, DingTalkConstant.app_secret);
+        String access_token = token.getString("access_token");
+        log.info("access_token:{}", access_token);
+
+
+        DingMsgDto dto = new DingMsgDto();
+        dto.setAgent_id(DingTalkConstant.agent_id);
+//        dto.setDept_id_list(deptId);
+        dto.setUserid_list("300924181521371230");
+        dto.setMsg(msgTemplateActionCard(projectName, msg));
+        log.info("请求体: {}",dto.toString() );
+
+        dingClient.sendMsg(access_token, dto);
+        log.info("钉钉消息发送完成");
+    }
+
+
+    /**
+     * 消息模板参考
+     * https://open.dingtalk.com/document/isvapp/job-notification-type
+     * @return
+     *
+     * 卡片消息
+     */
+    private JSONObject msgTemplateActionCard(){
+        JSONObject bodyJson = new JSONObject();
+
+        JSONObject subJson = new JSONObject();
+        subJson.put("title", "禅道工时填写提醒");
+        subJson.put("markdown", "## " + LocalDate.now());
+        subJson.put("single_title", "请填写禅道工时");
+        subJson.put("single_url", "http://face3d.4dage.com:8181/index.php");
+
+        bodyJson.put("msgtype", DingTalkConstant.MSG_TYPE_ACTION_CARD);
+        bodyJson.put(DingTalkConstant.MSG_TYPE_ACTION_CARD, subJson);
+        return  bodyJson;
+
+    }
+
+    private JSONObject msgTemplateActionCard(String projectName, String msg){
+        JSONObject bodyJson = new JSONObject();
+
+        JSONObject subJson = new JSONObject();
+        subJson.put("title", projectName);
+        subJson.put("markdown", "## " + LocalDate.now());
+        subJson.put("single_title", msg);
+        subJson.put("single_url", "http://face3d.4dage.com:8181/index.php");
+
+        bodyJson.put("msgtype", DingTalkConstant.MSG_TYPE_ACTION_CARD);
+        bodyJson.put(DingTalkConstant.MSG_TYPE_ACTION_CARD, subJson);
+        return  bodyJson;
+
+    }
+}

+ 28 - 0
gis_dingtalk/src/main/java/com/gis/dingtalk/conifg/DingTalkConstant.java

@@ -0,0 +1,28 @@
+package com.gis.dingtalk.conifg;
+
+/**
+ * Created by owen on 2023/6/14 0014 10:35
+ * 禅道工时填写提醒
+ */
+public class DingTalkConstant {
+
+    // 钉钉应用appKey
+    public final static String app_key = "dingno54simnleike6iq";
+
+    // 钉钉应用appSecret
+    public final static String app_secret = "VcEFuCLnL4LNSTUlgVMKToN8Khet3oU0QQfzvYzs0wlWDvF12IEAcB2oGBaIMlKK";
+
+    // 钉钉微应用id, 需要在开发这平台创建
+    public final static String agent_id = "2627140435";
+
+
+    // 卡片消息
+    public final static String MSG_TYPE_ACTION_CARD = "action_card";
+
+    // 文本消息
+    public final static String MSG_TYPE_TEXT = "text";
+
+
+
+
+}

+ 140 - 0
gis_dingtalk/src/main/java/com/gis/dingtalk/controller/DingTalkController.java

@@ -0,0 +1,140 @@
+package com.gis.dingtalk.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gis.common.util.Result;
+import com.gis.dingtalk.DingClient;
+import com.gis.dingtalk.conifg.DingTalkConstant;
+import com.gis.dingtalk.dto.DingMsgDto;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+
+/**
+ * Created by owen on 2023/6/14 0014 11:25
+ */
+@ApiIgnore
+@Slf4j
+@Api(tags = "钉钉相关接口")
+@RestController
+@RequestMapping("/api/dingTalk")
+public class DingTalkController {
+
+    @Resource
+    DingClient dingClient;
+
+
+
+    @ApiOperation(value = "获取AccessToken")
+    @GetMapping(value = "/accessToken")
+    public Result accessToken() {
+        return Result.success(dingClient.getToken(DingTalkConstant.app_key, DingTalkConstant.app_secret));
+    }
+
+    @ApiOperation(value = "获取UserId")
+    @GetMapping(value = "/getUserByMobile/{phone}")
+    public Result getUserId(@PathVariable String phone) {
+        JSONObject token = dingClient.getToken(DingTalkConstant.app_key, DingTalkConstant.app_secret);
+        String access_token = token.getString("access_token");
+        log.info("access_token:{}", access_token);
+
+        return Result.success(dingClient.getUserByMobile(access_token, phone));
+    }
+
+
+    @ApiOperation(value = "发送消息到用户")
+    @GetMapping(value = "/sendMsg/{phone}")
+    public Result sendMsg(@PathVariable String phone) {
+        JSONObject token = dingClient.getToken(DingTalkConstant.app_key, DingTalkConstant.app_secret);
+        String access_token = token.getString("access_token");
+        log.info("access_token:{}", access_token);
+
+        JSONObject userByMobile = dingClient.getUserByMobile(access_token, phone);
+        String userId = userByMobile.getString("userid");
+        log.info("userId:{}", userId);
+        DingMsgDto dto = new DingMsgDto();
+        dto.setAgent_id(DingTalkConstant.agent_id);
+
+        dto.setMsg(actionCard());
+        dto.setUserid_list(userId);
+        log.info("请求体: {}",dto.toString() );
+
+        return Result.success(dingClient.sendMsg(access_token, dto));
+    }
+
+    @ApiOperation(value = "发送消息到部门", notes = "web部门:65038809")
+    @GetMapping(value = "/sendDeptMsg/{deptId}")
+    public Result sendDeptMsg(@PathVariable String deptId) {
+        JSONObject token = dingClient.getToken(DingTalkConstant.app_key, DingTalkConstant.app_secret);
+        String access_token = token.getString("access_token");
+        log.info("access_token:{}", access_token);
+
+
+        DingMsgDto dto = new DingMsgDto();
+        dto.setAgent_id(DingTalkConstant.agent_id);
+        dto.setDept_id_list(deptId);
+        dto.setMsg(actionCard());
+        log.info("请求体: {}",dto.toString() );
+
+        return Result.success(dingClient.sendMsg(access_token, dto));
+    }
+
+
+    /**
+     * 消息模板参考
+     * https://open.dingtalk.com/document/isvapp/job-notification-type
+     * @return
+     *
+     * 卡片消息
+     */
+    private JSONObject actionCard(){
+        JSONObject bodyJson = new JSONObject();
+
+        JSONObject subJson = new JSONObject();
+        subJson.put("title", "测试-收到请忽略-禅道工时填写提醒");
+        subJson.put("markdown", "## " + LocalDate.now());
+        subJson.put("single_title", "请填写禅道工时");
+        subJson.put("single_url", "http://face3d.4dage.com:8181/index.php");
+
+        bodyJson.put("msgtype", DingTalkConstant.MSG_TYPE_ACTION_CARD);
+        bodyJson.put(DingTalkConstant.MSG_TYPE_ACTION_CARD, subJson);
+        return  bodyJson;
+
+    }
+
+    private JSONObject markdown(){
+        JSONObject bodyJson = new JSONObject();
+
+        JSONObject subJson = new JSONObject();
+        subJson.put("title", "请填写禅道title");
+        subJson.put("text", "## 支持markdown格式的正文内容");
+
+        bodyJson.put("msgtype", "markdown");
+        bodyJson.put("markdown", subJson);
+        return  bodyJson;
+
+    }
+
+    private JSONObject link(){
+        JSONObject bodyJson = new JSONObject();
+
+        JSONObject subJson = new JSONObject();
+        subJson.put("title", "link-请填写禅道工时-" + LocalDate.now());
+        subJson.put("text", "测试");
+        subJson.put("messageUrl", "http://face3d.4dage.com:8181/index.php");
+        subJson.put("picUrl", "https://www.163.com");
+
+        bodyJson.put("msgtype", "link");
+        bodyJson.put("link", subJson);
+        return  bodyJson;
+
+    }
+
+}

+ 21 - 0
gis_dingtalk/src/main/java/com/gis/dingtalk/dto/DingMsgDto.java

@@ -0,0 +1,21 @@
+package com.gis.dingtalk.dto;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+@Data
+public class DingMsgDto {
+
+    private String agent_id;
+
+    private String userid_list;
+
+    // 接收者是部门ID时,包括子部门下的所有用户
+    private String dept_id_list;
+
+    private JSONObject msg;
+
+    // 是否给全企业发送
+    private Boolean to_all_user = false;
+
+}

+ 56 - 0
gis_dingtalk/src/main/java/com/gis/dingtalk/task/SendMsgTask.java

@@ -0,0 +1,56 @@
+package com.gis.dingtalk.task;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gis.common.util.Result;
+import com.gis.dingtalk.DingClient;
+import com.gis.dingtalk.DingTalkService;
+import com.gis.dingtalk.conifg.DingTalkConstant;
+import com.gis.dingtalk.dto.DingMsgDto;
+import com.gis.dingtalk.util.HolidayUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+
+/**
+ * Created by owen on 2023/6/14 0014 16:43
+ */
+@Slf4j
+@Component
+public class SendMsgTask {
+
+    @Resource
+    DingTalkService dingTalkService;
+
+    @Resource
+    HolidayUtil holidayUtil;
+
+    /**
+     * 需要在启动类加入注解
+     * 每天24点检查未开始的活动
+     * 每天24点执行一次  @Scheduled(cron=" 0 0 0 * * ? ") @Scheduled(cron=" * 1  * * ? ")
+     *
+     * Scheduled(cron=" 10 0/5 * * * ? ")   //每五分钟执行一次
+     * Scheduled(cron = "0 0 3 * * ?") 每天凌晨三点
+     */
+//    @Scheduled(cron = "0 0 0 * * ?")
+    @Scheduled(cron = "0 0 12 * * ?")
+//    @Scheduled(cron=" 10 0/5 * * * ? ")
+    public void task() {
+
+        log.warn("每天18:00开始执行定时任务-开始");
+        try {
+            if (!holidayUtil.hasHoliday()){
+                dingTalkService.sendMsgUser();
+            }
+            log.warn("每天18:00开始执行定时任务-完成");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+    }
+
+
+}

+ 118 - 0
gis_dingtalk/src/main/java/com/gis/dingtalk/util/HolidayUtil.java

@@ -0,0 +1,118 @@
+package com.gis.dingtalk.util;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.gis.dingtalk.DingTalkService;
+import com.gis.rabbit.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by owen on 2023/6/15 0015 9:20
+ * 节假日工具类
+ */
+@Slf4j
+@Component
+public class HolidayUtil {
+
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Resource
+    DingTalkService dingTalkService;
+
+    private String getHoliday(String year){
+
+        String key = "dingTalk_holiday_" + year;
+        if (redisUtil.hasKey(key)){
+            return redisUtil.getCacheObject(key);
+        }
+
+        String api = StrUtil.format("https://timor.tech/api/holiday/year/{}", year);
+        String data = HttpUtil.get(api);
+        log.info("接口返回值:{}", data);
+        JSONObject resJson = JSONObject.parseObject(data);
+        Integer code = resJson.getInteger("code");
+        if (code != 0){
+            log.error("返回数据有误, 通知开发者");
+            return "error";
+        }
+
+        // 缓存30天
+        redisUtil.setEx(key, data, 30, TimeUnit.DAYS);
+
+        return data;
+
+
+    }
+
+
+    public boolean hasHoliday() {
+        LocalDate now = LocalDate.now();
+        log.info("查询日期:{}", now);
+        String holiday = getHoliday(now.getYear() + "");
+
+        if ("error".equals(holiday)) {
+            // todo 发送消息给开发者
+            dingTalkService.sendMsgDeveloper("钉钉禅道工时填写提醒", "获取法定节假接口异常");
+        }
+
+        // 是否法定假期
+         if (holiday.contains(now + "")){
+             return true;
+         }
+
+         // 是否周末
+         return hasWeekend(now);
+    }
+
+    private boolean hasWeekend(LocalDate date){
+        // 获取今天是周几
+        DayOfWeek dayOfWeek = date.getDayOfWeek();
+        log.info("今天是: {}", dayOfWeek);
+
+        // 使用 SWITCH 检查是否为周末
+        boolean hasWeekend ;
+        switch (dayOfWeek) {
+            case SATURDAY : hasWeekend = true; break;
+            case SUNDAY: hasWeekend = true; break;
+            default:
+                hasWeekend = false;
+                break;
+        }
+        log.info("今天 {} 是:{}, 是否周末: {}", date, dayOfWeek, hasWeekend);
+        return hasWeekend;
+    }
+
+    @Test
+    public void test(){
+        // 获取当前日期
+        LocalDate date = LocalDate.now();
+
+        DayOfWeek dayOfWeek = date.getDayOfWeek();
+
+        System.out.println("11111111111111111");
+
+        // 获取今天是周几
+
+        // 使用 SWITCH 检查是否为周末
+        boolean hasWeekend;
+        switch (dayOfWeek) {
+            case SATURDAY :
+            case SUNDAY:
+                System.out.println("今天是周末");
+                break;
+            default:
+                System.out.println("今天不是周末");
+                break;
+        }
+    }
+}

+ 8 - 0
pom.xml

@@ -22,6 +22,8 @@
         <module>gis_common</module>
         <module>gis_service</module>
         <module>gis_application</module>
+        <module>gis_dingtalk</module>
+        <module>gis_redis</module>
     </modules>
 
     <properties>
@@ -64,6 +66,12 @@
 
             <dependency>
                 <groupId>com.gis</groupId>
+                <artifactId>gis_dingtalk</artifactId>
+                <version>${gis.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.gis</groupId>
                 <artifactId>gis_common</artifactId>
                 <version>${gis.version}</version>
             </dependency>

+ 0 - 137
startJar.sh

@@ -1,137 +0,0 @@
-APP_NAME=age_convert.jar
-APP_PORT=8003    #应用端口
-date=`date`
-usage() {
-    echo "case: sh run.sh [start|stop|restart|status|checkServer]"
-    echo "请类似这样执行 ./*.sh start pro  or  ./*sh restart pro"
-    exit 1
-}
-
-checkEnv(){
-      if [ -z "${APP_NAME}" ]; then #判断pid是否为空
-           if [[ $1 = 'pro' ]];   then
-                        echo "pro config"
-                        APP_NAME=720yun_fd_manage_pro.jar
-                      elif  [[ $1 = 'sit' ]] ; then
-                        echo "sit config"
-                        APP_NAME=720yun_fd_manage_sit.jar
-                      elif  [[ $1 = 'devuat' ]] ; then
-                        echo "devuat config"
-                        APP_NAME=720yun_fd_manage_devuat.jar
-                      else
-                        echo "没有设置环境"
-            fi
-     # else
-         #    echo "已经设置-${APP_NAME}-${APP_DEBUG}"
-     fi
-}
-
-# 判断当前服务是否已经启动的函数
-is_exist(){
-    checkEnv $1
-    pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' ` #根据ps 命令查询当前服务的进程号 赋值给pid"
-    if [ -z "${pid}" ]; then #判断pid是否为空
-        echo "pid 不存在"
-        return 1
-    else
-        echo "pid 存在"
-        return 0
-    fi
-}
-
-
-start(){
-    checkEnv $1
-    is_exist
-    if [ $? -eq "0" ]; then    # [$? -eq "0"] 说明pid不等于空 说明服务正在运行中,将进程号打印出来
-        echo "${APP_NAME} running. pid=${pid}"
-    else
-        nohup java -jar -Xmx3072M -Xms512M ./$APP_NAME --spring.profiles.active=$1 --server.port=$APP_PORT  > logs.log 2>error.log &  # 说明pid为空
-        # 执行java -jar 命令启动服务
-        echo "${APP_NAME} started启动"
-    fi
-}
-
-
-stop(){
-    echo "执行 stop 方法"
-    checkEnv $1
-    is_exist
-    if [ $? -eq "0" ]; then    # [$? -eq "0"] 说明pid不等于空 说明服务正在运行中,将进程号杀死
-        kill -9 $pid
-        echo "${pid} stopped-停止"
-    else
-        echo "${APP_NAME} 没有运行"
-    fi
-}
-
-
-status(){
-    echo "执行 status 方法"
-    checkEnv $1
-    is_exist
-    if [ $? -eq "0" ]; then
-        echo "${APP_NAME} running-启动. Pid is ${pid}"
-    else
-        echo "${APP_NAME} 没有运行"
-    fi
-}
-
-checkServer(){
-    echo "执行 status 方法"
-    checkEnv $1
-    is_exist
-    if [ $? -eq "0" ]; then
-        echo "${APP_NAME} running-正在运行. Pid is ${pid}"
-        echo `date +%Y-%m-%d` `date +%H:%M:%S` ${APP_NAME} "running-正在运行. Pid is ${pid}" >> check.log
-        exit 0
-    else
-        echo "${APP_NAME} 没有运行,即将重启"
-        echo `date +%Y-%m-%d` `date +%H:%M:%S` ${APP_NAME} "没有运行,即将重启" >> check.log
-        restart  $1
-    fi
-}
-
-# 重启命令其实就是先执行关闭命令 再执行重启命令
-restart(){
-        echo "执行 restart 方法"
-        checkEnv $1
-        is_exist
-        if [ $? -eq "0" ]; then    # [$? -eq "0"] 说明pid不等于空 说明服务正在运行中,将进程号杀死
-            kill -9 $pid
-            echo "${pid} stopped-停止"
-        else
-            echo "${APP_NAME} 没有运行"
-        fi
-        sleep 5
-        is_exist
-        if [ $? -eq "0" ]; then    # [$? -eq "0"] 说明pid不等于空 说明服务正在运行中,将进程号打印出来
-            echo "${APP_NAME} running. pid=${pid}"
-        else
-            nohup java -jar -Xmx3072M -Xms512M ./$APP_NAME --spring.profiles.active=$1 --server.port=$APP_PORT > logs.log 2>error.log &  # 说明pid为空 执行java -jar 命令启动服务
-            echo "${APP_NAME} started启动"
-        fi
-}
-
-
-# 这里的$1 取的是当前输入命令 的第二个参数 ./start.sh start
-case "$1" in
-    "start")
-        start $2
-        ;;
-    "stop")
-        stop $2
-        ;;
-    "status")
-        status $2
-        ;;
-    "restart")
-        restart $2
-        ;;
-    "checkServer")
-        checkServer $2
-        ;;
-    *)
-    usage
-    ;;
-esac