You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
7.0 KiB
Java

package com.jingcheng.template.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jingcheng.template.constants.Constants;
import com.jingcheng.template.mapper.*;
import com.jingcheng.template.model.*;
import com.jingcheng.template.service.UsersService;
import com.jingcheng.template.util.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@Service("usersService")
@Transactional
public class UsersServiceImpl extends BaseServiceImpl<UsersMapper, Users> implements UsersService<Users> {
@Resource
UsersMapper usersMapper;
@Value("${weixin.getOpenIdUrl}")
private String getOpenIdUrl;
@Value("${weixin.appId}")
private String appId;
@Value("${weixin.appSecret}")
private String appSecret;
@Value("${weixin.getSubscribeUrl}")
private String getSubscribeUrl;
@Value("${weixin.getUserInfoUrl}")
private String getUserInfoUrl;
@Resource
private WechatConfigMapper wechatConfigMapper;
Logger logger = LogUtils.getBussinessLogger();
public Users selectByUserNoOrOpenId(String key) {
Users caseUser = new Users();
caseUser.setUserNo(key);
caseUser = usersMapper.selectOne(caseUser);
if (null == caseUser) {
caseUser = new Users();
caseUser.setOpenId(key);
caseUser = usersMapper.selectOne(caseUser);
}
return caseUser;
}
@Override
public Users findByNo(String userNo) {
Users users = new Users();
users.setUserNo(userNo);
return usersMapper.selectOne(users);
}
public Users currentUser() {
Subject subject = SecurityUtils.getSubject();
String key = JWTUtil.getKey(subject.getPrincipal().toString());
Users caseUser = selectByUserNoOrOpenId(key);
return caseUser;
}
/**
* 通过token获取当前用户
*/
@Override
public AjaxResult getUsersByToken(HttpServletRequest request){
AjaxResult ajaxResult = new AjaxResult();
String token = request.getHeader("Authorization");
String user_no = JWTUtil.getKey(token);
if (StringUtils.isBlank(user_no)){
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg("token过期或者为空");
return ajaxResult;
}
Users user = new Users();
user.setUserNo(user_no);
user.setState(1);
Users users = usersMapper.selectOne(user);
if(users == null){
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg("未找到该用户");
return ajaxResult;
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("users",users);
ajaxResult.setRetcode(AjaxResult.SUCCESS);
ajaxResult.setRetmsg("SUCCESS");
ajaxResult.setData(jsonObject);
return ajaxResult;
}
/**
* 注册/修改用户 (pc mobile俩用)
* @param ajaxRequest
* @return
*/
@Override
public AjaxResult registUsers(AjaxRequest ajaxRequest,HttpServletRequest httpServletRequest) {
AjaxResult ajaxResult = new AjaxResult();
JSONObject data = ajaxRequest.getData();
ajaxResult.setRetmsg("SUCCESS");
ajaxResult.setRetcode(AjaxResult.SUCCESS);
return ajaxResult;
}
@Override
public AjaxResult getUsersByUsersId(AjaxRequest ajaxRequest) {
AjaxResult ajaxResult = new AjaxResult();
JSONObject data = ajaxRequest.getData();
return ajaxResult;
}
@Override
public AjaxResult registWxUser(String code) {
AjaxResult ajaxResult = new AjaxResult();
String openIdUrl = getOpenIdUrl + appId + "&secret=" + appSecret +
"&code=" + code + "&grant_type=authorization_code";
String openIdResult = HttpRequestUtils.sendGet(openIdUrl);
String openId = JSON.parseObject(openIdResult).getString("openid");
String userAccessToken = JSON.parseObject(openIdResult).getString("access_token");
// String userInfoUrl = getUserInfoUrl + userAccessToken + "&openid=" + openId + "&lang=zh_CN";
// String userInfoResult = HttpRequestUtils.sendGet(userInfoUrl);
//获取基础token
WechatConfig wechatConfig = wechatConfigMapper.selectByPrimaryKey(1L);
String accessToken = wechatConfig.getAccessToken();
String subscribeUrl = getSubscribeUrl + accessToken + "&openid=" + openId + "&lang=zh_CN";
String subscribeResult = HttpRequestUtils.sendGet(subscribeUrl);
Integer subscribe = JSON.parseObject(subscribeResult).getInteger("subscribe");
// String nickName = JSON.parseObject(userInfoResult).getString("nickname");
// String headimgurl = JSON.parseObject(userInfoResult).getString("headimgurl");
// Integer sex = JSON.parseObject(userInfoResult).getInteger("sex");
Users findUsers = new Users();
findUsers.setOpenId(openId);
findUsers.setState(Constants.STATE_VALID);
Users users = usersMapper.selectOne(findUsers);
String usersId ;
if (null == users){
Users newUsers = new Users();
newUsers.setOpenId(openId);
newUsers.setChances(3);
newUsers.setShareTimes(0);
newUsers.setDayShareTimes(0);
// newUsers.setNickName(nickName);
// newUsers.setHeadImgUrl(headimgurl);
newUsers.setUserId(UUID.randomUUID().toString());
// newUsers.setSex(sex);
newUsers.setState(Constants.STATE_VALID);
newUsers.setCreateDateTime(new Date());
newUsers.setUpdateDateTime(new Date());
usersMapper.insert(newUsers);
usersId = newUsers.getUserId();
}else {
// users.setNickName(nickName);
users.setUpdateDateTime(new Date());
// users.setSex(sex);
// users.setHeadImgUrl(headimgurl);
usersMapper.updateByPrimaryKeySelective(users);
usersId = users.getUserId();
}
JSONObject userJson = new JSONObject();
userJson.put("usersId",usersId);
userJson.put("openId",openId);
userJson.put("subscribe",subscribe);
// userJson.put("nickname",nickName);
// userJson.put("headimgurl",headimgurl);
// userJson.put("sex",sex);
ajaxResult.setData(userJson);
ajaxResult.setRetcode(AjaxResult.SUCCESS);
return ajaxResult;
}
@Override
public void chancesTask() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
logger.info(simpleDateFormat.format(new Date())+ "刷新用户chances");
usersMapper.updateChancesTask();
}
}