package com.ruoyi.sy.controller; import java.text.Collator; import java.util.*; import java.util.*; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson2.JSON; import com.ruoyi.client.ARDCarGPSLogInClient; import com.ruoyi.client.ARDCarSYGPSClient; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.sy.domain.ArdSyUser; import com.ruoyi.sy.gps31.PushClientImplAlarm; import com.ruoyi.sy.gps31.PushClientImplPosition; import com.ruoyi.sy.service.IArdSyUserService; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.utils.forest.RongCloudClient; import com.ruoyi.utils.forest.SYClient; import com.ruoyi.utils.httpclient.SYCarClient; import com.ruoyi.utils.result.Results; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.codec.digest.DigestUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.sy.domain.ArdSyCar; import com.ruoyi.sy.service.IArdSyCarService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.web.multipart.MultipartFile; import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS; /** * 三一车辆Controller * * @author ard * @date 2023-06-26 */ @RestController @RequestMapping("/sy/syCar") @Api(tags = "三一车辆管理接口") public class ArdSyCarController extends BaseController { @Autowired private IArdSyCarService ardSyCarService; @Autowired private ISysConfigService sysConfigService; private Map> logInMap = new HashMap(); @Autowired private IArdSyUserService iArdSyUserService; @Resource private SYClient sYClient; private ArdSyCarController ardSyCarController; @PostConstruct public void init(){ ardSyCarController = this; ardSyCarController.sysConfigService = this.sysConfigService; ardSyCarController.iArdSyUserService = this.iArdSyUserService; SysConfig config = new SysConfig(); config.setConfigKey("syCarPT"); List sysConfigResult = sysConfigService.selectConfigList(config); String syURL = ""; if(sysConfigResult.size() == 0){ return; }else{ syURL = sysConfigResult.get(0).getConfigValue(); } String ip = syURL.split(":")[1].replace("//", ""); List ardSyUserList = iArdSyUserService.selectSyUser(); //车辆实时位置线程 PushClientImplPosition pushClientImplPosition = new PushClientImplPosition(ip,ardSyUserList.get(0).getUserId(),ardSyUserList.get(0).getPassword()); Thread pushClientImplPositionThread = new Thread(pushClientImplPosition); pushClientImplPositionThread.start(); Date date = new Date(); Timer carPositionTimer = new Timer();//定时推送实时位置 TimerTask carPositionTask =new TimerTask(){ @Override public void run(){ ardSyCarService.sendArdSyCarPosition(); } }; carPositionTimer.scheduleAtFixedRate(carPositionTask,date,3*1000);//启用 //车辆实时位置线程 PushClientImplAlarm pushClientImplAlarm = new PushClientImplAlarm(ip,ardSyUserList.get(0).getUserId(),ardSyUserList.get(0).getPassword()); Thread pushClientImplAlarmThread = new Thread(pushClientImplAlarm); pushClientImplAlarmThread.start(); } /** * 查询三一车辆列表 */ @PreAuthorize("@ss.hasPermi('sy:syCar:list')") @GetMapping("/list") public TableDataInfo list(ArdSyCar ardSyCar) { startPage(); List list = ardSyCarService.selectArdSyCarList(ardSyCar); return getDataTable(list); } /** * 导出三一车辆列表 */ @PreAuthorize("@ss.hasPermi('sy:syCar:export')") @Log(title = "三一车辆", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ArdSyCar ardSyCar) { List list = ardSyCarService.selectArdSyCarList(ardSyCar); ExcelUtil util = new ExcelUtil(ArdSyCar.class); util.exportExcel(response, list, "三一车辆数据"); } /** * 获取三一车辆详细信息 */ @PreAuthorize("@ss.hasPermi('sy:syCar:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") String id) { return success(ardSyCarService.selectArdSyCarById(id)); } /** * 新增三一车辆 */ @PreAuthorize("@ss.hasPermi('sy:syCar:add')") @Log(title = "三一车辆", businessType = BusinessType.INSERT) @PostMapping @ApiOperation("新增三一车辆") public AjaxResult add(@RequestBody ArdSyCar ardSyCar) { String id = IdUtils.simpleUUID(); ardSyCar.setId(id); return toAjax(ardSyCarService.insertArdSyCar(ardSyCar)); } /** * 修改三一车辆 */ @PreAuthorize("@ss.hasPermi('sy:syCar:edit')") @Log(title = "三一车辆", businessType = BusinessType.UPDATE) @PutMapping @ApiOperation("修改三一车辆") public AjaxResult edit(@RequestBody ArdSyCar ardSyCar) { return toAjax(ardSyCarService.updateArdSyCar(ardSyCar)); } /** * 删除三一车辆 */ @PreAuthorize("@ss.hasPermi('sy:syCar:remove')") @Log(title = "三一车辆", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") @ApiOperation("删除三一车辆") public AjaxResult remove(@PathVariable String[] ids) { return toAjax(ardSyCarService.deleteArdSyCarByIds(ids)); } /** * 获取三一车辆登录信息 */ @PreAuthorize("@ss.hasPermi('sy:syCar:loginSY')") @PostMapping("/loginSY") @ApiOperation("获取三一车辆登录信息") public Map loginSY(@RequestBody Map map){ //startPage(); String userId = map.get("userId"); String password = map.get("password"); SysConfig config = new SysConfig(); config.setConfigKey("syCarPT"); List sysConfigResult = sysConfigService.selectConfigList(config); String syURL = ""; if(sysConfigResult.size() == 0){ return error("三一车辆url没有录入"); }else{ syURL = sysConfigResult.get(0).getConfigValue(); //Map result = SYCarClient.logIn(syURL,userId, password); String passwordMd5 = DigestUtils.md5Hex(password); Map result = sYClient.logIn(syURL,passwordMd5,userId); return success(result); } } /** * 获取未挂接权限的三一车辆 */ @PreAuthorize("@ss.hasPermi('sy:syCar:getArdSyCarNoRight')") @PostMapping("/getArdSyCarNoRight") @ApiOperation("获取未挂接权限的三一车辆") public Map getArdSyCarNoRight(){ String userId = SecurityUtils.getUserId(); Map result = ardSyCarService.getArdSyCarNoRight(userId); if(((String)result.get("code")).equals("500")){ return error((String) result.get("data")); }else if(((String)result.get("code")).equals("200")){ return success(result.get("data")); }else{ return error(""); } } /** * 获取全部的三一车辆 */ @PreAuthorize("@ss.hasPermi('sy:syCar:getArdSyCarAll')") @PostMapping("/getArdSyCarAll") @ApiOperation("获取全部的三一车辆") public Map getArdSyCarAll(){ String userId = SecurityUtils.getUserId(); Map result = ardSyCarService.getArdSyCarAll(userId); if(((String)result.get("code")).equals("500")){ return error((String) result.get("data")); }else if(((String)result.get("code")).equals("200")){ return success(result.get("data")); }else{ return error(""); } } /** * 获取全部车辆模型 */ @PreAuthorize("@ss.hasPermi('sy:syCar:getAllCarModel')") @PostMapping("/getAllCarModel") @ApiOperation("获取全部车辆模型") public Map getAllCarModel(){ try{ List> result = ardSyCarService.getAllCarModel(); return toAjaxList(result); } catch(Exception e){ return toAjaxList(new ArrayList()); } } /** * 上传车辆图片 */ @PreAuthorize("@ss.hasPermi('sy:syCar:uploadCarPicture')") @PostMapping("/uploadCarPicture") @ApiOperation("上传车辆图片") public Map uploadCarPicture(@RequestParam(value = "id",required = false,defaultValue = "") String id,@RequestParam("carPicture") MultipartFile carPicture){ try{ String result = ardSyCarService.uploadCarPicture(id,carPicture); return success(result); } catch(Exception e){ return error(""); } } @PreAuthorize("@ss.hasPermi('sy:syCar:allListByUser')") @PostMapping("allListByUser") @ApiOperation("根据用户获取三一列表") public Map allListByUser(){ String usersId = SecurityUtils.getUserId(); ArdSyUser ardSyUser = iArdSyUserService.userById(usersId); Map result0 = new HashMap(); //判断关联表是否有数据 if(ardSyUser!=null){ //31用户名密码 String username31 = ardSyUser.getUserId(); String password31 = ardSyUser.getPassword(); //查询地址 Map result = logInMap.get(Integer.parseInt(usersId)); String syURL = sysConfigService.getSYURL(); Map result1 = ARDCarGPSLogInClient.loginIn(syURL,username31, password31); result = new HashMap(); result.put("userId", username31); result.put("sessionId", (String) result1.get("sessionId")); try { result0 = ARDCarSYGPSClient.getCarGPSTeamList(syURL,result.get("userId"),result.get("sessionId"));// } catch (Exception e) { Map map = new HashMap(); map.put("rspCode", 0); map.put("list", new ArrayList()); return map; } int online = 0; for(Map map : (List>) result0.get("list")){ Map resultMap = (Map) ARDCarSYGPSClient.getCarListByTeamId(syURL,(String)map.get("teamId"),result.get("sessionId")); List> carList = (List>) resultMap.get("carList"); for(Map m : carList){ if(((String) m.get("stateCn")).contains("在线")){ online = online + 1; }else{ continue; } } for(Map m : (List>) result0.get("list")){ if(((String) m.get("teamId")).equals(((String) map.get("teamId")))){ map.put("count", Integer.parseInt((String) m.get("carNum"))); } } map.put("online", online); online = 0; } }else { result0.put("列表为空!","无关联账号!"); } return result0; } @PreAuthorize("@ss.hasPermi('sy:syCar:carList')") @PostMapping("carList") @ApiOperation("根据teamId获取车辆列表") public Results getCarList(@RequestBody Map map){ String usersId = SecurityUtils.getUserId(); Map result = logInMap.get(Integer.parseInt(usersId)); String teamId = map.get("teamId"); String syURL = sysConfigService.getSYURL(); ArdSyUser ardSyUser = iArdSyUserService.userById(usersId); //判断关联表是否有数据 if(ardSyUser!=null) { //31用户名密码 String username31 = ardSyUser.getUserId(); String password31 = ardSyUser.getPassword(); Map userMap = ARDCarGPSLogInClient.loginIn(syURL,username31, password31); result = new HashMap(); result.put("userId", username31); result.put("sessionId", (String) userMap.get("sessionId")); } //查询该teamId下的车辆数据 Map carList31 = new HashMap(); try { carList31 = ARDCarSYGPSClient.getCarListByTeamId(syURL,teamId, result.get("userId"),result.get("sessionId")); } catch (Exception e) { Map m = iArdSyUserService.selectArdSyUserByUsersId(Integer.parseInt(usersId)); if(m == null){ Results.error("当前登录用户未挂接车辆权限"); } Map map0 = ARDCarGPSLogInClient.loginIn(syURL,(String) m.get("userId"), (String) m.get("password")); carList31 = ARDCarSYGPSClient.getCarListByTeamId(syURL,teamId, (String) m.get("userId"),(String) map0.get("sessionId")); } //拿到车辆数据 List> list = (List) carList31.get("list"); List carIdList = new ArrayList(); //所有carId for(Map m : list){ carIdList.add(m.get("carId")); } if(carIdList.size() == 0){ Map map0 = new HashMap(); map0.put("list", new ArrayList()); map0.put("rspCode", "1"); return Results.succeed(); } //添加车辆属性 for(Map m : list){ switch (m.get("state")) { case "1": m.put("carState", "离线-从未报定位");break; case "2": m.put("carState", "离线-欠费");break; case "3": m.put("carState", "离线");break; case "4": m.put("carState", "离线-报警");break; case "5": m.put("carState", "在线-从未报定位");break; case "6": m.put("carState", "在线-欠费");break; case "7": m.put("carState", "在线-行驶");break; case "8": m.put("carState", "在线-行驶-报警");break; case "9": m.put("carState", "在线-停车-ACC关");break; case "10": m.put("carState", "在线-停车-ACC开");break; case "11": m.put("carState", "在线-停车-ACC关-报警");break; case "12": m.put("carState", "在线-停车-ACC开-报警");break; case "13": m.put("carState", "在线-无效定位");break; default: break; } } // for(Map m : list0){ // for(Map ma : list1){ // if(m.get("carId").equals(ma.get("carId"))){ // m.put("stateCn", ma.get("carState")); // } // } // } // Collections.sort((List)result0.get("list"),new Comparator>() { // @Override // public int compare(Map o1, Map o2) { // Comparator com = Collator.getInstance(java.util.Locale.CHINA); // return com.compare(o2.get("stateCn"), o1.get("stateCn")); // } // }); return Results.succeed(list); } @PreAuthorize("@ss.hasPermi('sy:syCar:carListById')") @GetMapping("/carListById/{id}") @ApiOperation("根据车辆ID获取车辆列表") public Results carListById(@PathVariable String id){ return ardSyCarService.carListById(id); } }