From 277f2d65a70bddbf9c571e2023315faad26e12d0 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期一, 18 三月 2024 14:11:44 +0800
Subject: [PATCH] Merge branch 'master' into 1.0.1
---
server/service/src/main/java/com/doumee/core/wx/WxMiniConfig.java | 90 ++++++++
server/service/src/main/java/com/doumee/core/wx/WxMsgVO.java | 23 ++
server/service/src/main/java/com/doumee/core/wx/AccessToken.java | 30 ++
server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java | 111 ++++++++-
server/service/src/main/java/com/doumee/core/wx/TemplateData.java | 19 +
server/service/src/main/java/com/doumee/service/system/SystemLoginService.java | 21 +
server/pom.xml | 10
server/service/src/main/java/com/doumee/core/wx/SpringUtils.java | 69 ++++++
server/service/src/main/java/com/doumee/dao/system/dto/WxMiniLoginDTO.java | 28 ++
server/service/src/main/java/com/doumee/core/utils/Constants.java | 4
server/service/src/main/java/com/doumee/core/wx/WxPayProperties.java | 48 ++++
server/service/src/main/java/com/doumee/core/wx/SendWxMessage.java | 164 ++++++++++++++
server/company/src/main/java/com/doumee/api/system/SystemController.java | 23 +
server/platform/src/main/java/com/doumee/api/system/SystemController.java | 4
server/service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java | 1
server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java | 3
16 files changed, 623 insertions(+), 25 deletions(-)
diff --git a/server/company/src/main/java/com/doumee/api/system/SystemController.java b/server/company/src/main/java/com/doumee/api/system/SystemController.java
index a65b2c8..3ebf770 100644
--- a/server/company/src/main/java/com/doumee/api/system/SystemController.java
+++ b/server/company/src/main/java/com/doumee/api/system/SystemController.java
@@ -7,10 +7,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
-import com.doumee.dao.system.dto.LoginDTO;
-import com.doumee.dao.system.dto.LoginPhoneDTO;
-import com.doumee.dao.system.dto.UpdatePwdDto;
-import com.doumee.dao.system.dto.WebLoginDTO;
+import com.doumee.dao.system.dto.*;
import com.doumee.service.system.SystemLoginService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -46,17 +43,31 @@
@ApiOperation("鐧诲綍 - 鍚庣")
@PostMapping("/login")
public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, HttpServletRequest request) {
- return ApiResponse.success(systemLoginService.loginByPassword(dto, Constants.ONE, request));
+ return ApiResponse.success(systemLoginService.loginByPassword(dto, Constants.ONE, true, request));
}
@PreventRepeat(limit = 10, lockTime = 10000)
@ApiOperation("鐭俊楠岃瘉鐮佺櫥褰�")
@PostMapping("/loginByPhone")
public ApiResponse<String> loginByPhone (@Validated @RequestBody LoginPhoneDTO dto, HttpServletRequest request) {
- return ApiResponse.success(systemLoginService.loginByPhone(dto, Constants.ZERO, request));
+ return ApiResponse.success(systemLoginService.loginByPhone(dto, Constants.ONE, true, request));
}
+ @PreventRepeat(limit = 10, lockTime = 10000)
+ @ApiOperation("寰俊灏忕▼搴忕櫥褰�")
+ @PostMapping("/loginByWxMini")
+ public ApiResponse<String> loginByWxMini (@Validated @RequestBody WxMiniLoginDTO dto, HttpServletRequest request) {
+ return ApiResponse.success(systemLoginService.loginByWxMini(dto, request));
+ }
+
+ @ApiOperation(value = "鎺堟潈openId",notes = "鐧诲綍鍚�")
+ @GetMapping("/wxEmpower")
+ public ApiResponse<String> wxEmpower (@RequestParam String code, HttpServletRequest request) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ return ApiResponse.success(systemLoginService.wxEmpower(code, loginUserInfo.getId()));
+ }
+
@ApiOperation("閫�鍑虹櫥褰�")
@PostMapping("/logout")
public ApiResponse logout () {
diff --git a/server/platform/src/main/java/com/doumee/api/system/SystemController.java b/server/platform/src/main/java/com/doumee/api/system/SystemController.java
index f2d6829..ba128c3 100644
--- a/server/platform/src/main/java/com/doumee/api/system/SystemController.java
+++ b/server/platform/src/main/java/com/doumee/api/system/SystemController.java
@@ -44,13 +44,13 @@
@ApiOperation("鐧诲綍")
@PostMapping("/login")
public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, HttpServletRequest request) {
- return ApiResponse.success(systemLoginService.loginByPassword(dto, Constants.ZERO, request));
+ return ApiResponse.success(systemLoginService.loginByPassword(dto, Constants.ZERO,true, request));
}
@PreventRepeat(limit = 10, lockTime = 10000)
@ApiOperation("鐭俊楠岃瘉鐮佺櫥褰�")
@PostMapping("/loginByPhone")
public ApiResponse<String> loginByPhone (@Validated @RequestBody LoginPhoneDTO dto, HttpServletRequest request) {
- return ApiResponse.success(systemLoginService.loginByPhone(dto, Constants.ZERO, request));
+ return ApiResponse.success(systemLoginService.loginByPhone(dto, Constants.ZERO, true,request));
}
@ApiOperation("閫�鍑虹櫥褰�")
diff --git a/server/pom.xml b/server/pom.xml
index 19ed8a1..96b6768 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -37,6 +37,8 @@
<oshi.version>5.7.0</oshi.version>
<jna.version>5.7.0</jna.version>
<poi.version>5.0.0</poi.version>
+ <!-- 寰俊灏忕▼搴� -->
+ <weixin-java-miniapp.version>4.1.0</weixin-java-miniapp.version>
</properties>
<dependencies>
@@ -212,6 +214,14 @@
<version>2.5.1</version>
</dependency>
+
+ <!-- WeChat 灏忕▼搴� -->
+ <dependency>
+ <groupId>com.github.binarywang</groupId>
+ <artifactId>weixin-java-miniapp</artifactId>
+ <version>${weixin-java-miniapp.version}</version>
+ </dependency>
+
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
diff --git a/server/service/src/main/java/com/doumee/core/utils/Constants.java b/server/service/src/main/java/com/doumee/core/utils/Constants.java
index 65e3905..4efd1ab 100644
--- a/server/service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -43,7 +43,9 @@
public static final String RANGE_SIZE = "RANGE_SIZE";
public static final String CATE_PARAM_OPEN = "_CATE_PARAM_OPEN";
public static final String OPEN_SYNC_SWITCH = "OPEN_SYNC_SWITCH";
-
+ public static final String WX_MIN_PROGRAM = "WX_MIN_PROGRAM";
+ public static final String WX_MIN_APPID = "WX_MIN_APPID";
+ public static final String WX_MIN_SECRET = "WX_MIN_SECRET";
public static final String SYSTEM ="SYSTEM";
public static final String GOODS_IMG_DIR ="GOODS_IMG_DIR";
diff --git a/server/service/src/main/java/com/doumee/core/wx/AccessToken.java b/server/service/src/main/java/com/doumee/core/wx/AccessToken.java
new file mode 100644
index 0000000..ff6a0c4
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/core/wx/AccessToken.java
@@ -0,0 +1,30 @@
+package com.doumee.core.wx;
+
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2022/12/7 17:26
+ */
+@Data
+public class AccessToken {
+
+ private String accessToken;
+ //杩囨湡鏃堕棿 褰撳墠绯荤粺鏃堕棿+寰俊浼犳潵鐨勮繃鏈熸椂闂�
+ private Long expiresTime;
+
+ public AccessToken(String accessToken, String expiresIn) {
+ this.accessToken = accessToken;
+ this.expiresTime = System.currentTimeMillis()+Integer.parseInt(expiresIn)*1000;
+ }
+
+ /**
+ * 鍒ゆ柇token鏄惁杩囨湡
+ * @return
+ */
+ public boolean isExpired(){
+ return System.currentTimeMillis()>expiresTime;
+ }
+}
diff --git a/server/service/src/main/java/com/doumee/core/wx/SendWxMessage.java b/server/service/src/main/java/com/doumee/core/wx/SendWxMessage.java
new file mode 100644
index 0000000..4f124a6
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/core/wx/SendWxMessage.java
@@ -0,0 +1,164 @@
+package com.doumee.core.wx;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.system.model.SystemUser;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2022/12/7 17:27
+ */
+@Service
+@Slf4j
+public class SendWxMessage {
+
+ private static String programUrl = "packagesMine/meetingDetails/meetingDetails?id=";
+
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+
+// /**
+// * 浼氳寮�濮嬮�氱煡
+// * @param systemUser 鐢ㄦ埛
+// * @param bookings 浼氳淇℃伅
+// * @param rooms 浼氳瀹や俊鎭�
+// */
+// public void bookingsStart(SystemUser systemUser, Bookings bookings, Rooms rooms){
+// RestTemplate restTemplate = new RestTemplate();
+// String accessToken = systemDictDataBiz.queryCodeById(106);
+// log.info("寰俊灏忕▼搴� 浼氳寮�濮嬭闃呮秷鎭彂閫佹棩蹇� -> accessToken锛歿}",accessToken);
+// //杩欓噷绠�鍗曡捣瑙佹垜浠瘡娆¢兘鑾峰彇鏈�鏂扮殑access_token锛堟椂闂村紑鍙戜腑锛屽簲璇ュ湪access_token蹇繃鏈熸椂鍐嶉噸鏂拌幏鍙栵級
+// String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken;
+// //鎷兼帴鎺ㄩ�佺殑妯$増
+// WxMsgVO wxMsgVo = new WxMsgVO();
+// //鐢ㄦ埛鐨刼penid锛堣鍙戦�佺粰閭d釜鐢ㄦ埛锛�
+// wxMsgVo.setTouser(systemUser.getOpenid());
+// //璁㈤槄娑堟伅妯℃澘id
+// wxMsgVo.setTemplate_id("di_lWUtlqvWAo7aWKZCH8Kzs1Cv2z3H6fOkKI4RwJzg");
+// Map<String, TemplateData> m = new HashMap<>(4);
+// //浼氳涓婚
+// m.put("thing1", new TemplateData(bookings.getName()));
+// //浼氳鍦扮偣
+// m.put("thing2", new TemplateData(rooms.getName()));
+// //鏃堕棿
+// m.put("thing3", new TemplateData(DateUtil.getDate(bookings.getStartTime(),"yyyy-MM-dd")));
+// //涓绘寔浜�
+// m.put("name4", new TemplateData(systemUser.getRealname()));
+// wxMsgVo.setPage(programUrl +bookings.getId());
+// wxMsgVo.setData(m);
+// ResponseEntity<String> responseEntity =
+// restTemplate.postForEntity(url, wxMsgVo, String.class);
+// log.info("寰俊灏忕▼搴�-> 鍙栨秷閫氱煡璁㈤槄娑堟伅鍙戦�佹棩蹇楋細{}",JSONObject.toJSONString(responseEntity));
+// }
+//
+// /**
+// * 浼氳鍙栨秷閫氱煡
+// * @param systemUser 鐢ㄦ埛
+// * @param bookings 浼氳淇℃伅
+// * @param rooms 浼氳瀹や俊鎭�
+// */
+// public void bookingsCancel(SystemUser systemUser, Bookings bookings, Rooms rooms){
+// RestTemplate restTemplate = new RestTemplate();
+// String accessToken = systemDictDataBiz.queryCodeById(106);
+// log.info("寰俊灏忕▼搴� 浼氳寮�濮嬭闃呮秷鎭彂閫佹棩蹇� -> accessToken锛歿}",accessToken);
+// //杩欓噷绠�鍗曡捣瑙佹垜浠瘡娆¢兘鑾峰彇鏈�鏂扮殑access_token锛堟椂闂村紑鍙戜腑锛屽簲璇ュ湪access_token蹇繃鏈熸椂鍐嶉噸鏂拌幏鍙栵級
+// String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken;
+// //鎷兼帴鎺ㄩ�佺殑妯$増
+// WxMsgVO wxMsgVo = new WxMsgVO();
+// //鐢ㄦ埛鐨刼penid锛堣鍙戦�佺粰閭d釜鐢ㄦ埛锛�
+// wxMsgVo.setTouser(systemUser.getOpenid());
+// //璁㈤槄娑堟伅妯℃澘id
+// wxMsgVo.setTemplate_id("6A79DG8Fd9CjUDHhxJVv8dWcqww0v9_wwQLr7_ZuNqU");
+// Map<String, TemplateData> m = new HashMap<>(4);
+// //浼氳鍚嶇О
+// m.put("thing4", new TemplateData(bookings.getName()));
+// //浼氳鏃堕棿
+// m.put("time2", new TemplateData(DateUtil.getDate(bookings.getStartTime(),"yyyy-MM-dd")));
+//// m.put("time4", new TemplateData(
+//// DateUtil.getDate(bookings.getStartTime(),"yyyy-MM-dd")+
+//// " " + DateUtil.getDate(bookings.getStartTime(),"HH:mm")+
+//// " 鑷� " + DateUtil.getDate(bookings.getEndTime(),"HH:mm") ) );
+// //浼氳瀹�
+// m.put("thing1", new TemplateData(rooms.getName()));
+// //澶囨敞
+// m.put("thing3", new TemplateData(bookings.getRemark()));
+// wxMsgVo.setPage(programUrl +bookings.getId());
+// wxMsgVo.setData(m);
+// ResponseEntity<String> responseEntity =
+// restTemplate.postForEntity(url, wxMsgVo, String.class);
+// log.info("寰俊灏忕▼搴�->鍙栨秷閫氱煡璁㈤槄娑堟伅鍙戦�佹棩蹇楋細{}",JSONObject.toJSONString(responseEntity));
+// }
+//
+//
+// /**
+// * 浼氳棰勭害鎴愬姛閫氱煡
+// * @param systemUser 鐢ㄦ埛
+// * @param bookings 浼氳淇℃伅
+// * @param rooms 浼氳瀹や俊鎭�
+// */
+// public void bookingsReservation(SystemUser systemUser, Bookings bookings, Rooms rooms){
+// RestTemplate restTemplate = new RestTemplate();
+// String accessToken = systemDictDataBiz.queryCodeById(106);
+// log.info("寰俊灏忕▼搴� 浼氳寮�濮嬭闃呮秷鎭彂閫佹棩蹇� -> accessToken锛歿}",accessToken);
+//
+// //杩欓噷绠�鍗曡捣瑙佹垜浠瘡娆¢兘鑾峰彇鏈�鏂扮殑access_token锛堟椂闂村紑鍙戜腑锛屽簲璇ュ湪access_token蹇繃鏈熸椂鍐嶉噸鏂拌幏鍙栵級
+// String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken;
+// //鎷兼帴鎺ㄩ�佺殑妯$増
+// WxMsgVO wxMsgVo = new WxMsgVO();
+// //鐢ㄦ埛鐨刼penid锛堣鍙戦�佺粰閭d釜鐢ㄦ埛锛�
+// wxMsgVo.setTouser(systemUser.getOpenid());
+// //璁㈤槄娑堟伅妯℃澘id
+// wxMsgVo.setTemplate_id("usZxJqJ2AYPg24ViPMuY2lI-YRjdSD2JvFY3gY5kqh4");
+// Map<String, TemplateData> m = new HashMap<>(4);
+// //浼氳涓婚
+// m.put("thing3", new TemplateData(bookings.getName()));
+// //浼氳鏃堕棿
+// m.put("time1", new TemplateData(
+// DateUtil.getDate(bookings.getStartTime(),"yyyy-MM-dd")
+//// +
+//// " " + DateUtil.getDate(bookings.getStartTime(),"HH:mm")+
+//// " 鑷� " + DateUtil.getDate(bookings.getEndTime(),"HH:mm")
+// ) );
+// //浼氳鍦扮偣
+// m.put("thing2", new TemplateData(rooms.getName()));
+// //鍙戣捣浜�
+// m.put("thing4", new TemplateData(systemUser.getRealname()));
+// wxMsgVo.setPage(programUrl +bookings.getId());
+// wxMsgVo.setData(m);
+// ResponseEntity<String> responseEntity =
+// restTemplate.postForEntity(url, wxMsgVo, String.class);
+// log.info("寰俊灏忕▼搴�-> 浼氳棰勭害鎴愬姛璁㈤槄娑堟伅鍙戦�佹棩蹇楋細{}",JSONObject.toJSONString(responseEntity));
+// }
+
+
+
+// /**
+// * 鑾峰彇token
+// */
+// private static String getAccessToken() {
+// //鍙戦�佽姹傝幏鍙杢oken
+// JSONObject token = null;
+// try {
+// token = JSONObject.parseObject(HttpsUtil.get(APP_ACCESS_TOKEN_URL,false));
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// JSONObject jsonObject = token;
+// String accessToken = (String) jsonObject.get("access_token");
+// Integer expiresIn = (Integer) jsonObject.get("expires_in");
+// //鍒涘缓token瀵硅薄锛屽苟瀛樺偍
+// return new AccessToken(accessToken,String.valueOf(expiresIn)).getAccessToken();
+// }
+
+}
diff --git a/server/service/src/main/java/com/doumee/core/wx/SpringUtils.java b/server/service/src/main/java/com/doumee/core/wx/SpringUtils.java
new file mode 100644
index 0000000..d12ab86
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/core/wx/SpringUtils.java
@@ -0,0 +1,69 @@
+package com.doumee.core.wx;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * NOTICE: NEVER USE IT WHEN REGISTERING A SPRING BEAN.
+ *
+ * @author Guang YANG
+ */
+@Component
+public class SpringUtils implements ApplicationContextAware {
+
+ private static ApplicationContext CTX;
+
+ public static ApplicationContext get() {
+ return CTX;
+ }
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ CTX = applicationContext;
+ }
+
+ /**
+ * 鍚戝鍣ㄤ腑鍔ㄦ�佹坊鍔燘ean
+ *
+ * @param ctx
+ * @param beanName
+ * @param beanClass
+ */
+ public static void addBean(ApplicationContext ctx, String beanName, Class beanClass) {
+ BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory)ctx.getAutowireCapableBeanFactory();
+ BeanDefinitionBuilder beanDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(beanClass);
+ BeanDefinition beanDef = beanDefBuilder.getBeanDefinition();
+ if (!beanDefReg.containsBeanDefinition(beanName)) {
+ beanDefReg.registerBeanDefinition(beanName, beanDef);
+ }
+ }
+
+ /**
+ * 浠庡鍣ㄤ腑绉婚櫎Bean
+ *
+ * @param ctx
+ * @param beanName
+ */
+ public static void removeBean(ApplicationContext ctx, String beanName) {
+ BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory) ctx.getAutowireCapableBeanFactory();
+ beanDefReg.getBeanDefinition(beanName);
+ beanDefReg.removeBeanDefinition(beanName);
+ }
+
+ /**
+ * 閬嶅巻杈撳嚭鎵�鏈塀ean鐨勪俊鎭�
+ */
+ static void showAllBeans(ApplicationContext ctx) {
+ //閬嶅巻
+ for (String name : ctx.getBeanDefinitionNames()) {
+ System.out.println("name:" + name + ",class:" + ctx.getBean(name).getClass());
+ }
+ }
+
+}
diff --git a/server/service/src/main/java/com/doumee/core/wx/TemplateData.java b/server/service/src/main/java/com/doumee/core/wx/TemplateData.java
new file mode 100644
index 0000000..aad9cf6
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/core/wx/TemplateData.java
@@ -0,0 +1,19 @@
+package com.doumee.core.wx;
+
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2022/12/7 17:28
+ */
+@Data
+public class TemplateData {
+ private String value;
+
+ public TemplateData(String value) {
+ this.value = value;
+ }
+
+}
diff --git a/server/service/src/main/java/com/doumee/core/wx/WxMiniConfig.java b/server/service/src/main/java/com/doumee/core/wx/WxMiniConfig.java
new file mode 100644
index 0000000..f38d911
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/core/wx/WxMiniConfig.java
@@ -0,0 +1,90 @@
+package com.doumee.core.wx;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
+import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.utils.Constants;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * 寰俊灏忕▼搴忕粍浠�
+ */
+@Configuration
+public class WxMiniConfig {
+ /********寰俊灏忕▼搴忔湇鍔�**********/
+ public static WxMaService wxMaService;
+ /********寰俊灏忕▼搴忔敮浠�**********/
+// public static WxPayService wxPayService;
+// /********寰俊APP鏀粯**********/
+// public static WxPayService wxAppPayService;
+
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+
+ public static WxMiniConfig me() {
+ return SpringUtils.get().getBean(WxMiniConfig.class);
+ }
+
+ @PostConstruct
+ void init() {
+ this.load_WxMaService();
+// this.load_wxPayService();
+// this.load_wxAppPayService();
+ }
+ /**
+ * 鍒濆鍖栧井淇″皬绋嬪簭
+ */
+ public void load_WxMaService() {
+ WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
+ config.setAppid(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.WX_MIN_PROGRAM,Constants.WX_MIN_APPID).getCode()));
+ config.setSecret(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.WX_MIN_PROGRAM,Constants.WX_MIN_SECRET).getCode()));
+ config.setMsgDataFormat("JSON");
+ //config.setToken("");
+ //config.setAesKey("");
+ WxMaService wxMaService = new WxMaServiceImpl();
+ wxMaService.setWxMaConfig(config);
+ this.wxMaService = wxMaService;
+ }
+
+ /**
+ * 鍒濆鍖栧井淇″皬绋嬪簭鏀粯
+ */
+// public void load_wxPayService() {
+// WxPayConfig payConfig = new WxPayConfig();
+// payConfig.setTradeType(WxPayConstants.TradeType.JSAPI);
+// payConfig.setSignType(WxPayConstants.SignType.MD5);
+// payConfig.setAppId(StringUtils.trimToNull(wxPayProperties.getAppId()));
+// payConfig.setMchId(StringUtils.trimToNull(wxPayProperties.getMchId()));
+// payConfig.setMchKey(StringUtils.trimToNull(wxPayProperties.getMchKey()));
+// payConfig.setKeyPath(StringUtils.trimToNull(wxPayProperties.getKeyPath()));
+// payConfig.setNotifyUrl(StringUtils.trimToNull(wxPayProperties.getNotifyUrl()));
+// WxPayService wxPayService = new WxPayServiceImpl();
+// wxPayService.setConfig(payConfig);
+// this.wxPayService = wxPayService;
+// }
+
+
+
+// /**
+// * 鍒濆鍖朅pp鏀粯
+// */
+// public void load_wxAppPayService() {
+// WxPayConfig payConfig = new WxPayConfig();
+// payConfig.setTradeType(WxPayConstants.TradeType.APP);
+// payConfig.setSignType(WxPayConstants.SignType.MD5);
+// payConfig.setAppId("");
+// payConfig.setMchId(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchId.getCode())));
+// payConfig.setMchKey(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchKey.getCode())));
+// payConfig.setKeyPath(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_KeyPath.getCode())));
+// payConfig.setNotifyUrl(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_NotifyUrl.getCode())));
+// WxPayService wxPayService = new WxPayServiceImpl();
+// wxPayService.setConfig(payConfig);
+// this.wxAppPayService = wxPayService;
+// }
+
+}
diff --git a/server/service/src/main/java/com/doumee/core/wx/WxMsgVO.java b/server/service/src/main/java/com/doumee/core/wx/WxMsgVO.java
new file mode 100644
index 0000000..cee69e6
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/core/wx/WxMsgVO.java
@@ -0,0 +1,23 @@
+package com.doumee.core.wx;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2022/12/7 17:27
+ */
+@Data
+public class WxMsgVO {
+ //鐢ㄦ埛openId
+ private String touser;
+ //妯$増id
+ private String template_id;
+ //鎺ㄩ�佹枃瀛�
+ private Map<String , TemplateData> data;
+ //璺宠浆璺緞 锛岄粯璁よ烦杞埌灏忕▼搴忛椤�
+ private String page="pages/index/index";
+}
diff --git a/server/service/src/main/java/com/doumee/core/wx/WxPayProperties.java b/server/service/src/main/java/com/doumee/core/wx/WxPayProperties.java
new file mode 100644
index 0000000..efe67cb
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/core/wx/WxPayProperties.java
@@ -0,0 +1,48 @@
+package com.doumee.core.wx;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/22 18:04
+ */
+@Component
+@ConfigurationProperties(prefix = "wx.pay")
+@Data
+public class WxPayProperties {
+
+ /**
+ * AppID
+ */
+ private String appId;
+
+ /**
+ * AppSecret
+ */
+ private String appSecret;
+
+ /**
+ * 寰俊鍟嗘埛鍙�
+ */
+ private String mchId;
+
+ /**
+ * 鏀粯API瀵嗛挜
+ */
+ private String mchKey;
+
+ /**
+ * 鏀粯鍥炶皟鍦板潃
+ */
+ private String notifyUrl;
+
+ /**
+ * 鏀粯璇佷功(p12)
+ */
+ private String keyPath;
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java b/server/service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
index 91902c9..b215c59 100644
--- a/server/service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
@@ -30,4 +30,5 @@
@NotBlank(message = "楠岃瘉鐮乁UID涓嶈兘涓虹┖")
@ApiModelProperty(value = "楠岃瘉鐮乁UID")
private String uuid;
+
}
diff --git a/server/service/src/main/java/com/doumee/dao/system/dto/WxMiniLoginDTO.java b/server/service/src/main/java/com/doumee/dao/system/dto/WxMiniLoginDTO.java
new file mode 100644
index 0000000..261507b
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/system/dto/WxMiniLoginDTO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/02/14 11:14
+ */
+@Data
+@ApiModel("寰俊灏忕▼搴忕櫥褰曞弬鏁�")
+public class WxMiniLoginDTO implements Serializable {
+
+ @ApiModelProperty(value = "鐢ㄦ埛鍚�")
+ private String username;
+
+ @ApiModelProperty(value = "瀵嗙爜")
+ private String password;
+
+ @ApiModelProperty(value = "寰俊code")
+ private String code;
+
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java b/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
index 76f617f..9f39744 100644
--- a/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
+++ b/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -102,6 +102,9 @@
@ApiModelProperty(value = "0 鍚敤 1 绂佺敤")
private Integer status;
+ @ApiModelProperty(value = "寰俊灏忕▼搴廜PENID")
+ private String openid;
+
@ApiModelProperty(value = "鎵�灞炰紒涓氫俊鎭")
@TableField(exist = false)
private Company company;
diff --git a/server/service/src/main/java/com/doumee/service/system/SystemLoginService.java b/server/service/src/main/java/com/doumee/service/system/SystemLoginService.java
index 6805744..1e3e3da 100644
--- a/server/service/src/main/java/com/doumee/service/system/SystemLoginService.java
+++ b/server/service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -2,6 +2,7 @@
import com.doumee.dao.system.dto.LoginDTO;
import com.doumee.dao.system.dto.LoginPhoneDTO;
+import com.doumee.dao.system.dto.WxMiniLoginDTO;
import javax.servlet.http.HttpServletRequest;
@@ -17,6 +18,22 @@
* @author Eva.Caesar Liu
* @date 2023/03/21 14:49
*/
- String loginByPassword (LoginDTO dto,int type, HttpServletRequest request);
- String loginByPhone (LoginPhoneDTO dto, int type, HttpServletRequest request);
+ String loginByPassword (LoginDTO dto,int type,Boolean checkCaptcha, HttpServletRequest request);
+ String loginByPhone (LoginPhoneDTO dto, int type,Boolean checkSmsCode, HttpServletRequest request);
+
+ /**
+ * 寰俊鎺堟潈
+ * @param code
+ * @param userId
+ * @return
+ */
+ String wxEmpower(String code,Integer userId);
+
+ /**
+ *
+ * @param wxMiniLoginDTO
+ * @param request
+ * @return
+ */
+ String loginByWxMini (WxMiniLoginDTO wxMiniLoginDTO, HttpServletRequest request);
}
diff --git a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index 2f0c381..0a9ff2d 100644
--- a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -1,5 +1,8 @@
package com.doumee.service.system.impl;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.api.R;
import com.doumee.config.shiro.ShiroToken;
import com.doumee.core.constants.ResponseStatus;
@@ -7,15 +10,21 @@
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
+import com.doumee.core.wx.WxMiniConfig;
import com.doumee.dao.business.SmsEmailMapper;
+import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.dto.LoginDTO;
import com.doumee.dao.system.dto.LoginPhoneDTO;
+import com.doumee.dao.system.dto.WxMiniLoginDTO;
import com.doumee.dao.system.model.SystemLoginLog;
+import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.impl.SmsEmailServiceImpl;
import com.doumee.service.common.CaptchaService;
import com.doumee.service.system.SystemLoginLogService;
import com.doumee.service.system.SystemLoginService;
import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.subject.Subject;
@@ -43,8 +52,77 @@
@Autowired
private SystemLoginLogService systemLoginLogService;
+ @Autowired
+ private SystemUserMapper systemUserMapper;
+
+
+ /**
+ * 寰俊鎺堟潈锛堢櫥褰曞悗锛�
+ * @param code
+ */
@Override
- public String loginByPassword(LoginDTO dto, int type,HttpServletRequest request) {
+ public String wxEmpower(String code,Integer userId){
+ try {
+ //鑾峰彇寰俊鏁忔劅鏁版嵁
+ WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
+ String openId = session.getOpenid();
+ if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鑾峰彇openid澶辫触锛佽鑱旂郴绠$悊鍛�");
+ }
+ if(Objects.nonNull(userId)){
+ systemUserMapper.update(null,new UpdateWrapper<SystemUser>()
+ .lambda().set(SystemUser::getOpenid,null)
+ .eq(SystemUser::getOpenid,openId)
+ .ne(SystemUser::getId,userId));
+
+ systemUserMapper.update(null,new UpdateWrapper<SystemUser>()
+ .lambda()
+ .set(SystemUser::getOpenid,openId)
+ .eq(SystemUser::getId,userId));
+ }
+ return openId;
+ } catch (WxErrorException e) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�");
+ }
+ }
+
+
+ @Override
+ public String loginByWxMini (WxMiniLoginDTO wxMiniLoginDTO, HttpServletRequest request){
+ if(StringUtils.isNotBlank(wxMiniLoginDTO.getCode())){
+ try{
+ WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(wxMiniLoginDTO.getCode());
+ String openId = session.getOpenid();
+ if (StringUtils.isNotBlank(openId)&&StringUtils.isBlank(wxMiniLoginDTO.getUsername())) {
+ SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>()
+ .lambda().eq(SystemUser::getOpenid,openId)
+ .eq(SystemUser::getDeleted,Constants.ZERO)
+ .eq(SystemUser::getType,Constants.UserType.COMPANY.getKey())
+ .orderByDesc(SystemUser::getCreateTime)
+ .last(" limit 1")
+ );
+ if(Objects.nonNull(systemUser)){
+ LoginPhoneDTO dto = new LoginPhoneDTO();
+ dto.setPhone(systemUser.getMobile());
+ return this.loginByPhone(dto,Constants.ZERO,false,request);
+ }
+ }
+ } catch (WxErrorException e) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�");
+ }
+ }
+ if(StringUtils.isBlank(wxMiniLoginDTO.getUsername())
+ || StringUtils.isBlank(wxMiniLoginDTO.getPassword())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ LoginDTO dto = new LoginDTO();
+ dto.setUsername(wxMiniLoginDTO.getUsername());
+ dto.setPassword(wxMiniLoginDTO.getPassword());
+ return this.loginByPassword(dto,Constants.ONE,false,request);
+ }
+
+ @Override
+ public String loginByPassword(LoginDTO dto, int type,Boolean checkCaptcha,HttpServletRequest request) {
SystemLoginLog loginLog = new SystemLoginLog();
loginLog.setLoginUsername(dto.getUsername());
loginLog.setLoginTime(new Date());
@@ -57,7 +135,7 @@
loginLog.setServerIp(Utils.Server.getIP());
// 鏍¢獙楠岃瘉鐮�
try {
- if(!debugModel){
+ if(!debugModel&&checkCaptcha){
captchaService.check(dto.getUuid(), dto.getCode());
}
} catch (Exception e) {
@@ -84,8 +162,9 @@
throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage());
}
}
+
@Override
- public String loginByPhone (LoginPhoneDTO dto, int type, HttpServletRequest request) {
+ public String loginByPhone (LoginPhoneDTO dto, int type,Boolean checkSmsCode, HttpServletRequest request) {
SystemLoginLog loginLog = new SystemLoginLog();
loginLog.setLoginUsername(dto.getPhone());
loginLog.setLoginTime(new Date());
@@ -97,18 +176,16 @@
loginLog.setOsInfo(Utils.User_Client.getOS(request));
loginLog.setServerIp(Utils.Server.getIP());
// 鏍¢獙楠岃瘉鐮�
- if(type!= Constants.TWO){
- try {
- if(!debugModel){
- SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,dto.getPhone(), dto.getCode());
- }
- } catch (Exception e) {
- log.error(e.getMessage(), e);
- loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
- loginLog.setSuccess(Boolean.FALSE);
- systemLoginLogService.create(loginLog);
- throw e;
+ try {
+ if(!debugModel&& checkSmsCode){
+ SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,dto.getPhone(), dto.getCode());
}
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
+ loginLog.setSuccess(Boolean.FALSE);
+ systemLoginLogService.create(loginLog);
+ throw e;
}
// 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
Subject subject = SecurityUtils.getSubject();
@@ -127,4 +204,10 @@
throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage());
}
}
+
+
+
+
+
+
}
--
Gitblit v1.9.3