From 081102af72c623e9b7da1d69cf71e486c7842d43 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期五, 11 八月 2023 18:14:32 +0800
Subject: [PATCH] 111
---
server/src/main/java/doumeemes/dao/business/model/CompanyUser.java | 6
server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java | 19 +
server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java | 3
server/src/main/java/doumeemes/core/utils/HttpsUtil.java | 107 +++++++++++
server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java | 215 +++++++++++++++++++++++
server/src/main/java/doumeemes/service/system/WxLoginService.java | 21 ++
server/src/main/java/doumeemes/api/system/SystemController.java | 23 ++
server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java | 8
server/src/main/java/doumeemes/config/shiro/ShiroToken.java | 13 +
server/src/main/java/doumeemes/dao/ext/vo/WxLoginVO.java | 27 +++
server/src/main/java/doumeemes/service/business/impl/WorkorderCheckServiceImpl.java | 2
server/src/main/java/doumeemes/config/shiro/ShiroConfig.java | 2
server/src/main/resources/application.yml | 2
server/src/main/java/doumeemes/core/utils/Constants.java | 5
server/src/main/java/doumeemes/dao/ext/dto/WxLoginDTO.java | 35 +++
server/src/main/java/doumeemes/service/system/SystemLoginService.java | 1
16 files changed, 473 insertions(+), 16 deletions(-)
diff --git a/server/src/main/java/doumeemes/api/system/SystemController.java b/server/src/main/java/doumeemes/api/system/SystemController.java
index e9a1f96..468aea0 100644
--- a/server/src/main/java/doumeemes/api/system/SystemController.java
+++ b/server/src/main/java/doumeemes/api/system/SystemController.java
@@ -8,9 +8,12 @@
import doumeemes.core.model.LoginUserInfo;
import doumeemes.core.utils.Constants;
import doumeemes.dao.business.dto.CompanyInitDataDTO;
+import doumeemes.dao.ext.dto.WxLoginDTO;
+import doumeemes.dao.ext.vo.WxLoginVO;
import doumeemes.dao.system.dto.LoginDTO;
import doumeemes.dao.system.dto.UpdatePwdDto;
import doumeemes.service.system.SystemLoginService;
+import doumeemes.service.system.WxLoginService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -46,22 +49,38 @@
@Autowired
private SystemLoginService systemLoginService;
+ @Autowired
+ private WxLoginService wxLoginService;
+
@PreventRepeat(limit = 10, lockTime = 10000)
@ApiOperation("鐧诲綍")
@PostMapping("/login")
public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, HttpServletRequest request) {
-// dto.setCompanyId(Constants.de);
return ApiResponse.success(systemLoginService.loginByPassword(dto, request));
}
+
@PreventRepeat(limit = 10, lockTime = 10000)
@ApiOperation("骞冲彴鐧诲綍")
@PostMapping("/platform/login")
public ApiResponse<String> platformLogin (@Validated @RequestBody LoginDTO dto, HttpServletRequest request) {
-// dto.setCompanyId(Constants.de);
return ApiResponse.success(systemLoginService.platformLogin(dto, request));
}
+ @PreventRepeat(limit = 10, lockTime = 10000)
+ @ApiOperation("寰俊鐧诲綍")
+ @GetMapping("/wxLogin")
+ public ApiResponse<WxLoginVO> wxLogin (@RequestParam String code, HttpServletRequest request) {
+ return ApiResponse.success(wxLoginService.wxLogin(code, request));
+ }
+
+ @PreventRepeat(limit = 10, lockTime = 10000)
+ @ApiOperation("寰俊鐧诲綍璐﹀彿瀵嗙爜")
+ @PostMapping("/wxAccountLogin")
+ public ApiResponse<String> wxAccountLogin (@Validated @RequestBody WxLoginDTO dto, HttpServletRequest request) {
+ return ApiResponse.success(wxLoginService.wxLoginByPassword(dto, request));
+ }
+
@ApiOperation("閫�鍑虹櫥褰�")
@PostMapping("/logout")
public ApiResponse logout () {
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroConfig.java b/server/src/main/java/doumeemes/config/shiro/ShiroConfig.java
index ab1c79b..ee38466 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroConfig.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroConfig.java
@@ -71,6 +71,8 @@
Map<String, String> map = new LinkedHashMap<>();
// 璺緞鎷︽埅閰嶇疆
map.put("/system/login", "anon");
+ map.put("/system/wxLogin", "anon");
+ map.put("/system/wxAccountLogin", "anon");
map.put("/system/initCompany", "anon");
map.put("/system/logout", "anon");
map.put("/common/captcha", "anon");
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java b/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
index 9be80cc..8d01643 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
@@ -35,6 +35,9 @@
if(usernamePasswordToken.getDdLogin()){
return Boolean.TRUE;
}
+ if(usernamePasswordToken.getWxLogin()){
+ return Boolean.TRUE;
+ }
// 鍔犲瘑瀵嗙爜
String pwd = Utils.Secure.encryptPassword(new String(usernamePasswordToken.getPassword()), systemUser.getSalt());
// 姣旇緝瀵嗙爜
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroToken.java b/server/src/main/java/doumeemes/config/shiro/ShiroToken.java
index 29de55b..b0fa87c 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroToken.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroToken.java
@@ -36,13 +36,15 @@
*/
Integer companyId;
Boolean isDdLogin;
+ Boolean isWxLogin;
public ShiroToken() {
}
- public ShiroToken(Integer companyId,String username, String password,boolean isDdLogin) {
+ public ShiroToken(Integer companyId,String username, String password,boolean isDdLogin,boolean isWxLogin) {
super(username, password, false, (String)null);
this.companyId = companyId;
this.isDdLogin = isDdLogin;
+ this.isWxLogin = isWxLogin;
}
public Boolean getDdLogin() {
@@ -53,6 +55,15 @@
isDdLogin = ddLogin;
}
+
+ public Boolean getWxLogin() {
+ return isWxLogin;
+ }
+
+ public void setWxLogin(Boolean wxLogin) {
+ isWxLogin = wxLogin;
+ }
+
public Integer getCompanyId() {
return companyId;
}
diff --git a/server/src/main/java/doumeemes/core/utils/Constants.java b/server/src/main/java/doumeemes/core/utils/Constants.java
index deadd68..f2a7b57 100644
--- a/server/src/main/java/doumeemes/core/utils/Constants.java
+++ b/server/src/main/java/doumeemes/core/utils/Constants.java
@@ -27,6 +27,11 @@
public static final String ACCESS_ID="ACCESS_ID";
public static final String BUCKETNAME = "BUCKETNAME";
public static final String OSS = "OSS";
+ public static final String WX_CONFIG = "WX_CONFIG";
+ public static final String APPID = "APPID";
+ public static final String APPSECRET = "APPSECRET";
+ public static final String WX_TOKEN = "WX_TOKEN";
+
public static final String ACCESS_KEY = "ACCESS_KEY";
public static final String ENDPOINT = "ENDPOINT";
public static final String RESOURCE_PATH = "RESOURCE_PATH";
diff --git a/server/src/main/java/doumeemes/core/utils/HttpsUtil.java b/server/src/main/java/doumeemes/core/utils/HttpsUtil.java
index a1d93bd..4660554 100644
--- a/server/src/main/java/doumeemes/core/utils/HttpsUtil.java
+++ b/server/src/main/java/doumeemes/core/utils/HttpsUtil.java
@@ -15,7 +15,12 @@
import org.apache.http.util.EntityUtils;
import org.springframework.web.util.UriComponentsBuilder;
+import javax.net.ssl.*;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
@@ -24,6 +29,10 @@
import java.util.Map;
public class HttpsUtil {
+
+ public static String get(String url,boolean ignoreSSL) {
+ return connection(url, "GET", null, null,ignoreSSL);
+ }
public static String sendPostByHttps(String url, Map<String, String> body, String token) {
@@ -126,6 +135,64 @@
return null;
}
+ public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){
+ HttpsURLConnection connection = null;
+ try {
+ URL _url = new URL(url);
+ connection = (HttpsURLConnection) _url.openConnection();
+ connection.setRequestMethod(method);
+ connection.setDoOutput(true);
+ connection.setDoInput(true);
+ connection.setUseCaches(false);
+ if(contentType != null){
+ connection.setRequestProperty("Content-Type", contentType);
+ }
+
+ if(ignoreSSL){
+ //淇′换鎵�鏈塻sl璇佷功鍜屼富鏈�
+ TrustManager[] trustManagers = {new HttpsTrustManager()};
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, trustManagers, new SecureRandom());
+ connection.setSSLSocketFactory(context.getSocketFactory());
+ connection.setHostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify(String hostname, SSLSession session) {
+ return true;
+ }
+ });
+ }
+
+
+ connection.connect();
+
+ if(data != null){
+ OutputStream outputStream = connection.getOutputStream();
+ outputStream.write(data.getBytes("utf-8"));
+ outputStream.close();
+ }
+
+ int responseCode = connection.getResponseCode();
+ if (responseCode == HttpsURLConnection.HTTP_OK) {
+ InputStream is = connection.getInputStream();
+ byte[] b = new byte[4096];
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(b.length);
+ int len;
+ while ((len = is.read(b)) != -1) {
+ baos.write(b, 0, len);
+ }
+ is.close();
+ return baos.toString("utf-8");
+ }
+ return connection.getResponseMessage();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if(connection != null){
+ connection.disconnect();
+ }
+ }
+ return null;
+ }
public static void main(String[] args) {
@@ -136,5 +203,43 @@
}
-
}
+class HttpsTrustManager implements X509TrustManager {
+
+ private static TrustManager[] trustManagers = {new HttpsTrustManager()};
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static void allowAllSSL() {
+ try {
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, trustManagers, new SecureRandom());
+ HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
+ HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+ @Override
+ public boolean verify(String hostname, SSLSession session) {
+ return true;
+ }
+ });
+ } catch (NoSuchAlgorithmException | KeyManagementException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/server/src/main/java/doumeemes/dao/business/model/CompanyUser.java b/server/src/main/java/doumeemes/dao/business/model/CompanyUser.java
index 2eb96a6..50ccf61 100644
--- a/server/src/main/java/doumeemes/dao/business/model/CompanyUser.java
+++ b/server/src/main/java/doumeemes/dao/business/model/CompanyUser.java
@@ -148,4 +148,10 @@
@ExcelColumn(name="鏄惁鏄富璐︽埛锛�0=鍚︼紱1=鏄紱")
private Integer isMaster;
+
+ @ApiModelProperty(value = "寰俊openid")
+ private String openid;
+
+ @ApiModelProperty(value = "寰俊unionid")
+ private String unionid;
}
diff --git a/server/src/main/java/doumeemes/dao/ext/dto/WxLoginDTO.java b/server/src/main/java/doumeemes/dao/ext/dto/WxLoginDTO.java
new file mode 100644
index 0000000..940e2d8
--- /dev/null
+++ b/server/src/main/java/doumeemes/dao/ext/dto/WxLoginDTO.java
@@ -0,0 +1,35 @@
+package doumeemes.dao.ext.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/8/11 10:10
+ */
+@Data
+public class WxLoginDTO {
+
+ @ApiModelProperty(value = "浼佷笟缂栫爜")
+ private Integer companyId;
+
+ @NotBlank(message = "鐢ㄦ埛鍚嶄笉鑳戒负绌�")
+ @ApiModelProperty(value = "鐢ㄦ埛鍚�")
+ private String username;
+
+ @NotBlank(message = "瀵嗙爜涓嶈兘涓虹┖")
+ @ApiModelProperty(value = "瀵嗙爜")
+ private String password;
+
+ @ApiModelProperty(value = "寰俊 openid")
+ private String openid;
+
+ @ApiModelProperty(value = "寰俊 unionid")
+ private String unionid;
+
+}
diff --git a/server/src/main/java/doumeemes/dao/ext/vo/WxLoginVO.java b/server/src/main/java/doumeemes/dao/ext/vo/WxLoginVO.java
new file mode 100644
index 0000000..7ca12c9
--- /dev/null
+++ b/server/src/main/java/doumeemes/dao/ext/vo/WxLoginVO.java
@@ -0,0 +1,27 @@
+package doumeemes.dao.ext.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/8/11 11:22
+ */
+@Data
+public class WxLoginVO {
+
+
+ @ApiModelProperty(value = "鐧诲綍鐘舵�侊細0=寰俊鐧诲綍鎴愬姛锛�1=寰俊鐧诲綍澶辫触")
+ private Integer loginStatus;
+
+ @ApiModelProperty(value = "寰俊 openid")
+ private String openid ;
+
+ @ApiModelProperty(value = "寰俊 unionid")
+ private String unionid ;
+
+ @ApiModelProperty(value = "session")
+ private String session ;
+}
diff --git a/server/src/main/java/doumeemes/service/business/impl/WorkorderCheckServiceImpl.java b/server/src/main/java/doumeemes/service/business/impl/WorkorderCheckServiceImpl.java
index 68035c0..faa8b91 100644
--- a/server/src/main/java/doumeemes/service/business/impl/WorkorderCheckServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/business/impl/WorkorderCheckServiceImpl.java
@@ -401,7 +401,7 @@
//宸ュ崟瀵硅薄
Workorder workorder=workorderExtMapper.selectById(wc.getWorkorderId());
- if(workorder==null || workorder.getStatus()==Constants.WORKORDER_STATUS.done||workorder.getStatus()==Constants.WORKORDER_STATUS.baogong
+ if(workorder==null || workorder.getStatus()==Constants.WORKORDER_STATUS.done || workorder.getStatus()==Constants.WORKORDER_STATUS.done||workorder.getStatus()==Constants.WORKORDER_STATUS.baogong
||workorder.getStatus()==Constants.WORKORDER_STATUS.instock ||workorder.getStatus()==Constants.WORKORDER_STATUS.cancel){
return ApiResponse.failed("宸ュ崟涓嶅厑璁告楠�");
}
diff --git a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
index a6082f3..f649584 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -389,9 +389,6 @@
dealAppliancePro(mp,user,allRecordList,updateApplianceList,updateApplianceProList, outboundDetailList,stockList);
}
- if(1==1){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"123");
- }
//濡傛灉鏈夋病bom閰嶇疆,妫�鏌ヤ骇鍑猴紙鍖呭惈妫�楠岀殑涓嶈壇鍜屾姤搴熷搧锛夊拰鎶曟枡鏁伴噺鏄惁鐩哥瓑鍖归厤锛屼笉涓�鑷存彁绀洪敊璇�
if(bdparam==null){
@@ -512,6 +509,7 @@
//濡傛灉闇�瑕佹姇鏂欑殑鐗╂枡闆嗗悎锛屽湪搴撳瓨涓鎵炬姇鏂欐潵婧�
for(WStock model : materialList){
for(WStock ts : allList){
+
if(Constants.equalsInteger(model.getMaterialId(),ts.getMaterialId())){
//杩橀渶瑕佹姇鏂欐暟閲�
BigDecimal actNum = Constants.formatBigdecimal(model.getNum()).subtract(Constants.formatBigdecimal(model.getTNum()));
@@ -527,6 +525,10 @@
//濡傛灉宸茬粡婊¤冻鍓╀綑闇�姹傞噺
isfull =true;
}
+
+ //娣诲姞鎶曟枡璁板綍
+ workorderRecordExtMapper.insert(getWorkrecordModel(user,ts,mp,actNum));
+
//鏇存柊宸茬粡鎶曟枡鏁伴噺
model.setTNum(Constants.formatBigdecimal(model.getTNum()).add(actNum));
WOutbound outbound = getFromOutboundList(ts.getWarehouseId(),outboundList);
diff --git a/server/src/main/java/doumeemes/service/system/SystemLoginService.java b/server/src/main/java/doumeemes/service/system/SystemLoginService.java
index 536b6a4..a0ab910 100644
--- a/server/src/main/java/doumeemes/service/system/SystemLoginService.java
+++ b/server/src/main/java/doumeemes/service/system/SystemLoginService.java
@@ -18,6 +18,7 @@
* @date 2022/04/18 18:12
*/
String loginByPassword (LoginDTO dto, HttpServletRequest request);
+
String platformLogin(LoginDTO dto, HttpServletRequest request);
String loginByDingdingCode(Integer companyId ,String code, HttpServletRequest request);
String loginAutoBylingyangToken( String token, HttpServletRequest request,boolean isDemo);
diff --git a/server/src/main/java/doumeemes/service/system/WxLoginService.java b/server/src/main/java/doumeemes/service/system/WxLoginService.java
new file mode 100644
index 0000000..5e92627
--- /dev/null
+++ b/server/src/main/java/doumeemes/service/system/WxLoginService.java
@@ -0,0 +1,21 @@
+package doumeemes.service.system;
+
+import doumeemes.dao.ext.dto.WxLoginDTO;
+import doumeemes.dao.ext.vo.WxLoginVO;
+import doumeemes.dao.system.dto.LoginDTO;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/8/11 10:13
+ */
+public interface WxLoginService {
+
+ WxLoginVO wxLogin(String code, HttpServletRequest request);
+
+
+ String wxLoginByPassword (WxLoginDTO dto, HttpServletRequest request);
+}
diff --git a/server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java b/server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java
index 7380b23..8c7c205 100644
--- a/server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.iflytek.antelope.other.client.dto.resp.UserDTO;
import doumeemes.biz.system.SystemDictDataBiz;
import doumeemes.config.shiro.ShiroToken;
@@ -93,9 +94,10 @@
throw e;
}
}
+
// 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
Subject subject = SecurityUtils.getSubject();
- ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false);
+ ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false,false);
try {
subject.login(token);
LoginUserInfo loginUser = ((LoginUserInfo)subject.getPrincipal());
@@ -149,7 +151,7 @@
}
// 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
Subject subject = SecurityUtils.getSubject();
- ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false);
+ ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false,false);
try {
subject.login(token);
LoginUserInfo loginUser = ((LoginUserInfo)subject.getPrincipal());
@@ -229,7 +231,7 @@
// 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
Subject subject = SecurityUtils.getSubject();
// 閽夐拤鐧诲綍
- ShiroToken token = new ShiroToken(companyId,mobile, null,true);
+ ShiroToken token = new ShiroToken(companyId,mobile, null,true,false);
subject.login(token);
LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal();
@@ -295,7 +297,7 @@
// 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
Subject subject = SecurityUtils.getSubject();
// 閽夐拤鐧诲綍
- ShiroToken atoken = new ShiroToken(companyId,mobile, null,true);
+ ShiroToken atoken = new ShiroToken(companyId,mobile, null,true,false);
subject.login(atoken);
LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal();
loginUser.getCompanyUser().setName(user.getName());
@@ -366,7 +368,7 @@
// 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
Subject subject = SecurityUtils.getSubject();
// 閽夐拤鐧诲綍
- ShiroToken atoken = new ShiroToken(companyId,mobile, null,true);
+ ShiroToken atoken = new ShiroToken(companyId,mobile, null,true,false);
subject.login(atoken);
LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal();
loginLog.setUserId(loginUser.getId());
@@ -451,7 +453,7 @@
// 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
Subject subject = SecurityUtils.getSubject();
// 閽夐拤鐧诲綍
- ShiroToken atoken = new ShiroToken(com.getId(),mobile, null,true);
+ ShiroToken atoken = new ShiroToken(com.getId(),mobile, null,true,false);
subject.login(atoken);
LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal();
loginUser.getCompanyUser().setName(user.getName());
@@ -522,7 +524,7 @@
// 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
Subject subject = SecurityUtils.getSubject();
// 閽夐拤鐧诲綍
- ShiroToken atoken = new ShiroToken(com.getId(),mobile, null,true);
+ ShiroToken atoken = new ShiroToken(com.getId(),mobile, null,true,false);
subject.login(atoken);
LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal();
loginUser.getCompanyUser().setName(user.getName());
@@ -554,4 +556,7 @@
}
}
+
+
+
}
diff --git a/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java b/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
new file mode 100644
index 0000000..8a1ca5c
--- /dev/null
+++ b/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
@@ -0,0 +1,215 @@
+package doumeemes.service.system.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import doumeemes.biz.system.SystemDictDataBiz;
+import doumeemes.config.shiro.ShiroToken;
+import doumeemes.core.constants.ResponseStatus;
+import doumeemes.core.exception.BusinessException;
+import doumeemes.core.model.LoginUserInfo;
+import doumeemes.core.utils.Constants;
+import doumeemes.core.utils.HttpsUtil;
+import doumeemes.core.utils.Utils;
+import doumeemes.dao.business.model.CompanyUser;
+import doumeemes.dao.business.model.Department;
+import doumeemes.dao.ext.CompanyExtMapper;
+import doumeemes.dao.ext.CompanyUserExtMapper;
+import doumeemes.dao.ext.DepartmentExtMapper;
+import doumeemes.dao.ext.dto.QueryCompanyUserExtDTO;
+import doumeemes.dao.ext.dto.WxLoginDTO;
+import doumeemes.dao.ext.vo.CompanyUserExtListVO;
+import doumeemes.dao.ext.vo.WxLoginVO;
+import doumeemes.dao.system.SystemUserMapper;
+import doumeemes.dao.system.dto.LoginDTO;
+import doumeemes.dao.system.model.SystemLoginLog;
+import doumeemes.dao.system.model.SystemUser;
+import doumeemes.service.common.CaptchaService;
+import doumeemes.service.ext.CompanyExtService;
+import doumeemes.service.ext.CompanyUserExtService;
+import doumeemes.service.system.SystemLoginLogService;
+import doumeemes.service.system.WxLoginService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.subject.Subject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/8/11 10:14
+ */
+@Slf4j
+@Service
+public class WxLoginServiceImpl implements WxLoginService {
+
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+
+
+ @Value("${project.version}")
+ private String systemVersion;
+
+ @Autowired
+ private CompanyUserExtMapper companyUserExtMapper;
+ @Autowired
+ private SystemUserMapper systemUserMapper;
+ @Autowired
+ private DepartmentExtMapper departmentExtMapper;
+
+ @Autowired
+ private SystemLoginLogService systemLoginLogService;
+
+
+ /**
+ * 寰俊鍏紬鍙疯幏鍙朤OKEN鍦板潃
+ */
+ public static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
+
+ /**
+ * 寰俊鍏紬鍙疯幏鍙朥SERINFO淇℃伅鍦板潃
+ */
+ public static final String GET_USER_INFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
+
+
+ @Override
+ public WxLoginVO wxLogin(String code, HttpServletRequest request) {
+ WxLoginVO wxLoginVO = new WxLoginVO();
+ String appId = systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPID).getCode();
+ String appSecret = systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPSECRET).getCode();
+ String getTokenUrl = GET_ACCESS_TOKEN_URL.replace("CODE", code).replace("APPID", appId).replace("SECRET", appSecret);
+ JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true));
+ if(Objects.isNull(tokenJson.get("access_token"))){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),tokenJson.getString("errmsg"));
+ }
+ String accessToken = tokenJson.getString("access_token");
+ String openId = tokenJson.getString("openid");
+ String getUserInfoUrl = GET_USER_INFO_URL.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId);
+ JSONObject userInfoJson = JSONObject.parseObject(HttpsUtil.get(getUserInfoUrl,true));
+ wxLoginVO.setOpenid(openId);
+ wxLoginVO.setUnionid(userInfoJson.getString("unionid"));
+ CompanyUser companyUser = companyUserExtMapper.selectOne(new QueryWrapper<CompanyUser>().eq("openid",openId).last(" limit 1 "));
+ if(Objects.isNull(companyUser)){
+ wxLoginVO.setLoginStatus(Constants.ONE);
+ return wxLoginVO;
+ }
+ Department department = departmentExtMapper.selectById(companyUser.getRootDepartId());
+ if(Objects.isNull(department)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌缁戝畾閮ㄩ棬淇℃伅");
+ }
+ SystemUser systemUser = systemUserMapper.selectById(companyUser.getUserId());
+ //鏌ヨ鐢ㄦ埛鏁版嵁
+ LoginDTO dto = new LoginDTO();
+ dto.setCompanyId(department.getCompanyId());
+ dto.setUsername(systemUser.getUsername());
+ SystemLoginLog loginLog = new SystemLoginLog();
+ loginLog.setLoginUsername(dto.getUsername());
+ loginLog.setLoginTime(new Date());
+ loginLog.setSystemVersion(systemVersion);
+ loginLog.setIp(Utils.User_Client.getIP(request));
+ loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+ loginLog.setPlatform(Utils.User_Client.getPlatform(request));
+ loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
+ loginLog.setOsInfo(Utils.User_Client.getOS(request));
+ loginLog.setServerIp(Utils.Server.getIP());
+ // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
+ Subject subject = SecurityUtils.getSubject();
+ ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), null,false,true);
+ try {
+ subject.login(token);
+ LoginUserInfo loginUser = ((LoginUserInfo)subject.getPrincipal());
+ loginLog.setUserId(loginUser.getId());
+ loginLog.setCompanyId(loginUser.getCompany()!=null?loginUser.getCompany().getId():null);
+ loginLog.setCompanyUserId(loginUser.getCompanyUser()!=null?loginUser.getCompanyUser().getId():null);
+ loginLog.setSuccess(Boolean.TRUE);
+ systemLoginLogService.create(loginLog);
+ String session = (String)subject.getSession().getId();
+ wxLoginVO.setLoginStatus(Constants.ONE);
+ wxLoginVO.setSession(session);
+ return wxLoginVO;
+ }catch (AuthenticationException e) {
+ BusinessException ee = null;
+ loginLog.setSuccess(Boolean.FALSE);
+ if(e.getCause()!=null && e.getCause() instanceof BusinessException){
+ ee = (BusinessException)e.getCause();
+ loginLog.setReason(ee.getMessage().length() > 200 ? (ee.getMessage().substring(0, 190) + "...") : ee.getMessage());
+ log.error(ee.getMessage(), e);
+ }else{
+ log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e);
+ loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
+ ee = new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+ }
+ systemLoginLogService.create(loginLog);
+ throw ee;
+ }
+ }
+
+
+
+ @Override
+ public String wxLoginByPassword(WxLoginDTO dto, HttpServletRequest request) {
+ SystemLoginLog loginLog = new SystemLoginLog();
+ loginLog.setLoginUsername(dto.getUsername());
+ loginLog.setLoginTime(new Date());
+ loginLog.setSystemVersion(systemVersion);
+ loginLog.setIp(Utils.User_Client.getIP(request));
+ loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+ loginLog.setPlatform(Utils.User_Client.getPlatform(request));
+ loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
+ loginLog.setOsInfo(Utils.User_Client.getOS(request));
+ loginLog.setServerIp(Utils.Server.getIP());
+ // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
+ Subject subject = SecurityUtils.getSubject();
+ ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false,false);
+ try {
+ subject.login(token);
+ LoginUserInfo loginUser = ((LoginUserInfo)subject.getPrincipal());
+ loginLog.setUserId(loginUser.getId());
+ loginLog.setCompanyId(loginUser.getCompany()!=null?loginUser.getCompany().getId():null);
+ loginLog.setCompanyUserId(loginUser.getCompanyUser()!=null?loginUser.getCompanyUser().getId():null);
+ loginLog.setSuccess(Boolean.TRUE);
+ systemLoginLogService.create(loginLog);
+ //鐧诲綍鎼哄甫寰俊openid淇℃伅
+ if(StringUtils.isNotBlank(dto.getOpenid())){
+ CompanyUser companyUser = companyUserExtMapper.selectById(loginLog.getCompanyUserId());
+ if(StringUtils.isBlank(companyUser.getOpenid())||!companyUser.getOpenid().equals(dto.getOpenid())){
+ //1銆佺粦瀹氬井淇penid鍒癱ompanyUser琛ㄤ俊鎭�
+ companyUser.setOpenid(dto.getOpenid());
+ companyUser.setUnionid(dto.getUnionid());
+ companyUserExtMapper.updateById(companyUser);
+ //2銆佹竻绌哄悓鐢ㄦ埛鍏朵綑companyUser琛╫penid涓� unionid
+ companyUserExtMapper.update(null,new UpdateWrapper<CompanyUser>()
+ .ne("ID",companyUser.getId()).set("UNIONID","").set("OPENID","")
+ .eq("USER_ID",companyUser.getUserId())
+ );
+ }
+ }
+ return (String)subject.getSession().getId();
+ }catch (AuthenticationException e) {
+ BusinessException ee = null;
+ loginLog.setSuccess(Boolean.FALSE);
+ if(e.getCause()!=null && e.getCause() instanceof BusinessException){
+ ee = (BusinessException)e.getCause();
+ loginLog.setReason(ee.getMessage().length() > 200 ? (ee.getMessage().substring(0, 190) + "...") : ee.getMessage());
+ log.error(ee.getMessage(), e);
+ }else{
+ log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e);
+ loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
+ ee = new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+ }
+ systemLoginLogService.create(loginLog);
+ throw ee;
+ }
+ }
+
+}
diff --git a/server/src/main/resources/application.yml b/server/src/main/resources/application.yml
index dd0fac5..72fcf23 100644
--- a/server/src/main/resources/application.yml
+++ b/server/src/main/resources/application.yml
@@ -10,7 +10,7 @@
# application:
# name: doumeemes
profiles:
- active: standardPro
+ active: standard
# JSON杩斿洖閰嶇疆
jackson:
# 榛樿鏃跺尯
--
Gitblit v1.9.3