| 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<Member> wrapper = new QueryWrapper<>(); | 
|         wrapper.lambda() | 
|                 .eq(Member::getIsdeleted,Constants.ZERO) | 
|                 .eq(Member::getType,Constants.ONE) | 
|                 .eq(Member::getCardNo,member.getCardNo()); | 
|         long 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<Member> deleteWrapper = new UpdateWrapper<>(member); | 
|         memberMapper.delete(deleteWrapper); | 
|     } | 
|   | 
|     @Override | 
|     public void deleteByIdInBatch(List<String> 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<Member> 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<Member> 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<Member> wrapper = new QueryWrapper<>(member); | 
|         return memberMapper.selectOne(wrapper.last(" limit 1")); | 
|     } | 
|   | 
|     @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()); | 
|         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<Member> findManagerMemberPage(PageWrap<Member> pageWrap) { | 
|   | 
|         IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); | 
|         QueryWrapper<Member> 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<Member> 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<Member>() | 
|                             .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<Member>().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; | 
|     } | 
|   | 
|   | 
| } |