From cb96c5493ebbb0767cf4d5b83544e131294225cb Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期四, 14 三月 2024 09:02:11 +0800 Subject: [PATCH] 111 --- 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 | 93 ++++++++ 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, 615 insertions(+), 15 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..6cc52a0 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.ZERO, 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 aa859e4..3b3106d 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -36,6 +36,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> @@ -211,6 +213,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 9d91bb1..8b22c7f 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 0053dce..0f73331 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 @@ -99,6 +99,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..dc6cc10 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()); @@ -99,7 +178,7 @@ // 鏍¢獙楠岃瘉鐮� if(type!= Constants.TWO){ try { - if(!debugModel){ + if(!debugModel&& checkSmsCode){ SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,dto.getPhone(), dto.getCode()); } } catch (Exception e) { @@ -127,4 +206,10 @@ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage()); } } + + + + + + } -- Gitblit v1.9.3