Commit 621b7817 authored by cy's avatar cy

修改shiro管理,添加vip用户

parent 227b8f9c
......@@ -18,6 +18,7 @@
<result column="update_time" property="updateTime"/>
<result column="is_vip" property="isVip"/>
<result column="openid" property="openid"/>
<result column="vip_mobile" property="vipMobile"/>
</resultMap>
<sql id="table">
......@@ -30,12 +31,12 @@
</sql>
<sql id="cols_exclude_id">
user_name,password, phone,uuid,head_image,sex,school, exam_type,source,is_delete,create_time,update_time,is_vip,openid
user_name,password, phone,uuid,head_image,sex,school, exam_type,source,is_delete,create_time,update_time,is_vip,openid,vip_mobile
</sql>
<sql id="vals">
#{userName},#{password},#{phone},#{uuid},#{headImage},#{sex},#{school},#{examType}, #{source},
#{isDelete},now(),now(),#{isVip},#{openid}
#{isDelete},now(),now(),#{isVip},#{openid},#{vipMobile}
</sql>
<sql id="updateCondition">
......@@ -51,7 +52,8 @@
<if test="isDelete != null">is_delete = #{isDelete},</if>
update_time =now(),
<if test="isVip != null">is_vip = #{isVip},</if>
<if test="openid != null">openid =#{openid}</if>
<if test="openid != null">openid =#{openid},</if>
<if test="vipMobile != null">vip_mobile =#{vipMobile}</if>
</sql>
<sql id="criteria">
......@@ -119,7 +121,7 @@
from
<include refid="table"/>
<where>
is_delete=0
is_delete=0 and is_vip = 2
<if test="startTime != null">
and create_time
......@@ -143,7 +145,7 @@
FROM
<include refid="table"/>
<where>
is_delete=0
is_delete=0 and is_vip = 2
<if test="startTime != null">
and create_time
......
......@@ -108,4 +108,10 @@ public class User implements Serializable {
@ApiModelProperty(name = "微信用户openid", value = "openid")
private String openid;
/**
* vip电话号码
*/
@ApiModelProperty(name = "vipMobile", value = "vip电话号码")
private String vipMobile;
}
package cn.wisenergy.model.dto;
import cn.wisenergy.model.app.ScoreInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("StaffAddDto")
public class StaffAddDto {
private static final long serialVersionUID = 1L;
/**
* 用户名称
*/
@ApiModelProperty(value = "用户名称", name = "userName")
private String userName;
/**
* 性别
*/
@ApiModelProperty(value = "性别", name = "sex")
private Integer sex;
/**
* 学校
*/
@ApiModelProperty(value = "学校", name = "school")
private String school;
/**
* 考生类型 1:文化课考生 2:美术生 3:体育生 4:文学编导考生
*/
@ApiModelProperty(value = "考生类型 1:文化课考生 2:美术生 3:体育生 4:文学编导考生", name = "studentType")
private Integer studentType;
/**
* 学生成绩信息
*/
@ApiModelProperty(value = "学生成绩信息", name = "scoreInfo")
private ScoreInfo scoreInfo;
/**
* vip客户电话
*/
@ApiModelProperty(value = "vip客户电话", name = "VipMobile")
private String VipMobile;
}
......@@ -71,6 +71,13 @@ public class UserDto implements Serializable {
@ExcelProperty(value = "手机号")
private String phone;
/**
* vip手机号
*/
@ApiModelProperty(value = "vip手机号", name = "vipMobile")
@ExcelProperty(value = "vip手机号")
private String vipMobile;
/**
* 学校
*/
......
......@@ -69,6 +69,13 @@ public class UserInfoDto implements Serializable {
@ExcelProperty(value = "登录来源")
private Integer source;
/**
* vip用户手机
*/
@ApiModelProperty(value = "vip用户手机", name = "vipMobile")
@ExcelProperty(value = "vip用户手机")
private String vipMobile;
/**
* 手机
*/
......
......@@ -2,6 +2,7 @@ package cn.wisenergy.service.app;
import cn.wisenergy.common.utils.R;
import cn.wisenergy.model.app.Local;
import cn.wisenergy.model.dto.StaffAddDto;
import cn.wisenergy.model.dto.UserInfoDto;
import cn.wisenergy.model.vo.*;
import com.github.pagehelper.PageInfo;
......@@ -28,12 +29,10 @@ public interface StaffUserVipService {
/**
* 添加员工和vip客户关系
* @param staffId 员工id
* @param phone 手机号
* 添vip客户
* @return true:成功 false:失败
*/
R<Boolean> addUserByPhone(Integer staffId,String phone);
R<Boolean> addVipUser(StaffAddDto staffAddDto);
/**
* 获取地区列表
......
......@@ -248,9 +248,9 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
SetQueryTime(result);
volunteerVo.setVolunteers(result);
List<Volunteer> volunteers = volunteerVo.getVolunteers();
//除本科文化以外,其余最低位次用--代替
//为空的最低位次用--代替
for (Volunteer info : volunteers) {
if (info.getType()!= SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode()) {
if (null == info.getLowestRank()) {
info.setLowestRank("--");
}
}
......
......@@ -5,6 +5,7 @@ import cn.wisenergy.common.utils.R;
import cn.wisenergy.common.utils.StringUtil;
import cn.wisenergy.mapper.*;
import cn.wisenergy.model.app.*;
import cn.wisenergy.model.dto.StaffAddDto;
import cn.wisenergy.model.dto.UserCommitDto;
import cn.wisenergy.model.dto.UserDto;
import cn.wisenergy.model.dto.UserInfoDto;
......@@ -69,7 +70,7 @@ public class StaffUserVipServiceImpl extends ServiceImpl<LocalMapper, Local> imp
@Autowired
private LocalMapper localMapper;
private static final int ERROR_CODE = 1;
//初始密码
private static final String PASSWORD = "123456";
......@@ -102,7 +103,7 @@ public class StaffUserVipServiceImpl extends ServiceImpl<LocalMapper, Local> imp
Subject subject = SecurityUtils.getSubject();
String credentialsSalt = Md5Util.digestMD5(loginVo.getPassword() );
UserToken userToken = new UserToken(loginVo.getLoginName(), credentialsSalt, STAFF_LOGIN_TYPE);
//UsernamePasswordToken token = new UsernamePasswordToken(loginVo.getLoginName(), credentialsSalt,"staff");
try {
subject.login(userToken);
QueryWrapper<Staff> objectQueryWrapper = new QueryWrapper<>();
......@@ -231,11 +232,41 @@ public class StaffUserVipServiceImpl extends ServiceImpl<LocalMapper, Local> imp
return R.ok(info);
}
@Transactional
@Override
public R<Boolean> addUserByPhone(Integer staffId, String phone) {
log.info("StaffUserVipServiceImpl[].addUserByPhone[].input.param:" +staffId,phone);
return addPhone(staffId,phone);
public R<Boolean> addVipUser(StaffAddDto staffAddDto) {
log.info("StaffUserVipServiceImpl[].addUserByPhone[].input.param:" +staffAddDto);
if(null ==staffAddDto){
return R.error("入参为空");
}
if(!getUserInfo(staffAddDto.getVipMobile())){
return R.error("该电话已存在");
}
User user = new User();
user.setIsVip(1);
user.setSchool(staffAddDto.getSchool());
user.setSex(staffAddDto.getSex());
user.setExamType(staffAddDto.getStudentType());
user.setIsDelete(0);
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
user.setUserName(staffAddDto.getUserName());
user.setVipMobile(staffAddDto.getVipMobile());
usersMapper.insert(user);
R<Boolean> checkScore = volunteerManager.checkScore(staffAddDto.getScoreInfo());
if (null != checkScore && checkScore.getCode() == ERROR_CODE) {
return R.error(checkScore.getMessage());
}
ScoreInfo scoreInfo = staffAddDto.getScoreInfo();
scoreInfo.setCreateTime(new Date());
scoreInfo.setUserId(user.getId());
scoreInfo.setUpdateTime(new Date());
int insert = scoreInfoMapper.insert(scoreInfo);
if(insert>0){
return R.ok(0,true);
}
return R.error("添加失败");
}
@Override
......@@ -245,7 +276,6 @@ public class StaffUserVipServiceImpl extends ServiceImpl<LocalMapper, Local> imp
if (CollectionUtils.isEmpty(list)) {
return R.error("入参为空");
}
return R.ok(0,list);
}
......@@ -275,23 +305,15 @@ public class StaffUserVipServiceImpl extends ServiceImpl<LocalMapper, Local> imp
}
private R<Boolean> addPhone(Integer staffId,String phone){
if (null==staffId|| StringUtils.isBlank(phone)) {
return R.error("入参为空");
}
//进行vip客户和员工绑定
User byPhone =userVipManager.checkPhone(phone);
if (null==byPhone) {
return R.error("信息添加失败");
}
R<Boolean> booleanR = userVipManager.addPhone1(staffId, byPhone);
//判断数据是否添加成功
if (booleanR.getCode()!=0) {
return R.error("关系绑定失败");
public boolean getUserInfo(String vipMobile){
QueryWrapper<User> objectQueryWrapper = new QueryWrapper<>();
objectQueryWrapper.eq("vip_mobile",vipMobile);
User user = usersMapper.selectOne(objectQueryWrapper);
if(null == user){
return true;
}
return R.ok(0,true);
return false;
}
@Override
......@@ -326,7 +348,7 @@ public class StaffUserVipServiceImpl extends ServiceImpl<LocalMapper, Local> imp
.registerTime(t.getRegisterTime())
.source(t.getSource()==1?"PC":"APP")
.userName(t.getUserName())
.phone(t.getPhone())
.vipMobile(t.getVipMobile())
.lastLoginTime(t.getLastLoginTime())
.school(t.getSchool())
.examType(t.getExamType()==1?"文化生":t.getExamType()==2?"美术生":t.getExamType()==3?"体育生":"文学编导考生")
......
......@@ -2,6 +2,7 @@ package cn.wisenergy.web.admin.controller.app;
import cn.wisenergy.common.utils.R;
import cn.wisenergy.model.app.Local;
import cn.wisenergy.model.dto.StaffAddDto;
import cn.wisenergy.model.dto.UserInfoDto;
import cn.wisenergy.model.vo.*;
import cn.wisenergy.service.app.SchemeService;
......@@ -35,17 +36,13 @@ public class StaffUserVipController {
return staffUserVipService.staffLogin(loginVo);
}
@ApiOperation(value = "添加Vip客户(当客户已存在时)",notes = "添加Vip客户(当客户已存在时)",httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "staffId", value = "员工id", dataType = "int"),
@ApiImplicitParam(name = "phone", value = "vip客户手机号", dataType = "string")
}
)
@PostMapping("/add2")
public R<Boolean> addUserVipByPhone(Integer staffId, String phone){
log.info("StaffUserVipController[].addUserVipByPhone[].input.param:"+staffId,phone);
@ApiOperation(value = "添加Vip客户",notes = "添加Vip客户",httpMethod = "POST")
@ApiModelProperty(name = "staffAddDto",value = "登录信息",dataType = "StaffAddDto")
@PostMapping("/addVipUser")
public R<Boolean> addVipUser(@RequestBody StaffAddDto staffAddDto){
log.info("StaffUserVipController[].addUserVipByPhone[].input.param:"+staffAddDto);
return staffUserVipService.addUserByPhone(staffId,phone);
return staffUserVipService.addVipUser(staffAddDto);
}
@ApiOperation(value = "查询Vip客户(查询所有vip客户就不用传staffId)",notes = "查询Vip客户(查询所有vip客户就不用传staffId)",httpMethod = "POST")
......
package cn.wisenergy.web.shir.config;
import cn.wisenergy.web.shir.cache.MySessionManager;
import cn.wisenergy.web.shir.filter.AuthenticationFilter;
import cn.wisenergy.web.shir.filter.KickoutSessionControlFilter;
import cn.wisenergy.web.shir.realm.AdminRealm;
import cn.wisenergy.web.shir.realm.CodeRealm;
......@@ -67,13 +68,14 @@ public class ShiroConfig {
//自定义拦截器
Map<String, Filter> filtersMap = new LinkedHashMap<>();
filtersMap.put("authc", new AuthenticationFilter());
filtersMap.put("kickout",kickoutSessionControlFilter());
shiroFilterFactoryBean.setFilters(filtersMap);
filterChainDefinitionMap.put("/authInformation/save", "anon");//存储设备IMEI号和手机SIM卡ID号
filterChainDefinitionMap.put("/user/login/*", "anon"); // 登录页面-身份认证
filterChainDefinitionMap.put("/account/login", "anon"); // 登录页面-身份认证
filterChainDefinitionMap.put("/staff/staffUser", "anon"); // 登录页面-身份认证
filterChainDefinitionMap.put("/staffUser/login", "anon"); // 登录页面-身份认证
filterChainDefinitionMap.put("/swagger-ui.html", "anon"); // swagger接口-匿名访问
filterChainDefinitionMap.put("/swagger/**", "anon");
filterChainDefinitionMap.put("/admin/anon/**", "anon");
......
package cn.wisenergy.web.shir.filter;
import com.alibaba.fastjson.JSONObject;
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
import org.springframework.http.HttpStatus;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
* 跨域配置拦截器,继承FormAuthenticationFilter
*/
public class AuthenticationFilter extends FormAuthenticationFilter {
@Override
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
// 错误异常提示
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpServletRequest httpRequest = (HttpServletRequest) request;
String sessionId = ((HttpServletRequest) request).getHeader("sessionId");
if (sessionId == null) {
setHeader(httpRequest, httpResponse);
httpResponse.setCharacterEncoding("UTF-8");
httpResponse.setContentType("application/json");
Map<String, Object> map = new HashMap<>();
map.put("status", "1001");
map.put("message", "登录已超时,请重新登录!");
httpResponse.getWriter().write(JSONObject.toJSONString(map));
return false;
} else {
return true;
}
}
/**
* 为response设置header,实现跨域
*/
private void setHeader(HttpServletRequest request, HttpServletResponse response) {
//跨域的header设置
response.setHeader("Access-control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", request.getMethod());
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
//防止乱码,适用于传输JSON数据
//Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild
response.setHeader("Content-Type", "application/json;charset=UTF-8");
response.setStatus(HttpStatus.OK.value());
}
@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
if (request instanceof HttpServletRequest) {
if (((HttpServletRequest) request).getMethod().toUpperCase().equals("OPTIONS")) {
return true;
}
}
//小程序放行
if(isFilter((HttpServletRequest) request)){
return true;
}
return super.isAccessAllowed(request, response, mappedValue);
}
//判断请求头中是否带有identity(标识是小程序)
public boolean isFilter(HttpServletRequest request) {
return null != request.getHeader("identity") && request.getHeader("identity").equals("miniprogram");
}
}
......@@ -76,14 +76,19 @@ public class KickoutSessionControlFilter extends AccessControlFilter {
return true;
}
Session session = subject.getSession();
//设置session超时时长,30分钟(1800000毫秒)
//session.setTimeout(1800000);
//5分钟
session.setTimeout(300000);
Serializable sessionId = null;
String username = null;
Deque<Serializable> deque = null;
try {
//客户端
User user = (User) SecurityUtils.getSubject().getPrincipal();
username=user.getPhone();
username = user.getPhone();
sessionId = session.getId();
//读取缓存,没有就存入
deque = cache.get(username);
......@@ -96,31 +101,16 @@ public class KickoutSessionControlFilter extends AccessControlFilter {
//读取缓存,没有就存入
deque = cache.get(username);
} catch (Exception en) {
try {
//员工端
Staff staff = (Staff) SecurityUtils.getSubject().getPrincipal();
username = staff.getLoginName();
sessionId = session.getId();
//读取缓存,没有就存入
deque = cache.get(username);
} catch (Exception es) {
map.put("status", "1001");
map.put("message", "登录已超时,请重新登录!");
out(response, map);
//退出登录
subject.logout();
return false;
}
}
}
//30分钟(1800000毫秒)
//session.setTimeout(1800000);
//5分钟
session.setTimeout(300000);
//如果此用户没有session队列,也就是还没有登录过,缓存中没有
//就new一个空队列,不然deque对象为空,会报空指针
//如果此用户没有session队列,也就是还没有登录过,缓存中没有,就new一个空队列,不然deque对象为空,会报空指针
if (deque == null) {
deque = new LinkedList<>();
}
......@@ -172,12 +162,11 @@ public class KickoutSessionControlFilter extends AccessControlFilter {
return true;
}
private void out(ServletResponse hresponse, Map<String, Object> map) throws IOException {
hresponse.setContentType("text/json");
private void out(ServletResponse response, Map<String, Object> map) throws IOException {
response.setContentType("text/json");
//设置字符集为'UTF-8'
hresponse.setCharacterEncoding("UTF-8");
PrintWriter out = hresponse.getWriter();
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.write(JSON.toJSONString(map, SerializerFeature.WriteMapNullValue));
out.flush();
out.close();
......
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