zhangnaisong
2024-01-29 dec2e65f7d3917e8843564dc26184f9be7c48af3
ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java
@@ -2,9 +2,10 @@
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;
@@ -16,17 +17,23 @@
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();
@@ -75,12 +82,12 @@
    /**
     * 查询单兵端申请查看指挥端位置或三一车辆位置
     *
     * @param applicationId 单兵端申请查看指挥端位置或三一车辆位置主键
     * @param soilderId 单兵端申请查看指挥端位置或三一车辆位置主键
     * @return 单兵端申请查看指挥端位置或三一车辆位置
     */
    @Override
    public ArdAppApplication selectArdAppApplicationByApplicationId(String applicationId) {
        return ardAppApplicationMapper.selectArdAppApplicationByApplicationId(applicationId);
    public ArdAppApplication selectArdAppApplicationBySoilderId(String soilderId) {
        return ardAppApplicationMapper.selectArdAppApplicationBySoilderId(soilderId);
    }
    /**
@@ -119,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
@@ -151,6 +158,7 @@
            ardAppApplication.setApplicationType("Commander");
            ardAppApplication.setBegin("");
            ardAppApplication.setState("0");
            ardAppApplication.setSoilderCheck("true");//指挥端未审批也设为true,不需要单兵端查看
            int resultSingle = ardAppApplicationMapper.updateArdAppApplicationByCommanderIdAndSoilderIdAndType(ardAppApplication);
            result = result + resultSingle;
            if(resultSingle == 0){
@@ -175,12 +183,30 @@
            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;
@@ -265,16 +291,6 @@
        Date date = new Date();
        //查看指挥端位置申请
        List<Map<String, Object>> resultCommanderPosition = 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);
            map.put("time",hour + "时" + min + "分");
            if(((String)map.get("applicationType")).equals("Commander")){
                resultCommanderPosition.add(map);
            }
        }
        //查看车辆位置申请
        List<Map<String, Object>> resultSYCarsPosition = new ArrayList();
        for(Map<String, Object> map : ardAppApplicationList){
@@ -282,8 +298,11 @@
            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("SYCar")){
            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);
            }
        }
@@ -291,4 +310,79 @@
        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;
    }
}