bug
jiangqs
2023-07-26 add86a49cc69b6882500c95dd67a2ac826c35526
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -4,6 +4,7 @@
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;
@@ -21,7 +22,10 @@
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.*;
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.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.constant.SecurityConstant;
@@ -46,6 +50,8 @@
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;
@@ -84,8 +90,6 @@
    @Resource
    private RemoteOrderService orderService;
    @Resource
    private MemberNurseService memberNurseService;
    @Resource
    private RemoteConfigService remoteConfigService;
@@ -196,7 +200,26 @@
            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);
@@ -222,6 +245,7 @@
            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));
@@ -231,6 +255,7 @@
            member.setMemberNo(memberNo);
            member.setUserId(sysUser.getUserId());
            member.setDelFlag(0);
            member.setFrozenFlag(0);
            member.setNickName("鸿瑞堂用户");
            member.setRealName("鸿瑞堂用户");
            member.setCustomerSource("小程序");
@@ -325,27 +350,22 @@
        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:
                member.setBirthday(editValue);
                member.setUpdateTime(new Date());
                member.setUpdateUserId(appEditUserDto.getUserId());
                this.saveOrUpdate(member);
                break;
            default:
                break;
        }
        member.setUpdateTime(new Date());
        member.setUpdateUserId(appEditUserDto.getUserId());
        this.saveOrUpdate(member);
        sysUserService.editUserInfo(appEditUserDto);
    }
@@ -601,6 +621,7 @@
            member.setMemberId(memberId);
            member.setUserId(sysUser.getUserId());
            member.setDelFlag(0);
            member.setFrozenFlag(0);
            member.setNickName(merMemberAddDto.getNickName());
            member.setRealName(merMemberAddDto.getNickName());
            member.setGender(merMemberAddDto.getGender());
@@ -708,24 +729,51 @@
     */
    @Override
    public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto) {
        // 根据用户ID获取会员信息
        Member member = this.getByUserId(appMemberGoodsTypeDto.getUserId());
        // 获取商品类型集合和商品护理集合
        HashSet<String> goodsTypeSet = appMemberGoodsTypeDto.getGoodsTypeSet();
        HashSet<String> goodsNurseSet = appMemberGoodsTypeDto.getGoodsNurseSet();
        // 如果会员存在
        if (member != null) {
            String goodsType = member.getGoodsType();
            // 标识是否有变化
            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;
                    change = true;
                }
                goodsTypeOldSet.addAll(goodsTypeSet);
                member.setGoodsType(String.join(",", goodsTypeOldSet));
            }
            // 更新商品护理
            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) {
                member.setGoodsType(goodsType);
                this.saveOrUpdate(member);
            }
        }
@@ -742,8 +790,8 @@
        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);
@@ -819,6 +867,19 @@
        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());
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            merMemberPageDto.setStartBirthday(startBirthday.format(formatter));
        }
        //查询获取结果列表
        List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto);
        //处理活跃度返回
@@ -875,6 +936,7 @@
                member.setUpdateTime(new Date());
                member.setUpdateUserId(mgtMemberRelEditDto.getUserId());
                this.saveOrUpdate(member);
                memberMapper.updateById(member);
            }
        }
    }
@@ -1010,7 +1072,15 @@
        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());
@@ -1152,6 +1222,12 @@
            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) {
@@ -1257,6 +1333,12 @@
        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);
@@ -1514,6 +1596,12 @@
            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) {
@@ -1649,12 +1737,16 @@
     * @description
     * @author  jqs
     * @date    2023/7/5 21:18
     * @param mgtBaseGetDto
     * @param mgtFrozenMemberDto
     * @return  void
     */
    @Override
    public void mgtFrozenMember(MgtBaseGetDto mgtBaseGetDto){
        sysUserService.frozenUser(Long.valueOf(mgtBaseGetDto.getId()));
    public void mgtFrozenMember(MgtFrozenMemberDto mgtFrozenMemberDto){
        Long userId = mgtFrozenMemberDto.getId();
        Member member = this.getByUserId(userId);
        member.setFrozenFlag(mgtFrozenMemberDto.getFrozenFlag());
        this.saveOrUpdate(member);
        sysUserService.frozenUser(mgtFrozenMemberDto);
    }
    /**
@@ -1765,7 +1857,7 @@
            case 1:
                changeIntegral = appOtherConfigGetVo.getShareIntegral();
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(integralRecord.getSurpIntegral()+changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("每日任务【分享小程序】获得积分");
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
@@ -1774,7 +1866,7 @@
            case 2:
                changeIntegral = appOtherConfigGetVo.getSuggestPlatformIntegral();
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(integralRecord.getSurpIntegral()+changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("每日任务【提交平台建议】获得积分");
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
@@ -1783,7 +1875,7 @@
            case 3:
                changeIntegral = appOtherConfigGetVo.getSuggestShopIntegral();
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(integralRecord.getSurpIntegral()+changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("每日任务【提交门店建议】获得积分");
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
@@ -1792,7 +1884,7 @@
            case 4:
                changeIntegral = appOtherConfigGetVo.getSignInIntegral();
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(integralRecord.getSurpIntegral()+changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("每日任务【签到】获得积分");
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
@@ -1800,7 +1892,7 @@
                break;
            case 5:
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(integralRecord.getSurpIntegral()+changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("订单【"+integralChangeDto.getOrderNo()+"】获得积分");
                integralRecord.setOrderId(integralChangeDto.getOrderId());
                integralRecord.setOrderNo(integralChangeDto.getOrderNo());
@@ -1815,4 +1907,31 @@
        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);
    }
}