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.core.shiro.ShiroKit; import com.stylefeng.guns.core.shiro.ShiroUser; import com.stylefeng.guns.core.util.JwtTokenUtil; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics; import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; import com.stylefeng.guns.modular.system.dao.*; 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.warpper.ActivityWarpper; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; import com.stylefeng.guns.modular.system.warpper.LoginWarpper; import com.stylefeng.guns.modular.system.warpper.RegisteredWarpper; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; import org.apache.shiro.crypto.hash.Md5Hash; import org.apache.shiro.util.ByteSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; @Service public class DriverServiceImpl extends ServiceImpl implements IDriverService { @Resource private DriverMapper driverMapper; @Resource private CompanyCityMapper companyCityMapper; @Resource private UserActivityInviteMapper userActivityInviteMapper; @Resource private DriverServiceMapper driverServiceMapper; @Resource private UserInfoMapper userInfoMapper; @Resource private PhoneMapper phoneMapper; @Resource private DriverWorkMapper driverWorkMapper; @Resource private CompanyMapper companyMapper; @Resource private DriverActivityRegisteredMapper driverActivityRegisteredMapper; @Resource private DriverActivityOrderMapper driverActivityOrderMapper; @Resource private DriverActivityOnlineMapper driverActivityOnlineMapper; @Resource private DriverActivityHistoryMapper driverActivityHistoryMapper; @Resource private UserCouponRecordMapper userCouponRecordMapper; @Resource private DriverOrdersMapper driverOrdersMapper; @Autowired private RedisUtil redisUtil; @Autowired private ALiSendSms aLiSendSms; @Autowired private ICompanyCityService companyCityService; @Autowired private GDFalconUtil gdFalconUtil; @Autowired private IOrderService orderService; @Autowired private ISmsrecordService smsrecordService; @Autowired private ICarService carService; @Autowired private IReassignService reassignService; @Autowired private IIncomeService incomeService; @Autowired private DateUtil dateUtil; @Autowired private IOrderTaxiService orderTaxiService; @Autowired private PushMinistryOfTransportUtil pushMinistryOfTransportUtil; @Resource private CarServiceMapper carServiceMapper; @Autowired private PushUtil pushUtil; @Autowired private IOrderLogisticsService orderLogisticsService; @Value("${pushMinistryOfTransport}") private boolean pushMinistryOfTransport; private String salt = "SA;d5#"; private Map loginTime = new HashMap<>();//登录时间 private Map loginFailures = new HashMap<>();//登录失败次数 /** * 获取短信验证码 * @param phone * @return * @throws Exception */ @Override public ResultUtil queryCaptcha(String phone, Integer type) throws Exception { Random random = new Random(); StringBuffer sb = new StringBuffer(); for(int i = 0; i < 4; i++){ sb.append((int) (random.nextDouble() * 10)); } String authCode = sb.toString(); String sms = "短信验证码【" + authCode + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!"; //发送验证码短信 redisUtil.setStrValue(phone, authCode, 5 * 60);//设置五分钟过期 String templateCode = ""; switch (type){ case 1: templateCode = "8212979ba98f4918823986481ae2e104";//身份验证 break; case 2: templateCode = "08b2c59bdce945549c0ee6bbe46252f8";//登录确认 break; case 3: templateCode = "c39681463441496aaa4d96a642ff4227";//用户注册 break; case 4: templateCode = "c230a6b92504473c97c17741e1cc0b9d";//修改密码 break; } // HuaWeiSMSUtil.sendSms("[\"" + authCode + "\"]", phone, "8822061324669", templateCode); String sData = aLiSendSms.sendSms(phone, "SMS_317840272", "{\"code\":\"" + authCode + "\"}"); JSONObject jsonObject = JSON.parseObject(sData); String message = jsonObject.getString("Message"); if(!"OK".equals(message)){ return ResultUtil.error(""); } System.out.println(sms); return ResultUtil.success(); } /** * 校验短信验证码 * @param phone * @param code * @return * @throws Exception */ @Override public boolean checkCaptcha(String phone, String code) throws Exception { Object value = redisUtil.getValue(phone); if("1234".equals(code)){ return true; } if(null != value && code.equals(String.valueOf(value))){ return true; }else{ return false; } } /** * 司机提交注册申请 * @throws Exception */ @Override public ResultUtil registeredDriver(String phone, String code, String password, Integer uid, Integer type, Integer userType) throws Exception { ResultUtil result = this.registeredDriver(phone, code, password); if(result.getCode() == 200 && null != uid){ if(type == 2){ Driver driver = driverMapper.selectById(uid); List> query = driverActivityRegisteredMapper.query(userType, driver.getCompanyId()); BigDecimal bigDecimal = new BigDecimal("0"); for(Map map : query){ if(Double.valueOf(String.valueOf(map.get("money"))).compareTo(0D) > 0){ bigDecimal = bigDecimal.add(new BigDecimal(String.valueOf(map.get("money")))); incomeService.saveData(2, driver.getId(), 1, Integer.valueOf(String.valueOf(map.get("id"))), null, Double.valueOf(String.valueOf(map.get("money")))); } } driver.setActivityMoney(bigDecimal.add(new BigDecimal(driver.getActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setLaveActivityMoney(bigDecimal.add(new BigDecimal(driver.getLaveActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setBalance(bigDecimal.add(new BigDecimal(driver.getBalance())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driverMapper.updateById(driver); Map date = dateUtil.getStartAndEndDate(new Date()); //邀请司机注册 List list = driverActivityHistoryMapper.queryList(uid, 1, 1, date.get("startTime"), date.get("endTime")); for(DriverActivityHistory dah : list){ dah.setCarryOut(2); dah.setCollectionTime(new Date()); driverActivityHistoryMapper.updateById(dah); } } if(type == 1){//用户分享 UserInfo userInfo = userInfoMapper.selectById(uid); List> query = userActivityInviteMapper.query(userInfo.getCompanyId()); Date date = new Date(); for(Map map : query){ for(int i = Integer.valueOf(String.valueOf(map.get("totalNum"))); i > 0; i--){ UserCouponRecord userCouponRecord = new UserCouponRecord(); userCouponRecord.setActivityType(3); userCouponRecord.setCouponActivityId(Integer.valueOf(String.valueOf(map.get("id")))); userCouponRecord.setCouponId(Integer.valueOf(String.valueOf(map.get("couponId")))); userCouponRecord.setState(1); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(map.get("effective")))); userCouponRecord.setExpirationTime(calendar.getTime()); userCouponRecord.setCouponType(Integer.valueOf(String.valueOf(map.get("couponType")))); userCouponRecord.setCouponUseType(Integer.valueOf(String.valueOf(map.get("couponUseType")))); userCouponRecord.setInsertTime(date); userCouponRecord.setFullMoney(Double.valueOf(String.valueOf(map.get("fullMoney")))); userCouponRecord.setMoney(Double.valueOf(String.valueOf(map.get("money")))); userCouponRecord.setCompanyId(userInfo.getCompanyId()); userCouponRecord.setUserId(uid); userCouponRecordMapper.insert(userCouponRecord); } } } } return result; } /** * 司机注册 * @param phone * @param code * @param password * @return * @throws Exception */ @Override public ResultUtil registeredDriver(String phone, String code, String password) throws Exception { boolean b = this.checkCaptcha(phone, code); if(!b){ return ResultUtil.error("验证码无效"); } Driver driver1 = driverMapper.queryByPhone_(phone, 4);//获取审核不通过的数据 if(null != driver1){ driver1.setAuthState(1); driverMapper.updateById(driver1); LoginWarpper loginWarpper = new LoginWarpper(); loginWarpper.setId(driver1.getId()); return ResultUtil.error("电话号码已使用", loginWarpper); } driver1 = driverMapper.queryByPhone(phone); if(null != driver1){ LoginWarpper loginWarpper = new LoginWarpper(); loginWarpper.setId(driver1.getId()); return ResultUtil.error("电话号码已使用", loginWarpper); } Driver driver = new Driver(); driver.setAccount(phone); driver.setJobNumber(getCode()); driver.setPhone(phone); driver.setPassword(ShiroKit.md5(password, salt)); driver.setAuthState(1); driver.setState(1); driver.setInsertTime(new Date()); driver.setAddType(1); driver.setBalance(0D); this.insert(driver); LoginWarpper loginWarpper = new LoginWarpper(); loginWarpper.setId(driver.getId()); return ResultUtil.success(loginWarpper); } /** * 根据城市code获取是否需要网约车资格证 * @param code * @return * @throws Exception */ @Override public Integer queryNeedCertificate(String code) throws Exception { return driverMapper.queryNeedCertificate(code); } /** * 完善个人信息 * @param registeredWarpper * @param uid * @return * @throws Exception */ @Override public ResultUtil updateDriver(RegisteredWarpper registeredWarpper, Integer uid) throws Exception { Driver driver = this.selectById(uid); driver.setName(registeredWarpper.getName()); driver.setSex(registeredWarpper.getSex()); driver.setIdCard(registeredWarpper.getIdCard()); String code = registeredWarpper.getPlaceOfEmployment(); Company query = companyCityService.query(code); if(null == query){ return ResultUtil.error("选择从业地暂未开通业务"); } if(null != query){ switch (query.getType()){ case 1://平台 driver.setCompanyId(query.getId()); break; case 2://分公司 driver.setCompanyId(query.getId()); break; case 3://加盟商 driver.setCompanyId(query.getSuperiorId()); driver.setFranchiseeId(query.getId()); break; } } driver.setHeadImgUrl(registeredWarpper.getHeadImgUrl()); driver.setIdCardImgUrl1(registeredWarpper.getIdCardImgUrl1()); driver.setIdCardImgUrl2(registeredWarpper.getIdCardImgUrl2()); driver.setPlaceOfEmployment(registeredWarpper.getPlaceOfEmployment()); driver.setDriverAddress(registeredWarpper.getDriverContactAddress()); driver.setDriverContactAddress(registeredWarpper.getDriverContactAddress()); driver.setDriverContactAddress_(registeredWarpper.getDriverContactAddress_()); driver.setPlaceOfPractice(registeredWarpper.getPlaceOfPractice()); Calendar calendar = Calendar.getInstance(); calendar.setTime(registeredWarpper.getGetDriverLicenseDate()); Calendar now = Calendar.getInstance(); now.setTime(new Date()); driver.setDriverAge(now.get(Calendar.YEAR) - calendar.get(Calendar.YEAR)); driver.setDriveCardImgUrl(registeredWarpper.getDriveCardImgUrl()); driver.setGetDriverLicenseDate(registeredWarpper.getGetDriverLicenseDate()); driver.setTaxiAptitudeCard(registeredWarpper.getTaxiAptitudeCard()); driver.setNetworkCarlssueImg(registeredWarpper.getNetworkCarlssueImg()); this.updateById(driver); //服务模式 String type = registeredWarpper.getType(); String[] split = type.split(","); Integer id = driver.getId(); List list = driverServiceMapper.queryMyBusiness(id); boolean b = true; for(String t : split){ for(DriverService driverService : list){ if(driverService.getType() == Integer.valueOf(t)){ b = false; break; } } if(b){ DriverService driverService = new DriverService(); driverService.setDriverId(id); driverService.setType(Integer.valueOf(t)); driverServiceMapper.insert(driverService); } } return ResultUtil.success(); } /** * 重置密码 * @param phone * @param code * @param password * @return * @throws Exception */ @Override public ResultUtil resetPassword(String phone, String code, String password) throws Exception { boolean b = this.checkCaptcha(phone, code); if(!b){ return ResultUtil.error("验证码无效"); } Driver driver = driverMapper.queryByPhone(phone); if(null == driver){ return ResultUtil.error("电话号码未注册"); } driver.setPassword(ShiroKit.md5(password, salt)); driverMapper.updateById(driver); smsrecordService.saveData(6, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!"); return ResultUtil.success(); } /** * 根据定位的城市行政编号获取分公司的客服电话 * @param code * @return * @throws Exception */ @Override public Map queryPhone(String code) throws Exception { Company query = companyCityService.query(code); Map map = new HashMap<>(); if(null == query){ map.put("phone", ""); }else{ Phone phone = phoneMapper.queryInfo(query.getId(), 2); map.put("phone", null != phone ? phone.getPhone() : ""); } return map; } /** * 司机登录 * @param phone * @param password * @return * @throws Exception */ @Override public ResultUtil driverLogin(String phone, String password) throws Exception { Integer frequency = loginFailures.get(phone); Long time = loginTime.get(phone); if(null != time && System.currentTimeMillis() < (time + 1800000) && null != frequency && frequency >= 5){ return ResultUtil.error("暂时无法登录,请30分钟后重试!"); } if(null != time && System.currentTimeMillis() >= (time + 1800000)){ frequency = 0; loginFailures.put(phone, frequency); } Driver driver = driverMapper.queryByPhone(phone); if(null == driver){ return ResultUtil.error("账号未注册"); } if(driver.getAuthState() == 1){ return ResultUtil.error("账号正在审核中,请耐心等待"); } if(driver.getAuthState() == 3){ return ResultUtil.error("账号已被冻结,请联系管理员"); } if(!driver.getPassword().equals(ShiroKit.md5(password, salt))){ frequency = (null == frequency ? 0 : frequency) + 1; loginFailures.put(phone, frequency); if(frequency == 1){ loginTime.put(phone, System.currentTimeMillis()); } return ResultUtil.error("密码错误"); } String value = redisUtil.getValue("DEVICE_" + driver.getId()); if(ToolUtil.isNotEmpty(value)){ return ResultUtil.error("当前账户正在车载端登录"); } //调用单点登录逻辑 this.singlePointLogin(driver.getId()); String token = this.getToken(driver, password); LoginWarpper loginWarpper = new LoginWarpper(); loginWarpper.setId(driver.getId()); loginWarpper.setToken(token); loginWarpper.setAppid(UUIDUtil.getRandomCode()); //创建高德猎鹰的终端数据 // String tid = gdFalconUtil.createTerminal(phone); // loginWarpper.setServerId(gdFalconUtil.getServerId()); // loginWarpper.setTerminalId(tid); return ResultUtil.success(loginWarpper); } /** * 获取首页统计数据 * @param uid * @return * @throws Exception */ @Override public Map queryHomeData(Integer uid) throws Exception { Map map = driverMapper.queryHomeData(uid); int size = this.queryMyActivity(uid, new Date()).size(); map.put("activity", size); return map; } /** * 从redis中获取数据 * @param request * @return * @throws Exception */ @Override public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception { String requestHeader = request.getHeader(JwtConstants.AUTH_HEADER); if (requestHeader != null && requestHeader.startsWith("Bearer ")) { requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1); String key = null; int length = requestHeader.length(); if(length > 32){ key = requestHeader.substring(length - 32); }else{ key = requestHeader; } String value = redisUtil.getValue(key); return null != value ? Integer.valueOf(value) : null; }else{ return null; } } /** * 上下班操作 * @param uid * @return * @throws Exception */ @Override public ResultUtil work(Integer uid, String type) throws Exception { DriverWork driverWork = driverWorkMapper.queryNewWork(uid, null, 1); Driver driver = this.selectById(uid); if(null != driverWork){//作下班操作 //检测是否有未完成的订单 List> list = orderService.queryOrderList(1, 1, 10, uid); if(list.size() > 0){ return ResultUtil.error("还有未完成的订单,不能进行下班操作"); } driverWork.setEndTime(new Date()); driverWork.setState(2); driverWorkMapper.updateById(driverWork); driver.setState(1); new Thread(new Runnable() { @Override public void run() { if(pushMinistryOfTransport){//上传数据 pushMinistryOfTransportUtil.operateLogout(uid); } } }).start(); }else{ driverWork = new DriverWork(); driverWork.setState(1); driverWork.setDriverId(uid); driverWork.setStartTime(new Date()); driverWork.setType(type); driverWorkMapper.insert(driverWork); driver.setState(2); new Thread(new Runnable() { @Override public void run() { if(pushMinistryOfTransport){ //上传数据 pushMinistryOfTransportUtil.operateLogin(uid); } } }).start(); } this.updateById(driver); return ResultUtil.success(); } @Override public ResultUtil work2(Integer uid, String type) throws Exception { //判断是否已经上班,如果已经上班则先下班操作 DriverWork driverWork1 = driverWorkMapper.queryNewWork(uid, null, 1); if(null != driverWork1){ if(!driverWork1.getType().equals("2")){ return ResultUtil.error("请先将其他业务下班后再进行上班操作"); } } DriverWork driverWork = driverWorkMapper.queryNewWork(uid, null, 1); Driver driver = this.selectById(uid); if(null != driverWork){//作下班操作 //检测是否有未完成的订单 List> list = orderService.queryOrderList(1, 1, 10, uid); if(list.size() > 0){ return ResultUtil.error("还有未完成的订单,不能进行下班操作"); } driverWork.setEndTime(new Date()); driverWork.setState(2); driverWorkMapper.updateById(driverWork); driver.setState(1); new Thread(new Runnable() { @Override public void run() { if(pushMinistryOfTransport){//上传数据 pushMinistryOfTransportUtil.operateLogout(uid); } } }).start(); }else{ driverWork = new DriverWork(); driverWork.setState(1); driverWork.setDriverId(uid); driverWork.setStartTime(new Date()); driverWork.setType(type); driverWorkMapper.insert(driverWork); driver.setState(2); //添加接单设置 String[] split = type.split(","); for(String t : split){ if(Integer.valueOf(t) == 3){ CarService query1 = carServiceMapper.query(3, driver.getCarId()); if(query1 == null){ return ResultUtil.error("车辆未添加跨城服务"); } } DriverOrders query = driverOrdersMapper.query(uid, Integer.valueOf(t)); if(null == query){ DriverOrders driverOrders = new DriverOrders(); driverOrders.setType(Integer.valueOf(t)); driverOrders.setDriverId(uid); driverOrdersMapper.insert(driverOrders); } } new Thread(new Runnable() { @Override public void run() { if(pushMinistryOfTransport){ //上传数据 pushMinistryOfTransportUtil.operateLogin(uid); } } }).start(); } this.updateById(driver); return ResultUtil.success(); } /** * 获取首页统计数据 * @param uid * @return * @throws Exception */ @Override public Map queryHomeNum(Integer uid) throws Exception { Map map = new HashMap<>(); //出租车 List> list = orderTaxiService.queryOrderList(1, uid); map.put("service", list.size());//服务中 list = orderTaxiService.queryOrderList(2, uid); map.put("reservation", list.size());//预约 List> list1 = orderLogisticsService.queryOrderList(uid); map.put("small", list1.size());//小件 int size = this.queryMyActivity(uid, new Date()).size(); map.put("activity", size);//活动 return map; } /** * 获取司机的业务类型 * @param uid * @return * @throws Exception */ @Override public List queryMyBusiness(Integer uid) throws Exception { List list = driverServiceMapper.queryMyBusiness(uid); List maps = new ArrayList<>(); for (DriverService d : list){ BaseWarpper baseWarpper = new BaseWarpper(); baseWarpper.setId(d.getType()); switch (d.getType()){ case 1: baseWarpper.setName("专车"); break; case 2: baseWarpper.setName("出租车"); break; case 3: baseWarpper.setName("跨城出行"); break; case 4: baseWarpper.setName("同城小件物流"); break; case 5: baseWarpper.setName("跨城小件物流"); break; } maps.add(baseWarpper); } return maps; } /** * 获取个人中心详情 * @param uid * @return * @throws Exception */ @Override public Map queryInfo(Integer uid) throws Exception { return driverMapper.queryInfo(uid); } /** * 修改手机号码 * @param phone * @param code * @param uid * @return * @throws Exception */ @Override public ResultUtil updatePhone(String phone, String code, Integer uid) throws Exception { Driver driver = driverMapper.queryByPhone(phone); if(null != driver){ return ResultUtil.error("电话号码已被注册"); } boolean b = this.checkCaptcha(phone, code); if(!b){ return ResultUtil.error("验证码无效"); } Driver driver1 = this.selectById(uid); driver1.setAccount(phone); driver1.setPhone(phone); this.updateById(driver1); smsrecordService.saveData(7, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!"); return ResultUtil.success(); } /** * 电话号码查询司机 * @param phone * @return * @throws Exception */ @Override public Driver queryByPhone(String phone) throws Exception { return driverMapper.queryByPhone(phone); } /** * 修改密码 * @param password * @param uid * @throws Exception */ @Override public void updatePassword(String password, Integer uid) throws Exception { Driver driver = this.selectById(uid); driver.setPassword(ShiroKit.md5(password, salt)); this.updateById(driver); } /** * 更换车辆 * @param carId * @param uid * @return * @throws Exception */ @Override public ResultUtil replaceCar(Integer carId, Integer uid) throws Exception { Driver driver = this.selectById(uid); if(driver.getState() == 3){ return ResultUtil.error("还在服务中,不能更换"); } boolean idle = carService.idle(carId); if(!idle){ return ResultUtil.error("车辆已被绑定了"); } driver.setCarId(carId); this.updateById(driver); return ResultUtil.success(); } /** * 获取客服电话 * @param uid * @return * @throws Exception */ @Override public Map queryPhone(Integer uid) throws Exception { Driver driver = this.selectById(uid); Company company = companyMapper.selectById(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); Map map = new HashMap<>(); if(company.getType() == 3){//加盟商 Phone phone = phoneMapper.queryInfo(company.getId(), 2); map.put("franchisee", null != phone ? phone.getPhone() : ""); company = companyMapper.selectById(company.getSuperiorId()); if(null != company){ phone = phoneMapper.queryInfo(company.getId(), 2); map.put("branch", null != phone ? phone.getPhone() : ""); }else{ map.put("branch", ""); } company = companyMapper.selectById(company.getSuperiorId()); if(null != company){ phone = phoneMapper.queryInfo(company.getId(), 2); map.put("platform", null != phone ? phone.getPhone() : ""); }else{ map.put("platform", ""); } return map; } if(company.getType() == 2){//分公司 map.put("franchisee", ""); Phone phone = phoneMapper.queryInfo(company.getId(), 2); map.put("branch", null != phone ? phone.getPhone() : ""); company = companyMapper.selectById(company.getSuperiorId()); if(null != company){ phone = phoneMapper.queryInfo(company.getId(), 2); map.put("platform",null != phone ? phone.getPhone() : ""); }else{ map.put("platform", ""); } return map; } if(company.getType() == 1){//平台 map.put("franchisee", ""); map.put("branch", ""); Phone phone = phoneMapper.queryInfo(company.getId(), 2); map.put("platform", null != phone ? phone.getPhone() : ""); return map; } return map; } /** * 获取处罚历史数据 * @param pageNum * @param size * @param uid * @return * @throws Exception */ @Override public List> queryPenalties(Integer pageNum, Integer size, Integer uid) throws Exception { List> list = reassignService.queryList(uid, pageNum, size); return list; } /** * 获取活动奖励列表 * @param uid * @param pageNum * @param size * @return * @throws Exception */ @Override public List> queryActivityIncome(Integer uid, Integer pageNum, Integer size) throws Exception { List> query = incomeService.query(2, uid, 1, pageNum, size); return query; } /** * 获取历史总收入(业务) * @param uid * @param pageNum * @param size * @return * @throws Exception */ @Override public List> queryTotalRevenue(Integer uid, Integer pageNum, Integer size) throws Exception { List> query = incomeService.query(2, uid, 2, pageNum, size); return query; } /** * 获取当天有效的活动 * @param uid * @return * @throws Exception */ @Override public List queryMyActivity(Integer uid, Date time) throws Exception { List list = new ArrayList<>(); Map date = dateUtil.getStartAndEndDate(time); List driverActivityHistories = driverActivityHistoryMapper.queryList(uid, null, null, date.get("startTime"), date.get("endTime")); for(DriverActivityHistory dah : driverActivityHistories){ ActivityWarpper activityWarpper = new ActivityWarpper(); switch (dah.getType()){ case 1://邀请司机注册 DriverActivityRegistered driverActivityRegistered = driverActivityRegisteredMapper.selectById(dah.getActivityId()); activityWarpper.setId(driverActivityRegistered.getId()); activityWarpper.setContent("邀请司机注册奖励" + driverActivityRegistered.getMoney() + "元"); break; case 2://邀请用户注册 DriverActivityRegistered driverActivityRegistered1 = driverActivityRegisteredMapper.selectById(dah.getActivityId()); activityWarpper.setId(driverActivityRegistered1.getId()); activityWarpper.setContent("邀请用户注册奖励" + driverActivityRegistered1.getMoney() + "元"); break; case 3://累计在线 DriverActivityOnline driverActivityOnline = driverActivityOnlineMapper.selectById(dah.getActivityId()); activityWarpper.setId(driverActivityOnline.getId()); StringBuffer sb = new StringBuffer("今日"); DriverWork driverWork = driverWorkMapper.queryNewWork(uid, driverActivityOnline.getType(), 1); Integer hour = 0; if(null != driverWork){ hour = Long.valueOf((System.currentTimeMillis() - driverWork.getStartTime().getTime()) / 3600000).intValue(); } switch (driverActivityOnline.getType()){ case 1: sb.append("专车"); break; case 2: sb.append("出租车"); break; case 3: sb.append("城际出行"); break; case 4: break; } String str = "累计在线" +driverActivityOnline.getOnline() + "小时奖励" +driverActivityOnline.getMoney() + "元"; activityWarpper.setContent(sb.append(str).toString()); activityWarpper.setCarryOut((dah.getCarryOut() == 2 || hour > driverActivityOnline.getOnline()) ? driverActivityOnline.getOnline() + "/" +driverActivityOnline.getOnline() : hour + "/" + driverActivityOnline.getOnline()); break; case 4://订单量 DriverActivityOrder driverActivityOrder = driverActivityOrderMapper.selectById(dah.getActivityId()); activityWarpper.setId(driverActivityOrder.getId()); activityWarpper.setContent("今日" + driverActivityOrder.getStart() + "-" + driverActivityOrder.getEnd() + "累计接单" + driverActivityOrder.getOrderNum() + "单奖励" + driverActivityOrder.getMoney() + "元"); SimpleDateFormat sdf = new SimpleDateFormat("H:m"); Date start = sdf.parse(driverActivityOrder.getStart()); Date end = sdf.parse(driverActivityOrder.getEnd()); Integer integer = orderService.queryOrderNum(uid, start, end); activityWarpper.setCarryOut(integer > driverActivityOrder.getOrderNum() ? driverActivityOrder.getOrderNum() + "/" + driverActivityOrder.getOrderNum() : integer + "/" + driverActivityOrder.getOrderNum()); break; } list.add(activityWarpper); } return list; } /** * 获取历史活动列表 * @param uid * @return * @throws Exception */ @Override public List> queryHistory(Integer uid, Integer pageNum, Integer size) throws Exception { pageNum = (pageNum - 1) * size; return driverActivityHistoryMapper.query(uid, pageNum, size); } /** * 给所有司机添加当天有效的活动数据 * @throws Exception */ @Override public void addTodayActivity() throws Exception { List companies = companyMapper.selectList(new EntityWrapper().eq("state", 0).ne("flag", 3)); //获取每个企业的活动数据 for(Company company : companies){ //企业下的所有司机 List drivers = driverMapper.queryByCompanyId(company.getId()); //邀请司机注册 List> query = driverActivityRegisteredMapper.query(1, company.getId()); for(Map map : query){ for(Driver driver : drivers){ DriverActivityHistory driverActivityHistory = new DriverActivityHistory(); driverActivityHistory.setActivityId(Integer.valueOf(String.valueOf(map.get("id")))); driverActivityHistory.setType(1); driverActivityHistory.setDriverId(driver.getId()); driverActivityHistory.setCarryOut(1); driverActivityHistory.setDay(new Date()); driverActivityHistory.setMoney(Double.valueOf(String.valueOf(map.get("money")))); driverActivityHistory.setInsertTime(new Date()); driverActivityHistoryMapper.insert(driverActivityHistory); } } //邀请用户注册 query = driverActivityRegisteredMapper.query(2, company.getId()); for(Map map : query){ for(Driver driver : drivers){ DriverActivityHistory driverActivityHistory = new DriverActivityHistory(); driverActivityHistory.setActivityId(Integer.valueOf(String.valueOf(map.get("id")))); driverActivityHistory.setType(2); driverActivityHistory.setDriverId(driver.getId()); driverActivityHistory.setCarryOut(1); driverActivityHistory.setDay(new Date()); driverActivityHistory.setMoney(Double.valueOf(String.valueOf(map.get("money")))); driverActivityHistory.setInsertTime(new Date()); driverActivityHistoryMapper.insert(driverActivityHistory); } } //累计在线 query = driverActivityOnlineMapper.query(company.getId()); for(Map map : query){ for(Driver driver : drivers){ DriverActivityHistory driverActivityHistory = new DriverActivityHistory(); driverActivityHistory.setActivityId(Integer.valueOf(String.valueOf(map.get("id")))); driverActivityHistory.setType(3); driverActivityHistory.setDriverId(driver.getId()); driverActivityHistory.setCarryOut(1); driverActivityHistory.setDay(new Date()); driverActivityHistory.setMoney(Double.valueOf(String.valueOf(map.get("money")))); driverActivityHistory.setInsertTime(new Date()); driverActivityHistoryMapper.insert(driverActivityHistory); } } //订单量 query = driverActivityOrderMapper.query(company.getId()); for(Map map : query){ for(Driver driver : drivers){ DriverActivityHistory driverActivityHistory = new DriverActivityHistory(); driverActivityHistory.setActivityId(Integer.valueOf(String.valueOf(map.get("id")))); driverActivityHistory.setType(4); driverActivityHistory.setDriverId(driver.getId()); driverActivityHistory.setCarryOut(1); driverActivityHistory.setDay(new Date()); driverActivityHistory.setMoney(Double.valueOf(String.valueOf(map.get("money")))); driverActivityHistory.setInsertTime(new Date()); driverActivityHistoryMapper.insert(driverActivityHistory); } } } } /** * 每分钟执行的定时任务 * @throws Exception */ @Override public void taskMinute() throws Exception { Map date = dateUtil.getStartAndEndDate(new Date()); //在线时长 List list = driverActivityHistoryMapper.queryList(null, 3, 1, date.get("startTime"), date.get("endTime")); for(DriverActivityHistory dah : list){ DriverActivityOnline dao = driverActivityOnlineMapper.selectById(dah.getActivityId()); List query = driverWorkMapper.query(dao.getType(), dao.getOnline());//满足活动条件的数据 for(DriverWork dw : query){ if(dah.getDriverId().compareTo(dw.getDriverId()) == 0){ dah.setCollectionTime(new Date()); dah.setCarryOut(2);//完成状态 driverActivityHistoryMapper.updateById(dah); //修改余额 Driver driver = this.selectById(dah.getDriverId()); driver.setActivityMoney(new BigDecimal(null != driver.getActivityMoney() ? driver.getActivityMoney() : 0) .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setLaveActivityMoney(new BigDecimal(null != driver.getLaveActivityMoney() ? driver.getLaveActivityMoney() : 0) .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0) .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); this.updateById(driver); //添加收入记录 incomeService.saveData(2, dw.getDriverId(), 1, dao.getId(), null, dah.getMoney()); } } } //订单量 List list1 = driverActivityHistoryMapper.queryList(null, 4, 1, date.get("startTime"), date.get("endTime")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for(DriverActivityHistory dah : list1){ DriverActivityOrder dao = driverActivityOrderMapper.selectById(dah.getActivityId()); Integer integer = orderService.queryOrderNum(dah.getDriverId(), sdf1.parse(sdf.format(new Date()) + " " + dao.getStart() + ":00"), sdf1.parse(sdf.format(new Date()) + " " + dao.getEnd() + ":59")); if(dao.getOrderNum() <= integer){ dah.setCarryOut(2);//完成状态 driverActivityHistoryMapper.updateById(dah); //修改余额 Driver driver = this.selectById(dah.getDriverId()); driver.setActivityMoney(new BigDecimal(null != driver.getActivityMoney() ? driver.getActivityMoney() : 0) .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setLaveActivityMoney(new BigDecimal(null != driver.getLaveActivityMoney() ? driver.getLaveActivityMoney() : 0) .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0) .add(new BigDecimal(dah.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); this.updateById(driver); //添加收入记录 incomeService.saveData(2, dah.getDriverId(), 1, dao.getId(), null, dah.getMoney()); } } } /** * 使用工号登录 * @param jobNum * @return */ @Override public ResultUtil loginByJobNumber(String jobNum) { Driver driver = driverMapper.queryByJobNum(jobNum); if(null == driver){ return ResultUtil.error("账号未注册,请先注册账号"); } if(driver.getAuthState() == 1){ return ResultUtil.error("账号正在审核中,请耐心等待"); } if(driver.getAuthState() == 3){ return ResultUtil.error("账号已被冻结,请联系管理员"); } List list = driverServiceMapper.queryMyBusiness(driver.getId()); boolean b = true; for(DriverService ds : list){ if(ds.getType() == 2){ b = false; break; } } if(b){ return ResultUtil.error("没有出租车业务权限"); } //开始自动设置接单类型,出车类型,上班状态 DriverOrders query = driverOrdersMapper.query(driver.getId(), 2); if(null == query){ query = new DriverOrders(); query.setDriverId(driver.getId()); query.setType(2); driverOrdersMapper.insert(query); } DriverWork driverWork = driverWorkMapper.queryNewWork(driver.getId(), 2, 1); if(null == driverWork){ driverWork = new DriverWork(); driverWork.setStartTime(new Date()); driverWork.setDriverId(driver.getId()); driverWork.setState(1); driverWork.setType("2"); driverWorkMapper.insert(driverWork); } if(driver.getState() == 1){ driver.setState(2); driverMapper.updateById(driver); } //调用单点登录清除缓存数据 this.singlePointLogin(driver.getId()); //封装请求账号密码为shiro可验证的token UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(driver.getPhone(), jobNum.toCharArray()); String credentials = ShiroKit.md5(driver.getJobNumber(), salt); ByteSource credentialsSalt = new Md5Hash(salt); SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( new ShiroUser(), credentials, credentialsSalt, ""); //校验用户账号密码 HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher(); md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName); md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations); 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); LoginWarpper loginWarpper = new LoginWarpper(); loginWarpper.setId(driver.getId()); loginWarpper.setToken(s); loginWarpper.setAppid(UUIDUtil.getRandomCode()); //创建高德猎鹰的终端数据 // String tid = gdFalconUtil.createTerminal(driver.getPhone()); // loginWarpper.setServerId(gdFalconUtil.getServerId()); // loginWarpper.setTerminalId(tid); return ResultUtil.success(loginWarpper); } /** * 获取上班中的司机 * @return * @throws Exception */ @Override public List queryWorkDriver() throws Exception { return driverMapper.queryWorkDriver(); } /** * 使用身份证号码登录 * @param identification * @return * @throws Exception */ @Override public ResultUtil loginByIdentification(String identification) throws Exception { Driver driver = driverMapper.queryByIdentification(identification); if(null == driver){ return ResultUtil.error("账号未注册,请先注册账号"); } if(driver.getAuthState() == 1){ return ResultUtil.error("账号正在审核中,请耐心等待"); } if(driver.getAuthState() == 3){ return ResultUtil.error("账号已被冻结,请联系管理员"); } List list = driverServiceMapper.queryMyBusiness(driver.getId()); boolean b = true; for(DriverService ds : list){ if(ds.getType() == 2){ b = false; break; } } if(b){ return ResultUtil.error("没有出租车业务权限"); } //开始自动设置接单类型,出车类型,上班状态 DriverOrders query = driverOrdersMapper.query(driver.getId(), 2); if(null == query){ query = new DriverOrders(); query.setDriverId(driver.getId()); query.setType(2); driverOrdersMapper.insert(query); } DriverWork driverWork = driverWorkMapper.queryNewWork(driver.getId(), 2, 1); if(null == driverWork){ driverWork = new DriverWork(); driverWork.setStartTime(new Date()); driverWork.setDriverId(driver.getId()); driverWork.setState(1); driverWork.setType("2"); driverWorkMapper.insert(driverWork); } if(driver.getState() == 1){ driver.setState(2); driverMapper.updateById(driver); } this.singlePointLogin(driver.getId());//清除缓存实现单点登录 //封装请求账号密码为shiro可验证的token UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(driver.getPhone(), identification.toCharArray()); String credentials = ShiroKit.md5(driver.getIdCard(), salt); ByteSource credentialsSalt = new Md5Hash(salt); SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( new ShiroUser(), credentials, credentialsSalt, ""); //校验用户账号密码 HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher(); md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName); md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations); 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); LoginWarpper loginWarpper = new LoginWarpper(); loginWarpper.setId(driver.getId()); loginWarpper.setToken(s); loginWarpper.setAppid(UUIDUtil.getRandomCode()); //创建高德猎鹰的终端数据 // String tid = gdFalconUtil.createTerminal(driver.getPhone()); // loginWarpper.setServerId(gdFalconUtil.getServerId()); // loginWarpper.setTerminalId(tid); return ResultUtil.success(loginWarpper); } /** * 出租车资格证号码登录 * @param taxiAptitudeCard * @return * @throws Exception */ @Override public ResultUtil loginByTaxiAptitudeCard(String taxiAptitudeCard) throws Exception { Driver driver = driverMapper.queryByTaxiAptitudeCard(taxiAptitudeCard); if(null == driver){ return ResultUtil.error("账号未注册,请先注册账号"); } if(driver.getAuthState() == 1){ return ResultUtil.error("账号正在审核中,请耐心等待"); } if(driver.getAuthState() == 3){ return ResultUtil.error("账号已被冻结,请联系管理员"); } List list = driverServiceMapper.queryMyBusiness(driver.getId()); boolean b = true; for(DriverService ds : list){ if(ds.getType() == 2){ b = false; break; } } if(b){ return ResultUtil.error("没有出租车业务权限"); } //开始自动设置接单类型,出车类型,上班状态 DriverOrders query = driverOrdersMapper.query(driver.getId(), 2); if(null == query){ query = new DriverOrders(); query.setDriverId(driver.getId()); query.setType(2); driverOrdersMapper.insert(query); } DriverWork driverWork = driverWorkMapper.queryNewWork(driver.getId(), 2, 1); if(null == driverWork){ driverWork = new DriverWork(); driverWork.setStartTime(new Date()); driverWork.setDriverId(driver.getId()); driverWork.setState(1); driverWork.setType("2"); driverWorkMapper.insert(driverWork); } if(driver.getState() == 1){ driver.setState(2); driverMapper.updateById(driver); } this.singlePointLogin(driver.getId());//清除缓存实现单点登录 //封装请求账号密码为shiro可验证的token UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(driver.getPhone(), taxiAptitudeCard.toCharArray()); String credentials = ShiroKit.md5(driver.getTaxiAptitudeCard(), salt); ByteSource credentialsSalt = new Md5Hash(salt); SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( new ShiroUser(), credentials, credentialsSalt, ""); //校验用户账号密码 HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher(); md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName); md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations); 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); LoginWarpper loginWarpper = new LoginWarpper(); loginWarpper.setId(driver.getId()); loginWarpper.setToken(s); loginWarpper.setAppid(UUIDUtil.getRandomCode()); //创建高德猎鹰的终端数据 // String tid = gdFalconUtil.createTerminal(driver.getPhone()); // loginWarpper.setServerId(gdFalconUtil.getServerId()); // loginWarpper.setTerminalId(tid); return ResultUtil.success(loginWarpper); } /** * 定时下班操作 * @throws Exception */ @Override public void taskOffWork() throws Exception { List drivers = driverMapper.selectList(new EntityWrapper().eq("authState", 2).ne("state", 3)); Long now = Long.valueOf(System.currentTimeMillis()); for(Driver driver : drivers){ String value = redisUtil.getValue("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()); } } } /** * 验证登录密码是否有效 * @param password * @param driverId * @return * @throws Exception */ @Override public ResultUtil verificationPassword(String password, Integer driverId) throws Exception { Driver driver = this.selectById(driverId); if(null == driver){ return ResultUtil.error("账户无效,请重新登录"); } if(!driver.getPassword().equals(ShiroKit.md5(password, salt))){ return ResultUtil.error("密码错误"); } return ResultUtil.success(); } /** * 设置提现密码 * @param withdrawPassword * @param driverId * @return * @throws Exception */ @Override public ResultUtil setWithdrawPassword(String withdrawPassword, Integer driverId) throws Exception { Driver driver = this.selectById(driverId); if(null == driver){ return ResultUtil.error("账户无效,请重新登录"); } driver.setWithdrawPassword(ShiroKit.md5(withdrawPassword, salt)); this.updateById(driver); return ResultUtil.success(); } /** * 验证提现密码是否有效 * @param withdrawPassword * @param driverId * @return * @throws Exception */ @Override public ResultUtil verificationWithdrawPassword(String withdrawPassword, Integer driverId) throws Exception { Driver driver = this.selectById(driverId); if(null == driver){ return ResultUtil.error("账户无效,请重新登录"); } if(null == driver.getWithdrawPassword()){ return ResultUtil.error("请先设置提现密码"); } if(!driver.getWithdrawPassword().equals(ShiroKit.md5(withdrawPassword, salt))){ return ResultUtil.error("密码错误"); } return ResultUtil.success(); } /** * 退出登录 * @param id * @return * @throws Exception */ @Override 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);//清除车载端登录的标识 return ResultUtil.success(); } /** * 获取编号 * @return */ public String getCode(){ int count = driverMapper.getCount(); String code = String.valueOf(1000001 + count); return "D" + code.substring(1); } /** * 获取token * @param driver * @param password * @return */ private String getToken(Driver driver, String password){ //封装请求账号密码为shiro可验证的token UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(driver.getPhone(), password.toCharArray()); String credentials = driver.getPassword(); ByteSource credentialsSalt = new Md5Hash(salt); SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( new ShiroUser(), credentials, credentialsSalt, ""); //校验用户账号密码 HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher(); md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName); md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations); 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); return s; } /** * 单点登录 * @param id */ 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 } } }