package com.doumee.service.business.impl;
|
|
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
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 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
|
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());
|
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<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) {
|
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().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 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) {
|
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("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) {
|
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;
|
}
|
|
|
|
}
|