From e716cc1ee7b4e9d3deef839a77955890b85e262a Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 28 Jul 2022 11:43:23 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E5=88=86=E8=B4=A6=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ghy/order/service/impl/OrderMasterServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index fea63bae..5fd773d8 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -164,7 +164,7 @@ public class OrderMasterServiceImpl implements OrderMasterService { switch (financialDetail.getFinancialDetailType()) { case 0: // 上门师傅结单 要判断一下这个单是否已退款 - if (financialDetail.getPayStatus().equals(PayStatus.REFUND.getCode())) { + if (financialDetail.getPayStatus() < 2) { memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId()); memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add); } From 3a891072ba4fe43d9cb0eae0ef2e7af25470d508 Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Mon, 1 Aug 2022 15:51:49 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E5=AE=B9=E8=81=94=E4=BA=91=E7=9F=AD?= =?UTF-8?q?=E4=BF=A1=E9=AA=8C=E8=AF=81=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/tool/SMSController.java | 79 +++++++++++++++++++ .../java/com/ghy/web/pojo/vo/SmsRequest.java | 21 +++++ ghy-admin/src/main/resources/application.yaml | 6 ++ .../java/com/ghy/common/config/SmsConfig.java | 50 ++++++++++++ .../com/ghy/common/constant/SmsConstants.java | 18 +++++ .../com/ghy/common/utils/http/HttpUtils.java | 35 ++++++-- 6 files changed, 203 insertions(+), 6 deletions(-) create mode 100644 ghy-admin/src/main/java/com/ghy/web/controller/tool/SMSController.java create mode 100644 ghy-admin/src/main/java/com/ghy/web/pojo/vo/SmsRequest.java create mode 100644 ghy-common/src/main/java/com/ghy/common/config/SmsConfig.java create mode 100644 ghy-common/src/main/java/com/ghy/common/constant/SmsConstants.java diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/tool/SMSController.java b/ghy-admin/src/main/java/com/ghy/web/controller/tool/SMSController.java new file mode 100644 index 00000000..e58bd363 --- /dev/null +++ b/ghy-admin/src/main/java/com/ghy/web/controller/tool/SMSController.java @@ -0,0 +1,79 @@ +package com.ghy.web.controller.tool; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ghy.common.config.SmsConfig; +import com.ghy.common.constant.SmsConstants; +import com.ghy.common.core.domain.AjaxResult; +import com.ghy.common.utils.CacheUtils; +import com.ghy.common.utils.ExceptionUtil; +import com.ghy.common.utils.http.HttpUtils; +import com.ghy.common.utils.security.Md5Utils; +import com.ghy.web.pojo.vo.SmsRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * 容联云短信 + * @author clunt + */ +@Slf4j +@Controller +@RequestMapping("/tool/sms") +public class SMSController { + + private static final ThreadLocal timeFormat = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyyMMddHHmmss")); + + @Autowired + private SmsConfig smsConfig; + + @PostMapping("/send") + @ResponseBody + public AjaxResult sendSms(@RequestBody SmsRequest request){ + try { + // 短信验证码 + String code = String.valueOf((int)((Math.random() * 9 + 1) * Math.pow(10,5))); + + // 拼接请求题 + List dataList = new ArrayList<>(); + dataList.add(code); + dataList.add("3"); + request.setAppId(smsConfig.getAppId()); + request.setTemplateId(SmsConstants.TEMPLATE_ID); + request.setDatas(dataList); + + String url = (smsConfig.getUrl() + SmsConstants.TEMPLATE_PATH).replace("{accountSid}", smsConfig.getAccount()); + String time = timeFormat.get().format(new Date()); + String sigParameter = Md5Utils.hash(smsConfig.getAccount() + smsConfig.getToken() + time).toUpperCase(); + String authorization = Base64.getEncoder().encodeToString((smsConfig.getAccount() + ":" + time).getBytes(StandardCharsets.UTF_8)); + url = url.replace("{SigParameter}", sigParameter); + Map headerMap = new HashMap<>(); + headerMap.put("Content-Type", "application/json;charset=utf-8"); + headerMap.put("Accept", "application/json;"); + headerMap.put("Authorization", authorization); + // 调用第三方短信服务 + String result = HttpUtils.sendPost(url, JSON.toJSONString(request), headerMap); + if("000000".equals(JSONObject.parseObject(result).getString("statusCode"))){ + // 将短信验证码放进系统内存 + CacheUtils.put(request.getTo(), code); + return AjaxResult.success("验证码发送成功!"); + }else { + return AjaxResult.error(result); + } + }catch (Exception e){ + e.printStackTrace(); + log.error(ExceptionUtil.getExceptionMessage(e)); + return AjaxResult.error(e.getMessage()); + } + } + +} diff --git a/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SmsRequest.java b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SmsRequest.java new file mode 100644 index 00000000..382e3ee4 --- /dev/null +++ b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SmsRequest.java @@ -0,0 +1,21 @@ +package com.ghy.web.pojo.vo; + +import lombok.Data; + +import java.util.List; + +/** + * 容联短信请求体 + * @author clunt + */ +@Data +public class SmsRequest { + + private String to; + private String appId; + private String templateId; + private List datas; + private String subAppend; + private String reqId; + +} diff --git a/ghy-admin/src/main/resources/application.yaml b/ghy-admin/src/main/resources/application.yaml index 56cbc2e9..2681e883 100644 --- a/ghy-admin/src/main/resources/application.yaml +++ b/ghy-admin/src/main/resources/application.yaml @@ -130,3 +130,9 @@ jim: baidu: ak: 'ZQTgMW7W0GTuE7Ripb0HDp5TqRaOI6PZ' url: 'https://api.map.baidu.com/reverse_geocoding/v3/?ak=#AK#&output=json&coordtype=wgs84ll&location=' + +sms: + url: 'https://app.cloopen.com:8883' + account: '8a216da85f008800015f0eb223620557' + appId: '8a216da85f008800015f0eb224db055d' + token: '3cef1bc80d814637a236d93004e7ffa5' diff --git a/ghy-common/src/main/java/com/ghy/common/config/SmsConfig.java b/ghy-common/src/main/java/com/ghy/common/config/SmsConfig.java new file mode 100644 index 00000000..24633f4b --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/config/SmsConfig.java @@ -0,0 +1,50 @@ +package com.ghy.common.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 容联云短信配置 + * @author clunt + */ +@Component +@ConfigurationProperties(prefix = "sms") +public class SmsConfig { + + private String url; + private String account; + private String appId; + private String token; + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } +} diff --git a/ghy-common/src/main/java/com/ghy/common/constant/SmsConstants.java b/ghy-common/src/main/java/com/ghy/common/constant/SmsConstants.java new file mode 100644 index 00000000..04516a92 --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/constant/SmsConstants.java @@ -0,0 +1,18 @@ +package com.ghy.common.constant; + +/** + * 容联云短信配置 + * @author clunt + */ +public class SmsConstants { + + // 短信验证码通知模版 + public static final String TEMPLATE_ID = "216263"; + + // 短信模版发送地址 + public static final String TEMPLATE_URL = "https://app.cloopen.com:8883"; + + // 短信模版发送路径 + public static final String TEMPLATE_PATH = "/2013-12-26/Accounts/{accountSid}/SMS/TemplateSMS?sig={SigParameter}"; + +} diff --git a/ghy-common/src/main/java/com/ghy/common/utils/http/HttpUtils.java b/ghy-common/src/main/java/com/ghy/common/utils/http/HttpUtils.java index cde14c6a..fd8105fb 100644 --- a/ghy-common/src/main/java/com/ghy/common/utils/http/HttpUtils.java +++ b/ghy-common/src/main/java/com/ghy/common/utils/http/HttpUtils.java @@ -6,6 +6,8 @@ import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLConnection; import java.security.cert.X509Certificate; +import java.util.HashMap; +import java.util.Map; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; @@ -120,6 +122,19 @@ public class HttpUtils * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param) + { + return sendPost(url, param, null); + } + + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param, Map header) { PrintWriter out = null; BufferedReader in = null; @@ -135,6 +150,9 @@ public class HttpUtils conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Accept-Charset", "utf-8"); conn.setRequestProperty("contentType", "utf-8"); + if(header != null){ + header.forEach(conn::setRequestProperty); + } conn.setDoOutput(true); conn.setDoInput(true); out = new PrintWriter(conn.getOutputStream()); @@ -242,22 +260,27 @@ public class HttpUtils return result; } - public static String sendSSLPost(String url, String param) - { + public static String sendSSLPost(String url, String param){ + return sendSSLPost(url, param, null); + } + + public static String sendSSLPost(String url, String param, Map header){ StringBuilder result = new StringBuilder(); - String urlNameString = url + "?" + param; try { - log.info("sendSSLPost - {}", urlNameString); + log.info("sendSSLPost - {}", url); SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom()); - URL console = new URL(urlNameString); + URL console = new URL(url); HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Accept-Charset", "utf-8"); conn.setRequestProperty("contentType", "utf-8"); + if(header != null){ + header.forEach(conn::setRequestProperty); + } conn.setDoOutput(true); conn.setDoInput(true); @@ -271,7 +294,7 @@ public class HttpUtils { if (ret != null && !ret.trim().equals("")) { - result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8")); + result.append(new String(ret.getBytes("utf-8"), "utf-8")); } } log.info("recv - {}", result); From 7357620bf8d9dfa874ecc5e8af7aa04d2add7bee Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Tue, 2 Aug 2022 10:14:03 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=98=AF=E7=94=9F=E4=BA=A7/=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E7=B1=BB=E7=9B=AE=E4=B8=BA=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ghy-admin/src/main/resources/application.yaml | 2 +- .../src/main/resources/templates/goods/category/category.html | 1 + .../resources/templates/goods/deptcategory/deptcategory.html | 1 + .../templates/goods/deptcategory/deptservecategory.html | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ghy-admin/src/main/resources/application.yaml b/ghy-admin/src/main/resources/application.yaml index 2681e883..4681e8ec 100644 --- a/ghy-admin/src/main/resources/application.yaml +++ b/ghy-admin/src/main/resources/application.yaml @@ -59,7 +59,7 @@ spring: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss profiles: - active: dev + active: druid # 文件上传 servlet: multipart: diff --git a/ghy-admin/src/main/resources/templates/goods/category/category.html b/ghy-admin/src/main/resources/templates/goods/category/category.html index 3eaa4c8c..1ed56c8b 100644 --- a/ghy-admin/src/main/resources/templates/goods/category/category.html +++ b/ghy-admin/src/main/resources/templates/goods/category/category.html @@ -65,6 +65,7 @@ updateUrl: prefix + "/edit/{id}", removeUrl: prefix + "/remove/{id}", modalName: "类目", + expandAll: false, columns: [{ field: 'selectItem', radio: true diff --git a/ghy-admin/src/main/resources/templates/goods/deptcategory/deptcategory.html b/ghy-admin/src/main/resources/templates/goods/deptcategory/deptcategory.html index 07eb9c15..63129401 100644 --- a/ghy-admin/src/main/resources/templates/goods/deptcategory/deptcategory.html +++ b/ghy-admin/src/main/resources/templates/goods/deptcategory/deptcategory.html @@ -63,6 +63,7 @@ updateUrl: prefix + "/edit/{id}", removeUrl: prefix + "/remove/{id}", modalName: "类目", + expandAll: false, columns: [{ field: 'selectItem', radio: true diff --git a/ghy-admin/src/main/resources/templates/goods/deptcategory/deptservecategory.html b/ghy-admin/src/main/resources/templates/goods/deptcategory/deptservecategory.html index 745cf237..7f345e76 100644 --- a/ghy-admin/src/main/resources/templates/goods/deptcategory/deptservecategory.html +++ b/ghy-admin/src/main/resources/templates/goods/deptcategory/deptservecategory.html @@ -63,6 +63,7 @@ updateUrl: prefix + "/edit/{id}", removeUrl: prefix + "/remove/{id}", modalName: "类目", + expandAll: false, columns: [{ field: 'selectItem', radio: true From b651fb021a3a5133524ff2fe78a834ae49ed9e41 Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Tue, 2 Aug 2022 10:19:38 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=B1=BB=E7=9B=AE?= =?UTF-8?q?=E4=B8=BA=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/templates/goods/category/tree.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ghy-admin/src/main/resources/templates/goods/category/tree.html b/ghy-admin/src/main/resources/templates/goods/category/tree.html index c15252b1..6b50b1ed 100644 --- a/ghy-admin/src/main/resources/templates/goods/category/tree.html +++ b/ghy-admin/src/main/resources/templates/goods/category/tree.html @@ -36,7 +36,8 @@ var options = { url: url, expandLevel: 2, - onClick : zOnClick + onClick : zOnClick, + expandAll: false }; $.tree.init(options); }); From 80b9f9bbe16e066585fc40221e4db9930cfa5a79 Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Tue, 2 Aug 2022 17:12:38 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E5=B9=B2=E6=8E=89=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ghy-admin/src/main/resources/templates/login.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ghy-admin/src/main/resources/templates/login.html b/ghy-admin/src/main/resources/templates/login.html index 7be20233..22812da5 100644 --- a/ghy-admin/src/main/resources/templates/login.html +++ b/ghy-admin/src/main/resources/templates/login.html @@ -45,7 +45,7 @@

登录:

你若不离不弃,我必生死相依

- +
From a8ea092e24719a564960e3aa3eea37734f4388f9 Mon Sep 17 00:00:00 2001 From: HH Date: Wed, 3 Aug 2022 19:27:02 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=B1=BB=E7=9B=AE?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ghy-admin/src/main/resources/application.yaml | 2 +- .../templates/goods/category/edit.html | 137 ++++++++++++++++++ .../impl/GoodsCategoryServiceImpl.java | 4 +- .../mapper/goods/GoodsCategoryMapper.xml | 3 + 4 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 ghy-admin/src/main/resources/templates/goods/category/edit.html diff --git a/ghy-admin/src/main/resources/application.yaml b/ghy-admin/src/main/resources/application.yaml index 4681e8ec..2681e883 100644 --- a/ghy-admin/src/main/resources/application.yaml +++ b/ghy-admin/src/main/resources/application.yaml @@ -59,7 +59,7 @@ spring: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss profiles: - active: druid + active: dev # 文件上传 servlet: multipart: diff --git a/ghy-admin/src/main/resources/templates/goods/category/edit.html b/ghy-admin/src/main/resources/templates/goods/category/edit.html new file mode 100644 index 00000000..e1222007 --- /dev/null +++ b/ghy-admin/src/main/resources/templates/goods/category/edit.html @@ -0,0 +1,137 @@ + + + + + + +
+
+ + + + + + + + + + + +
+ +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ + +
+
+
+
+ +
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsCategoryServiceImpl.java b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsCategoryServiceImpl.java index c494f3b8..2630511f 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsCategoryServiceImpl.java +++ b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsCategoryServiceImpl.java @@ -74,7 +74,7 @@ public class GoodsCategoryServiceImpl implements GoodsCategoryService { if (category == null) { return false; } - return category.getGoodsCategoryId().equals(goodsCategory.getGoodsCategoryId()); + return !category.getGoodsCategoryId().equals(goodsCategory.getGoodsCategoryId()); } @Override @@ -83,7 +83,7 @@ public class GoodsCategoryServiceImpl implements GoodsCategoryService { if (category == null) { return false; } - return category.getGoodsCategoryId().equals(goodsCategory.getGoodsCategoryId()); + return !category.getGoodsCategoryId().equals(goodsCategory.getGoodsCategoryId()); } @Override diff --git a/ghy-goods/src/main/resources/mapper/goods/GoodsCategoryMapper.xml b/ghy-goods/src/main/resources/mapper/goods/GoodsCategoryMapper.xml index c1e7262d..615de5ea 100644 --- a/ghy-goods/src/main/resources/mapper/goods/GoodsCategoryMapper.xml +++ b/ghy-goods/src/main/resources/mapper/goods/GoodsCategoryMapper.xml @@ -56,6 +56,7 @@ goods_category_code = #{goodsCategoryCode}, goods_category_name = #{goodsCategoryName}, parent_category_id = #{parentCategoryId}, + category_sort = #{categorySort}, level = #{level}, type = #{type}, remark = #{remark}, @@ -79,6 +80,7 @@ goods_category_code, goods_category_name, parent_category_id, + category_sort, level, type, remark, @@ -89,6 +91,7 @@ #{goodsCategoryCode}, #{goodsCategoryName}, #{parentCategoryId}, + #{categorySort}, #{level}, #{type}, #{remark}, From e158af6c86c0fd5acb70b312bf4513b99aecc465 Mon Sep 17 00:00:00 2001 From: HH Date: Wed, 3 Aug 2022 19:30:30 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=98=AF=E7=94=9F=E4=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ghy-admin/src/main/resources/application.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ghy-admin/src/main/resources/application.yaml b/ghy-admin/src/main/resources/application.yaml index 2681e883..4681e8ec 100644 --- a/ghy-admin/src/main/resources/application.yaml +++ b/ghy-admin/src/main/resources/application.yaml @@ -59,7 +59,7 @@ spring: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss profiles: - active: dev + active: druid # 文件上传 servlet: multipart: From 38edc661eac807ea81aefbdeb8ce404f2567deb9 Mon Sep 17 00:00:00 2001 From: "kuang.yifei@iwhalecloud.com" Date: Thu, 4 Aug 2022 16:30:43 +0800 Subject: [PATCH 8/9] =?UTF-8?q?(=E8=81=8A=E5=A4=A9=E5=AE=A4)=E6=9E=81?= =?UTF-8?q?=E5=85=89=E6=8E=A8=E9=80=81=E7=94=A8=E6=88=B7=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ghy-admin/pom.xml | 6 ++++ .../controller/message/JimUserController.java | 36 +++++++++++++++++++ ghy-admin/src/main/resources/application.yaml | 6 ++-- .../com/ghy/framework/config/ShiroConfig.java | 1 + .../com/ghy/message/config/JimConfig.java | 35 ++++++++++++++---- .../ghy/message/domain/JimRegisterInfo.java | 4 +++ .../java/com/ghy/message/domain/JimUser.java | 12 +++++++ .../com/ghy/message/mapper/JimUserMapper.java | 14 ++++++++ .../ghy/message/service/JimUserService.java | 12 +++++++ .../service/impl/JimUserServiceImpl.java | 36 +++++++++++++++++++ pom.xml | 12 +++---- 11 files changed, 159 insertions(+), 15 deletions(-) create mode 100644 ghy-admin/src/main/java/com/ghy/web/controller/message/JimUserController.java create mode 100644 ghy-message/src/main/java/com/ghy/message/domain/JimRegisterInfo.java create mode 100644 ghy-message/src/main/java/com/ghy/message/mapper/JimUserMapper.java create mode 100644 ghy-message/src/main/java/com/ghy/message/service/JimUserService.java create mode 100644 ghy-message/src/main/java/com/ghy/message/service/impl/JimUserServiceImpl.java diff --git a/ghy-admin/pom.xml b/ghy-admin/pom.xml index 776137e3..3b470cfe 100644 --- a/ghy-admin/pom.xml +++ b/ghy-admin/pom.xml @@ -95,6 +95,12 @@ com.ghy ghy-worker + + + com.ghy + ghy-message + + org.springframework.boot spring-boot-test diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/message/JimUserController.java b/ghy-admin/src/main/java/com/ghy/web/controller/message/JimUserController.java new file mode 100644 index 00000000..c6904f24 --- /dev/null +++ b/ghy-admin/src/main/java/com/ghy/web/controller/message/JimUserController.java @@ -0,0 +1,36 @@ +package com.ghy.web.controller.message; + +import com.ghy.common.core.controller.BaseController; +import com.ghy.common.core.domain.AjaxResult; +import com.ghy.common.utils.ExceptionUtil; +import com.ghy.message.domain.JimUser; +import com.ghy.message.service.JimUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/jim/user") +public class JimUserController extends BaseController { + + @Autowired + private JimUserService jimUserService; + + @PostMapping("/register") + public AjaxResult register(){ + try { + JimUser jimUser = new JimUser(); + jimUser.setUserName("clunt"); + jimUser.setPassword("password"); + jimUserService.registerJimUser(jimUser); + return AjaxResult.success("注册成功!"); + }catch (Exception e){ + e.printStackTrace(); + logger.error(ExceptionUtil.getExceptionMessage(e)); + return AjaxResult.error("注册失败!"); + } + } + +} + diff --git a/ghy-admin/src/main/resources/application.yaml b/ghy-admin/src/main/resources/application.yaml index 4681e8ec..594cfa10 100644 --- a/ghy-admin/src/main/resources/application.yaml +++ b/ghy-admin/src/main/resources/application.yaml @@ -122,9 +122,9 @@ adapay: notifyUrl: 'https://www.opsoul.com/adapay/callback' jim: - appKey: '' - masterSecret: '' - maxRetryTimes: '' + appKey: '110e8830290152d76e2f1d97' + masterSecret: 'ec49918a5d89526722b05924' + maxRetryTimes: '3' # 百度地图应用api baidu: diff --git a/ghy-framework/src/main/java/com/ghy/framework/config/ShiroConfig.java b/ghy-framework/src/main/java/com/ghy/framework/config/ShiroConfig.java index 55fed6be..86e8ce15 100644 --- a/ghy-framework/src/main/java/com/ghy/framework/config/ShiroConfig.java +++ b/ghy-framework/src/main/java/com/ghy/framework/config/ShiroConfig.java @@ -288,6 +288,7 @@ public class ShiroConfig filterChainDefinitionMap.put("/adapay/**", "anon"); filterChainDefinitionMap.put("/system/area/**", "anon"); filterChainDefinitionMap.put("/customer/address/**", "anon"); + filterChainDefinitionMap.put("/jim/**", "anon"); filterChainDefinitionMap.put("/MP_verify_bRFuvYpyQ4WLr0on.txt", "anon"); // 对静态资源设置匿名访问 filterChainDefinitionMap.put("/favicon.ico**", "anon"); diff --git a/ghy-message/src/main/java/com/ghy/message/config/JimConfig.java b/ghy-message/src/main/java/com/ghy/message/config/JimConfig.java index fcac9b07..399aff2b 100644 --- a/ghy-message/src/main/java/com/ghy/message/config/JimConfig.java +++ b/ghy-message/src/main/java/com/ghy/message/config/JimConfig.java @@ -10,9 +10,8 @@ import org.springframework.context.annotation.Configuration; * @author clunt * 极光消息配置文件 */ -//@Configuration -//@ConfigurationProperties(prefix = "jim") -@Data +@Configuration +@ConfigurationProperties(prefix = "jim") public class JimConfig { private String appKey; @@ -21,9 +20,33 @@ public class JimConfig { private String maxRetryTimes; - @Bean - public JMessageClient jMessageClient(){ - return new JMessageClient(appKey,masterSecret,maxRetryTimes); + public String getAppKey() { + return appKey; } + public void setAppKey(String appKey) { + this.appKey = appKey; + } + + public String getMasterSecret() { + return masterSecret; + } + + public void setMasterSecret(String masterSecret) { + this.masterSecret = masterSecret; + } + + public String getMaxRetryTimes() { + return maxRetryTimes; + } + + public void setMaxRetryTimes(String maxRetryTimes) { + this.maxRetryTimes = maxRetryTimes; + } + +// @Bean +// public JMessageClient jMessageClient(){ +// return new JMessageClient(appKey,masterSecret,maxRetryTimes); +// } + } diff --git a/ghy-message/src/main/java/com/ghy/message/domain/JimRegisterInfo.java b/ghy-message/src/main/java/com/ghy/message/domain/JimRegisterInfo.java new file mode 100644 index 00000000..7b587bcd --- /dev/null +++ b/ghy-message/src/main/java/com/ghy/message/domain/JimRegisterInfo.java @@ -0,0 +1,4 @@ +package com.ghy.message.domain; + +public class JimRegisterInfo { +} diff --git a/ghy-message/src/main/java/com/ghy/message/domain/JimUser.java b/ghy-message/src/main/java/com/ghy/message/domain/JimUser.java index 795af115..b4691264 100644 --- a/ghy-message/src/main/java/com/ghy/message/domain/JimUser.java +++ b/ghy-message/src/main/java/com/ghy/message/domain/JimUser.java @@ -10,6 +10,18 @@ import lombok.Data; @Data public class JimUser extends BaseEntity { + // 自增组件 + private Long jimUserId; + + // D101W7 系统编码 + private String sysUser; + + private String userName; + + private String password; + + private String appKey; + } diff --git a/ghy-message/src/main/java/com/ghy/message/mapper/JimUserMapper.java b/ghy-message/src/main/java/com/ghy/message/mapper/JimUserMapper.java new file mode 100644 index 00000000..e0a9e8a0 --- /dev/null +++ b/ghy-message/src/main/java/com/ghy/message/mapper/JimUserMapper.java @@ -0,0 +1,14 @@ +package com.ghy.message.mapper; + +import org.apache.ibatis.annotations.Mapper; + +/** + * 极光推送用户mapper + * @author clunt + */ +@Mapper +public interface JimUserMapper { + + + +} diff --git a/ghy-message/src/main/java/com/ghy/message/service/JimUserService.java b/ghy-message/src/main/java/com/ghy/message/service/JimUserService.java new file mode 100644 index 00000000..b7faeb37 --- /dev/null +++ b/ghy-message/src/main/java/com/ghy/message/service/JimUserService.java @@ -0,0 +1,12 @@ +package com.ghy.message.service; + +import com.ghy.message.domain.JimUser; + +public interface JimUserService { + + /** + * 注册极光推送信息并入库记录 + * */ + int registerJimUser(JimUser jimUser) throws Exception; + +} diff --git a/ghy-message/src/main/java/com/ghy/message/service/impl/JimUserServiceImpl.java b/ghy-message/src/main/java/com/ghy/message/service/impl/JimUserServiceImpl.java new file mode 100644 index 00000000..dbc44ef1 --- /dev/null +++ b/ghy-message/src/main/java/com/ghy/message/service/impl/JimUserServiceImpl.java @@ -0,0 +1,36 @@ +package com.ghy.message.service.impl; + +import cn.jmessage.api.JMessageClient; +import cn.jmessage.api.common.model.RegisterInfo; +import com.ghy.message.config.JimConfig; +import com.ghy.message.domain.JimUser; +import com.ghy.message.service.JimUserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 极光推送用户impl + * @author clunt + */ +@Slf4j +@Service +public class JimUserServiceImpl implements JimUserService { + + @Resource + private JimConfig jimConfig; + + @Override + public int registerJimUser(JimUser jimUser) throws Exception{ + JMessageClient messageClient = new JMessageClient(jimConfig.getAppKey(),jimConfig.getMasterSecret()); + RegisterInfo.Builder builder = new RegisterInfo.Builder(); + builder.setUsername(jimUser.getUserName()); + builder.setPassword(jimUser.getPassword()); + RegisterInfo [] registerInfos = new RegisterInfo[1]; + registerInfos[0] = builder.build(); + String result = messageClient.registerUsers(registerInfos); + return 0; + } + +} diff --git a/pom.xml b/pom.xml index 929f5f9f..2698500c 100644 --- a/pom.xml +++ b/pom.xml @@ -313,11 +313,11 @@ - - - - - + + com.ghy + ghy-message + ${ghy.version} + @@ -347,7 +347,7 @@ ghy-common ghy-custom ghy-worker - + ghy-message pom From 7bc56e0b683accba9bb5206a078984b32f9ecad3 Mon Sep 17 00:00:00 2001 From: HH Date: Thu, 4 Aug 2022 19:35:14 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E6=89=A3=E6=AC=BE=E3=80=81=E8=87=AA=E5=8A=A8=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=AE=A2=E5=8D=95=E5=B9=B6=E5=88=86=E8=B4=A6?= =?UTF-8?q?=E6=8F=90=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ghy/common/enums/FinancialDetailType.java | 3 +- .../ghy/order/mapper/OrderDetailMapper.java | 6 + .../ghy/order/mapper/OrderMasterMapper.java | 5 + .../ghy/order/service/OrderDetailService.java | 6 + .../ghy/order/service/OrderMasterService.java | 5 + .../service/impl/OrderDetailServiceImpl.java | 7 + .../service/impl/OrderMasterServiceImpl.java | 11 ++ .../mapper/order/OrderDetailMapper.xml | 8 ++ .../mapper/order/OrderMasterMapper.xml | 8 ++ .../ghy/payment/domain/FinancialDetail.java | 6 +- .../ghy/payment/domain/OrderFineRecord.java | 33 +++++ .../payment/mapper/OrderFineRecordMapper.java | 15 ++ .../financial/OrderFineRecordMapper.xml | 38 +++++ .../quartz/service/impl/OrderServiceImpl.java | 135 ++++++++++++++++-- 14 files changed, 270 insertions(+), 16 deletions(-) create mode 100644 ghy-payment/src/main/java/com/ghy/payment/domain/OrderFineRecord.java create mode 100644 ghy-payment/src/main/java/com/ghy/payment/mapper/OrderFineRecordMapper.java create mode 100644 ghy-payment/src/main/resources/mapper/financial/OrderFineRecordMapper.xml diff --git a/ghy-common/src/main/java/com/ghy/common/enums/FinancialDetailType.java b/ghy-common/src/main/java/com/ghy/common/enums/FinancialDetailType.java index 9bbb996a..40605ec0 100644 --- a/ghy-common/src/main/java/com/ghy/common/enums/FinancialDetailType.java +++ b/ghy-common/src/main/java/com/ghy/common/enums/FinancialDetailType.java @@ -11,7 +11,8 @@ public enum FinancialDetailType { WORKER_FEE(1, "大师傅/店铺提成金额"), PLATFORM_FEE(2, "平台提成金额"), PLACE_FEE(3, "分销金额,可能存在多级"), - RETURN_FEE(4, "退款金额"); + RETURN_FEE(4, "退款金额"), + FINE_FEE(5, "超时罚金"); private final Integer code; private final String desc; diff --git a/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java b/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java index ee2243f6..1d482c97 100644 --- a/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java +++ b/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java @@ -1,6 +1,7 @@ package com.ghy.order.mapper; import com.ghy.order.domain.OrderDetail; +import com.ghy.order.domain.OrderMaster; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -79,4 +80,9 @@ public interface OrderDetailMapper { * @param orderDetail 子订单 */ int updateByOrderMasterId(OrderDetail orderDetail); + + /** + * 查询指定状态的订单 + */ + List selectByStatus(List status); } diff --git a/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java b/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java index 82867922..6f289668 100644 --- a/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java +++ b/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java @@ -72,4 +72,9 @@ public interface OrderMasterMapper { * @return 0失败 1成功 */ int updateStatus(@Param("orderMasterId") Long orderMasterId, @Param("orderStatus") int orderStatus); + + /** + * 查询指定状态的订单 + */ + List selectByStatus(List status); } diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java index 72ab7a8e..a4506fa3 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java @@ -1,6 +1,7 @@ package com.ghy.order.service; import com.ghy.order.domain.OrderDetail; +import com.ghy.order.domain.OrderMaster; import java.util.List; import java.util.Map; @@ -92,4 +93,9 @@ public interface OrderDetailService { * @param orderDetail 子订单 */ void updateByOrderMasterId(OrderDetail orderDetail); + + /** + * 查询指定状态的订单 + */ + List selectByStatus(List status); } diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java index 3d435eaa..d0e8f363 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java @@ -99,4 +99,9 @@ public interface OrderMasterService { * @param agree 0=不同意 1=同意 */ void cancelAgree(Long orderMasterId, Integer agree); + + /** + * 查询指定状态的订单 + */ + List selectByStatus(List status); } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java index 97561861..e6a3c416 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java @@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -82,6 +83,7 @@ public class OrderDetailServiceImpl implements OrderDetailService { for (OrderDetail detail : orderDetailMapper.selectByOrderMasterId(detailInfo.getOrderMasterId())) { if (detail.getOrderStatus() < orderStatus) { flag = false; + break; } } if (flag) { @@ -262,4 +264,9 @@ public class OrderDetailServiceImpl implements OrderDetailService { orderDetailMapper.updateByOrderMasterId(orderDetail); } + @Override + public List selectByStatus(List status) { + Assert.isTrue(!CollectionUtils.isEmpty(status), "订单状态为空"); + return orderDetailMapper.selectByStatus(status); + } } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index 5fd773d8..43470ba2 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -30,6 +30,7 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -193,6 +194,10 @@ public class OrderMasterServiceImpl implements OrderMasterService { case 4: // 退款 confirmAmt = confirmAmt.subtract(financialDetail.getPayMoney()); + case 5: + // 订单超时罚金 归平台所有 + memberMap.merge("0", financialDetail.getPayMoney(), BigDecimal::add); + break; default: break; } @@ -324,6 +329,12 @@ public class OrderMasterServiceImpl implements OrderMasterService { } } + @Override + public List selectByStatus(List status) { + Assert.isTrue(!CollectionUtils.isEmpty(status), "订单状态为空"); + return orderMasterMapper.selectByStatus(status); + } + /** * 主订单发起退款 * diff --git a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml index 19c05327..ff8fec5e 100644 --- a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml +++ b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml @@ -223,4 +223,12 @@ + + diff --git a/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml index 5883ef11..19b173e8 100644 --- a/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml +++ b/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml @@ -256,4 +256,12 @@ WHERE `code` = #{orderMasterCode} + + diff --git a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java index 36089407..839a14c8 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java +++ b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java @@ -3,6 +3,7 @@ package com.ghy.payment.domain; import com.ghy.common.annotation.Excel; import com.ghy.common.core.domain.BaseEntity; import lombok.Data; +import lombok.EqualsAndHashCode; import java.math.BigDecimal; import java.util.Date; @@ -12,6 +13,7 @@ import java.util.Date; * 财务细单(可能是师傅分佣后的细单关联,也可能是分佣账单,平台提成账单等类型) */ @Data +@EqualsAndHashCode(callSuper = true) public class FinancialDetail extends BaseEntity { private static final long serialVersionUID = 1L; @@ -46,14 +48,14 @@ public class FinancialDetail extends BaseEntity { @Excel(name = "实付金额", cellType = Excel.ColumnType.STRING) private BigDecimal payMoney; - @Excel(name = "财务子单类型,1师傅转派/2多级分销/3平台抽成/4撤销支付或退款", cellType = Excel.ColumnType.NUMERIC) + @Excel(name = "财务子单类型,1师傅转派/2多级分销/3平台抽成/4撤销支付或退款/5超时罚金", cellType = Excel.ColumnType.NUMERIC) private Integer financialDetailType; /** * 收款人ID * 当财务子单类型是师傅转派时 收款人ID是师傅或徒弟的workerId * 当财务子单类型是多级分销时 收款人ID是分销者的customerId - * 当财务子单类型是平台抽成和退款时 无需填写收款人ID + * 当财务子单类型是4或5时 无需填写收款人ID */ @Excel(name = "收款人ID", cellType = Excel.ColumnType.NUMERIC) private Long payeeId; diff --git a/ghy-payment/src/main/java/com/ghy/payment/domain/OrderFineRecord.java b/ghy-payment/src/main/java/com/ghy/payment/domain/OrderFineRecord.java new file mode 100644 index 00000000..edf3da58 --- /dev/null +++ b/ghy-payment/src/main/java/com/ghy/payment/domain/OrderFineRecord.java @@ -0,0 +1,33 @@ +package com.ghy.payment.domain; + +import lombok.Data; + +import java.util.Date; + +/** + * 订单扣款记录 + * + * @author HH 2022/8/4 + */ +@Data +public class OrderFineRecord { + + private Long id; + + private Long orderDetailId; + + private Integer fineType; + + private Integer orderStatus; + + private Date createTime; + + public OrderFineRecord() { + } + + public OrderFineRecord(Long orderDetailId, Integer fineType, Integer orderStatus) { + this.orderDetailId = orderDetailId; + this.fineType = fineType; + this.orderStatus = orderStatus; + } +} diff --git a/ghy-payment/src/main/java/com/ghy/payment/mapper/OrderFineRecordMapper.java b/ghy-payment/src/main/java/com/ghy/payment/mapper/OrderFineRecordMapper.java new file mode 100644 index 00000000..974b972a --- /dev/null +++ b/ghy-payment/src/main/java/com/ghy/payment/mapper/OrderFineRecordMapper.java @@ -0,0 +1,15 @@ +package com.ghy.payment.mapper; + +import com.ghy.payment.domain.OrderFineRecord; + +import java.util.List; + +/** + * 订单扣款记录 + */ +public interface OrderFineRecordMapper { + + List selectList(OrderFineRecord orderFineRecord); + + int insert(OrderFineRecord orderFineRecord); +} diff --git a/ghy-payment/src/main/resources/mapper/financial/OrderFineRecordMapper.xml b/ghy-payment/src/main/resources/mapper/financial/OrderFineRecordMapper.xml new file mode 100644 index 00000000..458255a7 --- /dev/null +++ b/ghy-payment/src/main/resources/mapper/financial/OrderFineRecordMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + SELECT id, order_detail_id, fine_type, order_status, create_time + FROM order_fine_record + + + + + + INSERT INTO order_fine_record (order_detail_id, fine_type, order_status) + VALUES (#{orderDetailId}, #{fineType}, #{orderStatus}) + + \ No newline at end of file diff --git a/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java b/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java index dea627d6..0dd622c2 100644 --- a/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java +++ b/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java @@ -1,35 +1,144 @@ package com.ghy.quartz.service.impl; +import com.ghy.common.enums.FinancialDetailType; +import com.ghy.common.enums.OrderStatus; +import com.ghy.order.domain.OrderDetail; +import com.ghy.order.domain.OrderMaster; +import com.ghy.order.service.OrderDetailService; import com.ghy.order.service.OrderMasterService; -import com.ghy.payment.service.FinancialMasterService; +import com.ghy.payment.domain.FinancialDetail; +import com.ghy.payment.domain.OrderFineRecord; +import com.ghy.payment.mapper.OrderFineRecordMapper; +import com.ghy.payment.service.FinancialDetailService; import com.ghy.quartz.service.OrderService; -import org.springframework.beans.factory.annotation.Autowired; +import com.huifu.adapay.core.exception.BaseAdaPayException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Calendar; +import java.util.Date; +import java.util.List; @Service public class OrderServiceImpl implements OrderService { - @Autowired - private OrderMasterService orderMasterService; + private static final Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class); + /** + * 一小时的毫秒数 + */ + private static final long HOUR_TIME_MILLIS = 60 * 60 * 1000L; + /** + * 超时罚金2元 + */ + private static final BigDecimal TIMEOUT_MONEY = BigDecimal.valueOf(2); - @Autowired - private FinancialMasterService financialMasterService; + /** + * 需要超时扣款的订单状态 + */ + @Value("${order.timeout.status:-4,-3,-2,1,2,3}") + private List timeoutOrderStatus; + + @Resource + private ThreadPoolTaskExecutor executor; + @Resource + private OrderMasterService orderMasterService; + @Resource + private OrderDetailService orderDetailService; + @Resource + private OrderFineRecordMapper orderFineRecordMapper; + @Resource + private FinancialDetailService financialDetailService; @Override public void overTimeOrder(String orderStatus) { - // 查询符合超时的单 + LocalDateTime now = LocalDateTime.now(); + int nowDay = now.getDayOfMonth(); + int nowHour = now.getHour(); + if (nowHour > 17 || nowHour < 9) { + // 如果处于休息时间 定时任务不执行 + return; + } - // 更新对应单的状态 + // 查询符合超时的单 + List orders = orderDetailService.selectByStatus(timeoutOrderStatus); + for (OrderDetail order : orders) { + Date updateTime = order.getUpdateTime(); + Calendar instance = Calendar.getInstance(); + instance.setTime(updateTime); + if (instance.get(Calendar.DAY_OF_MONTH) == nowDay) { + // 如果订单更新的时间是今天 + if (System.currentTimeMillis() - updateTime.getTime() > HOUR_TIME_MILLIS * 4) { + // 并且距离上一次更新时间已经超过4h 则判定超时 + executor.execute(() -> orderTimeout(order)); + } + } else { + // 如果订单更新的时间不是今天 + if (System.currentTimeMillis() - updateTime.getTime() > HOUR_TIME_MILLIS * 19) { + // 并且距离上一次更新时间已经超过15h 则判定超时 + executor.execute(() -> orderTimeout(order)); + } + } + } + + } + + @Transactional(rollbackFor = Exception.class) + public void orderTimeout(OrderDetail order) { + // 查询扣款记录 如果已经扣过了 就不处理了 + OrderFineRecord orderFineRecord = new OrderFineRecord(order.getId(), 1, order.getOrderStatus()); + List records = orderFineRecordMapper.selectList(orderFineRecord); + if (!CollectionUtils.isEmpty(records)) { + return; + } + + // 保存一条扣款记录 + orderFineRecordMapper.insert(orderFineRecord); + + // 从子订单对应的财务单里扣除2元 + FinancialDetail orderFinancial = financialDetailService.selectByOrderDetailId(order.getId()); + orderFinancial.setPayMoney(orderFinancial.getPayMoney().subtract(TIMEOUT_MONEY)); + financialDetailService.updateFinancialDetail(orderFinancial); // 生成对应的扣款明细 + FinancialDetail fineFinancial = new FinancialDetail(); + fineFinancial.setDeptId(orderFinancial.getDeptId()); + fineFinancial.setCode(financialDetailService.createCode()); + fineFinancial.setFinancialMasterId(orderFinancial.getFinancialMasterId()); + fineFinancial.setFinancialMasterCode(orderFinancial.getFinancialMasterCode()); + fineFinancial.setPayMoney(TIMEOUT_MONEY); + fineFinancial.setFinancialDetailType(FinancialDetailType.FINE_FEE.getCode()); + financialDetailService.insertFinancialDetail(fineFinancial); } + @Override public void finishOrder() { - // 查询符合自动确认的订单 - - // 更新符合自动确认订单的状态 - - // 调用分账动作 + OrderMaster orderMaster = new OrderMaster(); + orderMaster.setOrderStatus(OrderStatus.FINISH_CHECK.code()); + List orders = orderMasterService.selectOrderMasterList(orderMaster); + long now = System.currentTimeMillis(); + long day14ago = now - (14 * 24 * 60 * 60 * 1000L); + for (OrderMaster order : orders) { + // 查询符合自动确认的订单 + if (day14ago > order.getUpdateTime().getTime()) { + logger.info("订单自动完成[id={}, code={}]", order.getId(), order.getCode()); + try { + // 完单流程(分账与提现) + orderMasterService.finish(order.getId()); + // 修改订单状态 + orderMasterService.updateStatus(order.getId(), OrderStatus.FINISH.code()); + } catch (BaseAdaPayException e) { + logger.error("订单自动完成[id={}, code={}]出错", order.getId(), order.getCode(), e); + } + } + } } }