1.添加批量修改会员分组功能
Showing
11 changed files
with
113 additions
and
35 deletions
| ... | @@ -11,6 +11,7 @@ import org.springframework.data.repository.query.Param; | ... | @@ -11,6 +11,7 @@ import org.springframework.data.repository.query.Param; |
| 11 | import java.time.LocalDateTime; | 11 | import java.time.LocalDateTime; |
| 12 | import java.util.List; | 12 | import java.util.List; |
| 13 | import java.util.Optional; | 13 | import java.util.Optional; |
| 14 | import java.util.Set; | ||
| 14 | 15 | ||
| 15 | /** | 16 | /** |
| 16 | * @author XiangHan | 17 | * @author XiangHan |
| ... | @@ -64,4 +65,8 @@ public interface MemberRepository extends JpaRepository<Member, Long>, JpaSpecif | ... | @@ -64,4 +65,8 @@ public interface MemberRepository extends JpaRepository<Member, Long>, JpaSpecif |
| 64 | 65 | ||
| 65 | @Query(value = "SELECT IFNULL(`exp`,0) AS exp FROM uc_member WHERE `id` = ?1 ", nativeQuery = true) | 66 | @Query(value = "SELECT IFNULL(`exp`,0) AS exp FROM uc_member WHERE `id` = ?1 ", nativeQuery = true) |
| 66 | Long findExpByMemberId(Long memberId); | 67 | Long findExpByMemberId(Long memberId); |
| 68 | |||
| 69 | @Modifying | ||
| 70 | @Query(value = "UPDATE `uc_member` SET `groups` = ?1, `update_time` = now() WHERE `code` IN ?2 ", nativeQuery = true) | ||
| 71 | Integer doUpdateGroupsBatch(String groups, Set<String> codes); | ||
| 67 | } | 72 | } | ... | ... |
| ... | @@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; | ... | @@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; |
| 18 | import org.springframework.validation.annotation.Validated; | 18 | import org.springframework.validation.annotation.Validated; |
| 19 | import org.springframework.web.bind.annotation.*; | 19 | import org.springframework.web.bind.annotation.*; |
| 20 | 20 | ||
| 21 | import java.util.List; | ||
| 21 | import java.util.Objects; | 22 | import java.util.Objects; |
| 22 | 23 | ||
| 23 | /** | 24 | /** |
| ... | @@ -57,6 +58,17 @@ public class MemberController { | ... | @@ -57,6 +58,17 @@ public class MemberController { |
| 57 | return ResultInfo.success(); | 58 | return ResultInfo.success(); |
| 58 | } | 59 | } |
| 59 | 60 | ||
| 61 | |||
| 62 | @RequestMapping(value = "/doUpdateGroupsBatch") | ||
| 63 | @AnonymousAccess | ||
| 64 | @ApiOperation("批量手动修改会员分组") | ||
| 65 | public ResultInfo doUpdateGroupsBatch(@Validated(value = {UpdateGroup.class}) @RequestBody List<Member> resources) { | ||
| 66 | log.info("doUpdateGroupsBatch ==>> param ==>> {}",resources); | ||
| 67 | Integer count = this.memberOperationService.doUpdateGroupsBatch(resources); | ||
| 68 | return ResultInfo.success(count); | ||
| 69 | } | ||
| 70 | |||
| 71 | |||
| 60 | @PutMapping(value = "/update") | 72 | @PutMapping(value = "/update") |
| 61 | @ApiOperation("修改会员信息") | 73 | @ApiOperation("修改会员信息") |
| 62 | @AnonymousAccess | 74 | @AnonymousAccess | ... | ... |
| ... | @@ -135,4 +135,10 @@ public interface MemberService { | ... | @@ -135,4 +135,10 @@ public interface MemberService { |
| 135 | */ | 135 | */ |
| 136 | Long findExpByMemberId(Long memberId); | 136 | Long findExpByMemberId(Long memberId); |
| 137 | 137 | ||
| 138 | /** | ||
| 139 | * | ||
| 140 | * @param resources | ||
| 141 | * @return | ||
| 142 | */ | ||
| 143 | Integer doUpdateGroupsBatch(List<Member> resources); | ||
| 138 | } | 144 | } | ... | ... |
| ... | @@ -28,7 +28,9 @@ import org.springframework.stereotype.Service; | ... | @@ -28,7 +28,9 @@ import org.springframework.stereotype.Service; |
| 28 | import org.springframework.transaction.annotation.Propagation; | 28 | import org.springframework.transaction.annotation.Propagation; |
| 29 | import org.springframework.transaction.annotation.Transactional; | 29 | import org.springframework.transaction.annotation.Transactional; |
| 30 | 30 | ||
| 31 | import javax.validation.constraints.NotNull; | ||
| 31 | import java.util.*; | 32 | import java.util.*; |
| 33 | import java.util.stream.Collectors; | ||
| 32 | 34 | ||
| 33 | /** | 35 | /** |
| 34 | * @author XiangHan | 36 | * @author XiangHan |
| ... | @@ -214,6 +216,13 @@ public class MemberServiceImpl implements MemberService { | ... | @@ -214,6 +216,13 @@ public class MemberServiceImpl implements MemberService { |
| 214 | return this.memberRepository.findExpByMemberId(memberId); | 216 | return this.memberRepository.findExpByMemberId(memberId); |
| 215 | } | 217 | } |
| 216 | 218 | ||
| 219 | @Override | ||
| 220 | @Transactional(rollbackFor = Exception.class) | ||
| 221 | public Integer doUpdateGroupsBatch(List<Member> resources) { | ||
| 222 | Set<String> codes = resources.stream().map(t -> t.getCode()).collect(Collectors.toSet()); | ||
| 223 | return this.memberRepository.doUpdateGroupsBatch( resources.get(0).getGroups(), codes); | ||
| 224 | } | ||
| 225 | |||
| 217 | 226 | ||
| 218 | @Override | 227 | @Override |
| 219 | @Transactional(rollbackFor = Exception.class) | 228 | @Transactional(rollbackFor = Exception.class) | ... | ... |
| ... | @@ -28,5 +28,5 @@ public class SubscribeBean extends WeiXinUserBean { | ... | @@ -28,5 +28,5 @@ public class SubscribeBean extends WeiXinUserBean { |
| 28 | private String nickname; | 28 | private String nickname; |
| 29 | private String headimgurl; | 29 | private String headimgurl; |
| 30 | 30 | ||
| 31 | private String sourceInfo; | 31 | private JSONObject sourceInfo; |
| 32 | } | 32 | } | ... | ... |
| 1 | package com.topdraw.business.process.domian.weixin; | ||
| 2 | |||
| 3 | /** | ||
| 4 | * @author : | ||
| 5 | * @description: | ||
| 6 | * @function : | ||
| 7 | * @date :Created in 2022/7/4 16:36 | ||
| 8 | * @version: : | ||
| 9 | * @modified By: | ||
| 10 | * @since : modified in 2022/7/4 16:36 | ||
| 11 | */ | ||
| 12 | public interface SubscribeSourceTypeConstant { | ||
| 13 | |||
| 14 | int type1 = 1; | ||
| 15 | int type2 = 2; | ||
| 16 | |||
| 17 | } |
| ... | @@ -345,33 +345,34 @@ public class UserOperationController { | ... | @@ -345,33 +345,34 @@ public class UserOperationController { |
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | // 大屏账户信息 | 347 | // 大屏账户信息 |
| 348 | JSONObject iptvUserInfo = null; | 348 | JSONObject redisInfo = null; |
| 349 | // 缓存的大屏信息,使用unionid即可 | 349 | // 缓存的大屏信息,使用unionid即可 |
| 350 | String content = (String) this.redisUtils.get(RedisKeyUtil.genSeSuSubscribeKey(unionId)); | 350 | String content = (String) this.redisUtils.get(RedisKeyUtil.genSeSuSubscribeKey(unionId)); |
| 351 | log.info("获取redis中存储的数据,[subscribe#{}]", content); | ||
| 351 | if (StringUtils.isNotBlank(content)) { | 352 | if (StringUtils.isNotBlank(content)) { |
| 352 | // 大屏信息 | 353 | // 大屏信息 |
| 353 | iptvUserInfo = JSONObject.parseObject(content); | 354 | redisInfo = JSONObject.parseObject(content); |
| 354 | } | 355 | } |
| 355 | 356 | ||
| 356 | // 用户自己搜索关注就没有大屏信息,否则表示扫码关注 | 357 | // 用户自己搜索关注就没有大屏信息,否则表示扫码关注 |
| 357 | if (Objects.nonNull(iptvUserInfo)) { | 358 | if (Objects.nonNull(redisInfo)) { |
| 358 | 359 | ||
| 359 | subscribeBean.setIptvUserInfo(iptvUserInfo); | 360 | subscribeBean.setIptvUserInfo(redisInfo); |
| 360 | Object sourceInfo1 = iptvUserInfo.get("sourceInfo"); | 361 | // 关注来源信息 |
| 361 | if (Objects.nonNull(sourceInfo1)) { | 362 | JSONObject sourceInfo = JSONObject.parseObject(redisInfo.get("sourceInfo").toString(), JSONObject.class); |
| 362 | String sourceInfo = sourceInfo1.toString(); | 363 | log.info("关注来源信息,[subscribe#{}]", sourceInfo); |
| 363 | if (StringUtils.isNotBlank(sourceInfo)) | 364 | if (Objects.nonNull(sourceInfo)) { |
| 364 | subscribeBean.setSourceInfo(sourceInfo); | 365 | subscribeBean.setSourceInfo(sourceInfo); |
| 365 | } | 366 | } |
| 366 | 367 | ||
| 367 | String nickname = iptvUserInfo.get("nickname").toString(); | 368 | String nickname = redisInfo.get("nickname").toString(); |
| 368 | if (StringUtils.isNotBlank(nickname)) { | 369 | if (StringUtils.isNotBlank(nickname)) { |
| 369 | String nicknameDecode = URLDecoder.decode(nickname, "UTF-8"); | 370 | String nicknameDecode = URLDecoder.decode(nickname, "UTF-8"); |
| 370 | String nicknameEncode = Base64Util.encode(nicknameDecode); | 371 | String nicknameEncode = Base64Util.encode(nicknameDecode); |
| 371 | subscribeBean.setNickname(nicknameEncode); | 372 | subscribeBean.setNickname(nicknameEncode); |
| 372 | } | 373 | } |
| 373 | 374 | ||
| 374 | String headimgurl = iptvUserInfo.get("headimgurl").toString(); | 375 | String headimgurl = redisInfo.get("headimgurl").toString(); |
| 375 | log.info("parseSubscribe ==>> headimgurl ==>> {}", headimgurl); | 376 | log.info("parseSubscribe ==>> headimgurl ==>> {}", headimgurl); |
| 376 | if (StringUtils.isNotBlank(headimgurl)) { | 377 | if (StringUtils.isNotBlank(headimgurl)) { |
| 377 | String headimgurlDecode = URLDecoder.decode(headimgurl, "UTF-8"); | 378 | String headimgurlDecode = URLDecoder.decode(headimgurl, "UTF-8"); | ... | ... |
| ... | @@ -554,7 +554,7 @@ public class UserOperationServiceImpl implements UserOperationService { | ... | @@ -554,7 +554,7 @@ public class UserOperationServiceImpl implements UserOperationService { |
| 554 | } | 554 | } |
| 555 | 555 | ||
| 556 | // 保存关注记录 | 556 | // 保存关注记录 |
| 557 | String sourceInfo = resources.getSourceInfo(); | 557 | JSONObject sourceInfo = resources.getSourceInfo(); |
| 558 | this.saveWechatSubscribeRecord(memberDTO, sourceInfo, 1); | 558 | this.saveWechatSubscribeRecord(memberDTO, sourceInfo, 1); |
| 559 | 559 | ||
| 560 | return true; | 560 | return true; |
| ... | @@ -567,33 +567,38 @@ public class UserOperationServiceImpl implements UserOperationService { | ... | @@ -567,33 +567,38 @@ public class UserOperationServiceImpl implements UserOperationService { |
| 567 | * @param subscribe 关注状态 | 567 | * @param subscribe 关注状态 |
| 568 | * @param sourceInfo 来源描述 | 568 | * @param sourceInfo 来源描述 |
| 569 | */ | 569 | */ |
| 570 | private void saveWechatSubscribeRecord(MemberDTO memberDTO, String sourceInfo, int subscribe) { | 570 | private void saveWechatSubscribeRecord(MemberDTO memberDTO, JSONObject sourceInfo, int subscribe) { |
| 571 | 571 | ||
| 572 | WechatSubscribeRecord wechatSubscribeRecord = new WechatSubscribeRecord(); | 572 | WechatSubscribeRecord wechatSubscribeRecord = new WechatSubscribeRecord(); |
| 573 | wechatSubscribeRecord.setCode(IdWorker.generatorString()); | 573 | wechatSubscribeRecord.setCode(IdWorker.generatorString()); |
| 574 | wechatSubscribeRecord.setMemberId(memberDTO.getId()); | 574 | wechatSubscribeRecord.setMemberId(memberDTO.getId()); |
| 575 | wechatSubscribeRecord.setOperationFlag(subscribe); | 575 | wechatSubscribeRecord.setOperationFlag(subscribe); |
| 576 | if (StringUtils.isBlank(sourceInfo)) { | 576 | if (Objects.isNull(sourceInfo)) { |
| 577 | |||
| 577 | wechatSubscribeRecord.setEntityType(3); | 578 | wechatSubscribeRecord.setEntityType(3); |
| 579 | |||
| 578 | } else { | 580 | } else { |
| 579 | JSONObject jsonObject = JSONObject.parseObject(sourceInfo, JSONObject.class); | 581 | |
| 580 | Object activityId = jsonObject.get("activityId"); | 582 | Object activityId = sourceInfo.get("sourceId"); |
| 581 | Object activityCode = jsonObject.get("activityCode"); | 583 | Object activityCode = sourceInfo.get("sourceCode"); |
| 582 | Object entityType = jsonObject.get("entityType"); | 584 | Object entityType = sourceInfo.get("sourceType"); |
| 583 | if (Objects.nonNull(entityType)) { | 585 | if (Objects.nonNull(entityType)) { |
| 584 | String s = entityType.toString(); | 586 | Integer s = Integer.parseInt(entityType.toString()); |
| 585 | switch (s) { | 587 | switch (s) { |
| 586 | case "1": | 588 | case SubscribeSourceTypeConstant.type1: |
| 587 | wechatSubscribeRecord.setSourceType(1); | 589 | wechatSubscribeRecord.setSourceType(SubscribeSourceTypeConstant.type1); |
| 588 | wechatSubscribeRecord.setEntityType(1); | 590 | wechatSubscribeRecord.setEntityType(SubscribeSourceTypeConstant.type1); |
| 589 | break; | 591 | break; |
| 590 | case "2": | 592 | case SubscribeSourceTypeConstant.type2: |
| 591 | if (Objects.nonNull(activityId)) | 593 | if (Objects.nonNull(activityId)) { |
| 592 | wechatSubscribeRecord.setEntityId(Long.valueOf(activityId.toString())); | 594 | wechatSubscribeRecord.setEntityId(Long.valueOf(activityId.toString())); |
| 593 | if (Objects.nonNull(activityCode)) | 595 | } |
| 594 | wechatSubscribeRecord.setEntityCode(activityCode.toString()); | 596 | if (Objects.nonNull(activityCode)) { |
| 595 | wechatSubscribeRecord.setSourceType(2); | 597 | wechatSubscribeRecord.setEntityCode(activityCode.toString()); |
| 596 | wechatSubscribeRecord.setEntityType(2); | 598 | } |
| 599 | |||
| 600 | wechatSubscribeRecord.setSourceType(SubscribeSourceTypeConstant.type2); | ||
| 601 | wechatSubscribeRecord.setEntityType(SubscribeSourceTypeConstant.type2); | ||
| 597 | break; | 602 | break; |
| 598 | default: | 603 | default: |
| 599 | wechatSubscribeRecord.setSourceType(3); | 604 | wechatSubscribeRecord.setSourceType(3); |
| ... | @@ -602,10 +607,12 @@ public class UserOperationServiceImpl implements UserOperationService { | ... | @@ -602,10 +607,12 @@ public class UserOperationServiceImpl implements UserOperationService { |
| 602 | } | 607 | } |
| 603 | } | 608 | } |
| 604 | 609 | ||
| 605 | wechatSubscribeRecord.setSourceInfo(sourceInfo); | 610 | wechatSubscribeRecord.setSourceInfo(JSONObject.toJSONString(sourceInfo)); |
| 611 | |||
| 606 | } | 612 | } |
| 607 | 613 | ||
| 608 | this.wechatSubscribeRecordService.create(wechatSubscribeRecord); | 614 | this.wechatSubscribeRecordService.create(wechatSubscribeRecord); |
| 615 | |||
| 609 | } | 616 | } |
| 610 | 617 | ||
| 611 | 618 | ||
| ... | @@ -655,7 +662,7 @@ public class UserOperationServiceImpl implements UserOperationService { | ... | @@ -655,7 +662,7 @@ public class UserOperationServiceImpl implements UserOperationService { |
| 655 | } | 662 | } |
| 656 | 663 | ||
| 657 | // 关注记录 | 664 | // 关注记录 |
| 658 | this.saveWechatSubscribeRecord(memberDTO, "",2); | 665 | this.saveWechatSubscribeRecord(memberDTO, null,2); |
| 659 | 666 | ||
| 660 | // 同步至iptv | 667 | // 同步至iptv |
| 661 | ((UserOperationServiceImpl)AopContext.currentProxy()).asyncUnsubscribe(new MemberAndWeixinUserDTO(memberDTO, userWeixinDTO)); | 668 | ((UserOperationServiceImpl)AopContext.currentProxy()).asyncUnsubscribe(new MemberAndWeixinUserDTO(memberDTO, userWeixinDTO)); | ... | ... |
| ... | @@ -25,7 +25,9 @@ import org.springframework.cache.annotation.CachePut; | ... | @@ -25,7 +25,9 @@ import org.springframework.cache.annotation.CachePut; |
| 25 | import org.springframework.stereotype.Service; | 25 | import org.springframework.stereotype.Service; |
| 26 | import org.springframework.util.Assert; | 26 | import org.springframework.util.Assert; |
| 27 | 27 | ||
| 28 | import javax.validation.constraints.NotNull; | ||
| 28 | import java.sql.Timestamp; | 29 | import java.sql.Timestamp; |
| 30 | import java.util.List; | ||
| 29 | import java.util.Objects; | 31 | import java.util.Objects; |
| 30 | 32 | ||
| 31 | @Service | 33 | @Service |
| ... | @@ -45,9 +47,10 @@ public class MemberOperationServiceImpl implements MemberOperationService { | ... | @@ -45,9 +47,10 @@ public class MemberOperationServiceImpl implements MemberOperationService { |
| 45 | 47 | ||
| 46 | @AsyncMqSend | 48 | @AsyncMqSend |
| 47 | public void asyncUpdateMemberVipAndVipExpireTime(MemberDTO memberDTO) {} | 49 | public void asyncUpdateMemberVipAndVipExpireTime(MemberDTO memberDTO) {} |
| 48 | |||
| 49 | @AsyncMqSend | 50 | @AsyncMqSend |
| 50 | public void asyncCreateMemberVipHistory(MemberVipHistoryDTO memberVipHistoryDTO) {} | 51 | public void asyncCreateMemberVipHistory(MemberVipHistoryDTO memberVipHistoryDTO) {} |
| 52 | @AsyncMqSend | ||
| 53 | public void asyncDoUpdateGroupsBatch(List<Member> resources) {} | ||
| 51 | 54 | ||
| 52 | 55 | ||
| 53 | @AsyncMqSend | 56 | @AsyncMqSend |
| ... | @@ -138,6 +141,18 @@ public class MemberOperationServiceImpl implements MemberOperationService { | ... | @@ -138,6 +141,18 @@ public class MemberOperationServiceImpl implements MemberOperationService { |
| 138 | return memberDTO_; | 141 | return memberDTO_; |
| 139 | } | 142 | } |
| 140 | 143 | ||
| 144 | @Override | ||
| 145 | public Integer doUpdateGroupsBatch(List<Member> resources) { | ||
| 146 | Integer count = this.memberService.doUpdateGroupsBatch(resources); | ||
| 147 | if (count > 0) { | ||
| 148 | ((MemberOperationServiceImpl) AopContext.currentProxy()).asyncDoUpdateGroupsBatch(resources); | ||
| 149 | } | ||
| 150 | |||
| 151 | return count; | ||
| 152 | } | ||
| 153 | |||
| 154 | |||
| 155 | |||
| 141 | 156 | ||
| 142 | @Override | 157 | @Override |
| 143 | public MemberProfileDTO getMemberProfileAndCheckVip(Long memberId, String appId) { | 158 | public MemberProfileDTO getMemberProfileAndCheckVip(Long memberId, String appId) { | ... | ... |
| ... | @@ -7,6 +7,8 @@ import com.topdraw.business.module.member.viphistory.domain.MemberVipHistory; | ... | @@ -7,6 +7,8 @@ import com.topdraw.business.module.member.viphistory.domain.MemberVipHistory; |
| 7 | import com.topdraw.business.process.domian.member.MemberOperationBean; | 7 | import com.topdraw.business.process.domian.member.MemberOperationBean; |
| 8 | import com.topdraw.business.process.domian.weixin.BuyVipBean; | 8 | import com.topdraw.business.process.domian.weixin.BuyVipBean; |
| 9 | 9 | ||
| 10 | import java.util.List; | ||
| 11 | |||
| 10 | public interface MemberOperationService { | 12 | public interface MemberOperationService { |
| 11 | 13 | ||
| 12 | /** | 14 | /** |
| ... | @@ -72,4 +74,8 @@ public interface MemberOperationService { | ... | @@ -72,4 +74,8 @@ public interface MemberOperationService { |
| 72 | * @param resources | 74 | * @param resources |
| 73 | */ | 75 | */ |
| 74 | MemberDTO doUpdateVipByMemberCode(MemberOperationBean resources); | 76 | MemberDTO doUpdateVipByMemberCode(MemberOperationBean resources); |
| 77 | |||
| 78 | |||
| 79 | Integer doUpdateGroupsBatch(List<Member> resources); | ||
| 80 | |||
| 75 | } | 81 | } | ... | ... |
| ... | @@ -64,7 +64,7 @@ | ... | @@ -64,7 +64,7 @@ |
| 64 | 64 | ||
| 65 | 65 | ||
| 66 | <!--监控sql日志输出 --> | 66 | <!--监控sql日志输出 --> |
| 67 | <logger name="jdbc.sqlonly" level="OFF" additivity="false"> | 67 | <logger name="jdbc.sqlonly" level="INFO" additivity="false"> |
| 68 | <appender-ref ref="console" /> | 68 | <appender-ref ref="console" /> |
| 69 | <appender-ref ref="info" /> | 69 | <appender-ref ref="info" /> |
| 70 | </logger> | 70 | </logger> | ... | ... |
-
Please register or sign in to post a comment