package com.doumee.service.business.impl; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.alibaba.fastjson.JSONObject; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.jwt.JwtTokenUtil; import com.doumee.config.wx.WxMiniConfig; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; 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.model.IdentityInfo; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.MemberRevenue; import com.doumee.dao.business.model.Orders; import com.doumee.dao.dto.WxPhoneRequest; import com.doumee.dao.vo.AccountResponse; import com.doumee.dao.vo.UserCenterVO; import com.doumee.service.business.MemberService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import io.swagger.annotations.ApiModelProperty; import me.chanjar.weixin.common.error.WxErrorException; import nonapi.io.github.classgraph.json.Id; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * 会员信息表Service实现 * @author 江蹄蹄 * @date 2025/07/09 12:00 */ @Service public class MemberServiceImpl implements MemberService { @Autowired private MemberMapper memberMapper; @Autowired private IdentityInfoMapper identityInfoMapper; @Autowired private OrdersMapper ordersMapper; @Autowired private JwtTokenUtil jwtTokenUtil; @Autowired private SystemDictDataBiz systemDictDataBiz; @Override public Integer create(Member member) { memberMapper.insert(member); return member.getId(); } @Override public void deleteById(Integer id) { memberMapper.deleteById(id); } @Override public void delete(Member member) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(member); memberMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } memberMapper.deleteBatchIds(ids); } @Override public void updateById(Member member) { memberMapper.updateById(member); } @Override public void updateByIdInBatch(List members) { if (CollectionUtils.isEmpty(members)) { return; } for (Member member: members) { this.updateById(member); } } @Override public Member findById(Integer id) { Member member = memberMapper.selectById(id); 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()); } return member; } @Override public Member findOne(Member member) { QueryWrapper wrapper = new QueryWrapper<>(member); return memberMapper.selectOne(wrapper); } @Override public List findList(Member member) { QueryWrapper wrapper = new QueryWrapper<>(member); return memberMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); pageWrap.getModel().setDeleted(Constants.ZERO); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(Member::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getDeleted() != null) { queryWrapper.lambda().eq(Member::getDeleted, pageWrap.getModel().getDeleted()); } if (pageWrap.getModel().getCreateUser() != null) { queryWrapper.lambda().eq(Member::getCreateUser, pageWrap.getModel().getCreateUser()); } if (pageWrap.getModel().getCreateTime() != null) { queryWrapper.lambda().ge(Member::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())); queryWrapper.lambda().le(Member::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())); } if (pageWrap.getModel().getUpdateUser() != null) { queryWrapper.lambda().eq(Member::getUpdateUser, pageWrap.getModel().getUpdateUser()); } if (pageWrap.getModel().getUpdateTime() != null) { queryWrapper.lambda().ge(Member::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); queryWrapper.lambda().le(Member::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(Member::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getCoverImage() != null) { queryWrapper.lambda().eq(Member::getCoverImage, pageWrap.getModel().getCoverImage()); } if (pageWrap.getModel().getOpenid() != null) { queryWrapper.lambda().like(Member::getOpenid, pageWrap.getModel().getOpenid()); } if (pageWrap.getModel().getNickName() != null) { queryWrapper.lambda().like(Member::getNickName, pageWrap.getModel().getNickName()); } if (pageWrap.getModel().getTelephone() != null) { queryWrapper.lambda().like(Member::getTelephone, pageWrap.getModel().getTelephone()); } 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()); } if (pageWrap.getModel().getTotalAmount() != null) { queryWrapper.lambda().eq(Member::getTotalAmount, pageWrap.getModel().getTotalAmount()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(Member::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getLoginTime() != null) { queryWrapper.lambda().ge(Member::getLoginTime, Utils.Date.getStart(pageWrap.getModel().getLoginTime())); queryWrapper.lambda().le(Member::getLoginTime, Utils.Date.getEnd(pageWrap.getModel().getLoginTime())); } if (pageWrap.getModel().getLoginTimes() != null) { queryWrapper.lambda().eq(Member::getLoginTimes, pageWrap.getModel().getLoginTimes()); } if (pageWrap.getModel().getPublishNum() != null) { queryWrapper.lambda().eq(Member::getPublishNum, pageWrap.getModel().getPublishNum()); } if (pageWrap.getModel().getScore() != null) { queryWrapper.lambda().eq(Member::getScore, pageWrap.getModel().getScore()); } if (pageWrap.getModel().getLat() != null) { queryWrapper.lambda().eq(Member::getLat, pageWrap.getModel().getLat()); } if (pageWrap.getModel().getLgt() != null) { queryWrapper.lambda().eq(Member::getLgt, pageWrap.getModel().getLgt()); } if (pageWrap.getModel().getProvince() != null) { queryWrapper.lambda().eq(Member::getProvince, pageWrap.getModel().getProvince()); } if (pageWrap.getModel().getCity() != null) { queryWrapper.lambda().eq(Member::getCity, pageWrap.getModel().getCity()); } 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()); for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(memberMapper.selectPage(page, queryWrapper)); } @Override public long count(Member member) { QueryWrapper wrapper = new QueryWrapper<>(member); return memberMapper.selectCount(wrapper); } /***************小程序接口*************/ /** * 微信小程序登录 * @param code * @return */ @Override public AccountResponse wxLogin(String code) { if(StringUtils.isBlank(code)){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } try { //获取微信敏感数据 WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code); String openId = session.getOpenid(); String unionId = session.getUnionid(); if (StringUtils.isBlank(openId)) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "获取openid失败!请联系管理员"); } Member member = memberMapper.selectOne(new QueryWrapper().eq("openid", openId).eq("DELETED", Constants.ZERO).last("limit 1")); AccountResponse accountResponse = new AccountResponse(); accountResponse.setOpenid(openId); if(Objects.isNull(member)){ return accountResponse; } accountResponse.setToken(jwtTokenUtil.generateToken(member)); accountResponse.setMember(member); return accountResponse; } catch (WxErrorException e) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "微信登录异常!请联系管理员"); } } @Override public AccountResponse wxAuthPhone(WxPhoneRequest wxPhoneRequest) { if(Objects.isNull(wxPhoneRequest) || StringUtils.isBlank(wxPhoneRequest.getCode()) || StringUtils.isBlank(wxPhoneRequest.getOpenid())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } try { WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNumber(wxPhoneRequest.getCode()); String mobile = userPhoneInfo.getPhoneNumber(); if(Objects.isNull(mobile)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未获取到手机号"); } Member member = memberMapper.selectOne(new QueryWrapper().lambda().eq(Member::getTelephone,mobile).last("limit 1")); if(Objects.nonNull(member)){ memberMapper.update(new UpdateWrapper().lambda().set(Member::getTelephone,mobile) .set(Member::getOpenid,wxPhoneRequest.getOpenid()).set(Member::getUpdateTime,new Date()).eq(Member::getId,member.getId())); }else{ member = new Member(); member.setCreateTime(new Date()); member.setUpdateTime(member.getCreateTime()); 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.setAmount(Constants.ZERO.longValue()); member.setTotalAmount(Constants.ZERO.longValue()); member.setStatus(Constants.ZERO); member.setLoginTime(new Date()); member.setLoginTimes(Constants.ONE.longValue()); member.setReceiveNum(Constants.ZERO.longValue()); member.setPublishNum(Constants.ZERO.longValue()); member.setAutoReceiveStatus(Constants.ONE); member.setUseIdentity(Constants.ZERO); memberMapper.insert(member); } AccountResponse accountResponse = new AccountResponse(); accountResponse.setToken(jwtTokenUtil.generateToken(member)); accountResponse.setMember(member); return accountResponse; } catch (Exception e) { e.printStackTrace(); throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未解析到手机号"); } } @Override public void editMemberInfo(Member member){ if(Objects.isNull(member) || ( StringUtils.isBlank(member.getCoverImage()) && StringUtils.isBlank(member.getName()) && StringUtils.isBlank(member.getNickName()) && Objects.isNull(member.getAutoReceiveStatus()) )){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } memberMapper.update(new UpdateWrapper().lambda() .set(StringUtils.isNotBlank(member.getNickName()),Member::getNickName,member.getNickName()) .set(StringUtils.isNotBlank(member.getName()),Member::getName,member.getName()) .set(StringUtils.isNotBlank(member.getCoverImage()),Member::getCoverImage,member.getCoverImage()) .set(Objects.nonNull(member.getAutoReceiveStatus()),Member::getAutoReceiveStatus,member.getAutoReceiveStatus()) .set(Member::getUpdateTime,new Date()) .eq(Member::getId,member.getId())); } @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().lambda().set(Member::getUseIdentity,Constants.ZERO).eq(Member::getId,member.getId())); }else{ if(identityInfoMapper.selectCount(new QueryWrapper().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO) .eq(IdentityInfo::getMemberId,member.getId()) .eq(IdentityInfo::getAuditStatus,Constants.TWO))>Constants.ZERO){ memberMapper.update(new UpdateWrapper().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); 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 releaseOrders = ordersMapper.selectList(new QueryWrapper().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 acceptOrders = ordersMapper.selectList(new QueryWrapper().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.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())); userCenterVO.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode())); userCenterVO.setPrivacyAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRIVACY_AGREEMENT).getCode())); return userCenterVO; } @Override public void logOff(String token,Integer memberId){ memberMapper.update(new UpdateWrapper().lambda().setSql(" openid = null ").eq(Member::getId,memberId)); jwtTokenUtil.logoutForH5(token); } }