From 5196a1d1e00ced009a2d4e8ea0aa5f3bb7cefe33 Mon Sep 17 00:00:00 2001
From: EricsHu <hrr145632>
Date: 星期一, 10 四月 2023 15:56:37 +0800
Subject: [PATCH] 小程序登陆绑定

---
 src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java          |    2 
 src/main/java/com/qxueyou/scc/sys/action/LoginController.java                |   49 +++++++++---
 src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java                     |   32 ++++++++
 src/main/java/com/qxueyou/scc/user/model/User.java                           |   14 +++
 src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java                          |    3 
 src/main/java/com/qxueyou/scc/base/model/Result.java                         |    4 +
 src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java |    2 
 src/main/java/com/qxueyou/scc/wx/service/IWechatService.java                 |    5 +
 src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java                   |   34 ++++++++
 src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java            |    2 
 src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java             |   47 ++++++++++-
 src/main/java/com/qxueyou/scc/controller/VideoLiveController.java            |    4 
 src/main/java/com/qxueyou/scc/controller/ResController.java                  |    1 
 13 files changed, 177 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java b/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java
index 5dec6f7..13f67a8 100644
--- a/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java
+++ b/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java
@@ -7,6 +7,7 @@
 
 package com.qxueyou.scc.base.dao;
 
+import java.beans.Transient;
 import java.io.Serializable;
 import java.math.BigInteger;
 import java.util.ArrayList;
@@ -29,6 +30,7 @@
 
 import com.qxueyou.scc.base.model.Pager;
 import com.qxueyou.scc.base.model.Result;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 鍩虹DAO绫�,鑷姩娉ㄥ叆sessionFactory
@@ -84,6 +86,7 @@
     /**
      * 淇濆瓨鎴栨洿鏂板璞�
      */
+    @Transactional(readOnly = false)
     public void saveOrUpdate(Object obj) {
         this.getHibernateTemplate().saveOrUpdate(obj);
     }
diff --git a/src/main/java/com/qxueyou/scc/base/model/Result.java b/src/main/java/com/qxueyou/scc/base/model/Result.java
index cbb9343..d29db52 100644
--- a/src/main/java/com/qxueyou/scc/base/model/Result.java
+++ b/src/main/java/com/qxueyou/scc/base/model/Result.java
@@ -83,6 +83,10 @@
 		this.success = success;
 	}
 
+	public Boolean getSuccess() {
+		return success;
+	}
+
 	public String getMsg() {
 		return msg;
 	}
diff --git a/src/main/java/com/qxueyou/scc/controller/ResController.java b/src/main/java/com/qxueyou/scc/controller/ResController.java
index 2fc0d31..4f3d8b6 100644
--- a/src/main/java/com/qxueyou/scc/controller/ResController.java
+++ b/src/main/java/com/qxueyou/scc/controller/ResController.java
@@ -25,6 +25,7 @@
  * @author chenjunliang
  */
 @Api(tags = "璧勬簮绠$悊鎺ュ彛")
+@CrossOrigin
 @RestController
 @RequestMapping(value = "/teach/res")
 public class ResController {
diff --git a/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java b/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
index 7388141..33e20fe 100644
--- a/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
+++ b/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
@@ -128,7 +128,7 @@
 		String startTime1 = simpleDateFormat.format(new Date(startTime));
 		String endTime1 = simpleDateFormat.format(new Date(endTime));
 		//璋冪敤绗笁鏂圭洿鎾帴鍙�
-		String s = client.courseAdd(name, "16624662432", startTime1, endTime1, ClientUtils.getUserName(), "222", options);
+		String s = client.courseAdd(name, ClientUtils.getUserId(), startTime1, endTime1, ClientUtils.getUserName(), "222", options);
 		//json杞崲鎷垮埌courseId
 		JSONObject jsonObject = JSON.parseObject(s);
 		JSONObject data = jsonObject.getJSONObject("data");
@@ -149,7 +149,7 @@
 		HashMap<Object,Object> options = new HashMap<Object, Object>();
 		options.put("ssl", false);
 
-		String res = client.courseLogin("16624662432", MTCloud.ACCOUNT_TYPE_THIRD, options);
+		String res = client.courseLogin(ClientUtils.getUserId(),MTCloud.ACCOUNT_TYPE_THIRD, options);
 		System.out.println(res);
 		JSONObject jsonObject = JSON.parseObject(res);
 		JSONObject data = jsonObject.getJSONObject("data");
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java b/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java
index 1c90167..40dae86 100644
--- a/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java
+++ b/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java
@@ -5,6 +5,7 @@
 
 import com.qxueyou.scc.base.util.ClientUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -31,6 +32,7 @@
  *
  */
 @RestController
+@CrossOrigin
 @RequestMapping(value = "/stu/homepage")
 public class HomePageController {
 
diff --git a/src/main/java/com/qxueyou/scc/sys/action/LoginController.java b/src/main/java/com/qxueyou/scc/sys/action/LoginController.java
index 555edcc..81ed905 100644
--- a/src/main/java/com/qxueyou/scc/sys/action/LoginController.java
+++ b/src/main/java/com/qxueyou/scc/sys/action/LoginController.java
@@ -13,6 +13,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.qxueyou.scc.base.util.*;
 import com.qxueyou.scc.wx.service.IWechatService;
+import freemarker.template.utility.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kafka.common.network.LoginType;
 import org.apache.tomcat.util.net.openssl.ciphers.Authentication;
@@ -126,22 +127,46 @@
 	 * @param uid
 	 * @throws IOException
 	 */
-	@PostMapping("/auth/wechat/login")
+
+	@PostMapping("/wxlogin")
 	@ApiOperation("寰俊鐧诲綍")
+	@ResponseBody
 	public Result wechatLogin(String code,String number) {
 		JSONObject sessionKeyOrOpenId = wechatService.getSessionKeyOrOpenId(code);
-		String phone = wechatService.getNumber(number);
-		String hql = "from User where deleteFlag is false and mobilePhone = ? ";
-		List<Object> params =  CollectionUtils.newList(phone);
-		User user = commonDAO.findUnique(hql,params, User.class);
-		if(user==null){
-			User user1=new User();
-			user1.setMobilePhone(phone);
-			commonDAO.save(user1);
+		JSONObject gettoken = wechatService.gettoken(appId, secret);
+		Result phone = wechatService.getNumber(gettoken.get("access_token").toString(), number);
+		if(phone.getSuccess()){
+			String hql = "from User where deleteFlag is false and mobilePhone = ? ";
+			System.out.println(phone.getData());
+			List<Object> params =  CollectionUtils.newList(phone.getData());
+			User user = commonDAO.findUnique(hql,params, User.class);
+			if(user==null){
+				//鏂板鐢ㄦ埛
+				User user1=new User();
+				user1.setMobilePhone(phone.getData().toString());
+				user1.setOpenId(sessionKeyOrOpenId.get("openid").toString());
+				commonDAO.save(user1);
+				//鏂板鍏宠仈瀛﹀憳
+				String addUserSql = "from User where deleteFlag is false and mobilePhone = ? ";
+				List<Object> newParams =  CollectionUtils.newList(phone.getData());
+				User newUser = commonDAO.findUnique(addUserSql,newParams, User.class);
+				StuStudent stuStudent=new StuStudent();
+				stuStudent.setStatus(StuStudent.STATUS_REGISTER);
+				stuStudent.setUserId(newUser.getUserId());
+				stuStudent.setMobilePhone(newUser.getMobilePhone());
+				commonDAO.save(stuStudent);
+			}
+			if(StringUtils.isEmpty(user.getOpenId())){
+				user.setOpenId(sessionKeyOrOpenId.get("openid").toString());
+				commonDAO.saveOrUpdate(user);
+			}
+			String studentSql = "from StuStudent where deleteFlag is false and userId = ? ";
+			List<Object> stuParams =  CollectionUtils.newList(user.getUserId());
+			StuStudent stuStudent = commonDAO.findUnique(studentSql, stuParams, StuStudent.class);
+			return new Result(true,"鎺堟潈鎴愬姛",CollectionUtils.newObjectMap("user",user,"ClassId",stuStudent.getClassId()));
 		}
-		return new Result(true,"cg",user);
-//		return new Result(true,"token",securityProperties.getTokenStartWith() + token,"user",user);
-	}
+		return phone;
+}
 
 	@ApiOperation(value = "鐧诲叆鎺ュ彛", notes = "")
 	@ApiImplicitParams({
diff --git a/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java b/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java
index 962e0ec..1a235c0 100644
--- a/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java
+++ b/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java
@@ -28,7 +28,7 @@
 	private static final long serialVersionUID = 7504161189427721559L;
 	
 	/*
-	 * 鐘舵��: 宸叉姤鍚�
+	 * 鐘舵��: 宸叉姤鍚�,鏈縺娲伙紝宸叉瘯涓�
 	 */
 	public static final String STATUS_REGISTER = "register";
 	public static final String STATUS_ACTIVE = "active";
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
index 4627751..aa9121f 100644
--- a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
+++ b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
@@ -644,7 +644,7 @@
             String className = "鍏紑璇�";
             subjectMap.put("subjectName",subject.getSubjectName());
             subjectMap.put("subjectId",subject.getSubjectId());
-
+            subjectMap.put("coverPageUrl",subject.getCoverPageUrl());
             subjectMap.put("percent", new BigDecimal(percentAvg));
             subjectMap.put("progressValue", new BigDecimal(progressValue));
             subjectMap.put("className",className);
diff --git a/src/main/java/com/qxueyou/scc/user/model/User.java b/src/main/java/com/qxueyou/scc/user/model/User.java
index 8e7b836..7975abc 100644
--- a/src/main/java/com/qxueyou/scc/user/model/User.java
+++ b/src/main/java/com/qxueyou/scc/user/model/User.java
@@ -144,6 +144,20 @@
     @Column(name = "IMEI", length = 255)
     private String imei;
 
+    /**
+     * 缁戝畾璐﹀彿ID
+     */
+    @Column(name = "OPENID", length = 255)
+    private String openId;
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+
     @ManyToMany(fetch = FetchType.LAZY, mappedBy = "users")
     @JsonIgnore
     private List<UserRole> roles;
diff --git a/src/main/java/com/qxueyou/scc/wx/service/IWechatService.java b/src/main/java/com/qxueyou/scc/wx/service/IWechatService.java
index ee291ee..b6c3f04 100644
--- a/src/main/java/com/qxueyou/scc/wx/service/IWechatService.java
+++ b/src/main/java/com/qxueyou/scc/wx/service/IWechatService.java
@@ -1,6 +1,7 @@
 package com.qxueyou.scc.wx.service;
 
 import com.alibaba.fastjson.JSONObject;
+import com.qxueyou.scc.base.model.Result;
 import com.qxueyou.scc.teach.student.model.StuStudent;
 
 import java.util.Map;
@@ -19,7 +20,9 @@
 
 	JSONObject getSessionKeyOrOpenId(String code);
 
-	String getNumber(String number);
+	Result getNumber(String tonken, String number);
+
+	JSONObject gettoken(String appid,String secret);
 //	Result isBindWx(String userId);
 	
 //	Result getSignature(String url);
diff --git a/src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java b/src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java
index 5f98963..3400b95 100644
--- a/src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java
+++ b/src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java
@@ -1,8 +1,11 @@
 package com.qxueyou.scc.wx.service.impl;
 
+import cn.hutool.http.HttpUtil;
 import com.alibaba.druid.util.HttpClientUtils;
+import com.alibaba.druid.util.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.qxueyou.scc.base.model.Result;
 import com.qxueyou.scc.base.service.ICacheService;
 import com.qxueyou.scc.teach.student.model.StuStudent;
 import com.qxueyou.scc.wx.service.IWechatService;
@@ -67,16 +70,50 @@
     }
 
     @Override
-    public String getNumber(String number) {
-        String requestUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber";
+    public Result getNumber(String tonken, String number) {
+        JSONObject jsonCode = new JSONObject();
+
+        jsonCode.put("code",number);
+
+
+        String resPhone = HttpClientUtil.doPostUrl("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + tonken, jsonCode);
+
+        if(StringUtils.isEmpty(resPhone) || !resPhone.contains("phone_info") ||  !resPhone.contains("phoneNumber")){
+            return new Result(false,"寰俊瀹樻柟淇敼浜嗗皬绋嬪簭鑾峰彇鐢ㄦ埛鎵嬫満鍙风爜鐩稿叧鎺ュ彛锛�");
+        }
+        JSONObject resPhoneInfo = JSON.parseObject(resPhone);
+        JSONObject phoneInfo=resPhoneInfo.getJSONObject("phone_info");
+        System.out.println(resPhoneInfo);
+        System.out.println(phoneInfo);
+        String phoneNumber = phoneInfo.get("phoneNumber").toString();
+
+        return new Result(true,"鑾峰彇鎵嬫満鍙锋垚鍔�",phoneNumber);
+//        String requestUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="+tonken+jsonObject.toJSONString();
+
+//        Map<String, String> requestUrlParam = new HashMap<>();
+
+
+
+//        requestUrlParam.put("code", number);
+
+//        JSONObject s =JSON.parseObject(HttpClientUtil.doPost(requestUrl));
+
+//        return s;
+    }
+
+    @Override
+    public JSONObject gettoken(String appid, String secret) {
+        String requestUrl = "https://api.weixin.qq.com/cgi-bin/token";
 
         Map<String, String> requestUrlParam = new HashMap<>();
 
-        requestUrlParam.put("access_token", "access_token");
+        requestUrlParam.put("grant_type", "client_credential");
 
-        requestUrlParam.put("code", number);
+        requestUrlParam.put("appid", appid);
 
-        String s = HttpClientUtil.doPost(requestUrl, requestUrlParam);
+        requestUrlParam.put("secret", secret);
+
+        JSONObject s = JSON.parseObject(HttpClientUtil.doGet(requestUrl, requestUrlParam));
 
         return s;
     }
diff --git a/src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java b/src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java
new file mode 100644
index 0000000..f1ed42a
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java
@@ -0,0 +1,32 @@
+package com.qxueyou.scc.wx.utils;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ *     璋冪敤寰俊鎺ュ彛 杩斿洖鎺堟潈淇℃伅~
+ * </p>
+ * @author echo lovely
+ * @date 2020/12/4 21:56
+ */
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Code2Session {
+
+    //鐢ㄦ埛鍞竴鏍囪瘑
+    private String openid;
+    // 浼氳瘽瀵嗛挜
+    private String session_key;
+    // 鐢ㄦ埛鍦ㄥ紑鏀惧钩鍙扮殑鍞竴鏍囪瘑绗�
+    private String unionid;
+    // 閿欒鐮�
+    private Integer errcode;
+    // 閿欒淇℃伅
+    private String errmsg;
+
+}
+
diff --git a/src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java b/src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java
index faab644..dafe729 100644
--- a/src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java
+++ b/src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java
@@ -1,5 +1,7 @@
 package com.qxueyou.scc.wx.utils;
 
+import com.alibaba.fastjson.JSONObject;
+import net.sf.json.JSONString;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -78,6 +80,8 @@
             if (param != null) {
                 List<NameValuePair> paramList = new ArrayList<>();
                 for (String key : param.keySet()) {
+                    System.out.println(key);
+                    System.out.println(param.get(key));
                     paramList.add(new BasicNameValuePair(key, param.get(key)));
                 }
                 // 妯℃嫙琛ㄥ崟
@@ -100,6 +104,36 @@
         return resultString;
     }
 
+    public static String doPostUrl(String url, JSONObject jsonCode) {
+        // 鍒涘缓Httpclient瀵硅薄
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        String resultString = "";
+        try {
+            // 鍒涘缓Http Post璇锋眰
+            HttpPost httpPost = new HttpPost(url);
+
+            String s = jsonCode.toJSONString(jsonCode);
+
+            StringEntity entity=new StringEntity(s);
+
+            httpPost.setEntity(entity);
+            // 鎵цhttp璇锋眰
+            response = httpClient.execute(httpPost);
+            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                response.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return resultString;
+    }
+
     public static String doPost(String url) {
         return doPost(url, null);
     }

--
Gitblit v1.8.0