From ae41759bafec1c2a1e8858fcdcda4272ed4eb84c Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期五, 16 六月 2023 17:43:47 +0800 Subject: [PATCH] 联调bug和订单管理 --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 756 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 655 insertions(+), 101 deletions(-) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java index d689ce0..8645b64 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java @@ -2,49 +2,53 @@ import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; -import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.common.security.utils.SecurityUtils; -import com.ruoyi.member.domain.dto.AppUserAuthorizeDto; -import com.ruoyi.member.domain.dto.MerCashMemberPageDto; -import com.ruoyi.member.domain.dto.MerMemberPageDto; +import com.ruoyi.member.domain.dto.*; +import com.ruoyi.member.domain.pojo.member.IntegralRecord; +import com.ruoyi.member.domain.pojo.member.MemberNurse; +import com.ruoyi.member.domain.pojo.member.MemberTotal; import com.ruoyi.member.domain.vo.*; import com.ruoyi.member.mapper.member.MemberMapper; -import com.ruoyi.member.service.member.MemberService; +import com.ruoyi.member.service.member.*; import com.ruoyi.member.util.HttpUtils; -import com.ruoyi.system.api.RemoteOrderService; -import com.ruoyi.system.api.RemoteShopService; -import com.ruoyi.system.api.RemoteUserService; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.SecurityConstant; -import com.ruoyi.system.api.domain.dto.AppEditUserDto; -import com.ruoyi.system.api.domain.dto.AppMemberBindingDto; +import com.ruoyi.system.api.domain.dto.*; +import com.ruoyi.system.api.domain.poji.config.Activeness; +import com.ruoyi.system.api.domain.poji.config.SysTag; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.poji.sys.SysUser; -import com.ruoyi.system.api.domain.vo.AppOrderTotalVo; -import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; +import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.model.AppMiniLoginDto; import com.ruoyi.system.api.model.AppMiniLoginVo; -import lombok.extern.log4j.Log4j; +import com.ruoyi.system.api.service.RemoteConfigService; +import com.ruoyi.system.api.service.RemoteOrderService; +import com.ruoyi.system.api.service.RemoteShopService; +import com.ruoyi.system.api.service.RemoteUserService; import lombok.extern.log4j.Log4j2; -import lombok.val; -import com.ruoyi.common.core.utils.StringUtils; +import org.apache.commons.lang3.ArrayUtils; import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; import org.apache.http.util.EntityUtils; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * <p> @@ -75,13 +79,29 @@ private MemberMapper memberMapper; @Resource - private StringRedisTemplate stringRedisTemplate; - - @Resource private RemoteShopService shopService; @Resource private RemoteOrderService orderService; + + @Resource + private MemberNurseService memberNurseService; + + @Resource + private RemoteConfigService remoteConfigService; + + @Resource + private RedisService redisService; + + @Resource + private MemberTotalService memberTotalService; + + @Resource + private IntegralRecordService integralRecordService; + + @Resource + private MemberArchiveService memberArchiveService; + /** * @description: TODO @@ -121,76 +141,37 @@ sessionKey = session.getSessionKey(); //获取用户 Member member = memberMapper.getOneByMiniOpenid(openid); - SysUser sysUser; - if(member==null){ - //创建新用户 - String memberId = IdUtils.simpleUUID(); - sysUser = new SysUser(); - sysUser.setUserName(memberId); - sysUser.setUserType("03"); - sysUser.setNickName("微信用户"); - String password = "hongruitang"; - sysUser.setPassword(SecurityUtils.encryptPassword(password)); - sysUser = sysUserService.registerUser(sysUser).getData(); - log.info("sysUser1"+sysUser.toString()); - member = new Member(); - member.setUserId(sysUser.getUserId()); - member.setDelFlag(0); - member.setMemberId(memberId); - member.setWxUnionid(unionid); - member.setMiniOpenid(openid); - member.setBindingFlag(0); - member.setCreateTime(new Date()); - this.save(member); - - }else{ - log.info("member2"+member.toString()); - R<SysUser> sysUser1 = sysUserService.getSysUser(member.getUserId()); - log.info("sysUser1"+ sysUser1.getCode() + " : " + sysUser1.getMsg()); - sysUser = sysUser1.getData(); - log.info("sysUser"+sysUser.toString()); + SysUser sysUser = null; + if(member!=null){ + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); } appMiniLoginVo.setMiniOpenid(openid); appMiniLoginVo.setWxUnionid(unionid); appMiniLoginVo.setSysUser(sysUser); appMiniLoginVo.setSessionKey(sessionKey); - stringRedisTemplate.opsForValue().set(SecurityConstant.SESSION_KEY+openid,sessionKey); - }else{ - log.info("null"); - return null; + redisService.setCacheObject(SecurityConstant.SESSION_KEY+openid,sessionKey,1L,TimeUnit.DAYS); } log.info("appMiniLoginVo"+appMiniLoginVo.toString()); return appMiniLoginVo; } /** - * 获取授权信息 - * @param appUserAuthorizeDto + * 小程序注册 + * @param appUserRegisterDto * @return */ @Override - public AppUserAuthorizeVo getAppUserAuthorize(AppUserAuthorizeDto appUserAuthorizeDto){ - Member member = this.getById(appUserAuthorizeDto.getUserId()); - AppUserAuthorizeVo appUserAuthorizeVo = new AppUserAuthorizeVo(); + public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto){ + AppMiniRegisterVo appUserRegisterVo = new AppMiniRegisterVo(); + String mobile = null; //获取code接口在redis里存放的sessionkey用于解密 - String sessionkey = stringRedisTemplate.opsForValue().get(SecurityConstant.SESSION_KEY+ member.getMiniOpenid()); + String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY+ appUserRegisterDto.getMiniOpenid()); if(StringUtils.isBlank(sessionkey)){ throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN); } - String mobile = null; try { - //解密微信加密用户信息和手机号 - /*WxMaPhoneNumberInfo wxPhoneInfo; - if(StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneEncryptedData())&&StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneIv())){ - wxPhoneInfo = wxMaService.getUserService().getPhoneNoInfo(sessionkey, appUserAuthorizeDto.getPhoneEncryptedData(), appUserAuthorizeDto.getPhoneIv()); - }else{ - throw new ServiceException(AppErrorConstant.AUTHORIZE_MISS); - } - if(StringUtils.isBlank(wxPhoneInfo.getPhoneNumber())){ - throw new ServiceException(AppErrorConstant.AUTHORIZE_FAILED); - } - mobile = wxPhoneInfo.getPhoneNumber();*/ - String accessToken = stringRedisTemplate.opsForValue().get("wx_access_token"); + //获取微信token用于解密手机 + String accessToken = redisService.getCacheObject(SecurityConstant.WX_TOKEN); if (StringUtils.isBlank(accessToken)) { String responseAccessToken = getAccessTokenByWX(); JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken); @@ -201,14 +182,15 @@ throw new ServiceException(errmsg); } else { expiresIn = expiresIn - 100; - stringRedisTemplate.opsForValue().set("wx_access_token", accessToken, expiresIn.intValue(), TimeUnit.SECONDS); + redisService.setCacheObject(SecurityConstant.WX_TOKEN, accessToken, Long.valueOf(expiresIn), TimeUnit.SECONDS); } } - String responseUserPhoneNumber = getMobileByWX(accessToken, appUserAuthorizeDto.getMobileCode()); + //解密手机 + String responseUserPhoneNumber = getMobileByWX(accessToken, appUserRegisterDto.getMobileCode()); JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber); String errcode = jsonUserPhoneNumber.getString("errcode"); String errmsg = jsonUserPhoneNumber.getString("errmsg"); - if (!errcode.equals("0")) { + if (!"0".equals(errcode)) { throw new ServiceException(errmsg); } String phoneInfo = jsonUserPhoneNumber.getString("phone_info"); @@ -217,19 +199,55 @@ } catch (Exception e) { e.printStackTrace(); } - //更新用户手机信息 - SysUser sysUser = new SysUser(); - sysUser.setUserId(appUserAuthorizeDto.getUserId()); - sysUser.setPhonenumber(mobile); - sysUserService.updateUserMobile(sysUser); - member.setMobile(mobile); - member.setRealName(sysUser.getNickName()); + if(StringUtils.isBlank(mobile)){ + return null; + } + //判断openid是否被其他手机号占用 + Member checkMember = memberMapper.getOneByMiniOpenid(appUserRegisterDto.getMiniOpenid()); + if(checkMember!=null&&!checkMember.getMobile().equals(mobile)){ + throw new ServiceException("微信号换绑手机需联系客服"); + } + Member member = memberMapper.selectMemberByMobile(mobile); + SysUser sysUser; + //获取用户为空则新建 + if(member == null){ + //创建新用户 + String memberId = IdUtils.simpleUUID(); + sysUser = new SysUser(); + sysUser.setUserName(memberId); + sysUser.setUserType("03"); + sysUser.setNickName("鸿瑞堂用户"); + sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + String password = "hongruitang"; + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + sysUser = sysUserService.registerUser(sysUser).getData(); + member = new Member(); + String memberNo = createMemberNo(); + member.setMemberNo(memberNo); + member.setUserId(sysUser.getUserId()); + member.setDelFlag(0); + member.setNickName("鸿瑞堂用户"); + member.setRealName("鸿瑞堂用户"); + member.setCustomerSource("小程序"); + member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + member.setMemberId(memberId); + member.setBindingFlag(0); + member.setCreateTime(new Date()); + member.setMobile(mobile); + initMemberTotal(memberId); + }else{ + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); + } + member.setWxUnionid(appUserRegisterDto.getWxUnionid()); + member.setMiniOpenid(appUserRegisterDto.getMiniOpenid()); + log.info("member-----------------"+member.toString()); this.saveOrUpdate(member); - appUserAuthorizeVo.setMobile(mobile); - appUserAuthorizeVo.setNickName(sysUser.getNickName()); - appUserAuthorizeVo.setOpenid(member.getMiniOpenid()); - appUserAuthorizeVo.setUnionid(member.getWxUnionid()); - return appUserAuthorizeVo; + appUserRegisterVo.setMobile(mobile); + appUserRegisterVo.setNickName(member.getNickName()); + appUserRegisterVo.setOpenid(member.getMiniOpenid()); + appUserRegisterVo.setUnionid(member.getWxUnionid()); + appUserRegisterVo.setSysUser(sysUser); + return appUserRegisterVo; } public static String getAccessTokenByWX() throws Exception { @@ -262,20 +280,21 @@ @Override public AppUserInfoVo getAppUserInfo(Long userId){ AppUserInfoVo appUserInfoVo = new AppUserInfoVo(); - SysUser sysUser = sysUserService.getSysUser(userId).getData(); Member member = this.getByUserId(userId); appUserInfoVo.setUserId(userId); - appUserInfoVo.setRelationShopId(member.getRelationShopId()); appUserInfoVo.setMemberNo(member.getMemberNo()); - appUserInfoVo.setNickName(sysUser.getNickName()); - appUserInfoVo.setPhonenumber(sysUser.getPhonenumber()); - if(member.getRelationShopId()!=null){ + appUserInfoVo.setNickName(member.getNickName()); + appUserInfoVo.setRealName(member.getRealName()); + appUserInfoVo.setPhonenumber(member.getMobile()); + if(member.getRelationShopId()!=null&&member.getBindingFlag()==1){ + appUserInfoVo.setRelationShopId(member.getRelationShopId()); Shop shop = shopService.getShop(member.getRelationShopId()).getData(); appUserInfoVo.setShopName(shop.getShopName()); + appUserInfoVo.setShopAddress(shop.getShopAreaName()+shop.getShopAddress()); } appUserInfoVo.setBirthday(member.getBirthday()); appUserInfoVo.setGender(member.getGender()); - appUserInfoVo.setAvatar(sysUser.getAvatar()); + appUserInfoVo.setAvatar(member.getAvatar()); AppOrderTotalVo appOrderTotalVo = orderService.getAppOrderTotal(userId).getData(); appUserInfoVo.setNoPayCount(appOrderTotalVo.getNoPayCount()); appUserInfoVo.setNoUseCount(appOrderTotalVo.getNoUseCount()); @@ -294,7 +313,7 @@ Member member = this.getByUserId(appEditUserDto.getUserId()); switch (editType){ case 1: - member.setRealName(editValue); + member.setNickName(editValue); member.setUpdateTime(new Date()); member.setUpdateUserId(appEditUserDto.getUserId()); this.saveOrUpdate(member); @@ -332,7 +351,7 @@ /** - * @description: TODO + * @description: 商户获取会员信息 * @author jqs34 * @date 2023/5/4 22:50 * @version 1.0 @@ -340,12 +359,13 @@ @Override public MerMemberInfoVo getMerMemberInfo(Long userId){ MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo(); - SysUser sysUser = sysUserService.getSysUser(userId).getData(); Member member = this.getByUserId(userId); merMemberInfoVo.setUserId(userId); - merMemberInfoVo.setNickName(sysUser.getNickName()); - merMemberInfoVo.setPhonenumber(sysUser.getPhonenumber()); - merMemberInfoVo.setAvatar(sysUser.getAvatar()); + merMemberInfoVo.setNickName(member.getNickName()); + merMemberInfoVo.setPhonenumber(member.getMobile()); + merMemberInfoVo.setAvatar(member.getAvatar()); + merMemberInfoVo.setBirthday(member.getBirthday()); + merMemberInfoVo.setUserTags(member.getUserTags()); //未完成 return merMemberInfoVo; @@ -365,7 +385,7 @@ } /** - * + * 更新会员绑定商户 * @param appMemberBindingDto */ @Override @@ -373,6 +393,540 @@ Member member = this.getByUserId(appMemberBindingDto.getUserId()); member.setBindingFlag(appMemberBindingDto.getBindingFlag()); member.setRelationShopId(appMemberBindingDto.getShopId()); + member.setRelationShopName(appMemberBindingDto.getShopName()); this.saveOrUpdate(member); } + + /** + * 获取会员基础档案 + * @param userId + * @return + */ + @Override + public MerMemberBasicFileVo getMerMemberBasicFile(Long userId){ + MerMemberBasicFileVo merMemberBasicFileVo = new MerMemberBasicFileVo(); + Member member = this.getByUserId(userId); + BeanUtils.copyProperties(member, merMemberBasicFileVo); + merMemberBasicFileVo.setNickName(member.getNickName()); + merMemberBasicFileVo.setPhonenumber(member.getMobile()); + merMemberBasicFileVo.setCreateTime(member.getCreateTime()); + List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId); + List<String> valueList = memberNurseList.stream().map(k->k.getNurse()).collect(Collectors.toList()); + merMemberBasicFileVo.setMemberNurse(valueList); + return merMemberBasicFileVo; + } + + /** + * 获取会员标签 + * @param userId + * @return + */ + @Override + public List<MerMemberTagVo> getMerMemberTags(Long userId){ + Member member = this.getByUserId(userId); + String userTags = member.getUserTags(); + String[] userTagsArr = null; + if(StringUtils.isNotBlank(userTags)){ + userTagsArr = userTags.split(","); + } + List<SysTag> sysTagsList = remoteConfigService.listSysTag(1).getData(); + List<MerMemberTagVo> merMemberTagVoList = new ArrayList<>(); + MerMemberTagVo merMemberTagVo; + String tagName; + if(sysTagsList!=null&&!sysTagsList.isEmpty()){ + for(SysTag sysTag : sysTagsList){ + merMemberTagVo = new MerMemberTagVo(); + tagName = sysTag.getTagName(); + merMemberTagVo.setTagName(tagName); + if(userTagsArr!=null && ArrayUtils.contains(userTagsArr, tagName)){ + merMemberTagVo.setSelectFlag(1); + }else{ + merMemberTagVo.setSelectFlag(0); + } + merMemberTagVoList.add(merMemberTagVo); + } + } + return merMemberTagVoList; + } + + /** + * 编辑会员标签 + * @param merMemberTagEditDto + */ + @Override + public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto){ + Member member = this.getByUserId(merMemberTagEditDto.getMemberUserId()); + List<String> userTags = merMemberTagEditDto.getUserTags(); + StringJoiner sj = new StringJoiner(","); + if(userTags!=null&&!userTags.isEmpty()){ + for(String str : userTags){ + sj.add(str); + } + } + member.setUserTags(sj.toString()); + this.saveOrUpdate(member); + } + + + /** + * 添加会员 + * @param merMemberAddDto + */ + @Override + public void addMerMember(MerMemberAddDto merMemberAddDto){ + String phonenumber = merMemberAddDto.getPhonenumber(); + Member oldMember = this.getByMobile(phonenumber); + if(oldMember!=null){ + throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE); + } + SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData(); + if(sysUser==null){ + String memberId = IdUtils.simpleUUID(); + sysUser = new SysUser(); + sysUser.setUserName(memberId); + sysUser.setUserType("03"); + sysUser.setNickName(merMemberAddDto.getNickName()); + sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + String password = "hongruitang"; + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + log.debug("sysUser"+sysUser.toString()); + sysUser = sysUserService.registerUser(sysUser).getData(); + Member member = new Member(); + String memberNo = createMemberNo(); + member.setMemberNo(memberNo); + member.setMemberId(memberId); + member.setUserId(sysUser.getUserId()); + member.setDelFlag(0); + member.setNickName(merMemberAddDto.getNickName()); + member.setRealName(merMemberAddDto.getNickName()); + member.setGender(merMemberAddDto.getGender()); + member.setMobile(phonenumber); + member.setReferrer(merMemberAddDto.getReferrer()); + member.setBirthday(merMemberAddDto.getBirthday()); + member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + member.setRelationShopId(merMemberAddDto.getShopId()); + member.setWxUnionid(null); + member.setMiniOpenid(null); + member.setBindingFlag(1); + member.setRelationShopId(merMemberAddDto.getShopId()); + member.setCustomerSource("商户添加"); + member.setCreateTime(new Date()); + log.info("member-----------------"+member.toString()); + this.saveOrUpdate(member); + initMemberTotal(memberId); + } + + + } + + /** + * 编辑会员 + * @param merMemberEditDto + */ + @Override + public void editMerMember(MerMemberEditDto merMemberEditDto){ + + Member member = this.getByUserId(merMemberEditDto.getEditUserId()); + if(!member.getMobile().equals(merMemberEditDto.getPhonenumber())){ + Member memberOld = getByMobile(merMemberEditDto.getPhonenumber()); + if(memberOld!=null){ + throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE); + } + } + member.setRealName(merMemberEditDto.getNickName()); + member.setMobile(merMemberEditDto.getPhonenumber()); + member.setGender(merMemberEditDto.getGender()); + member.setReferrer(merMemberEditDto.getReferrer()); + member.setCustomerSource(merMemberEditDto.getCustomerSource()); + member.setLevel(merMemberEditDto.getLevel()); + member.setBirthday(merMemberEditDto.getBirthday()); + member.setUpdateUserId(merMemberEditDto.getUserId()); + member.setUpdateTime(new Date()); + log.info("member-----------------"+member.toString()); + this.saveOrUpdate(member); + SysUser sysUser = new SysUser(); + sysUser.setUserId(merMemberEditDto.getEditUserId()); + sysUser.setPhonenumber(merMemberEditDto.getPhonenumber()); + sysUserService.updateUserMobile(sysUser); + } + + /** + * + * @param mobile + * @return + */ + @Override + public Member getByMobile(String mobile){ + LambdaQueryWrapper<Member> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Member::getDelFlag, 0).eq(Member::getMobile, mobile); + Member member = this.getOne(queryWrapper); + return member; + } + + /** + * 更新用户商品类型 + * @param appMemberGoodsTypeDto + */ + @Override + public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto){ + Member member = this.getByUserId(appMemberGoodsTypeDto.getUserId()); + HashSet<String> goodsTypeSet = appMemberGoodsTypeDto.getGoodsTypeSet(); + if(member!=null){ + String goodsType = member.getGoodsType(); + Boolean change = false; + for(String str : goodsTypeSet){ + if(goodsType != null){ + if(!goodsType.contains(str)){ + goodsType = goodsType + "," + str; + change = true; + } + }else{ + goodsType = str; + change = true; + } + } + if(change){ + member.setGoodsType(goodsType); + this.saveOrUpdate(member); + } + } + } + + + /** + * 订单创建新用户 + * @param member + */ + @Override + public void createNewMember(Member member){ + String memberNo = createMemberNo(); + member.setMemberNo(memberNo); + member.setDelFlag(0); + member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + member.setBindingFlag(0); + member.setCreateTime(new Date()); + member.setCustomerSource("商户订单添加"); + this.saveOrUpdate(member); + initMemberTotal(member.getMemberId()); + } + + /** + * 生成会员统计 + * @param memberId + * @return + */ + private void initMemberTotal(String memberId){ + MemberTotal memberTotal = new MemberTotal(); + memberTotal.setMemberId(memberId); + memberTotal.setDelFlag(0); + memberTotal.setTotalIntegral(0); + memberTotal.setUsedIntegral(0); + memberTotal.setUseableIntegral(0); + memberTotal.setTotalPayMoney(new BigDecimal("0.00")); + memberTotal.setTotalPayCount(0); + memberTotal.setLastPayMoney(new BigDecimal("0.00")); + memberTotal.setTotalServiceCount(0); + memberTotal.setUsedServiceCount(0); + memberTotal.setUseableServiceCount(0); + memberTotal.setTotalActivityCount(0); + memberTotal.setTotalCycleOrder(0); + memberTotal.setToltaExperienceOrder(0); + memberTotal.setTotalServiceOrder(0); + memberTotal.setTotalGoodsOrder(0); + memberTotalService.saveOrUpdate(memberTotal); + } + + /** + * 生成会员编号 + * @return + */ + private String createMemberNo(){ + int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>()); + String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1)); + return memberNo; + } + + + /** + * 平台分页获取会员列表 + * @param page + * @param merMemberPageDto + * @return + */ + @Override + public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){ + List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); + Date nowDay = new Date(); + if(merMemberPageDto.getActivenessId()!=null){ + //处理活跃度筛选 + activenessList.stream() + .filter(activeness -> activeness.getActivenessId().equals(merMemberPageDto.getActivenessId())) + .findFirst() + .ifPresent(activeness -> { + merMemberPageDto.setActStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getEndDay()))); + merMemberPageDto.setActEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getStartDay()))); + }); + } + //处理标签为正则表达 + if(StringUtils.isNotBlank(merMemberPageDto.getMemberTags())){ + merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",","|")); + } + //查询获取结果列表 + List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto); + //处理活跃度返回 + if(memberPageVoList!=null&&!memberPageVoList.isEmpty()){ + if(activenessList!=null&&!activenessList.isEmpty()){ + //生成活跃度时间段列表 + List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>(); + MgtActivenessJudgeVo mgtActivenessJudgeVo; + for(Activeness activeness : activenessList){ + mgtActivenessJudgeVo = new MgtActivenessJudgeVo(); + mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(),activeness.getEndDay())); + mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(),activeness.getStartDay()-1)); + mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName()); + } + //活跃度赋值 + Date lastPayTime; + for(MgtMemberPageVo mgtMemberPageVo : memberPageVoList){ + lastPayTime = mgtMemberPageVo.getLastPayTime(); + StringJoiner sj = new StringJoiner(","); + if(lastPayTime!=null){ + for(MgtActivenessJudgeVo entity: mgtActivenessJudgeVoList){ + if(lastPayTime.compareTo(entity.getStartDay())>=0&&lastPayTime.compareTo(entity.getEndDay())<=0){ + sj.add(entity.getActivenessName()); + } + } + if(sj.length()>0){ + mgtMemberPageVo.setActiveness(sj.toString()); + } + } + } + } + } + return memberPageVoList; + } + + + /** + * 修改会员关联商户 + * @param mgtMemberRelEditDto + */ + @Override + public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto){ + if(StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())){ + Shop shop = shopService.getShop(mgtMemberRelEditDto.getShopId()).getData(); + String memberUserIds = mgtMemberRelEditDto.getMemberUserIds(); + String[] memberUserIdArr = memberUserIds.split(","); + for(String str : memberUserIdArr){ + Member member = this.getByUserId(Long.valueOf(str)); + member.setRelationShopId(shop.getShopId()); + member.setRelationShopName(shop.getShopName()); + member.setBindingFlag(1); + member.setUpdateTime(new Date()); + member.setUpdateUserId(mgtMemberRelEditDto.getUserId()); + this.saveOrUpdate(member); + } + } + } + + + /** + * 删除会员关联商户 + * @param mgtMemberRelDelDto + */ + @Override + public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto){ + if(StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) { + String memberUserIds = mgtMemberRelDelDto.getMemberUserIds(); + String[] memberUserIdArr = memberUserIds.split(","); + for(String str : memberUserIdArr) { + Member member = this.getById(Long.valueOf(str)); + member.setBindingFlag(0); + member.setUpdateTime(new Date()); + member.setUpdateUserId(mgtMemberRelDelDto.getUserId()); + this.saveOrUpdate(member); + } + } + } + + /** + * 修改会员积分 + * @param mgtMemberIntEditDto + */ + @Override + public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto){ + if(StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) { + String memberUserIds = mgtMemberIntEditDto.getMemberUserIds(); + String[] memberUserIdArr = memberUserIds.split(","); + MemberIntegralChangeDto memberIntegralChangeDto; + for(String str : memberUserIdArr) { + memberIntegralChangeDto = new MemberIntegralChangeDto(); + Member member = this.getByUserId(Long.valueOf(str)); + memberIntegralChangeDto.setUserId(Long.valueOf(str)); + memberIntegralChangeDto.setMemberId(member.getMemberId()); + memberIntegralChangeDto.setChangeType(1); + memberIntegralChangeDto.setRecordType(3); + memberIntegralChangeDto.setIntegral(mgtMemberIntEditDto.getIntegral()); + //调用积分变动 + memberIntegralChange(memberIntegralChangeDto); + } + } + } + + + + /** + * 会员积分变动 + * @param memberIntegralChangeDto + */ + @Override + public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto){ + MemberTotal memberTotal = memberTotalService.getById(memberIntegralChangeDto.getMemberId()); + Integer recordType = memberIntegralChangeDto.getRecordType(); + Integer changeType = memberIntegralChangeDto.getChangeType(); + Integer integer = memberIntegralChangeDto.getIntegral(); + Integer totalIntegral = memberTotal.getTotalIntegral(); + Integer usedIntegral = memberTotal.getUsedIntegral(); + Integer useableIntegral = memberTotal.getUseableIntegral(); + //变动统计 + if(changeType==1){ + totalIntegral = totalIntegral + integer; + useableIntegral = useableIntegral + integer; + memberTotal.setTotalIntegral(totalIntegral); + memberTotal.setUseableIntegral(useableIntegral); + }else if(changeType==2){ + usedIntegral = usedIntegral + integer; + useableIntegral = useableIntegral - integer; + if(useableIntegral<0){ + throw new ServiceException(AppErrorConstant.INTEGRAL_USE_FAILED); + } + memberTotal.setTotalIntegral(totalIntegral); + memberTotal.setUseableIntegral(useableIntegral); + memberTotal.setUsedIntegral(usedIntegral); + } + memberTotalService.saveOrUpdate(memberTotal); + //记录变动 + IntegralRecord integralRecord = new IntegralRecord(); + integralRecord.setDelFlag(0); + integralRecord.setUserId(memberIntegralChangeDto.getUserId()); + integralRecord.setChangeType(recordType); + if(changeType==1){ + integralRecord.setChangeIntegral(integer); + }else if(changeType==2){ + integralRecord.setChangeIntegral( 0-integer); + } + integralRecord.setSurpIntegral(useableIntegral); + integralRecord.setCreateTime(new Date()); + integralRecord.setOrderId(memberIntegralChangeDto.getOrderId()); + integralRecord.setOrderNo(memberIntegralChangeDto.getOrderNo()); + switch (recordType){ + case 1: + integralRecord.setChangeReason("购物赠送"); + break; + case 2: + integralRecord.setChangeReason("活动赠送"); + break; + case 3: + integralRecord.setChangeReason("平台赠送"); + break; + default: + break; + } + integralRecordService.saveOrUpdate(integralRecord); + } + + /** + * 平台获取会员信息 + * @param userId + * @return + */ + @Override + public MgtMemberGetVo getMgtMemberInfo(Long userId){ + MgtMemberGetVo mgtMemberGetVo = new MgtMemberGetVo(); + Member member = this.getByUserId(userId); + MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); + List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listVoByUserId(member.getUserId()); + if(memberArchiveVoList!=null&&!memberArchiveVoList.isEmpty()){ + //去掉未完善信息 + memberArchiveVoList.removeIf(o -> Objects.isNull(o.getFieldValue())); + } + mgtMemberGetVo.setMemberId(member.getMemberId()); + mgtMemberGetVo.setUserId(member.getUserId()); + mgtMemberGetVo.setMemberNo(member.getMemberNo()); + mgtMemberGetVo.setRealName(member.getRealName()); + mgtMemberGetVo.setNickName(member.getNickName()); + mgtMemberGetVo.setMobile(member.getMobile()); + mgtMemberGetVo.setGender(member.getGender()==0 ? "男" : member.getGender()==1 ? "女" : null); + mgtMemberGetVo.setBirthday(member.getBirthday()); + mgtMemberGetVo.setBelongDistrict(member.getBelongDistrict()); + mgtMemberGetVo.setCreateTime(member.getCreateTime()); + mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime()); + mgtMemberGetVo.setGoodsType(member.getGoodsType()); + mgtMemberGetVo.setRelationShopName(member.getRelationShopName()); + mgtMemberGetVo.setIntegral(memberTotal.getTotalIntegral()); + mgtMemberGetVo.setMemberFrom(member.getCustomerSource()); + mgtMemberGetVo.setTotalActivityCount(memberTotal.getTotalActivityCount()); + mgtMemberGetVo.setTotalPayMoney(memberTotal.getTotalPayMoney()); + mgtMemberGetVo.setMemberRemark(null); + mgtMemberGetVo.setMemberArchiveVoList(memberArchiveVoList); + mgtMemberGetVo.setMemberTags(member.getUserTags()); + return mgtMemberGetVo; + } + + /** + * @description 删除标签 + * @author jqs + * @date 2023/6/8 15:18 + * @param memberTag + * @return void + */ + @Override + public void deleteMemberTag(String memberTag){ + memberMapper.deleteMemberTag(memberTag); + } + + /** + * @description 通过发送类型获取userId + * @author jqs + * @date 2023/6/13 17:53 + * @param sendType + * @return List<Long> + */ + @Override + public List<Long> listIdBySendType(Integer sendType){ + //1.手动领取2.全部用户3.会员用户4非会员用户5自定义 + return memberMapper.listIdBySendType(sendType); + } + + /** + * @description 通过ids获取用户简易返回 + * @author jqs + * @date 2023/6/16 11:06 + * @param userIds + * @return List<MgtSimpleMemberVo> + */ + @Override + public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds){ + return memberMapper.listSimpleVoByIds(userIds); + } + + /** + * @description + * @author jqs + * @date 2023/6/16 12:41 + * @param mgtUserIdByKeywordDto + * @return MgtUserIdByKeywordVo + */ + @Override + public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto){ + MgtUserIdByKeywordVo mgtUserIdByKeywordVo = new MgtUserIdByKeywordVo(); + List<Long> userIdList = memberMapper.getUserIdByKeyword(mgtUserIdByKeywordDto); + if(userIdList!=null&&!userIdList.isEmpty()){ + String userIdStr = userIdList.stream() + .map(Object::toString) + .collect(Collectors.joining(",")); + mgtUserIdByKeywordVo.setUserIds(userIdStr); + } + return mgtUserIdByKeywordVo; + } } -- Gitblit v1.7.1