rk
7 小时以前 55642c818f14bf8cf52c98e6858014bd8dc3d3a7
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -12,13 +12,22 @@
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.model.IdentityInfo;
import com.doumee.dao.business.OrdersMapper;
import com.doumee.dao.business.ShopInfoMapper;
import com.doumee.dao.business.SmsrecordMapper;
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;
import com.doumee.dao.dto.MemberListQueryDTO;
import com.doumee.dao.dto.UpdMobileRequest;
import com.doumee.dao.dto.WxPhoneRequest;
import com.doumee.dao.vo.AccountResponse;
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;
@@ -37,6 +46,7 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -56,7 +66,7 @@
    private MemberMapper memberMapper;
    @Autowired
    private IdentityInfoMapper identityInfoMapper;
    private SmsrecordMapper smsrecordMapper;
    @Autowired
    private JwtTokenUtil jwtTokenUtil;
@@ -66,6 +76,12 @@
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Autowired
    private ShopInfoMapper shopInfoMapper;
    @Autowired
    private OrdersMapper ordersMapper;
    @Override
@@ -115,8 +131,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;
@@ -178,15 +194,6 @@
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().like(Member::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getWorkerIdentity() != null) {
            queryWrapper.lambda().eq(Member::getWorkerIdentity, pageWrap.getModel().getWorkerIdentity());
        }
        if (pageWrap.getModel().getDriverIdentity() != null) {
            queryWrapper.lambda().eq(Member::getDriverIdentity, pageWrap.getModel().getDriverIdentity());
        }
        if (pageWrap.getModel().getChefIdentity() != null) {
            queryWrapper.lambda().eq(Member::getChefIdentity, pageWrap.getModel().getChefIdentity());
        }
        if (pageWrap.getModel().getAmount() != null) {
            queryWrapper.lambda().eq(Member::getAmount, pageWrap.getModel().getAmount());
        }
@@ -224,12 +231,6 @@
        if (pageWrap.getModel().getArea() != null) {
            queryWrapper.lambda().eq(Member::getArea, pageWrap.getModel().getArea());
        }
        //如果查询接单方
        queryWrapper.lambda().and(Constants.equalsInteger(pageWrap.getModel().getType(),Constants.ONE ),w1->{
            w1.eq(Member::getWorkerIdentity,Constants.TWO )
                    .or().eq(Member::getChefIdentity,Constants.TWO )
                    .or().eq(Member::getDriverIdentity,Constants.TWO );
        });
        queryWrapper.lambda().ge(pageWrap.getModel().getStartTime()!=null, Member::getCreateTime,pageWrap.getModel().getStartTime());
        queryWrapper.lambda().le(pageWrap.getModel().getEndTime()!=null,Member::getCreateTime,pageWrap.getModel().getEndTime());
@@ -270,8 +271,10 @@
            if (StringUtils.isBlank(openId)) {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "获取openid失败!请联系管理员");
            }
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenid, openId).eq(Member::getUserType,Constants.ZERO)
                    .eq(Member::getDeleted, Constants.ZERO).ne(Member::getStatus, Constants.TWO).last("limit 1"));
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenid, openId)
                    .ne(Member::getUserType,Constants.ONE)
                    .eq(Member::getDeleted, Constants.ZERO)
                    .ne(Member::getStatus, Constants.TWO).last("limit 1"));
            AccountResponse accountResponse = new AccountResponse();
            accountResponse.setOpenid(openId);
            if(Objects.isNull(member)){
@@ -283,13 +286,13 @@
            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(), "微信登录异常!请联系管理员");
        }
    }
    @Override
@@ -305,7 +308,9 @@
            if(Objects.isNull(mobile)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未获取到手机号");
            }
            Member member =  memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getTelephone,mobile).eq(Member::getUserType,Constants.ZERO)
            Member member =  memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                    .eq(Member::getTelephone,mobile)
                    .ne(Member::getUserType,Constants.ONE)
                    .ne(Member::getStatus, Constants.TWO).last("limit 1"));
            if(Objects.nonNull(member)){
                if(!Constants.equalsInteger(member.getStatus(),Constants.ZERO)){
@@ -320,11 +325,7 @@
                member.setDeleted(Constants.ZERO);
                member.setOpenid(wxPhoneRequest.getOpenid());
                member.setTelephone(mobile);
                member.setNickName(mobile);
//                member.setCoverImage("1.png");
                member.setWorkerIdentity(Constants.ZERO);
                member.setDriverIdentity(Constants.ZERO);
                member.setChefIdentity(Constants.ZERO);
                member.setNickName(mobile.substring(0, 3) + "****" + mobile.substring(7));
                member.setAmount(Constants.ZERO.longValue());
                member.setTotalAmount(Constants.ZERO.longValue());
                member.setStatus(Constants.ZERO);
@@ -340,6 +341,8 @@
            AccountResponse accountResponse = new AccountResponse();
            accountResponse.setToken(token);
            accountResponse.setMember(member);
            // 门店用户身份时,返回申请的门店状态
            fillShopInfo(accountResponse, member);
            return accountResponse;
        } catch (Exception e) {
            e.printStackTrace();
@@ -347,6 +350,21 @@
        }
    }
    /**
     * 门店用户身份时,填充门店审核状态
     */
    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())
                    .eq(ShopInfo::getDeleted, Constants.ZERO)
                    .last("limit 1"));
            if (shopInfo != null) {
                response.setShopId(shopInfo.getId());
                response.setShopAuditStatus(shopInfo.getAuditStatus());
            }
        }
    }
    @Override
@@ -368,78 +386,51 @@
    }
//    @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);
        }
        // 用户中心数据
        UserCenterVO userCenterVO = new UserCenterVO();
        userCenterVO.setNickName(member.getNickName());
        userCenterVO.setName(member.getName());
        userCenterVO.setTelephone(member.getTelephone());
        userCenterVO.setCoverImage(member.getCoverImage());
        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());
            String path  = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILES).getCode();
            userCenterVO.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;
        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());
        return userCenterVO;
    }
    @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.setFeeStandards(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FEE_STANDARDS).getCode()));
//        userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
//        userCenterVO.setServerPhone(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_PHONE).getCode()));
        return userCenterVO;
    public PlatformAboutVO getPlatformAboutUs(){
        PlatformAboutVO vo = new PlatformAboutVO();
        vo.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
        vo.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode()));
        vo.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode()));
        vo.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
        return vo;
    }
    @Override
@@ -462,4 +453,156 @@
        redisTemplate.delete(token);
    }
    /***************管理端会员列表接口*************/
    @Override
    public PageData<MemberListVO> findMemberListPage(PageWrap<MemberListQueryDTO> pageWrap) {
        IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MemberListQueryDTO query = pageWrap.getModel();
        QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(Member::getDeleted, Constants.ZERO);
        queryWrapper.lambda().eq(Member::getUserType, Constants.ZERO);
        if (query != null) {
            if (StringUtils.isNotBlank(query.getKeyword())) {
                queryWrapper.lambda().and(w -> w
                        .like(Member::getName, query.getKeyword())
                        .or().like(Member::getTelephone, query.getKeyword()));
            }
            if (query.getStatus() != null) {
                queryWrapper.lambda().eq(Member::getStatus, query.getStatus());
            }
            if (query.getStartTime() != null) {
                queryWrapper.lambda().ge(Member::getCreateTime, query.getStartTime());
            }
            if (query.getEndTime() != null) {
                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());
            }
        }
        IPage<Member> memberPage = memberMapper.selectPage(page, queryWrapper);
        IPage<MemberListVO> voPage = memberPage.convert(this::toListVO);
        return PageData.from(voPage);
    }
    @Override
    public MemberDetailVO findMemberDetail(Integer id) {
        Member member = memberMapper.selectById(id);
        if (Objects.isNull(member) || Constants.equalsInteger(member.getDeleted(), Constants.ONE)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        MemberDetailVO detail = new MemberDetailVO();
        detail.setId(member.getId());
        detail.setNickName(member.getNickName());
        detail.setName(member.getName());
        detail.setTelephone(member.getTelephone());
        detail.setAmount(member.getAmount());
        detail.setTotalAmount(member.getTotalAmount());
        detail.setStatus(member.getStatus());
        detail.setUseIdentity(member.getUseIdentity());
        detail.setOpenid(member.getOpenid());
        detail.setUserType(member.getUserType());
        detail.setBusinessStatus(member.getBusinessStatus());
        detail.setScore(member.getScore());
        detail.setReceiveNum(member.getReceiveNum());
        detail.setPublishNum(member.getPublishNum());
        detail.setCreateTime(member.getCreateTime());
        detail.setLoginTime(member.getLoginTime());
        detail.setLoginTimes(member.getLoginTimes());
        detail.setProvince(member.getProvince());
        detail.setCity(member.getCity());
        detail.setArea(member.getArea());
        detail.setAutoReceiveStatus(member.getAutoReceiveStatus());
        if (StringUtils.isNotBlank(member.getCoverImage())) {
            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;
    }
    private MemberListVO toListVO(Member member) {
        MemberListVO vo = new MemberListVO();
        vo.setId(member.getId());
        vo.setNickName(member.getNickName());
        vo.setName(member.getName());
        vo.setTelephone(member.getTelephone());
        vo.setCreateTime(member.getCreateTime());
        vo.setStatus(member.getStatus());
        return vo;
    }
    @Override
    public void verifyUserPhone(UpdMobileRequest request){
        if(Objects.isNull(request)
                || Objects.isNull(request.getMemberId())
                || StringUtils.isBlank(request.getPhone())
                || StringUtils.isBlank(request.getCode())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Member member = memberMapper.selectById(request.getMemberId());
        if(StringUtils.isNotBlank(member.getTelephone())&&!member.getTelephone().equals(request.getPhone())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"手机号错误");
        }
        this.verifyPhoneCode(request.getCode(),request.getPhone());
    }
    public void verifyPhoneCode(String code,String phone){
        //验证码
        Smsrecord smsrecord = smsrecordMapper.selectOne(new QueryWrapper<Smsrecord>().lambda()
                .eq(Smsrecord::getDeleted,Constants.ZERO)
                .eq(Smsrecord::getCode,code)
                .eq(Smsrecord::getPhone,phone)
                .last(" limit 1")
        );
        if(Objects.isNull(smsrecord)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码错误!");
        }
        if(!Constants.equalsInteger(smsrecord.getStatus(),Constants.ZERO)){
            if(Constants.equalsInteger(smsrecord.getStatus(),Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码已使用");
            }else{
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码已过期");
            }
        }
        smsrecordMapper.update(new UpdateWrapper<Smsrecord>().lambda()
                .set(Smsrecord::getStatus,Constants.ONE)
                .eq(Smsrecord::getId,smsrecord.getId())
        );
    }
    @Override
    public void updateUserPhone(UpdMobileRequest request){
        if(Objects.isNull(request)
                || Objects.isNull(request.getMemberId())
                || StringUtils.isBlank(request.getPhone())
                || StringUtils.isBlank(request.getCode())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        //判断新手机号是否已被使用
        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda().eq(Member::getTelephone,request.getPhone()))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,新手机号已被绑定,无法进行换绑!");
        }
        Member member = memberMapper.selectById(request.getMemberId());
        if(StringUtils.isNotBlank(member.getTelephone())&&member.getTelephone().equals(request.getPhone())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无法更换相同手机号");
        }
        this.verifyPhoneCode(request.getCode(),request.getPhone());
        memberMapper.update(new UpdateWrapper<Member>().lambda()
                .set(Member::getTelephone,request.getPhone())
                .eq(Member::getId,request.getMemberId())
        );
    }
}