| | |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.core.wx.WxMiniConfig; |
| | | import com.doumee.dao.business.*; |
| | | import com.doumee.dao.business.MemberMapper; |
| | | import com.doumee.dao.business.ShopMapper; |
| | | import com.doumee.dao.business.SmsrecordMapper; |
| | | import com.doumee.dao.business.join.MemberJoinMapper; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.dao.system.SystemUserMapper; |
| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import io.swagger.models.auth.In; |
| | | import io.swagger.util.Yaml; |
| | | import lombok.extern.log4j.Log4j; |
| | | import me.chanjar.weixin.common.error.WxErrorException; |
| | | import okhttp3.OkHttpClient; |
| | |
| | | private ShopMapper shopMapper; |
| | | @Autowired |
| | | private UserActionMapper userActionMapper; |
| | | |
| | | |
| | | @Autowired |
| | | private SmsrecordMapper smsrecordMapper; |
| | |
| | | if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"获取openid失败!请联系管理员"); |
| | | } |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("OPEN_ID", openId)); |
| | | if (member == null) { |
| | | member = new Member(); |
| | | member.setImgurl("20230410/4010b821-2137-4e6d-86e4-5ab9c06184a4.png"); |
| | | member.setNickname("微信客户"+ CodeVerifyUtils.createVerificationCode(4)); |
| | | member.setCreateDate(new Date()); |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setType(Constants.ZERO); |
| | | member.setOrigin(Constants.ZERO); |
| | | member.setRecId(recId); |
| | | member.setOpenId(openId); |
| | | memberMapper.insert(member); |
| | | } |
| | | member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ |
| | | systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl()); |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, openId) |
| | | .eq(Member::getIsdeleted,Constants.ZERO) |
| | | .last(" limit 1")); |
| | | //创建token |
| | | JwtPayLoad payLoad = new JwtPayLoad(member.getId()); |
| | | JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId()); |
| | | String token = JwtTokenUtil.generateToken(payLoad); |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setToken(token); |
| | | accountResponse.setSessionKey(session.getSessionKey()); |
| | | accountResponse.setMember(member); |
| | | if(Objects.nonNull(member)){ |
| | | if(Objects.isNull(member.getRecId())){ |
| | | member.setRecId(recId); |
| | | } |
| | | memberMapper.updateById(member); |
| | | member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ |
| | | systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl()); |
| | | accountResponse.setToken(token); |
| | | accountResponse.setMember(member); |
| | | }else{ |
| | | accountResponse.setOpenid(openId); |
| | | } |
| | | return accountResponse; |
| | | } catch (WxErrorException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员"); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public AccountResponse wxLoginTest( Integer memberId){ |
| | | //创建token |
| | | JwtPayLoad payLoad = new JwtPayLoad(memberId); |
| | | JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+memberId); |
| | | String token = JwtTokenUtil.generateToken(payLoad); |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setToken(token); |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据openid获取是否绑定了商户 |
| | | * @param openid |
| | | * @param memberId |
| | | * @return |
| | | */ |
| | | public AccountResponse shopOpenidLogin(String openid, Integer memberId){ |
| | | Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOpenId, openid) |
| | | .eq(Shop::getIsdeleted,Constants.ZERO) |
| | | .last("limit 1") |
| | | ); |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setOpenid(openid); |
| | | if(Objects.nonNull(shop)){ |
| | | if(Objects.isNull(memberId) |
| | | && ( Objects.isNull(shop.getMemberId()) |
| | | || !Constants.equalsInteger(shop.getMemberId(),memberId))){ |
| | | shopMapper.update(null,new UpdateWrapper<Shop>().lambda() |
| | | .set(Shop::getMemberId,memberId) |
| | | .eq(Shop::getId,shop.getId()) |
| | | ); |
| | | } |
| | | JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId()); |
| | | String token = JwtTokenUtil.generateToken(payLoad); |
| | | accountResponse.setToken(token); |
| | | } |
| | | return accountResponse; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 商户账号密码登录 |
| | | * @param userName |
| | | * @param password |
| | | * @param openid |
| | | * @param memberId |
| | | * @return |
| | | */ |
| | | public AccountResponse shopPasswordLogin(String userName,String password,String openid,String memberId){ |
| | | if(StringUtils.isBlank(userName) |
| | | || StringUtils.isBlank(password)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户名或密码不能为空"); |
| | | } |
| | | Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getUsername, userName) |
| | | .eq(Shop::getIsdeleted,Constants.ZERO) |
| | | .last("limit 1") |
| | | ); |
| | | if(shop==null){ |
| | | throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); |
| | | } |
| | | //加密密码 |
| | | String pwd = Utils.Secure.encryptPassword(password, shop.getSalt()); |
| | | if(!pwd.equals(shop.getPassword())){ |
| | | throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); |
| | | } |
| | | //创建token |
| | | JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId()); |
| | | String token = JwtTokenUtil.generateToken(payLoad); |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setToken(token); |
| | | shopMapper.update(null,new UpdateWrapper<Shop>().lambda() |
| | | .set(Shop::getOpenId,openid) |
| | | .set(Shop::getMemberId,memberId) |
| | | .eq(Shop::getId,shop.getId()) |
| | | ); |
| | | shopMapper.update(null,new UpdateWrapper<Shop>().lambda() |
| | | .set(Shop::getOpenId,null) |
| | | .eq(Shop::getOpenId,openid) |
| | | .ne(Shop::getId,shop.getId()) |
| | | ); |
| | | return accountResponse; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public void wxPhone(WxPhoneRequest wxPhoneRequest){ |
| | | public AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest){ |
| | | try { |
| | | WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNoInfo( |
| | | wxPhoneRequest.getSessionKey(), wxPhoneRequest.getEncryptedData(), wxPhoneRequest.getIv()); |
| | |
| | | if(Objects.isNull(phone)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未获取到手机号"); |
| | | } |
| | | Member member = memberMapper.selectById(wxPhoneRequest.getMemberId()); |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, wxPhoneRequest.getOpenid()) |
| | | .eq(Member::getIsdeleted,Constants.ZERO) |
| | | .last(" limit 1")); |
| | | if (member == null) { |
| | | member = new Member(); |
| | | member.setImgurl("20230410/4010b821-2137-4e6d-86e4-5ab9c06184a4.png"); |
| | | member.setNickname("微信用户"+ CodeVerifyUtils.createVerificationCode(4)); |
| | | member.setCreateDate(new Date()); |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setType(Constants.ZERO); |
| | | member.setOrigin(Constants.ZERO); |
| | | member.setRecId(wxPhoneRequest.getRecId()); |
| | | member.setOpenId(wxPhoneRequest.getOpenid()); |
| | | } |
| | | member.setPhone(phone); |
| | | member.setEditDate(new Date()); |
| | | member.setEditor(wxPhoneRequest.getMemberId()); |
| | | member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ |
| | | systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl()); |
| | | //生成分享码 |
| | | String accessToken = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ACCESS_TOKEN).getCode(); |
| | | if(StringUtils.isBlank(member.getSharingCode())){ |
| | | //生成图片上传OSS |
| | | Map<String,Object> body = new HashMap<>(); |
| | | // 场景码,与前端约定,最终是需要前端解析 |
| | | body.put("scene", member.getId()); |
| | | // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 |
| | | body.put("env_version", "release"); |
| | | // 透明,根据你的场景自行设置body参数 |
| | | body.put("is_hyaline", true); |
| | | OkHttpClient client = new OkHttpClient().newBuilder().build(); |
| | | okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json"); |
| | | okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body)); |
| | | Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken) |
| | | .method("POST", requestBody).build(); |
| | | try { |
| | | Response response = client.newCall(request).execute(); |
| | | if (response.isSuccessful()) { |
| | | InputStream inputStream = new ByteArrayInputStream(response.body().bytes()); |
| | | FileModel fileModel = uploadFileService.uploadWxCode(inputStream,member.getId().toString()); |
| | | member.setSharingCode(fileModel.getFileUrl()); |
| | | inputStream.close(); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | if(Objects.isNull(member.getId())){ |
| | | memberMapper.insert(member); |
| | | member.setSharingCode(this.createShareCode(member.getId())); |
| | | memberMapper.updateById(member); |
| | | }else{ |
| | | if(StringUtils.isBlank(member.getSharingCode())){ |
| | | member.setSharingCode(this.createShareCode(member.getId())); |
| | | } |
| | | memberMapper.updateById(member); |
| | | } |
| | | memberMapper.updateById(member); |
| | | JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId()); |
| | | String token = JwtTokenUtil.generateToken(payLoad); |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setToken(token); |
| | | accountResponse.setMember(member); |
| | | return accountResponse; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"更新手机号失败"); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | public String createShareCode(Integer memberId){ |
| | | //生成分享码 |
| | | String accessToken = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ACCESS_TOKEN).getCode(); |
| | | //生成图片上传OSS |
| | | Map<String,Object> body = new HashMap<>(); |
| | | // 场景码,与前端约定,最终是需要前端解析 |
| | | body.put("scene", memberId); |
| | | // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 |
| | | body.put("env_version", "release"); |
| | | // 透明,根据你的场景自行设置body参数 |
| | | body.put("is_hyaline", true); |
| | | OkHttpClient client = new OkHttpClient().newBuilder().build(); |
| | | okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json"); |
| | | okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body)); |
| | | Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken) |
| | | .method("POST", requestBody).build(); |
| | | try { |
| | | Response response = client.newCall(request).execute(); |
| | | if (response.isSuccessful()) { |
| | | InputStream inputStream = new ByteArrayInputStream(response.body().bytes()); |
| | | FileModel fileModel = uploadFileService.uploadWxCode(inputStream,memberId.toString()); |
| | | inputStream.close(); |
| | | return fileModel.getFileUrl(); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public Member updateMember(UpdateMemberRequest updateMemberRequest){ |
| | |
| | | Integer integer = integralService.dealIntegral(dealIntegralRequest); |
| | | return integer; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |