lxw
2023-11-16 07c94974f691f2444ff81cca52109eea5a411581
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package com.whyc.service;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.whyc.mapper.FgcdFiledownloadMapper;
import com.whyc.pojo.FgcdFiledownload;
import com.whyc.pojo.Response;
import com.whyc.util.CmdUtil;
import com.whyc.util.FileDirPath;
import com.whyc.util.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Service
public class FgcdFiledownloadService {
    @Autowired(required = false)
    private FgcdFiledownloadMapper mapper;
 
    //发送命令
    //机房命令操作设备时的cmd和ack校验  test_type  -->默认启动测试的类型
    public boolean sendCmd(int cmd,int param1,int param2,String downloadFlag,int devId)
    {
        int ack = cmd;
        int stopTime=40;
        switch(cmd) {
            case CmdUtil.CMD_READBATT: ack =CmdUtil.CMD_READBATT_ACK ; break;
            case CmdUtil.CMD_READFILE: ack =CmdUtil.CMD_READFILE_ACK ; break;
            case CmdUtil.CMD_DOLADFILE: ack =CmdUtil.CMD_DOLADFILE_ACK ; break;
            case CmdUtil.CMD_DOLADCANCLE: ack =CmdUtil.CMD_DOLADCANCLE_ACK ; break;
            default:
                return false;
        }
        UpdateWrapper updateWrapper=new UpdateWrapper();
        updateWrapper.set("op_cmd",cmd);
        if(cmd==CmdUtil.CMD_READBATT){
            updateWrapper.set("readbattcount",param1);
        }
        if(cmd==CmdUtil.CMD_READFILE){
            updateWrapper.set("file_index",param1);
            updateWrapper.set("batt_index",param2);
        }
        if(cmd==CmdUtil.CMD_DOLADFILE){
            String[] fileFlag=downloadFlag.split(",");
            updateWrapper.set("batt_index",param1);
            if(fileFlag!=null){
                for (String flag:fileFlag) {
                    updateWrapper.set("download_flag"+(Integer.valueOf(flag)+1),1);
                }
            }
        }
        updateWrapper.eq("dev_id",devId);
        int flag=mapper.update(null,updateWrapper);
        boolean res_exe = false;
        if(flag>0)
        {
            PageHelper.startPage(1,1);
            QueryWrapper queryWrapper=new QueryWrapper();
            queryWrapper.eq("dev_id",devId);
            for(int n=0; n<stopTime; n++)
            {
                FgcdFiledownload fgcd=mapper.selectOne(queryWrapper);
                if(fgcd!=null){
                    if (fgcd.getOpCmd() == ack) {
                        res_exe = true;
                        break;
                    }
                    try {
                        Thread.sleep(250);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } else {
                    break;
                }
            }
        }
        return res_exe;
    }
    //读取电池组列表
    public Response readBattList(int devId,int battCount) {
        boolean bl=sendCmd(CmdUtil.CMD_READBATT,battCount,0,"",devId);
        if(bl){
            QueryWrapper queryWrapper=new QueryWrapper();
            queryWrapper.eq("dev_id",devId);
            FgcdFiledownload fgcd=mapper.selectOne(queryWrapper);
            return new Response().setII(1,bl,fgcd,"读取成功返回数据");
        }else{
            return new Response().set(1,bl,"读取失败");
        }
    }
    //读取电池组指定文件列表
    public Response readFileList(int devId, int fileIndex, int battIndex) {
        boolean bl=sendCmd(CmdUtil.CMD_READFILE,fileIndex,battIndex,"",devId);
        if(bl){
            QueryWrapper queryWrapper=new QueryWrapper();
            queryWrapper.eq("dev_id",devId);
            FgcdFiledownload fgcd=mapper.selectOne(queryWrapper);
            return new Response().setII(1,bl,fgcd,"读取成功返回数据");
        }else{
            return new Response().set(1,bl,"读取失败");
        }
    }
    //下载指定电池组的文件列表
    public Response doloadFileList(int devId, int battIndex, String downloadFlag) {
        boolean bl=sendCmd(CmdUtil.CMD_DOLADFILE,battIndex,0,downloadFlag,devId);
        if(bl){
            QueryWrapper queryWrapper=new QueryWrapper();
            queryWrapper.eq("dev_id",devId);
            FgcdFiledownload fgcd=mapper.selectOne(queryWrapper);
            return new Response().setII(1,bl,fgcd,"下载成功返回数据");
        }else{
            return new Response().set(1,bl,"下载失败");
        }
    }
    //filedownload的websocket实时推送文件下载情况
    public Response getDownloadFileStatus(int devId) {
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("dev_id",devId);
        queryWrapper.last("limit 1");
        FgcdFiledownload fgcd=mapper.selectOne(queryWrapper);
        return new Response().setII(1,fgcd!=null,fgcd,"下载成功返回数据");
    }
 
    //取消下载文件(当前要下载的都会取消下载)
    public Response cancleFileList(int devId) {
        boolean bl=sendCmd(CmdUtil.CMD_DOLADCANCLE,0,0,null,devId);
        return new Response().set(1,bl);
    }
    //读取指定设备服务器文件列表
    public Response getDevFileName(int devId,String battName) {
        String fileDirName = FileDirPath.getFileDirName();
        String root=fileDirName+ File.separator+"FDFiles"+File.separator+devId+File.separator+battName;
        List list = new ArrayList<>();
        File file=new File(root);
        if(file == null || !file.exists()){
            return new Response().setII(1,false,list,"文件不存在");
        }
        list= FileUtil.getStaticFilePath(file,list,fileDirName);
        return new Response().setII(1,list!=null,list,"读取指定设备服务器文件列表");
    }
   //判断文件是否在服务器上
    public Response JudgeDevFileName(int devId, String battName, String fileNames) {
        Map<String,Integer>map=new HashMap<>();
        String[] fileNameList=fileNames.split(",");
        String fileDirName = FileDirPath.getFileDirName();
        String root=fileDirName+ File.separator+"FDFiles"+File.separator+devId+File.separator+battName+File.separator;
        if(fileNameList!=null&&fileNameList.length>0){
            for (String fileName:fileNameList) {
                String filePath=root+fileName;
                File file=new File(filePath);
                if (file == null || !file.exists()) {
                    map.put(fileName,0);
                }else{
                    map.put(fileName,1);
                }
            }
        }
        return new Response().setII(1,true,map,"判断文件是否在服务器上");
    }
}