Pu Zhibing
5 天以前 8675ddc7e76f418ee47adc50ee7bac35171a9620
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -1,7 +1,5 @@
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;
@@ -14,6 +12,11 @@
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;
@@ -26,6 +29,7 @@
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;
@@ -33,6 +37,7 @@
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Service
@@ -81,7 +86,7 @@
    private DriverOrdersMapper driverOrdersMapper;
    @Autowired
    private RedisUtil redisUtil;
    private RedisTemplate redisTemplate;
    @Autowired
    private ALiSendSms aLiSendSms;
@@ -150,7 +155,7 @@
        String sms = "短信验证码【" + authCode + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!";
        //发送验证码短信
        redisUtil.setStrValue(phone, authCode, 5 * 60);//设置五分钟过期
        redisTemplate.opsForValue().set(phone, authCode, 5, TimeUnit.MINUTES);//设置五分钟过期
        String templateCode = "";
        switch (type){
            case 1:
@@ -166,13 +171,14 @@
                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();
    }
@@ -186,7 +192,7 @@
     */
    @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;
        }
@@ -459,6 +465,16 @@
        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("账号正在审核中,请耐心等待");
        }
@@ -469,7 +485,7 @@
            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("当前账户正在车载端登录");
        }
@@ -524,7 +540,7 @@
            }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;
@@ -765,6 +781,33 @@
            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);
@@ -1218,9 +1261,9 @@
        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();
@@ -1314,9 +1357,9 @@
        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();
@@ -1400,9 +1443,9 @@
        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();
@@ -1427,11 +1470,11 @@
        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());
            }
        }
    }
@@ -1508,28 +1551,35 @@
    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
@@ -1549,30 +1599,21 @@
        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);
    }
}