Commit adb7ba58 authored by hezhen's avatar hezhen

Merge branch 'master_activity' into base-modify

parents 2f22c2d1 226f51c0
...@@ -125,4 +125,5 @@ public abstract class BaseBiz<M extends Mapper<T>, T> { ...@@ -125,4 +125,5 @@ public abstract class BaseBiz<M extends Mapper<T>, T> {
return new TableResultResponse<T>(result.getTotal(), list); return new TableResultResponse<T>(result.getTotal(), list);
} }
} }
package com.xxfc.platform.summit.constant;
public class RedisKey {
/**
*验证码key前缀
*/
public static final String CONSTANT_CODE_PREFIX ="bm:info:";
}
...@@ -23,7 +23,7 @@ public class Activity { ...@@ -23,7 +23,7 @@ public class Activity {
@Column(name = "rid") @Column(name = "rid")
@ApiModelProperty("抽奖活动id") @ApiModelProperty("抽奖活动id")
private Integer rid; private Integer rId;
@Column(name = "title") @Column(name = "title")
......
package com.xxfc.platform.summit.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author Administrator
*/
@Data
@Table(name = "fc_activity_bm")
public class ActivityBm {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@Column(name = "activity_id")
@ApiModelProperty("活动id")
private Integer activityId;
@Column(name = "meepo_user_id")
@ApiModelProperty("用户id")
private Integer meepoUserId;
@Column(name = "name")
@ApiModelProperty("报名人姓名")
private String name;
@Column(name = "phone")
@ApiModelProperty("报名人电话")
private String phone;
@Column(name = "id_number")
@ApiModelProperty("身份证号")
private String idNumber;
@Column(name = "inviter")
@ApiModelProperty("邀请人")
private String inviter;
@Column(name = "qd_status")
@ApiModelProperty("0-未签到;1-已签到")
private Integer qdStatus;
@Column(name = "bm_status")
@ApiModelProperty("0-未报名;1-已报名")
private Integer bmStatus;
@Column(name = "crt_time")
@ApiModelProperty("创建时间")
private Long crtTime;
@Column(name = "upd_time")
@ApiModelProperty("创建时间")
private Long updTime;
@Column(name = "is_del")
@ApiModelProperty("是否删除:0-正常;1-删除")
private Integer isDel;
}
...@@ -23,11 +23,11 @@ public class ActivityShow { ...@@ -23,11 +23,11 @@ public class ActivityShow {
@Column(name = "activity_id") @Column(name = "activity_id")
@ApiModelProperty("活动id") @ApiModelProperty("活动id")
private String activityId; private Integer activityId;
@Column(name = "type") @Column(name = "type")
@ApiModelProperty("1-图片;2-视频") @ApiModelProperty("1-图片;2-视频")
private String type; private Integer type;
@Column(name = "path") @Column(name = "path")
@ApiModelProperty("图片或视频路径") @ApiModelProperty("图片或视频路径")
...@@ -35,11 +35,11 @@ public class ActivityShow { ...@@ -35,11 +35,11 @@ public class ActivityShow {
@Column(name = "crt_time") @Column(name = "crt_time")
@ApiModelProperty("创建时间") @ApiModelProperty("创建时间")
private String crtTime; private Long crtTime;
@Column(name = "is_del") @Column(name = "is_del")
@ApiModelProperty("是否删除:0-正常;1-删除") @ApiModelProperty("是否删除:0-正常;1-删除")
private String isDel; private Integer isDel;
} }
package com.xxfc.platform.summit.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "ims_meepo_xianchang_qd")
public class MeepoUserQd {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@Column(name = "weid")
@ApiModelProperty("主公众号Id")
private Integer weId;
@Column(name = "rid")
@ApiModelProperty("规则ID")
private Integer rId;
@Column(name = "openid")
@ApiModelProperty("openid")
private String openId;
@Column(name = "nick_name")
@ApiModelProperty("昵称")
private String nickName;
@Column(name = "avatar")
@ApiModelProperty("微信头像")
private String avatar;
@Column(name = "level")
@ApiModelProperty("状态")
private Integer level;
@Column(name = "createtime")
@ApiModelProperty("创建时间")
private Long createTime;
}
package com.xxfc.platform.summit.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.math.BigDecimal;
/**
* @author Administrator
*/
@Data
@Table(name = "ims_meepo_xianchang_user")
public class User {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@Column(name = "weid")
@ApiModelProperty("主公众号id")
private Integer weId;
@Column(name = "rid")
@ApiModelProperty("规则ID")
private Integer rId;
@Column(name = "openid")
@ApiModelProperty("微信openid")
private String openId;
@Column(name = "oauth_openid")
@ApiModelProperty("待定")
private String oauthOpenid;
@Column(name = "mobile")
@ApiModelProperty("电话")
private String mobile;
@Column(name = "nick_name")
@ApiModelProperty("昵称")
private String nickName;
@Column(name = "avatar")
@ApiModelProperty("头像")
private String avatar;
@Column(name = "sex")
@ApiModelProperty("性别")
private String sex;
@Column(name = "group")
@ApiModelProperty("分组")
private Integer group;
@Column(name = "status")
@ApiModelProperty("状态")
private Integer status;
@Column(name = "isblacklist")
@ApiModelProperty("待定")
private Integer isBlacklist;
@Column(name = "can_lottory")
@ApiModelProperty("待定")
private Integer canLottory;
@Column(name = "can_dt")
@ApiModelProperty("待定")
private Integer canDt;
@Column(name = "nd_id")
@ApiModelProperty("待定")
private Integer ndId;
@Column(name = "qd_status")
@ApiModelProperty("签到状态")
private Integer qdStatus;
@Column(name = "is_manager")
@ApiModelProperty("待定")
private Integer isManager;
@Column(name = "money")
@ApiModelProperty("分组")
private BigDecimal money;
@Column(name = "createtime")
@ApiModelProperty("创建时间")
private Integer createtime;
@Column(name = "lastjointime")
@ApiModelProperty("待定")
private Integer lastjointime;
@Column(name = "had_luru")
@ApiModelProperty("待定")
private Integer hadLuru;
}
package com.xxfc.platform.summit.pojo;
import lombok.Data;
/**
* @author Administrator
*/
@Data
public class ActivityQuery extends Query {
private String title;
private Long startTime;
private Integer status;
}
package com.xxfc.platform.summit.pojo;
import lombok.Data;
/**
* @author Administrator
*/
@Data
public class Query {
private Integer page=1;
private Integer limit=10;
}
package com.xxfc.platform.summit.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class MeepoActivityVo {
@ApiModelProperty("活动id")
private Integer rId;
@ApiModelProperty("主公众号Id")
private Integer weId;
@ApiModelProperty("活动标题")
private String title;
}
...@@ -6,6 +6,9 @@ import lombok.Data; ...@@ -6,6 +6,9 @@ import lombok.Data;
@Data @Data
public class UserInfo { public class UserInfo {
private String unionid;
private String openId; private String openId;
private String nickname;
private String headimgurl;
private String sex;
} }
package com.xxfc.platform.summit.biz; package com.xxfc.platform.summit.biz;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.summit.entity.Activity; import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.mapper.ActivityMapper; import com.xxfc.platform.summit.mapper.ActivityMapper;
import com.xxfc.platform.summit.pojo.ActivityQuery;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/** /**
* @author Administrator * @author Administrator
*/ */
@Service @Service
public class ActivityBiz extends BaseBiz<ActivityMapper, Activity> { public class ActivityBiz extends BaseBiz<ActivityMapper, Activity> {
private Integer NOT_DELETE=0;
public PageInfo<Activity> getList(ActivityQuery query) {
Example exa= new Example(Activity.class);
Example.Criteria criteria = exa.createCriteria();
criteria.andEqualTo("isDel",NOT_DELETE );
if (StringUtils.isNotBlank(query.getTitle())) {
criteria.andLike("title",query.getTitle());
}
if (query.getStartTime()!=null) {
criteria.andGreaterThanOrEqualTo("startTime",query.getStartTime());
}
if (query.getStatus()!=null) {
criteria.andGreaterThanOrEqualTo("status",query.getStatus());
}
exa.orderBy("rank").asc().orderBy("startTime").desc();
PageHelper.startPage(query.getPage(),query.getLimit());
List<Activity> activities = mapper.selectByExample(exa);
return new PageInfo<Activity>(activities);
}
@Transactional(rollbackFor = Exception.class)
public Boolean update(Activity activity) {
try {
activity.setUpdTime(System.currentTimeMillis());
mapper.updateByPrimaryKeySelective(activity);
return true;
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
}
} }
package com.xxfc.platform.summit.biz;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.constant.RestCode;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.mapper.ActivityBmMapper;;
import com.xxfc.platform.summit.vo.MeepoActivityVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author Administrator
*/
@Service
@Slf4j
public class ActivityBmBiz extends BaseBiz<ActivityBmMapper, ActivityBm> {
@Autowired
private RedisTemplate summbitRedisTemplate;
@Autowired
private UserBiz userBiz;
@Autowired
private ActivityBiz activityBiz;
@Autowired
private MeepoUserQdBiz meepoUserQdBiz;
//用户报名
public ObjectRestResponse userBmOrQd(ActivityBm activityBm,Integer meepoUserId)throws Exception{
if (activityBm==null||meepoUserId==null||meepoUserId==0){
log.info("-----activityBm==="+activityBm+"-------meepoUserId==="+meepoUserId+"-----为空");
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"参数不能为空");
}
Integer activityId=activityBm.getActivityId();
Integer bmStatus=activityBm.getBmStatus()==null?0:activityBm.getBmStatus();
Integer qdStatus=activityBm.getQdStatus()==null?0:activityBm.getQdStatus();
log.info("-----activityBm==="+JSONObject.toJSONString(activityBm)+"-------meepoUserId==="+meepoUserId+"----activityId==="+activityId+"---bmStatus=="+bmStatus+"---qdStatus=="+qdStatus);
if (activityId==null||activityId==0){
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"活动不存在");
}
ActivityBm activityBm1=checkUserBm(meepoUserId,activityId);
int isQd=0;
if (activityBm1!=null){
if (bmStatus==1&&activityBm1.getBmStatus()==1){
log.info("----用户已报名---meepoUserId==="+meepoUserId);
return ObjectRestResponse.createFailedResult(ResultCode.EXIST_CODE,"用户已报名");
}else if (qdStatus==1){
if (activityBm1.getQdStatus()==1){
log.info("----用户已签到---meepoUserId==="+meepoUserId);
return ObjectRestResponse.createFailedResult(ResultCode.EXIST_CODE,"用户已签到");
}
isQd=1;
}
activityBm.setId(activityBm1.getId());
updateSelectiveById(activityBm);
}else {
activityBm.setMeepoUserId(meepoUserId);
insertSelective(activityBm);
if (qdStatus==1){
isQd=1;
}
}
if (isQd==1){
meepoUserQdBiz.addUserQd(meepoUserId);
}
log.info("-----用户报名成功----bmId===="+activityBm.getId());
return ObjectRestResponse.succ();
}
//获取小程序峰会活动
public List<MeepoActivityVo> getMeepoActivitys(Integer rId){
return mapper.getMeepoActivitys(rId);
}
//获取缓存内容
public ActivityBm userInfo(String redisLockKey)throws Exception{
if (StringUtils.isBlank(redisLockKey)){
log.info("-----redisLockKey==="+redisLockKey+"-----为空");
return null;
}
ActivityBm bm =new ActivityBm();
String json = summbitRedisTemplate.opsForValue().get(redisLockKey) == null ? "" : summbitRedisTemplate.opsForValue().get(redisLockKey).toString();
log.info("userBm接口,获取redis中的报名信息:" + json);
if (StringUtils.isBlank(json)){
return null;
}
JSONObject jsonObject= JSONObject.parseObject(json);
BeanUtils.copyProperties(jsonObject,bm);
return bm;
}
public ActivityBm checkUserBm(Integer meepoUserId,Integer activityId ){
Example example =new Example(ActivityBm.class);
example.createCriteria().andEqualTo("meepoUserId",meepoUserId).andEqualTo("activityId",activityId).andEqualTo("isDel",0);
List<ActivityBm> list=mapper.selectByExample(example);
if (list.size()>0){
return list.get(0);
}
return null;
}
//用户报名/签到操作
public JSONObject userBmOrQdByKey(String key,Integer activityId, HttpServletRequest request){
JSONObject jsonObject=new JSONObject();
jsonObject.put("isbm",0);
jsonObject.put("isqd",0);
jsonObject.put("value","");
try {
User user=userBiz.getSession(request);
//是否登录
log.info("-----userBmByKey---activityId==="+activityId);
if (user==null){
log.info("-----userBmByKey---用户未登录----");
ActivityBm activityBm= userInfo(key);
if (activityBm!=null){
log.info("-----userBmByKey---key已存在----");
jsonObject.put("value",activityBm);
// 获取到缓存的验证码后要先清空缓存对应键的值
summbitRedisTemplate.delete(key);
}
}else {
Integer userId=user.getId();
log.info("-----userBmByKey---用户登录--userId==="+userId);
ActivityBm activityBm= userInfo(key);
if (activityBm==null){
log.info("-----userBmByKey---key不存在判断用户是否报名/签到----");
ActivityBm activityBm1=checkUserBm(userId,activityId);
if (activityBm1!=null){
log.info("-----userBmByKey---key不存在用户已报名/签到----");
jsonObject.put("isbm",activityBm1.getBmStatus());
jsonObject.put("isqd",activityBm1.getQdStatus());
}
}else {
log.info("-----userBmByKey---key已存在去报名/签到----");
ObjectRestResponse restResponse=userBmOrQd(activityBm,userId);
if (restResponse.getStatus()==RestCode.SUCCESS.getStatus()){
log.info("-----userBmByKey---key已存在去报名/签到----报名/签到成功");
if (activityBm.getBmStatus()==1){
jsonObject.put("isbm",1);
jsonObject.put("bm_status",1);
}else if (activityBm.getQdStatus()==1){
jsonObject.put("isqd",1);
jsonObject.put("qd_status",1);
}
}else {
log.info("-----userBmByKey---key已存在去报名/签到----报名/签到失败");
if (activityBm.getBmStatus()==1){
jsonObject.put("bm_status",2);
}else if (activityBm.getQdStatus()==1){
jsonObject.put("qd_status",2);
}
}
summbitRedisTemplate.delete(key);
}
}
}catch (Exception e){
e.printStackTrace();
}
return jsonObject;
}
//获取峰会活动详情
public ObjectRestResponse getActivityById(Integer activityId,String key,HttpServletRequest request){
if (activityId==0||activityId==null){
return ObjectRestResponse.createFailedResult(ResultCode.NOTEXIST_CODE,"参数为空");
}
Example example=new Example(Activity.class);
example.createCriteria().andEqualTo("id",activityId).andEqualTo("isDel",0);
List<Activity> list=activityBiz.selectByExample(example);
if (list.size()==0){
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"活动不存在");
}
Activity activity=list.get(0);
if (activity.getIsShow()==null||activity.getIsShow()==0){
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"活动已下架");
}
if (activity.getIsPublish()==null||activity.getIsPublish()==0){
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"活动未发布");
}
Integer status=activity.getStatus();
if (status==null){
status=0;
}
if (status==0){
Long nowTime=System.currentTimeMillis();
Long startTime=activity.getStartTime();
Long endTime=activity.getEndTime();
if (nowTime<startTime){
status=1;
}else if (nowTime>=startTime&&nowTime<endTime){
status=2;
}else {
status=3;
}
activity.setStatus(status);
}
JSONObject jsonObject=new JSONObject();
jsonObject.put("activity",activity);
JSONObject userBm=userBmOrQdByKey(key,activityId,request);
jsonObject.put("bmInfo",userBm);
return ObjectRestResponse.succ(jsonObject);
}
}
package com.xxfc.platform.summit.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.summit.entity.MeepoUserQd;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.mapper.MeepoUserQdMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/**
* @author Administrator
*/
@Service
@Slf4j
public class MeepoUserQdBiz extends BaseBiz<MeepoUserQdMapper, MeepoUserQd> {
@Autowired
UserBiz userBiz;
//添加签到信息
public void addUserQd(Integer meepoUserId){
if (meepoUserId==null||meepoUserId==0){
log.info("----签到信息为空meepoUserId==="+meepoUserId);
return;
}
User user= userBiz.selectById(meepoUserId);
Integer weId=user.getWeId();
Integer rid=user.getRId();
String openId=user.getOpenId();
String avatar=user.getAvatar();
String nikeName=user.getNickName();
log.info("---addUserQd----meepoUserId==="+meepoUserId+"----openId==="+openId+"--weId=="+weId+"---rid==="+rid+"---avatar==="+avatar);
Example example=new Example(MeepoUserQd.class);
example.createCriteria().andEqualTo("weId",weId).andEqualTo("rId",rid).andEqualTo("openId",openId);
List<MeepoUserQd> list=selectByExample(example);
if (list.size()>0){
log.info("----已签到---meepoUserId==="+meepoUserId+"----openId==="+openId);
return;
}
MeepoUserQd meepoUserQd=new MeepoUserQd();
meepoUserQd.setAvatar(avatar);
meepoUserQd.setLevel(1);
meepoUserQd.setNickName(nikeName);
meepoUserQd.setOpenId(openId);
meepoUserQd.setRId(rid);
meepoUserQd.setWeId(weId);
meepoUserQd.setCreateTime(System.currentTimeMillis()/1000L);
insertSelective(meepoUserQd);
}
}
package com.xxfc.platform.summit.biz;
import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.mapper.UserMapper;
import com.xxfc.platform.summit.service.WeixinService;
import com.xxfc.platform.summit.vo.MeepoActivityVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.mockito.internal.util.collections.Sets;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
* @author Administrator
*/
@Service
@Slf4j
public class UserBiz extends BaseBiz<UserMapper, User> {
@Autowired
private ActivityBiz activityBiz;
@Autowired
private ActivityBmBiz activityBmBiz;
@Autowired
WeixinService weixinService;
@Autowired
UserBiz userBiz;
public static final String frontSessionKey = "frontWeixKey";
public Integer addMeepoUser(User user,Integer activityId){
Integer userId=0;
log.info("-----activityId===="+activityId);
if (user==null|| StringUtils.isBlank(user.getOpenId())||activityId==null||activityId==0){
log.info("-----参数为空----");
return userId;
}
Activity activity=activityBiz.selectById(activityId);
if (activity==null){
log.info("-----活动不存在----");
return userId;
}
Integer rId=activity.getRId();
if (rId==null||rId==0){
log.info("-----没设置小程序抽奖活动id----");
return userId;
}
List<MeepoActivityVo> list=activityBmBiz.getMeepoActivitys(rId);
if (list.size()==0){
log.info("-----小程序抽奖活动id不存在----");
return userId;
}
MeepoActivityVo meepoActivityVo=list.get(0);
Integer weId=meepoActivityVo.getWeId();
String openId=user.getOpenId();
Example example=new Example(User.class);
example.createCriteria().andEqualTo("weId",weId).andEqualTo("rId",rId).andEqualTo("openId",openId);
List<User> uses=mapper.selectByExample(example);
if (uses.size()>0){
userId=uses.get(0).getId();
user.setId(userId);
}else {
user.setWeId(weId);
user.setRId(rId);
insertSelective(user);
userId=user.getId();
}
return userId;
}
public void authUser(String code,String key, HttpServletRequest request){
if (StringUtils.isBlank(code)){
log.info("----code为空---");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("code为空"));
}
String openid = null;
String access_token = null;
try {
JSONObject jsonData = weixinService.getAccessToken(code);
openid = jsonData.getString("openid");
access_token = jsonData.getString("access_token");
String refresh_token = jsonData.getString("refresh_token");
log.info("-----微信回调userInfo---openid=="+openid+"----access_token==="+access_token);
//验证access_token是否失效
JSONObject validateData = weixinService.getValidateData(access_token, openid);
if (!"0".equals(validateData.getString("errcode"))){
//刷新access_token
JSONObject refreshData= weixinService.getRefreshToken(refresh_token);
access_token = refreshData.getString("access_token");
}
}catch (Exception e){
e.printStackTrace();
log.info("网络异常===" + e.getMessage());
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("网络异常"));
}
try {
// 获取微信用户基本信息
JSONObject userinfo_json = weixinService.getUserInfo(access_token,openid);
if (userinfo_json == null || StringUtils.isNotBlank(userinfo_json.getString("errcode"))) {
log.info("调用微信用户基本信息接口失败");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("调用微信用户基本信息接口失败"));
}
log.info("微信用户基本信息---user===" +userinfo_json.toJSONString());
ActivityBm activityBm=activityBmBiz.userInfo(key);
if (activityBm==null){
log.info("redis的报名信息为空");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("redis的报名信息为空"));
}
Integer activityId=activityBm.getActivityId();
if (activityId==null||activityId==0){
log.info("redis的报名信息activityId---为空");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("redis的报名信息activityId---为空"));
}
User userInfo=new User();
String nickName = userinfo_json.getString("nickname");
String headimgurl = userinfo_json.getString("headimgurl");
String sex = userinfo_json.getString("sex");
if (StringUtils.isBlank(sex)){
sex="0";
}
userInfo.setOpenId(openid);
userInfo.setNickName(nickName);
userInfo.setAvatar(headimgurl);
userInfo.setSex(sex);
Integer userId=userBiz.addMeepoUser(userInfo,activityId);
log.info("小程序用户---userId===" +userId);
if (userId==null||userId==0){
log.info("小程序用户---userId---为空");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("小程序用户---userId---为空"));
}
String encode = Base64.encode(JSONObject.toJSONString(userInfo));
HttpSession session = request.getSession();
session.removeAttribute(frontSessionKey);
session.setAttribute(frontSessionKey, encode);
} catch (Exception e) {
log.info("调用微信用户基本信息接口失败", e);
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("调用微信用户基本信息接口失败"));
}
}
//获取缓存
public User getSession(HttpServletRequest request){
try {
HttpSession session = request.getSession();
String frontSessionValue1 = (String) session.getAttribute(frontSessionKey);
if (StringUtils.isBlank(frontSessionValue1)) {
return null;
}
JSONObject jsonObject=JSONObject.parseObject(frontSessionValue1);
User user=new User();
BeanUtils.copyProperties(jsonObject,user);
return user;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public User getUserInfo(HttpServletRequest request,Integer activityId){
User user=getSession(request);
if (user!=null){
Integer userId=addMeepoUser(user,activityId);
if (userId==null||userId==0){
return null;
}
return user;
}
return null;
}
}
...@@ -20,7 +20,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; ...@@ -20,7 +20,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
public class RedisConfiguration { public class RedisConfiguration {
@Bean @Bean
public RedisTemplate<String, Object> customRedisTemplate(RedisConnectionFactory factory) { public RedisTemplate<String, Object> summbitRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate(); RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory); redisTemplate.setConnectionFactory(factory);
RedisSerializer<String> stringSerializer = new StringRedisSerializer(); RedisSerializer<String> stringSerializer = new StringRedisSerializer();
......
package com.xxfc.platform.summit.controller; package com.xxfc.platform.summit.controller;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController; import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBiz; import com.xxfc.platform.summit.biz.ActivityBiz;
import com.xxfc.platform.summit.entity.Activity; import com.xxfc.platform.summit.entity.Activity;
import org.springframework.web.bind.annotation.RequestMapping; import com.xxfc.platform.summit.pojo.ActivityQuery;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*;
/** /**
* @author Administrator * @author Administrator
...@@ -13,4 +14,22 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -13,4 +14,22 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/activity") @RequestMapping("/activity")
public class ActivityController extends BaseController<ActivityBiz, Activity> { public class ActivityController extends BaseController<ActivityBiz, Activity> {
@PostMapping("/list")
public ObjectRestResponse getList(@RequestBody ActivityQuery query ){
return ObjectRestResponse.succ(baseBiz.getList(query));
}
@Override
@PutMapping ("/update")
public ObjectRestResponse update(@RequestBody Activity activity ){
if (baseBiz.update(activity)) {
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
} }
package com.xxfc.platform.summit.controller;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author Administrator
*/
@RestController
@RequestMapping("auth/activity")
@IgnoreClientToken
@IgnoreUserToken
public class AuthActivityController extends BaseController<ActivityBmBiz,ActivityBm> {
@Autowired
UserBiz userBiz;
@PostMapping("app/unauth/bm")
public ObjectRestResponse bm(@RequestBody ActivityBm activityBm, HttpServletRequest request){
User user=userBiz.getUserInfo(request,activityBm.getActivityId());
try {
return baseBiz.userBmOrQd(activityBm,user.getId());
}catch (Exception e){
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
}
}
@PostMapping("app/unauth/qd")
public ObjectRestResponse qd(@RequestBody ActivityBm activityBm, HttpServletRequest request){
User user=userBiz.getUserInfo(request,activityBm.getActivityId());
try {
return baseBiz.userBmOrQd(activityBm,user.getId());
}catch (Exception e){
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
}
}
}
package com.xxfc.platform.summit.controller;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBiz;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.pojo.ActivityQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author Administrator
*/
@RestController
@RequestMapping("/front/activity")
@IgnoreUserToken
@IgnoreClientToken
public class FrontActivityController extends BaseController<ActivityBiz, Activity> {
@Autowired
private ActivityBmBiz activityBmBiz;
@GetMapping("app/unauth/info")
public ObjectRestResponse info(
@RequestParam(value = "activityId",defaultValue = "0")Integer activityId,
@RequestParam(value = "key",defaultValue = "")String key,
HttpServletRequest request){
return activityBmBiz.getActivityById(activityId,key,request);
}
}
...@@ -3,6 +3,10 @@ package com.xxfc.platform.summit.controller; ...@@ -3,6 +3,10 @@ package com.xxfc.platform.summit.controller;
import cn.hutool.core.codec.Base64; import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.service.WeixinService; import com.xxfc.platform.summit.service.WeixinService;
import com.xxfc.platform.summit.vo.UserInfo; import com.xxfc.platform.summit.vo.UserInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -26,10 +30,17 @@ import javax.servlet.http.HttpSession; ...@@ -26,10 +30,17 @@ import javax.servlet.http.HttpSession;
public class WeixinController { public class WeixinController {
public static final String WECHAT_AUTOLOGIN_CALLBACKURL_KEY = "callback"; public static final String WECHAT_AUTOLOGIN_CALLBACKURL_KEY = "callback";
public static final String WECHAT_REDIS_KEY = "key";
@Autowired @Autowired
WeixinService weixinService; WeixinService weixinService;
@Autowired
UserBiz userBiz;
@Autowired
ActivityBmBiz activityBmBiz;
public static final String frontSessionKey = "frontWeixKey"; public static final String frontSessionKey = "frontWeixKey";
@Value("${wx.url}") @Value("${wx.url}")
...@@ -39,14 +50,15 @@ public class WeixinController { ...@@ -39,14 +50,15 @@ public class WeixinController {
@RequestMapping(value ="/app/unauth/wxLogin",method = RequestMethod.GET) @RequestMapping(value ="/app/unauth/wxLogin",method = RequestMethod.GET)
@IgnoreUserToken @IgnoreUserToken
public String index(@RequestParam(value = "redirec_url")String redirec_url){ public String index(@RequestParam(value = "redirec_url")String redirec_url,
@RequestParam(value = "key")String key){
log.info("-----微信wxLogin---redirec_url=="+redirec_url); log.info("-----微信wxLogin---redirec_url=="+redirec_url);
if (StringUtils.isBlank(redirec_url)){ if (StringUtils.isBlank(redirec_url)){
redirec_url=""; redirec_url="";
} }
try { try {
String encrypt_curr_url = Base64.encode(redirec_url.getBytes("utf-8")); String encrypt_curr_url = Base64.encode(redirec_url.getBytes("utf-8"));
redirec_url=url+"?" + WECHAT_AUTOLOGIN_CALLBACKURL_KEY+ "=" + encrypt_curr_url; redirec_url=url+"?" + WECHAT_AUTOLOGIN_CALLBACKURL_KEY+ "=" + encrypt_curr_url+"&"+WECHAT_REDIS_KEY+"="+key;
String oauth_api=weixinService.getAuthorize(redirec_url); String oauth_api=weixinService.getAuthorize(redirec_url);
return String.format("redirect:"+oauth_api); return String.format("redirect:"+oauth_api);
}catch (Exception e){ }catch (Exception e){
...@@ -63,41 +75,20 @@ public class WeixinController { ...@@ -63,41 +75,20 @@ public class WeixinController {
* @return * @return
*/ */
@GetMapping(value = "/app/unauth/userInfo") @GetMapping(value = "/app/unauth/userInfo")
public String getUserInformation(String code, String callback, HttpServletRequest request) { public String getUserInformation(String code, String callback,String key, HttpServletRequest request) {
log.info("-----微信回调userInfo---code=="+code+"----redirec_url==="+callback); log.info("-----微信回调userInfo---code=="+code+"----redirec_url==="+callback+"---key==="+key);
if (StringUtils.isBlank(code)){
log.info("----code为空---");
return String.format("code为空");
}
try { try {
JSONObject jsonData = weixinService.getAccessToken(code); userBiz.authUser(code,key,request);
String openid = jsonData.getString("openid");
String access_token = jsonData.getString("access_token");
String refresh_token = jsonData.getString("refresh_token");
log.info("-----微信回调userInfo---openid=="+openid+"----access_token==="+access_token);
HttpSession session = request.getSession();
//验证access_token是否失效
JSONObject validateData = weixinService.getValidateData(access_token, openid);
if (!"0".equals(validateData.getString("errcode"))){
//刷新access_token
JSONObject refreshData= weixinService.getRefreshToken(refresh_token);
access_token = refreshData.getString("access_token");
}
UserInfo userInfo=new UserInfo();
userInfo.setOpenId(openid);
log.info("UserInfo===" + JSONObject.toJSONString(userInfo));
String encode = Base64.encode(JSONObject.toJSONString(userInfo));
session.removeAttribute(frontSessionKey);
session.setAttribute(frontSessionKey, encode);
callback =new String(Base64.decode(callback), "utf-8"); callback =new String(Base64.decode(callback), "utf-8");
log.info("callback===" + callback); log.info("callback===" + callback);
return String.format("redirect:"+callback);
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
log.info("网络异常===" + e.getMessage()); log.info("网络异常===" + e.getMessage());
return String.format("网络异常");
} }
return String.format("redirect:"+callback);
} }
} }
package com.xxfc.platform.summit.interceptor; package com.xxfc.platform.summit.interceptor;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSON;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.UserAgentUtil; import com.github.wxiaoqi.security.common.util.UserAgentUtil;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.constant.RedisKey;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.service.WeixinService; import com.xxfc.platform.summit.service.WeixinService;
import com.xxfc.platform.summit.vo.UserInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.PrintWriter; import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/** /**
* 微信登陆拦截器 * 微信登陆拦截器
...@@ -29,38 +31,72 @@ import java.io.PrintWriter; ...@@ -29,38 +31,72 @@ import java.io.PrintWriter;
@Slf4j @Slf4j
public class WeChatH5LoginInterceoptor extends HandlerInterceptorAdapter { public class WeChatH5LoginInterceoptor extends HandlerInterceptorAdapter {
/**
* 微信公众号自动登陆令牌的url参数名
*/
public static final String frontSessionKey = "frontWeixKey";
@Autowired @Autowired
WeixinService weixinService; WeixinService weixinService;
@Autowired
UserBiz userBiz;
@Autowired
private RedisTemplate summbitRedisTemplate;
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String curr_domain = request.getServerName(); String curr_domain = request.getServerName();
HttpSession session = request.getSession();
log.info("curr_domain:" + curr_domain); log.info("curr_domain:" + curr_domain);
log.info("address:" + request.getRequestURL().toString()); log.info("address:" + request.getRequestURL().toString());
log.info("params:" + request.getQueryString()); log.info("params:" + request.getQueryString());
boolean isWx = UserAgentUtil.isWexinBrowser(request); boolean isWx = UserAgentUtil.isWexinBrowser(request);
if (isWx) { if (isWx) {
String frontSessionValue1 = (String) session.getAttribute(frontSessionKey); //session里面获取用户信息
if (StringUtils.isNotBlank(frontSessionValue1)) { User user=userBiz.getSession(request);
return true; if (user!=null){
return true;
} }
String redisKey=redisInfo(request);
Map<String,Object> result=new HashMap<>();
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.put("status",1001); if (StringUtils.isNotBlank(redisKey)){
json.put("data","https://dev.dfangche.com/api/summit/auth/app/unauth/wxLogin?redirec_url=https://dev.dfangche.com/h5/appHtml/view/wxh5/index.html"); json.put("key",redisKey);
response.getWriter().write(json.toJSONString()); }
json.put("url","https://dev.dfangche.com/api/summit/auth/app/unauth/wxLogin?redirec_url=https://dev.dfangche.com/h5/appHtml/view/wxh5/index.html");
result.put("data",json);
result.put("status",1001);
response.getWriter().write(result.toString());
return false; return false;
} }
return true; return true;
} }
//获取body的参数并放入redis
public String redisInfo(HttpServletRequest request)throws Exception{
request.setCharacterEncoding("UTF-8");
StringBuffer jb = new StringBuffer();
String line = null;
try
{
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
}
catch (Exception e)
{
e.printStackTrace();
}
String redisLockKey=null;
if (StringUtils.isNotBlank(jb)){
redisLockKey= RedisKey.CONSTANT_CODE_PREFIX + UUID.randomUUID();
Boolean suc = summbitRedisTemplate.opsForValue().setIfAbsent(redisLockKey, jb);
if (suc) {
summbitRedisTemplate.expire(redisLockKey, 5, TimeUnit.MINUTES);//5分钟内过期
}
}
return redisLockKey;
}
} }
package com.xxfc.platform.summit.mapper;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.vo.MeepoActivityVo;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* @author Administrator
*/
public interface ActivityBmMapper extends Mapper<ActivityBm> {
List<MeepoActivityVo> getMeepoActivitys(@Param("rId")Integer rId);
}
package com.xxfc.platform.summit.mapper;
import com.xxfc.platform.summit.entity.MeepoUserQd;
import tk.mybatis.mapper.common.Mapper;
/**
* @author Administrator
*/
public interface MeepoUserQdMapper extends Mapper<MeepoUserQd> {
}
package com.xxfc.platform.summit.mapper;
import com.xxfc.platform.summit.entity.User;
import tk.mybatis.mapper.common.Mapper;
/**
* @author Administrator
*/
public interface UserMapper extends Mapper<User> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.summit.mapper.ActivityBmMapper">
<select id="getMeepoActivitys" resultType="com.xxfc.platform.summit.vo.MeepoActivityVo">
SELECT
id as rId,
weid as weId,
title as title
FROM ims_meepo_xianchang_rid
<where>
<if test="rId!=null and rId!=0 ">
id=#{rId}
</if>
</where>
ORDER BY id DESC
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.summit.mapper.MeepoUserQdMapper">
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.summit.mapper.UserMapper">
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment