admin
2024-02-21 2272213fea7ab9ea6250eefad55bb113ce2b1837
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
package com.ruoyi.task;
 
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.dl.domain.DlShebeixx;
import com.ruoyi.dl.domain.DlShebeixxCd;
import com.ruoyi.dl.domain.DlShebeixxCdSssj;
import com.ruoyi.dl.domain.DlShebeixxCdYcsj;
import com.ruoyi.dl.service.IDlShebeixxCdService;
import com.ruoyi.dl.service.IDlShebeixxCdSssjService;
import com.ruoyi.dl.service.IDlShebeixxCdYcsjService;
import com.ruoyi.dl.service.IDlShebeixxService;
import com.ruoyi.interchange.domain.TbDataSendRecords;
import com.ruoyi.interchange.service.ITbDataSendRecordsService;
import com.ruoyi.utils.FileUtil;
import com.ruoyi.utils.FtpUtils;
import sun.applet.Main;
 
import java.io.File;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
 
public class DataAssembleUtil {
 
    private static IDlShebeixxService dlShebeixxService;
    private static IDlShebeixxCdService dlShebeixxCdService;
    private static IDlShebeixxCdSssjService dlShebeixxCdSssjService;
    private static IDlShebeixxCdYcsjService dlShebeixxCdYcsjService;
    private static ITbDataSendRecordsService tbDataSendRecordsService;
    private static RedisCache redisCache;
 
    //一矿:煤矿编码    220181014879
    //二矿:煤矿编码    220181014860
    private static String MKBM= RuoYiConfig.getMkbm(); //煤矿编码
    private static String MKMC= RuoYiConfig.getMkmc(); //煤矿名称
    private static String SCCJ="徐州珂尔玛科技有限公司"; //生产厂家名称
    private static String XTXH="KEM2023DLJKXT"; //系统型号
    private static String XTMC="供电监控系统"; //系统名称
 
    private static SimpleDateFormat YMDformat = new SimpleDateFormat("yyyy-MM-dd");
    private static SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
    private static SimpleDateFormat formatYMD = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static SimpleDateFormat YMD_format = new SimpleDateFormat("yyyy/MM/dd");
 
    static  {
        dlShebeixxService = SpringUtils.getBean(IDlShebeixxService.class);
        dlShebeixxCdService = SpringUtils.getBean(IDlShebeixxCdService.class);
        dlShebeixxCdSssjService = SpringUtils.getBean(IDlShebeixxCdSssjService.class);
        dlShebeixxCdYcsjService = SpringUtils.getBean(IDlShebeixxCdYcsjService.class);
        tbDataSendRecordsService = SpringUtils.getBean(ITbDataSendRecordsService.class);
        redisCache = SpringUtils.getBean(RedisCache.class);
    }
 
    /*系统名称            系统简称               文件分类       说明
    变电站设备基本信息        bdsj                GDSB    变电站设备基本信息
    变电站设备监测系统      gdjc                GDJC    变电站设备测点基础信息
                                            GDSS    变电站设备测点实时信息
                                            GDYC    变电站设备测点异常信息
    重大设备基本信息        jbsj                JBSJ    重大设备基本信息
    主通风机用电监测        tfjc                TFJC    主通风机测点基础信息
                                            TFSS    主通风机实时信息
                                            TFYC    主通风机异常信息
    主排水用电监测         psjc                PSJC    主排水基础信息
                                            PSSS    主排水实时信息
                                            PSYC    主排水异常信息
    主运输用电监测            zyjc                ZYJC    主运输基础信息
                                            ZYSS    主运输实时信息
                                            ZYYC    主运输异常信息
    提升系统用电监测        tsjc                TSJC    提升系统基础信息
                                            TSSS    提升系统实时信息
                                            TSYC    提升系统异常信息*/
 
    //设备基本信息(项目启动或者修改后发送一次)
    public static void AssembleBDZSBJBXX(){
        List<DlShebeixx> list=dlShebeixxService.selectListByGroupBy(new DlShebeixx());
        for (int i = 0; i < list.size(); i++) {
            AssembleBDZSBJBXX_Add(list.get(i).getXiTongBM(),list.get(i).getWenJianFL());
        }
    }
 
    /**
     * @param XTBM 系统编码
     * @param WJFL 文件分类
     */
    public static void AssembleBDZSBJBXX_Add(String XTBM,String WJFL){
        Date nowD=new Date();
 
        //煤矿编码_GDSB_系统编码_数据上传时间.txt
        //数据上传时间格式:yyyyMMddHHmmss 如:20190929112425
        //文件名示例:140121020034_GDSB_6001_20190929112425.txt
 
 
        //文件存储位置
        String url= RuoYiConfig.getProfile() + "/upload/"+MKBM+"/"+YMD_format.format(nowD)+"/"+WJFL.substring(0,2);
        File file = new File(url);
        if (!file.exists()) {
            file.mkdirs();
        }
 
        //文件内容包括两部分:文件头和文件体。
        //文件头包括煤矿编码;煤矿名称;数据上传时间,3 个字段为必填项。数据上传时间是指生成该数据文件的时间。各字段使用英文符号“;”隔开,文件头以“~”符号结束。
        //文件体是煤矿所有变电站设备基本信息的集合。每条设备的信息格式为“设备编码;设备名称;规格型号;设备类别;生产日期;所属系统;安装日期;安装位置;生产厂家;出厂编码;安标证书编号;防爆证书编号;额定电压;额定电流;额定功率”。每一条变电站设备基本信息各字段以英文字符“;”隔开,以“~”结束,每组数据以“||”结尾。
        //140121020034;XXX煤矿;2019-09-29 11:24:24~1401210200340000017633;进线柜;VW-5/21;1;2019-09-01;6001;2020-09-01;中央变电所;***有限公司;4103123213;MFB130444;CE071275;380;30;2500~||
 
        //文件头
        String toString=MKBM+";"+MKMC+";"+formatYMD.format(nowD)+"~";
        DlShebeixx sOBJ=new DlShebeixx();
        sOBJ.setXiTongBM(XTBM);//系统编码
        sOBJ.setWenJianFL(WJFL);//文件分类
        List<DlShebeixx> list = dlShebeixxService.selectDlShebeixxList(sOBJ);
 
        //文件体
        for (int i = 0; i < list.size(); i++) {
            DlShebeixx dlShebeixx=list.get(i);
            String objString=dlShebeixx.getSheBeiBM()+";" //设备编码
                    +dlShebeixx.getSheBeiMC()+";" //设备名称
                    +dlShebeixx.getGuiGeXH()+";" //规格型号
                    +dlShebeixx.getSheBeiLX()+";" //设备类别
                    +YMDformat.format(dlShebeixx.getShengChanRQ())+";" //生产日期
                    +dlShebeixx.getSuoShuXT()+";" //所属系统
                    +YMDformat.format(dlShebeixx.getAnZhuangRQ())+";" //安装日期
                    +dlShebeixx.getAnZhuangWZ()+";" //安装位置
                    +dlShebeixx.getShengChanCJ()+";" //生产厂家
                    +dlShebeixx.getChuChangBM()+";" //出厂编码
                    +dlShebeixx.getAnBIaoZSBH()+";" //安标证书编号
                    +dlShebeixx.getFangBaoZSBH()+";" //防爆证书编号
                    +dlShebeixx.geteDingDY()+";" //额定电压
                    +dlShebeixx.geteDingDL()+";" //额定电流
                    +dlShebeixx.geteDingGL()+"~||"; //额定功率
 
            toString+=objString;
        }
        //批量替换null字符串
        toString = StringUtils.replace(toString, "null", "");
 
        String fileUrl=url + "/"+MKBM+"_"+WJFL+"_"+XTBM+"_"+format.format(nowD)+".txt";
        FileUtil.writeLogInFile(fileUrl,toString);
 
        JSONObject obj=new JSONObject();
        obj.put("type","变电站");
        obj.put("url",fileUrl);
        obj.put("sendSum",0);
        obj.put("fileName",MKBM+"_"+WJFL+"_"+XTBM+"_"+format.format(nowD));
        redisCache.rightPush("DataAssemble",obj);
    }
 
 
 
    //变电站设备监测数据(项目启动或者修改后发送一次)
    public static void AssembleBDZSBJCSJ(){
        List<DlShebeixxCd> list=dlShebeixxCdService.selectListByGroupBy(new DlShebeixxCd());
        for (int i = 0; i < list.size(); i++) {
            AssembleBDZSBJCSJ_Add(list.get(i).getXiTongBM(),list.get(i).getWenJianFL());
        }
    }
 
    public static void AssembleBDZSBJCSJ_Add(String XTBM,String WJFL){
        Date nowD=new Date();
 
        //煤矿编码_GDJC_系统编码_数据上传时间.txt
        //数据上传时间格式:yyyyMMddHHmmss 如:20190929112425
        //文件名示例:140121020034_GDJC_6001_20190929112425.txt
 
        //文件存储位置
        String url= RuoYiConfig.getProfile() + "/upload/"+MKBM+"/"+YMD_format.format(nowD)+"/"+WJFL.substring(0,2);
        File file = new File(url);
        if (!file.exists()) {
            file.mkdirs();
        }
 
        //文件内容包括两部分:文件头和文件体。
        //文件头包括煤矿编码;煤矿名称;系统编码;系统型号;系统名称;生产厂家名称;数据上传时间,这 7 个字段都是必填项。数据上传时间是指生成该数据文件的时间。各字段使用英文符号“;”隔开,文件头以“~”符号结束。
        //文件体是测点基础数据的集合。每条信息格式为“测点编码;测点类型编码;测点类型名称;所属设备编码;测点位置;测量值单位;量程上限;量程下限;报警上限;报警下限;传感器关联关系;数据时间”。每一条信息各字段以英文字符“;”隔开,以“~”结束,每组数据以“||”结尾。
        //140121020034;XXX煤矿;6001;KJ××;供电监控系统;**厂家;2019-09-0110:31:24~14012102003430MN30101000000006331234;2103;电流;1401210200345001100542;中央变电所电流监控;A;100;0.01;80;5;;2019-09-01 10:31:24~||
 
        //文件头
        String toString="";
        if(XTBM.equals("5001")){
            toString=MKBM+";"+MKMC+";"+XTBM+";"+XTXH+";"+XTMC+";"+SCCJ+";"+formatYMD.format(nowD)+"~";
        }else{
            toString=MKBM+";"+MKMC+";"+XTXH+";"+XTMC+";"+formatYMD.format(nowD)+"~";
        }
 
        DlShebeixxCd dlShebeixxCd=new DlShebeixxCd();
        dlShebeixxCd.setXiTongBM(XTBM);//系统编码
        dlShebeixxCd.setWenJianFL(WJFL);//文件分类
        List<DlShebeixxCd> list = dlShebeixxCdService.selectDlShebeixxCdList(dlShebeixxCd);
 
        //文件体
        for (int i = 0; i < list.size(); i++) {
            DlShebeixxCd dlShebeiCD=list.get(i);
 
            String objString="";
            if(XTBM.equals("5001")){
                objString=dlShebeiCD.getCeDianBM()+";" //测点编码
                        +dlShebeiCD.getCeDianLXBM()+";" //测点类型编码
                        +dlShebeiCD.getCeDianLXMC()+";" //测点类型名称
                        +dlShebeiCD.getSuoShuSBBM()+";" //所属设备编码
                        +dlShebeiCD.getCeDianWZ()+";" //测点位置
                        +dlShebeiCD.getCeLiangZDW()+";" //测量值单位
                        +dlShebeiCD.getLiangChenSX()+";" //量程上限
                        +dlShebeiCD.getLiangChenXX()+";" //量程下限
                        +dlShebeiCD.getBiaoJingSX()+";" //报警上限
                        +dlShebeiCD.getBiaoJingXX()+";" //报警下限
                        +dlShebeiCD.getChuanGanQGLGX()+";" //传感器关联关系
                        +YMDformat.format(dlShebeiCD.getShuJuDYSJ())+"~||"; //数据时间
            }else{
                objString=dlShebeiCD.getCeDianBM()+";" //测点编码
                        +dlShebeiCD.getCeDianLXBM()+";" //测点类型编码
                        +dlShebeiCD.getCeDianLXMC()+";" //测点类型名称
                        +dlShebeiCD.getSuoShuSBBM()+";" //所属设备编码
                        +dlShebeiCD.getCeDianWZ()+";" //测点位置
                        +dlShebeiCD.getCeLiangZDW()+";" //测量值单位
                        +dlShebeiCD.getLiangChenSX()+";" //量程上限
                        +dlShebeiCD.getLiangChenXX()+";" //量程下限
                        +dlShebeiCD.getBiaoJingSX()+";" //报警上限
                        +dlShebeiCD.getBiaoJingXX()+";" //报警下限
                        +YMDformat.format(dlShebeiCD.getShuJuDYSJ())+"~||"; //数据时间
            }
            toString+=objString;
        }
 
        //批量替换null字符串
        toString = StringUtils.replace(toString, "null", "");
 
        String fileUrl=url + "/"+MKBM+"_"+WJFL+"_"+XTBM+"_"+format.format(nowD)+".txt";
        FileUtil.writeLogInFile(fileUrl,toString);
 
        JSONObject obj=new JSONObject();
        obj.put("type","测点数据");
        obj.put("url",fileUrl);
        obj.put("sendSum",0);
        obj.put("fileName",MKBM+"_"+WJFL+"_"+XTBM+"_"+format.format(nowD));
        redisCache.rightPush("DataAssemble",obj);
    }
 
 
 
    //测点实时数据(每10秒发送一次)
    public static void AssembleCDSSSJ(){
        List<DlShebeixxCdSssj> list=dlShebeixxCdSssjService.selectListByGroupBy(new DlShebeixxCdSssj());
        for (int i = 0; i < list.size(); i++) {
            AssembleCDSSSJ_Add(list.get(i).getXiTongBM(),list.get(i).getWenJianFL());
        }
    }
    public static void AssembleCDSSSJ_Add(String XTBM,String WJFL){
        Date nowD=new Date();
 
        //煤矿编码_GDSS_系统编码_数据上传时间.txt
        //数据上传时间格式:yyyyMMddHHmmss 如:20190929112425
        //文件名示例:140121020034_GDSS_6001_20190929112425.txt
        //说明:数据上传时间是指将各测点实时数据汇总生成数据文件的时间。
 
        //文件存储位置
        String url= RuoYiConfig.getProfile() + "/upload/"+MKBM+"/"+YMD_format.format(nowD)+"/"+WJFL.substring(0,2);
        File file = new File(url);
        if (!file.exists()) {
            file.mkdirs();
        }
 
 
        //文件内容包括两部分:文件头和文件体。
        //文件头包括煤矿编码;矿井名称;系统编码;数据上传时间,4 个字段为必填项。数据上传时间是指生成该数据文件的时间。各字段使用英文符号“;”隔开,文件头以“~”符号结束。
        //文件体是煤矿下所有测点 10 秒感知数据的集合。每条信息格式为“测点编码;测点类型编码;测点类型名称;所属设备编码;测点数值;测点数值单位;测点状态;数据时间”。每一条信息各字段以英文字符“;”隔开,以“~”结束,每组数据以“||”结尾。
        //140121020034;XXX煤矿;6001;2019-09-0110:31:24~14012102003430MN30101000000006331234;500011;电流;1401210200345001100542;5;A;0;2019-09-01 10:31:24~||
 
        //文件头
        String toString="";
        if(XTBM.equals("5001")){
            toString=MKBM+";"+MKMC+";"+XTBM+";"+formatYMD.format(nowD)+"~";
        }else{
            toString=MKBM+";"+MKMC+";"+formatYMD.format(nowD)+"~";
        }
 
        DlShebeixxCdSssj dlShebeixxCdSssj=new DlShebeixxCdSssj();
        dlShebeixxCdSssj.setXiTongBM(XTBM);//系统编码
        dlShebeixxCdSssj.setWenJianFL(WJFL);//文件分类
        List<DlShebeixxCdSssj> list = dlShebeixxCdSssjService.selectDlShebeixxCdSssjList(dlShebeixxCdSssj);
 
        //文件体
        for (int i = 0; i < list.size(); i++) {
            DlShebeixxCdSssj dlShebeiSSSJ=list.get(i);
 
            String ceDianSZ=dlShebeiSSSJ.getCeDianSZ();
 
            if(dlShebeiSSSJ.getCeDianLXBM().equals("500008")
               || dlShebeiSSSJ.getCeDianLXBM().equals("500009")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("500011")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("610005")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("610006")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("610007")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("610008")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("610009")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("610010")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("610011")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("610012")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("620003")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("620004")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("620005")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("620006")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("620007")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("630004")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("630005")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("630006")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("630007")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("630008")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("640004")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("640005")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("640006")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("640007")
                    || dlShebeiSSSJ.getCeDianLXBM().equals("640008")){
                ceDianSZ=ceDianSZ.split("\\.")[0];
            }
 
 
            String shuJuSJ="";
 
            if(dlShebeiSSSJ.getShuJuSJ().getTime()>nowD.getTime()){
                shuJuSJ=formatYMD.format(nowD);
            }else{
                shuJuSJ=formatYMD.format(dlShebeiSSSJ.getShuJuSJ());
            }
 
 
            String objString=dlShebeiSSSJ.getCeDianBM()+";" //测点编码
                    +dlShebeiSSSJ.getCeDianLXBM()+";" //测点类型编码
                    +dlShebeiSSSJ.getCeDianLXMC()+";" //测点类型名称
                    +dlShebeiSSSJ.getSuoShuSBBM()+";" //所属设备编码
                    +ceDianSZ+";" //测点数值
                    +dlShebeiSSSJ.getCeDianSZDW()+";" //测点数值单位
                    +dlShebeiSSSJ.getCeDianZT()+";" //测点状态
                    +shuJuSJ+"~||"; //数据时间
 
 
            toString+=objString;
        }
 
        //批量替换null字符串
        toString = StringUtils.replace(toString, "null", "");
 
        String fileUrl=url + "/"+MKBM+"_"+WJFL+"_"+XTBM+"_"+format.format(nowD)+".txt";
        FileUtil.writeLogInFile(fileUrl,toString);
 
        JSONObject obj=new JSONObject();
        obj.put("type","实时数据");
        obj.put("url",fileUrl);
        obj.put("sendSum",0);
        obj.put("fileName",MKBM+"_"+WJFL+"_"+XTBM+"_"+format.format(nowD));
        redisCache.rightPush("DataAssemble",obj);
    }
 
 
 
 
    //测点异常数据(存在异常的时候才发送)
    public static void AssembleCDYCSJ(){
        List<DlShebeixxCdYcsj> list=dlShebeixxCdYcsjService.selectListByGroupBy(new DlShebeixxCdYcsj());
        for (int i = 0; i < list.size(); i++) {
            AssembleCDYCSJ_Add(list.get(i).getXiTongBM(),list.get(i).getWenJianFL());
        }
    }
 
    public static void AssembleCDYCSJ_Add(String XTBM,String WJFL){
        Date nowD=new Date();
 
        //煤矿编码_GDYC_系统编码_数据上传时间.txt
        //数据上传时间格式:yyyyMMddHHmmss 如:20190929112425
        //文件名示例:140121020034_GDYC_6001_20190929112425.txt
        //说明:数据上传时间是指将各测点异常数据汇总生成数据文件的时间。
 
        //文件存储位置
        String url= RuoYiConfig.getProfile() + "/upload/"+MKBM+"/"+YMD_format.format(nowD)+"/"+WJFL.substring(0,2);
        File file = new File(url);
        if (!file.exists()) {
            file.mkdirs();
        }
 
 
        //文件内容包括两部分:文件头和文件体。
        //文件头包括煤矿编码;矿井名称;系统编码;数据上传时间,4 个字段为必填项。数据上传时间是指生成该数据文件的时间。各字段使用英文符号“;”隔开,文件头以“~”符号结束。
        //文件体是煤矿下所有测点异常感知数据的集合。每条信息格式为“测点编码;测点类型编码;测点类型名称;所属设备编码;异常类型;异常开始时间;异常结束时间;异常期间最大值;最大值时刻;异常期间最小值;最小值时刻;异常期间平均值;数据时间”。每一条信息各字段以英文字符“;”隔开,以“~”结束,每组数据以“||”结尾。
        //140121020034;XXX煤矿;6001;2019-09-0110:31:24~14012102003430MN30101000000006331234;500010;电流;1401210200345001100542;1;2019-09-0110:25:24;8;2019-09-0110:27:24;5; 2019-09-0110:26:24;6.2;2019-09-0110:31:24~||
 
        //文件头
        String toString="";
        if(XTBM.equals("5001")){
            toString=MKBM+";"+MKMC+";"+XTBM+";"+formatYMD.format(nowD)+"~";
        }else{
            toString=MKBM+";"+MKMC+";"+formatYMD.format(nowD)+"~";
        }
 
 
        DlShebeixxCdYcsj dlShebeixxCdYcsj=new DlShebeixxCdYcsj();
        dlShebeixxCdYcsj.setShiFouFS(0);//是否发送 0未发送  1发送
        dlShebeixxCdYcsj.setXiTongBM(XTBM);//系统编码
        dlShebeixxCdYcsj.setWenJianFL(WJFL);//文件分类
        List<DlShebeixxCdYcsj> list = dlShebeixxCdYcsjService.selectDlShebeixxCdYcsjList(dlShebeixxCdYcsj);
 
        //文件体
        for (int i = 0; i < list.size(); i++) {
            DlShebeixxCdYcsj dlShebeiYCSJ=list.get(i);
            String objString=dlShebeiYCSJ.getCeDianBM()+";" //测点编码
                    +dlShebeiYCSJ.getCeDianLXBM()+";" //测点类型编码
                    +dlShebeiYCSJ.getCeDianLXMC()+";" //测点类型名称
                    +dlShebeiYCSJ.getSuoShuSBBM()+";" //所属设备编码
                    +dlShebeiYCSJ.getYiChangLX()+";" //异常类型
                    +formatYMD.format(dlShebeiYCSJ.getYiChangKSSJ())+";" //异常开始时间
                    +formatYMD.format(dlShebeiYCSJ.getYiChangJSSJ())+";" //异常结束时间
                    +dlShebeiYCSJ.getYiChangQJZDZ()+";" //异常期间最大值
                    +formatYMD.format(dlShebeiYCSJ.getZuiDaZSK())+";" //最大值时刻
                    +dlShebeiYCSJ.getYiChangQJZXZ()+";" //异常期间最小值
                    +formatYMD.format(dlShebeiYCSJ.getZuiXiaoZSK())+";" //最小值时刻
                    +dlShebeiYCSJ.getYiChangQJPJZ()+";" //异常期间平均值
                    +formatYMD.format(dlShebeiYCSJ.getShuJuSJ())+"~||"; //数据时间
 
            toString+=objString;
 
            //更新为已发送
            DlShebeixxCdYcsj dlShebeixxCdYcsjU=new DlShebeixxCdYcsj();
            dlShebeixxCdYcsjU.setId(dlShebeiYCSJ.getId());
            dlShebeixxCdYcsjU.setShiFouFS(1);
            dlShebeixxCdYcsjService.updateDlShebeixxCdYcsj(dlShebeixxCdYcsjU);
        }
 
        //批量替换null字符串
        toString = StringUtils.replace(toString, "null", "");
 
        String fileUrl=url + "/"+MKBM+"_"+WJFL+"_"+XTBM+"_"+format.format(nowD)+".txt";
        FileUtil.writeLogInFile(fileUrl,toString);
 
        JSONObject obj=new JSONObject();
        obj.put("type","异常数据");
        obj.put("url",fileUrl);
        obj.put("sendSum",0);
        obj.put("fileName",MKBM+"_"+WJFL+"_"+XTBM+"_"+format.format(nowD));
        redisCache.rightPush("DataAssemble",obj);
    }
 
    //记录发送次数
    public static void DataTransmission(FtpUtils ftpUtil,JSONObject obj) throws InterruptedException {
        //通过ftp方式发送
        //取出的数据
        System.out.println("电力上传开始发送数据:"+obj.toString());
 
        TbDataSendRecords tbDataSendRecords=new TbDataSendRecords();
        try{
            String url=obj.getString("url");
            String fileName=obj.getString("fileName");
 
            tbDataSendRecords.setFileName(fileName);//文件名
            tbDataSendRecords.setDataHeader("");//数据头
            tbDataSendRecords.setDataNumber(1l);//数据数量
            tbDataSendRecords.setSendFileUrl(url);//文件发送FTP位置
            tbDataSendRecords.setCoalMineId(1l);//所属煤矿ID
            tbDataSendRecords.setSystemId(1l);//所属系统ID
            tbDataSendRecords.setRuleId(1l);//数据文件采集规则ID
            tbDataSendRecords.setDetectionTime(new Date());//文件处理时间
            tbDataSendRecords.setDetectionResult("0");//是否系统生成的 0是 1否
            tbDataSendRecords.setCheckResult("1");//校验结果 0通过 1未通过
 
            String[] split = fileName.split("_");
 
            String lj=split[1].substring(0,2);
 
            if(lj.equals("JB")){
                String ks=split[2].substring(0,2);
                if(ks.equals("61")){
                    lj="TF";
                }else if(ks.equals("62")){
                    lj="PS";
                }else if(ks.equals("63")){
                    lj="ZY";
                }else if(ks.equals("64")){
                    lj="TS";
                }
            }
 
            boolean storeFlag=ftpUtil.uploadFile(RuoYiConfig.getFtpPath()+"\\"+lj,"",fileName,url);
            if(storeFlag){
                tbDataSendRecords.setSendResult("0");//发送结果 0成功 1失败
            }else{
                tbDataSendRecords.setSendResult("1");//发送结果 0成功 1失败
                int sendSum=obj.getInteger("sendSum");
                int nowSendSum=sendSum+1;
                obj.put("sendSum",nowSendSum);
                redisCache.rightPush("DataAssemble",obj);
                Thread.sleep(1000);
            }
            //tbDataSendRecordsService.insertTbDataSendRecords(tbDataSendRecords);
        }catch (Exception e){
            System.err.println("FTP发送出现异常:::::"+e.getMessage());
            //如果出现异常需重新缓存,重新进行发送
 
            tbDataSendRecords.setSendResult("1");//发送结果 0成功 1失败
            int sendSum=obj.getInteger("sendSum");
            int nowSendSum=sendSum+1;
            obj.put("sendSum",nowSendSum);
            redisCache.rightPush("DataAssemble",obj);
            //tbDataSendRecordsService.insertTbDataSendRecords(tbDataSendRecords);
            Thread.sleep(1000);
        }
 
    }
 
 
}