Просмотр исходного кода

Merge branch 'master' of https://e.coding.net/chuanghaikeji/smartCampus/backend_code

夏文涛 2 лет назад
Родитель
Сommit
0658bc3e4a

+ 11 - 2
src/main/java/com/template/api/WechatScanLoginControllerAPI.java

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.io.UnsupportedEncodingException;
@@ -26,11 +27,11 @@ public interface WechatScanLoginControllerAPI {
 
     @RequestMapping(value = "/bind")
     @ApiOperation(value = "绑定微信", httpMethod = "GET")
-    public String bindUserMac(String cardNo) throws UnsupportedEncodingException;
+    public String bindUserMac(String phone,String code) throws UnsupportedEncodingException;
 
     @RequestMapping(value = "/bindcallback")
     @ApiOperation(value = "绑定微信回调url", httpMethod = "GET")
-    public String bindcallback(String code, String state, String cardNo) throws UnsupportedEncodingException;
+    public String bindcallback(String code, String state, String phone,String messageCode) throws UnsupportedEncodingException;
 
     @RequestMapping(value = "/insertMonthMeter")
     @ResponseBody
@@ -79,4 +80,12 @@ public interface WechatScanLoginControllerAPI {
     @RequestMapping(value = "/vertify")
     @ResponseBody
     public CommonResult vertify(String code);
+
+    @RequestMapping(value = "/sendMessage")
+    @ResponseBody
+    public CommonResult sendMessage(@RequestParam String phone);
+
+    @RequestMapping(value = "/vertifyMessage")
+    @ResponseBody
+    public CommonResult vertifyMessage(String phone,String code, String wxcode);
 }

+ 121 - 26
src/main/java/com/template/controller/WechatScanLoginController.java

@@ -13,8 +13,10 @@ import com.template.common.constanst.Constanst;
 import com.template.common.result.ResponseStatusEnum;
 import com.template.common.utils.*;
 import com.template.model.evaluate.student.SmartEvaluateStudent;
+import com.template.model.evaluate.student.SmartSubjectManage;
 import com.template.model.pojo.SmartAuthority;
 import com.template.model.pojo.SmartUser;
+import com.template.model.pojo.SmsCode;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
 import com.template.model.tongji.*;
@@ -22,10 +24,7 @@ import com.template.model.vo.LoginVO;
 import com.template.model.weixin.AccessToken;
 import com.template.model.weixin.HttpParame;
 import com.template.model.weixin.WechatUserUnionID;
-import com.template.services.SmartAuthorGroupService;
-import com.template.services.SmartAuthorityService;
-import com.template.services.SmartUserService;
-import com.template.services.WechatScanLoginService;
+import com.template.services.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -39,6 +38,7 @@ import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.text.ParseException;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -61,6 +61,8 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 	public SmartAuthorityService smartAuthorityService;
 	@Autowired
 	public SmartAuthorGroupService smartAuthorGroupService;
+	@Autowired
+	public SmsCodeService smsCodeService;
 
 	/**
 	 * Title: list
@@ -131,11 +133,11 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 	 */
 	@Override
 	@PassToken
-	public String bindUserMac(String cardNo) throws UnsupportedEncodingException {
-		if (StringUtils.isBlank(cardNo)){
-			return "redirect:"+HttpParame.FRONT_URI+"/#/login?message=" + URLEncoder.encode("请绑定信息", "UTF-8");
+	public String bindUserMac(String phone,String messageCode) throws UnsupportedEncodingException {
+		if (StringUtils.isBlank(phone) || StringUtils.isBlank(messageCode)){
+			return "redirect:"+HttpParame.FRONT_URI+"/#/login?message=" + URLEncoder.encode("请输入信息", "UTF-8");
 		}
-		Map<String, String> wechatLoginUrl = wechatScanLoginService.wechatBindUrl(cardNo);
+		Map<String, String> wechatLoginUrl = wechatScanLoginService.wechatBindUrl(phone,messageCode);
 		String url = wechatLoginUrl.get("url");
 		System.out.println(url);
 		return "redirect:" + url;
@@ -143,8 +145,8 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 
 	@Override
 	@PassToken
-	public String bindcallback(String code, String state, String cardNo) throws UnsupportedEncodingException {
-		System.out.println(code+"==="+state+"=="+cardNo);
+	public String bindcallback(String code, String state, String phone,String messageCode) throws UnsupportedEncodingException {
+		System.out.println(code+"==="+state+"=="+messageCode);
 		if (code != null && state != null) {
 			// 验证state为了用于防止跨站请求伪造攻击
 			String decrypt = AesUtil.decrypt(AesUtil.parseHexStr2Byte(state), AesUtil.PASSWORD_SECRET_KEY, 16);
@@ -154,25 +156,31 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 			AccessToken access = wechatScanLoginService.getAccessToken(code);
 			if (access != null) {
 				String openid = access.getOpenid();
-				/*SmartUser user = wechatScanLoginService.selectByOpenid(openid);
-				if (user!=null) {		*//*不存在*//*
-					return "redirect:"+HttpParame.FRONT_URI+"/#/login?message=" + URLEncoder.encode("该卡号已绑定其他用户", "UTF-8");
-				}*/
-				SmartUser userc = wechatScanLoginService.selectByCardNo(cardNo);
-				if (userc==null){
-					return "redirect:"+HttpParame.FRONT_URI+"/#/login?message=" + URLEncoder.encode("卡号信息错误", "UTF-8");
+				QueryWrapper<SmsCode> queryWrapper1 = new QueryWrapper<>();
+				queryWrapper1.eq("deleted", 0);
+				queryWrapper1.eq("is_verify",0);
+				queryWrapper1.eq("phone_number",phone);
+				queryWrapper1.eq("code",code);
+				queryWrapper1.ge("expiration_time", new Date());
+				List<SmsCode> listc = smsCodeService.getSmsCodeByKey(queryWrapper1);
+				if (listc.isEmpty()){
+					return "redirect:"+HttpParame.FRONT_URI+"/#/login?message=" + URLEncoder.encode("验证码已失效", "UTF-8");
 				}
-				if (userc.getOpenId()!=null){
-					return "redirect:"+HttpParame.FRONT_URI+"/#/login?message=" + URLEncoder.encode("该卡号已绑定其他用户", "UTF-8");
+				QueryWrapper<SmartUser> queryWrapper2 = new QueryWrapper<>();
+				queryWrapper2.eq("deleted", 0);
+				queryWrapper2.eq("phone", phone);
+				List<SmartUser> userc = smartUserService.list(queryWrapper2);
+				if (userc.isEmpty()){
+					return "redirect:"+HttpParame.FRONT_URI+"/#/login?message=" + URLEncoder.encode("用户不存在", "UTF-8");
 				}
-				userc.setOpenId(openid);
-				int m = wechatScanLoginService.updateSmartUser(userc);
+				userc.get(0).setOpenId(openid);
+				int m = wechatScanLoginService.updateSmartUser(userc.get(0));
 				if (m>0){
-					String token = JWTUtil.getToken(userc);
-					QueryWrapper<SmartAuthority> queryWrapper1 = new QueryWrapper<>();
-					queryWrapper1.eq("deleted", 0);
-					queryWrapper1.eq("user_id", userc.getId());
-					List<SmartAuthority> query = smartAuthorityService.getAuthorByKey(queryWrapper1);
+					String token = JWTUtil.getToken(userc.get(0));
+					QueryWrapper<SmartAuthority> queryWrapper3 = new QueryWrapper<>();
+					queryWrapper3.eq("deleted", 0);
+					queryWrapper3.eq("user_id", userc.get(0).getId());
+					List<SmartAuthority> query = smartAuthorityService.getAuthorByKey(queryWrapper3);
 					if (query.size()>0){
 						return "redirect:"+HttpParame.FRONT_URI+"/#/wanzai/home?token=" + token;
 					} else {
@@ -324,6 +332,93 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 		String token = JWTUtil.getToken(user);
 		JSONObject jsonObject = new JSONObject();
 		jsonObject.put("token", token);
+		jsonObject.put("user", user);
 		return CommonResult.ok(jsonObject.toString());
 	}
+
+	@Override
+	@PassToken
+	public CommonResult sendMessage(String phone){
+		QueryWrapper<SmartUser> queryWrapper1 = new QueryWrapper<>();
+		queryWrapper1.eq("deleted", 0);
+		queryWrapper1.eq("phone",phone);
+		queryWrapper1.eq("is_cancel",0);
+		List<SmartUser> list = smartUserService.list(queryWrapper1);
+		if (list.isEmpty()){
+			return CommonResult.fail("该手机无权限登录");
+		}
+		QueryWrapper<SmsCode> queryWrapper2 = new QueryWrapper<>();
+		queryWrapper2.eq("deleted", 0);
+		queryWrapper2.eq("is_verify",0);
+		queryWrapper2.eq("phone_number",phone);
+		queryWrapper2.ge("expiration_time", new Date());
+		List<SmsCode> listc = smsCodeService.getSmsCodeByKey(queryWrapper2);
+		if (!listc.isEmpty()){
+			return CommonResult.fail("操作频繁,请稍后再试");
+		}
+		String code = GetVertifyCode.getRandomNumCode(6);
+		SmsCode smsCode = new SmsCode();
+		smsCode.setId(UUIDUtil.generateID());
+		smsCode.setPhoneNumber(phone);
+		smsCode.setCode(code);
+		long time = new Date().getTime() + 60000L;
+		smsCode.setExpirationTime(new Date(time));
+		smsCode.setIsVerify("0");
+		smsCode.setDeleted(0);
+		int m = smsCodeService.insertSmsCode(smsCode);
+		if (m>0){
+			String message = SendSms.sendSms(phone, code);
+			if (message.contains("success")){
+				return CommonResult.ok("发送成功");
+			}
+		}
+		return CommonResult.fail("操作失败");
+	}
+
+	@Override
+	@PassToken
+	public CommonResult vertifyMessage(String phone,String code, String wxcode){
+		QueryWrapper<SmsCode> queryWrapper1 = new QueryWrapper<>();
+		queryWrapper1.eq("deleted", 0);
+		queryWrapper1.eq("is_verify",0);
+		queryWrapper1.eq("phone_number",phone);
+		queryWrapper1.eq("code",code);
+		queryWrapper1.ge("expiration_time", new Date());
+		List<SmsCode> listc = smsCodeService.getSmsCodeByKey(queryWrapper1);
+		if (listc.isEmpty()){
+			return CommonResult.ok("验证码已失效");
+		}
+		if (StringUtils.isBlank(wxcode)){
+			return CommonResult.fail("请传入wxcode");
+		}
+		String url = "https://api.weixin.qq.com/sns/jscode2session?" +
+				"appid=" + PropertiesUtil.getValue(HttpParame.APPID) +
+				"&secret=" + PropertiesUtil.getValue(HttpParame.SECRET) +
+				"&js_code=" + wxcode +
+				"&grant_type=authorization_code";
+
+		String json = HttpClientUtils.getInstance().sendHttpGet(url);
+		Gson gson = new Gson();
+		HashMap<String, String> userMap = gson.fromJson(json.toString(), new TypeToken<HashMap<String, String>>() {}.getType());
+		String openid = "";
+		try {
+			openid = userMap.get("openid").toString();
+		} catch (Exception e) {
+			return CommonResult.fail("code异常");
+		}
+		QueryWrapper<SmartUser> queryWrapper2 = new QueryWrapper<>();
+		queryWrapper2.eq("deleted", 0);
+		queryWrapper2.eq("phone", phone);
+		List<SmartUser> user = smartUserService.list(queryWrapper2);
+		if (user.isEmpty()){
+			return CommonResult.fail("该用户不存在");
+		}
+		user.get(0).setOpenId(openid);
+		smartUserService.updateSmartUser(user.get(0));
+		String token = JWTUtil.getToken(user.get(0));
+		JSONObject jsonObject = new JSONObject();
+		jsonObject.put("token", token);
+		jsonObject.put("user", user.get(0));
+		return CommonResult.ok(jsonObject);
+	}
 }

+ 6 - 18
src/main/java/com/template/model/pojo/SmsCode.java

@@ -10,25 +10,13 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
-/**
- * <p>
- *
- * </p>
- *
- * @author ceshi
- * @since 2023-04-20
- */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@ApiModel(value="SmsCode对象", description="")
-public class SmsCode implements Serializable {
+@ApiModel(value="smartSubjectRule", description="")
+public class SmsCode {
 
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "主键ID")
-    @TableId(value = "id", type = IdType.ID_WORKER)
-    private Long id;
+    public Long id;
 
     @ApiModelProperty(value = "手机号")
     private String phoneNumber;
@@ -52,15 +40,15 @@ public class SmsCode implements Serializable {
 
     @TableField(fill = FieldFill.INSERT)
     @ApiModelProperty(value = "创建人员")
-    private Long createUser;
+    private String createUser;
 
     @TableField(fill = FieldFill.INSERT_UPDATE)
     @ApiModelProperty(value = "更新人员")
-    private Long updateUser;
+    private String updateUser;
 
     @ApiModelProperty(value = "逻辑删除标记")
     @TableLogic
-    private Long deleted;
+    private Integer deleted;
 
 
 }

+ 1 - 1
src/main/java/com/template/services/WechatScanLoginService.java

@@ -21,7 +21,7 @@ public interface WechatScanLoginService {
 	
 	Map<String,String> wechatLoginUrl();
 
-	Map<String,String> wechatBindUrl(String cardNo);
+	Map<String,String> wechatBindUrl(String phone,String messageCode);
 	
 	AccessToken getAccessToken(String code);
 	

+ 2 - 2
src/main/java/com/template/services/impl/WechatScanLoginServiceImpl.java

@@ -67,7 +67,7 @@ public class WechatScanLoginServiceImpl implements WechatScanLoginService {
 	}
 
 	@Override
-	public Map<String, String> wechatBindUrl(String cardNo) {
+	public Map<String, String> wechatBindUrl(String phone,String messageCode) {
 		String content = Constanst.PWD_MD5+ DateUtils.getYYYYMMdd();
 		byte[] encrypt = AesUtil.encrypt(content, AesUtil.PASSWORD_SECRET_KEY, 16);
 		String parseByte2HexStr = AesUtil.parseByte2HexStr(encrypt);
@@ -76,7 +76,7 @@ public class WechatScanLoginServiceImpl implements WechatScanLoginService {
 		url = url.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
 		try {
 			url = url.replaceAll("REDIRECT_URI", URLEncoder.encode(
-					PropertiesUtil.getValue(HttpParame.BIND_URI)+"?cardNo="+cardNo,"UTF-8"));
+					PropertiesUtil.getValue(HttpParame.BIND_URI)+"?phone="+phone+"&messageCode="+messageCode,"UTF-8"));
 		} catch (UnsupportedEncodingException e) {
 			e.printStackTrace();
 		}