rk
14 小时以前 33caf2bb79bb3c561916c91ae386ec772411e2e8
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -12,12 +12,12 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.IdentityInfoMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.OrdersMapper;
import com.doumee.dao.business.ShopInfoMapper;
import com.doumee.dao.business.SmsrecordMapper;
import com.doumee.dao.business.model.IdentityInfo;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Orders;
import com.doumee.dao.business.model.ShopInfo;
import com.doumee.dao.business.model.MemberRevenue;
import com.doumee.dao.business.model.Smsrecord;
@@ -25,8 +25,10 @@
import com.doumee.dao.dto.UpdMobileRequest;
import com.doumee.dao.dto.WxPhoneRequest;
import com.doumee.dao.vo.AccountResponse;
import com.doumee.dao.vo.MemberContactVO;
import com.doumee.dao.vo.MemberDetailVO;
import com.doumee.dao.vo.MemberListVO;
import com.doumee.dao.vo.PlatformAboutVO;
import com.doumee.dao.vo.UserCenterVO;
import com.doumee.service.business.MemberService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -45,8 +47,12 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.concurrent.TimeUnit;
@@ -64,9 +70,6 @@
    private MemberMapper memberMapper;
    @Autowired
    private IdentityInfoMapper identityInfoMapper;
    @Autowired
    private SmsrecordMapper smsrecordMapper;
    @Autowired
@@ -80,6 +83,9 @@
    @Autowired
    private ShopInfoMapper shopInfoMapper;
    @Autowired
    private OrdersMapper ordersMapper;
    @Override
@@ -129,8 +135,8 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(StringUtils.isNotBlank(member.getCoverImage())){
            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode();
            String path  = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILES).getCode();
            member.setFullCoverImage(path + member.getCoverImage());
        }
        return member;
@@ -284,8 +290,6 @@
            String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
            accountResponse.setToken(token);
            accountResponse.setMember(member);
            // 门店用户身份时,返回申请的门店状态
            fillShopInfo(accountResponse, member);
            return accountResponse;
        } catch (WxErrorException e) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "微信登录异常!请联系管理员");
@@ -323,8 +327,7 @@
                member.setDeleted(Constants.ZERO);
                member.setOpenid(wxPhoneRequest.getOpenid());
                member.setTelephone(mobile);
                member.setNickName(mobile);
//                member.setCoverImage("1.png");
                member.setNickName(mobile.substring(0, 3) + "****" + mobile.substring(7));
                member.setAmount(Constants.ZERO.longValue());
                member.setTotalAmount(Constants.ZERO.longValue());
                member.setStatus(Constants.ZERO);
@@ -333,15 +336,13 @@
                member.setReceiveNum(Constants.ZERO.longValue());
                member.setPublishNum(Constants.ZERO.longValue());
                member.setAutoReceiveStatus(Constants.ONE);
                member.setUseIdentity(Constants.ZERO);
                member.setUserType(Constants.ZERO);
                memberMapper.insert(member);
            }
            String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
            AccountResponse accountResponse = new AccountResponse();
            accountResponse.setToken(token);
            accountResponse.setMember(member);
            // 门店用户身份时,返回申请的门店状态
            fillShopInfo(accountResponse, member);
            return accountResponse;
        } catch (Exception e) {
            e.printStackTrace();
@@ -352,15 +353,50 @@
    /**
     * 门店用户身份时,填充门店审核状态
     */
    private void fillShopInfo(AccountResponse response, Member member) {
        if (Constants.TWO.equals(member.getUserType())) {
            ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
                    .eq(ShopInfo::getRegionMemberId, member.getId())
    private void fillShopInfo(UserCenterVO userCenterVO, Member member) {
        // 查询正式版本门店
        ShopInfo official = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
                .eq(ShopInfo::getRegionMemberId, member.getId())
                .eq(ShopInfo::getVersionType, Constants.ZERO)
                .eq(ShopInfo::getDeleted, Constants.ZERO)
                .last("limit 1"));
        if (official != null) {
            userCenterVO.setShopId(official.getId());
            if (Constants.equalsInteger(official.getAuditStatus(), Constants.THREE)) {
                // 正式版本已支付押金,查询最新变更版本状态
                ShopInfo changeVersion = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
                        .eq(ShopInfo::getRelationShopId, official.getId())
                        .eq(ShopInfo::getVersionType, Constants.ONE)
                        .eq(ShopInfo::getDeleted, Constants.ZERO)
                        .orderByDesc(ShopInfo::getCreateTime)
                        .last("limit 1"));
                if (changeVersion != null) {
                    if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.THREE)) {
                        userCenterVO.setShopAuditStatus(Constants.THREE);
                    } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.ZERO)) {
                        userCenterVO.setShopAuditStatus(4); // 变更中
                    } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.TWO)) {
                        userCenterVO.setShopAuditStatus(5); // 变更未通过
                    } else {
                        userCenterVO.setShopAuditStatus(Constants.THREE);
                    }
                } else {
                    // 无变更版本,保持正式版本状态
                    userCenterVO.setShopAuditStatus(Constants.THREE);
                }
            } else {
                // 正式版本未支付押金,直接返回当前状态
                userCenterVO.setShopAuditStatus(official.getAuditStatus());
            }
        }
        // 根据openid查询当前绑定的门店
        if (StringUtils.isNotBlank(member.getOpenid())) {
            ShopInfo bindShop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
                    .eq(ShopInfo::getOpenid, member.getOpenid())
                    .eq(ShopInfo::getDeleted, Constants.ZERO)
                    .last("limit 1"));
            if (shopInfo != null) {
                response.setShopId(shopInfo.getId());
                response.setShopAuditStatus(shopInfo.getAuditStatus());
            if (bindShop != null) {
                userCenterVO.setBindShopId(String.valueOf(bindShop.getId()));
            }
        }
    }
@@ -385,81 +421,97 @@
    }
//    @Override
//    public void editUseIdentity(Member member){
//        if(Objects.isNull(member)
//                || Objects.isNull(member.getUseIdentity())){
//            throw new BusinessException(ResponseStatus.BAD_REQUEST);
//        }
//        if(Constants.equalsInteger(member.getUseIdentity(),Constants.ZERO)){
//            member.setUseIdentity(Constants.ZERO);
//            memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ZERO).eq(Member::getId,member.getId()));
//        }else{
//            if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO)
//                    .eq(IdentityInfo::getMemberId,member.getId())
//                    .eq(IdentityInfo::getAuditStatus,Constants.TWO))>Constants.ZERO){
//                memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ONE).eq(Member::getId,member.getId()));
//            }else{
//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前无可用接单身份!");
//            }
//        }
//    }
    @Override
    public Member getMemberInfo(Integer memberId){
        Member member  = this.findById(memberId);
    public UserCenterVO getMemberInfo(Integer memberId){
        Member member  = memberMapper.selectById(memberId);
        if(Objects.isNull(member)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(StringUtils.isNotBlank(member.getCoverImage())){
            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode();
            member.setFullCoverImage(path + member.getCoverImage());
        }
//        UserCenterVO userCenterVO = new UserCenterVO();
//        userCenterVO.setReleaseTaskTotal(Constants.ZERO);
//        userCenterVO.setWaitReceiveTotal(Constants.ZERO);
//        userCenterVO.setDoingTotal(Constants.ZERO);
//        userCenterVO.setWaitCommentTotal(Constants.ZERO);
//        userCenterVO.setTaskingTotal(Constants.ZERO);
//        userCenterVO.setDoneTotal(Constants.ZERO);
//        userCenterVO.setReceiveTotal(Constants.ZERO);
//        List<Orders> releaseOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO)
//                .eq(Orders::getReleaseMemberId,member.getId()));
//        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(releaseOrders)){
//            userCenterVO.setReleaseTaskTotal(releaseOrders.size());
//            userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
//            userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
//            userCenterVO.setWaitReceiveTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.wait.getKey())).collect(Collectors.toList()).size());
//        }
//        List<Orders> acceptOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getAcceptMemberId,member.getId()));
//        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(acceptOrders)){
//            userCenterVO.setReceiveTotal(acceptOrders.size());
//            userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())).collect(Collectors.toList()).size());
//            userCenterVO.setDoneTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.done.getKey())).collect(Collectors.toList()).size());
//        }
//        member.setUserCenterVO(userCenterVO);
        return member;
    }
    @Override
    public UserCenterVO getPlatformAboutUs(){
        // 用户中心数据
        UserCenterVO userCenterVO = new UserCenterVO();
        userCenterVO.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
        userCenterVO.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode()));
        userCenterVO.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode()));
        userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
        userCenterVO.setNickName(member.getNickName());
        userCenterVO.setName(member.getName());
        userCenterVO.setTelephone(member.getTelephone());
        userCenterVO.setCoverImage(member.getCoverImage());
        userCenterVO.setOpenid(member.getOpenid());
        if(StringUtils.isNotBlank(member.getCoverImage())){
            String path  = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILES).getCode();
            userCenterVO.setFullCoverImage(path + member.getCoverImage());
        }
        userCenterVO.setHasMessage(false);
        // 待支付订单数量
        Long waitPayCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getMemberId, memberId)
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getStatus, Constants.OrderStatus.waitPay.getStatus()));
        userCenterVO.setWaitPayCount(waitPayCount.intValue());
        // 待收货订单数量
        int[] waitReceiveStatuses = Constants.OrderCombinedStatus.waitReceive.getStatuses();
        Long waitReceiveCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getMemberId, memberId)
                .eq(Orders::getDeleted, Constants.ZERO)
                .in(Orders::getStatus, Arrays.stream(waitReceiveStatuses).boxed().collect(Collectors.toList())));
        userCenterVO.setWaitReceiveCount(waitReceiveCount.intValue());
        // 退款中订单数量
        Long refundingCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getMemberId, memberId)
                .eq(Orders::getDeleted, Constants.ZERO)
                .eq(Orders::getStatus, 98));
        userCenterVO.setRefundingCount(refundingCount.intValue());
        // 门店用户身份时,返回申请的门店状态
        fillShopInfo(userCenterVO, member);
        return userCenterVO;
    }
    @Override
    public void logOut(String token,Integer memberId){
        memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" openid = null ").eq(Member::getId,memberId));
        jwtTokenUtil.logoutForH5(token);
    public PlatformAboutVO getPlatformAboutUs(){
        PlatformAboutVO vo = new PlatformAboutVO();
        vo.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
        vo.setStoreRiskCommitment(getDictValue(Constants.STORE_RISK_COMMITMENT));
        vo.setStoreCooperationAgreement(getDictValue(Constants.STORE_COOPERATION_AGREEMENT));
        vo.setStoreLuggageStorageNotice(getDictValue(Constants.STORE_LUGGAGE_STORAGE_NOTICE));
        vo.setStorePrivacyPolicy(getDictValue(Constants.STORE_PRIVACY_POLICY));
        vo.setOwnerLuggageStorageNotice(getDictValue(Constants.OWNER_LUGGAGE_STORAGE_NOTICE));
        vo.setOwnerServiceAgreement(getDictValue(Constants.OWNER_SERVICE_AGREEMENT));
        vo.setOwnerRiskCommitment(getDictValue(Constants.OWNER_RISK_COMMITMENT));
        vo.setErrandRiskCommitment(getDictValue(Constants.ERRAND_RISK_COMMITMENT));
        vo.setErrandServiceAgreement(getDictValue(Constants.ERRAND_SERVICE_AGREEMENT));
        vo.setErrandLuggageStorageNotice(getDictValue(Constants.ERRAND_LUGGAGE_STORAGE_NOTICE));
        vo.setUserServiceAgreement(getDictValue(Constants.USER_SERVICE_AGREEMENT));
        vo.setUserPrivacyPolicy(getDictValue(Constants.USER_PRIVACY_POLICY));
        vo.setDriverPrivacyPolicy(getDictValue(Constants.DRIVER_PRIVACY_POLICY));
        vo.setPriceDescription(getDictValue(Constants.PRICE_DESCRIPTION));
        vo.setProhibitedItems(getDictValue(Constants.PROHIBITED_ITEMS));
        vo.setServerPhone(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SERVER_PHONE).getCode()));
        return vo;
    }
    private String getDictValue(String key) {
        try {
            return StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM, key).getCode());
        } catch (Exception e) {
            return null;
        }
    }
    @Override
    public void logOut(String token,Integer userId,Integer userType){
        if(Constants.equalsInteger(userType,Constants.ZERO)){
            memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" openid = null ").eq(Member::getId,userId));
        }else if (Constants.equalsInteger(userType,Constants.TWO)){
            try {
                Integer lastIndex = token.lastIndexOf("_")+1;
                Integer tokenId = Integer.valueOf(token.substring(lastIndex));
                memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" LOGIN_SHOP_ID = null ").eq(Member::getId,tokenId));
            }catch (Exception e){
            }
        }
        jwtTokenUtil.logout(token);
    }
@@ -474,6 +526,31 @@
            );
        }
        redisTemplate.delete(token);
    }
    @Override
    public MemberContactVO getContactInfo(Integer memberId) {
        MemberContactVO vo = new MemberContactVO();
        // 优先从历史订单取收件人信息
        Orders lastOrder = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda()
                .eq(Orders::getMemberId, memberId)
                .eq(Orders::getDeleted, Constants.ZERO)
                .isNotNull(Orders::getTakeUser)
                .ne(Orders::getTakeUser, "")
                .orderByDesc(Orders::getId)
                .last("limit 1"));
        if (lastOrder != null && StringUtils.isNotBlank(lastOrder.getTakeUser())) {
            vo.setName(lastOrder.getTakeUser());
            vo.setPhone(lastOrder.getTakePhone());
            return vo;
        }
        // 取用户信息
        Member member = memberMapper.selectById(memberId);
        if (member != null) {
            vo.setName(member.getName() != null ? member.getName() : "");
            vo.setPhone(member.getTelephone() != null ? member.getTelephone() : "");
        }
        return vo;
    }
@@ -502,13 +579,7 @@
                queryWrapper.lambda().le(Member::getCreateTime, Utils.Date.getEnd(query.getEndTime()));
            }
        }
        for (PageWrap.SortData sortData : pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        queryWrapper.lambda().orderByDesc(Member::getId);
        IPage<Member> memberPage = memberMapper.selectPage(page, queryWrapper);
        IPage<MemberListVO> voPage = memberPage.convert(this::toListVO);
        return PageData.from(voPage);
@@ -543,8 +614,8 @@
        detail.setArea(member.getArea());
        detail.setAutoReceiveStatus(member.getAutoReceiveStatus());
        if (StringUtils.isNotBlank(member.getCoverImage())) {
            String path = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
                    + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.MEMBER_FILES).getCode();
            String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                    + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
            detail.setFullCoverImage(path + member.getCoverImage());
        }
        return detail;
@@ -614,7 +685,10 @@
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        //判断新手机号是否已被使用
        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda().eq(Member::getTelephone,request.getPhone()))>Constants.ZERO){
        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
                        .eq(Member::getDeleted,Constants.ZERO)
                        .eq(Member::getUserType,Constants.ZERO)
                .eq(Member::getTelephone,request.getPhone()))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,新手机号已被绑定,无法进行换绑!");
        }
        Member member = memberMapper.selectById(request.getMemberId());