| | |
| | | |
| | | 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.*; |
| | | 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.*; |
| | | 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> |
| | |
| | | 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 |
| | |
| | | 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.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); |
| | |
| | | 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"); |
| | |
| | | } 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 { |
| | |
| | | @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()); |
| | |
| | | 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); |
| | |
| | | |
| | | |
| | | /** |
| | | * @description: TODO |
| | | * @description: 商户获取会员信息 |
| | | * @author jqs34 |
| | | * @date 2023/5/4 22:50 |
| | | * @version 1.0 |
| | |
| | | @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; |
| | |
| | | List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto); |
| | | return merCashMemberPageVos; |
| | | } |
| | | |
| | | /** |
| | | * 更新会员绑定商户 |
| | | * @param appMemberBindingDto |
| | | */ |
| | | @Override |
| | | public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto){ |
| | | 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; |
| | | } |
| | | } |