From ae41759bafec1c2a1e8858fcdcda4272ed4eb84c Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期五, 16 六月 2023 17:43:47 +0800 Subject: [PATCH] 联调bug和订单管理 --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 347 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 327 insertions(+), 20 deletions(-) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java index b5c088f..8645b64 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java @@ -1,5 +1,4 @@ package com.ruoyi.member.service.impl.member; -import java.util.Date; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; @@ -9,43 +8,40 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.domain.dto.*; +import com.ruoyi.member.domain.pojo.member.IntegralRecord; import com.ruoyi.member.domain.pojo.member.MemberNurse; import com.ruoyi.member.domain.pojo.member.MemberTotal; import com.ruoyi.member.domain.vo.*; import com.ruoyi.member.mapper.member.MemberMapper; -import com.ruoyi.member.service.member.MemberNurseService; -import com.ruoyi.member.service.member.MemberService; -import com.ruoyi.member.service.member.MemberTotalService; +import com.ruoyi.member.service.member.*; import com.ruoyi.member.util.HttpUtils; -import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto; -import com.ruoyi.system.api.domain.vo.AppMiniRegisterVo; -import com.ruoyi.system.api.service.RemoteConfigService; -import com.ruoyi.system.api.service.RemoteOrderService; -import com.ruoyi.system.api.service.RemoteShopService; -import com.ruoyi.system.api.service.RemoteUserService; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.SecurityConstant; -import com.ruoyi.system.api.domain.dto.AppEditUserDto; -import com.ruoyi.system.api.domain.dto.AppMemberBindingDto; -import com.ruoyi.system.api.domain.dto.AppMemberGoodsTypeDto; +import com.ruoyi.system.api.domain.dto.*; +import com.ruoyi.system.api.domain.poji.config.Activeness; import com.ruoyi.system.api.domain.poji.config.SysTag; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.poji.sys.SysUser; -import com.ruoyi.system.api.domain.vo.AppOrderTotalVo; +import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.model.AppMiniLoginDto; import com.ruoyi.system.api.model.AppMiniLoginVo; +import com.ruoyi.system.api.service.RemoteConfigService; +import com.ruoyi.system.api.service.RemoteOrderService; +import com.ruoyi.system.api.service.RemoteShopService; +import com.ruoyi.system.api.service.RemoteUserService; import lombok.extern.log4j.Log4j2; -import com.ruoyi.common.core.utils.StringUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -99,6 +95,13 @@ @Resource private MemberTotalService memberTotalService; + + @Resource + private IntegralRecordService integralRecordService; + + @Resource + private MemberArchiveService memberArchiveService; + /** * @description: TODO @@ -209,8 +212,9 @@ //获取用户为空则新建 if(member == null){ //创建新用户 + String memberId = IdUtils.simpleUUID(); sysUser = new SysUser(); - sysUser.setUserName(mobile+"-3"); + sysUser.setUserName(memberId); sysUser.setUserType("03"); sysUser.setNickName("鸿瑞堂用户"); sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); @@ -218,11 +222,13 @@ sysUser.setPassword(SecurityUtils.encryptPassword(password)); sysUser = sysUserService.registerUser(sysUser).getData(); member = new Member(); - String memberId = IdUtils.simpleUUID(); + String memberNo = createMemberNo(); + member.setMemberNo(memberNo); member.setUserId(sysUser.getUserId()); member.setDelFlag(0); member.setNickName("鸿瑞堂用户"); member.setRealName("鸿瑞堂用户"); + member.setCustomerSource("小程序"); member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); member.setMemberId(memberId); member.setBindingFlag(0); @@ -387,6 +393,7 @@ Member member = this.getByUserId(appMemberBindingDto.getUserId()); member.setBindingFlag(appMemberBindingDto.getBindingFlag()); member.setRelationShopId(appMemberBindingDto.getShopId()); + member.setRelationShopName(appMemberBindingDto.getShopName()); this.saveOrUpdate(member); } @@ -474,8 +481,9 @@ } SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData(); if(sysUser==null){ + String memberId = IdUtils.simpleUUID(); sysUser = new SysUser(); - sysUser.setUserName(phonenumber+"-3"); + sysUser.setUserName(memberId); sysUser.setUserType("03"); sysUser.setNickName(merMemberAddDto.getNickName()); sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); @@ -483,8 +491,9 @@ sysUser.setPassword(SecurityUtils.encryptPassword(password)); log.debug("sysUser"+sysUser.toString()); sysUser = sysUserService.registerUser(sysUser).getData(); - String memberId = IdUtils.simpleUUID(); Member member = new Member(); + String memberNo = createMemberNo(); + member.setMemberNo(memberNo); member.setMemberId(memberId); member.setUserId(sysUser.getUserId()); member.setDelFlag(0); @@ -500,6 +509,7 @@ member.setMiniOpenid(null); member.setBindingFlag(1); member.setRelationShopId(merMemberAddDto.getShopId()); + member.setCustomerSource("商户添加"); member.setCreateTime(new Date()); log.info("member-----------------"+member.toString()); this.saveOrUpdate(member); @@ -589,10 +599,13 @@ */ @Override public void createNewMember(Member member){ + String memberNo = createMemberNo(); + member.setMemberNo(memberNo); member.setDelFlag(0); member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); member.setBindingFlag(0); member.setCreateTime(new Date()); + member.setCustomerSource("商户订单添加"); this.saveOrUpdate(member); initMemberTotal(member.getMemberId()); } @@ -622,4 +635,298 @@ memberTotal.setTotalGoodsOrder(0); memberTotalService.saveOrUpdate(memberTotal); } + + /** + * 生成会员编号 + * @return + */ + private String createMemberNo(){ + int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>()); + String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1)); + return memberNo; + } + + + /** + * 平台分页获取会员列表 + * @param page + * @param merMemberPageDto + * @return + */ + @Override + public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){ + List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); + Date nowDay = new Date(); + if(merMemberPageDto.getActivenessId()!=null){ + //处理活跃度筛选 + activenessList.stream() + .filter(activeness -> activeness.getActivenessId().equals(merMemberPageDto.getActivenessId())) + .findFirst() + .ifPresent(activeness -> { + merMemberPageDto.setActStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getEndDay()))); + merMemberPageDto.setActEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getStartDay()))); + }); + } + //处理标签为正则表达 + if(StringUtils.isNotBlank(merMemberPageDto.getMemberTags())){ + merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",","|")); + } + //查询获取结果列表 + List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto); + //处理活跃度返回 + if(memberPageVoList!=null&&!memberPageVoList.isEmpty()){ + if(activenessList!=null&&!activenessList.isEmpty()){ + //生成活跃度时间段列表 + List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>(); + MgtActivenessJudgeVo mgtActivenessJudgeVo; + for(Activeness activeness : activenessList){ + mgtActivenessJudgeVo = new MgtActivenessJudgeVo(); + mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(),activeness.getEndDay())); + mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(),activeness.getStartDay()-1)); + mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName()); + } + //活跃度赋值 + Date lastPayTime; + for(MgtMemberPageVo mgtMemberPageVo : memberPageVoList){ + lastPayTime = mgtMemberPageVo.getLastPayTime(); + StringJoiner sj = new StringJoiner(","); + if(lastPayTime!=null){ + for(MgtActivenessJudgeVo entity: mgtActivenessJudgeVoList){ + if(lastPayTime.compareTo(entity.getStartDay())>=0&&lastPayTime.compareTo(entity.getEndDay())<=0){ + sj.add(entity.getActivenessName()); + } + } + if(sj.length()>0){ + mgtMemberPageVo.setActiveness(sj.toString()); + } + } + } + } + } + return memberPageVoList; + } + + + /** + * 修改会员关联商户 + * @param mgtMemberRelEditDto + */ + @Override + public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto){ + if(StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())){ + Shop shop = shopService.getShop(mgtMemberRelEditDto.getShopId()).getData(); + String memberUserIds = mgtMemberRelEditDto.getMemberUserIds(); + String[] memberUserIdArr = memberUserIds.split(","); + for(String str : memberUserIdArr){ + Member member = this.getByUserId(Long.valueOf(str)); + member.setRelationShopId(shop.getShopId()); + member.setRelationShopName(shop.getShopName()); + member.setBindingFlag(1); + member.setUpdateTime(new Date()); + member.setUpdateUserId(mgtMemberRelEditDto.getUserId()); + this.saveOrUpdate(member); + } + } + } + + + /** + * 删除会员关联商户 + * @param mgtMemberRelDelDto + */ + @Override + public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto){ + if(StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) { + String memberUserIds = mgtMemberRelDelDto.getMemberUserIds(); + String[] memberUserIdArr = memberUserIds.split(","); + for(String str : memberUserIdArr) { + Member member = this.getById(Long.valueOf(str)); + member.setBindingFlag(0); + member.setUpdateTime(new Date()); + member.setUpdateUserId(mgtMemberRelDelDto.getUserId()); + this.saveOrUpdate(member); + } + } + } + + /** + * 修改会员积分 + * @param mgtMemberIntEditDto + */ + @Override + public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto){ + if(StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) { + String memberUserIds = mgtMemberIntEditDto.getMemberUserIds(); + String[] memberUserIdArr = memberUserIds.split(","); + MemberIntegralChangeDto memberIntegralChangeDto; + for(String str : memberUserIdArr) { + memberIntegralChangeDto = new MemberIntegralChangeDto(); + Member member = this.getByUserId(Long.valueOf(str)); + memberIntegralChangeDto.setUserId(Long.valueOf(str)); + memberIntegralChangeDto.setMemberId(member.getMemberId()); + memberIntegralChangeDto.setChangeType(1); + memberIntegralChangeDto.setRecordType(3); + memberIntegralChangeDto.setIntegral(mgtMemberIntEditDto.getIntegral()); + //调用积分变动 + memberIntegralChange(memberIntegralChangeDto); + } + } + } + + + + /** + * 会员积分变动 + * @param memberIntegralChangeDto + */ + @Override + public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto){ + MemberTotal memberTotal = memberTotalService.getById(memberIntegralChangeDto.getMemberId()); + Integer recordType = memberIntegralChangeDto.getRecordType(); + Integer changeType = memberIntegralChangeDto.getChangeType(); + Integer integer = memberIntegralChangeDto.getIntegral(); + Integer totalIntegral = memberTotal.getTotalIntegral(); + Integer usedIntegral = memberTotal.getUsedIntegral(); + Integer useableIntegral = memberTotal.getUseableIntegral(); + //变动统计 + if(changeType==1){ + totalIntegral = totalIntegral + integer; + useableIntegral = useableIntegral + integer; + memberTotal.setTotalIntegral(totalIntegral); + memberTotal.setUseableIntegral(useableIntegral); + }else if(changeType==2){ + usedIntegral = usedIntegral + integer; + useableIntegral = useableIntegral - integer; + if(useableIntegral<0){ + throw new ServiceException(AppErrorConstant.INTEGRAL_USE_FAILED); + } + memberTotal.setTotalIntegral(totalIntegral); + memberTotal.setUseableIntegral(useableIntegral); + memberTotal.setUsedIntegral(usedIntegral); + } + memberTotalService.saveOrUpdate(memberTotal); + //记录变动 + IntegralRecord integralRecord = new IntegralRecord(); + integralRecord.setDelFlag(0); + integralRecord.setUserId(memberIntegralChangeDto.getUserId()); + integralRecord.setChangeType(recordType); + if(changeType==1){ + integralRecord.setChangeIntegral(integer); + }else if(changeType==2){ + integralRecord.setChangeIntegral( 0-integer); + } + integralRecord.setSurpIntegral(useableIntegral); + integralRecord.setCreateTime(new Date()); + integralRecord.setOrderId(memberIntegralChangeDto.getOrderId()); + integralRecord.setOrderNo(memberIntegralChangeDto.getOrderNo()); + switch (recordType){ + case 1: + integralRecord.setChangeReason("购物赠送"); + break; + case 2: + integralRecord.setChangeReason("活动赠送"); + break; + case 3: + integralRecord.setChangeReason("平台赠送"); + break; + default: + break; + } + integralRecordService.saveOrUpdate(integralRecord); + } + + /** + * 平台获取会员信息 + * @param userId + * @return + */ + @Override + public MgtMemberGetVo getMgtMemberInfo(Long userId){ + MgtMemberGetVo mgtMemberGetVo = new MgtMemberGetVo(); + Member member = this.getByUserId(userId); + MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); + List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listVoByUserId(member.getUserId()); + if(memberArchiveVoList!=null&&!memberArchiveVoList.isEmpty()){ + //去掉未完善信息 + memberArchiveVoList.removeIf(o -> Objects.isNull(o.getFieldValue())); + } + mgtMemberGetVo.setMemberId(member.getMemberId()); + mgtMemberGetVo.setUserId(member.getUserId()); + mgtMemberGetVo.setMemberNo(member.getMemberNo()); + mgtMemberGetVo.setRealName(member.getRealName()); + mgtMemberGetVo.setNickName(member.getNickName()); + mgtMemberGetVo.setMobile(member.getMobile()); + mgtMemberGetVo.setGender(member.getGender()==0 ? "男" : member.getGender()==1 ? "女" : null); + mgtMemberGetVo.setBirthday(member.getBirthday()); + mgtMemberGetVo.setBelongDistrict(member.getBelongDistrict()); + mgtMemberGetVo.setCreateTime(member.getCreateTime()); + mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime()); + mgtMemberGetVo.setGoodsType(member.getGoodsType()); + mgtMemberGetVo.setRelationShopName(member.getRelationShopName()); + mgtMemberGetVo.setIntegral(memberTotal.getTotalIntegral()); + mgtMemberGetVo.setMemberFrom(member.getCustomerSource()); + mgtMemberGetVo.setTotalActivityCount(memberTotal.getTotalActivityCount()); + mgtMemberGetVo.setTotalPayMoney(memberTotal.getTotalPayMoney()); + mgtMemberGetVo.setMemberRemark(null); + mgtMemberGetVo.setMemberArchiveVoList(memberArchiveVoList); + mgtMemberGetVo.setMemberTags(member.getUserTags()); + return mgtMemberGetVo; + } + + /** + * @description 删除标签 + * @author jqs + * @date 2023/6/8 15:18 + * @param memberTag + * @return void + */ + @Override + public void deleteMemberTag(String memberTag){ + memberMapper.deleteMemberTag(memberTag); + } + + /** + * @description 通过发送类型获取userId + * @author jqs + * @date 2023/6/13 17:53 + * @param sendType + * @return List<Long> + */ + @Override + public List<Long> listIdBySendType(Integer sendType){ + //1.手动领取2.全部用户3.会员用户4非会员用户5自定义 + return memberMapper.listIdBySendType(sendType); + } + + /** + * @description 通过ids获取用户简易返回 + * @author jqs + * @date 2023/6/16 11:06 + * @param userIds + * @return List<MgtSimpleMemberVo> + */ + @Override + public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds){ + return memberMapper.listSimpleVoByIds(userIds); + } + + /** + * @description + * @author jqs + * @date 2023/6/16 12:41 + * @param mgtUserIdByKeywordDto + * @return MgtUserIdByKeywordVo + */ + @Override + public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto){ + MgtUserIdByKeywordVo mgtUserIdByKeywordVo = new MgtUserIdByKeywordVo(); + List<Long> userIdList = memberMapper.getUserIdByKeyword(mgtUserIdByKeywordDto); + if(userIdList!=null&&!userIdList.isEmpty()){ + String userIdStr = userIdList.stream() + .map(Object::toString) + .collect(Collectors.joining(",")); + mgtUserIdByKeywordVo.setUserIds(userIdStr); + } + return mgtUserIdByKeywordVo; + } } -- Gitblit v1.7.1