| | |
| | | import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | 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.security.utils.SecurityUtils; |
| | | 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.MemberArchive; |
| | | import com.ruoyi.member.domain.pojo.member.MemberTotal; |
| | | import com.ruoyi.member.domain.vo.MerMemberTotalVo; |
| | | import com.ruoyi.member.domain.vo.*; |
| | | import com.ruoyi.member.mapper.member.MemberMapper; |
| | | import com.ruoyi.member.service.member.*; |
| | | import com.ruoyi.member.service.member.IntegralRecordService; |
| | | import com.ruoyi.member.service.member.MemberArchiveService; |
| | | import com.ruoyi.member.service.member.MemberService; |
| | | import com.ruoyi.member.service.member.MemberTotalService; |
| | | import com.ruoyi.member.util.HttpUtils; |
| | | import com.ruoyi.member.util.MsgUtils; |
| | | import com.ruoyi.system.api.constant.AppErrorConstant; |
| | | import com.ruoyi.system.api.constant.SecurityConstant; |
| | | import com.ruoyi.system.api.domain.dto.*; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | |
| | | @Resource |
| | | private RemoteOrderService orderService; |
| | | |
| | | @Resource |
| | | private MemberNurseService memberNurseService; |
| | | |
| | | @Resource |
| | | private RemoteConfigService remoteConfigService; |
| | |
| | | @Resource |
| | | private MemberArchiveService memberArchiveService; |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | @Resource |
| | | private RemoteOrderService remoteOrderService; |
| | | |
| | | /** |
| | | * @description: TODO |
| | |
| | | * @version 1.0 |
| | | */ |
| | | @Override |
| | | public Member getByUserId(Long userId){ |
| | | public Member getByUserId(Long userId) { |
| | | Member member = memberMapper.selectMemberByUserId(userId); |
| | | return member; |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param appMiniLoginDto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public AppMiniLoginVo getMemberByCode(AppMiniLoginDto appMiniLoginDto){ |
| | | public AppMiniLoginVo getMemberByCode(AppMiniLoginDto appMiniLoginDto) { |
| | | |
| | | AppMiniLoginVo appMiniLoginVo = new AppMiniLoginVo(); |
| | | WxMaJscode2SessionResult session = null; |
| | |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | if(session!=null&& StringUtils.isNotBlank(session.getOpenid())){ |
| | | if (session != null && StringUtils.isNotBlank(session.getOpenid())) { |
| | | unionid = session.getUnionid(); |
| | | openid = session.getOpenid(); |
| | | sessionKey = session.getSessionKey(); |
| | | //获取用户 |
| | | Member member = memberMapper.getOneByMiniOpenid(openid); |
| | | SysUser sysUser = null; |
| | | if(member!=null){ |
| | | if (member != null) { |
| | | sysUser = sysUserService.getSysUser(member.getUserId()).getData(); |
| | | } |
| | | appMiniLoginVo.setMiniOpenid(openid); |
| | | appMiniLoginVo.setWxUnionid(unionid); |
| | | appMiniLoginVo.setSysUser(sysUser); |
| | | appMiniLoginVo.setSessionKey(sessionKey); |
| | | redisService.setCacheObject(SecurityConstant.SESSION_KEY+openid,sessionKey,1L,TimeUnit.DAYS); |
| | | redisService.setCacheObject(SecurityConstant.SESSION_KEY + openid, sessionKey, 1L, TimeUnit.DAYS); |
| | | } |
| | | log.info("appMiniLoginVo"+appMiniLoginVo.toString()); |
| | | log.info("appMiniLoginVo" + appMiniLoginVo.toString()); |
| | | return appMiniLoginVo; |
| | | } |
| | | |
| | | /** |
| | | * 小程序注册 |
| | | * |
| | | * @param appUserRegisterDto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto){ |
| | | public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto) { |
| | | AppMiniRegisterVo appUserRegisterVo = new AppMiniRegisterVo(); |
| | | String mobile = null; |
| | | //获取code接口在redis里存放的sessionkey用于解密 |
| | | String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY+ appUserRegisterDto.getMiniOpenid()); |
| | | if(StringUtils.isBlank(sessionkey)){ |
| | | String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY + appUserRegisterDto.getMiniOpenid()); |
| | | if (StringUtils.isBlank(sessionkey)) { |
| | | throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN); |
| | | } |
| | | try { |
| | |
| | | String errcode = jsonUserPhoneNumber.getString("errcode"); |
| | | String errmsg = jsonUserPhoneNumber.getString("errmsg"); |
| | | if (!"0".equals(errcode)) { |
| | | throw new ServiceException(errmsg); |
| | | //因为生产测试差异,临时更新token |
| | | redisService.deleteObject(SecurityConstant.WX_TOKEN); |
| | | String responseAccessToken = getAccessTokenByWX(); |
| | | JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken); |
| | | accessToken = jsonAccessToken.getString("access_token"); |
| | | errmsg = jsonAccessToken.getString("errmsg"); |
| | | Long expiresIn = jsonAccessToken.getLong("expires_in"); |
| | | if (StringUtils.isBlank(accessToken)) { |
| | | throw new ServiceException(errmsg); |
| | | } else { |
| | | expiresIn = expiresIn - 100; |
| | | redisService.setCacheObject(SecurityConstant.WX_TOKEN, accessToken, Long.valueOf(expiresIn), TimeUnit.SECONDS); |
| | | } |
| | | responseUserPhoneNumber = getMobileByWX(accessToken, appUserRegisterDto.getMobileCode()); |
| | | jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber); |
| | | errcode = jsonUserPhoneNumber.getString("errcode"); |
| | | errmsg = jsonUserPhoneNumber.getString("errmsg"); |
| | | if (!"0".equals(errcode)) { |
| | | throw new ServiceException(errmsg); |
| | | } |
| | | } |
| | | String phoneInfo = jsonUserPhoneNumber.getString("phone_info"); |
| | | JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo); |
| | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | if(StringUtils.isBlank(mobile)){ |
| | | if (StringUtils.isBlank(mobile)) { |
| | | return null; |
| | | } |
| | | //判断openid是否被其他手机号占用 |
| | | Member checkMember = memberMapper.getOneByMiniOpenid(appUserRegisterDto.getMiniOpenid()); |
| | | if(checkMember!=null&&!checkMember.getMobile().equals(mobile)){ |
| | | if (checkMember != null && !checkMember.getMobile().equals(mobile)) { |
| | | throw new ServiceException("微信号换绑手机需联系客服"); |
| | | } |
| | | Member member = memberMapper.selectMemberByMobile(mobile); |
| | | SysUser sysUser; |
| | | //获取用户为空则新建 |
| | | if(member == null){ |
| | | if (member == null) { |
| | | //创建新用户 |
| | | String memberId = IdUtils.simpleUUID(); |
| | | sysUser = new SysUser(); |
| | | sysUser.setUserName(memberId); |
| | | sysUser.setUserType("03"); |
| | | sysUser.setNickName("鸿瑞堂用户"); |
| | | sysUser.setPhonenumber(mobile); |
| | | sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); |
| | | String password = "hongruitang"; |
| | | sysUser.setPassword(SecurityUtils.encryptPassword(password)); |
| | |
| | | member.setMemberNo(memberNo); |
| | | member.setUserId(sysUser.getUserId()); |
| | | member.setDelFlag(0); |
| | | member.setFrozenFlag(0); |
| | | member.setNickName("鸿瑞堂用户"); |
| | | member.setRealName("鸿瑞堂用户"); |
| | | member.setCustomerSource("小程序"); |
| | |
| | | member.setCreateTime(new Date()); |
| | | member.setMobile(mobile); |
| | | initMemberTotal(memberId); |
| | | }else{ |
| | | log.info("sysUser01-----------------" + sysUser.toString()); |
| | | } else { |
| | | sysUser = sysUserService.getSysUser(member.getUserId()).getData(); |
| | | log.info("sysUser02-----------------" + sysUser.toString()); |
| | | } |
| | | member.setWxUnionid(appUserRegisterDto.getWxUnionid()); |
| | | member.setMiniOpenid(appUserRegisterDto.getMiniOpenid()); |
| | | log.info("member-----------------"+member.toString()); |
| | | log.info("member02-----------------" + member.toString()); |
| | | this.saveOrUpdate(member); |
| | | appUserRegisterVo.setMobile(mobile); |
| | | appUserRegisterVo.setNickName(member.getNickName()); |
| | |
| | | |
| | | public static String getAccessTokenByWX() throws Exception { |
| | | String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential"; |
| | | Map<String, String> headers = new HashMap<>(8); |
| | | Map<String, String> headers = new HashMap<>(8); |
| | | HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null); |
| | | return EntityUtils.toString(response.getEntity()); |
| | | } |
| | | |
| | | public static String getMobileByWX(String accessToken, String code) throws Exception { |
| | | public static String getMobileByWX(String accessToken, String code) throws Exception { |
| | | String method = "POST"; |
| | | Map<String, String> headers = new HashMap<>(16); |
| | | headers.put("Content-Type", "application/json"); |
| | | headers.put("Accept", "application/json"); |
| | | Map<String, String> querys = new HashMap<>(16); |
| | | Map<String, String> bodys = new HashMap<>(16); |
| | | querys.put("access_token", accessToken ); |
| | | querys.put("access_token", accessToken); |
| | | bodys.put("code", code); |
| | | String body = JSONObject.toJSONString(bodys); |
| | | String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; |
| | |
| | | |
| | | /** |
| | | * 获取用户信息 |
| | | * |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public AppUserInfoVo getAppUserInfo(Long userId){ |
| | | public AppUserInfoVo getAppUserInfo(Long userId) { |
| | | AppUserInfoVo appUserInfoVo = new AppUserInfoVo(); |
| | | Member member = this.getByUserId(userId); |
| | | appUserInfoVo.setUserId(userId); |
| | |
| | | appUserInfoVo.setNickName(member.getNickName()); |
| | | appUserInfoVo.setRealName(member.getRealName()); |
| | | appUserInfoVo.setPhonenumber(member.getMobile()); |
| | | if(member.getRelationShopId()!=null&&member.getBindingFlag()==1){ |
| | | 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.setShopAddress(shop.getShopAreaName() + shop.getShopAddress()); |
| | | } |
| | | appUserInfoVo.setBirthday(member.getBirthday()); |
| | | appUserInfoVo.setGender(member.getGender()); |
| | |
| | | AppOrderTotalVo appOrderTotalVo = orderService.getAppOrderTotal(userId).getData(); |
| | | appUserInfoVo.setNoPayCount(appOrderTotalVo.getNoPayCount()); |
| | | appUserInfoVo.setNoUseCount(appOrderTotalVo.getNoUseCount()); |
| | | MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); |
| | | appUserInfoVo.setIntegral(memberTotal.getUseableIntegral()); |
| | | return appUserInfoVo; |
| | | } |
| | | |
| | | /** |
| | | * 修改用户信息 |
| | | * |
| | | * @param appEditUserDto |
| | | */ |
| | | @Override |
| | | public void editAppUserInfo(AppEditUserDto appEditUserDto){ |
| | | public void editAppUserInfo(AppEditUserDto appEditUserDto) { |
| | | //修改类型1.昵称2.头像3.性别4.生日 |
| | | Integer editType = appEditUserDto.getEditType(); |
| | | String editValue = appEditUserDto.getEditValue(); |
| | | Member member = this.getByUserId(appEditUserDto.getUserId()); |
| | | switch (editType){ |
| | | switch (editType) { |
| | | case 1: |
| | | member.setNickName(editValue); |
| | | member.setUpdateTime(new Date()); |
| | | member.setUpdateUserId(appEditUserDto.getUserId()); |
| | | this.saveOrUpdate(member); |
| | | break; |
| | | case 2: |
| | | member.setAvatar(editValue); |
| | | break; |
| | | case 3: |
| | | member.setGender(Integer.valueOf(editValue)); |
| | | member.setUpdateTime(new Date()); |
| | | member.setUpdateUserId(appEditUserDto.getUserId()); |
| | | this.saveOrUpdate(member); |
| | | break; |
| | | case 4: |
| | | if(editValue.compareTo(DateUtils.getDate())>0){ |
| | | throw new ServiceException(AppErrorConstant.BIRTHDAY_BEYOND); |
| | | } |
| | | member.setBirthday(editValue); |
| | | member.setUpdateTime(new Date()); |
| | | member.setUpdateUserId(appEditUserDto.getUserId()); |
| | | this.saveOrUpdate(member); |
| | | break; |
| | | case 5: |
| | | member.setRealName(editValue); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | member.setUpdateTime(new Date()); |
| | | member.setUpdateUserId(appEditUserDto.getUserId()); |
| | | this.saveOrUpdate(member); |
| | | sysUserService.editUserInfo(appEditUserDto); |
| | | } |
| | | |
| | | /** |
| | | * 分页获取会员信息 |
| | | * |
| | | * @param merMemberPageDto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto){ |
| | | List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page,merMemberPageDto); |
| | | public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto) { |
| | | //处理活跃度 |
| | | List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); |
| | | if (StringUtils.isNotBlank(merMemberPageDto.getMemberActiveness())) { |
| | | if(!activenessList.isEmpty()){ |
| | | for(Activeness activeness : activenessList){ |
| | | if(activeness.getActivenessName().equals(merMemberPageDto.getMemberActiveness())){ |
| | | Date nowDay = DateUtils.getNowDate(); |
| | | String actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay())); |
| | | String actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay())); |
| | | merMemberPageDto.setActStartDate(actStartDate); |
| | | merMemberPageDto.setActEndDate(actEndDate); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //处理剩余次数 |
| | | if(merMemberPageDto.getSurpNum()!=null){ |
| | | if(merMemberPageDto.getSurpNum()==1){ |
| | | merMemberPageDto.setSurpStartNum(0); |
| | | merMemberPageDto.setSurpEndNum(5); |
| | | }else if(merMemberPageDto.getSurpNum()==2){ |
| | | merMemberPageDto.setSurpStartNum(5); |
| | | merMemberPageDto.setSurpEndNum(10); |
| | | }else if(merMemberPageDto.getSurpNum()==3){ |
| | | merMemberPageDto.setSurpStartNum(10); |
| | | merMemberPageDto.setSurpEndNum(999999999); |
| | | } |
| | | } |
| | | List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page, merMemberPageDto); |
| | | //处理活跃度返回 |
| | | if (merMemberPageVoList != null && !merMemberPageVoList.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())); |
| | | mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName()); |
| | | mgtActivenessJudgeVoList.add(mgtActivenessJudgeVo); |
| | | } |
| | | //活跃度赋值 |
| | | Date lastPayTime; |
| | | for (MerMemberPageVo mgtMemberPageVo : merMemberPageVoList) { |
| | | //实际是最后服务时间 |
| | | 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.setMemberActiveness(sj.toString()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return merMemberPageVoList; |
| | | } |
| | | |
| | |
| | | * @version 1.0 |
| | | */ |
| | | @Override |
| | | public MerMemberInfoVo getMerMemberInfo(Long userId){ |
| | | public MerMemberInfoVo getMerMemberInfo(MerBaseGetDto merBaseGetDto) { |
| | | // 将id转换为Long类型 |
| | | Long userId = Long.valueOf(merBaseGetDto.getId()); |
| | | // 创建MerMemberInfoVo对象 |
| | | MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo(); |
| | | // 根据userId获取Member对象 |
| | | Member member = this.getByUserId(userId); |
| | | // 设置MerMemberInfoVo对象的属性值 |
| | | merMemberInfoVo.setUserId(userId); |
| | | merMemberInfoVo.setNickName(member.getNickName()); |
| | | merMemberInfoVo.setRealName(member.getRealName()); |
| | | merMemberInfoVo.setPhonenumber(member.getMobile()); |
| | | merMemberInfoVo.setAvatar(member.getAvatar()); |
| | | merMemberInfoVo.setBirthday(member.getBirthday()); |
| | | merMemberInfoVo.setUserTags(member.getUserTags()); |
| | | //未完成 |
| | | |
| | | merMemberInfoVo.setMemberType(member.getGoodsType()); |
| | | // 根据memberId获取MemberTotal对象 |
| | | MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); |
| | | // 设置MerMemberInfoVo对象的属性值 |
| | | merMemberInfoVo.setSurpNumber(memberTotal.getUseableServiceCount()); |
| | | // 创建MerBaseDto对象 |
| | | MerBaseDto merBaseDto = new MerBaseDto(); |
| | | // 设置MerBaseDto对象的属性值 |
| | | merBaseDto.setShopId(merBaseGetDto.getShopId()); |
| | | merBaseDto.setUserId(userId); |
| | | // 获取未支付订单金额 |
| | | MerMemberSimpleTotalVo memberSimpleTotalVo = remoteOrderService.getMerMemberSimpleTotalVo(merBaseDto).getData(); |
| | | merMemberInfoVo.setUserNumber(memberSimpleTotalVo.getUserNumber()); |
| | | merMemberInfoVo.setPayMoney(memberSimpleTotalVo.getPayMoney()); |
| | | merMemberInfoVo.setUnpaidMoney(memberSimpleTotalVo.getUnpaidMoney()); |
| | | // 获取最近的会员任务 |
| | | MemberTaskSimpleVo memberTaskSimpleVo = remoteShopService.getLastMemberTask(userId).getData(); |
| | | if (memberTaskSimpleVo != null) { |
| | | merMemberInfoVo.setLastTaskContent(memberTaskSimpleVo.getTaskContent()); |
| | | merMemberInfoVo.setLastTaskTime(memberTaskSimpleVo.getTaskDate()); |
| | | } |
| | | // 设置MerMemberInfoVo对象的属性值 |
| | | merMemberInfoVo.setNextTaskTime(memberTotal.getNextTaskTime()); |
| | | merMemberInfoVo.setLastPayTime(memberTotal.getLastConsumeTime()); |
| | | // 返回MerMemberInfoVo对象 |
| | | return merMemberInfoVo; |
| | | } |
| | | |
| | | /** |
| | | * 分页获取收银用户列表 |
| | | * |
| | | * @param page |
| | | * @param merCashMemberPageDto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto){ |
| | | public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto) { |
| | | |
| | | List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto); |
| | | List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page, merCashMemberPageDto); |
| | | return merCashMemberPageVos; |
| | | } |
| | | |
| | | /** |
| | | * 更新会员绑定商户 |
| | | * |
| | | * @param appMemberBindingDto |
| | | */ |
| | | @Override |
| | | public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto){ |
| | | public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto) { |
| | | Member member = this.getByUserId(appMemberBindingDto.getUserId()); |
| | | if (member.getBindingFlag() == 0) { |
| | | member.setBindingTime(new Date()); |
| | | } |
| | | member.setBindingFlag(appMemberBindingDto.getBindingFlag()); |
| | | member.setRelationShopId(appMemberBindingDto.getShopId()); |
| | | member.setRelationShopName(appMemberBindingDto.getShopName()); |
| | | member.setBindingType(appMemberBindingDto.getBindingType()); |
| | | this.saveOrUpdate(member); |
| | | } |
| | | |
| | | /** |
| | | * 获取会员基础档案 |
| | | * |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public MerMemberBasicFileVo getMerMemberBasicFile(Long userId){ |
| | | public MerMemberBasicFileVo getMerMemberBasicFile(Long userId) { |
| | | MerMemberBasicFileVo merMemberBasicFileVo = new MerMemberBasicFileVo(); |
| | | Member member = this.getByUserId(userId); |
| | | BeanUtils.copyProperties(member, merMemberBasicFileVo); |
| | | merMemberBasicFileVo.setNickName(member.getNickName()); |
| | | merMemberBasicFileVo.setRealName(member.getRealName()); |
| | | 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); |
| | | /*List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId); |
| | | List<String> valueList = memberNurseList.stream().map(k -> k.getNurse()).collect(Collectors.toList());*/ |
| | | String memberNurse = member.getMemberNurse(); |
| | | if(StringUtils.isNotBlank(memberNurse)){ |
| | | List<String> valueList = Arrays.asList(memberNurse.split(",")); |
| | | merMemberBasicFileVo.setMemberNurse(valueList); |
| | | } |
| | | List<MemberArchiveVo> achiveList = memberArchiveService.listMerVoByUserId(userId); |
| | | merMemberBasicFileVo.setAchiveList(achiveList); |
| | | return merMemberBasicFileVo; |
| | | } |
| | | |
| | | /** |
| | | * 获取会员标签 |
| | | * |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<MerMemberTagVo> getMerMemberTags(Long userId){ |
| | | public List<MerMemberTagVo> getMerMemberTags(Long userId) { |
| | | Member member = this.getByUserId(userId); |
| | | String userTags = member.getUserTags(); |
| | | String[] userTagsArr = null; |
| | | if(StringUtils.isNotBlank(userTags)){ |
| | | 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){ |
| | | 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)){ |
| | | if (userTagsArr != null && ArrayUtils.contains(userTagsArr, tagName)) { |
| | | merMemberTagVo.setSelectFlag(1); |
| | | }else{ |
| | | } else { |
| | | merMemberTagVo.setSelectFlag(0); |
| | | } |
| | | merMemberTagVoList.add(merMemberTagVo); |
| | |
| | | |
| | | /** |
| | | * 编辑会员标签 |
| | | * |
| | | * @param merMemberTagEditDto |
| | | */ |
| | | @Override |
| | | public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto){ |
| | | 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){ |
| | | if (userTags != null && !userTags.isEmpty()) { |
| | | for (String str : userTags) { |
| | | sj.add(str); |
| | | } |
| | | } |
| | |
| | | |
| | | /** |
| | | * 添加会员 |
| | | * |
| | | * @param merMemberAddDto |
| | | */ |
| | | @Override |
| | | public void addMerMember(MerMemberAddDto merMemberAddDto){ |
| | | String phonenumber = merMemberAddDto.getPhonenumber(); |
| | | Member oldMember = this.getByMobile(phonenumber); |
| | | if(oldMember!=null){ |
| | | public Long addMerMember(MerMemberAddDto merMemberAddDto) { |
| | | String phoneNumber = merMemberAddDto.getPhonenumber(); |
| | | Member oldMember = this.getByMobile(phoneNumber); |
| | | // Check if the member already exists |
| | | if (oldMember != null) { |
| | | throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE); |
| | | } |
| | | SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData(); |
| | | if(sysUser==null){ |
| | | // Get the sysUser by mobile number |
| | | SysUser sysUser = sysUserService.getSysUserByMobile(phoneNumber).getData(); |
| | | // If sysUser does not exist, create a new one |
| | | if (sysUser == null || !sysUser.getUserType().equals("03")) { |
| | | String memberId = IdUtils.simpleUUID(); |
| | | sysUser = new SysUser(); |
| | | sysUser.setUserName(memberId); |
| | | sysUser.setUserType("03"); |
| | | sysUser.setNickName(merMemberAddDto.getNickName()); |
| | | sysUser.setNickName(merMemberAddDto.getRealName()); |
| | | sysUser.setPhonenumber(merMemberAddDto.getPhonenumber()); |
| | | sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); |
| | | String password = "hongruitang"; |
| | | sysUser.setPassword(SecurityUtils.encryptPassword(password)); |
| | | log.debug("sysUser"+sysUser.toString()); |
| | | log.debug("sysUser" + sysUser.toString()); |
| | | sysUser = sysUserService.registerUser(sysUser).getData(); |
| | | // Create a new member |
| | | 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.setFrozenFlag(0); |
| | | member.setNickName(merMemberAddDto.getRealName()); |
| | | member.setRealName(merMemberAddDto.getRealName()); |
| | | member.setGender(merMemberAddDto.getGender()); |
| | | member.setMobile(phonenumber); |
| | | member.setLevel(merMemberAddDto.getLevel()); |
| | | member.setMobile(phoneNumber); |
| | | member.setReferrer(merMemberAddDto.getReferrer()); |
| | | member.setBirthday(merMemberAddDto.getBirthday()); |
| | | member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); |
| | |
| | | member.setWxUnionid(null); |
| | | member.setMiniOpenid(null); |
| | | member.setBindingFlag(1); |
| | | member.setRelationShopId(merMemberAddDto.getShopId()); |
| | | member.setCustomerSource("商户添加"); |
| | | member.setBindingTime(new Date()); |
| | | member.setBindingType(6); |
| | | // Get shop information and set it to the member |
| | | Shop shop = remoteShopService.getShop(merMemberAddDto.getShopId()).getData(); |
| | | member.setRelationShopName(shop.getShopName()); |
| | | member.setCustomerSource(merMemberAddDto.getCustomerSource()); |
| | | member.setCreateTime(new Date()); |
| | | log.info("member-----------------"+member.toString()); |
| | | //调理问题 |
| | | List<String> memberNurse = merMemberAddDto.getMemberNurse(); |
| | | if(memberNurse!=null&&!memberNurse.isEmpty()){ |
| | | String memberNurseString = String.join(",", memberNurse); |
| | | member.setMemberNurse(memberNurseString); |
| | | } |
| | | // Save the member and initialize member total |
| | | this.saveOrUpdate(member); |
| | | initMemberTotal(memberId); |
| | | List<MemberArchiveVo> achiveList = merMemberAddDto.getAchiveList(); |
| | | if(achiveList!=null&&!achiveList.isEmpty()){ |
| | | SysUser finalSysUser = sysUser; |
| | | List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> { |
| | | MemberArchive memberArchive = new MemberArchive(); |
| | | memberArchive.setDelFlag(0); |
| | | memberArchive.setUserId(finalSysUser.getUserId()); |
| | | memberArchive.setFieldId(memberArchiveVo.getFieldId()); |
| | | memberArchive.setFieldValue(memberArchiveVo.getFieldValue()); |
| | | return memberArchive; |
| | | } |
| | | ).collect(Collectors.toList()); |
| | | memberArchiveService.saveBatch(memberArchiveList); |
| | | } |
| | | }else{ |
| | | throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE); |
| | | } |
| | | |
| | | |
| | | return sysUser.getUserId(); |
| | | } |
| | | |
| | | /** |
| | | * 编辑会员 |
| | | * |
| | | * @param merMemberEditDto |
| | | */ |
| | | @Override |
| | | public void editMerMember(MerMemberEditDto merMemberEditDto){ |
| | | |
| | | public void editMerMember(MerMemberEditDto merMemberEditDto) { |
| | | // 获取用户信息 |
| | | Member member = this.getByUserId(merMemberEditDto.getEditUserId()); |
| | | if(!member.getMobile().equals(merMemberEditDto.getPhonenumber())){ |
| | | // 检查手机号是否已经存在 |
| | | if (!member.getMobile().equals(merMemberEditDto.getPhonenumber())) { |
| | | Member memberOld = getByMobile(merMemberEditDto.getPhonenumber()); |
| | | if(memberOld!=null){ |
| | | if (memberOld != null) { |
| | | throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE); |
| | | } |
| | | } |
| | | member.setRealName(merMemberEditDto.getNickName()); |
| | | // 更新用户信息 |
| | | member.setRealName(merMemberEditDto.getRealName()); |
| | | member.setMobile(merMemberEditDto.getPhonenumber()); |
| | | member.setGender(merMemberEditDto.getGender()); |
| | | member.setReferrer(merMemberEditDto.getReferrer()); |
| | |
| | | member.setBirthday(merMemberEditDto.getBirthday()); |
| | | member.setUpdateUserId(merMemberEditDto.getUserId()); |
| | | member.setUpdateTime(new Date()); |
| | | log.info("member-----------------"+member.toString()); |
| | | List<String> memberNurse = merMemberEditDto.getMemberNurse(); |
| | | if(memberNurse!=null&&!memberNurse.isEmpty()){ |
| | | String memberNurseString = String.join(",", memberNurse); |
| | | member.setMemberNurse(memberNurseString); |
| | | } |
| | | this.saveOrUpdate(member); |
| | | // 更新用户手机号 |
| | | SysUser sysUser = new SysUser(); |
| | | sysUser.setUserId(merMemberEditDto.getEditUserId()); |
| | | sysUser.setPhonenumber(merMemberEditDto.getPhonenumber()); |
| | | sysUserService.updateUserMobile(sysUser); |
| | | // 删除用户的档案信息 |
| | | memberArchiveService.deleteByUserId(sysUser.getUserId()); |
| | | // 添加用户的档案信息 |
| | | List<MemberArchiveVo> achiveList = merMemberEditDto.getAchiveList(); |
| | | if (achiveList != null && !achiveList.isEmpty()) { |
| | | // 构造用户档案列表 |
| | | List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> { |
| | | MemberArchive memberArchive = new MemberArchive(); |
| | | memberArchive.setDelFlag(0); |
| | | memberArchive.setUserId(sysUser.getUserId()); |
| | | memberArchive.setFieldId(memberArchiveVo.getFieldId()); |
| | | memberArchive.setFieldValue(memberArchiveVo.getFieldValue()); |
| | | return memberArchive; |
| | | }).collect(Collectors.toList()); |
| | | // 批量保存用户档案信息 |
| | | memberArchiveService.saveBatch(memberArchiveList); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param mobile |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Member getByMobile(String mobile){ |
| | | public Member getByMobile(String mobile) { |
| | | LambdaQueryWrapper<Member> queryWrapper = Wrappers.lambdaQuery(); |
| | | queryWrapper.eq(Member::getDelFlag, 0).eq(Member::getMobile, mobile); |
| | | Member member = this.getOne(queryWrapper); |
| | |
| | | |
| | | /** |
| | | * 更新用户商品类型 |
| | | * |
| | | * @param appMemberGoodsTypeDto |
| | | */ |
| | | @Override |
| | | public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto){ |
| | | public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto) { |
| | | // 根据用户ID获取会员信息 |
| | | Member member = this.getByUserId(appMemberGoodsTypeDto.getUserId()); |
| | | // 获取商品类型集合和商品护理集合 |
| | | HashSet<String> goodsTypeSet = appMemberGoodsTypeDto.getGoodsTypeSet(); |
| | | if(member!=null){ |
| | | String goodsType = member.getGoodsType(); |
| | | HashSet<String> goodsNurseSet = appMemberGoodsTypeDto.getGoodsNurseSet(); |
| | | // 如果会员存在 |
| | | if (member != null) { |
| | | // 标识是否有变化 |
| | | Boolean change = false; |
| | | for(String str : goodsTypeSet){ |
| | | if(goodsType != null){ |
| | | if(!goodsType.contains(str)){ |
| | | goodsType = goodsType + "," + str; |
| | | // 更新商品类型 |
| | | if (goodsTypeSet != null && goodsTypeSet.size() > 0) { |
| | | String goodsType = member.getGoodsType(); |
| | | HashSet<String> goodsTypeOldSet = new HashSet<>(); |
| | | // 如果商品类型不为空 |
| | | if (StringUtils.isNotBlank(goodsType)) { |
| | | goodsTypeOldSet = new HashSet<>(Arrays.asList(goodsType.split(","))); |
| | | // 如果商品类型集合相等 |
| | | if (!goodsTypeSet.equals(goodsTypeOldSet)) { |
| | | change = true; |
| | | } |
| | | }else{ |
| | | goodsType = str; |
| | | } else { |
| | | change = true; |
| | | } |
| | | goodsTypeOldSet.addAll(goodsTypeSet); |
| | | member.setGoodsType(String.join(",", goodsTypeOldSet)); |
| | | } |
| | | if(change){ |
| | | member.setGoodsType(goodsType); |
| | | // 更新商品护理 |
| | | if (goodsNurseSet != null && goodsNurseSet.size() > 0) { |
| | | String memberNurse = member.getMemberNurse(); |
| | | HashSet<String> memberNurseOldSet = new HashSet<>(); |
| | | // 如果会员护理不为空 |
| | | if (StringUtils.isNotBlank(memberNurse)) { |
| | | memberNurseOldSet = new HashSet<>(Arrays.asList(memberNurse.split(","))); |
| | | // 如果商品护理集合相等 |
| | | if (!goodsNurseSet.equals(memberNurseOldSet)) { |
| | | change = true; |
| | | } |
| | | } else { |
| | | change = true; |
| | | } |
| | | memberNurseOldSet.addAll(goodsNurseSet); |
| | | member.setMemberNurse(String.join(",", memberNurseOldSet)); |
| | | } |
| | | // 如果有变化,则保存或更新会员信息 |
| | | if (change) { |
| | | this.saveOrUpdate(member); |
| | | } |
| | | } |
| | |
| | | |
| | | /** |
| | | * 订单创建新用户 |
| | | * |
| | | * @param member |
| | | */ |
| | | @Override |
| | | public void createNewMember(Member member){ |
| | | public void createNewMember(Member member) { |
| | | String memberNo = createMemberNo(); |
| | | member.setMemberNo(memberNo); |
| | | member.setDelFlag(0); |
| | | member.setFrozenFlag(0); |
| | | member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); |
| | | member.setBindingFlag(0); |
| | | member.setCreateTime(new Date()); |
| | | member.setCustomerSource("商户订单添加"); |
| | | this.saveOrUpdate(member); |
| | |
| | | |
| | | /** |
| | | * 生成会员统计 |
| | | * |
| | | * @param memberId |
| | | * @return |
| | | */ |
| | | private void initMemberTotal(String memberId){ |
| | | private void initMemberTotal(String memberId) { |
| | | MemberTotal memberTotal = new MemberTotal(); |
| | | memberTotal.setMemberId(memberId); |
| | | memberTotal.setDelFlag(0); |
| | |
| | | memberTotal.setUseableServiceCount(0); |
| | | memberTotal.setTotalActivityCount(0); |
| | | memberTotal.setTotalCycleOrder(0); |
| | | memberTotal.setToltaExperienceOrder(0); |
| | | memberTotal.setTotalExperienceOrder(0); |
| | | memberTotal.setTotalServiceOrder(0); |
| | | memberTotal.setTotalGoodsOrder(0); |
| | | memberTotal.setShareFlag(0); |
| | | memberTotal.setPlSuggestFlag(0); |
| | | memberTotal.setShopSuggestFlag(0); |
| | | memberTotal.setSignFlag(0); |
| | | memberTotal.setBuyFlag(0); |
| | | memberTotal.setTotalConsumeCount(0); |
| | | memberTotalService.saveOrUpdate(memberTotal); |
| | | } |
| | | |
| | | /** |
| | | * 生成会员编号 |
| | | * |
| | | * @return |
| | | */ |
| | | private String createMemberNo(){ |
| | | private String createMemberNo() { |
| | | int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>()); |
| | | String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1)); |
| | | String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal + 1)); |
| | | return memberNo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 平台分页获取会员列表 |
| | | * |
| | | * @param page |
| | | * @param merMemberPageDto |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){ |
| | | public List<MgtMemberPageVo> pageMgtMember(Page page, MgtMemberPageDto merMemberPageDto) { |
| | | List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); |
| | | Date nowDay = new Date(); |
| | | if(merMemberPageDto.getActivenessId()!=null){ |
| | | 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()))); |
| | | 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(",","|")); |
| | | if (StringUtils.isNotBlank(merMemberPageDto.getMemberTags())) { |
| | | merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",", "|")); |
| | | } |
| | | //处理生日 |
| | | if(merMemberPageDto.getStartAge()!=null){ |
| | | LocalDate currentDate = LocalDate.now(); |
| | | LocalDate endBirthday = currentDate.minusYears(merMemberPageDto.getStartAge()); |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
| | | merMemberPageDto.setEndBirthday(endBirthday.format(formatter)); |
| | | } |
| | | if(merMemberPageDto.getEndAge()!=null){ |
| | | LocalDate currentDate = LocalDate.now(); |
| | | LocalDate startBirthday = currentDate.minusYears(merMemberPageDto.getEndAge()+1); |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
| | | merMemberPageDto.setStartBirthday(startBirthday.format(formatter)); |
| | | } |
| | | //查询获取结果列表 |
| | | List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto); |
| | | //处理活跃度返回 |
| | | if(memberPageVoList!=null&&!memberPageVoList.isEmpty()){ |
| | | if(activenessList!=null&&!activenessList.isEmpty()){ |
| | | if (memberPageVoList != null && !memberPageVoList.isEmpty()) { |
| | | if (activenessList != null && !activenessList.isEmpty()) { |
| | | //生成活跃度时间段列表 |
| | | List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>(); |
| | | MgtActivenessJudgeVo mgtActivenessJudgeVo; |
| | | for(Activeness activeness : activenessList){ |
| | | 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.setStartDay(DateUtils.addDays(new Date(), -activeness.getEndDay())); |
| | | mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(), -activeness.getStartDay())); |
| | | mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName()); |
| | | } |
| | | //活跃度赋值 |
| | | Date lastPayTime; |
| | | for(MgtMemberPageVo mgtMemberPageVo : memberPageVoList){ |
| | | 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){ |
| | | 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){ |
| | | if (sj.length() > 0) { |
| | | mgtMemberPageVo.setActiveness(sj.toString()); |
| | | } |
| | | } |
| | |
| | | |
| | | /** |
| | | * 修改会员关联商户 |
| | | * |
| | | * @param mgtMemberRelEditDto |
| | | */ |
| | | @Override |
| | | public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto){ |
| | | if(StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())){ |
| | | 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){ |
| | | for (String str : memberUserIdArr) { |
| | | Member member = this.getByUserId(Long.valueOf(str)); |
| | | member.setRelationShopId(shop.getShopId()); |
| | | member.setRelationShopName(shop.getShopName()); |
| | | member.setBindingFlag(1); |
| | | member.setBindingType(7); |
| | | member.setBindingTime(new Date()); |
| | | member.setUpdateTime(new Date()); |
| | | member.setUpdateUserId(mgtMemberRelEditDto.getUserId()); |
| | | this.saveOrUpdate(member); |
| | | memberMapper.updateById(member); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | /** |
| | | * 删除会员关联商户 |
| | | * |
| | | * @param mgtMemberRelDelDto |
| | | */ |
| | | @Override |
| | | public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto){ |
| | | if(StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) { |
| | | 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); |
| | | for (String str : memberUserIdArr) { |
| | | LambdaUpdateWrapper<Member> updateWrapper = Wrappers.lambdaUpdate(); |
| | | updateWrapper.eq(Member::getUserId, str) |
| | | .set(Member::getBindingFlag, 0) |
| | | .set(Member::getRelationShopId,null) |
| | | .set(Member::getRelationShopName,null) |
| | | .set(Member::getUpdateUserId,mgtMemberRelDelDto.getUserId()) |
| | | .set(Member::getUpdateTime,new Date()); |
| | | this.update(updateWrapper); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 修改会员积分 |
| | | * |
| | | * @param mgtMemberIntEditDto |
| | | */ |
| | | @Override |
| | | public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto){ |
| | | if(StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) { |
| | | public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto) { |
| | | if (StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) { |
| | | String memberUserIds = mgtMemberIntEditDto.getMemberUserIds(); |
| | | String[] memberUserIdArr = memberUserIds.split(","); |
| | | MemberIntegralChangeDto memberIntegralChangeDto; |
| | | for(String str : memberUserIdArr) { |
| | | for (String str : memberUserIdArr) { |
| | | memberIntegralChangeDto = new MemberIntegralChangeDto(); |
| | | Member member = this.getByUserId(Long.valueOf(str)); |
| | | memberIntegralChangeDto.setUserId(Long.valueOf(str)); |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 会员积分变动 |
| | | * |
| | | * @param memberIntegralChangeDto |
| | | */ |
| | | @Override |
| | | public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto){ |
| | | public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto) { |
| | | log.info("会员积分变动---"+memberIntegralChangeDto.toString()); |
| | | MemberTotal memberTotal = memberTotalService.getById(memberIntegralChangeDto.getMemberId()); |
| | | Integer recordType = memberIntegralChangeDto.getRecordType(); |
| | | Integer changeType = memberIntegralChangeDto.getChangeType(); |
| | |
| | | Integer usedIntegral = memberTotal.getUsedIntegral(); |
| | | Integer useableIntegral = memberTotal.getUseableIntegral(); |
| | | //变动统计 |
| | | if(changeType==1){ |
| | | if (changeType == 1) { |
| | | totalIntegral = totalIntegral + integer; |
| | | useableIntegral = useableIntegral + integer; |
| | | memberTotal.setTotalIntegral(totalIntegral); |
| | | memberTotal.setUseableIntegral(useableIntegral); |
| | | }else if(changeType==2){ |
| | | } else if (changeType == 2) { |
| | | usedIntegral = usedIntegral + integer; |
| | | useableIntegral = useableIntegral - integer; |
| | | if(useableIntegral<0){ |
| | | if (useableIntegral < 0) { |
| | | throw new ServiceException(AppErrorConstant.INTEGRAL_USE_FAILED); |
| | | } |
| | | memberTotal.setTotalIntegral(totalIntegral); |
| | |
| | | integralRecord.setDelFlag(0); |
| | | integralRecord.setUserId(memberIntegralChangeDto.getUserId()); |
| | | integralRecord.setChangeType(recordType); |
| | | if(changeType==1){ |
| | | if (changeType == 1) { |
| | | integralRecord.setChangeIntegral(integer); |
| | | }else if(changeType==2){ |
| | | integralRecord.setChangeIntegral( 0-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){ |
| | | switch (recordType) { |
| | | case 1: |
| | | integralRecord.setChangeReason("购物赠送"); |
| | | break; |
| | |
| | | |
| | | /** |
| | | * 平台获取会员信息 |
| | | * |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public MgtMemberGetVo getMgtMemberInfo(Long userId){ |
| | | 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()){ |
| | | List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listMgtVoByUserId(member.getUserId()); |
| | | if (memberArchiveVoList != null && !memberArchiveVoList.isEmpty()) { |
| | | //去掉未完善信息 |
| | | memberArchiveVoList.removeIf(o -> Objects.isNull(o.getFieldValue())); |
| | | } |
| | |
| | | mgtMemberGetVo.setMemberNo(member.getMemberNo()); |
| | | mgtMemberGetVo.setRealName(member.getRealName()); |
| | | mgtMemberGetVo.setNickName(member.getNickName()); |
| | | mgtMemberGetVo.setAvatar(member.getAvatar()); |
| | | mgtMemberGetVo.setMobile(member.getMobile()); |
| | | mgtMemberGetVo.setGender(member.getGender()==0 ? "男" : member.getGender()==1 ? "女" : null); |
| | | if(member.getGender()!=null){ |
| | | if (member.getGender() == 0) { |
| | | mgtMemberGetVo.setGender("男"); |
| | | } else if (member.getGender() == 1) { |
| | | mgtMemberGetVo.setGender("女"); |
| | | } |
| | | }else { |
| | | mgtMemberGetVo.setGender("未知"); |
| | | } |
| | | mgtMemberGetVo.setBirthday(member.getBirthday()); |
| | | mgtMemberGetVo.setBelongDistrict(member.getBelongDistrict()); |
| | | mgtMemberGetVo.setCreateTime(member.getCreateTime()); |
| | | mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime()); |
| | | mgtMemberGetVo.setGoodsType(member.getGoodsType()); |
| | | mgtMemberGetVo.setRelationShopName(member.getRelationShopName()); |
| | | if(member.getBindingFlag()==1){ |
| | | mgtMemberGetVo.setRelationShopName(member.getRelationShopName()); |
| | | } |
| | | mgtMemberGetVo.setIntegral(memberTotal.getTotalIntegral()); |
| | | mgtMemberGetVo.setMemberFrom(member.getCustomerSource()); |
| | | mgtMemberGetVo.setTotalActivityCount(memberTotal.getTotalActivityCount()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * @description 删除标签 |
| | | * @author jqs |
| | | * @date 2023/6/8 15:18 |
| | | * @param memberTag |
| | | * @return void |
| | | * @return void |
| | | * @description 删除标签 |
| | | * @author jqs |
| | | * @date 2023/6/8 15:18 |
| | | */ |
| | | @Override |
| | | public void deleteMemberTag(String memberTag){ |
| | | public void deleteMemberTag(String memberTag) { |
| | | memberMapper.deleteMemberTag(memberTag); |
| | | } |
| | | |
| | | /** |
| | | * @description 通过发送类型获取userId |
| | | * @author jqs |
| | | * @date 2023/6/13 17:53 |
| | | * @param sendType |
| | | * @return List<Long> |
| | | * @return List<Long> |
| | | * @description 通过发送类型获取userId |
| | | * @author jqs |
| | | * @date 2023/6/13 17:53 |
| | | */ |
| | | @Override |
| | | public List<Long> listIdBySendType(Integer sendType){ |
| | | public List<Long> listIdBySendType(Integer sendType,Long shopId) { |
| | | //1.手动领取2.全部用户3.会员用户4非会员用户5自定义 |
| | | return memberMapper.listIdBySendType(sendType); |
| | | return memberMapper.listIdBySendType(sendType,shopId); |
| | | } |
| | | |
| | | /** |
| | | * @description 通过ids获取用户简易返回 |
| | | * @author jqs |
| | | * @date 2023/6/16 11:06 |
| | | * @param userIds |
| | | * @return List<MgtSimpleMemberVo> |
| | | * @return List<MgtSimpleMemberVo> |
| | | * @description 通过ids获取用户简易返回 |
| | | * @author jqs |
| | | * @date 2023/6/16 11:06 |
| | | */ |
| | | @Override |
| | | public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds){ |
| | | public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds) { |
| | | return memberMapper.listSimpleVoByIds(userIds); |
| | | } |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/6/16 12:41 |
| | | * @param mgtUserIdByKeywordDto |
| | | * @return MgtUserIdByKeywordVo |
| | | * @return MgtUserIdByKeywordVo |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/6/16 12:41 |
| | | */ |
| | | @Override |
| | | public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto){ |
| | | public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto) { |
| | | MgtUserIdByKeywordVo mgtUserIdByKeywordVo = new MgtUserIdByKeywordVo(); |
| | | List<Long> userIdList = memberMapper.getUserIdByKeyword(mgtUserIdByKeywordDto); |
| | | if(userIdList!=null&&!userIdList.isEmpty()){ |
| | | if (userIdList != null && !userIdList.isEmpty()) { |
| | | String userIdStr = userIdList.stream() |
| | | .map(Object::toString) |
| | | .collect(Collectors.joining(",")); |
| | |
| | | } |
| | | return mgtUserIdByKeywordVo; |
| | | } |
| | | |
| | | /** |
| | | * @param |
| | | * @return MgtBulletinBoardVo |
| | | * @description boardMemberTotal |
| | | * @author jqs34 |
| | | * @date 2023/6/18 16:45 |
| | | */ |
| | | @Override |
| | | public MgtBulletinBoardVo boardMemberTotal() { |
| | | MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo(); |
| | | mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal()); |
| | | mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday()); |
| | | return mgtBulletinBoardVo; |
| | | } |
| | | |
| | | /** |
| | | * @param |
| | | * @return MgtTotalMemberTotalVo |
| | | * @description 会员人数统计 |
| | | * @author jqs |
| | | * @date 2023/6/19 15:26 |
| | | */ |
| | | @Override |
| | | public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto) { |
| | | Date nowDay = DateUtils.getNowDate(); |
| | | // 获取店铺ID |
| | | Long shopId = mgtBaseShopDto.getShopId(); |
| | | // 获取总会员数和不同年龄段的会员数 |
| | | MgtTotalMemberTotalVo mgtTotalMemberTotalVo = memberMapper.getTotalMemberTotal(mgtBaseShopDto); |
| | | MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getTotalMemberTotalAge(mgtBaseShopDto); |
| | | Integer manTotal = mgtAgeTotalVo.getManTotal(); |
| | | Integer womenTotal = mgtAgeTotalVo.getWomenTotal(); |
| | | mgtTotalMemberTotalVo.setManTotal(manTotal); |
| | | mgtTotalMemberTotalVo.setWomenTotal(womenTotal); |
| | | Integer personTotal = manTotal + womenTotal; |
| | | BigDecimal manTotalBig = new BigDecimal(manTotal); |
| | | BigDecimal personTotalBig = new BigDecimal(personTotal); |
| | | BigDecimal bigTen = new BigDecimal("100.00"); |
| | | BigDecimal menPercent = new BigDecimal("100.00"); |
| | | BigDecimal womenPercent = new BigDecimal("100.00"); |
| | | if(personTotal==0){ |
| | | personTotalBig = bigTen; |
| | | } |
| | | if(manTotal==0&&womenTotal==0){ |
| | | menPercent = new BigDecimal("50.00"); |
| | | womenPercent = new BigDecimal("50.00"); |
| | | }else if(manTotal==0&&womenTotal>0){ |
| | | menPercent = new BigDecimal("0.00"); |
| | | womenPercent = new BigDecimal("100.00"); |
| | | }else if(manTotal>0&&womenTotal==0){ |
| | | menPercent = new BigDecimal("100.00"); |
| | | womenPercent = new BigDecimal("0.00"); |
| | | }else{ |
| | | menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); |
| | | womenPercent = bigTen.subtract(menPercent); |
| | | } |
| | | mgtTotalMemberTotalVo.setManPercent(menPercent); |
| | | mgtTotalMemberTotalVo.setWomenPercent(womenPercent); |
| | | // 年龄段数组 |
| | | String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; |
| | | // 不同年龄段的会员数数组 |
| | | Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; |
| | | BigDecimal[] agePercentValue = new BigDecimal[5]; |
| | | Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge(); |
| | | BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString()); |
| | | BigDecimal hundredBig = new BigDecimal("100"); |
| | | if(totalPerson==0){ |
| | | totalPersonBig = hundredBig; |
| | | } |
| | | agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | // 设置年龄段数组和不同年龄段的会员数数组 |
| | | mgtTotalMemberTotalVo.setAgeKey(ageKey); |
| | | mgtTotalMemberTotalVo.setAgeValue(ageValue); |
| | | // 获取不同护理类型的会员数 |
| | | List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto); |
| | | if (nurseTotalVos != null && nurseTotalVos.size() > 0) { |
| | | nurseTotalVos = listRemoveNull(nurseTotalVos); |
| | | mgtTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos); |
| | | } |
| | | //获取不同等级的会员数 |
| | | List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getTotalMemberTotalLevel(mgtBaseShopDto); |
| | | if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) { |
| | | memberLevelTotalVos = listRemoveNull(memberLevelTotalVos); |
| | | mgtTotalMemberTotalVo.setMemberLevelTotalVos(memberLevelTotalVos); |
| | | } |
| | | // 获取不同商品类型的会员数 |
| | | List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto); |
| | | if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) { |
| | | goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos); |
| | | mgtTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos); |
| | | } |
| | | // 获取不同活跃度的会员数 |
| | | List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); |
| | | if (activenessList != null && !activenessList.isEmpty()) { |
| | | Activeness activeness; |
| | | String actStartDate; |
| | | String actEndDate; |
| | | Integer count; |
| | | List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>(); |
| | | MgtMapIntTotalVo MgtMapIntTotalVo; |
| | | // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组 |
| | | for (int i = 0; i < activenessList.size(); i++) { |
| | | activeness = activenessList.get(i); |
| | | actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay())); |
| | | actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay())); |
| | | count = memberMapper.getTotalMemberTotalActiveness(shopId, actStartDate, actEndDate); |
| | | MgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | MgtMapIntTotalVo.setMapKey(activeness.getActivenessName()); |
| | | MgtMapIntTotalVo.setMapValue(count); |
| | | MgtMapIntTotalVoList.add(MgtMapIntTotalVo); |
| | | } |
| | | mgtTotalMemberTotalVo.setActivenessList(MgtMapIntTotalVoList); |
| | | } |
| | | //获取会员消费排名 |
| | | List<MgtMapIntTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto); |
| | | if (memberPayList != null && memberPayList.size() > 0) { |
| | | //memberPayList = listRemoveNull(memberPayList); |
| | | mgtTotalMemberTotalVo.setMemberPayList(memberPayList); |
| | | } |
| | | //获取来源渠道排名 |
| | | List<MgtMapIntTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto); |
| | | if (customerSourceList != null && customerSourceList.size() > 0) { |
| | | customerSourceList = listRemoveNull(customerSourceList); |
| | | mgtTotalMemberTotalVo.setCustomerSourceList(customerSourceList); |
| | | } |
| | | // 返回总会员数和不同类型会员数的统计结果 |
| | | return mgtTotalMemberTotalVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param mgtActivityAgeDto |
| | | * @return List<Long> |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/6/20 11:42 |
| | | */ |
| | | @Override |
| | | public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto) { |
| | | List<Long> userIdList = memberMapper.listUserIdByAge(mgtActivityAgeDto); |
| | | return userIdList; |
| | | } |
| | | |
| | | /** |
| | | * @param mgtBasePlatformDto |
| | | * @return MgtPlTotalMemberTotalVo |
| | | * @description 会员人数统计 |
| | | * @author jqs |
| | | * @date 2023/6/21 10:59 |
| | | */ |
| | | @Override |
| | | public MgtPlTotalMemberTotalVo getPlTotalMemberTotal(MgtBasePlatformDto mgtBasePlatformDto) { |
| | | Date nowDay = DateUtils.getNowDate(); |
| | | //如果区域代码不为null获取对应的商户id |
| | | if (StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) { |
| | | MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto(); |
| | | mgtShopIdByCodeDto.setShopProvinceCode(mgtBasePlatformDto.getShopProvinceCode()); |
| | | mgtShopIdByCodeDto.setShopCityCode(mgtBasePlatformDto.getShopCityCode()); |
| | | mgtShopIdByCodeDto.setShopAreaCode(mgtBasePlatformDto.getShopAreaCode()); |
| | | MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData(); |
| | | List<Long> list = new ArrayList<>(); |
| | | if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) { |
| | | list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(",")) |
| | | .map(Long::valueOf) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | mgtBasePlatformDto.setShopIdList(list); |
| | | } |
| | | //获取基础统计 |
| | | MgtPlTotalMemberTotalVo plTotalMemberTotalVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto); |
| | | MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto); |
| | | if (mgtAgeTotalVo != null) { |
| | | Integer manTotal = mgtAgeTotalVo.getManTotal(); |
| | | Integer womenTotal = mgtAgeTotalVo.getWomenTotal(); |
| | | Integer personTotal = manTotal + womenTotal; |
| | | BigDecimal manTotalBig = new BigDecimal(manTotal); |
| | | BigDecimal personTotalBig = new BigDecimal(personTotal); |
| | | BigDecimal bigTen = new BigDecimal("100.00"); |
| | | BigDecimal menPercent = new BigDecimal("100.00"); |
| | | BigDecimal womenPercent = new BigDecimal("100.00"); |
| | | if(personTotal==0){ |
| | | personTotalBig = bigTen; |
| | | } |
| | | if(manTotal==0&&womenTotal==0){ |
| | | menPercent = new BigDecimal("50.00"); |
| | | womenPercent = new BigDecimal("50.00"); |
| | | }else if(manTotal==0&&womenTotal>0){ |
| | | menPercent = new BigDecimal("0.00"); |
| | | womenPercent = new BigDecimal("100.00"); |
| | | }else if(manTotal>0&&womenTotal==0){ |
| | | menPercent = new BigDecimal("100.00"); |
| | | womenPercent = new BigDecimal("0.00"); |
| | | }else{ |
| | | menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); |
| | | womenPercent = bigTen.subtract(menPercent); |
| | | } |
| | | plTotalMemberTotalVo.setManTotal(manTotal); |
| | | plTotalMemberTotalVo.setWomenTotal(womenTotal); |
| | | plTotalMemberTotalVo.setManPercent(menPercent); |
| | | plTotalMemberTotalVo.setWomenPercent(womenPercent); |
| | | } |
| | | // 年龄段数组 |
| | | String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; |
| | | // 不同年龄段的会员数数组 |
| | | Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; |
| | | BigDecimal[] agePercentValue = new BigDecimal[5]; |
| | | Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge(); |
| | | BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString()); |
| | | BigDecimal hundredBig = new BigDecimal("100"); |
| | | if(totalPerson==0){ |
| | | totalPersonBig = hundredBig; |
| | | } |
| | | agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | // 设置年龄段数组和不同年龄段的会员数数组 |
| | | plTotalMemberTotalVo.setAgeKey(ageKey); |
| | | plTotalMemberTotalVo.setAgeValue(ageValue); |
| | | plTotalMemberTotalVo.setAgePercent(agePercentValue); |
| | | // 获取不同调理类型的会员数 |
| | | List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto); |
| | | if (nurseTotalVos != null && nurseTotalVos.size() > 0) { |
| | | nurseTotalVos = listRemoveNull(nurseTotalVos); |
| | | plTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos); |
| | | } |
| | | //获取不同等级的会员数 |
| | | List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getPlTotalMemberTotalLevel(mgtBasePlatformDto); |
| | | if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) { |
| | | memberLevelTotalVos = listRemoveNull(memberLevelTotalVos); |
| | | plTotalMemberTotalVo.setMemberLevelTotalVos(memberLevelTotalVos); |
| | | } |
| | | // 获取不同商品类型的会员数 |
| | | List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getPlTotalMemberTotalGoodsType(mgtBasePlatformDto); |
| | | if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) { |
| | | goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos); |
| | | plTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos); |
| | | } |
| | | // 获取不同活跃度的会员数 |
| | | List<Long> shopIdList = mgtBasePlatformDto.getShopIdList(); |
| | | List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); |
| | | if (activenessList != null && !activenessList.isEmpty()) { |
| | | Activeness activeness; |
| | | String actStartDate; |
| | | String actEndDate; |
| | | Integer count; |
| | | List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>(); |
| | | MgtMapIntTotalVo MgtMapIntTotalVo; |
| | | // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组 |
| | | for (int i = 0; i < activenessList.size(); i++) { |
| | | activeness = activenessList.get(i); |
| | | actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay())); |
| | | actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay())); |
| | | count = memberMapper.getPlTotalMemberTotalActiveness(shopIdList, actStartDate, actEndDate); |
| | | if (StringUtils.isNotBlank(activeness.getActivenessName())) { |
| | | MgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | MgtMapIntTotalVo.setMapKey(activeness.getActivenessName()); |
| | | MgtMapIntTotalVo.setMapValue(count); |
| | | MgtMapIntTotalVoList.add(MgtMapIntTotalVo); |
| | | } |
| | | } |
| | | plTotalMemberTotalVo.setActivenessList(MgtMapIntTotalVoList); |
| | | } |
| | | //获取会员消费排名 |
| | | List<MgtMapIntTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto); |
| | | if (memberPayList != null && memberPayList.size() > 0) { |
| | | memberPayList = listRemoveNull(memberPayList); |
| | | plTotalMemberTotalVo.setMemberPayList(memberPayList); |
| | | } |
| | | //获取来源渠道排名 |
| | | List<MgtMapIntTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto); |
| | | if (customerSourceList != null && customerSourceList.size() > 0) { |
| | | customerSourceList = listRemoveNull(customerSourceList); |
| | | plTotalMemberTotalVo.setCustomerSourceList(customerSourceList); |
| | | } |
| | | //获取商铺会员排名 |
| | | List<MgtMapIntTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto); |
| | | if (shopMemberRankList != null && shopMemberRankList.size() > 0) { |
| | | shopMemberRankList = listRemoveNull(shopMemberRankList); |
| | | plTotalMemberTotalVo.setShopMemberRankList(shopMemberRankList); |
| | | } |
| | | List<MgtMapIntTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData(); |
| | | if (memberGoodsRankList != null && memberGoodsRankList.size() > 0) { |
| | | memberGoodsRankList = listRemoveNull(memberGoodsRankList); |
| | | plTotalMemberTotalVo.setMemberGoodsRankList(memberGoodsRankList); |
| | | } |
| | | return plTotalMemberTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @param MgtMapIntTotalVos |
| | | * @return List<MgtMapIntTotalVo> |
| | | * @description 去除空字符串 |
| | | * @author jqs |
| | | * @date 2023/6/27 17:35 |
| | | */ |
| | | private List<MgtMapIntTotalVo> listRemoveNull(List<MgtMapIntTotalVo> MgtMapIntTotalVos) { |
| | | for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { |
| | | if (StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())) { |
| | | MgtMapIntTotalVos.remove(i); |
| | | } |
| | | } |
| | | return MgtMapIntTotalVos; |
| | | } |
| | | |
| | | /** |
| | | * @param shopIdList |
| | | * @return List<Long> |
| | | * @description 通过shopId获取userId |
| | | * @author jqs |
| | | * @date 2023/6/21 17:11 |
| | | */ |
| | | @Override |
| | | public List<Long> listUserIdByShopId(List<Long> shopIdList) { |
| | | return memberMapper.listUserIdByShopId(shopIdList); |
| | | } |
| | | |
| | | /** |
| | | * @param shopIdList |
| | | * @return MgtShopTotalMemberVo |
| | | * @description 通过shopId获取user统计 |
| | | * @author jqs |
| | | * @date 2023/6/21 17:19 |
| | | */ |
| | | @Override |
| | | public MgtShopTotalMemberVo getUserTotalByShopId(List<Long> shopIdList) { |
| | | MgtShopTotalMemberVo mgtShopTotalMemberVo = new MgtShopTotalMemberVo(); |
| | | MgtBasePlatformDto mgtBasePlatformDto = new MgtBasePlatformDto(); |
| | | mgtBasePlatformDto.setShopIdList(shopIdList); |
| | | MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto); |
| | | mgtShopTotalMemberVo.setManTotal(mgtAgeTotalVo.getManTotal()); |
| | | mgtShopTotalMemberVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal()); |
| | | // 年龄段数组 |
| | | String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; |
| | | // 不同年龄段的会员数数组 |
| | | Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; |
| | | BigDecimal[] agePercentValue = new BigDecimal[5]; |
| | | Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge(); |
| | | BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString()); |
| | | BigDecimal hundredBig = new BigDecimal("100"); |
| | | if(totalPerson==0){ |
| | | totalPersonBig = hundredBig; |
| | | } |
| | | agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | // 设置年龄段数组和不同年龄段的会员数数组 |
| | | mgtShopTotalMemberVo.setAgeKey(ageKey); |
| | | mgtShopTotalMemberVo.setAgeValue(ageValue); |
| | | return mgtShopTotalMemberVo; |
| | | } |
| | | |
| | | /** |
| | | * @param memberTotalChangeDto |
| | | * @return void |
| | | * @description 会员统计变动 |
| | | * @author jqs |
| | | * @date 2023/6/28 14:34 |
| | | */ |
| | | @Override |
| | | public void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto) { |
| | | log.info("会员统计变动---"+memberTotalChangeDto.toString()); |
| | | Member member = this.getByUserId(memberTotalChangeDto.getUserId()); |
| | | MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); |
| | | //积分变动 |
| | | if (memberTotalChangeDto.getChangeIntegral() != null) { |
| | | if (memberTotalChangeDto.getTypeIntegral() == 2) { |
| | | memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() - memberTotalChangeDto.getChangeIntegral()); |
| | | memberTotal.setUsedIntegral(memberTotal.getUsedIntegral() + memberTotalChangeDto.getChangeIntegral()); |
| | | } else { |
| | | memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + memberTotalChangeDto.getChangeIntegral()); |
| | | memberTotal.setTotalIntegral(memberTotal.getTotalIntegral() + memberTotalChangeDto.getChangeIntegral()); |
| | | IntegralRecord integralRecord = new IntegralRecord(); |
| | | integralRecord.setDelFlag(0); |
| | | integralRecord.setUserId(memberTotalChangeDto.getUserId()); |
| | | integralRecord.setChangeType(5); |
| | | integralRecord.setCreateTime(new Date()); |
| | | integralRecord.setChangeIntegral(memberTotalChangeDto.getChangeIntegral()); |
| | | integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+memberTotalChangeDto.getChangeIntegral()); |
| | | integralRecord.setChangeReason("订单【"+memberTotalChangeDto.getOrderNo()+"】获得积分"); |
| | | integralRecord.setOrderId(memberTotalChangeDto.getOrderId()); |
| | | integralRecord.setOrderNo(memberTotalChangeDto.getOrderNo()); |
| | | integralRecordService.saveOrUpdate(integralRecord); |
| | | } |
| | | } |
| | | //消费变动 |
| | | if (memberTotalChangeDto.getPayMoney() != null) { |
| | | if(memberTotalChangeDto.getPayMoney().compareTo(BigDecimal.ZERO)>=0){ |
| | | memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney())); |
| | | memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() + 1); |
| | | memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney()); |
| | | memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime()); |
| | | }else{ |
| | | memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney())); |
| | | memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() - 1); |
| | | } |
| | | } |
| | | //服务次数变动 |
| | | if (memberTotalChangeDto.getServiceCount() != null) { |
| | | if (memberTotalChangeDto.getTypeService() == 2) { |
| | | memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() - memberTotalChangeDto.getServiceCount()); |
| | | memberTotal.setUsedServiceCount(memberTotal.getUsedServiceCount() + memberTotalChangeDto.getServiceCount()); |
| | | memberTotal.setLastServiceTime(new Date()); |
| | | } else { |
| | | memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() + memberTotalChangeDto.getServiceCount()); |
| | | memberTotal.setTotalServiceCount(memberTotal.getTotalServiceCount() + memberTotalChangeDto.getServiceCount()); |
| | | } |
| | | } |
| | | //跟进时间 |
| | | if (memberTotalChangeDto.getNextTaskTime() != null) { |
| | | memberTotal.setNextTaskTime(memberTotalChangeDto.getNextTaskTime()); |
| | | } |
| | | //活动次数变动 |
| | | if (memberTotalChangeDto.getActivityTime() != null) { |
| | | memberTotal.setTotalActivityCount(memberTotal.getTotalActivityCount() + 1); |
| | | memberTotal.setLastActivityTime(memberTotalChangeDto.getActivityTime()); |
| | | } |
| | | //订单数量变动 |
| | | if (memberTotalChangeDto.getCycleOrderChange() != null) { |
| | | memberTotal.setTotalCycleOrder(memberTotal.getTotalCycleOrder() + memberTotalChangeDto.getCycleOrderChange()); |
| | | } |
| | | if (memberTotalChangeDto.getExperienceOrderChange() != null) { |
| | | memberTotal.setTotalExperienceOrder(memberTotal.getTotalExperienceOrder() + memberTotalChangeDto.getExperienceOrderChange()); |
| | | } |
| | | if (memberTotalChangeDto.getServiceOrderChange() != null) { |
| | | memberTotal.setTotalServiceOrder(memberTotal.getTotalServiceOrder() + memberTotalChangeDto.getServiceOrderChange()); |
| | | } |
| | | if (memberTotalChangeDto.getGoodsOrderChange() != null) { |
| | | memberTotal.setTotalGoodsOrder(memberTotal.getTotalGoodsOrder() + memberTotalChangeDto.getGoodsOrderChange()); |
| | | } |
| | | //消费记录 |
| | | if(memberTotalChangeDto.getConsumeTime()!=null){ |
| | | memberTotal.setTotalConsumeCount(memberTotal.getTotalConsumeCount()+1); |
| | | memberTotal.setLastConsumeTime(memberTotalChangeDto.getConsumeTime()); |
| | | } |
| | | memberTotalService.saveOrUpdate(memberTotal); |
| | | } |
| | | |
| | | /** |
| | | * @description 商户获取会员统计 |
| | | * @author jqs |
| | | * @date 2023/7/3 17:16 |
| | | * @param merTotalDto |
| | | * @return MerMemberTotalVo |
| | | */ |
| | | @Override |
| | | public MerMemberTotalVo getMerMemberTotal(MerTotalDto merTotalDto){ |
| | | if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ |
| | | List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); |
| | | merTotalDto.setShopIdList(shopIdList); |
| | | merTotalDto.setShopId(null); |
| | | } |
| | | MerMemberTotalVo merMemberTotalVo = memberMapper.getMerMemberTotal(merTotalDto); |
| | | return merMemberTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 商户获取会员固定统计 |
| | | * @author jqs |
| | | * @date 2023/7/3 18:34 |
| | | * @param merTotalDto |
| | | * @return MerMemberFixedTotalVo |
| | | */ |
| | | @Override |
| | | public MerMemberFixedTotalVo getMerMemberFixedTotal(MerTotalDto merTotalDto){ |
| | | if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ |
| | | List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); |
| | | merTotalDto.setShopIdList(shopIdList); |
| | | merTotalDto.setShopId(null); |
| | | } |
| | | MerMemberFixedTotalVo memberFixedTotalVo = new MerMemberFixedTotalVo(); |
| | | Date nowDay = DateUtils.getNowDate(); |
| | | if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ |
| | | List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); |
| | | merTotalDto.setShopIdList(shopIdList); |
| | | merTotalDto.setShopId(null); |
| | | } |
| | | MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getMerMemberTotalAge(merTotalDto); |
| | | Integer manTotal = mgtAgeTotalVo.getManTotal(); |
| | | Integer womenTotal = mgtAgeTotalVo.getWomenTotal(); |
| | | memberFixedTotalVo.setManTotal(manTotal); |
| | | memberFixedTotalVo.setWomenTotal(womenTotal); |
| | | Integer personTotal = manTotal + womenTotal; |
| | | BigDecimal manTotalBig = new BigDecimal(manTotal); |
| | | BigDecimal personTotalBig = new BigDecimal(personTotal); |
| | | BigDecimal bigTen = new BigDecimal("100.00"); |
| | | BigDecimal menPercent = new BigDecimal("100.00"); |
| | | BigDecimal womenPercent = new BigDecimal("100.00"); |
| | | if(personTotal==0){ |
| | | personTotalBig = bigTen; |
| | | } |
| | | if(manTotal==0&&womenTotal==0){ |
| | | menPercent = new BigDecimal("50.00"); |
| | | womenPercent = new BigDecimal("50.00"); |
| | | }else if(manTotal==0&&womenTotal>0){ |
| | | menPercent = new BigDecimal("0.00"); |
| | | womenPercent = new BigDecimal("100.00"); |
| | | }else if(manTotal>0&&womenTotal==0){ |
| | | menPercent = new BigDecimal("100.00"); |
| | | womenPercent = new BigDecimal("0.00"); |
| | | }else{ |
| | | menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); |
| | | womenPercent = bigTen.subtract(menPercent); |
| | | } |
| | | memberFixedTotalVo.setManPercent(menPercent); |
| | | memberFixedTotalVo.setWomenPercent(womenPercent); |
| | | // 年龄段数组 |
| | | String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; |
| | | // 不同年龄段的会员数数组 |
| | | Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; |
| | | BigDecimal[] agePercentValue = new BigDecimal[5]; |
| | | Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge(); |
| | | BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString()); |
| | | BigDecimal hundredBig = new BigDecimal("100"); |
| | | if(totalPerson==0){ |
| | | totalPersonBig = hundredBig; |
| | | } |
| | | agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); |
| | | // 设置年龄段数组和不同年龄段的会员数数组 |
| | | memberFixedTotalVo.setAgeKey(ageKey); |
| | | memberFixedTotalVo.setAgeValue(ageValue); |
| | | memberFixedTotalVo.setAgePercentValue(agePercentValue); |
| | | // 获取不同护理类型的会员数 |
| | | List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getMerMemberTotalNurse(merTotalDto); |
| | | if (nurseTotalVos != null && nurseTotalVos.size() > 0) { |
| | | nurseTotalVos = listRemoveNull(nurseTotalVos); |
| | | memberFixedTotalVo.setNurseTotalVos(nurseTotalVos); |
| | | } |
| | | //获取不同等级的会员数 |
| | | List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getMerMemberTotalLevel(merTotalDto); |
| | | if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) { |
| | | memberLevelTotalVos = listRemoveNull(memberLevelTotalVos); |
| | | memberFixedTotalVo.setMemberLevelTotalVos(memberLevelTotalVos); |
| | | } |
| | | // 获取不同商品类型的会员数 |
| | | List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getMerMemberTotalGoodsType(merTotalDto); |
| | | if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) { |
| | | goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos); |
| | | memberFixedTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos); |
| | | } |
| | | //获取会员消费排名 |
| | | List<MgtMapIntTotalVo> memberPayList = memberMapper.getMerMemberPayRank(merTotalDto); |
| | | if (memberPayList != null && memberPayList.size() > 0) { |
| | | memberPayList = listRemoveNull(memberPayList); |
| | | memberFixedTotalVo.setMemberPayList(memberPayList); |
| | | } |
| | | // 获取不同活跃度的会员数 |
| | | List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); |
| | | if (activenessList != null && !activenessList.isEmpty()) { |
| | | Activeness activeness; |
| | | String actStartDate; |
| | | String actEndDate; |
| | | Integer count; |
| | | List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>(); |
| | | MgtMapIntTotalVo MgtMapIntTotalVo; |
| | | // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组 |
| | | for (int i = 0; i < activenessList.size(); i++) { |
| | | activeness = activenessList.get(i); |
| | | actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay())); |
| | | actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay())); |
| | | merTotalDto.setStartDate(actStartDate); |
| | | merTotalDto.setEndDate(actEndDate); |
| | | count = memberMapper.getMerMemberTotalActiveness(merTotalDto); |
| | | MgtMapIntTotalVo = new MgtMapIntTotalVo(); |
| | | MgtMapIntTotalVo.setMapKey(activeness.getActivenessName()); |
| | | MgtMapIntTotalVo.setMapValue(count); |
| | | MgtMapIntTotalVoList.add(MgtMapIntTotalVo); |
| | | } |
| | | memberFixedTotalVo.setActivenessList(MgtMapIntTotalVoList); |
| | | } |
| | | return memberFixedTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 商会获取会员来源统计 |
| | | * @author jqs |
| | | * @date 2023/7/3 19:09 |
| | | * @param merTotalDto |
| | | * @return MerMemberSourceTotalVo |
| | | */ |
| | | @Override |
| | | public MerMemberSourceTotalVo getMerMemberSourceTotal(MerTotalDto merTotalDto){ |
| | | if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ |
| | | List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); |
| | | merTotalDto.setShopIdList(shopIdList); |
| | | merTotalDto.setShopId(null); |
| | | } |
| | | MerMemberSourceTotalVo memberSourceTotalVo = new MerMemberSourceTotalVo(); |
| | | //获取来源渠道排名 |
| | | List<MgtMapIntTotalVo> customerSourceList = memberMapper.getMerMemberCustomerSourceRank(merTotalDto); |
| | | if (customerSourceList != null && customerSourceList.size() > 0) { |
| | | customerSourceList = listRemoveNull(customerSourceList); |
| | | memberSourceTotalVo.setCustomerSourceList(customerSourceList); |
| | | } |
| | | |
| | | return memberSourceTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 商会获取会员推荐排名 |
| | | * @author jqs |
| | | * @date 2023/7/3 19:14 |
| | | * @param merTotalDto |
| | | * @return MerMemberRecommendTotalVo |
| | | */ |
| | | @Override |
| | | public MerMemberRecommendTotalVo getMerMemberRecommendTotal(MerTotalDto merTotalDto){ |
| | | if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ |
| | | List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); |
| | | merTotalDto.setShopIdList(shopIdList); |
| | | merTotalDto.setShopId(null); |
| | | } |
| | | MerMemberRecommendTotalVo memberRecommendTotalVo = new MerMemberRecommendTotalVo(); |
| | | //获取会员推荐排名 |
| | | /*List<MgtMapIntTotalVo> recommendList = memberMapper.getMerMemberRecommendRank(merTotalDto); |
| | | if (recommendList != null && recommendList.size() > 0) { |
| | | recommendList = listRemoveNull(recommendList); |
| | | memberRecommendTotalVo.setRecommendList(recommendList); |
| | | }*/ |
| | | List<MgtMapIntTotalVo> recommendList = new ArrayList<>(); |
| | | memberRecommendTotalVo.setRecommendList(recommendList); |
| | | return memberRecommendTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 获取各年龄层用户 |
| | | * @author jqs |
| | | * @date 2023/7/4 9:50 |
| | | * @param merTotalDto |
| | | * @return MerOrderAgeUserVo |
| | | */ |
| | | @Override |
| | | public List<MerOrderAgeUserVo> listOrderAgeUser(MerTotalDto merTotalDto){ |
| | | List<MerOrderAgeUserVo> orderAgeUserVoList = new ArrayList<>(); |
| | | MerOrderAgeUserVo merOrderAgeUserVo = new MerOrderAgeUserVo(); |
| | | merTotalDto.setAgeType(1); |
| | | List<Long> userIdList = memberMapper.listOrderAgeUser(merTotalDto); |
| | | merOrderAgeUserVo.setAgeType(1); |
| | | merOrderAgeUserVo.setUserIdList(userIdList); |
| | | orderAgeUserVoList.add(merOrderAgeUserVo); |
| | | merOrderAgeUserVo = new MerOrderAgeUserVo(); |
| | | merTotalDto.setAgeType(2); |
| | | userIdList = memberMapper.listOrderAgeUser(merTotalDto); |
| | | merOrderAgeUserVo.setAgeType(2); |
| | | merOrderAgeUserVo.setUserIdList(userIdList); |
| | | orderAgeUserVoList.add(merOrderAgeUserVo); |
| | | merOrderAgeUserVo = new MerOrderAgeUserVo(); |
| | | merTotalDto.setAgeType(3); |
| | | userIdList = memberMapper.listOrderAgeUser(merTotalDto); |
| | | merOrderAgeUserVo.setAgeType(3); |
| | | merOrderAgeUserVo.setUserIdList(userIdList); |
| | | orderAgeUserVoList.add(merOrderAgeUserVo); |
| | | merOrderAgeUserVo = new MerOrderAgeUserVo(); |
| | | merTotalDto.setAgeType(4); |
| | | userIdList = memberMapper.listOrderAgeUser(merTotalDto); |
| | | merOrderAgeUserVo.setAgeType(4); |
| | | merOrderAgeUserVo.setUserIdList(userIdList); |
| | | orderAgeUserVoList.add(merOrderAgeUserVo); |
| | | merOrderAgeUserVo = new MerOrderAgeUserVo(); |
| | | merTotalDto.setAgeType(5); |
| | | userIdList = memberMapper.listOrderAgeUser(merTotalDto); |
| | | merOrderAgeUserVo.setAgeType(4); |
| | | merOrderAgeUserVo.setUserIdList(userIdList); |
| | | orderAgeUserVoList.add(merOrderAgeUserVo); |
| | | return orderAgeUserVoList; |
| | | } |
| | | /** |
| | | * @description 通过年龄层获取用户id列表 |
| | | * @author jqs |
| | | * @date 2023/8/23 18:59 |
| | | * @param ageType |
| | | * @return List<Long> |
| | | */ |
| | | @Override |
| | | public List<Long> listUserIdByAgeType(Integer ageType){ |
| | | MerTotalDto merTotalDto = new MerTotalDto(); |
| | | merTotalDto.setAgeType(ageType); |
| | | List<Long> userIdList = memberMapper.listOrderAgeUser(merTotalDto); |
| | | return userIdList; |
| | | } |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/7/5 21:18 |
| | | * @param mgtFrozenMemberDto |
| | | * @return void |
| | | */ |
| | | @Override |
| | | public void mgtFrozenMember(MgtFrozenMemberDto mgtFrozenMemberDto){ |
| | | Long userId = mgtFrozenMemberDto.getId(); |
| | | Member member = this.getByUserId(userId); |
| | | member.setFrozenFlag(mgtFrozenMemberDto.getFrozenFlag()); |
| | | this.saveOrUpdate(member); |
| | | sysUserService.frozenUser(mgtFrozenMemberDto); |
| | | } |
| | | |
| | | /** |
| | | * @description 获取用户任务列表 |
| | | * @author jqs |
| | | * @date 2023/7/12 15:07 |
| | | * @param userId |
| | | * @return List<AppIntegralTaskListVo> |
| | | */ |
| | | @Override |
| | | public List<AppIntegralTaskListVo> listAppMemberIntegralTask(Long userId){ |
| | | // 获取指定用户的会员信息 |
| | | Member member = this.getByUserId(userId); |
| | | // 获取会员的总积分信息 |
| | | MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); |
| | | // 获取其他配置信息 |
| | | AppOtherConfigGetVo appOtherConfigGetVo = remoteConfigService.getAppOtherConfigGetVo().getData(); |
| | | // 创建一个空的积分任务列表 |
| | | List<AppIntegralTaskListVo> appIntegralTaskListVoList = new ArrayList<>(); |
| | | // 创建分享小程序任务 |
| | | AppIntegralTaskListVo shareTask = new AppIntegralTaskListVo(); |
| | | shareTask.setTaskContent("分享小程序给微信好友"); |
| | | shareTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getShareIntegral() + "积分"); |
| | | shareTask.setRecommendFlag(1); |
| | | shareTask.setCompleteFlag(memberTotal.getShareFlag()); |
| | | appIntegralTaskListVoList.add(shareTask); |
| | | // 创建提交平台建议任务 |
| | | AppIntegralTaskListVo plSuggestTask = new AppIntegralTaskListVo(); |
| | | plSuggestTask.setTaskContent("提交平台建议"); |
| | | plSuggestTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getSuggestPlatformIntegral() + "积分"); |
| | | plSuggestTask.setRecommendFlag(1); |
| | | plSuggestTask.setCompleteFlag(memberTotal.getPlSuggestFlag()); |
| | | appIntegralTaskListVoList.add(plSuggestTask); |
| | | // 创建提交门店建议任务 |
| | | AppIntegralTaskListVo shopSuggestTask = new AppIntegralTaskListVo(); |
| | | shopSuggestTask.setTaskContent("提交门店建议"); |
| | | shopSuggestTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getSuggestShopIntegral() + "积分"); |
| | | shopSuggestTask.setRecommendFlag(1); |
| | | shopSuggestTask.setCompleteFlag(memberTotal.getShopSuggestFlag()); |
| | | appIntegralTaskListVoList.add(shopSuggestTask); |
| | | // 创建每日签到任务 |
| | | AppIntegralTaskListVo signTask = new AppIntegralTaskListVo(); |
| | | signTask.setTaskContent("每日签到"); |
| | | signTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getSignInIntegral() + "积分"); |
| | | signTask.setRecommendFlag(1); |
| | | signTask.setCompleteFlag(memberTotal.getSignFlag()); |
| | | appIntegralTaskListVoList.add(signTask); |
| | | // 创建消费得积分任务 |
| | | AppIntegralTaskListVo buyTask = new AppIntegralTaskListVo(); |
| | | buyTask.setTaskContent("消费得积分"); |
| | | buyTask.setTaskDesc("每消费1元+" + appOtherConfigGetVo.getPayMoneyIntegral() + "积分"); |
| | | buyTask.setRecommendFlag(1); |
| | | buyTask.setCompleteFlag(memberTotal.getBuyFlag()); |
| | | appIntegralTaskListVoList.add(buyTask); |
| | | // 返回积分任务列表 |
| | | return appIntegralTaskListVoList; |
| | | } |
| | | |
| | | /** |
| | | * @description 积分变动 |
| | | * @author jqs |
| | | * @date 2023/7/12 15:59 |
| | | * @param integralChangeDto |
| | | * @return void |
| | | */ |
| | | @Override |
| | | public Boolean changeIntegral(IntegralChangeDto integralChangeDto){ |
| | | log.info("会员积分变动---"+integralChangeDto.toString()); |
| | | Member member = this.getByUserId(integralChangeDto.getUserId()); |
| | | Integer integralType = integralChangeDto.getIntegralType(); |
| | | Integer changeIntegral = integralChangeDto.getChangeIntegral(); |
| | | MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); |
| | | Boolean completeFlag = false; |
| | | switch(integralType){ |
| | | case 1: |
| | | if(memberTotal.getShareFlag()==1){ |
| | | completeFlag = true; |
| | | } |
| | | break; |
| | | case 2: |
| | | if(memberTotal.getPlSuggestFlag()==1){ |
| | | completeFlag = true; |
| | | } |
| | | break; |
| | | case 3: |
| | | if(memberTotal.getShopSuggestFlag()==1){ |
| | | completeFlag = true; |
| | | } |
| | | break; |
| | | case 4: |
| | | if(memberTotal.getSignFlag()==1){ |
| | | completeFlag = true; |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | if(completeFlag){ |
| | | return completeFlag; |
| | | } |
| | | AppOtherConfigGetVo appOtherConfigGetVo = remoteConfigService.getAppOtherConfigGetVo().getData(); |
| | | IntegralRecord integralRecord = new IntegralRecord(); |
| | | integralRecord.setDelFlag(0); |
| | | integralRecord.setUserId(integralChangeDto.getUserId()); |
| | | integralRecord.setChangeType(integralType); |
| | | integralRecord.setCreateTime(new Date()); |
| | | //1分享获取2平台建议获取3门店建议获取4每日签到5消费得积分 |
| | | switch(integralType){ |
| | | case 1: |
| | | changeIntegral = appOtherConfigGetVo.getShareIntegral(); |
| | | integralRecord.setChangeIntegral(changeIntegral); |
| | | integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | integralRecord.setChangeReason("每日任务【分享小程序】获得积分"); |
| | | memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral); |
| | | memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | memberTotal.setShareFlag(1); |
| | | break; |
| | | case 2: |
| | | changeIntegral = appOtherConfigGetVo.getSuggestPlatformIntegral(); |
| | | integralRecord.setChangeIntegral(changeIntegral); |
| | | integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | integralRecord.setChangeReason("每日任务【提交平台建议】获得积分"); |
| | | memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral); |
| | | memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | memberTotal.setPlSuggestFlag(1); |
| | | break; |
| | | case 3: |
| | | changeIntegral = appOtherConfigGetVo.getSuggestShopIntegral(); |
| | | integralRecord.setChangeIntegral(changeIntegral); |
| | | integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | integralRecord.setChangeReason("每日任务【提交门店建议】获得积分"); |
| | | memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral); |
| | | memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | memberTotal.setShopSuggestFlag(1); |
| | | break; |
| | | case 4: |
| | | changeIntegral = appOtherConfigGetVo.getSignInIntegral(); |
| | | integralRecord.setChangeIntegral(changeIntegral); |
| | | integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | integralRecord.setChangeReason("每日任务【签到】获得积分"); |
| | | memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral); |
| | | memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | memberTotal.setSignFlag(1); |
| | | break; |
| | | case 5: |
| | | integralRecord.setChangeIntegral(changeIntegral); |
| | | integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | integralRecord.setChangeReason("订单【"+integralChangeDto.getOrderNo()+"】获得积分"); |
| | | integralRecord.setOrderId(integralChangeDto.getOrderId()); |
| | | integralRecord.setOrderNo(integralChangeDto.getOrderNo()); |
| | | memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral); |
| | | memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral); |
| | | memberTotal.setBuyFlag(1); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | memberTotalService.saveOrUpdate(memberTotal); |
| | | integralRecordService.saveOrUpdate(integralRecord); |
| | | return completeFlag; |
| | | } |
| | | |
| | | /** |
| | | * @description 统计商户今日新增会员 |
| | | * @author jqs |
| | | * @date 2023/7/14 19:54 |
| | | * @param shopIdList |
| | | * @return Integer |
| | | */ |
| | | @Override |
| | | public Integer getAreaNewMember(List<Long> shopIdList){ |
| | | return memberMapper.getAreaNewMember(shopIdList); |
| | | } |
| | | |
| | | /** |
| | | * @description 更新会员绑定商户名 |
| | | * @author jqs |
| | | * @date 2023/7/26 17:08 |
| | | * @param mgtMemberShopNameDto |
| | | * @return void |
| | | */ |
| | | @Override |
| | | public void updateMemberShopName(MgtMemberShopNameDto mgtMemberShopNameDto){ |
| | | LambdaUpdateWrapper<Member> updateWrapper = new LambdaUpdateWrapper<>(); |
| | | updateWrapper.eq(Member::getRelationShopId,mgtMemberShopNameDto.getShopId()); |
| | | updateWrapper.set(Member::getRelationShopName,mgtMemberShopNameDto.getShopName()); |
| | | this.update(updateWrapper); |
| | | } |
| | | |
| | | /** |
| | | * @description 发送生日祝福 |
| | | * @author jqs |
| | | * @date 2023/8/7 15:40 |
| | | * @param |
| | | * @return void |
| | | */ |
| | | @Override |
| | | public void sendBirthdayBless(){ |
| | | List<String> mobileList = memberMapper.listTodayBirthday(); |
| | | if(mobileList!=null&&!mobileList.isEmpty()){ |
| | | log.info("生日祝福发送短信---"+mobileList.toString()); |
| | | for(String mobile : mobileList){ |
| | | try { |
| | | MsgUtils.sendMsg(mobile,null,null); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |