whycxzp
2022-10-26 ada3e9094ecfb8b995c5580bbb59a1d64d89a801
src/main/java/com/whyc/service/StationInfoService.java
@@ -1,5 +1,7 @@
package com.whyc.service;
import com.alibaba.druid.sql.visitor.functions.Isnull;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.whyc.dto.FileOpreate;
@@ -12,6 +14,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@Service
@@ -26,7 +29,7 @@
    private BattgroupInfoMapper groupInfoMapper;
    @Autowired(required = false)
    private BattgroupDataMapper dataMapper;
    private BattGroupDataMapper dataMapper;
    @Autowired(required = false)
    private FileParamMapper paramMapper;
@@ -54,7 +57,7 @@
        }
        //查询stationName是否存在
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.like("station_name",stationName);
        wrapper.eq("station_name",stationName);
        int count=mapper.selectCount(wrapper);
        if(count>0){
            bl=false;
@@ -64,6 +67,7 @@
            s.setStationName(stationName);
            int flag=mapper.insert(s);
            bl=flag>0;
            msg="台站添加成功";
        }
        return new Response().set(1,bl,msg);
    }
@@ -75,44 +79,55 @@
        //1.查询出最大的台站id(只有机房下添加了文件才会生成机房id)和最大文件id
        int stationIdMax=mapper.selectMaxId();
        int fileIdMax=infoMapper.selectMaxId();
        List list=new ArrayList();
        if(file.exists()){
            if(file.isFile()){
                if(!filePath.contains(".xml")){
                    return new Response().set(1,false,"台站下添加文件失败,文件不是指定的xml文件");
                }
                //2.解析文件并补全文件id
                FileInfo fileInfo=XmlFileOpreate.readXml(filePath);
                fileInfo.setFileUrl(file.getPath());
                fileInfo.setFileName(file.getName());
                //4.将单文件的数据存入数据库
                insertFileInDataBase(stationName,stationIdMax,fileIdMax,fileInfo);
                FileInfo returnFileInfo=insertFileInDataBase(stationName,stationIdMax,fileIdMax,fileInfo);
                list.add(returnFileInfo);
            }else{
                //3.如果是文件夹:获取文件夹下所有的文件
                List<File> allFile= FileOpreate.getAllFile(filePath);
                //4.将文件路径下的所有文件解析并存入数据库
                insertAllFileInDataBase(stationName,stationIdMax,fileIdMax,allFile);
                list=insertAllFileInDataBase(stationName,stationIdMax,fileIdMax,allFile);
            }
        }else{
            flag=false;
        }
        return new Response().set(1,flag,flag?"台站下添加文件成功":"台站下添加文件失败");
        return new Response().setII(1,flag,list,flag?"台站下添加文件成功":"台站下添加文件失败");
    }
    //4.将文件路径下的所有文件解析并存入数据库
    private void insertAllFileInDataBase(String stationName, int stationIdMax, int fileIdMax, List<File> allFile) {
    private List insertAllFileInDataBase(String stationName, int stationIdMax, int fileIdMax, List<File> allFile) {
        List list=new ArrayList();
        if(allFile!=null&&allFile.size()>0){
            for (int i=0;i< allFile.size();i++){
                File file=allFile.get(i);
                if(!file.getName().contains(".xml")){
                    continue;
                }
                //2.解析文件并补全文件id
                FileInfo fileInfo=XmlFileOpreate.readXml(file.getPath());
                fileInfo.setFileUrl(file.getPath());
                fileInfo.setFileName(file.getName());
                //4.将单文件的数据存入数据库
                insertFileInDataBase(stationName,stationIdMax,fileIdMax+i,fileInfo);
                FileInfo returnFileInfo=insertFileInDataBase(stationName,stationIdMax,fileIdMax+i,fileInfo);
                list.add(returnFileInfo);
            }
        }
        return list;
    }
    //4.将单文件的数据存入数据库
    private void insertFileInDataBase(String stationName,int stationIdMax,int fileIdMax, FileInfo fileInfo) {
    private FileInfo insertFileInDataBase(String stationName,int stationIdMax,int fileIdMax, FileInfo fileInfo) {
        int count=0;
        int stationId=0;
        Integer stationId=0;
        //查询最大的电池组号
        int battGroupId=groupInfoMapper.selectMaxId();
        if(fileInfo!=null){
@@ -123,9 +138,16 @@
                fileInfo.setStationId(String.valueOf(stationId));
            }else{
                fileInfo.setStationId(String.valueOf(stationIdMax+1));
                stationId=stationIdMax+1;
            }
            fileInfo.setFileId(String.valueOf(fileIdMax+1));
            count=infoMapper.insert(fileInfo);
            //判断文件已经添加过则不再重复添加
            int flag=judgeFile(stationId,fileInfo.getFileUrl());
            if(flag>0){
                return  new FileInfo();
            }else{
                count=infoMapper.insert(fileInfo);
            }
            //将解析出来的文件信息插入数据库
            FileParam fparam=fileInfo.getFileParam();
            //去除groupinfo
@@ -138,7 +160,7 @@
                    for(int i=0;i<battgroupInfoList.size();i++){
                        BattgroupInfo battgroupInfo=battgroupInfoList.get(i);
                        battgroupInfo.setBattgroupId(String.valueOf(battGroupId+1+i));
                        battgroupInfo.setStationId(String.valueOf(stationIdMax+1));
                        battgroupInfo.setStationId(String.valueOf(stationId));
                        battgroupInfo.setFileId(String.valueOf(fileIdMax+1));
                        battgroupInfo.setBattgroupNum(fparam.getGroupNum());
                        int groupCount=groupInfoMapper.insert(battgroupInfo);
@@ -157,13 +179,131 @@
            }
        }
        if(count>0){
            if(stationId==0){
                //操作成功给台站赋予stationId
                UpdateWrapper uwrapper=new UpdateWrapper();
                uwrapper.set("station_id",stationIdMax+1);
                uwrapper.eq("station_name",stationName);
                mapper.update(null,uwrapper);
            //操作成功给台站赋予stationId
            UpdateWrapper uwrapper=new UpdateWrapper();
            uwrapper.set("station_id",stationId);
            uwrapper.eq("station_name",stationName);
            mapper.update(null,uwrapper);
        }
        return  fileInfo;
    }
    //判断文件已经添加过则不再重复添加
    public int judgeFile(int stationId,String fileUrl){
        int flag=0;
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("station_id",stationId);
        wrapper.eq("file_url",fileUrl);
        FileInfo fileInfo=infoMapper.selectOne(wrapper);
        if(fileInfo!=null){
            flag=1;
        }
        return flag;
    }
    //编辑台站
    public Response updateStation(String stationName1, String stationName2, String stationName3, String updateName) {
        String stationName="";
        int stationFlag=0;
        if(stationName1!=null&&!stationName1.isEmpty()){
            stationName=stationName+stationName1;
            stationFlag=1;
        }
        if(stationName2!=null&&!stationName2.isEmpty()){
            stationName=stationName+"-"+stationName2;
            stationFlag=2;
        }
        if(stationName3!=null&&!stationName3.isEmpty()){
            stationName=stationName+"-"+stationName3;
            stationFlag=3;
        }
        int flag=0;
        if(stationFlag==1){
            //修改StationName1
            flag=mapper.updateStationName1(stationName1,updateName);
        }
        if(stationFlag==2){
            //修改StationName2
            flag=mapper.updateStationName2(stationName1,stationName2,updateName);
        }
        if(stationFlag==3){
            //修改StationName3
            flag=mapper.updateStationName3(stationName1,stationName2,stationName3,updateName);
        }
        return new Response().set(1,flag>0,"修改操作");
    }
    //删除台站
    @Transactional
    public Response deleteStation(String stationName1, String stationName2, String stationName3) {
        int stationFlag=0;
        if(stationName1!=null&&!stationName1.isEmpty()){
            stationFlag=1;
        }
        if(stationName2!=null&&!stationName2.isEmpty()){
            stationFlag=2;
        }
        if(stationName3!=null&&!stationName3.isEmpty()){
            stationFlag=3;
        }
        List<StationInfo> idStations=new ArrayList<>();
        if(stationFlag==1){
            //找出根节点是stationName1的所有机房id
            idStations=mapper.selectIdByName1(stationName1);
        }
        if(stationFlag==2){
            //找出根节点是stationName1,stationName2的所有机房id
            idStations=mapper.selectIdByName2(stationName1,stationName2);
        }
        if(stationFlag==3){
            //找出根节点是stationName1,stationName2,stationName3的所有机房id
           idStations=mapper.selectIdByName3(stationName1,stationName2,stationName3);
        }
        if(idStations!=null&&idStations.size()>0){
            for (StationInfo stationInfo:idStations) {
                String stationName=stationInfo.getStationName();
                Integer stationId=Integer.valueOf(stationInfo.getStationId());
                //3.删除所有文件数据
                dataMapper.deleteDataAndInfoByStationId(stationId);
                //4.删除所有文件参数
                paramMapper.deleteParamByStationId(stationId);
                //最终删除基站
                UpdateWrapper wrapper=new UpdateWrapper();
                wrapper.eq("station_id",stationId);
                wrapper.eq("station_name",stationName);
                mapper.delete(wrapper);
            }
            return new Response().set(1,true,"删除成功");
        }else{
            return new Response().set(1,false,"机房不存在");
        }
    }
    //移除台站下文件(单个文件)
    @Transactional
    public Response delFileFromStation(String stationName, String filePath) {
        //1.先查出机房的id
        Integer stationId=mapper.selectIdByName(stationName);
        if(stationId==null){
            return new Response().set(1,false,"机房不存在");
        }else if(stationId==0){
            return new Response().set(1,false,"机房下不存在文件");
        }else {
            //2.查出文件对应的文件id
            Integer fileId=infoMapper.selectFileId(stationId,filePath);
            if(fileId==null||fileId==0){
                return new Response().set(1,false,"文件不存在");
            }else{
                //3.删除fileid对应的数据(stationId,fileId)
                dataMapper.deleteDataAndInfo(stationId,fileId);
                //4.删除fileid对应的参数
                paramMapper.deleteParamByFileId(fileId);
                //5.删除机房下文件信息(stationId,fileId)
                infoMapper.deleteFileInStation(stationId,fileId);
                return  new Response().set(1,true,"删除成功");
            }
        }
    }
    public StationInfo getByFileId(String fileId) {
        return mapper.getByFileId(fileId);
    }
}