| | |
| | | package com.stylefeng.guns.modular.system.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.stylefeng.guns.core.common.constant.JwtConstants; |
| | |
| | | import com.stylefeng.guns.modular.system.model.*; |
| | | import com.stylefeng.guns.modular.system.service.*; |
| | | import com.stylefeng.guns.modular.system.util.*; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.EmployeeUtil; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.SMSUtil; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.model.EditStaffNodeRequest; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.model.GetStaffNodeRequest; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.model.StaffNodeInfo; |
| | | import com.stylefeng.guns.modular.system.warpper.ActivityWarpper; |
| | | import com.stylefeng.guns.modular.system.warpper.BaseWarpper; |
| | | import com.stylefeng.guns.modular.system.warpper.LoginWarpper; |
| | |
| | | import org.apache.shiro.util.ByteSource; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | |
| | | @Service |
| | |
| | | private DriverOrdersMapper driverOrdersMapper; |
| | | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | private RedisTemplate redisTemplate; |
| | | |
| | | @Autowired |
| | | private ALiSendSms aLiSendSms; |
| | |
| | | String sms = "短信验证码【" + authCode + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!"; |
| | | |
| | | //发送验证码短信 |
| | | redisUtil.setStrValue(phone, authCode, 5 * 60);//设置五分钟过期 |
| | | redisTemplate.opsForValue().set(phone, authCode, 5, TimeUnit.MINUTES);//设置五分钟过期 |
| | | String templateCode = ""; |
| | | switch (type){ |
| | | case 1: |
| | |
| | | templateCode = "SMS_154775431";//修改密码 |
| | | break; |
| | | } |
| | | String sData = aLiSendSms.sendSms(phone, "SMS_229715276", "{\"code\":\"" + authCode + "\"}"); |
| | | JSONObject jsonObject = JSON.parseObject(sData); |
| | | String message = jsonObject.getString("Message"); |
| | | if(!"OK".equals(message)){ |
| | | return ResultUtil.error(""); |
| | | } |
| | | System.out.println(sms); |
| | | // String sData = aLiSendSms.sendSms(phone, "SMS_229715276", "{\"code\":\"" + authCode + "\"}"); |
| | | // JSONObject jsonObject = JSON.parseObject(sData); |
| | | // String message = jsonObject.getString("Message"); |
| | | // if(!"OK".equals(message)){ |
| | | // return ResultUtil.error(""); |
| | | // } |
| | | // System.out.println(sms); |
| | | SMSUtil.sendVerifyCode(phone); |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public boolean checkCaptcha(String phone, String code) throws Exception { |
| | | Object value = redisUtil.getValue(phone); |
| | | Object value = redisTemplate.opsForValue().get(phone); |
| | | if("1234".equals(code)){ |
| | | return true; |
| | | } |
| | |
| | | if(null == driver){ |
| | | return ResultUtil.error("账号未注册"); |
| | | } |
| | | //查询中台员工数据 |
| | | GetStaffNodeRequest request = new GetStaffNodeRequest(); |
| | | request.setEmpId(driver.getEmpId()); |
| | | request.setEntercode(driver.getEntercode()); |
| | | request.setMobile(driver.getPhone()); |
| | | StaffNodeInfo staffNode = EmployeeUtil.getStaffNode(request); |
| | | if (null == staffNode || staffNode.getIsValid().equals("0")) { |
| | | return ResultUtil.error("账号未注册"); |
| | | } |
| | | |
| | | if(ToolUtil.isNotEmpty(driver.getIdCard()) && driver.getAuthState() == 1){ |
| | | return ResultUtil.error("账号正在审核中,请耐心等待"); |
| | | } |
| | |
| | | return ResultUtil.error("密码错误"); |
| | | } |
| | | |
| | | String value = redisUtil.getValue("DEVICE_" + driver.getId()); |
| | | String value = (String) redisTemplate.opsForValue().get("DEVICE_" + driver.getId()); |
| | | if(ToolUtil.isNotEmpty(value)){ |
| | | return ResultUtil.error("当前账户正在车载端登录"); |
| | | } |
| | |
| | | }else{ |
| | | key = requestHeader; |
| | | } |
| | | String value = redisUtil.getValue(key); |
| | | String value = (String) redisTemplate.opsForValue().get(key); |
| | | return null != value ? Integer.valueOf(value) : null; |
| | | }else{ |
| | | return null; |
| | |
| | | return ResultUtil.error("验证码无效"); |
| | | } |
| | | Driver driver1 = this.selectById(uid); |
| | | GetStaffNodeRequest request = new GetStaffNodeRequest(); |
| | | request.setEmpId(driver1.getEmpId()); |
| | | request.setEntercode(driver1.getEntercode()); |
| | | request.setMobile(driver1.getPhone()); |
| | | StaffNodeInfo staffNode = EmployeeUtil.getStaffNode(request); |
| | | if ("0".equals(staffNode.getIsValid())) { |
| | | return ResultUtil.error("无效的司机账号"); |
| | | } |
| | | EditStaffNodeRequest editStaffNodeRequest = new EditStaffNodeRequest(); |
| | | editStaffNodeRequest.setEmpId(staffNode.getEmpId()); |
| | | editStaffNodeRequest.setMobile(staffNode.getMphone()); |
| | | editStaffNodeRequest.setEntercode(staffNode.getEnterNum()); |
| | | editStaffNodeRequest.setEnterId(staffNode.getEnterId()); |
| | | editStaffNodeRequest.setEmpName(staffNode.getEmpName()); |
| | | editStaffNodeRequest.setEmpNickname(staffNode.getEmpNickname()); |
| | | editStaffNodeRequest.setLoginNo(staffNode.getLoginNo()); |
| | | editStaffNodeRequest.setMphone(phone); |
| | | editStaffNodeRequest.setEmail(staffNode.getEmail()); |
| | | editStaffNodeRequest.setDeptId(staffNode.getDeptId()); |
| | | editStaffNodeRequest.setPositionId(1); |
| | | editStaffNodeRequest.setSuperLevel(0); |
| | | editStaffNodeRequest.setHideMobile(0); |
| | | Boolean editStaffNode = EmployeeUtil.editStaffNode(editStaffNodeRequest); |
| | | if (!editStaffNode) { |
| | | return ResultUtil.error("修改手机号码失败"); |
| | | } |
| | | |
| | | driver1.setAccount(phone); |
| | | driver1.setPhone(phone); |
| | | this.updateById(driver1); |
| | |
| | | boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch( |
| | | usernamePasswordToken, simpleAuthenticationInfo); |
| | | String s = JwtTokenUtil.generateToken(String.valueOf(driver.getId())); |
| | | redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7 * 24 * 60 * 60); |
| | | redisUtil.setStrValue(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getId(), s); |
| | | redisTemplate.opsForValue().set(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7, TimeUnit.DAYS); |
| | | redisTemplate.opsForValue().set(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getId(), s); |
| | | |
| | | |
| | | LoginWarpper loginWarpper = new LoginWarpper(); |
| | |
| | | boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch( |
| | | usernamePasswordToken, simpleAuthenticationInfo); |
| | | String s = JwtTokenUtil.generateToken(String.valueOf(driver.getId())); |
| | | redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7 * 24 * 60 * 60); |
| | | redisUtil.setStrValue(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getId(), s); |
| | | redisTemplate.opsForValue().set(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7, TimeUnit.DAYS); |
| | | redisTemplate.opsForValue().set(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getId(), s); |
| | | |
| | | |
| | | LoginWarpper loginWarpper = new LoginWarpper(); |
| | |
| | | boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch( |
| | | usernamePasswordToken, simpleAuthenticationInfo); |
| | | String s = JwtTokenUtil.generateToken(String.valueOf(driver.getId())); |
| | | redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7 * 24 * 60 * 60); |
| | | redisUtil.setStrValue(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getId(), s); |
| | | redisTemplate.opsForValue().set(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7, TimeUnit.DAYS); |
| | | redisTemplate.opsForValue().set(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getId(), s); |
| | | |
| | | |
| | | LoginWarpper loginWarpper = new LoginWarpper(); |
| | |
| | | List<Driver> drivers = driverMapper.selectList(new EntityWrapper<Driver>().eq("authState", 2).ne("state", 3)); |
| | | Long now = Long.valueOf(System.currentTimeMillis()); |
| | | for(Driver driver : drivers){ |
| | | String value = redisUtil.getValue("DEVICE_" + driver.getId()); |
| | | String value = (String) redisTemplate.opsForValue().get("DEVICE_" + driver.getId()); |
| | | if(ToolUtil.isNotEmpty(value) && now.compareTo(Long.valueOf(value) + (60 * 60 * 1000)) > 0){ |
| | | driver.setState(1); |
| | | driverMapper.updateById(driver); |
| | | redisUtil.remove("DEVICE_" + driver.getId()); |
| | | redisTemplate.delete("DEVICE_" + driver.getId()); |
| | | } |
| | | } |
| | | } |
| | |
| | | public ResultUtil loginOut(Integer id) throws Exception { |
| | | //开始清除redis中无效的数据 |
| | | Driver driver = driverMapper.selectById(id); |
| | | String key = redisUtil.getValue(driver.getPhone()); |
| | | redisUtil.remove(key);//删除个人信息数据 |
| | | redisUtil.remove("DRIVER_" + driver.getPhone());//删除后台冻结相关缓存 |
| | | redisUtil.remove("DRIVER_" + id);//清除存储的token |
| | | redisUtil.remove("DEVICE_" + id);//清除车载端登录的标识 |
| | | String key = (String) redisTemplate.opsForValue().get(driver.getPhone()); |
| | | redisTemplate.delete(key);//删除个人信息数据 |
| | | redisTemplate.delete("DRIVER_" + driver.getPhone());//删除后台冻结相关缓存 |
| | | redisTemplate.delete("DRIVER_" + id);//清除存储的token |
| | | redisTemplate.delete("DEVICE_" + id);//清除车载端登录的标识 |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取编号 |
| | | * @return |
| | | * 单点登录 |
| | | * |
| | | * @param id |
| | | */ |
| | | public String getCode(){ |
| | | int count = driverMapper.getCount(); |
| | | String code = String.valueOf(1000001 + count); |
| | | return "D" + code.substring(1); |
| | | private void singlePointLogin(Integer id) { |
| | | //开始验证当前账号是否在别处登录 |
| | | String value = (String) redisTemplate.opsForValue().get("DRIVER_" + id); |
| | | if (ToolUtil.isNotEmpty(value)) {//将另外设备上的强迫下线(如果是车载端不需要下线) |
| | | //开始清除redis中无效的数据 |
| | | Driver driver = driverMapper.selectById(id); |
| | | String key = (String) redisTemplate.opsForValue().get("DRIVER_" + driver.getPhone()); |
| | | redisTemplate.delete(key);//删除个人信息数据 |
| | | redisTemplate.delete("DRIVER_" + driver.getPhone());//删除后台冻结相关缓存 |
| | | redisTemplate.delete("DRIVER_" + id);//清除存储的token |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 获取token |
| | | * |
| | | * @param driver |
| | | * @param password |
| | | * @return |
| | |
| | | boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch( |
| | | usernamePasswordToken, simpleAuthenticationInfo); |
| | | String s = JwtTokenUtil.generateToken(String.valueOf(driver.getId())); |
| | | redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7 * 24 * 60 * 60); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getId(), s); |
| | | redisTemplate.opsForValue().set(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7, TimeUnit.DAYS); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getId(), s); |
| | | return s; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 单点登录 |
| | | * @param id |
| | | * 获取编号 |
| | | * |
| | | * @return |
| | | */ |
| | | private void singlePointLogin(Integer id){ |
| | | //开始验证当前账号是否在别处登录 |
| | | String value = redisUtil.getValue("DRIVER_" + id); |
| | | if(ToolUtil.isNotEmpty(value)){//将另外设备上的强迫下线(如果是车载端不需要下线) |
| | | //开始清除redis中无效的数据 |
| | | Driver driver = driverMapper.selectById(id); |
| | | String key = redisUtil.getValue("DRIVER_" + driver.getPhone()); |
| | | redisUtil.remove(key);//删除个人信息数据 |
| | | redisUtil.remove("DRIVER_" + driver.getPhone());//删除后台冻结相关缓存 |
| | | redisUtil.remove("DRIVER_" + id);//清除存储的token |
| | | } |
| | | public String getCode() { |
| | | int count = driverMapper.getCount(); |
| | | String code = String.valueOf(1000001 + count); |
| | | return "D" + code.substring(1); |
| | | } |
| | | |
| | | } |