package com.doumee.service.business.impl; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; 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.doumee.core.Jwt.JwtPayLoad; import com.doumee.core.Jwt.JwtTokenUtil; 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.core.wx.WxMiniConfig; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.web.request.RegisterRequest; import com.doumee.dao.business.web.response.AccountResponse; import com.doumee.dao.business.web.response.UserResponse; import com.doumee.service.business.MemberService; import me.chanjar.weixin.common.error.WxErrorException; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Objects; /** * 用户信息表Service实现 * @author 江蹄蹄 * @date 2023/09/27 18:06 */ @Service public class MemberServiceImpl implements MemberService { @Autowired private MemberMapper memberMapper; @Override public String create(Member member) { memberMapper.insert(member); return member.getId(); } @Override public void deleteById(String 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(String id) { return memberMapper.selectById(id); } @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()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(Member::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getCreateDate() != null) { queryWrapper.lambda().ge(Member::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); queryWrapper.lambda().le(Member::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); } if (pageWrap.getModel().getCreator() != null) { queryWrapper.lambda().eq(Member::getCreator, pageWrap.getModel().getCreator()); } if (pageWrap.getModel().getEditDate() != null) { queryWrapper.lambda().ge(Member::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); queryWrapper.lambda().le(Member::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); } if (pageWrap.getModel().getEditor() != null) { queryWrapper.lambda().eq(Member::getEditor, pageWrap.getModel().getEditor()); } if (pageWrap.getModel().getIsdeleted() != null) { queryWrapper.lambda().eq(Member::getIsdeleted, pageWrap.getModel().getIsdeleted()); } if (pageWrap.getModel().getInfo() != null) { queryWrapper.lambda().eq(Member::getInfo, pageWrap.getModel().getInfo()); } if (pageWrap.getModel().getName() != null) { queryWrapper.lambda().eq(Member::getName, pageWrap.getModel().getName()); } if (pageWrap.getModel().getNickname() != null) { queryWrapper.lambda().eq(Member::getNickname, pageWrap.getModel().getNickname()); } if (pageWrap.getModel().getOpenid() != null) { queryWrapper.lambda().eq(Member::getOpenid, pageWrap.getModel().getOpenid()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(Member::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getUnionid() != null) { queryWrapper.lambda().eq(Member::getUnionid, pageWrap.getModel().getUnionid()); } if (pageWrap.getModel().getOrigin() != null) { queryWrapper.lambda().eq(Member::getOrigin, pageWrap.getModel().getOrigin()); } if (pageWrap.getModel().getBanlance() != null) { queryWrapper.lambda().eq(Member::getBanlance, pageWrap.getModel().getBanlance()); } if (pageWrap.getModel().getRegisterDate() != null) { queryWrapper.lambda().ge(Member::getRegisterDate, Utils.Date.getStart(pageWrap.getModel().getRegisterDate())); queryWrapper.lambda().le(Member::getRegisterDate, Utils.Date.getEnd(pageWrap.getModel().getRegisterDate())); } if (pageWrap.getModel().getLastRendId() != null) { queryWrapper.lambda().ge(Member::getLastRendId, Utils.Date.getStart(pageWrap.getModel().getLastRendId())); queryWrapper.lambda().le(Member::getLastRendId, Utils.Date.getEnd(pageWrap.getModel().getLastRendId())); } if (pageWrap.getModel().getPhone() != null) { queryWrapper.lambda().eq(Member::getPhone, pageWrap.getModel().getPhone()); } if (pageWrap.getModel().getEmail() != null) { queryWrapper.lambda().eq(Member::getEmail, pageWrap.getModel().getEmail()); } if (pageWrap.getModel().getPassword() != null) { queryWrapper.lambda().eq(Member::getPassword, pageWrap.getModel().getPassword()); } if (pageWrap.getModel().getCardNo() != null) { queryWrapper.lambda().eq(Member::getCardNo, pageWrap.getModel().getCardNo()); } if (pageWrap.getModel().getCardSign() != null) { queryWrapper.lambda().eq(Member::getCardSign, pageWrap.getModel().getCardSign()); } if (pageWrap.getModel().getType() != null) { queryWrapper.lambda().eq(Member::getType, pageWrap.getModel().getType()); } if (pageWrap.getModel().getImgurl() != null) { queryWrapper.lambda().eq(Member::getImgurl, pageWrap.getModel().getImgurl()); } 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); } @Override public AccountResponse userRegister(RegisterRequest registerRequest){ return new AccountResponse(); } /** * 拉取微信授权 * @param code * @param userId */ @Override public void wxEmpower(String code,String userId){ Member member = memberMapper.selectById(userId); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到账户信息"); } try { //获取微信敏感数据 WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code); String openId = session.getOpenid(); if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"获取openid失败!请联系管理员"); } member.setOpenid(openId); memberMapper.updateById(member); memberMapper.update(null, new UpdateWrapper() .set("openId",null) .eq("openId",openId) .ne("id",member.getId())); } catch (WxErrorException e) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员"); } } @Override public AccountResponse wxLogin(String code) { try { //获取微信敏感数据 WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code); String openId = session.getOpenid(); if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "获取openid失败!请联系管理员"); } Member member = memberMapper.selectOne(new QueryWrapper().eq("OPENID", openId).eq("ISDELETED", Constants.ZERO).last("limit 1")); AccountResponse accountResponse = new AccountResponse(); if (Objects.isNull(member)) { return accountResponse; } memberMapper.updateById(member); UserResponse userResponse = getUserInfo(member.getId()); JwtPayLoad payLoad = new JwtPayLoad(userResponse.getId()); accountResponse.setToken(JwtTokenUtil.generateToken(payLoad)); accountResponse.setUserResponse(userResponse); return accountResponse; } catch (WxErrorException e) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "微信登录异常!请联系管理员"); } } @Override public UserResponse getUserInfo(String id) { Member member = memberMapper.selectById(id); UserResponse userResponse = new UserResponse(); BeanUtils.copyProperties(member,userResponse); userResponse.setMobile(member.getPhone()); return userResponse; } }