From fc9240bd6b246ad71c4050510880a49ce07138a3 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 13 二月 2026 09:51:13 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dingyuannongji
---
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 293 +++++++++++++++++++++++++++++++++++----------------------
1 files changed, 179 insertions(+), 114 deletions(-)
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index f405e38..fce1c9a 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -27,6 +27,7 @@
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.dto.MemberRechargeDTO;
+import com.doumee.dao.system.dto.PlatformConfigDTO;
import com.doumee.dao.web.dto.MemberOwnDTO;
import com.doumee.dao.web.dto.shop.Position;
import com.doumee.dao.system.model.SystemUser;
@@ -42,6 +43,7 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.system.SystemDictDataService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.models.auth.In;
import io.swagger.util.Yaml;
@@ -55,6 +57,7 @@
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -79,6 +82,10 @@
@Autowired
private MemberMapper memberMapper;
@Autowired
+ private CouponMapper couponMapper;
+ @Autowired
+ private MemberCouponJoinMapper memberCouponJoinMapper;
+ @Autowired
private IntegralMapper integralMapper;
@Autowired
private ShopMapper shopMapper;
@@ -93,12 +100,18 @@
@Autowired
private MemberJoinMapper memberJoinMapper;
+ @Autowired
+ private InviteRecordMapper inviteRecordMapper;
+
@Autowired
private SystemUserMapper systemUserMapper;
@Autowired
private SystemDictDataBiz systemDictDataBiz;
+
+ @Autowired
+ private SystemDictDataService systemDictDataService;
@Autowired
private UploadFileService uploadFileService;
@@ -108,6 +121,9 @@
@Autowired
private IntegralService integralService;
+
+ @Autowired
+ private RedisTemplate<String,Object> redisTemplate;
@Override
public Integer create(Member member) {
@@ -287,7 +303,7 @@
@Override
- public AccountResponse wxLogin(String code,Integer recId){
+ public AccountResponse wxLogin(String code){
try {
//鑾峰彇寰俊鏁忔劅鏁版嵁
WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
@@ -298,19 +314,17 @@
Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, openId)
.eq(Member::getIsdeleted,Constants.ZERO)
.last(" limit 1"));
- //鍒涘缓token
- JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
- String token = JwtTokenUtil.generateToken(payLoad);
AccountResponse accountResponse = new AccountResponse();
- accountResponse.setSessionKey(session.getSessionKey());
if(Objects.nonNull(member)){
- if(Objects.isNull(member.getRecId())){
- member.setRecId(recId);
- }
memberMapper.updateById(member);
member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
+ //鍒涘缓token
+// JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
+// String token = JwtTokenUtil.generateToken(payLoad);
+ String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
accountResponse.setToken(token);
+ accountResponse.setOpenid(openId);
accountResponse.setMember(member);
}else{
accountResponse.setOpenid(openId);
@@ -323,97 +337,22 @@
}
- @Override
- public AccountResponse wxLoginTest( Integer memberId){
- //鍒涘缓token
- JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+memberId);
- String token = JwtTokenUtil.generateToken(payLoad);
- AccountResponse accountResponse = new AccountResponse();
- accountResponse.setToken(token);
- return accountResponse;
- }
-
-
- /**
- * 鏍规嵁openid鑾峰彇鏄惁缁戝畾浜嗗晢鎴�
- * @param openid
- * @param memberId
- * @return
- */
- public AccountResponse shopOpenidLogin(String openid, Integer memberId){
- Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOpenId, openid)
- .eq(Shop::getIsdeleted,Constants.ZERO)
- .last("limit 1")
- );
- AccountResponse accountResponse = new AccountResponse();
- accountResponse.setOpenid(openid);
- if(Objects.nonNull(shop)){
- if(Objects.isNull(memberId)
- && ( Objects.isNull(shop.getMemberId())
- || !Constants.equalsInteger(shop.getMemberId(),memberId))){
- shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
- .set(Shop::getMemberId,memberId)
- .eq(Shop::getId,shop.getId())
- );
- }
- JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
- String token = JwtTokenUtil.generateToken(payLoad);
- accountResponse.setToken(token);
- }
- return accountResponse;
- }
-
-
- /**
- * 鍟嗘埛璐﹀彿瀵嗙爜鐧诲綍
- * @param userName
- * @param password
- * @param openid
- * @param memberId
- * @return
- */
- public AccountResponse shopPasswordLogin(String userName,String password,String openid,String memberId){
- if(StringUtils.isBlank(userName)
- || StringUtils.isBlank(password)){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛鍚嶆垨瀵嗙爜涓嶈兘涓虹┖");
- }
- Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getUsername, userName)
- .eq(Shop::getIsdeleted,Constants.ZERO)
- .last("limit 1")
- );
- if(shop==null){
- throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
- }
- //鍔犲瘑瀵嗙爜
- String pwd = Utils.Secure.encryptPassword(password, shop.getSalt());
- if(!pwd.equals(shop.getPassword())){
- throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
- }
- //鍒涘缓token
- JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
- String token = JwtTokenUtil.generateToken(payLoad);
- AccountResponse accountResponse = new AccountResponse();
- accountResponse.setToken(token);
- shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
- .set(Shop::getOpenId,openid)
- .set(Shop::getMemberId,memberId)
- .eq(Shop::getId,shop.getId())
- );
- shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
- .set(Shop::getOpenId,null)
- .eq(Shop::getOpenId,openid)
- .ne(Shop::getId,shop.getId())
- );
- return accountResponse;
- }
+// @Override
+// public AccountResponse wxLoginTest( Integer memberId){
+// //鍒涘缓token
+//// JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+memberId);
+//// String token = JwtTokenUtil.generateToken(payLoad);
+// String token = JwtTokenUtil.generateTokenForRedis(memberId, Constants.ZERO, JSONObject.toJSONString(null), redisTemplate);
+// AccountResponse accountResponse = new AccountResponse();
+// accountResponse.setToken(token);
+// return accountResponse;
+// }
@Override
public AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest){
try {
- WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNoInfo(
- wxPhoneRequest.getSessionKey(), wxPhoneRequest.getEncryptedData(), wxPhoneRequest.getIv());
- //鑾峰彇鎵嬫満鍙�
- String phone= userPhoneInfo.getPurePhoneNumber();
+ WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNumber(wxPhoneRequest.getCode());
+ String phone = userPhoneInfo.getPhoneNumber();
if(Objects.isNull(phone)){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈幏鍙栧埌鎵嬫満鍙�");
}
@@ -428,8 +367,11 @@
member.setIsdeleted(Constants.ZERO);
member.setType(Constants.ZERO);
member.setOrigin(Constants.ZERO);
- member.setRecId(wxPhoneRequest.getRecId());
+ if(!this.checkIsCreateInvite(phone)){
+ member.setRecId(Constants.getInviteCode(wxPhoneRequest.getRecId()));
+ }
member.setOpenId(wxPhoneRequest.getOpenid());
+ member.setIntegral(BigDecimal.ZERO);
}
member.setPhone(phone);
member.setEditDate(new Date());
@@ -437,6 +379,11 @@
systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
if(Objects.isNull(member.getId())){
memberMapper.insert(member);
+
+ PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
+ this.createRegionReward(member,platformConfigDTO);
+ //鍒涘缓閭�璇疯褰�
+ this.createInviteRecord(member,platformConfigDTO);
member.setSharingCode(this.createShareCode(member.getId()));
memberMapper.updateById(member);
}else{
@@ -445,8 +392,9 @@
}
memberMapper.updateById(member);
}
- JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
- String token = JwtTokenUtil.generateToken(payLoad);
+// JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
+// String token = JwtTokenUtil.generateToken(payLoad);
+ String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
AccountResponse accountResponse = new AccountResponse();
accountResponse.setToken(token);
accountResponse.setMember(member);
@@ -456,6 +404,100 @@
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏇存柊鎵嬫満鍙峰け璐�");
}
}
+
+
+ /**
+ * 鍙戞斁娉ㄥ唽濂栧姳淇℃伅
+ * @param member
+ * @param platformConfigDTO
+ */
+ public void createRegionReward(Member member,PlatformConfigDTO platformConfigDTO){
+ //鏌ヨ鐢ㄦ埛鏄惁娉ㄩ攢杩�
+ if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+ .eq(Member::getIsdeleted,Constants.ONE)
+ .eq(Member::getPhone,member.getPhone())
+ )>Constants.ZERO){
+ return;
+ }
+ //寮�鍚敞鍐岄�佺Н鍒�
+ if(Constants.equalsInteger(platformConfigDTO.getRegIntegralRewardStatus(),Constants.ZERO)){
+ DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+ dealIntegralRequest.setIntegralNum(platformConfigDTO.getRegIntegralReward());
+ dealIntegralRequest.setDealType(Constants.ZERO);
+ dealIntegralRequest.setMemberId(member.getId());
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.REGISTER);
+ integralService.dealIntegral(dealIntegralRequest);
+ }
+ //寮�鍚敞鍐岄�佷紭鎯犲埜
+ if(Constants.equalsInteger(platformConfigDTO.getRegCouponRewardStatus(),Constants.ZERO)){
+ List<JSONObject> regCouponRewardList = platformConfigDTO.getRegCouponRewardList();
+ //[{"num":"2","couponId":6},{"num":"3","couponId":5}]
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(regCouponRewardList)){
+ List<MemberCoupon> memberCouponList = new ArrayList<>();
+ for (JSONObject jsonObject:regCouponRewardList) {
+ Integer couponId = jsonObject.getInteger("couponId");
+ Integer num = jsonObject.getInteger("num");
+ Coupon coupon = couponMapper.selectById(couponId);
+ if(Objects.isNull(coupon)||Constants.equalsInteger(coupon.getIsdeleted(),Constants.ONE)&&num>Constants.ZERO){
+ continue;
+ }
+ MemberCoupon memberCoupon = MemberCoupon.couponToBean(coupon,member,new Date(),Constants.ZERO,null);
+ for (int i = 0; i < num; i++) {
+ memberCouponList.add(memberCoupon);
+ }
+ }
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberCouponList)){
+ memberCouponJoinMapper.insert(memberCouponList);
+ }
+ }
+ }
+ }
+
+
+ /**
+ * 鍒涘缓閭�璇疯褰�
+ * @param member
+ */
+ public void createInviteRecord(Member member,PlatformConfigDTO platformConfigDTO){
+ if(Objects.isNull(member.getRecId())){
+ return;
+ }
+ InviteRecord inviteRecord = new InviteRecord();
+ inviteRecord.setCreateDate(new Date());
+ inviteRecord.setIsdeleted(Constants.ZERO);
+ inviteRecord.setInviteId(member.getRecId());
+ inviteRecord.setMemberId(member.getId());
+ inviteRecord.setPhone(member.getPhone());
+ inviteRecord.setRewardIntegral(Objects.nonNull(platformConfigDTO)&&Constants.equalsInteger(platformConfigDTO.getShareIntegralRewardStatus(),Constants.ZERO)?
+ platformConfigDTO.getShareIntegralReward():BigDecimal.ZERO);
+ inviteRecord.setFirstOrderStatus(Constants.ZERO);
+ inviteRecordMapper.insert(inviteRecord);
+ //璧犻�侀個璇风Н鍒�
+ //寮�鍚個璇锋敞鍐岄�佺Н鍒�
+ if(Constants.equalsInteger(platformConfigDTO.getShareIntegralRewardStatus(),Constants.ZERO)){
+ DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+ dealIntegralRequest.setIntegralNum(platformConfigDTO.getShareIntegralReward());
+ dealIntegralRequest.setDealType(Constants.ZERO);
+ dealIntegralRequest.setMemberId(member.getRecId());
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.INVITENEWUSER);
+ dealIntegralRequest.setParam1(member.getNickname());
+ integralService.dealIntegral(dealIntegralRequest);
+ }
+ }
+
+
+ /**
+ * 鏌ヨ鏄惁鍒涘缓杩囬個璇�
+ * @param mobile
+ * @return
+ */
+ public Boolean checkIsCreateInvite(String mobile){
+ return inviteRecordMapper.selectCount(new QueryWrapper<InviteRecord>()
+ .lambda()
+ .eq(InviteRecord::getPhone,mobile)
+ )>Constants.ZERO?true:false;
+ }
+
@@ -492,23 +534,20 @@
@Override
- public Member updateMember(UpdateMemberRequest updateMemberRequest){
+ public void updateMember(UpdateMemberRequest updateMemberRequest){
if(StringUtils.isBlank(updateMemberRequest.getImgurl())
&& StringUtils.isBlank(updateMemberRequest.getNickname())
&& StringUtils.isBlank(updateMemberRequest.getName())
){
throw new BusinessException(ResponseStatus.BAD_REQUEST);
}
- Member member = new Member();
- BeanUtils.copyProperties(updateMemberRequest,member);
- member.setId(updateMemberRequest.getMemberId());
- member.setEditor(updateMemberRequest.getMemberId());
- member.setEditDate(new Date());
- memberMapper.updateById(member);
- Member dbMember = memberMapper.selectById(updateMemberRequest.getMemberId());
- dbMember.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
- systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+dbMember.getImgurl());
- return dbMember;
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(StringUtils.isNotBlank(updateMemberRequest.getImgurl()),Member::getImgurl,updateMemberRequest.getImgurl())
+ .set(StringUtils.isNotBlank(updateMemberRequest.getNickname()),Member::getNickname,updateMemberRequest.getNickname())
+ .set(StringUtils.isNotBlank(updateMemberRequest.getName()),Member::getName,updateMemberRequest.getName())
+ .set(Member::getEditDate,DateUtil.getCurrDateTime())
+ .eq(Member::getId,updateMemberRequest.getMemberId())
+ );
}
@@ -592,15 +631,15 @@
if(StringUtils.isNotBlank(member.getPhone())&&!member.getPhone().equals(request.getPhone())){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵嬫満鍙烽敊璇�");
}
- this.verifyPhoneCode(request.getCode(),request.getMemberId());
+ this.verifyPhoneCode(request.getCode(),request.getPhone());
}
- public void verifyPhoneCode(String code,Integer memberId){
+ public void verifyPhoneCode(String code,String phone){
//楠岃瘉鐮�
Smsrecord smsrecord = smsrecordMapper.selectOne(new QueryWrapper<Smsrecord>().lambda()
.eq(Smsrecord::getIsdeleted,Constants.ZERO)
.eq(Smsrecord::getCode,code)
- .eq(Smsrecord::getMemberId,memberId)
+ .eq(Smsrecord::getPhone,phone)
.last(" limit 1")
);
if(Objects.isNull(smsrecord)){
@@ -628,11 +667,15 @@
){
throw new BusinessException(ResponseStatus.BAD_REQUEST);
}
+ //鍒ゆ柇鏂版墜鏈哄彿鏄惁宸茶浣跨敤
+ if(memberMapper.selectCount(new QueryWrapper<Member>().lambda().eq(Member::getPhone,request.getPhone()))>Constants.ZERO){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧�,鏂版墜鏈哄彿宸茶缁戝畾,鏃犳硶杩涜鎹㈢粦锛�");
+ }
Member member = memberMapper.selectById(request.getMemberId());
if(StringUtils.isNotBlank(member.getPhone())&&member.getPhone().equals(request.getPhone())){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犳硶鏇存崲鐩稿悓鎵嬫満鍙�");
}
- this.verifyPhoneCode(request.getCode(),request.getMemberId());
+ this.verifyPhoneCode(request.getCode(),request.getPhone());
memberMapper.update(new UpdateWrapper<Member>().lambda()
.eq(Member::getPhone,request.getPhone())
.eq(Member::getId,request.getMemberId())
@@ -732,9 +775,31 @@
}
+ @Override
+ public void logOut(String token,Integer memberId){
+ Member member = memberMapper.selectById(memberId);
+ if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getOpenId())){
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getOpenId,null)
+ .eq(Member::getId,member.getId())
+ );
+ }
+ redisTemplate.delete(token);
+ }
-
+ @Override
+ public void logOff(String token,Integer memberId){
+ Member member = memberMapper.selectById(memberId);
+ if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getOpenId())){
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getOpenId,null)
+ .set(Member::getPhone,null)
+ .eq(Member::getId,member.getId())
+ );
+ }
+ redisTemplate.delete(token);
+ }
--
Gitblit v1.9.3