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.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.biz.system.SystemDictDataBiz; 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.LoginUserInfo; 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.request.WxPhoneRequest; import com.doumee.dao.business.web.response.AccountResponse; import com.doumee.dao.business.web.response.HomeResponse; import com.doumee.dao.business.web.response.UserResponse; import com.doumee.service.business.MemberService; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestParam; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Objects; /** * 用户信息表Service实现 * @author 江蹄蹄 * @date 2023/09/27 18:06 */ @Service @Slf4j public class MemberServiceImpl implements MemberService { @Autowired private MemberMapper memberMapper; @Override public String create(Member member) { memberMapper.insert(member); return member.getId(); } @Override public String createManageMember(Member member) { LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Member::getIsdeleted,Constants.ZERO) .eq(Member::getType,Constants.ONE) .eq(Member::getCardNo,member.getCardNo()); Integer integer = memberMapper.selectCount(wrapper); if (integer > 0){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"卡号存在重复"); } Member insert = new Member(); insert.setCreateDate(new Date()); insert.setCreator(principal.getId()); insert.setEditDate(new Date()); insert.setEditor(principal.getId()); insert.setIsdeleted(Constants.ZERO); insert.setName(member.getName()); insert.setNickname(member.getNickname()); insert.setStatus(member.getStatus()); insert.setRegisterDate(new Date()); insert.setCardNo(member.getCardNo()); insert.setType(Constants.ONE); memberMapper.insert(insert); return insert.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 update(Member member) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Member::getIsdeleted,Constants.ZERO) .eq(Member::getType,Constants.ONE) .eq(Member::getCardNo,member.getCardNo()); Member member1 = memberMapper.selectOne(wrapper); if (Objects.nonNull(member1) && !member1.getId().equals(member.getId())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"卡号存在重复"); } LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Member update = new Member(); update.setId(member.getId()); update.setName(member.getName()); update.setStatus(member.getStatus()); update.setEditDate(new Date()); update.setEditor(principal.getId()); 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.last(" limit 1")); } @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().like(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().like(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 PageData findManagerMemberPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); if (pageWrap.getModel().getName() != null) { queryWrapper.lambda().like(Member::getName, pageWrap.getModel().getName()); } if (pageWrap.getModel().getCardNo() != null) { queryWrapper.lambda().like(Member::getCardNo, pageWrap.getModel().getCardNo()); } queryWrapper.lambda().eq(Member::getType, Constants.ONE); 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 (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(),"微信登录异常!请联系管理员"); } } /** * 微信小程序登录 * @param code * @return */ @Override public AccountResponse wxLogin(String code) { log.error("================================"+code+ JSONObject.toJSONString( WxMiniConfig.wxMaService.getWxMaConfig())); try { //获取微信敏感数据 WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code); log.error("================================"+ JSONObject.toJSONString(session)); 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("isdeleted", Constants.ZERO).last("limit 1")); AccountResponse accountResponse = new AccountResponse(); if(Objects.isNull(member)){ //新增用户 需要进行用户绑定手机号 member = new Member(); member.setId(Constants.getUUID()); member.setCreateDate(new Date()); member.setIsdeleted(Constants.ZERO); member.setOpenid(openId); member.setUnionid(unionId); member.setType(Constants.ZERO); member.setRegisterDate(new Date()); member.setOrigin(Constants.ZERO.toString()); member.setStatus(Constants.ZERO); memberMapper.insert(member); } UserResponse userResponse = getUserInfo(member.getId()); if(StringUtils.isBlank(member.getPhone())){ accountResponse.setStatus(Constants.ONE); } JwtPayLoad payLoad = new JwtPayLoad(member.getId()); accountResponse.setToken(JwtTokenUtil.generateToken(payLoad)); accountResponse.setSessionKey(session.getSessionKey()); accountResponse.setUserResponse(userResponse); return accountResponse; } catch (WxErrorException e) { log.error(e.getMessage()); throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "微信登录异常!请联系管理员"); } } /** * 解析微信手机号 * @param wxPhoneRequest * @return */ @Override public AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest) { try { Member member = memberMapper.selectById(wxPhoneRequest.getMemberId()); WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNoInfo(wxPhoneRequest.getSessionKey(), wxPhoneRequest.getEncryptedData(), wxPhoneRequest.getIv()); //获取手机号 String mobile= userPhoneInfo.getPurePhoneNumber(); if(Objects.isNull(mobile)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未解析到手机号"); } member.setPhone(mobile); memberMapper.updateById(member); AccountResponse accountResponse = new AccountResponse(); UserResponse userResponse = getUserInfo(member.getId()); JwtPayLoad payLoad = new JwtPayLoad(userResponse.getId()); accountResponse.setToken(JwtTokenUtil.generateToken(payLoad)); accountResponse.setUserResponse(userResponse); accountResponse.setStatus(Constants.ZERO); return accountResponse; } catch (Exception e) { e.printStackTrace(); 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; } }