From 1100a88fb4ddf156efc5a7695f91caae0859df94 Mon Sep 17 00:00:00 2001 From: zhangnaisong <2434969829@qq.com> Date: 星期一, 29 一月 2024 10:36:17 +0800 Subject: [PATCH] pc端查看三一车辆位置申请提交 --- ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java | 259 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 242 insertions(+), 17 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java b/ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java index 85ecd11..d5ac04f 100644 --- a/ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java @@ -1,15 +1,13 @@ package com.ruoyi.app.application.service.impl; -import java.util.HashMap; -import java.util.List; +import java.util.*; -import com.alibaba.fastjson2.JSON; -import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.utils.websocket.util.WebSocketUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Map; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.SecurityUtils; @@ -17,28 +15,79 @@ 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; + + 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); } /** @@ -77,23 +126,23 @@ /** * 鎵归噺鍒犻櫎鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆 * - * @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 @@ -109,6 +158,7 @@ ardAppApplication.setApplicationType("Commander"); ardAppApplication.setBegin(""); ardAppApplication.setState("0"); + ardAppApplication.setSoilderCheck("true");//鎸囨尌绔湭瀹℃壒涔熻涓簍rue,涓嶉渶瑕佸崟鍏电鏌ョ湅 int resultSingle = ardAppApplicationMapper.updateArdAppApplicationByCommanderIdAndSoilderIdAndType(ardAppApplication); result = result + resultSingle; if(resultSingle == 0){ @@ -133,12 +183,30 @@ ardAppApplication.setApplicationType("SYCar"); ardAppApplication.setBegin(""); ardAppApplication.setState("0"); + ardAppApplication.setSoilderCheck("true");//鎸囨尌绔湭瀹℃壒涔熻涓簍rue,涓嶉渶瑕佸崟鍏电鏌ョ湅 int resultSingle = ardAppApplicationMapper.updateArdAppApplicationByCommanderIdAndSoilderIdAndType(ardAppApplication); result = result + resultSingle; if(resultSingle == 0){ ardAppApplication.setApplicationId(IdUtils.simpleUUID()); resultSingle = ardAppApplicationMapper.insertArdAppApplication(ardAppApplication); result = result + resultSingle; + } + //鍔犲叆缁檖c绔痺ebsocket杞彂 + 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;//涓�涓猵c绔敤鎴峰彲鑳芥寕鎺ュ涓鑹诧紝姣忎釜pc绔彧杞彂涓�娆� + } } } return result; @@ -147,8 +215,8 @@ @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")){ @@ -166,4 +234,161 @@ result.put("SYCars",resultSYCarsPosition); return result; } + + @Override + public int approvalCheckPosition(String commanderId, Map<String, String> para) { + String applicationType = para.get("applicationType"); + String soilderId = para.get("soilderId"); + String state = para.get("state"); + String begin = ""; + if(state.equals("1")){//state涓�1锛屽嵆鍚屾剰 + begin = String.valueOf(new Date().getTime());//璁剧疆寮�濮嬫椂闂� + int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,begin,state); + String key = commanderId + "," + soilderId + "," + applicationType; + Thread thread = new Thread(key){//鍒涘缓绾跨▼璁℃椂24灏忔椂 + @Override + public void run() { + try { + Thread.sleep(24*60*60*1000); + //Thread.sleep(3*60*1000); + } 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); + return result; + }else if(state.equals("-1")){//state涓�1锛屽嵆椹冲洖 + int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,"",state); + return result; + }else if(state.equals("00")){//state涓�00锛屽嵆鎾ら攢 + String key = commanderId + "," + soilderId + "," + applicationType; + try{ + this.threadMap.get(key).interrupt();//鎾ら攢鍚庣嚎绋嬮攢姣� + }catch(Exception e){ + e.printStackTrace(); + } + this.threadMap.remove(key); + int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,"",state); + return result; + } + 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); + return ardAppApplicationList; + } } -- Gitblit v1.9.3