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 implements UsersService { @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.getAccessTokenUrl}") private String getAccessTokenUrl; @Value("${weixin.getUserInfoUrl}") private String getUserInfoUrl; 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 String accessTokenUrl = getAccessTokenUrl + appId + "&secret=" + appSecret; String result = HttpRequestUtils.sendGet(accessTokenUrl); String accessToken = JSON.parseObject(result).getString("access_token"); 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(); } }