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