Sfoglia il codice sorgente

fix cps微信授权跳转

zoujiajian 3 anni fa
parent
commit
0c2be83f84

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/CpsAuthDto.java

@@ -0,0 +1,24 @@
+package com.cyksj.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: CpsAuthDto
+ *创建者: JavaZou
+ *创建时间:2023/5/25 11:03
+ */
+@Getter
+@Setter
+public class CpsAuthDto {
+	/**
+	 * 授权url
+	 */
+	private String authUrl;
+
+	/**
+	 * 授权标识
+	 */
+	private String authState;
+}

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeOrdersStatisticsView.java

@@ -29,7 +29,7 @@ public class UserDistributeOrdersStatisticsView {
 	@DbField("count(od.id)")
 	private Integer orders;
 
-	@DbField("cast(sum(if(dp.send_status != 'close',od.money,0))/100 as decimal(10,2))")
+	@DbField("TRUNCATE(sum(if(dp.send_status != 'close',dp.points,0))/1000,2)")
 	private BigDecimal takeMoney;
 
 	@DbField("count(if(od.status = 'refund',1,NULL))")

+ 1 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -605,6 +605,7 @@ public class RedisService {
         PC_WEB_CACHE("pc_web_cache", "官网首页平台缓存", 5 * 60),
         H5_WEB_CACHE("h5_web_cache", "h5首页平台缓存", 5 * 60),
         CPS_BACK_LOGIN_KEY("cps_back_login:", "cps商务后台登录key", 3 * 60),
+        CPS_AUTH_SUCCESS_KEY("cps_auth_success_key:%s", "cps后台微信授权", 60 * 10),
         ;
 
         private String name;

+ 22 - 25
netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsBackLoginController.java

@@ -1,6 +1,5 @@
 package com.cyksj.web.controller.cps;
 
-import cn.hutool.core.codec.Base64;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
@@ -29,7 +28,6 @@ import com.cyksj.service.authorization.AuthorizationService;
 import com.cyksj.service.cps.CpsManageService;
 import com.cyksj.service.wechat.WeChatService;
 import com.cyksj.web.util.StpCpsManageUser;
-import com.cyksj.web.util.StpUserUtil;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.util.MapBuilder;
@@ -37,7 +35,6 @@ import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
@@ -110,7 +107,8 @@ public class CpsBackLoginController {
 	public Result<String> wxAuthorize() throws Exception {
 		String wxAuthUrl = redisService.getStr(RedisService.key.WX_LOGIN_AUTH_URI.getNameFormat(wxOpenPlatYHLXLoginConfig.getAppId()));
 		Long mappingId = SEQUENCE.nextId();
-		redisService.set(mappingId.toString(), wxOpenPlatYHLXLoginConfig.getCpsLoginUrl(), 60 * 60 * 24L);
+		String authState = mappingId.toString();
+		redisService.set(authState, authState, 60 * 60 * 24L);
 		AuthRedirect redirect = new AuthRedirect().setMappingId(mappingId);
 		String state = Codec.DoBase64.custom().setData(Jsons.toJson(redirect)).encodeAsText();
 		if (StrUtil.isEmpty(wxAuthUrl)) {
@@ -124,7 +122,8 @@ public class CpsBackLoginController {
 	 */
 	@GetMapping("/wx/authLogin/baseRedirect")
 	public void wxAuthLoginRedirect(String code, String state, HttpServletResponse response) throws Exception {
-
+		String json = Codec.DoBase64.custom().setData(state).decodeAsText();
+		AuthRedirect re = Jsons.parseObject(json, AuthRedirect.class);
 		AuthToken token = weChatService.getAuthToken(code, wxOpenPlatYHLXLoginConfig.getAppId());
 		GzhOAuth2UserInfo userinfo = weChatService.getUserInfo(token.getAccessToken(), token.getOpenid());
 		String unionId = userinfo.getUnionid();
@@ -139,30 +138,28 @@ public class CpsBackLoginController {
 		if (user == null) throw BusinessRuntimeException.getInstance("用户信息不存在");
 		UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, user.getId()).select(UserDistribute::getId).last("limit 1"));
 		if (userDistribute == null) throw BusinessRuntimeException.getInstance("只支持渠道分销用户登录");
-
-		//写回登陆信息
+		JSONObject res = new JSONObject();
 		StpCpsManageUser.login(user.getId());
-		response.addHeader("satoken-cpsUser", StpCpsManageUser.getTokenValue());
-
-		Cookie cookie = new Cookie("satoken-cpsUser", StpCpsManageUser.getTokenValue());
-		cookie.setMaxAge(31536000);
-		cookie.setPath("/");
-		response.addCookie(cookie);
-		JSONObject jsonObject = new JSONObject();
-		jsonObject.putOpt("img", user.getHeadimgurl());
-		jsonObject.putOpt("nickname", user.getNickname());
+		String cpsToken = StpCpsManageUser.getTokenValue();
+		res.putOpt("satoken-cpsUser", cpsToken);
+		res.putOpt("img", user.getHeadimgurl());
+		res.putOpt("nickname", user.getNickname());
+		redisService.set(RedisService.key.CPS_AUTH_SUCCESS_KEY.getNameFormat(re.getMappingId()), res.toString(), RedisService.key.CPS_BACK_LOGIN_KEY.getTimeout());
+	}
 
-		Cookie userInfo = new Cookie("info", Base64.encode(jsonObject.toString()));
-		cookie.setMaxAge(31536000);
-		cookie.setPath("/");
-		response.addCookie(userInfo);
-		// 转跳参数
-		String json = Codec.DoBase64.custom().setData(state).decodeAsText();
-		AuthRedirect re = Jsons.parseObject(json, AuthRedirect.class);
-		String url = redisService.getStr(re.getMappingId().toString());
-		response.sendRedirect(url.contains("?") ? url + "&t=" + StpUserUtil.getTokenValue() : url + "?t=" + StpUserUtil.getTokenValue());
+	/**
+	 * 用户是否已授权
+	 */
+	@GetMapping("/get/userInfo")
+	public Result<String> getCpsUserInfo(String authState) {
+		String key = RedisService.key.CPS_AUTH_SUCCESS_KEY.getNameFormat(authState);
+		Object o = redisService.get(key);
+		if (o == null) return GatewayResponse.SUCCESS.newBuilder().toResult();
+		redisService.del(key);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(o.toString());
 	}
 
+
 	/**
 	 * 个人分销平台数据详情
 	 */

+ 3 - 2
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -172,16 +172,17 @@ public class GroupRelationController {
     @GetMapping("/get/authCode")
     public Result<String> getAuthCode(Long relationId) {
         long userId = StpUserUtil.getLoginIdAsLong();
+        List<Long> userIds = userService.getRelationUserIdList(userId, null);
         //每个人 每月只能获取两次
         if (relationId == null) throw BusinessRuntimeException.getInstance("车票不存在");
         GroupsRelationView groupsRelationView = beanSearcher.searchFirst(GroupsRelationView.class, MapUtils.builder()
                 .field(GroupsRelationView::getId, relationId)
-                .field(GroupsRelationView::getUserId, userId).build());
+                .field(GroupsRelationView::getUserId, userIds).op(Operator.InList).build());
         if (groupsRelationView == null) throw BusinessRuntimeException.getInstance("车票不存在");
         if (StrUtil.isEmpty(groupsRelationView.getApiSecret())) throw BusinessRuntimeException.getInstance("未开启验证");
         DateTime now = DateTime.now();
         Integer count = doubleVerifyRecordMapper.selectCount(Wrappers.lambdaQuery(DoubleVerifyClickRecord.class)
-                .eq(DoubleVerifyClickRecord::getUserId, userId)
+                .in(DoubleVerifyClickRecord::getUserId, userIds)
                 .eq(DoubleVerifyClickRecord::getRelationId, relationId)
                 .eq(DoubleVerifyClickRecord::getAccountId, groupsRelationView.getAccountId())
                 .between(DoubleVerifyClickRecord::getCreatedTime, DateUtil.beginOfMonth(now), DateUtil.endOfMonth(now)));