From 945a278393bef3adc650fba5bc050b82535d5f19 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期三, 11 十月 2023 10:31:15 +0800
Subject: [PATCH] 111
---
server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java | 60 ++++++++++
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/core/constants/Constants.java | 11 +
server/services/src/main/java/com/doumee/service/business/SitesService.java | 7 +
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/service/business/BikeRepairService.java | 2
9 files changed, 310 insertions(+), 4 deletions(-)
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 3f9acf4..ccee564 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+"×tamp="+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+"×tamp="+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/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/service/business/BikeRepairService.java b/server/services/src/main/java/com/doumee/service/business/BikeRepairService.java
index c5efe34..cab1ff4 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
@@ -107,5 +107,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..52c1306 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
@@ -94,4 +94,11 @@
* @return long
*/
long count(Sites sites);
+
+ /**
+ * 绔欑偣棰勮
+ * @param siteId
+ * @throws Exception
+ */
+ void siteReservesNotice(String siteId) throws Exception;
}
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 e75b451..29cc504 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) {
@@ -179,7 +184,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());
@@ -200,6 +205,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..7e7b37e 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,28 @@
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.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 +43,12 @@
@Autowired
private SitesMapper sitesMapper;
+
+ @Autowired
+ private LocksMapper locksMapper;
+
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
@Override
public String create(Sites sites) {
@@ -179,4 +196,47 @@
QueryWrapper<Sites> wrapper = new QueryWrapper<>(sites);
return sitesMapper.selectCount(wrapper);
}
+
+ @Async
+ @Override
+ public void siteReservesNotice(String siteId) throws Exception{
+ //绔欑偣淇℃伅鏌ヨ
+ Sites sites = sitesMapper.selectById(siteId);
+ if(Objects.isNull(sites)){
+ return;
+ }
+ //鏌ヨ绔欑偣涓嬮攣澶存暟閲�
+ List<Locks> locksList = locksMapper.selectList(new QueryWrapper<Locks>().eq("status", Constants.ZERO).eq("site_id",siteId));
+ if(Objects.isNull(locksList)||locksList.size()==Constants.ZERO){
+ return;
+ }
+ //鑾峰彇绌洪攣澶存暟閲�
+ Integer empLocks = locksList.stream().filter(l -> StringUtils.isEmpty(l.getBikeCode())).collect(Collectors.toList()).size();
+ //閿佸ご姝e父瀛樿溅鏁伴噺
+ Integer unEmpLocks = locksList.size() - empLocks;
+ BigDecimal warnMax = new BigDecimal(String.valueOf(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.WARN_MAX)));
+ BigDecimal warnMin = new BigDecimal(String.valueOf(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.WARN_MIN)));
+ //瓒呭嚭棰勮鏈�澶у��
+ if(empLocks>Constants.ZERO){
+ if(BigDecimal.valueOf(empLocks).divide(BigDecimal.valueOf(locksList.size())).multiply(BigDecimal.valueOf(100)).compareTo(warnMax)>Constants.ZERO){
+ DingDingNotice.reservesNotice(sites.getName(),
+ systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(),
+ systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode(),
+ Constants.ZERO,warnMax);
+ return;
+ };
+ }
+ //浣庝簬棰勮鏈�灏忓��
+ if(unEmpLocks>Constants.ZERO){
+ if(BigDecimal.valueOf(unEmpLocks).divide(BigDecimal.valueOf(locksList.size())).multiply(BigDecimal.valueOf(100)).compareTo(warnMin)<Constants.ZERO){
+ DingDingNotice.reservesNotice(sites.getName(),
+ systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(),
+ systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode(),
+ Constants.ONE,warnMin);
+ return;
+ }
+ }
+ }
+
+
}
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