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<Member> deleteWrapper = new UpdateWrapper<>(member);
|
memberMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) {
|
return;
|
}
|
memberMapper.deleteBatchIds(ids);
|
}
|
|
@Override
|
public void updateById(Member member) {
|
memberMapper.updateById(member);
|
}
|
|
@Override
|
public void updateByIdInBatch(List<Member> 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<Member> wrapper = new QueryWrapper<>(member);
|
return memberMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<Member> findList(Member member) {
|
QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
|
return memberMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<Member> findPage(PageWrap<Member> pageWrap) {
|
IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
QueryWrapper<Member> 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().ne(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<Member> 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<Member>().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<Member>().lambda().eq(Member::getTelephone,mobile).last("limit 1"));
|
if(Objects.nonNull(member)){
|
memberMapper.update(new UpdateWrapper<Member>().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);
|
member.setOpenid(wxPhoneRequest.getOpenid());
|
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<Member>().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<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);
|
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.waitPay.getKey())).collect(Collectors.toList()).size());
|
userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.accept.getKey())).collect(Collectors.toList()).size());
|
userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.getKey())&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).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.accept.getKey())).collect(Collectors.toList()).size());
|
userCenterVO.setDoneTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ordersStatus.doing.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<Member>().lambda().setSql(" openid = null ").eq(Member::getId,memberId));
|
jwtTokenUtil.logoutForH5(token);
|
}
|
|
|
|
}
|