From 0803e188cc84b0971d13b5746df63ca2418b9236 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 11 十月 2023 11:16:37 +0800
Subject: [PATCH] 接口整理

---
 server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java       |   52 ++++++
 server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java  |   12 +
 server/web/src/main/java/com/doumee/api/web/BusinessApi.java                               |    2 
 server/services/src/main/java/com/doumee/dao/business/web/request/RepairRequest.java       |    5 
 server/services/src/main/java/com/doumee/service/business/SitesService.java                |   30 +++
 server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java                 |   80 ++++++++++
 server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java                         |  135 ++++++++++++++++
 server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorDTO.java     |    7 
 server/services/src/main/resources/mappers/SitesMapper.xml                                 |   62 +++++++
 server/services/src/main/java/com/doumee/dao/business/SitesMapper.java                     |   23 +-
 server/platform/src/main/java/com/doumee/api/business/RefundController.java                |    4 
 server/services/src/main/java/com/doumee/core/constants/Constants.java                     |   11 +
 server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorBikeDTO.java |   31 +++
 server/platform/src/main/java/com/doumee/api/business/SitesController.java                 |   17 ++
 server/services/src/main/java/com/doumee/service/business/BikeRepairService.java           |    2 
 15 files changed, 454 insertions(+), 19 deletions(-)

diff --git a/server/platform/src/main/java/com/doumee/api/business/RefundController.java b/server/platform/src/main/java/com/doumee/api/business/RefundController.java
index 5973c6c..7a27301 100644
--- a/server/platform/src/main/java/com/doumee/api/business/RefundController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/RefundController.java
@@ -76,8 +76,8 @@
     public ApiResponse<PageData<Refund>> findPage (@RequestBody PageWrap<Refund> pageWrap) {
         return ApiResponse.success(refundService.findPage(pageWrap));
     }
-    @ApiOperation("鍚庡彴缁撶畻璁板綍_鍒嗛〉鏌ヨ")
-    @PostMapping("/pagePlat")
+    @ApiOperation("鍚庡彴缁撶畻璁板綍")
+    @PostMapping("/findPlatPage")
     @RequiresPermissions("business:refund:query")
     public ApiResponse<PageData<Refund>> findPlatPage (@RequestBody PageWrap<Refund> pageWrap) {
         return ApiResponse.success(refundService.findPlatPage(pageWrap));
diff --git a/server/platform/src/main/java/com/doumee/api/business/SitesController.java b/server/platform/src/main/java/com/doumee/api/business/SitesController.java
index 54f7469..2b586aa 100644
--- a/server/platform/src/main/java/com/doumee/api/business/SitesController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/SitesController.java
@@ -7,6 +7,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Sites;
+import com.doumee.dao.business.web.request.SitesMonitorBikeDTO;
+import com.doumee.dao.business.web.request.SitesMonitorDTO;
 import com.doumee.service.business.SitesService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -87,4 +89,19 @@
     public ApiResponse findById(@PathVariable String id) {
         return ApiResponse.success(sitesService.findById(id));
     }
+
+
+    @ApiOperation("绔欑偣鍌ㄨ溅鐩戞帶")
+    @PostMapping("/findSitesMonitorDTOPage")
+    @RequiresPermissions("business:sites:query")
+    public ApiResponse<PageData<SitesMonitorDTO>> findSitesMonitorDTOPage(@RequestBody PageWrap<SitesMonitorDTO> pageWrap){
+        return ApiResponse.success(sitesService.findSitesMonitorDTOPage(pageWrap));
+    }
+
+    @ApiOperation("瀹炴椂杞︿綅淇℃伅")
+    @PostMapping("/findSitesMonitorDTOPage")
+    @RequiresPermissions("business:sites:query")
+    public ApiResponse<PageData<SitesMonitorBikeDTO>> getSitesMonitorBikeDTO(@RequestBody PageWrap<SitesMonitorDTO> pageWrap){
+        return ApiResponse.success(sitesService.getSitesMonitorBikeDTO(pageWrap));
+    }
 }
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index 7d5fad2..ce5bfa8 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -23,6 +23,7 @@
   public static final String FALSE = "f";
   public static final String TOKEN ="TOKEN" ;
     public static final String SYSTEM ="SYSTEM" ;
+    public static final String DINGDING ="DINGDING" ;
     public static final String MINI_PROGRAMME ="MINI_PROGRAMME" ;
     public static final String IMG_DIR = "IMG_DIR";
     public static final String FILE_DIR ="FILE_DIR" ;
@@ -109,6 +110,16 @@
         //灏忕▼搴忔瘡鏃ユ湇鍔$粨鏉熸椂闂�
         public static final String BUSINESS_ENDTIME = "BUSINESS_ENDTIME";
 
+        //閽夐拤閫氱煡鍦板潃
+        public static final String DINGDING_URL = "DINGDING_URL";
+        //閽夐拤绛惧悕
+        public static final String DINGDING_SECRET = "DINGDING_SECRET";
+
+        //灏忕▼搴忔弧杞介璀�(%)鏈�澶у��
+        public static final String WARN_MAX = "WARN_MAX";
+        //灏忕▼搴忔弧杞介璀�(%)鏈�灏忓��
+        public static final String WARN_MIN = "WARN_MIN";
+
 
         public static final String FILES_DIR = "FILES_DIR";
         public static final String SCRATCH_REDIRECT_URL = "SCRATCH_REDIRECT_URL";
diff --git a/server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java b/server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java
new file mode 100644
index 0000000..2eab145
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/dingding/DingDingNotice.java
@@ -0,0 +1,80 @@
+package com.doumee.core.dingding;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.dao.business.model.BikeRepair;
+import com.doumee.dao.business.web.request.RepairRequest;
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2022/12/7 11:16
+ */
+public class DingDingNotice {
+
+
+    /**
+     * 閽夐拤鏈哄櫒浜� 鍔犵
+     * @param timestamp
+     * @param secret
+     * @return
+     * @throws Exception
+     */
+    public static String getSign(Long timestamp, String secret)  throws Exception{
+        String stringToSign = timestamp + "\n" + secret;
+        Mac mac = Mac.getInstance("HmacSHA256");
+        mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
+        byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
+        String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
+        return sign;
+    }
+
+
+    /**
+     * 閽夐拤閫氱煡 - 杞﹁締寮傚父涓婃姤
+     * @param repairRequest
+     * @param ddUrl
+     * @throws Exception
+     */
+    public static void bikeRepair(RepairRequest repairRequest, String ddUrl , String secret)  throws Exception{
+        Long timestamp = System.currentTimeMillis();
+        Map<String,Object> content = new HashMap<>();
+        content.put("msgtype","text");
+        Map<String,String> text = new HashMap<>();
+        text.put("content","銆愭晠闅滀笂鎶ャ�戣溅杈嗙紪鍙凤細"+repairRequest.getBikeCode()+"锛屼綅缃細"+repairRequest.getAddr()+"锛岃仈绯荤數璇濓細"+repairRequest.getLinkphone()+"锛岃鍙婃椂鏌ョ湅澶勭悊銆�");
+        content.put("text",text);
+        HttpsUtil.post(ddUrl+"&timestamp="+timestamp+"&sign="+getSign(timestamp,secret), JSONObject.toJSONString(content),"application/json",false);
+    }
+
+
+    /**
+     * 閽夐拤閫氱煡 - 绔欑偣鍌ㄨ溅鍛婅
+     * @param siteName
+     * @param ddUrl
+     * @param secret
+     * @param type 0=瓒呭嚭 1=浣庝簬
+     * @param warnVal 鎶ヨ鍊�
+     * @throws Exception
+     */
+    public static void reservesNotice(String siteName, String ddUrl , String secret, Integer type, BigDecimal warnVal)  throws Exception{
+        Long timestamp = System.currentTimeMillis();
+        Map<String,Object> content = new HashMap<>();
+        content.put("msgtype","text");
+        Map<String,String> text = new HashMap<>();
+        //text.put("content","銆愮珯鐐瑰偍杞﹀憡璀︺��"+siteName+"锛屽偍杞﹂噺瓒呰繃80%/浣庝簬20%锛岃鍙婃椂杩涜杞﹁締璋冮厤");
+
+        text.put("content","銆愮珯鐐瑰偍杞﹀憡璀︺��"+siteName+"锛屽偍杞﹂噺"+(type.equals(Constants.ZERO)?"瓒呭嚭":"浣庝簬")+warnVal+"%锛岃鍙婃椂杩涜杞﹁締璋冮厤");
+        content.put("text",text);
+        HttpsUtil.post(ddUrl+"&timestamp="+timestamp+"&sign="+getSign(timestamp,secret), JSONObject.toJSONString(content),"application/json",false);
+    }
+}
diff --git a/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java b/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java
new file mode 100644
index 0000000..09bea1e
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java
@@ -0,0 +1,135 @@
+package com.doumee.core.utils;
+
+import javax.net.ssl.*;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+public class HttpsUtil {
+
+    public static String get(String url,boolean ignoreSSL) {
+        return connection(url, "GET", null, null,ignoreSSL);
+    }
+
+    public static String post(String url, String data, String contentType, boolean ignoreSSL) {
+        return connection(url, "POST", data, contentType, ignoreSSL);
+    }
+
+    public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){
+        HttpsURLConnection connection = null;
+        try {
+            URL _url = new URL(url);
+            connection = (HttpsURLConnection) _url.openConnection();
+            connection.setRequestMethod(method);
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+            connection.setUseCaches(false);
+            if(contentType != null){
+                connection.setRequestProperty("Content-Type", contentType);
+            }
+
+            if(ignoreSSL){
+                //淇′换鎵�鏈塻sl璇佷功鍜屼富鏈�
+                TrustManager[] trustManagers = {new HttpsTrustManager()};
+                SSLContext context = SSLContext.getInstance("TLS");
+                context.init(null, trustManagers, new SecureRandom());
+                connection.setSSLSocketFactory(context.getSocketFactory());
+                connection.setHostnameVerifier(new HostnameVerifier() {
+                    @Override
+                    public boolean verify(String hostname, SSLSession session) {
+                        return true;
+                    }
+                });
+            }
+
+
+            connection.connect();
+
+            if(data != null){
+                OutputStream outputStream = connection.getOutputStream();
+                outputStream.write(data.getBytes("utf-8"));
+                outputStream.close();
+            }
+
+            int responseCode = connection.getResponseCode();
+            if (responseCode == HttpsURLConnection.HTTP_OK) {
+                InputStream is = connection.getInputStream();
+                byte[] b = new byte[4096];
+                ByteArrayOutputStream baos = new ByteArrayOutputStream(b.length);
+                int len;
+                while ((len = is.read(b)) != -1) {
+                    baos.write(b, 0, len);
+                }
+                is.close();
+                return baos.toString("utf-8");
+            }
+            return connection.getResponseMessage();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if(connection != null){
+                connection.disconnect();
+            }
+        }
+        return null;
+    }
+
+
+    public static void main(String[] args) {
+        //灞�閮ㄤ俊浠绘墍鏈夎瘉涔﹀拰涓绘満
+        String result = HttpsUtil.get("https://127.0.0.1:8443/ssl-test/test01.do",true);
+        System.out.println(result);
+
+        //澶栭儴淇′换鎵�鏈夎瘉涔﹀拰涓绘満
+        HttpsTrustManager.allowAllSSL();
+        String response = HttpsUtil.get("https://127.0.0.1:8443/ssl-test/test01.do", false);
+        System.out.println(result);
+
+    }
+}
+
+class HttpsTrustManager implements X509TrustManager {
+
+    private static TrustManager[] trustManagers = {new HttpsTrustManager()};
+
+    @Override
+    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public X509Certificate[] getAcceptedIssuers() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public static void allowAllSSL() {
+        try {
+            SSLContext context = SSLContext.getInstance("TLS");
+            context.init(null, trustManagers, new SecureRandom());
+            HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
+            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+                @Override
+                public boolean verify(String hostname, SSLSession session) {
+                    return true;
+                }
+            });
+        } catch (NoSuchAlgorithmException | KeyManagementException e) {
+            e.printStackTrace();
+        }
+    }
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/SitesMapper.java b/server/services/src/main/java/com/doumee/dao/business/SitesMapper.java
index 0fbb35b..0b5adf9 100644
--- a/server/services/src/main/java/com/doumee/dao/business/SitesMapper.java
+++ b/server/services/src/main/java/com/doumee/dao/business/SitesMapper.java
@@ -1,8 +1,13 @@
 package com.doumee.dao.business;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.dao.business.model.Sites;
+import com.doumee.dao.business.web.request.SitesMonitorBikeDTO;
 import com.doumee.dao.business.web.request.SitesMonitorDTO;
+import com.doumee.dao.system.dto.QuerySystemUserDTO;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 /**
@@ -15,16 +20,12 @@
     /**
      * @return
      */
-    @Select("SELECT \n" +
-            "sites.id,\n" +
-            "sites.name as name,\n" +
-            "sites.code as code,\n" +
-            "count(l.id) as lid,\n" +
-            "count(l.bike_code ) as lbikeCount\n" +
-            "from \n" +
-            "sites sites\n" +
-            "LEFT JOIN locks l on sites.id = l.site_id\n" +
-            "GROUP BY sites.id ")
-    SitesMonitorDTO getSitesMonitorDTO();
+    Page<SitesMonitorDTO> getSitesMonitorDTO(IPage page, @Param("code") String code, @Param("name") String name);
 
+
+    Page<SitesMonitorBikeDTO> getSitesMonitorBikeDTO(IPage page,
+                                                     @Param("code") String code,
+                                                     @Param("name") String name,
+                                                     @Param("lockCode") String lockCode,
+                                                     @Param("hasBike") Boolean hasBike   );
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/web/request/RepairRequest.java b/server/services/src/main/java/com/doumee/dao/business/web/request/RepairRequest.java
index f76ba33..b62c6fb 100644
--- a/server/services/src/main/java/com/doumee/dao/business/web/request/RepairRequest.java
+++ b/server/services/src/main/java/com/doumee/dao/business/web/request/RepairRequest.java
@@ -19,9 +19,12 @@
 @ApiModel("鎶ヤ慨涓氬姟璇锋眰绫�")
 public class RepairRequest {
 
-    @ApiModelProperty(value = "杞﹁締缂栫爜")
+    @ApiModelProperty(value = "杞﹁締涓婚敭")
     private String binkeId;
 
+    @ApiModelProperty(value = "杞﹁締缂栫爜")
+    private String bikeCode;
+
     @ApiModelProperty(value = "缁忓害", example = "1")
     private BigDecimal longitude;
 
diff --git a/server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorBikeDTO.java b/server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorBikeDTO.java
new file mode 100644
index 0000000..ba82115
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorBikeDTO.java
@@ -0,0 +1,31 @@
+package com.doumee.dao.business.web.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author T14
+ */
+@Data
+@ApiModel("绔欑偣杞﹁締鐩戞帶")
+public class SitesMonitorBikeDTO {
+
+    @ApiModelProperty(value = "鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "缂栧彿")
+    private String code;
+
+    @ApiModelProperty(value = "閿佹鍣ㄦ暟")
+    private Integer localCode;
+
+    @ApiModelProperty(value = "鍦ㄦ灦杞﹁締鏁�")
+    private Integer bikeCode;
+
+    @ApiModelProperty(value = "杞﹁締绫诲瀷")
+    private String bikeType;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorDTO.java b/server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorDTO.java
index e0b4ff6..cdbce62 100644
--- a/server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorDTO.java
@@ -32,6 +32,13 @@
     private BigDecimal rate;
 
 
+    @ApiModelProperty(value = "閿佸ご鏄惁鏈夎溅")
+    private Boolean hasBike ;
+
+    @ApiModelProperty(value = "婊℃灦鐜�")
+    private String lockCode;
+
+
 
 
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/BikeRepairService.java b/server/services/src/main/java/com/doumee/service/business/BikeRepairService.java
index 13aab09..be6e5f3 100644
--- a/server/services/src/main/java/com/doumee/service/business/BikeRepairService.java
+++ b/server/services/src/main/java/com/doumee/service/business/BikeRepairService.java
@@ -108,5 +108,5 @@
      */
     long count(BikeRepair bikeRepair);
 
-    void saveRepair(RepairRequest repairRequest);
+    void saveRepair(RepairRequest repairRequest)  throws Exception;
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/SitesService.java b/server/services/src/main/java/com/doumee/service/business/SitesService.java
index 6d6f7c9..987001a 100644
--- a/server/services/src/main/java/com/doumee/service/business/SitesService.java
+++ b/server/services/src/main/java/com/doumee/service/business/SitesService.java
@@ -1,8 +1,14 @@
 package com.doumee.service.business;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Sites;
+import com.doumee.dao.business.web.request.SitesMonitorBikeDTO;
+import com.doumee.dao.business.web.request.SitesMonitorDTO;
+import org.apache.ibatis.annotations.Param;
+
 import java.util.List;
 
 /**
@@ -14,7 +20,7 @@
 
     /**
      * 鍒涘缓
-     * 
+     *
      * @param sites 瀹炰綋瀵硅薄
      * @return String
      */
@@ -78,7 +84,7 @@
      * @return List<Sites>
      */
     List<Sites> findList(Sites sites);
-  
+
     /**
      * 鍒嗛〉鏌ヨ
      *
@@ -94,4 +100,24 @@
      * @return long
      */
     long count(Sites sites);
+
+    /**
+     * 绔欑偣棰勮
+     * @param siteId
+     * @throws Exception
+     */
+    void siteReservesNotice(String siteId) throws Exception;
+
+
+    /**
+     * 鍒嗛〉鏌ヨ绔欑偣鍌ㄨ溅鐩戞帶
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<Sites>
+     */
+    PageData<SitesMonitorDTO> findSitesMonitorDTOPage(PageWrap<SitesMonitorDTO> pageWrap);
+
+
+    PageData<SitesMonitorBikeDTO> getSitesMonitorBikeDTO(PageWrap<SitesMonitorDTO> pageWrap);
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java
index 57d5745..7cb9291 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/BikeRepairServiceImpl.java
@@ -2,7 +2,9 @@
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.google.common.collect.Lists;
 
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.Constants;
+import com.doumee.core.dingding.DingDingNotice;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
@@ -49,6 +51,9 @@
 
     @Autowired
     private MultifileMapper multifileMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
     public String create(BikeRepair bikeRepair) {
@@ -157,7 +162,7 @@
 
 
     @Override
-    public void saveRepair(RepairRequest repairRequest){
+    public void saveRepair(RepairRequest repairRequest) throws Exception{
         BikeRepair bikeRepair = new BikeRepair();
         BeanUtils.copyProperties(repairRequest,bikeRepair);
         bikeRepair.setCreateDate(new Date());
@@ -178,6 +183,11 @@
                 multifileMapper.insert(multifile);
             }
         }
+        //鍙戦�侀拤閽夐�氱煡
+        DingDingNotice.bikeRepair(repairRequest,
+                systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(),
+                systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode());
+
     }
 
 
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java
index 24230ce..ded5f6d 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java
@@ -1,5 +1,8 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.dingding.DingDingNotice;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
@@ -7,20 +10,30 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.LocksMapper;
 import com.doumee.dao.business.SitesMapper;
+import com.doumee.dao.business.model.Locks;
 import com.doumee.dao.business.model.Sites;
+import com.doumee.dao.business.web.request.SitesMonitorBikeDTO;
+import com.doumee.dao.business.web.request.SitesMonitorDTO;
 import com.doumee.service.business.SitesService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.checkerframework.checker.units.qual.C;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 绔欑偣淇℃伅琛⊿ervice瀹炵幇
@@ -32,6 +45,12 @@
 
     @Autowired
     private SitesMapper sitesMapper;
+
+    @Autowired
+    private LocksMapper locksMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
     public String create(Sites sites) {
@@ -179,4 +198,37 @@
         QueryWrapper<Sites> wrapper = new QueryWrapper<>(sites);
         return sitesMapper.selectCount(wrapper);
     }
+
+    @Override
+    public PageData<SitesMonitorDTO> findSitesMonitorDTOPage(PageWrap<SitesMonitorDTO> pageWrap) {
+
+        IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        Page<SitesMonitorDTO> sitesMonitorDTO = sitesMapper.getSitesMonitorDTO(page, pageWrap.getModel().getCode(), pageWrap.getModel().getName());
+
+        if (!CollectionUtils.isEmpty(sitesMonitorDTO.getRecords())){
+            sitesMonitorDTO.getRecords().forEach(s->{
+                s.setRate(new BigDecimal(s.getBikeCount()).divide(new BigDecimal(s.getLocalCount()).setScale(2)));
+            });
+        }
+
+        return PageData.from(sitesMonitorDTO);
+    }
+
+    @Override
+    public void siteReservesNotice(String siteId) throws Exception {
+
+    }
+
+    @Override
+    public PageData<SitesMonitorBikeDTO> getSitesMonitorBikeDTO(PageWrap<SitesMonitorDTO> pageWrap) {
+        IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        Page<SitesMonitorBikeDTO> sitesMonitorDTO = sitesMapper.getSitesMonitorBikeDTO(page,
+                                                                        pageWrap.getModel().getCode(),
+                                                                        pageWrap.getModel().getName(),
+                                                                        pageWrap.getModel().getLockCode(),
+                                                                        pageWrap.getModel().getHasBike());
+
+
+        return PageData.from(sitesMonitorDTO);
+    }
 }
diff --git a/server/services/src/main/resources/mappers/SitesMapper.xml b/server/services/src/main/resources/mappers/SitesMapper.xml
new file mode 100644
index 0000000..985c2f0
--- /dev/null
+++ b/server/services/src/main/resources/mappers/SitesMapper.xml
@@ -0,0 +1,62 @@
+<?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.doumee.dao.business.SitesMapper">
+
+    <select id="getSitesMonitorDTO" resultType="com.doumee.dao.business.web.request.SitesMonitorDTO">
+
+        SELECT
+            sites.id,
+            sites.name as name,
+            sites.code as code,
+            count(l.id) as lid,
+            count(l.bike_code ) as lbikeCount
+        from
+            sites sites
+            LEFT JOIN locks l on sites.id = l.site_id
+        <where>
+            sites.isdeleted = 0
+            <if test="code != null and code != ''">
+                and sites.code like LIKE '%'||#{code}||'%'
+            </if>
+            <if test="name != null and name != ''">
+                and sites.name like LIKE '%'||#{name}||'%'
+            </if>
+        </where>
+
+        GROUP BY sites.id
+
+    </select>
+
+    <select id="getSitesMonitorBikeDTO" resultType="com.doumee.dao.business.web.request.SitesMonitorBikeDTO">
+        SELECT
+            sites.id,
+            sites.name as name,
+            sites.code as code,
+            l.name as locksName,
+            l.bike_code as bike_code,
+            bp.name as bikeType
+        from
+            sites sites
+        LEFT JOIN locks l on sites.id = l.site_id
+        LEFT JOIN base_param bp on bp.id = l.param_id
+        <where>
+            sites.isdeleted = 0
+            <if test="code != null and code != ''">
+                and sites.code like LIKE '%'||#{code}||'%'
+            </if>
+            <if test="name != null and name != ''">
+                and sites.name like LIKE '%'||#{name}||'%'
+            </if>
+            <if test="lockCode != null and lockCode != ''">
+                and l.code like LIKE '%'||#{lockCode}||'%'
+            </if>
+            <if test="hasBike != null and hasBike != false">
+                l.bike_code isnull
+            </if>
+            <if test="hasBike != null and hasBike != true">
+                l.bike_code notnull
+            </if>
+        </where>
+    </select>
+
+</mapper>
diff --git a/server/web/src/main/java/com/doumee/api/web/BusinessApi.java b/server/web/src/main/java/com/doumee/api/web/BusinessApi.java
index 0b481b2..f714118 100644
--- a/server/web/src/main/java/com/doumee/api/web/BusinessApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/BusinessApi.java
@@ -135,7 +135,7 @@
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
     })
-    public ApiResponse transactionsPage (@RequestBody RepairRequest repairRequest) {
+    public ApiResponse transactionsPage (@RequestBody RepairRequest repairRequest) throws Exception{
         repairRequest.setMemberId(getMemberId());
         bikeRepairService.saveRepair(repairRequest);
         return ApiResponse.success("鎿嶄綔鎴愬姛");

--
Gitblit v1.9.3