| | |
| | | package com.ruoyi.app.application.service.impl; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.ruoyi.app.position.appcontainer.AppContainer; |
| | | import com.ruoyi.app.position.domain.ArdAppPosition; |
| | | import com.ruoyi.app.position.mapper.ArdAppPositionMapper; |
| | | import com.ruoyi.common.core.domain.entity.SysConfig; |
| | | import com.ruoyi.common.core.domain.entity.SysRole; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | | import com.ruoyi.sy.domain.ArdSyUser; |
| | | import com.ruoyi.sy.mapper.ArdSyCarMapper; |
| | | import com.ruoyi.sy.mapper.ArdSyUserMapper; |
| | | import com.ruoyi.system.mapper.SysConfigMapper; |
| | | import com.ruoyi.system.mapper.SysDeptMapper; |
| | | import com.ruoyi.system.mapper.SysRoleMapper; |
| | | import com.ruoyi.system.mapper.SysUserMapper; |
| | | import com.ruoyi.utils.forest.SYClient; |
| | | import com.ruoyi.utils.gis.GisUtil; |
| | | import com.ruoyi.utils.websocket.util.WebSocketUtils; |
| | | import org.apache.commons.codec.digest.DigestUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import com.ruoyi.common.utils.StringUtils; |
| | |
| | | import com.ruoyi.app.application.domain.ArdAppApplication; |
| | | import com.ruoyi.app.application.service.IArdAppApplicationService; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import javax.annotation.Resource; |
| | | import javax.websocket.Session; |
| | | |
| | | import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS; |
| | | |
| | | /** |
| | | * 单兵端申请查看指挥端位置或三一车辆位置Service业务层处理 |
| | | * |
| | | * @author ard |
| | | * @date 2024-01-23 |
| | | * @date 2024-01-25 |
| | | */ |
| | | @Service |
| | | public class ArdAppApplicationServiceImpl implements IArdAppApplicationService { |
| | | @Resource |
| | | private ArdAppApplicationMapper ardAppApplicationMapper; |
| | | |
| | | @Resource |
| | | private SysRoleMapper sysRoleMapper; |
| | | |
| | | @Resource |
| | | private SysUserMapper userMapper; |
| | | |
| | | @Resource |
| | | private SysDeptMapper sysDeptMapper; |
| | | |
| | | @Resource |
| | | private ArdAppPositionMapper ardAppPositionMapper; |
| | | |
| | | @Resource |
| | | private ArdSyUserMapper ardSyUserMapper; |
| | | |
| | | @Resource |
| | | private SysConfigMapper sysConfigMapper; |
| | | |
| | | @Resource |
| | | private ArdSyCarMapper ardSyCarMapper; |
| | | |
| | | @Resource |
| | | private SYClient sYClient; |
| | | |
| | | @Value("${minio.endpoint}") |
| | | private String minioEndpoint; |
| | | |
| | | private Map<String,Thread> threadMap = new HashMap(); |
| | | |
| | | @PostConstruct |
| | | public void init(){ |
| | | ArdAppApplication para = new ArdAppApplication(); |
| | | para.setState("1");//查询同意的申请 |
| | | List<ArdAppApplication> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationList(para); |
| | | Date date = new Date(); |
| | | Long now = date.getTime(); |
| | | for(ArdAppApplication ardAppApplication : ardAppApplicationList){ |
| | | Long begin = Long.parseLong(ardAppApplication.getBegin()); |
| | | //判断是否超时 |
| | | if(now - begin <= 24*60*60*1000){//未超时从新创建线程 |
| | | String key = ardAppApplication.getCommanderId() + "," + ardAppApplication.getSoilderId() + "," + ardAppApplication.getApplicationType(); |
| | | Thread thread = new Thread(key){//创建线程计时剩余时长 |
| | | @Override |
| | | public void run() { |
| | | try { |
| | | Thread.sleep(24*60*60*1000 - (now - begin));//剩余时长 |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | return; |
| | | } |
| | | Thread currentThread = Thread.currentThread(); |
| | | String state = "000";//state为000,即超时 |
| | | String commanderId = currentThread.getName().split(",")[0]; |
| | | String soilderId = currentThread.getName().split(",")[1]; |
| | | String applicationType = currentThread.getName().split(",")[2]; |
| | | int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,"",state); |
| | | threadMap.remove(currentThread.getName()); |
| | | } |
| | | }; |
| | | thread.start(); |
| | | this.threadMap.put(key,thread); |
| | | }else{//超时更改状态 |
| | | String state = "000";//state为000,即超时 |
| | | String commanderId = ardAppApplication.getCommanderId(); |
| | | String soilderId = ardAppApplication.getSoilderId(); |
| | | String applicationType = ardAppApplication.getApplicationType(); |
| | | int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,"",state); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 查询单兵端申请查看指挥端位置或三一车辆位置 |
| | | * |
| | | * @param applicationId 单兵端申请查看指挥端位置或三一车辆位置主键 |
| | | * @param soilderId 单兵端申请查看指挥端位置或三一车辆位置主键 |
| | | * @return 单兵端申请查看指挥端位置或三一车辆位置 |
| | | */ |
| | | @Override |
| | | public ArdAppApplication selectArdAppApplicationByApplicationId(String applicationId) { |
| | | return ardAppApplicationMapper.selectArdAppApplicationByApplicationId(applicationId); |
| | | public ArdAppApplication selectArdAppApplicationBySoilderId(String soilderId) { |
| | | return ardAppApplicationMapper.selectArdAppApplicationBySoilderId(soilderId); |
| | | } |
| | | |
| | | /** |
| | |
| | | /** |
| | | * 批量删除单兵端申请查看指挥端位置或三一车辆位置 |
| | | * |
| | | * @param applicationIds 需要删除的单兵端申请查看指挥端位置或三一车辆位置主键 |
| | | * @param soilderIds 需要删除的单兵端申请查看指挥端位置或三一车辆位置主键 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int deleteArdAppApplicationByApplicationIds(String[] applicationIds) { |
| | | return ardAppApplicationMapper.deleteArdAppApplicationByApplicationIds(applicationIds); |
| | | public int deleteArdAppApplicationBySoilderIds(String[] soilderIds) { |
| | | return ardAppApplicationMapper.deleteArdAppApplicationBySoilderIds(soilderIds); |
| | | } |
| | | |
| | | /** |
| | | * 删除单兵端申请查看指挥端位置或三一车辆位置信息 |
| | | * |
| | | * @param applicationId 单兵端申请查看指挥端位置或三一车辆位置主键 |
| | | * @param soilderId 单兵端申请查看指挥端位置或三一车辆位置主键 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int deleteArdAppApplicationByApplicationId(String applicationId) { |
| | | return ardAppApplicationMapper.deleteArdAppApplicationByApplicationId(applicationId); |
| | | public int deleteArdAppApplicationBySoilderId(String soilderId) { |
| | | return ardAppApplicationMapper.deleteArdAppApplicationBySoilderId(soilderId); |
| | | } |
| | | |
| | | @Override |
| | |
| | | ardAppApplication.setApplicationType("Commander"); |
| | | ardAppApplication.setBegin(""); |
| | | ardAppApplication.setState("0"); |
| | | ardAppApplication.setSoilderCheck("true");//指挥端未审批也设为true,不需要单兵端查看 |
| | | int resultSingle = ardAppApplicationMapper.updateArdAppApplicationByCommanderIdAndSoilderIdAndType(ardAppApplication); |
| | | result = result + resultSingle; |
| | | if(resultSingle == 0){ |
| | |
| | | ardAppApplication.setApplicationType("SYCar"); |
| | | ardAppApplication.setBegin(""); |
| | | ardAppApplication.setState("0"); |
| | | ardAppApplication.setSoilderCheck("true");//指挥端未审批也设为true,不需要单兵端查看 |
| | | int resultSingle = ardAppApplicationMapper.updateArdAppApplicationByCommanderIdAndSoilderIdAndType(ardAppApplication); |
| | | result = result + resultSingle; |
| | | if(resultSingle == 0){ |
| | | ardAppApplication.setApplicationId(IdUtils.simpleUUID()); |
| | | resultSingle = ardAppApplicationMapper.insertArdAppApplication(ardAppApplication); |
| | | result = result + resultSingle; |
| | | } |
| | | //加入给pc端websocket转发 |
| | | List<SysRole> sysRoleList = sysRoleMapper.selectRolePermissionByUserId(commanderId); |
| | | for(SysRole sysRole : sysRoleList){ |
| | | if(!sysRole.getRoleKey().equals("appLeader")){ |
| | | Map<String,Object> resultMap = ardAppApplicationMapper.selectSYCarApplicationByPCIdAndSoilderId(commanderId,usersId); |
| | | Map<String,Map<String,Object>> msg = new HashMap(); |
| | | msg.put("60000",resultMap); |
| | | for(String id : ONLINE_USER_SESSIONS.keySet()){ |
| | | if(id.startsWith(commanderId)){ |
| | | Session session = ONLINE_USER_SESSIONS.get(id); |
| | | WebSocketUtils.sendMessage(session,msg); |
| | | break; |
| | | } |
| | | } |
| | | break;//一个pc端用户可能挂接多个角色,每个pc端只转发一次 |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | |
| | | @Override |
| | | public Map<String, List<Map<String, Object>>> getCheckPosition(String usersId) { |
| | | Map<String, List<Map<String, Object>>> result = new HashMap(); |
| | | //查看指挥端位置申请 |
| | | List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationByCommanderId(usersId); |
| | | //查看指挥端位置申请 |
| | | List<Map<String, Object>> resultCommanderPosition = new ArrayList(); |
| | | for(Map<String, Object> map : ardAppApplicationList){ |
| | | if(((String)map.get("applicationType")).equals("Commander")){ |
| | |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<Map<String, Object>>> getCheckPositionTrue(String commanderId) { |
| | | Map<String, List<Map<String, Object>>> result = new HashMap(); |
| | | List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationByCommanderIdTrue(commanderId); |
| | | Date date = new Date(); |
| | | //查看指挥端位置申请 |
| | | List<Map<String, Object>> resultCommanderPosition = new ArrayList(); |
| | | //查看车辆位置申请 |
| | | List<Map<String, Object>> resultSYCarsPosition = new ArrayList(); |
| | | for(Map<String, Object> map : ardAppApplicationList){ |
| | | Long interval = date.getTime() - Long.parseLong((String)map.get("begin")); |
| | | interval = 24 * 60 * 60 * 1000 - interval; |
| | | Long hour = interval / (60 * 60 * 1000); |
| | | Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000); |
| | | Long second = (interval - hour * 60 * 60 * 1000 - min * 60 * 1000) / 1000; |
| | | map.put("time",hour + "时" + min + "分" + second + "秒"); |
| | | if(((String)map.get("applicationType")).equals("Commander")){ |
| | | resultCommanderPosition.add(map); |
| | | }else if(((String)map.get("applicationType")).equals("SYCar")){ |
| | | resultSYCarsPosition.add(map); |
| | | } |
| | | } |
| | | result.put("commander",resultCommanderPosition); |
| | | result.put("SYCars",resultSYCarsPosition); |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<Map<String, Object>>> getSendPositionTrue(String soilderId) { |
| | | Map<String, List<Map<String, Object>>> result = new HashMap(); |
| | | List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationBySoilderIdTrue(soilderId); |
| | | Date date = new Date(); |
| | | //查看指挥端位置申请 |
| | | List<Map<String, Object>> resultCommanderPosition = new ArrayList(); |
| | | //查看车辆位置申请 |
| | | List<Map<String, Object>> resultSYCarsPosition = new ArrayList(); |
| | | for(Map<String, Object> map : ardAppApplicationList){ |
| | | Long interval = date.getTime() - Long.parseLong((String)map.get("begin")); |
| | | interval = 24 * 60 * 60 * 1000 - interval; |
| | | Long hour = interval / (60 * 60 * 1000); |
| | | Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000); |
| | | Long second = (interval - hour * 60 * 60 * 1000 - min * 60 * 1000) / 1000; |
| | | map.put("time",hour + "时" + min + "分" + second + "秒"); |
| | | if(((String)map.get("applicationType")).equals("Commander")){ |
| | | resultCommanderPosition.add(map); |
| | | }else if(((String)map.get("applicationType")).equals("SYCar")){ |
| | | resultSYCarsPosition.add(map); |
| | | } |
| | | } |
| | | result.put("commander",resultCommanderPosition); |
| | | result.put("SYCars",resultSYCarsPosition); |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<Map<String, Object>>> getCheckPositionOwn(String soilderId) { |
| | | Map<String, List<Map<String, Object>>> result = new HashMap(); |
| | | List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationBySoilderIdFalse(soilderId); |
| | | Date date = new Date(); |
| | | //查看指挥端位置申请 |
| | | List<Map<String, Object>> resultCommanderPosition = new ArrayList(); |
| | | //查看车辆位置申请 |
| | | List<Map<String, Object>> resultSYCarsPosition = new ArrayList(); |
| | | for(Map<String, Object> map : ardAppApplicationList){ |
| | | /*if(((String)map.get("state")).equals("1")){ |
| | | Long interval = date.getTime() - Long.parseLong((String)map.get("begin")); |
| | | interval = 24 * 60 * 60 * 1000 - interval; |
| | | Long hour = interval / (60 * 60 * 1000); |
| | | Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000); |
| | | map.put("time",hour + "时" + min + "分"); |
| | | if(((String)map.get("applicationType")).equals("Commander")){ |
| | | resultCommanderPosition.add(map); |
| | | }else if(((String)map.get("applicationType")).equals("SYCar")){ |
| | | resultSYCarsPosition.add(map); |
| | | } |
| | | }else{ |
| | | map.put("time",""); |
| | | if(((String)map.get("applicationType")).equals("Commander")){ |
| | | resultCommanderPosition.add(map); |
| | | }else if(((String)map.get("applicationType")).equals("SYCar")){ |
| | | resultSYCarsPosition.add(map); |
| | | } |
| | | }*/ |
| | | if(((String)map.get("applicationType")).equals("Commander")){ |
| | | resultCommanderPosition.add(map); |
| | | }else if(((String)map.get("applicationType")).equals("SYCar")){ |
| | | resultSYCarsPosition.add(map); |
| | | } |
| | | } |
| | | result.put("commander",resultCommanderPosition); |
| | | result.put("SYCars",resultSYCarsPosition); |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public int approvalCheckPositionOwn(String soilderId, Map<String, String> para) { |
| | | String applicationType = para.get("applicationType"); |
| | | String commanderId = para.get("commanderId"); |
| | | int result = ardAppApplicationMapper.updateSoilderCheckByCommanderIdAndSoilderIdAndType(soilderId,commanderId,applicationType); |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getCheckPositionNo(String commanderId) {/// |
| | | List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationByCommanderIdNoCheck(commanderId); |
| | | Date date = new Date(); |
| | | for(Map<String, Object> map : ardAppApplicationList){ |
| | | if(((String)map.get("begin")).equals("")){ |
| | | map.put("time",""); |
| | | }else{ |
| | | Long interval = date.getTime() - Long.parseLong((String)map.get("begin")); |
| | | interval = 24 * 60 * 60 * 1000 - interval; |
| | | Long hour = interval / (60 * 60 * 1000); |
| | | Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000); |
| | | Long second = (interval - hour * 60 * 60 * 1000 - min * 60 * 1000) / 1000; |
| | | map.put("time",hour + "时" + min + "分" + second + "秒"); |
| | | } |
| | | } |
| | | return ardAppApplicationList; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String,Map<String,List<Map<String,Object>>>> getSoilderAndCarPositionByCommanderId(String commanderId,Map<String, Double> para) { |
| | | Map<String,Map<String,List<Map<String,Object>>>> mapResault = new HashMap(); |
| | | SysUser sysUser = userMapper.selectUserById(commanderId);//获取系统用户 |
| | | List<Long> deptIdList = new ArrayList(); |
| | | deptIdList.add(sysUser.getDeptId()); |
| | | deptIdList = getOwnAndChildrenDeptIdList(deptIdList,new ArrayList());//递归查询下属部门主键 |
| | | List<SysUser> sysUsersResult = userMapper.getOwnAndChildrenSoilderListAll(deptIdList); |
| | | List<SysUser> sysUsersResultOnline = sysUsersResult.stream().filter(sysUserTest -> sysUserTest.getAppOnlineState().equals("1")).collect(Collectors.toList());//在线用户 |
| | | List<SysUser> sysUsersResultOffline = sysUsersResult.stream().filter(sysUserTest -> !sysUserTest.getAppOnlineState().equals("1")).collect(Collectors.toList());//离线用户 |
| | | List<Map<String,Object>> sysUsersOnlineList = new ArrayList(); |
| | | List<Map<String,Object>> sysUsersOfflineList = new ArrayList(); |
| | | for(SysUser sysUserIn : sysUsersResultOnline){ |
| | | Map<String,Object> map = new HashMap(); |
| | | map.put("userId",sysUserIn.getUserId()); |
| | | map.put("deptId",sysUserIn.getDeptId()); |
| | | map.put("userName",sysUserIn.getUserName()); |
| | | map.put("nickName",sysUserIn.getNickName()); |
| | | try{ |
| | | map.put("longitude", AppContainer.getArdAppPositionMap().get(sysUserIn.getUserId()).getLongitude()); |
| | | map.put("latitude",AppContainer.getArdAppPositionMap().get(sysUserIn.getUserId()).getLatitude()); |
| | | map.put("altitude",AppContainer.getArdAppPositionMap().get(sysUserIn.getUserId()).getAltitude()); |
| | | }catch(Exception e){ |
| | | ArdAppPosition ardAppPosition = ardAppPositionMapper.getLastAPPPositionByUserId(sysUserIn.getUserId()); |
| | | map.put("longitude",ardAppPosition.getLongitude()); |
| | | map.put("latitude",ardAppPosition.getLatitude()); |
| | | map.put("altitude",ardAppPosition.getAltitude()); |
| | | } |
| | | sysUsersOnlineList.add(map); |
| | | } |
| | | List<Map<String,Object>> sysUsersOnlineNearList = new ArrayList();//在200米内 |
| | | for(Map<String,Object> mapOn : sysUsersOnlineList){ |
| | | Double longitude = (Double) mapOn.get("longitude"); |
| | | Double latitude = (Double) mapOn.get("latitude"); |
| | | double distance = GisUtil.getDistance(para.get("longitude"),para.get("latitude"),longitude,latitude); |
| | | if(distance <= 200){ |
| | | sysUsersOnlineNearList.add(mapOn); |
| | | } |
| | | } |
| | | Map<String,List<Map<String,Object>>> appMap = new HashMap(); |
| | | appMap.put("onlineApp",sysUsersOnlineNearList); |
| | | for(SysUser sysUserIn : sysUsersResultOffline){ |
| | | Map<String,Object> map = new HashMap(); |
| | | map.put("userId",sysUserIn.getUserId()); |
| | | map.put("deptId",sysUserIn.getDeptId()); |
| | | map.put("userName",sysUserIn.getUserName()); |
| | | map.put("nickName",sysUserIn.getNickName()); |
| | | sysUsersOfflineList.add(map); |
| | | } |
| | | appMap.put("offlineApp",sysUsersOfflineList); |
| | | mapResault.put("app",appMap); |
| | | |
| | | ArdSyUser ardSyUserPara = new ArdSyUser(); |
| | | ardSyUserPara.setSysUserId(commanderId); |
| | | List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(ardSyUserPara);//查询挂接的三一账号 |
| | | |
| | | String syURL = ""; |
| | | List<SysConfig> sysConfigResult = sysConfigMapper.selectByType("syCarPT"); |
| | | if(sysConfigResult.size() > 0){ |
| | | syURL = sysConfigResult.get(0).getConfigValue(); |
| | | } |
| | | |
| | | if(ardSyUserList.size() == 0 || syURL.equals("")){ |
| | | List<Map<String,Object>> onlineCar = new ArrayList(); |
| | | List<Map<String,Object>> offlineCar = new ArrayList(); |
| | | Map<String,List<Map<String,Object>>> carMap = new HashMap(); |
| | | carMap.put("onlineCar",onlineCar); |
| | | carMap.put("offlineCar",offlineCar); |
| | | mapResault.put("car",carMap); |
| | | return mapResault; |
| | | } |
| | | |
| | | List<String> carIdList = ardSyCarMapper.selectArdSyCarByDeptIds(deptIdList); |
| | | String carIds = ""; |
| | | for(String carId : carIdList){ |
| | | carIds = carIds + carId + ","; |
| | | } |
| | | carIds = carIds.substring(0,carIds.length() - 1); |
| | | String passwordMd5 = DigestUtils.md5Hex(ardSyUserList.get(0).getPassword()); |
| | | Map<String,Object> syLoginResult = sYClient.logIn(syURL, passwordMd5, ardSyUserList.get(0).getUserId()); |
| | | String sessionId = (String) syLoginResult.get("sessionId"); |
| | | Map<String,Object> carNearPositionResult = sYClient.getCarNearPositionByCarId(syURL, carIds, ardSyUserList.get(0).getUserId(),sessionId); |
| | | if(((String)carNearPositionResult.get("rspCode")).equals("1")){ |
| | | List<Map<String,Object>> SYCarPositionList = (List<Map<String, Object>>) carNearPositionResult.get("list"); |
| | | //筛选在线 |
| | | List<Map<String,Object>> onlineSYCarPositionList = SYCarPositionList.stream().filter(map -> ((String)map.get("stateCn")).startsWith("在线")).collect(Collectors.toList()); |
| | | //筛选200米范围内 |
| | | List<Map<String,Object>> onlineSYCarPositionNearList = new ArrayList();//在200米内 |
| | | for(Map<String,Object> mapOn : onlineSYCarPositionList){ |
| | | Double longitude = new BigDecimal((String) mapOn.get("lng")).doubleValue(); |
| | | Double latitude = new BigDecimal((String) mapOn.get("lat")).doubleValue(); |
| | | double distance = GisUtil.getDistance(para.get("longitude"),para.get("latitude"),longitude,latitude); |
| | | if(distance <= 200){ |
| | | mapOn.put("longitude",longitude); |
| | | mapOn.put("latitude",latitude); |
| | | onlineSYCarPositionNearList.add(mapOn); |
| | | } |
| | | } |
| | | |
| | | //for(Map<String,Object> sycar : onlineSYCarPositionList){ |
| | | for(Map<String,Object> sycar : onlineSYCarPositionNearList){ |
| | | Map<String,Object> map = ardSyCarMapper.getArdSyCarAndDeptByCarId((String)sycar.get("carId")); |
| | | String carModel = this.minioEndpoint + "/" + (String) map.get("carModel"); |
| | | map.put("carModel",carModel); |
| | | sycar.putAll(map); |
| | | } |
| | | //筛选离线 |
| | | List<Map<String,Object>> offlineSYCarPositionList = SYCarPositionList.stream().filter(map -> ((String)map.get("stateCn")).startsWith("离线")).collect(Collectors.toList()); |
| | | for(Map<String,Object> sycar : offlineSYCarPositionList){ |
| | | Map<String,Object> map = ardSyCarMapper.getArdSyCarAndDeptByCarId((String)sycar.get("carId")); |
| | | String carModel = this.minioEndpoint + "/" + (String) map.get("carModel"); |
| | | map.put("carModel",carModel); |
| | | sycar.putAll(map); |
| | | } |
| | | Map<String,List<Map<String,Object>>> carMap = new HashMap(); |
| | | //carMap.put("onlineCar",onlineSYCarPositionList); |
| | | carMap.put("onlineCar",onlineSYCarPositionNearList); |
| | | carMap.put("offlineCar",offlineSYCarPositionList); |
| | | mapResault.put("car",carMap); |
| | | }else{ |
| | | List<Map<String,Object>> onlineCar = new ArrayList(); |
| | | List<Map<String,Object>> offlineCar = new ArrayList(); |
| | | Map<String,List<Map<String,Object>>> carMap = new HashMap(); |
| | | carMap.put("onlineCar",onlineCar); |
| | | carMap.put("offlineCar",offlineCar); |
| | | mapResault.put("car",carMap); |
| | | return mapResault; |
| | | } |
| | | |
| | | return mapResault; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<Map<String, Object>>> getSendPositionALL(String soilderId) { |
| | | Map<String, List<Map<String, Object>>> result = new HashMap(); |
| | | List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationBySoilderIdALL(soilderId); |
| | | Date date = new Date(); |
| | | //查看指挥端位置申请 |
| | | List<Map<String, Object>> resultCommanderPosition = new ArrayList(); |
| | | //查看车辆位置申请 |
| | | List<Map<String, Object>> resultSYCarsPosition = new ArrayList(); |
| | | for(Map<String, Object> map : ardAppApplicationList){ |
| | | if(((String)map.get("begin")).equals("")){ |
| | | map.put("time",""); |
| | | if(((String)map.get("applicationType")).equals("Commander")){ |
| | | resultCommanderPosition.add(map); |
| | | }else if(((String)map.get("applicationType")).equals("SYCar")){ |
| | | resultSYCarsPosition.add(map); |
| | | } |
| | | }else{ |
| | | Long interval = date.getTime() - Long.parseLong((String)map.get("begin")); |
| | | interval = 24 * 60 * 60 * 1000 - interval; |
| | | Long hour = interval / (60 * 60 * 1000); |
| | | Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000); |
| | | Long second = (interval - hour * 60 * 60 * 1000 - min * 60 * 1000) / 1000; |
| | | map.put("time",hour + "时" + min + "分" + second + "秒"); |
| | | if(((String)map.get("applicationType")).equals("Commander")){ |
| | | resultCommanderPosition.add(map); |
| | | }else if(((String)map.get("applicationType")).equals("SYCar")){ |
| | | resultSYCarsPosition.add(map); |
| | | } |
| | | } |
| | | } |
| | | result.put("commander",resultCommanderPosition); |
| | | result.put("SYCars",resultSYCarsPosition); |
| | | return result; |
| | | } |
| | | |
| | | public List<Long> getOwnAndChildrenDeptIdList(List<Long> deptIdList,List<Long> deptIdListr){ |
| | | deptIdListr.addAll(deptIdList); |
| | | List<Long> result = sysDeptMapper.getChildrenDeptIdList(deptIdList); |
| | | if(result.size() != 0){ |
| | | deptIdListr.addAll(result); |
| | | result = getOwnAndChildrenDeptIdList(result,deptIdListr); |
| | | } |
| | | deptIdListr = deptIdListr.stream().distinct().collect(Collectors.toList()); |
| | | return deptIdListr; |
| | | } |
| | | } |