From 6113331f380808b93d757cfeebfc3f2ffa34e34b Mon Sep 17 00:00:00 2001
From: liyanqi <15181887205@163.com>
Date: 星期一, 31 十月 2022 15:51:36 +0800
Subject: [PATCH] 驾驶舱接口校验补充

---
 ycl-platform/src/main/java/com/ycl/service/apiKey/impl/ApiKeyServiceImpl.java                            |   42 +++++++
 ycl-platform/src/main/java/com/ycl/util/CheckApiUtil.java                                                |   48 ++++++++
 ycl-platform/src/main/resources/mapper/apiKey/ApiKeyMapper.xml                                           |   19 +++
 ycl-platform/src/main/java/com/ycl/controller/cockpit/enforcementEvents/EnforcementEventsController.java |   14 ++
 ycl-platform/src/main/java/com/ycl/mapper/apiKey/ApiKeyMapper.java                                       |   16 ++
 ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java                                            |    6 
 ycl-platform/src/main/java/com/ycl/controller/cockpit/statisticsEvents/StatisticsEventsController.java   |    9 +
 ycl-generator/src/main/java/com/ycl/MysqlGenerator.java                                                  |    2 
 ycl-platform/src/main/java/com/ycl/service/apiKey/IApiKeyService.java                                    |   24 ++++
 ycl-common/src/main/java/com/ycl/utils/MD5Util.java                                                      |  102 +++++++++++++++++
 ycl-common/src/main/java/com/ycl/vo/cockpit/CockpitVO.java                                               |   10 +
 ycl-platform/src/main/java/com/ycl/controller/cockpit/aiIot/AIIotController.java                         |   10 +
 ycl-platform/src/main/java/com/ycl/entity/apiKey/ApiKey.java                                             |   44 +++++++
 13 files changed, 340 insertions(+), 6 deletions(-)

diff --git a/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java b/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java
index 05454bd..80087d0 100644
--- a/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java
+++ b/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java
@@ -31,8 +31,10 @@
 
     LOGIN_TIMEOUT(2016, "鐧诲綍瓒呮椂,璇烽噸鏂扮櫥褰�"),
 
-    OPERATOR_TYPE_FETCH_FAIL(3001, "鑾峰彇鎿嶄綔鍛樺け璐�");
-
+    OPERATOR_TYPE_FETCH_FAIL(3001, "鑾峰彇鎿嶄綔鍛樺け璐�"),
+    APPID_ERROR(3002, "appId閿欒"),
+    APPKEY_ERROR(3003, "appKey閿欒"),
+    SIGN_ERROR(3004,"sign閿欒");
 
     private long code;
     private String message;
diff --git a/ycl-common/src/main/java/com/ycl/utils/MD5Util.java b/ycl-common/src/main/java/com/ycl/utils/MD5Util.java
new file mode 100644
index 0000000..3fa2973
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/utils/MD5Util.java
@@ -0,0 +1,102 @@
+package com.ycl.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/10/31
+ */
+public class MD5Util {
+    /**
+     * MD5鍔犲瘑瀛楃涓诧紙32浣嶅ぇ鍐欙級
+     *
+     * @param string 闇�瑕佽繘琛孧D5鍔犲瘑鐨勫瓧绗︿覆
+     * @return 鍔犲瘑鍚庣殑瀛楃涓诧紙澶у啓锛�
+     */
+    public static String md5Encrypt32Upper(String string) {
+        byte[] hash;
+        try {
+            //鍒涘缓涓�涓狹D5绠楁硶瀵硅薄锛屽苟鑾峰緱MD5瀛楄妭鏁扮粍,16*8=128浣�
+            hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException("Huh, MD5 should be supported?", e);
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException("Huh, UTF-8 should be supported?", e);
+        }
+
+        //杞崲涓哄崄鍏繘鍒跺瓧绗︿覆
+        StringBuilder hex = new StringBuilder(hash.length * 2);
+        for (byte b : hash) {
+            if ((b & 0xFF) < 0x10) hex.append("0");
+            hex.append(Integer.toHexString(b & 0xFF));
+        }
+        return hex.toString().toUpperCase();
+    }
+
+    /**
+     * MD5鍔犲瘑瀛楃涓诧紙32浣嶅皬鍐欙級
+     *
+     * @param string 闇�瑕佽繘琛孧D5鍔犲瘑鐨勫瓧绗︿覆
+     * @return 鍔犲瘑鍚庣殑瀛楃涓诧紙灏忓啓锛�
+     */
+    public static String md5Encrypt32Lower(String string) {
+        byte[] hash;
+        try {
+            //鍒涘缓涓�涓狹D5绠楁硶瀵硅薄锛屽苟鑾峰緱MD5瀛楄妭鏁扮粍,16*8=128浣�
+            hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException("Huh, MD5 should be supported?", e);
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException("Huh, UTF-8 should be supported?", e);
+        }
+
+        //杞崲涓哄崄鍏繘鍒跺瓧绗︿覆
+        StringBuilder hex = new StringBuilder(hash.length * 2);
+        for (byte b : hash) {
+            if ((b & 0xFF) < 0x10) hex.append("0");
+            hex.append(Integer.toHexString(b & 0xFF));
+        }
+        return hex.toString().toLowerCase();
+    }
+
+    /**
+     * 灏嗕簩杩涘埗瀛楄妭鏁扮粍杞崲涓哄崄鍏繘鍒跺瓧绗︿覆
+     *
+     * @param bytes 浜岃繘鍒跺瓧鑺傛暟缁�
+     * @return 鍗佸叚杩涘埗瀛楃涓�
+     */
+    public static String bytesToHex(byte[] bytes) {
+        StringBuffer hexStr = new StringBuffer();
+        int num;
+        for (int i = 0; i < bytes.length; i++) {
+            num = bytes[i];
+            if (num < 0) {
+                num += 256;
+            }
+            if (num < 16) {
+                hexStr.append("0");
+            }
+            hexStr.append(Integer.toHexString(num));
+        }
+        return hexStr.toString().toUpperCase();
+    }
+
+    /**
+     * Unicode涓枃缂栫爜杞崲鎴愬瓧绗︿覆
+     */
+    public static String unicodeToString(String str) {
+        Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
+        Matcher matcher = pattern.matcher(str);
+        char ch;
+        while (matcher.find()) {
+            ch = (char) Integer.parseInt(matcher.group(2), 16);
+            str = str.replace(matcher.group(1), ch + "");
+        }
+        return str;
+    }
+}
diff --git a/ycl-common/src/main/java/com/ycl/vo/cockpit/CockpitVO.java b/ycl-common/src/main/java/com/ycl/vo/cockpit/CockpitVO.java
index 4007cdd..30fa4d8 100644
--- a/ycl-common/src/main/java/com/ycl/vo/cockpit/CockpitVO.java
+++ b/ycl-common/src/main/java/com/ycl/vo/cockpit/CockpitVO.java
@@ -21,6 +21,8 @@
         @ApiModelProperty(value = "appKey", example = "1")
         @NotBlank(message = "appKey涓嶈兘涓虹┖")
         private String appKey;
+        @ApiModelProperty(value = "sign", example = "sfagjgfjgfjdgfjsgdfgsa")
+        @NotBlank(message = "sign涓嶈兘涓虹┖")
         private String sign;
     }
 
@@ -33,10 +35,14 @@
         @ApiModelProperty(value = "appKey", example = "1")
         @NotBlank(message = "appKey涓嶈兘涓虹┖")
         private String appKey;
+        @ApiModelProperty(value = "sign", example = "sfagjgfjgfjdgfjsgdfgsa")
+        @NotBlank(message = "sign涓嶈兘涓虹┖")
         private String sign;
-        @ApiModelProperty(value = "寮�濮嬫椂闂达紝鏍煎紡yyyy-MM-dd hh:mm:ss")
+        @ApiModelProperty(value = "寮�濮嬫椂闂达紝鏍煎紡yyyy-MM-dd hh:mm:ss",example = "2022-10-22 13:22:22")
+        @NotBlank(message = "寮�濮嬫椂闂翠笉鑳戒负绌�")
         private String beginTime;
-        @ApiModelProperty(value = "缁撴潫鏃堕棿锛屾牸寮弝yyy-MM-dd hh:mm:ss")
+        @ApiModelProperty(value = "缁撴潫鏃堕棿锛屾牸寮弝yyy-MM-dd hh:mm:ss",example = "2022-10-23 13:22:22")
+        @NotBlank(message = "缁撴潫鏃堕棿涓嶈兘涓虹┖")
         private String endTime;
     }
 }
diff --git a/ycl-generator/src/main/java/com/ycl/MysqlGenerator.java b/ycl-generator/src/main/java/com/ycl/MysqlGenerator.java
index fb96cad..3c4b34d 100644
--- a/ycl-generator/src/main/java/com/ycl/MysqlGenerator.java
+++ b/ycl-generator/src/main/java/com/ycl/MysqlGenerator.java
@@ -59,7 +59,7 @@
         GlobalConfig gc = new GlobalConfig();
         final String projectPath = System.getProperty("user.dir");
         gc.setOutputDir(projectPath + "/ycl-generator/src/main/java");
-        gc.setAuthor("zhanghua");//浣滆��
+        gc.setAuthor("lyq");//浣滆��
         gc.setBaseResultMap(true); //mapper.xml 鐢熸垚 ResultMap
         gc.setBaseColumnList(true); //mapper.xml 鐢熸垚 ColumnList
 //        gc.setSwagger2(true);
diff --git a/ycl-platform/src/main/java/com/ycl/controller/cockpit/aiIot/AIIotController.java b/ycl-platform/src/main/java/com/ycl/controller/cockpit/aiIot/AIIotController.java
index 313cac6..4d1d238 100644
--- a/ycl-platform/src/main/java/com/ycl/controller/cockpit/aiIot/AIIotController.java
+++ b/ycl-platform/src/main/java/com/ycl/controller/cockpit/aiIot/AIIotController.java
@@ -1,6 +1,7 @@
 package com.ycl.controller.cockpit.aiIot;
 
 import com.ycl.api.CommonResult;
+import com.ycl.util.CheckApiUtil;
 import com.ycl.vo.cockpit.CockpitVO;
 import com.ycl.vo.cockpit.aiIot.AIIotVO;
 import io.swagger.annotations.Api;
@@ -10,6 +11,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
@@ -25,9 +27,13 @@
 @RequestMapping("/api/lot")
 public class AIIotController {
 
+    @Resource
+    private CheckApiUtil checkApiUtil;
+
     @ApiOperation(value = "鐩戞祴鏁版嵁")
     @GetMapping("/detection")
     public CommonResult<AIIotVO.DetectionVO> detection(@Validated CockpitVO.Params1VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), null, null);
         AIIotVO.DetectionVO detectionVO = new AIIotVO.DetectionVO();
         detectionVO.setVideo(121);
         detectionVO.setIndividual(20);
@@ -40,6 +46,7 @@
     @ApiOperation(value = "瀹炴椂瑙嗛鐩戞帶")
     @GetMapping("/video")
     public CommonResult<List<AIIotVO.VideoVO>> video(@Validated CockpitVO.Params1VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), null, null);
         List<AIIotVO.VideoVO> videoVOS = new ArrayList<>();
         AIIotVO.VideoVO a = null;
         for (int i = 0; i < 4; i++) {
@@ -60,6 +67,7 @@
     @ApiOperation(value = "AI绠楁硶鏁堣兘")
     @GetMapping("/efficiency")
     public CommonResult<List<AIIotVO.EfficiencyVO>> efficiency(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         List<AIIotVO.EfficiencyVO> efficiencyVOS = new ArrayList<>();
         AIIotVO.EfficiencyVO a = null;
         for (int i = 0; i < 4; i++) {
@@ -75,6 +83,7 @@
     @ApiOperation(value = "娓e湡鑱斿姩")
     @GetMapping("/slag_car")
     public CommonResult<AIIotVO.SlagCarVO> slagCar(@Validated CockpitVO.Params1VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), null, null);
         AIIotVO.SlagCarVO slagCarVO = new AIIotVO.SlagCarVO();
         slagCarVO.setCar(236);
         slagCarVO.setTeam(20);
@@ -84,6 +93,7 @@
     @ApiOperation(value = "AI浜嬩欢缁熻")
     @GetMapping("/event_statistics")
     public CommonResult<List<AIIotVO.StatisticsVO>> statistics(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         List<AIIotVO.StatisticsVO> statisticsVOS = new ArrayList<>();
         List<AIIotVO.Statistics1VO> statistics1VOS = new ArrayList<>();
         AIIotVO.StatisticsVO a = null;
diff --git a/ycl-platform/src/main/java/com/ycl/controller/cockpit/enforcementEvents/EnforcementEventsController.java b/ycl-platform/src/main/java/com/ycl/controller/cockpit/enforcementEvents/EnforcementEventsController.java
index 343aa77..1c19a87 100644
--- a/ycl-platform/src/main/java/com/ycl/controller/cockpit/enforcementEvents/EnforcementEventsController.java
+++ b/ycl-platform/src/main/java/com/ycl/controller/cockpit/enforcementEvents/EnforcementEventsController.java
@@ -1,6 +1,7 @@
 package com.ycl.controller.cockpit.enforcementEvents;
 
 import com.ycl.api.CommonResult;
+import com.ycl.util.CheckApiUtil;
 import com.ycl.vo.cockpit.CockpitVO;
 import com.ycl.vo.cockpit.enforcementEvents.EnforcementEventsVO;
 import io.swagger.annotations.Api;
@@ -10,6 +11,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
@@ -26,16 +28,20 @@
 @RestController
 @RequestMapping("/api/event")
 public class EnforcementEventsController {
+    @Resource
+    private CheckApiUtil checkApiUtil;
+
     @ApiOperation(value = "鎵ф硶浜嬩欢缁熻")
     @GetMapping("/statistics")
     public CommonResult<Map<String, Object>> statistics(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         Map<String, Object> map = new HashMap<>();
         EnforcementEventsVO.StatisticsEventVO eventVO = new EnforcementEventsVO.StatisticsEventVO();
         eventVO.setCount(10);
         eventVO.setRatio(new BigDecimal("0.69").setScale(2, RoundingMode.HALF_UP));
         map.put("reported", eventVO);
         map.put("disposition", eventVO);
-        map.put("dispositionInTime",eventVO);
+        map.put("dispositionInTime", eventVO);
         map.put("register", eventVO);
         return CommonResult.success(map);
     }
@@ -43,6 +49,7 @@
     @ApiOperation(value = "浜嬩欢绫诲瀷")
     @GetMapping("/type")
     public CommonResult<EnforcementEventsVO.TypeAndSourceVO> type(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         List<EnforcementEventsVO.TypeAndSourceVO1> typeVO1s = new ArrayList<>();
         EnforcementEventsVO.TypeAndSourceVO typeVO = new EnforcementEventsVO.TypeAndSourceVO();
         EnforcementEventsVO.TypeAndSourceVO1 typeVO1 = null;
@@ -61,6 +68,7 @@
     @ApiOperation(value = "瑙嗛鎶撴媿鍛婂彂鐐逛綅")
     @GetMapping("/video")
     public CommonResult<List<EnforcementEventsVO.VideoAndAreaVO>> video(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         List<EnforcementEventsVO.VideoAndAreaVO> videoVOS = new ArrayList<>();
         EnforcementEventsVO.VideoAndAreaVO videoVO = null;
         for (int i = 0; i < 4; i++) {
@@ -75,6 +83,7 @@
     @ApiOperation(value = "浜嬩欢鏉ユ簮")
     @GetMapping("/source")
     public CommonResult<EnforcementEventsVO.TypeAndSourceVO> source(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         List<EnforcementEventsVO.TypeAndSourceVO1> typeVO1s = new ArrayList<>();
         EnforcementEventsVO.TypeAndSourceVO typeVO = new EnforcementEventsVO.TypeAndSourceVO();
         EnforcementEventsVO.TypeAndSourceVO1 typeVO1 = null;
@@ -93,6 +102,7 @@
     @ApiOperation(value = "浜嬩欢鍖哄煙缁熻")
     @GetMapping("/area")
     public CommonResult<List<EnforcementEventsVO.VideoAndAreaVO>> area(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         List<EnforcementEventsVO.VideoAndAreaVO> videoVOS = new ArrayList<>();
         EnforcementEventsVO.VideoAndAreaVO videoVO = null;
         for (int i = 0; i < 4; i++) {
@@ -107,6 +117,7 @@
     @ApiOperation(value = "寤惰浜嬩欢")
     @GetMapping("/delay")
     public CommonResult<List<EnforcementEventsVO.DelayVO>> delay(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         List<EnforcementEventsVO.DelayVO> delayVOS = new ArrayList<>();
         EnforcementEventsVO.DelayVO delayVO = null;
         for (int i = 0; i < 4; i++) {
@@ -122,6 +133,7 @@
     @ApiOperation(value = "浜嬩欢淇℃伅")
     @GetMapping("/info")
     public CommonResult<EnforcementEventsVO.InfoVO> info(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         EnforcementEventsVO.InfoVO infoVO = new EnforcementEventsVO.InfoVO();
         EnforcementEventsVO.EventVO eventVO = new EnforcementEventsVO.EventVO();
         infoVO.setToday(5);
diff --git a/ycl-platform/src/main/java/com/ycl/controller/cockpit/statisticsEvents/StatisticsEventsController.java b/ycl-platform/src/main/java/com/ycl/controller/cockpit/statisticsEvents/StatisticsEventsController.java
index 5c5ce45..21d3745 100644
--- a/ycl-platform/src/main/java/com/ycl/controller/cockpit/statisticsEvents/StatisticsEventsController.java
+++ b/ycl-platform/src/main/java/com/ycl/controller/cockpit/statisticsEvents/StatisticsEventsController.java
@@ -1,6 +1,7 @@
 package com.ycl.controller.cockpit.statisticsEvents;
 
 import com.ycl.api.CommonResult;
+import com.ycl.util.CheckApiUtil;
 import com.ycl.vo.cockpit.CockpitVO;
 import com.ycl.vo.cockpit.statisticsEvents.StatisticsEventsVO;
 import io.swagger.annotations.Api;
@@ -10,6 +11,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
@@ -24,10 +26,13 @@
 @RestController
 @RequestMapping("/api/data")
 public class StatisticsEventsController {
+    @Resource
+    private CheckApiUtil checkApiUtil;
 
     @ApiOperation(value = "鎵ф硶浜嬩欢")
     @GetMapping("/law_enforcement_event")
     public CommonResult<List<StatisticsEventsVO.LawEnforcementEventVO>> detection(@Validated CockpitVO.Params2VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), params.getBeginTime(), params.getEndTime());
         List<StatisticsEventsVO.LawEnforcementEventVO> lawEnforcementEventVOS = new ArrayList<>();
         StatisticsEventsVO.LawEnforcementEventVO a = null;
         for (int i = 0; i < 4; i++) {
@@ -44,6 +49,7 @@
     @ApiOperation(value = "鐗╄仈鎰熺煡")
     @GetMapping("/lot")
     public CommonResult<List<StatisticsEventsVO.LotVO>> lot(@Validated CockpitVO.Params1VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), null, null);
         List<StatisticsEventsVO.LotVO> lotVOS = new ArrayList<>();
         StatisticsEventsVO.LotVO a = null;
         for (int i = 0; i < 4; i++) {
@@ -59,6 +65,7 @@
     @ApiOperation(value = "鎵ф硶闃熶紞")
     @GetMapping("/team")
     public CommonResult<StatisticsEventsVO.TeamVO> team(@Validated CockpitVO.Params1VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), null, null);
         StatisticsEventsVO.TeamVO teamVO = new StatisticsEventsVO.TeamVO();
         teamVO.setAll(30);
         teamVO.setAssistant(10);
@@ -72,6 +79,7 @@
     @ApiOperation(value = "缃戞牸鍛�")
     @GetMapping("/grid_member")
     public CommonResult<List<StatisticsEventsVO.GridMemberVO>> gridMember(@Validated CockpitVO.Params1VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), null, null);
         List<StatisticsEventsVO.GridMemberVO> gridMemberVOS = new ArrayList<>();
         StatisticsEventsVO.GridMemberVO a = null;
         for (int i = 0; i < 4; i++) {
@@ -87,6 +95,7 @@
     @ApiOperation(value = "鎸囨暟浣撳緛")
     @GetMapping("/index_signs")
     public CommonResult<StatisticsEventsVO.IndexSignsVO> indexSigns(@Validated CockpitVO.Params1VO params) {
+        checkApiUtil.cockpit(params.getAppId(), params.getAppKey(), params.getSign(), null, null);
         StatisticsEventsVO.IndexSignsVO indexSignsVO = new StatisticsEventsVO.IndexSignsVO();
         indexSignsVO.setEvent(1);
         indexSignsVO.setGridMember(20);
diff --git a/ycl-platform/src/main/java/com/ycl/entity/apiKey/ApiKey.java b/ycl-platform/src/main/java/com/ycl/entity/apiKey/ApiKey.java
new file mode 100644
index 0000000..5f9b73b
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/entity/apiKey/ApiKey.java
@@ -0,0 +1,44 @@
+package com.ycl.entity.apiKey;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author lyq
+ * @since 2022-10-31
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_api_key")
+public class ApiKey implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("name")
+    private String name;
+
+    @TableField("app_id")
+    private String appId;
+
+    @TableField("app_key")
+    private String appKey;
+
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+
+}
diff --git a/ycl-platform/src/main/java/com/ycl/mapper/apiKey/ApiKeyMapper.java b/ycl-platform/src/main/java/com/ycl/mapper/apiKey/ApiKeyMapper.java
new file mode 100644
index 0000000..13d2554
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/mapper/apiKey/ApiKeyMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.mapper.apiKey;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.entity.apiKey.ApiKey;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2022-10-31
+ */
+public interface ApiKeyMapper extends BaseMapper<ApiKey> {
+
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/apiKey/IApiKeyService.java b/ycl-platform/src/main/java/com/ycl/service/apiKey/IApiKeyService.java
new file mode 100644
index 0000000..4d539b4
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/apiKey/IApiKeyService.java
@@ -0,0 +1,24 @@
+package com.ycl.service.apiKey;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.entity.apiKey.ApiKey;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2022-10-31
+ */
+public interface IApiKeyService extends IService<ApiKey> {
+
+    /**
+     * 鏍¢獙apikey锛宎ppId
+     *
+     * @param appId
+     * @param appKey
+     * @param name
+     */
+    void checkIsExist(String appId, String appKey, String name);
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/apiKey/impl/ApiKeyServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/apiKey/impl/ApiKeyServiceImpl.java
new file mode 100644
index 0000000..1ee7f8a
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/apiKey/impl/ApiKeyServiceImpl.java
@@ -0,0 +1,42 @@
+package com.ycl.service.apiKey.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.entity.apiKey.ApiKey;
+import com.ycl.enums.common.ResultCode;
+import com.ycl.exception.ApiException;
+import com.ycl.mapper.apiKey.ApiKeyMapper;
+import com.ycl.service.apiKey.IApiKeyService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2022-10-31
+ */
+@Service
+public class ApiKeyServiceImpl extends ServiceImpl<ApiKeyMapper, ApiKey> implements IApiKeyService {
+    @Resource
+    private ApiKeyMapper apiKeyMapper;
+
+    @Override
+    public void checkIsExist(String appId, String appKey, String name) {
+        ApiKey apiKey = this.queryByName(name);
+        if (!appId.equals(apiKey.getAppId())) {
+            throw new ApiException(ResultCode.APPID_ERROR);
+        }
+        if (!appKey.equals(apiKey.getAppKey())) {
+            throw new ApiException(ResultCode.APPKEY_ERROR);
+        }
+    }
+
+    public ApiKey queryByName(String name) {
+        ApiKey apiKey = apiKeyMapper.selectOne(new LambdaQueryWrapper<ApiKey>().eq(ApiKey::getName, name));
+        return apiKey;
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/util/CheckApiUtil.java b/ycl-platform/src/main/java/com/ycl/util/CheckApiUtil.java
new file mode 100644
index 0000000..1d3b50c
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/util/CheckApiUtil.java
@@ -0,0 +1,48 @@
+package com.ycl.util;
+
+import com.ycl.enums.common.ResultCode;
+import com.ycl.exception.ApiException;
+import com.ycl.service.apiKey.IApiKeyService;
+import com.ycl.utils.MD5Util;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/10/31
+ */
+@Component
+public class CheckApiUtil {
+
+    @Resource
+    private IApiKeyService apiKeyService;
+
+    /**
+     * 椹鹃┒鑸�
+     *
+     * @param appId
+     * @param appKey
+     * @param sign
+     * @param name
+     * @param beginTime
+     * @param endTime
+     */
+    public void cockpit(String appId, String appKey, String sign, String beginTime, String endTime) {
+        apiKeyService.checkIsExist(appId, appKey, "椹鹃┒浠�");
+        StringBuffer sb = new StringBuffer();
+        sb.append(appId);
+        sb.append(appKey);
+        String result;
+        if (!StringUtils.isBlank(beginTime) && !StringUtils.isBlank(endTime)) {
+            sb.append(beginTime);
+            sb.append(endTime);
+        }
+        result = MD5Util.md5Encrypt32Lower(sb.toString());
+        if (!sign.equals(result)) {
+            throw new ApiException(ResultCode.SIGN_ERROR);
+        }
+    }
+}
diff --git a/ycl-platform/src/main/resources/mapper/apiKey/ApiKeyMapper.xml b/ycl-platform/src/main/resources/mapper/apiKey/ApiKeyMapper.xml
new file mode 100644
index 0000000..692db80
--- /dev/null
+++ b/ycl-platform/src/main/resources/mapper/apiKey/ApiKeyMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.mapper.apiKey.ApiKeyMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.entity.apiKey.ApiKey">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="app_id" property="appId" />
+        <result column="app_key" property="appKey" />
+        <result column="create_time" property="createTime" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, name, app_id, app_key, create_time
+    </sql>
+
+</mapper>

--
Gitblit v1.8.0