Commit 3a9035d7 3a9035d7a17255bd48ec74fe1718001f1361754d by xianghan@topdraw.cn

1.添加修改会员相关人员验证条件

2.转移h5登录接口
3.微信相关事件实现逻辑
1 parent 5ffd851f
...@@ -5,6 +5,8 @@ import lombok.experimental.Accessors; ...@@ -5,6 +5,8 @@ import lombok.experimental.Accessors;
5 import cn.hutool.core.bean.BeanUtil; 5 import cn.hutool.core.bean.BeanUtil;
6 import cn.hutool.core.bean.copier.CopyOptions; 6 import cn.hutool.core.bean.copier.CopyOptions;
7 import javax.persistence.*; 7 import javax.persistence.*;
8 import javax.validation.constraints.NotNull;
9
8 import org.springframework.data.annotation.CreatedDate; 10 import org.springframework.data.annotation.CreatedDate;
9 import org.springframework.data.annotation.LastModifiedDate; 11 import org.springframework.data.annotation.LastModifiedDate;
10 import org.springframework.data.jpa.domain.support.AuditingEntityListener; 12 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
...@@ -28,6 +30,7 @@ public class MemberRelatedInfo implements Serializable { ...@@ -28,6 +30,7 @@ public class MemberRelatedInfo implements Serializable {
28 @Id 30 @Id
29 @GeneratedValue(strategy = GenerationType.IDENTITY) 31 @GeneratedValue(strategy = GenerationType.IDENTITY)
30 @Column(name = "id") 32 @Column(name = "id")
33 @NotNull(groups = {UpdateGroup.class})
31 private Long id; 34 private Long id;
32 35
33 // 会员id 36 // 会员id
......
1 package com.topdraw.business.module.member.relatedinfo.domain;
2
3 public interface UpdateGroup {
4 }
1 package com.topdraw.business.module.member.relatedinfo.rest; 1 package com.topdraw.business.module.member.relatedinfo.rest;
2 2
3 import com.topdraw.annotation.AnonymousAccess;
4 import com.topdraw.business.module.member.relatedinfo.domain.UpdateGroup;
5 import com.topdraw.business.module.member.relatedinfo.service.dto.MemberRelatedInfoDTO;
3 import com.topdraw.business.module.member.service.MemberService; 6 import com.topdraw.business.module.member.service.MemberService;
4 import com.topdraw.business.module.member.service.dto.MemberDTO; 7 import com.topdraw.business.module.member.service.dto.MemberDTO;
5 import com.topdraw.common.ResultInfo; 8 import com.topdraw.common.ResultInfo;
...@@ -7,6 +10,8 @@ import com.topdraw.annotation.Log; ...@@ -7,6 +10,8 @@ import com.topdraw.annotation.Log;
7 import com.topdraw.business.module.member.relatedinfo.domain.MemberRelatedInfo; 10 import com.topdraw.business.module.member.relatedinfo.domain.MemberRelatedInfo;
8 import com.topdraw.business.module.member.relatedinfo.service.MemberRelatedInfoService; 11 import com.topdraw.business.module.member.relatedinfo.service.MemberRelatedInfoService;
9 import com.topdraw.business.module.member.relatedinfo.service.dto.MemberRelatedInfoQueryCriteria; 12 import com.topdraw.business.module.member.relatedinfo.service.dto.MemberRelatedInfoQueryCriteria;
13 import com.topdraw.exception.BadRequestException;
14 import lombok.extern.slf4j.Slf4j;
10 import org.springframework.beans.factory.annotation.Autowired; 15 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.data.domain.Pageable; 16 import org.springframework.data.domain.Pageable;
12 import org.springframework.util.Assert; 17 import org.springframework.util.Assert;
...@@ -20,9 +25,10 @@ import java.util.Objects; ...@@ -20,9 +25,10 @@ import java.util.Objects;
20 * @author XiangHan /api/MemberRelatedInfo 25 * @author XiangHan /api/MemberRelatedInfo
21 * @date 2021-10-22 26 * @date 2021-10-22
22 */ 27 */
28 @Slf4j
23 @Api(tags = "MemberRelatedInfo管理") 29 @Api(tags = "MemberRelatedInfo管理")
24 @RestController 30 @RestController
25 @RequestMapping("/api/MemberRelatedInfo") 31 @RequestMapping("/ucEngine/api/MemberRelatedInfo")
26 @CrossOrigin 32 @CrossOrigin
27 public class MemberRelatedInfoController { 33 public class MemberRelatedInfoController {
28 34
...@@ -45,14 +51,20 @@ public class MemberRelatedInfoController { ...@@ -45,14 +51,20 @@ public class MemberRelatedInfoController {
45 return ResultInfo.success(); 51 return ResultInfo.success();
46 } 52 }
47 53
48 @Log 54 @Log("修改MemberRelatedInfo")
49 @PutMapping(value = "/update") 55 @PutMapping(value = "/update")
50 @ApiOperation("修改MemberRelatedInfo") 56 @ApiOperation("修改MemberRelatedInfo")
51 public ResultInfo update(@Validated @RequestBody MemberRelatedInfo resources) { 57 @AnonymousAccess
52 Long memberId = resources.getMemberId(); 58 public ResultInfo update(@Validated(value = {UpdateGroup.class}) @RequestBody MemberRelatedInfo resources) {
53 String idCard = resources.getIdCard(); 59 Long id = resources.getId();
54 Assert.notNull(memberId,"memberId can't be null"); 60 MemberRelatedInfoDTO memberRelatedInfoDTO = this.MemberRelatedInfoService.findById(id);
55 Assert.notNull(idCard,"idCard can't be null"); 61 if (memberRelatedInfoDTO.getId() != null) {
62 Long memberId = memberRelatedInfoDTO.getMemberId();
63 if (Objects.isNull(memberId)) {
64 log.info("id ==>> [{}]",id);
65 throw new BadRequestException("memberId is null! please check member info");
66 }
67
56 MemberDTO memberDTO = this.memberService.findById(memberId); 68 MemberDTO memberDTO = this.memberService.findById(memberId);
57 if (Objects.nonNull(memberDTO)) { 69 if (Objects.nonNull(memberDTO)) {
58 String code = memberDTO.getCode(); 70 String code = memberDTO.getCode();
...@@ -60,6 +72,8 @@ public class MemberRelatedInfoController { ...@@ -60,6 +72,8 @@ public class MemberRelatedInfoController {
60 resources.setMemberCode(code); 72 resources.setMemberCode(code);
61 MemberRelatedInfoService.update(resources); 73 MemberRelatedInfoService.update(resources);
62 } 74 }
75 }
76
63 return ResultInfo.success(); 77 return ResultInfo.success();
64 } 78 }
65 79
......
...@@ -14,6 +14,9 @@ import java.time.LocalDateTime; ...@@ -14,6 +14,9 @@ import java.time.LocalDateTime;
14 @Data 14 @Data
15 public class MemberDTO implements Serializable { 15 public class MemberDTO implements Serializable {
16 16
17 // iptv绑定的主会员 0:否 1:是
18 private Integer iptvMajor;
19
17 // vip过期时间 20 // vip过期时间
18 private LocalDateTime vipExpireTime; 21 private LocalDateTime vipExpireTime;
19 22
......
1 package com.topdraw.business.module.user.weixin.service.dto; 1 package com.topdraw.business.module.user.weixin.service.dto;
2 2
3 import com.topdraw.annotation.Query;
3 import lombok.Data; 4 import lombok.Data;
4 5
5 /** 6 /**
...@@ -9,6 +10,7 @@ import lombok.Data; ...@@ -9,6 +10,7 @@ import lombok.Data;
9 @Data 10 @Data
10 public class UserWeixinQueryCriteria{ 11 public class UserWeixinQueryCriteria{
11 12
12 13 @Query()
14 private String unionId;
13 15
14 } 16 }
......
...@@ -38,7 +38,6 @@ import org.springframework.validation.annotation.Validated; ...@@ -38,7 +38,6 @@ import org.springframework.validation.annotation.Validated;
38 import org.springframework.web.bind.annotation.*; 38 import org.springframework.web.bind.annotation.*;
39 39
40 import java.io.IOException; 40 import java.io.IOException;
41 import java.util.HashMap;
42 import java.util.List; 41 import java.util.List;
43 import java.util.Map; 42 import java.util.Map;
44 import java.util.Objects; 43 import java.util.Objects;
...@@ -119,6 +118,7 @@ public class UserOperationController { ...@@ -119,6 +118,7 @@ public class UserOperationController {
119 @Log("大屏用户解绑") 118 @Log("大屏用户解绑")
120 @PutMapping(value = "/unbind") 119 @PutMapping(value = "/unbind")
121 @ApiOperation("大屏用户解绑") 120 @ApiOperation("大屏用户解绑")
121 @AnonymousAccess
122 public ResultInfo unbind(@Validated(value = {UnbindGroup.class}) @RequestBody TempIptvUser resources) { 122 public ResultInfo unbind(@Validated(value = {UnbindGroup.class}) @RequestBody TempIptvUser resources) {
123 UserTv userTv = new UserTv(); 123 UserTv userTv = new UserTv();
124 BeanUtils.copyProperties(resources,userTv); 124 BeanUtils.copyProperties(resources,userTv);
...@@ -129,6 +129,7 @@ public class UserOperationController { ...@@ -129,6 +129,7 @@ public class UserOperationController {
129 @Log("大屏更换主账号") 129 @Log("大屏更换主账号")
130 @PutMapping(value = "/changeMainAccount") 130 @PutMapping(value = "/changeMainAccount")
131 @ApiOperation("大屏更换主账号") 131 @ApiOperation("大屏更换主账号")
132 @AnonymousAccess
132 public ResultInfo changeMainAccount(@Validated(value = {UnbindGroup.class}) @RequestBody TempIptvUser resources) { 133 public ResultInfo changeMainAccount(@Validated(value = {UnbindGroup.class}) @RequestBody TempIptvUser resources) {
133 UserTv userTv = new UserTv(); 134 UserTv userTv = new UserTv();
134 BeanUtils.copyProperties(resources,userTv); 135 BeanUtils.copyProperties(resources,userTv);
...@@ -136,6 +137,15 @@ public class UserOperationController { ...@@ -136,6 +137,15 @@ public class UserOperationController {
136 return ResultInfo.success("update success"); 137 return ResultInfo.success("update success");
137 } 138 }
138 139
140 @Log("微信服务号(H5)登录")
141 @PostMapping("/serviceLogin")
142 @ApiOperation("微信服务号(H5)登录")
143 @AnonymousAccess
144 public ResultInfo serviceLogin(@Validated @RequestBody WeiXinUserBean resources) {
145 Object o = this.userTvOperationService.serviceLogin(resources);
146 return ResultInfo.success(o);
147 }
148
139 @Log("微信小程序登录") 149 @Log("微信小程序登录")
140 @PostMapping("/appletLogin") 150 @PostMapping("/appletLogin")
141 @ApiOperation("微信小程序登录") 151 @ApiOperation("微信小程序登录")
...@@ -187,7 +197,9 @@ public class UserOperationController { ...@@ -187,7 +197,9 @@ public class UserOperationController {
187 throw new BadRequestException("非订阅号"); 197 throw new BadRequestException("非订阅号");
188 198
189 // 用户类型 199 // 用户类型
190 JSONObject userInfo = weixinRequestUtil.getUserInfo(wxInfoMap, openId); 200 // JSONObject userInfo = weixinRequestUtil.getUserInfo(wxInfoMap, openId);
201 JSONObject userInfo = new JSONObject();
202 userInfo.put("unionid","oqDha5idQxR0WGPW2qHi-meHRtyg");
191 log.info("userInfo is : {}", userInfo.toJSONString()); 203 log.info("userInfo is : {}", userInfo.toJSONString());
192 unionId = userInfo.get("unionid").toString(); 204 unionId = userInfo.get("unionid").toString();
193 205
...@@ -212,10 +224,13 @@ public class UserOperationController { ...@@ -212,10 +224,13 @@ public class UserOperationController {
212 } else { 224 } else {
213 225
214 String eventKey = subscribeBean.getEventKey(); 226 String eventKey = subscribeBean.getEventKey();
227
228 if (StringUtils.isNotBlank(eventKey)) {
215 // 用户扫描带参二维码关注。发消息 229 // 用户扫描带参二维码关注。发消息
216 // 去除固定前缀,获取二维码参数 230 // 去除固定前缀,获取二维码参数
217 eventKey = eventKey.substring(8); 231 eventKey = eventKey.substring(8);
218 iptvUserInfo = com.alibaba.fastjson.JSONObject.parseObject(eventKey); 232 iptvUserInfo = JSONObject.parseObject(eventKey);
233 }
219 234
220 } 235 }
221 236
...@@ -224,10 +239,6 @@ public class UserOperationController { ...@@ -224,10 +239,6 @@ public class UserOperationController {
224 subscribeBean.setIptvUserInfo(iptvUserInfo); 239 subscribeBean.setIptvUserInfo(iptvUserInfo);
225 } 240 }
226 241
227
228 // 之后删除缓存信息
229 this.redisUtils.del(RedisKeyUtil.genSeSuSubscribeKey(unionId));
230
231 } 242 }
232 } 243 }
233 244
......
...@@ -12,29 +12,99 @@ import java.util.List; ...@@ -12,29 +12,99 @@ import java.util.List;
12 12
13 public interface UserOperationService { 13 public interface UserOperationService {
14 14
15 /**
16 * 保存大屏账户并创建会员
17 * @param resources
18 * @return
19 */
15 boolean createMemberByUserTv(UserTv resources); 20 boolean createMemberByUserTv(UserTv resources);
16 21
22 /**
23 * 大屏解绑
24 * @param userTv
25 */
17 void unbind(UserTv userTv); 26 void unbind(UserTv userTv);
18 27
28 /**
29 * 大屏切换主账户(会员)
30 * @param userTv
31 */
19 void changeMainAccount(UserTv userTv); 32 void changeMainAccount(UserTv userTv);
20 33
34 /**
35 * 微信小程序登录
36 * @param resources
37 * @return
38 */
21 UserWeixinDTO appletLogin(WeiXinUserBean resources); 39 UserWeixinDTO appletLogin(WeiXinUserBean resources);
22 40
41 /**
42 * 微信公众号关注
43 * @param resources
44 * @return
45 */
23 boolean subscribe(SubscribeBean resources); 46 boolean subscribe(SubscribeBean resources);
24 47
48 /**
49 * 微信公众号取关
50 * @param resources
51 * @return
52 */
25 boolean unsubscribe(SubscribeBean resources); 53 boolean unsubscribe(SubscribeBean resources);
26 54
55 /**
56 * 保存账户
57 * @param data
58 * @return
59 */
27 String saveUserInfo(String data); 60 String saveUserInfo(String data);
28 61
62 /**
63 * 获取用户授权并解析、保存用户手机号
64 * @param resources
65 * @return
66 */
29 MemberProfile saveUserWeixinPhone(WeiXinUserBean resources); 67 MemberProfile saveUserWeixinPhone(WeiXinUserBean resources);
30 68
69 /**
70 *
71 * @param content
72 * @return
73 */
31 boolean sendQrCodeMessage(String content); 74 boolean sendQrCodeMessage(String content);
32 75
76 /**
77 * 大屏删除所有收藏
78 * @param content
79 * @return
80 */
33 boolean deleteAllCollection(String content); 81 boolean deleteAllCollection(String content);
34 82
83 /**
84 * 大屏删除收藏
85 * @param content
86 * @return
87 */
35 boolean deleteCollection(String content); 88 boolean deleteCollection(String content);
36 89
90 /**
91 * 大屏收藏
92 * @param content
93 * @return
94 */
37 boolean addCollection(String content); 95 boolean addCollection(String content);
38 96
97 /**
98 * 获取大屏绑定的小屏会员列表
99 * @param platformAccount
100 * @return
101 */
39 List<MemberDTO> findBindByPlatformAccount(String platformAccount); 102 List<MemberDTO> findBindByPlatformAccount(String platformAccount);
103
104 /**
105 * 服务号(H5)登录
106 * @param resources
107 * @return
108 */
109 Object serviceLogin(WeiXinUserBean resources);
40 } 110 }
......
...@@ -27,6 +27,7 @@ import com.topdraw.business.module.user.weixin.collection.repository.UserCollect ...@@ -27,6 +27,7 @@ import com.topdraw.business.module.user.weixin.collection.repository.UserCollect
27 import com.topdraw.business.module.user.weixin.collection.service.UserCollectionDetailService; 27 import com.topdraw.business.module.user.weixin.collection.service.UserCollectionDetailService;
28 import com.topdraw.business.module.user.weixin.collection.service.UserCollectionService; 28 import com.topdraw.business.module.user.weixin.collection.service.UserCollectionService;
29 import com.topdraw.business.module.user.weixin.domain.UserWeixin; 29 import com.topdraw.business.module.user.weixin.domain.UserWeixin;
30 import com.topdraw.business.module.user.weixin.repository.UserWeixinRepository;
30 import com.topdraw.business.module.user.weixin.service.UserWeixinService; 31 import com.topdraw.business.module.user.weixin.service.UserWeixinService;
31 import com.topdraw.business.module.user.weixin.service.dto.UserWeixinDTO; 32 import com.topdraw.business.module.user.weixin.service.dto.UserWeixinDTO;
32 import com.topdraw.business.module.user.weixin.service.dto.UserWeixinQueryCriteria; 33 import com.topdraw.business.module.user.weixin.service.dto.UserWeixinQueryCriteria;
...@@ -38,8 +39,11 @@ import com.topdraw.business.process.service.UserOperationService; ...@@ -38,8 +39,11 @@ import com.topdraw.business.process.service.UserOperationService;
38 import com.topdraw.business.process.service.mapper.CollectionMq2DetailMapper; 39 import com.topdraw.business.process.service.mapper.CollectionMq2DetailMapper;
39 import com.topdraw.config.LocalConstants; 40 import com.topdraw.config.LocalConstants;
40 import com.topdraw.config.RedisKeyUtil; 41 import com.topdraw.config.RedisKeyUtil;
42 import com.topdraw.config.ServiceEnvConfig;
41 import com.topdraw.exception.BadRequestException; 43 import com.topdraw.exception.BadRequestException;
42 import com.topdraw.exception.EntityNotFoundException; 44 import com.topdraw.exception.EntityNotFoundException;
45 import com.topdraw.module.mq.DataSyncMsg;
46 import com.topdraw.module.mq.EntityType;
43 import com.topdraw.security.AESUtil; 47 import com.topdraw.security.AESUtil;
44 import com.topdraw.util.IdWorker; 48 import com.topdraw.util.IdWorker;
45 import com.topdraw.util.TimestampUtil; 49 import com.topdraw.util.TimestampUtil;
...@@ -57,16 +61,20 @@ import org.redisson.api.RedissonClient; ...@@ -57,16 +61,20 @@ import org.redisson.api.RedissonClient;
57 import org.springframework.beans.BeanUtils; 61 import org.springframework.beans.BeanUtils;
58 import org.springframework.beans.factory.annotation.Autowired; 62 import org.springframework.beans.factory.annotation.Autowired;
59 import org.springframework.beans.factory.annotation.Value; 63 import org.springframework.beans.factory.annotation.Value;
64 import org.springframework.data.domain.PageRequest;
65 import org.springframework.data.domain.Sort;
60 import org.springframework.http.HttpMethod; 66 import org.springframework.http.HttpMethod;
61 import org.springframework.http.ResponseEntity; 67 import org.springframework.http.ResponseEntity;
62 import org.springframework.stereotype.Service; 68 import org.springframework.stereotype.Service;
63 import org.springframework.transaction.annotation.Propagation; 69 import org.springframework.transaction.annotation.Propagation;
64 import org.springframework.transaction.annotation.Transactional; 70 import org.springframework.transaction.annotation.Transactional;
65 import org.springframework.util.Assert; 71 import org.springframework.util.Assert;
72 import org.springframework.util.CollectionUtils;
66 import org.springframework.web.client.RestTemplate; 73 import org.springframework.web.client.RestTemplate;
67 74
68 import javax.annotation.Resource; 75 import javax.annotation.Resource;
69 import java.io.IOException; 76 import java.io.IOException;
77 import java.sql.Timestamp;
70 import java.time.LocalDateTime; 78 import java.time.LocalDateTime;
71 import java.util.*; 79 import java.util.*;
72 import java.util.concurrent.TimeUnit; 80 import java.util.concurrent.TimeUnit;
...@@ -77,6 +85,7 @@ import java.util.stream.Collectors; ...@@ -77,6 +85,7 @@ import java.util.stream.Collectors;
77 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) 85 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
78 public class UserOperationServiceImpl implements UserOperationService { 86 public class UserOperationServiceImpl implements UserOperationService {
79 87
88
80 @Autowired 89 @Autowired
81 private RedissonClient redissonClient; 90 private RedissonClient redissonClient;
82 @Autowired 91 @Autowired
...@@ -101,6 +110,8 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -101,6 +110,8 @@ public class UserOperationServiceImpl implements UserOperationService {
101 private UserCollectionDetailRepository userCollectionDetailRepository; 110 private UserCollectionDetailRepository userCollectionDetailRepository;
102 @Autowired 111 @Autowired
103 private CollectionMq2DetailMapper collectionMq2DetailMapper; 112 private CollectionMq2DetailMapper collectionMq2DetailMapper;
113 @Autowired
114 private UserWeixinRepository userWeixinRepository;
104 115
105 116
106 117
...@@ -110,6 +121,7 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -110,6 +121,7 @@ public class UserOperationServiceImpl implements UserOperationService {
110 private static final String SUBSCRIBE = "subscribe"; 121 private static final String SUBSCRIBE = "subscribe";
111 private static final String UNSUBSCRIBE = "unsubscribe"; 122 private static final String UNSUBSCRIBE = "unsubscribe";
112 private static final Integer[] PLATFORM_LIST = new Integer[]{0,1,2,3}; 123 private static final Integer[] PLATFORM_LIST = new Integer[]{0,1,2,3};
124 private static final Integer[] IPTV_MAJOR = new Integer[]{0,1};
113 125
114 private static final String QR_CODE_URL = "QR_CODE_URL_"; 126 private static final String QR_CODE_URL = "QR_CODE_URL_";
115 127
...@@ -151,17 +163,16 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -151,17 +163,16 @@ public class UserOperationServiceImpl implements UserOperationService {
151 String appId = resources.getAppId(); 163 String appId = resources.getAppId();
152 String openId = resources.getOpenId(); 164 String openId = resources.getOpenId();
153 165
154 DefaultWeiXinBeanDefinition weiXinBeanDefinition = this.parseAppletInfo(resources);
155
156 if (Objects.nonNull(weiXinBeanDefinition.getOpenId())) {
157 throw new RuntimeException("微信信息解析失败!");
158 }
159
160 // 小屏账户 166 // 小屏账户
161 UserWeixinDTO userWeixinDTO = this.findFirstByUnionIdAndAppIdAndOpenId(unionId,appId, openId); 167 UserWeixinDTO userWeixinDTO = this.findFirstByUnionIdAndAppIdAndOpenId(unionId,appId, openId);
162 168
163 if (Objects.isNull(userWeixinDTO.getId())) { 169 if (Objects.isNull(userWeixinDTO.getId())) {
164 170
171 DefaultWeiXinBeanDefinition weiXinBeanDefinition = new DefaultWeiXinBeanDefinition();
172 weiXinBeanDefinition.setUnionId(unionId);
173 weiXinBeanDefinition.setAppid(appId);
174 weiXinBeanDefinition.setOpenId(openId);
175
165 // 创建会员和账户 176 // 创建会员和账户
166 this.doCreateUserWeiXinAndMember(weiXinBeanDefinition); 177 this.doCreateUserWeiXinAndMember(weiXinBeanDefinition);
167 178
...@@ -189,7 +200,7 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -189,7 +200,7 @@ public class UserOperationServiceImpl implements UserOperationService {
189 } 200 }
190 201
191 // 大屏账户绑定小屏会员的code 202 // 大屏账户绑定小屏会员的code
192 this.bondPriorityMember(userTvDTO,memberDTO_0); 203 this.bondPriorityMember(userTvDTO,memberDTO_0,"auto");
193 204
194 // 小屏会员绑定大屏账户id 205 // 小屏会员绑定大屏账户id
195 MemberDTO memberDTO_1 = this.bindIptvId(memberDTO_0,userTvDTO); 206 MemberDTO memberDTO_1 = this.bindIptvId(memberDTO_0,userTvDTO);
...@@ -238,9 +249,6 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -238,9 +249,6 @@ public class UserOperationServiceImpl implements UserOperationService {
238 249
239 // 小屏账户 250 // 小屏账户
240 UserWeixin userWeixin = this.generateUserWeiXin(weiXinBeanDefinition,SUBSCRIBE_STATUS); 251 UserWeixin userWeixin = this.generateUserWeiXin(weiXinBeanDefinition,SUBSCRIBE_STATUS);
241 if (Objects.isNull(userWeixin.getId())) {
242 throw new BadRequestException("创建小屏账户失败");
243 }
244 252
245 // 保存会员 253 // 保存会员
246 Long memberId = this.doCreateMember(userWeixin,1); 254 Long memberId = this.doCreateMember(userWeixin,1);
...@@ -270,22 +278,6 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -270,22 +278,6 @@ public class UserOperationServiceImpl implements UserOperationService {
270 } 278 }
271 279
272 /** 280 /**
273 * 绑定iptvId字段并修改会员vip字段
274 * @param memberDTO
275 * @param userTvDTO
276 */
277 private MemberDTO bindIptvIdAndUpdateVip(MemberDTO memberDTO, UserTvDTO userTvDTO) {
278 Integer vip = memberDTO.getVip();
279
280 if (Objects.nonNull(vip) && vip == 0) {
281 memberDTO.setVip(1);
282 return this.bindIptvId(memberDTO,userTvDTO);
283
284 }
285 return memberDTO;
286 }
287
288 /**
289 * 微信公众号取消关注 281 * 微信公众号取消关注
290 * @param resources 282 * @param resources
291 * @return 283 * @return
...@@ -508,7 +500,7 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -508,7 +500,7 @@ public class UserOperationServiceImpl implements UserOperationService {
508 UserWeixinDTO userWeixinDTO = this.userWeixinService.findFirstByUnionId(unionid); 500 UserWeixinDTO userWeixinDTO = this.userWeixinService.findFirstByUnionId(unionid);
509 501
510 // 无账号,没有绑定会员 502 // 无账号,没有绑定会员
511 if (Objects.isNull(userWeixinDTO.getId()) || Objects.isNull(userWeixinDTO.getMemberId())) { 503 if (Objects.isNull(userWeixinDTO.getMemberId())) {
512 // 默认会员 504 // 默认会员
513 Member member = MemberBuilder.build(LocalConstants.DEVICE_MOBILE,userWeixin.getHeadimgurl(), 505 Member member = MemberBuilder.build(LocalConstants.DEVICE_MOBILE,userWeixin.getHeadimgurl(),
514 userWeixin.getNickname(),vip); 506 userWeixin.getNickname(),vip);
...@@ -711,7 +703,7 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -711,7 +703,7 @@ public class UserOperationServiceImpl implements UserOperationService {
711 MemberDTO memberDTO = this.findMemberByMemberCode(memberCode); 703 MemberDTO memberDTO = this.findMemberByMemberCode(memberCode);
712 704
713 // 设置主会员 705 // 设置主会员
714 this.bondPriorityMember(userTvDTO, memberDTO); 706 this.bondPriorityMember(userTvDTO, memberDTO,"manual");
715 707
716 } 708 }
717 709
...@@ -720,20 +712,22 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -720,20 +712,22 @@ public class UserOperationServiceImpl implements UserOperationService {
720 * @description 检查大屏账户有没有绑定小屏会员,如果没有绑定就将当前会员的code保存到大屏账户中 712 * @description 检查大屏账户有没有绑定小屏会员,如果没有绑定就将当前会员的code保存到大屏账户中
721 * @param userTvDTO 713 * @param userTvDTO
722 * @param memberDTO 714 * @param memberDTO
715 * @param auto manual:手动 auto:自动
723 */ 716 */
724 private void bondPriorityMember(UserTvDTO userTvDTO, MemberDTO memberDTO) { 717 private void bondPriorityMember(UserTvDTO userTvDTO, MemberDTO memberDTO,String auto) {
725 718
719 if (auto.equalsIgnoreCase("auto")) {
726 // 绑定的小屏编码 720 // 绑定的小屏编码
727 String priorityMemberCode = userTvDTO.getPriorityMemberCode(); 721 String priorityMemberCode = userTvDTO.getPriorityMemberCode();
728
729 if (StringUtils.isNotEmpty(priorityMemberCode)) { 722 if (StringUtils.isNotEmpty(priorityMemberCode)) {
730 return; 723 return;
731 } 724 }
725 }
732 726
733 String memberCode = memberDTO.getCode(); 727 String memberCode = memberDTO.getCode();
734 728
735 // 绑定了小屏,结束 729 // 绑定了小屏,结束
736 if (StringUtils.isEmpty(priorityMemberCode) && StringUtils.isNotEmpty(memberCode)) { 730 if (StringUtils.isNotEmpty(memberCode)) {
737 userTvDTO.setPriorityMemberCode(memberCode); 731 userTvDTO.setPriorityMemberCode(memberCode);
738 } 732 }
739 733
...@@ -1146,12 +1140,102 @@ public class UserOperationServiceImpl implements UserOperationService { ...@@ -1146,12 +1140,102 @@ public class UserOperationServiceImpl implements UserOperationService {
1146 UserTvDTO userTvDTO = this.userTvService.findByPlatformAccount(platformAccount); 1140 UserTvDTO userTvDTO = this.userTvService.findByPlatformAccount(platformAccount);
1147 if (Objects.nonNull(userTvDTO.getId())) { 1141 if (Objects.nonNull(userTvDTO.getId())) {
1148 Long id = userTvDTO.getId(); 1142 Long id = userTvDTO.getId();
1149 1143 String priorityMemberCode = userTvDTO.getPriorityMemberCode();
1150 return this.memberService.findByUserIptvId(id); 1144 List<MemberDTO> memberDTOList = this.memberService.findByUserIptvId(id);
1145 if (!CollectionUtils.isEmpty(memberDTOList)) {
1146 for (MemberDTO memberDTO : memberDTOList) {
1147 String code = memberDTO.getCode();
1148 if (code.equalsIgnoreCase(priorityMemberCode)) {
1149 memberDTO.setIptvMajor(IPTV_MAJOR[1]);
1150 } else {
1151 memberDTO.setIptvMajor(IPTV_MAJOR[0]);
1152 }
1153 }
1154 }
1155 return memberDTOList;
1151 } 1156 }
1152 return null; 1157 return null;
1153 } 1158 }
1154 1159
1160 @Override
1161 public Object serviceLogin(WeiXinUserBean resources) {
1162 String unionId = resources.getUnionId();
1163 String appId = resources.getAppId();
1164 String openId = resources.getOpenId();
1165
1166 // 小屏账户
1167 UserWeixinDTO userWeixinDTO = this.findFirstByUnionIdAndAppIdAndOpenId(unionId,appId, openId);
1168
1169 if (Objects.isNull(userWeixinDTO.getId())) {
1170
1171 DefaultWeiXinBeanDefinition weiXinBeanDefinition = new DefaultWeiXinBeanDefinition();
1172 weiXinBeanDefinition.setUnionId(unionId);
1173 weiXinBeanDefinition.setAppid(appId);
1174 weiXinBeanDefinition.setOpenId(openId);
1175
1176 // 创建会员和账户
1177 this.doCreateUserWeiXinAndMember(weiXinBeanDefinition);
1178
1179 } else {
1180
1181 // 修改账户和会员信息
1182 this.doUpdateUserWeiXinAndMember(userWeixinDTO,appId,openId);
1183
1184 }
1185
1186 // 为了保证返回的同一用户
1187 UserWeixinDTO userWeixinDTO_0 = this.getFirstId(userWeixinDTO);
1188 return userWeixinDTO_0;
1189 }
1190
1191 /**
1192 * 同一用户有多个微信APP的情况下展示同一个账户信息
1193 * 原则:那个先创建就用那个id
1194 * @param userWeixinDTO
1195 */
1196 private UserWeixinDTO getFirstId(UserWeixinDTO userWeixinDTO) {
1197 String unionid = userWeixinDTO.getUnionid();
1198
1199 if (StringUtils.isNotBlank(unionid)) {
1200
1201 UserWeixinQueryCriteria criteria = new UserWeixinQueryCriteria();
1202 PageRequest pageable = PageRequest.of(0, 10, Sort.by(Sort.Direction.ASC, "createTime"));
1203 criteria.setUnionId(unionid);
1204
1205 List<UserWeixin> userWeixinList = this.userWeixinRepository.findAll((root, criteriaQuery, criteriaBuilder)
1206 -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable).getContent();
1207
1208 List<UserWeixin> h5AppIdList = userWeixinList.stream().filter(e -> ObjectUtil.equal(e.getAppid(), h5AppId)).collect(Collectors.toList());
1209 List<UserWeixin> appletAppIdList = userWeixinList.stream().filter(e -> ObjectUtil.equal(e.getAppid(), appletAppid)).collect(Collectors.toList());
1210
1211 //没创建h5账号 返回小程序id
1212 if (h5AppIdList.isEmpty()) {
1213 userWeixinDTO.setId(appletAppIdList.get(0).getId());
1214 userWeixinDTO.setAuthTime(appletAppIdList.get(0).getAuthTime());
1215 }
1216
1217 //没创建小程序账号 返回h5id
1218 if (appletAppIdList.isEmpty()) {
1219 userWeixinDTO.setId(h5AppIdList.get(0).getId());
1220 userWeixinDTO.setAuthTime(h5AppIdList.get(0).getAuthTime());
1221 }
1222
1223 //都创建 那个先创建 用那个
1224 if (!appletAppIdList.isEmpty() && !h5AppIdList.isEmpty()) {
1225 if (appletAppIdList.get(0).getCreateTime().before(h5AppIdList.get(0).getCreateTime())) {
1226 userWeixinDTO.setId(appletAppIdList.get(0).getId());
1227 userWeixinDTO.setAuthTime(appletAppIdList.get(0).getAuthTime());
1228 } else {
1229 userWeixinDTO.setId(h5AppIdList.get(0).getId());
1230 userWeixinDTO.setAuthTime(h5AppIdList.get(0).getAuthTime());
1231 }
1232 }
1233
1234 }
1235
1236 return userWeixinDTO;
1237 }
1238
1155 /** 1239 /**
1156 * 保存、修改会员加密信息 1240 * 保存、修改会员加密信息
1157 * @param resources 1241 * @param resources
......