64f046ed41c2ae607dc065c82b6d454f64e90584..2753ad7aee272a5a5a8a0124b1feea5a1e4cc83e
6 天以前 whyclxw
电源告警参数返回
2753ad 对比 | 目录
6 天以前 whyclxw
包机组修改
5720a0 对比 | 目录
6 天以前 whyclxw
Merge branch 'master' of http://118.89.139.230:10101/r/powerIntelligenceSystem
6d506e 对比 | 目录
6 天以前 whyclxw
左侧机房下拉
5a54a4 对比 | 目录
6 天以前 DELL
Merge branch 'master' of http://118.89.139.230:10101/r/powerIntelligenceSystem
88abda 对比 | 目录
6 天以前 DELL
项目规格书提交
c50dd9 对比 | 目录
6 天以前 whyclxw
Merge branch 'master' of http://118.89.139.230:10101/r/powerIntelligenceSystem
138dea 对比 | 目录
6 天以前 whyclxw
模板导出和标准化修改
cb6cdd 对比 | 目录
6 天以前 whycxzp
维修管理
77e85c 对比 | 目录
6 天以前 whycxzp
维修调度-查询更新
9f475b 对比 | 目录
6 天以前 whycxzp
维修调度-出库
4262e1 对比 | 目录
6 天以前 whyclxw
模板导出和标准化修改
10613f 对比 | 目录
6 天以前 whyclxw
1.2.7修改优良电源统计时取电源历史实时数据采用反射来写
b739e4 对比 | 目录
6 天以前 whyclxw
预警分析管理-切换时间间隔和副属性/查询所有的属性对应关系
ab1ce4 对比 | 目录
6 天以前 whyclxw
历史测试数据详情
9e00dd 对比 | 目录
6 天以前 whyclxw
历史实时数据右侧修改
8e1b0e 对比 | 目录
6 天以前 whyclxw
历史测试记录浮充电压值
249472 对比 | 目录
6 天以前 whyclxw
一次完整周期的核容测试和未满足标准核容
f09c0c 对比 | 目录
6 天以前 whyclxw
预警分析管理-主属性和配置属性
929c4f 对比 | 目录
6 天以前 whyclxw
Merge branch 'master' of http://118.89.139.230:10101/r/powerIntelligenceSystem
226261 对比 | 目录
6 天以前 whyclxw
预警分析管理-主属性和配置属性
9e65d8 对比 | 目录
6 天以前 whycxzp
维修调度-报废库
526721 对比 | 目录
6 天以前 whycxzp
维修调度-入库操作
76f255 对比 | 目录
6 天以前 whyclxw
预警分析管理-主属性和配置属性
3470b3 对比 | 目录
6 天以前 whyclxw
预警分析管理-电源告警
d61a41 对比 | 目录
6 天以前 whyclxw
预警分析管理-电源告警
9b8534 对比 | 目录
44个文件已修改
12个文件已添加
1528 ■■■■ 已修改文件
PlateFormFile/直流电源智慧平台需求规格书2.0.docx 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/AlmParamController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/AnalysisAlmController.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/BaojiGroupController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/DeviceSpareController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/ExportFileController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/WorkflowMainController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/AnalysisAlm/AnalysisChangeRes.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/AnalysisAlm/ResAnalysis.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Real/ExportTinfDataDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Station/City.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Station/Country.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Station/Provice.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/Station/Station.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/AlmSummaryParamMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/BaojigroupPowerMapper.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/BattInfMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/DeviceScrapMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/DeviceSpareMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_alarm/BattalarmData.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_batt_testdata/BatttestdataId.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_batt_testdata/BatttestdataInf.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_data_history/PwrdevHistorydataId.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_param/AlmSummaryParam.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_pwrdev_alarm/PwrdevAlarm.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_pwrdev_alarm/PwrdevAlarmParamStand.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_user/BaojigroupPower.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/web_site/DeviceScrap.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/web_site/WorkflowMain.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/AlmAnalysisParamService.java 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/AlmSummaryParamService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/AppParamService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BaojigroupService.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattAlmparamService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattInfService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattRealdataIdService.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BatttestdataIdService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BatttestdataInfService.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/DeviceScrapService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/DeviceSpareService.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/ExportService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PwrdevAlarmParamService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PwrdevAlarmService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PwrdevHistorydataIdService.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/SubTablePageInfoService.java 265 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/WorkflowLinkService.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/WorkflowMainService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/excel_templates/batt_mon_static_template.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BaojigroupPowerMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BattInfMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BattalarmDataMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BatttestdataInfMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DeviceSpareMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/StationInfMapper.xml 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WorkflowMainMapper.xml 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PlateFormFile/Ö±Á÷µçÔ´ÖÇ»ÛÆ½Ì¨ÐèÇ󹿏ñÊé2.0.docx
Binary files differ
pom.xml
@@ -148,6 +148,21 @@
            <artifactId>poi-ooxml</artifactId>
            <version>3.10.1</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml-schemas</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--<dependency>
            <groupId>org.springframework.plugin</groupId>
src/main/java/com/whyc/controller/AlmParamController.java
@@ -35,14 +35,6 @@
    @Autowired
    private PwrdevAlarmParamService pwrAlmparamService;
    @Autowired
    private BattalarmDataService battalarmDataService;
    @Autowired
    private PwrdevAlarmService pwrdevAlarmService;
    @Autowired
    private BattRealdataIdService battRealdataIdService;
    /*@PostMapping("getBattAlmParam")
@@ -127,28 +119,6 @@
            }
        }
        return new Response<List<AlarmParam>>().set(1,list);
    }
    @PostMapping("getBattAlmAnalyse")
    @ApiOperation("预警分析管理-电池告警")
    public Response getBattAlmAnalyse(@RequestBody AlmAnalyseDto dto){
        Integer uid=ActionUtil.getUser().getId();
        dto.setUid(uid);
        return battalarmDataService.getBattAlmAnalyse(dto);
    }
    @GetMapping("getBattHisRealInAlm")
    @ApiOperation("预警分析管理-主属性和分析属性")
    public Response getBattHisRealInAlm(@RequestParam Integer battgroupId,@RequestParam String startTime,@RequestParam(required = false) Integer almId) throws ParseException, InterruptedException {
        return battRealdataIdService.getBattHisRealInAlm(battgroupId,startTime,almId);
    }
    @PostMapping("getPwrtAlmAnalyse")
    @ApiOperation("预警分析管理-电源告警")
    public Response getPwrtAlmAnalyse(@RequestBody AlmAnalyseDto dto){
        Integer uid=ActionUtil.getUser().getId();
        dto.setUid(uid);
        return pwrdevAlarmService.getPwrtAlmAnalyse(dto);
    }
}
src/main/java/com/whyc/controller/AnalysisAlmController.java
New file
@@ -0,0 +1,64 @@
package com.whyc.controller;
import com.whyc.dto.AnalysisAlm.AnalysisChangeRes;
import com.whyc.dto.Param.AlmAnalyseDto;
import com.whyc.dto.Response;
import com.whyc.service.AlmAnalysisParamService;
import com.whyc.service.BattRealdataIdService;
import com.whyc.service.BattalarmDataService;
import com.whyc.service.PwrdevAlarmService;
import com.whyc.util.ActionUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.text.ParseException;
@RequestMapping("analysis")
@RestController
@Api(tags = "预警分析管理")
public class AnalysisAlmController {
    @Autowired
    private BattalarmDataService battalarmDataService;
    @Autowired
    private PwrdevAlarmService pwrdevAlarmService;
    @Autowired
    private AlmAnalysisParamService almAnalysisParamService;
    @PostMapping("getBattAlmAnalyse")
    @ApiOperation("预警分析管理-电池告警")
    public Response getBattAlmAnalyse(@RequestBody AlmAnalyseDto dto){
        Integer uid= ActionUtil.getUser().getId();
        dto.setUid(uid);
        return battalarmDataService.getBattAlmAnalyse(dto);
    }
    @PostMapping("getPwrtAlmAnalyse")
    @ApiOperation("预警分析管理-电源告警")
    public Response getPwrtAlmAnalyse(@RequestBody AlmAnalyseDto dto){
        Integer uid=ActionUtil.getUser().getId();
        dto.setUid(uid);
        return pwrdevAlarmService.getPwrtAlmAnalyse(dto);
    }
    @GetMapping("getHisRealInAlm")
    @ApiOperation("预警分析管理-电源主属性和分析属性")
    public Response getHisRealInAlm(@RequestParam Integer battgroupId,@RequestParam Integer powerId,@RequestParam String startTime,@RequestParam(required = false) Integer almId) throws ParseException, InterruptedException {
        return almAnalysisParamService.getHisRealInAlm(battgroupId,powerId,startTime,almId);
    }
    @PostMapping("getHisRealWithChage")
    @ApiOperation("预警分析管理-切换时间间隔和副属性")
    public Response getHisRealWithChage(@RequestBody AnalysisChangeRes res) throws ParseException, InterruptedException {
        return almAnalysisParamService.getHisRealWithChage(res);
    }
    @PostMapping("getAlmSummaryParam")
    @ApiOperation("预警分析管理-查询所有的属性对应关系")
    public Response getAlmSummaryParam(){
        return almAnalysisParamService.getAlmSummaryParam();
    }
}
src/main/java/com/whyc/controller/BaojiGroupController.java
@@ -72,13 +72,7 @@
    @PostMapping("updateStationList")
    @ApiOperation(value = "包机组添加机房和电源|移除机房和电源",notes = "operationFlag为1,添加;-1,移除")
    public Response updateStationAndLockList(@RequestBody List<BaojigroupPower> baoJiGroupLockList, @RequestParam int operationFlag){
        service.updateStationAndLockList(baoJiGroupLockList,operationFlag);
        if(operationFlag==1) {
            return new Response().set(1, true,"添加成功");
        }else{
            return new Response().set(1,true,"移除成功");
        }
        return service.updateStationAndLockList(baoJiGroupLockList,operationFlag);
    }
src/main/java/com/whyc/controller/DeviceSpareController.java
@@ -42,6 +42,13 @@
        return service.add(spare,file);
    }
    @PostMapping("addByExcel")
    @ApiOperation("excel导入")
    public Response addByExcel(@RequestParam MultipartFile file) throws IOException {
        return service.addByExcel(file);
    }
    @PostMapping("update")
    @ApiOperation("修改")
    public Response update(@RequestBody DeviceSpare spare) {
src/main/java/com/whyc/controller/ExportFileController.java
@@ -1,5 +1,6 @@
package com.whyc.controller;
import com.whyc.dto.Real.ExportTinfDataDto;
import com.whyc.dto.Statistic.MonStic;
import com.whyc.service.ExportService;
import io.swagger.annotations.Api;
@@ -9,6 +10,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
@RestController
@@ -23,4 +25,10 @@
    public void exportBattTinfStatistic(HttpServletRequest req, HttpServletResponse resp ,@RequestBody MonStic stic) throws ParseException {
        service.exportBattTinfStatistic(req,resp,stic);
    }
    @PostMapping("exportTinfDataByTestRecordCount")
    @ApiOperation(value = "历史测试数据导出")
    public void exportTinfDataByTestRecordCount(HttpServletRequest req, HttpServletResponse resp ,@RequestBody ExportTinfDataDto dto) throws ParseException, IOException {
        service.exportTinfDataByTestRecordCount(req,resp,dto);
    }
}
src/main/java/com/whyc/controller/WorkflowMainController.java
@@ -7,6 +7,7 @@
import com.whyc.service.WorkflowLinkService;
import com.whyc.service.WorkflowMainService;
import com.whyc.util.ActionUtil;
import com.whyc.util.CommonUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -45,7 +46,7 @@
    @GetMapping("ownStatistics")
    @ApiOperation(value = "本人的单据统计",notes = "status含义:1-审批中,2-审批完成且通过,3-审批完成且驳回")
    public Response<Map<Integer,Integer>> getOwnStatistics(int type){
        int userId = ActionUtil.getUser().getId().intValue();
        int userId = CommonUtil.getUser().getId().intValue();
        return service.getOwnStatistics(userId,type);
    }
@@ -56,7 +57,7 @@
    @GetMapping("ownListPage")
    @ApiOperation(value = "本人的单据列表分页",notes = "status传参:0:全部,1-审批中,2-审批完成且通过,3-审批完成且驳回")
    public Response<PageInfo<WorkflowMain>> ownListPage(int type,int status,int pageNum,int pageSize){
        int userId = ActionUtil.getUser().getId().intValue();
        int userId = CommonUtil.getUser().getId().intValue();
        return service.ownListPage(userId,type,status,pageNum,pageSize);
    }
@@ -67,7 +68,7 @@
    @GetMapping("receivedStatistics")
    @ApiOperation(value = "接收到的单据统计",notes = "status含义:1-待接单,6-待审核,58-已审核")
    public Response<Map<Integer,Integer>> getReceivedStatistics(int type){
        User user = ActionUtil.getUser();
        User user = CommonUtil.getUser();
        return service.getReceivedStatistics(type,user);
    }
@@ -78,7 +79,7 @@
    @GetMapping("receivedListPage")
    @ApiOperation(value = "接收到的单据列表分页", notes = "status传参:0-全部,1-待接单,6-待审核,5|8-已审核(通过|驳回)")
    public Response<PageInfo<WorkflowMain>> getReceivedListPage(int type, int status, int pageNum, int pageSize) {
        User user = ActionUtil.getUser();
        User user = CommonUtil.getUser();
        return service.getReceivedListPage(type, status, user, pageNum, pageSize);
    }
src/main/java/com/whyc/dto/AnalysisAlm/AnalysisChangeRes.java
New file
@@ -0,0 +1,21 @@
package com.whyc.dto.AnalysisAlm;
import lombok.Data;
@Data
public class AnalysisChangeRes {
    private Integer battgroupId;
    private Integer powerId;
    private String startTime;
    private Integer intervalTime;
    private String dataName1;
    private Integer dataType1;
    private String dataName2;
    private Integer dataType2;
    private String dataName3;
    private Integer dataType3;
    private String dataName4;
    private Integer dataType4;
    private String dataName5;
    private Integer dataType5;
}
src/main/java/com/whyc/dto/AnalysisAlm/ResAnalysis.java
New file
@@ -0,0 +1,25 @@
package com.whyc.dto.AnalysisAlm;
import lombok.Data;
import java.util.Date;
@Data
public class ResAnalysis {
    private Date recordTime;
    private String dataName1;
    private Float dataValue1;
    private Integer dataType1;
    private String dataName2;
    private Float dataValue2;
    private Integer dataType2;
    private String dataName3;
    private Float dataValue3;
    private Integer dataType3;
    private String dataName4;
    private Float dataValue4;
    private Integer dataType4;
    private String dataName5;
    private Float dataValue5;
    private Integer dataType5;
}
src/main/java/com/whyc/dto/Real/ExportTinfDataDto.java
New file
@@ -0,0 +1,12 @@
package com.whyc.dto.Real;
import lombok.Data;
@Data
public class ExportTinfDataDto {
    private Integer battgroupId;
    private Integer testRecordCount;
    private String  picGroupVol;
    private String  picBattVol;
    private String  picGroupCurr;
}
src/main/java/com/whyc/dto/Station/City.java
@@ -8,5 +8,6 @@
public class City {
    private String provice;
    private String city;
    private Integer uid;
    private List<Country> countryList;
}
src/main/java/com/whyc/dto/Station/Country.java
@@ -9,5 +9,6 @@
    private String provice;
    private String city;
    private String country;
    private Integer uid;
    private List<Station> stationList;
}
src/main/java/com/whyc/dto/Station/Provice.java
@@ -7,5 +7,6 @@
@Data
public class Provice {
    private String provice;
    private Integer uid;
    private List<City> cityList;
}
src/main/java/com/whyc/dto/Station/Station.java
@@ -12,5 +12,6 @@
    private String country;
    private String stationName;
    private Integer stationId;
    private Integer uid;
    private List<Power> pinflist;
}
src/main/java/com/whyc/mapper/AlmSummaryParamMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.db_param.AlmSummaryParam;
public interface AlmSummaryParamMapper extends CustomMapper<AlmSummaryParam>{
}
src/main/java/com/whyc/mapper/BaojigroupPowerMapper.java
@@ -22,5 +22,8 @@
    List<BaojigroupPower> getStationIdListWithDischargePlanFlag();
    List<BaojigroupPower> getListByUserId(Integer userId);
    //查询包机组下的电源都在哪些包机组下且包机组的班组状态是啥
    List<BaojigroupPower> checkPwrIsInBanzu(Integer baoJiGroupId);
    //检测否在其他包机组中存在,若存在则提示当前电源已在其他班组(可提示存在的班组名称)中存在
    List<BaojigroupPower> checkPower(Integer powerId);
}
src/main/java/com/whyc/mapper/BattInfMapper.java
@@ -62,5 +62,7 @@
    //获取站点下的电池组(下拉)
    List<BattInf> getBattByUid(@Param("uid") Integer uid, @Param("provice") String provice, @Param("city") String city, @Param("country") String country, @Param("stationName") String stationName);
    //根据查询条件获取电池组集合
    BattInf getBattgroupIdList(@Param("battgroupId") Integer battgroupId);
    BattInf getBattgroupIdInf(@Param("battgroupId") Integer battgroupId);
    //查询电源下所有的电池组id
    List<Integer> getBattgroupIdList(@Param("powerId") Integer powerId);
}
src/main/java/com/whyc/mapper/DeviceScrapMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.web_site.DeviceScrap;
public interface DeviceScrapMapper extends CustomMapper<DeviceScrap>{
}
src/main/java/com/whyc/mapper/DeviceSpareMapper.java
@@ -2,7 +2,10 @@
import com.whyc.pojo.web_site.DeviceSpare;
import java.util.List;
public interface DeviceSpareMapper extends CustomMapper<DeviceSpare>{
    void outBound(List<DeviceSpare> spareList);
}
src/main/java/com/whyc/pojo/db_alarm/BattalarmData.java
@@ -95,4 +95,9 @@
    @TableField(exist = false)
    private String fullName;
    @TableField(exist = false)
    private Integer stationId;
    @TableField(exist = false)
    private Integer powerId;
}
src/main/java/com/whyc/pojo/db_batt_testdata/BatttestdataId.java
@@ -1,6 +1,7 @@
package com.whyc.pojo.db_batt_testdata;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
@@ -82,5 +83,12 @@
    @ApiModelProperty(value = "单体内阻")
    private Float monRes;
    @TableField(exist = false)
    private Float realCap;
    @TableField(exist = false)
    private Float restCap;
    @TableField(exist = false)
    private String percentCap;
}
src/main/java/com/whyc/pojo/db_batt_testdata/BatttestdataInf.java
@@ -55,7 +55,7 @@
    @ApiModelProperty(value = "是否是最新数据")
    private Integer dataNew;
    @ApiModelProperty(value = "是否有效")
    @ApiModelProperty(value = "是否为一次有效的记录1:有效")
    private Integer dataAvailable;
    @ApiModelProperty(value = "记录笔数")
@@ -113,6 +113,9 @@
    @ApiModelProperty(value = "山西61850监测放电数据标识【0:监测放电;1停电放电】")
    private Integer testDatatype;
    @ApiModelProperty(value = "此次放电前的浮充电压")
    private Float floatGroupVol;
    @TableField(exist = false)
    private String stationName;
src/main/java/com/whyc/pojo/db_data_history/PwrdevHistorydataId.java
@@ -40,6 +40,13 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    private Date recordDatetime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    @TableField(exist = false)
    private Date recordDatetime1;
    @TableField(exist = false)
    private String tableName;
    @ApiModelProperty(value = "编号")
    private Integer recordNum;
src/main/java/com/whyc/pojo/db_param/AlmSummaryParam.java
New file
@@ -0,0 +1,45 @@
package com.whyc.pojo.db_param;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * é¢„警分析管理字段总表
 * </p>
 *
 * @author lxw
 * @since 2025-06-20
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_param",value ="tb_alm_summary_param")
@ApiModel(value="AlmSummaryParam对象", description="预警分析管理字段总表")
public class AlmSummaryParam implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "字段类型[1:直流,2:通信,3配网  4:电池 5:设备]")
    private Integer fieldType;
    @ApiModelProperty(value = "字段属性")
    private String fieldName;
    @ApiModelProperty(value = "中文名称")
    private String fieldNameZh;
}
src/main/java/com/whyc/pojo/db_pwrdev_alarm/PwrdevAlarm.java
@@ -12,6 +12,7 @@
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * <p>
@@ -34,7 +35,7 @@
    private Long num;
    @ApiModelProperty(value = "电源ID")
    private Long powerId;
    private Integer powerId;
    @ApiModelProperty(value = "告警ID")
    private Integer almId;
@@ -85,4 +86,7 @@
    private String country;
    @TableField(exist = false)
    private String fullName;
    @TableField(exist = false)
    private List<Integer> battgroupIdList;
}
src/main/java/com/whyc/pojo/db_pwrdev_alarm/PwrdevAlarmParamStand.java
@@ -42,7 +42,7 @@
    private Integer paramType;
    @ApiModelProperty(value = "标准参数对应数据名称")
    private Integer paramName;
    private String paramName;
    @ApiModelProperty(value = "基准值")
    private Float basisVal;
src/main/java/com/whyc/pojo/db_user/BaojigroupPower.java
@@ -55,5 +55,10 @@
    @TableField(exist = false)
    private String baoJiGroupName;
    @TableField(exist = false)
    private Integer teamFlag;
}
src/main/java/com/whyc/pojo/web_site/DeviceScrap.java
New file
@@ -0,0 +1,41 @@
package com.whyc.pojo.web_site;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
import java.util.Date;
@ToString
@Data
@TableName(schema = "web_site",value ="tb_device_scrap")
@ApiModel("设备器件报废库")
public class DeviceScrap {
    private Integer id;
    @ApiModelProperty("器件名称")
    private String name;
    @ApiModelProperty("器件型号")
    private String model;
    @ApiModelProperty("器件版本")
    private String version;
    @ApiModelProperty("数量")
    private Integer quantity;
    @ApiModelProperty("品牌")
    private String brand;
    @ApiModelProperty("类型")
    private String type;
    @ApiModelProperty("供应商")
    private String supplier;
    @ApiModelProperty("报废申请人id")
    private Integer applyUserId;
    @ApiModelProperty("报废申请人名称")
    private String applyUserName;
    @ApiModelProperty("报废时间")
    private Date createTime;
    @ApiModelProperty("关联报废流程主表id,用于追溯")
    private Integer mainId;
}
src/main/java/com/whyc/pojo/web_site/WorkflowMain.java
@@ -38,6 +38,8 @@
    /**创建人id*/
    @ApiModelProperty("创建人id")
    private Integer createUserId;
    @ApiModelProperty("创建人名称")
    private String createUserName;
    /**创建时间*/
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
    private Date createTime;
@@ -93,9 +95,6 @@
     */
    @ApiModelProperty("工单流类型")
    private Integer type;
    @TableField(exist = false)
    private String createUserName;
    @TableField(exist = false)
    private List<WorkflowLink> linkList;
src/main/java/com/whyc/service/AlmAnalysisParamService.java
@@ -1,15 +1,46 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.whyc.dto.AnalysisAlm.AnalysisChangeRes;
import com.whyc.dto.AnalysisAlm.ResAnalysis;
import com.whyc.dto.Real.RealDateDTO;
import com.whyc.dto.Response;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.mapper.AlmAnalysisParamMapper;
import com.whyc.pojo.db_data_history.BattRealdataId;
import com.whyc.pojo.db_data_history.PwrdevHistorydataId;
import com.whyc.pojo.db_param.AlmAnalysisParam;
import com.whyc.pojo.db_param.AlmSummaryParam;
import com.whyc.pojo.db_param.AppParam;
import com.whyc.util.ActionUtil;
import com.whyc.util.DateUtil;
import com.whyc.util.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static java.lang.Thread.sleep;
@Service
public class AlmAnalysisParamService {
    @Autowired(required = false)
    private AlmAnalysisParamMapper mapper;
    @Autowired
    private AppParamService appParamService;
    @Autowired
    private SubTablePageInfoService subTablePageInfoService;
    @Autowired
    private AlmSummaryParamService summaryParamService;
    //获取告警almId对应的分析配置属性值
    public AlmAnalysisParam getAnalysisParam(Integer almId) {
        QueryWrapper wrapper=new QueryWrapper();
@@ -18,4 +49,213 @@
        AlmAnalysisParam param= mapper.selectOne(wrapper);
        return param;
    }
    //预警分析管理-电源主属性和分析属性
    public Response getHisRealInAlm(Integer battgroupId,Integer powerId, String startTime, Integer almId) throws ParseException, InterruptedException {
        Map<String,Object> map=new HashMap<>();
        map.put("batt",null);
        map.put("pwr",null);
        //获取预警分析周期阈值
        AppParam appParam = appParamService.getAlarmAnalysisCycle();
        Integer cycleTime=appParam.getParamValue().intValue();
        Date cyscleDate=ActionUtil.getDateAdd(ThreadLocalUtil.parse(startTime,1),cycleTime*(-1));
        //获取cyscleDate到现在所有的历史实时数据
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(cyscleDate,new Date());
        //获取告警almId对应的分析配置属性值
        AlmAnalysisParam almAnalysisParam=getAnalysisParam(almId);
        if(almAnalysisParam==null||almAnalysisParam.getMainFieldType()==null){
            return new Response().set(1,false,"无对应分析属性");
        }else{
            //分组查看需要查询电源/电池实时表的哪些数据
            Map<String,  Map<String,Integer>> groupmap=groupPwrAndBatt(almAnalysisParam);
            Map<String,Integer> battMap=groupmap.get("batt");
            Map<String,Integer> pwrMap=groupmap.get("pwr");
            if(battgroupId!=null){
                if(battMap!=null&&battMap.size()>0){
                    List battHislist=getBattRealData(battgroupId,monthTimeList,battMap);
                    map.put("batt",battHislist);
                }
            }
            if(powerId!=null){
                if(pwrMap!=null&&pwrMap.size()>0){
                    List pwrHislist=getPwrRealData(powerId,monthTimeList,pwrMap);
                    map.put("pwr",pwrHislist);
                }
            }
            return new Response().setII(1,true, map,"预警分析管理-电源主属性和分析属性");
        }
    }
    //分组查看需要查询电源/电池实时表的哪些数据
    private  Map<String,  Map<String,Integer>> groupPwrAndBatt(AlmAnalysisParam almAnalysisParam) {
        Map<String,  Map<String,Integer>> map = new HashMap<>();
        Map<String,Integer> battMap=new HashMap<>();
        Map<String,Integer> pwrMap=new HashMap<>();
        if(almAnalysisParam.getMainFieldType()==1||almAnalysisParam.getMainFieldType()==2||almAnalysisParam.getMainFieldType()==3){
            if(almAnalysisParam.getMainField()!=null||almAnalysisParam.getMainField().length()>0){
                pwrMap.put(almAnalysisParam.getMainField(),almAnalysisParam.getMainFieldType());
            }
        }else{
            if(almAnalysisParam.getMainField()!=null||almAnalysisParam.getMainField().length()>0){
                battMap.put(almAnalysisParam.getMainField(),almAnalysisParam.getMainFieldType());
            }
        }
        if(almAnalysisParam.getMinorField1Type()==1||almAnalysisParam.getMinorField1Type()==2||almAnalysisParam.getMinorField1Type()==3){
            if(almAnalysisParam.getMinorField1()!=null&&almAnalysisParam.getMinorField1().length()>0){
                pwrMap.put(almAnalysisParam.getMinorField1(),almAnalysisParam.getMinorField1Type());
            }
        }else{
             if(almAnalysisParam.getMinorField1()!=null&&almAnalysisParam.getMinorField1().length()>0){
                 battMap.put(almAnalysisParam.getMinorField1(),almAnalysisParam.getMinorField1Type());
             }
        }
        if(almAnalysisParam.getMinorField2Type()==1||almAnalysisParam.getMinorField2Type()==2||almAnalysisParam.getMinorField2Type()==3){
            if(almAnalysisParam.getMinorField2()!=null&&almAnalysisParam.getMinorField2().length()>0){
                pwrMap.put(almAnalysisParam.getMinorField2(),almAnalysisParam.getMinorField2Type());
            }
        }else{
            if(almAnalysisParam.getMinorField2()!=null&&almAnalysisParam.getMinorField2().length()>0){
                battMap.put(almAnalysisParam.getMinorField2(),almAnalysisParam.getMinorField2Type());
            }
        }
        if(almAnalysisParam.getMinorField3Type()==1||almAnalysisParam.getMinorField3Type()==2||almAnalysisParam.getMinorField3Type()==3){
            if(almAnalysisParam.getMinorField3()!=null&&almAnalysisParam.getMinorField3().length()>0){
                pwrMap.put(almAnalysisParam.getMinorField3(),almAnalysisParam.getMinorField3Type());
            }
        }else{
            if(almAnalysisParam.getMinorField3()!=null&&almAnalysisParam.getMinorField3().length()>0){
                battMap.put(almAnalysisParam.getMinorField3(),almAnalysisParam.getMinorField3Type());
            }
        }
        if(almAnalysisParam.getMinorField4Type()==1||almAnalysisParam.getMinorField4Type()==2||almAnalysisParam.getMinorField4Type()==3){
            if(almAnalysisParam.getMinorField4()!=null&&almAnalysisParam.getMinorField4().length()>0){
                pwrMap.put(almAnalysisParam.getMinorField4(),almAnalysisParam.getMinorField4Type());
            }
        }else{
            if(almAnalysisParam.getMinorField4()!=null&&almAnalysisParam.getMinorField4().length()>0){
                battMap.put(almAnalysisParam.getMinorField4(),almAnalysisParam.getMinorField4Type());
            }
        }
        map.put("pwr",pwrMap);
        map.put("batt",battMap);
        return map;
    }
    //连接池获取电源历史实时数据
    public List getPwrRealData(Integer powerId,List<List<Date>> monthTimeList,Map<String,Integer> pwrMap) throws InterruptedException {
        List<ResAnalysis> dataList = new LinkedList<>();
        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
        CountDownLatch latch = new CountDownLatch(monthTimeList.size());
        for (int i = 0; i < monthTimeList.size(); i++) {
            int finalI = i;
            pool.execute(() -> {
                int finalII = finalI;
                PwrdevHistorydataId pwrHis = new PwrdevHistorydataId();
                pwrHis.setRecordDatetime(monthTimeList.get(finalII).get(0));
                pwrHis.setRecordDatetime1(monthTimeList.get(finalII).get(1));
                String table = powerId + "_" + ThreadLocalUtil.format(pwrHis.getRecordDatetime(),2);
                pwrHis.setTableName(table);//表名时间格式部分
                //判断表是否存在
                int tableNum = subTablePageInfoService.judgeTable_pwrhis(table);
                List<ResAnalysis> list = new ArrayList();
                if (tableNum > 0) {
                    list = subTablePageInfoService.getPwrHisRealInAlm(pwrHis,pwrMap);
                }
                dataList.addAll(list);
                latch.countDown();
            });
            sleep(200);
        }
        latch.await(10, TimeUnit.MINUTES);
        List dataListSorted = dataList.stream().sorted(Comparator.comparing(ResAnalysis::getRecordTime)).collect(Collectors.toList());
        return  dataListSorted;
    }
    //电池告警点击具体告警信息查看从告警开始时间到现在的历史实时数据
    public List getBattRealData(Integer battgroupId, List<List<Date>> monthTimeList,Map<String,Integer> battMap) throws ParseException, InterruptedException {
        List<ResAnalysis> dataList = new LinkedList<>();
        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
        CountDownLatch latch = new CountDownLatch(monthTimeList.size());
        for (int i = 0; i < monthTimeList.size(); i++) {
            int finalI = i;
            pool.execute(() -> {
                int finalII = finalI;
                BattRealdataId realdata = new BattRealdataId();
                realdata.setRecordTime(monthTimeList.get(finalII).get(0));
                realdata.setRecordTime1(monthTimeList.get(finalII).get(1));
                String table = battgroupId + "_" + ThreadLocalUtil.format(realdata.getRecordTime(),2);
                realdata.setTableName(table);//表名时间格式部分
                //判断表是否存在
                int tableNum = subTablePageInfoService.judgeTable_realdata(table);
                List<ResAnalysis> list = new ArrayList();
                if (tableNum > 0) {
                    list = subTablePageInfoService.getBattHisRealInAlm(realdata,battMap);
                }
                dataList.addAll(list);
                latch.countDown();
            });
            sleep(200);
        }
        latch.await(10, TimeUnit.MINUTES);
        List dataListSorted = dataList.stream().sorted(Comparator.comparing(ResAnalysis::getRecordTime)).collect(Collectors.toList());
        return dataListSorted;
    }
    //预警分析管理-切换时间间隔和副属性
    public Response getHisRealWithChage(AnalysisChangeRes res) throws ParseException, InterruptedException {
        Map<String,Object> map=new HashMap<>();
        map.put("batt",null);
        map.put("pwr",null);
        Integer cycleTime=0;
        //获取预警分析周期阈值
        AppParam appParam = appParamService.getAlarmAnalysisCycle();
        if(res.getIntervalTime()==null){
            cycleTime=appParam.getParamValue().intValue();
        }else{
            //将数据库中时间间隔修改
            appParamService.updateAlarmAnalysisCycle(res.getIntervalTime());
            cycleTime=res.getIntervalTime();
        }
        Date cyscleDate=ActionUtil.getDateAdd(ThreadLocalUtil.parse(res.getStartTime(),1),cycleTime*(-1));
        //获取cyscleDate到现在所有的历史实时数据
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(cyscleDate,new Date());
        //获取告警almId对应的分析配置属性值
        AlmAnalysisParam almAnalysisParam=new AlmAnalysisParam();
        //将属性拷贝至almAnalysisParam中
        copyProperties(almAnalysisParam,res);
        //分组查看需要查询电源/电池实时表的哪些数据
        Map<String,  Map<String,Integer>> groupmap=groupPwrAndBatt(almAnalysisParam);
        Map<String,Integer> battMap=groupmap.get("batt");
        Map<String,Integer> pwrMap=groupmap.get("pwr");
        if(res.getBattgroupId()!=null){
            if(battMap!=null&&battMap.size()>0){
                List battHislist=getBattRealData(res.getBattgroupId(),monthTimeList,battMap);
                map.put("batt",battHislist);
            }
        }
        if(res.getPowerId()!=null){
            if(pwrMap!=null&&pwrMap.size()>0){
                List pwrHislist=getPwrRealData(res.getPowerId(),monthTimeList,pwrMap);
                map.put("pwr",pwrHislist);
            }
        }
        return new Response().setII(1,true, map,"预警分析管理-切换时间间隔和副属性");
    }
    //将属性拷贝至almAnalysisParam中
    private void copyProperties(AlmAnalysisParam almAnalysisParam, AnalysisChangeRes res) {
        almAnalysisParam.setMainField(res.getDataName1());
        almAnalysisParam.setMainFieldType(res.getDataType1());
        almAnalysisParam.setMinorField1(res.getDataName2());
        almAnalysisParam.setMinorField1Type(res.getDataType2());
        almAnalysisParam.setMinorField2(res.getDataName3());
        almAnalysisParam.setMinorField2Type(res.getDataType3());
        almAnalysisParam.setMinorField3(res.getDataName4());
        almAnalysisParam.setMinorField3Type(res.getDataType4());
        almAnalysisParam.setMinorField4(res.getDataName5());
        almAnalysisParam.setMinorField4Type(res.getDataType5());
    }
    //预警分析管理-查询所有的属性对应关系
    public Response getAlmSummaryParam() {
        //总的属性配置
        List<AlmSummaryParam> summaryList=summaryParamService.getInfo();
        return new Response().setII(1,true,summaryList,"预警分析管理-查询所有的属性对应关系");
    }
}
src/main/java/com/whyc/service/AlmSummaryParamService.java
New file
@@ -0,0 +1,22 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.whyc.mapper.AlmAnalysisParamMapper;
import com.whyc.mapper.AlmSummaryParamMapper;
import com.whyc.pojo.db_param.AlmSummaryParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AlmSummaryParamService {
    @Autowired(required = false)
    private AlmSummaryParamMapper mapper;
    //总的属性配置
    public List<AlmSummaryParam> getInfo() {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.orderByAsc("num");
        return mapper.selectList(wrapper);
    }
}
src/main/java/com/whyc/service/AppParamService.java
@@ -62,4 +62,11 @@
        AppParam param=mapper.selectOne(wrapper);
        return param;
    }
    //将数据库中时间间隔修改
    public void updateAlarmAnalysisCycle(Integer intervalTime) {
        UpdateWrapper wrapper=new UpdateWrapper();
        wrapper.eq("param_name_psx","alm_analysis_already_time");
        wrapper.set("param_value",intervalTime);
        mapper.update(null,wrapper);
    }
}
src/main/java/com/whyc/service/BaojigroupService.java
@@ -118,15 +118,42 @@
        }
        return new Response().setII(1,baojiList!=null,baojiList,"查询包机组及包机组对应的用户和对应机房和锁");
    }
    //包机组添加机房和锁|移除机房和锁
    //包机组添加机房和电源|移除机房和电源
    //②)将电源添加到班组包机组中时需检查该电源是否在其他包机组中存在,若存在则提示当前电源已在其他班组(可提示存在的班组名称)中存在,若不存在则执行添加逻辑。
    @Transactional
    public void updateStationAndLockList(List<BaojigroupPower> BaojigroupPowerList, int operationFlag) {
    public Response updateStationAndLockList(List<BaojigroupPower> BaojigroupPowerList, int operationFlag) {
        if(operationFlag==1){
            bjPowermapper.insertBatchSomeColumn(BaojigroupPowerList);
            List<BaojigroupPower> addList=new ArrayList<>();
            List<BaojigroupPower> unaddList=new ArrayList<>();
            for (BaojigroupPower bjp:BaojigroupPowerList) {
                //检测否在其他包机组中存在,若存在则提示当前电源已在其他班组(可提示存在的班组名称)中存在
                int flag=checkPowerIsInBanzu(bjp.getPowerId());
                if(flag==1){
                    unaddList.add(bjp);
                    return new Response().setII(1,false,unaddList,"存在电源已添加过班组");
                }
            }
            bjPowermapper.insertBatchSomeColumn(addList);
            return new Response().set(1, true,"添加成功");
        }else{
            bjPowermapper.deleteStationAndLockList(BaojigroupPowerList);
            return new Response().set(1,true,"移除成功");
        }
    }
    //检测否在其他包机组中存在,若存在则提示当前电源已在其他班组(可提示存在的班组名称)中存在
    private int checkPowerIsInBanzu(Integer powerId) {
        int flag=0;
        List<BaojigroupPower> List=bjPowermapper.checkPower(powerId);
        if(List!=null&&List.size()>0){
            List<Integer> flagList=List.stream().map(BaojigroupPower::getTeamFlag).collect(Collectors.toList());
            if (flagList != null && flagList.contains(1)) {
                flag=1;
            }
        }
        return flag;
    }
    //包机组添加用户|移除用户
    @Transactional
    public void updateUserList(List<BaojigroupUsr> baoJiGroupUserList, int operationFlag) {
@@ -199,36 +226,26 @@
        List<BaojigroupUsr> list=bjUsrmapper.selectList(wrapper);
        return list.size()>0?1:0 ;
    }
    //设置包机组标记
    /*设置包机组标记
    * â‘ å°†åŒ…机组设置成班组时,判断当前包机组内的电源是否在其他设置成班组的包机组内,若在则提示当前电源已在其他班组中。否则执行设置班组逻辑。
    *
    * */
    public Response updateTeamFlag(Integer baoJiGroupId, Integer flag) {
        if(flag==1) {
            //查询要设置的包机组的站点
            QueryWrapper<BaojigroupPower> query = Wrappers.query();
            query.select("baoji_group_id", "station_id").eq("baoji_group_id", baoJiGroupId);
            List<BaojigroupPower> stationIdList = bjPowermapper.selectList(query);
            stationIdList = stationIdList.stream().distinct().collect(Collectors.toList());
            //查询其他的组,包含的所有站点
            List<BaojigroupPower> stationIdListWithDischargePlanFlag = bjPowermapper.getStationIdListWithDischargePlanFlag();
            stationIdListWithDischargePlanFlag = stationIdListWithDischargePlanFlag.stream().distinct().collect(Collectors.toList());
            List<BaojigroupPower> repeatedStationIdList = new LinkedList<>();
            for (int i = 0; i < stationIdList.size(); i++) {
                BaojigroupPower baojiGroupBattGroup = stationIdList.get(i);
                for (int j = 0; j < stationIdListWithDischargePlanFlag.size(); j++) {
                    BaojigroupPower baojiGroupBattGroupWithFlag = stationIdListWithDischargePlanFlag.get(j);
                    if (baojiGroupBattGroupWithFlag.getStationId().equals(baojiGroupBattGroup.getStationId())) {
                        repeatedStationIdList.add(baojiGroupBattGroupWithFlag);
                        break;
                    }
        if(flag==1){
            //1检测当前包机组下的电源是否在其他包机组中存在,则查看该包机组是否为班组
            List<BaojigroupPower> powerList=bjPowermapper.checkPwrIsInBanzu(baoJiGroupId);
            //2.若存在一条则返回,若不存在修改为班组
            if(powerList!=null&&powerList.size()>0){
                List<Integer> flagList=powerList.stream().map(BaojigroupPower::getTeamFlag).collect(Collectors.toList());
                if (flagList != null && flagList.contains(1)) {
                    return new Response().set(1,false,"当前包组下电源已存在班组中");
                }
            }
            //查询重复站点的信息
            if (repeatedStationIdList.size() > 0) {
                return new Response().setII(1, false, repeatedStationIdList, "设置失败");
            }
        }
        UpdateWrapper<Baojigroup> update = Wrappers.update();
        update.set("team_flag",flag).eq("baoji_group_id",baoJiGroupId);
        mapper.update((Baojigroup) ActionUtil.objeNull,update);
        UpdateWrapper wrapper = new UpdateWrapper();
        wrapper.set("team_flag",flag);
        wrapper.eq("baoji_group_id",baoJiGroupId);
        mapper.update(null,wrapper);
        return new Response().set(1,true,"设置完成");
    }
    //删除包机组下的电源
src/main/java/com/whyc/service/BattAlmparamService.java
@@ -27,8 +27,8 @@
    private BattInfService binfService;
    //获取电池告警参数
    public Response getBattAlmParam(ParamAlmDto dto) {
        //根据查询条件获取电池组集合
        BattInf binf=binfService.getBattgroupIdList(dto.getBattgroupId());
        //根据查询条件获取电池组
        BattInf binf=binfService.getBattgroupIdInf(dto.getBattgroupId());
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("battgroup_id",dto.getBattgroupId());
        if(dto.getAlmIdList()!=null){
src/main/java/com/whyc/service/BattInfService.java
@@ -490,8 +490,12 @@
        List<BattInf> list=mapper.getBattByUid(uid,provice,city,country,stationName);
        return new Response().setII(1,list.size()>0,list,"获取站点下的电池组(下拉)");
    }
    //根据查询条件获取电池组集合
    public  BattInf getBattgroupIdList(Integer battgroupId) {
        return mapper.getBattgroupIdList(battgroupId);
    //根据查询条件获取电池组
    public  BattInf getBattgroupIdInf(Integer battgroupId) {
        return mapper.getBattgroupIdInf(battgroupId);
    }
    //查询电源下所有的电池组id
    public List<Integer> getBattgroupIdList(Integer powerId) {
        return mapper.getBattgroupIdList(powerId);
    }
}
src/main/java/com/whyc/service/BattRealdataIdService.java
@@ -11,6 +11,8 @@
import com.whyc.pojo.db_data_history.BattRealdataId;
import com.whyc.pojo.db_param.AlmAnalysisParam;
import com.whyc.pojo.db_param.AppParam;
import com.whyc.pojo.db_ram_db.BattRtstate;
import com.whyc.pojo.db_station.BattInf;
import com.whyc.util.ActionUtil;
import com.whyc.util.DateUtil;
import com.whyc.util.ThreadLocalUtil;
@@ -43,11 +45,9 @@
    @Autowired
    private BattInfService binfService;
    @Autowired
    private AlmAnalysisParamService almAnalysisParamService;
    @Autowired(required = false)
    private BattRtstateService rtstateService;
    @Autowired
    private AppParamService appParamService;
    //获取电池组最近一季度的单体数据
@@ -190,6 +190,16 @@
    }
    //历史实时数据
    public Response getBattRealDataHis(Integer battgroupId, Integer granularity,String startTime,String endTime) throws ParseException, InterruptedException {
        Map<String,Object> map=new HashMap<>();
        //实时获取电池组信息
        BattRtstate battRtstate = rtstateService.getBattRealInfo(battgroupId);
        //获取电池组信息
        BattInf binf = binfService.getBinfByBattgroupId(battgroupId);
        map.put("标称容量",binf.getMoncapstd());
        map.put("蓄电池数量",binf.getMoncount());
        map.put("标称电压",binf.getMonvolstd());
        map.put("浮充电压",battRtstate.getGroupVol());
        List<RealDateDTO> dataList = new LinkedList<>();
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(ThreadLocalUtil.parse(startTime,1), ThreadLocalUtil.parse(endTime,1));
        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
@@ -224,44 +234,6 @@
        }
        latch.await(10, TimeUnit.MINUTES);
        List dataListSorted = dataList.stream().sorted(Comparator.comparing(RealDateDTO::getRecordTime)).collect(Collectors.toList());
        return new Response().set(1, dataListSorted);
    }
    //电池告警点击具体告警信息查看从告警开始时间到现在的历史实时数据
    public Response getBattHisRealInAlm(Integer battgroupId, String startTime, Integer almId) throws ParseException, InterruptedException {
        //获取告警almId对应的分析配置属性值
        AlmAnalysisParam almAnalysisParam= almAnalysisParamService.getAnalysisParam(almId);
        List<RealDateDTO> dataList = new LinkedList<>();
        //获取预警分析周期阈值
        AppParam appParam = appParamService.getAlarmAnalysisCycle();
        Integer cycleTime=appParam.getParamValue().intValue();
        Date cyscleDate=ActionUtil.getDateAdd(ThreadLocalUtil.parse(startTime,1),cycleTime*(-1));
        //获取cyscleDate到现在所有的历史实时数据
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(cyscleDate,new Date());
        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
        CountDownLatch latch = new CountDownLatch(monthTimeList.size());
        for (int i = 0; i < monthTimeList.size(); i++) {
            int finalI = i;
            pool.execute(() -> {
                int finalII = finalI;
                BattRealdataId realdata = new BattRealdataId();
                realdata.setRecordTime(monthTimeList.get(finalII).get(0));
                realdata.setRecordTime1(monthTimeList.get(finalII).get(1));
                String table = battgroupId + "_" + ThreadLocalUtil.format(realdata.getRecordTime(),2);
                realdata.setTableName(table);//表名时间格式部分
                //判断表是否存在
                int tableNum = subTablePageInfoService.judgeTable_realdata(table);
                List<RealDateDTO> list = new ArrayList();
                if (tableNum > 0) {
                    list = subTablePageInfoService.getBattHisRealInAlm(realdata);
                }
                dataList.addAll(list);
                latch.countDown();
            });
            sleep(200);
        }
        latch.await(10, TimeUnit.MINUTES);
        List dataListSorted = dataList.stream().sorted(Comparator.comparing(RealDateDTO::getRecordTime)).collect(Collectors.toList());
        return new Response().setIII(1,true, dataListSorted,almAnalysisParam,"电池告警点击具体告警信息查看从告警开始时间到现在的历史实时数据");
        return new Response().setIII(1, dataListSorted!=null,dataListSorted,map,"历史实时查询");
    }
}
src/main/java/com/whyc/service/BatttestdataIdService.java
@@ -1,8 +1,13 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.whyc.dto.Response;
import com.whyc.factory.BattCapFactory;
import com.whyc.mapper.BatttestdataInfMapper;
import com.whyc.mapper.CommonMapper;
import com.whyc.pojo.db_batt_testdata.BatttestdataId;
import com.whyc.pojo.db_batt_testdata.BatttestdataInf;
import com.whyc.pojo.db_station.BattInf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -16,6 +21,11 @@
    @Resource
    private CommonMapper commonMapper;
    @Autowired
    private BatttestdataInfService tinfService;
    @Autowired
    private BattInfService binfService;
    //找这次放电的指定的一笔数据
    public List<BatttestdataId> getLastDataByBattgroupId(Integer battgroupId, Integer testRecordCount, Integer recordNum) {
        List<BatttestdataId> list=subTablePageInfoService.getLastDataByBattgroupId(battgroupId,  testRecordCount, recordNum);
@@ -29,6 +39,18 @@
            return new Response().set(1,false,battgroupId+"电池组找不到第"+testRecordCount+"次放电记录");
        }
        List<BatttestdataId> list=subTablePageInfoService.getTinfDataWithTestRecordCount(tableName,testRecordCount,recordNum,granularity);
        //获取电池组信息
        BattInf binf = binfService.getBinfByBattgroupId(battgroupId);
        //获取这一次的放电信息
        BatttestdataInf tinf=tinfService.getTinfByTestRecordCount(battgroupId,testRecordCount);
        int hourRate = BattCapFactory.GetHourRate(tinf.getTestCap(), tinf.getTestCurr());
        for (BatttestdataId data:list) {
            Float realCap = (float) BattCapFactory.GetMonomerCap(tinf.getTestCap(), hourRate, tinf.getTestCap(), tinf.getMaxMonvol(),data.getMonVol() , tinf.getGroupVol(), BattCapFactory.CapType_Real);
            Float restcap = (float) BattCapFactory.GetMonomerCap(tinf.getTestCap(), hourRate, tinf.getTestCap(), tinf.getMaxMonvol(), tinf.getMinMonvol(), tinf.getGroupVol(), BattCapFactory.CapType_Rest);
            data.setRealCap(realCap);
            data.setRestCap(restcap);
            data.setPercentCap(String.format("%.5f",(realCap/binf.getMoncapstd()*100)));
        }
        return new Response().setII(1,list.size()>0,list,"获取历史测试记录数据详情");
    }
}
src/main/java/com/whyc/service/BatttestdataInfService.java
@@ -113,7 +113,8 @@
        wrapper.eq("battgroup_id", battgroupId);
        wrapper.eq("test_type", 3);
        wrapper.eq("test_starttype", 3);
        wrapper.last("  and test_timelong >= 7200 ORDER BY test_starttime DESC ");
        wrapper.eq("data_available", 1);//一次有效的记录
        wrapper.last(" ORDER BY test_starttime DESC ");
        wrapper.last("limit 1");
        BatttestdataInf tinf = mapper.selectOne(wrapper);
        tinf.setTestStoptypeReason(StopReasonEnum.getValue(tinf.getTestStoptype()));
@@ -132,8 +133,9 @@
        if(testEndTime!=null){
            wrapper.lt("test_starttime",testEndTime);
        }
        wrapper.last("  and test_timelong >= 7200 ORDER BY test_starttime DESC ");
        wrapper.last("limit 1");
        wrapper.eq("data_available", 1);//一次有效的记录
        wrapper.last("  ORDER BY test_starttime DESC ");
        wrapper.last(" limit  1 ");
        BatttestdataInf tinf = mapper.selectOne(wrapper);
        return tinf;
    }
@@ -581,13 +583,12 @@
            dto.setMoncapstd(binf.getMoncapstd());
            dto.setMonCount(binf.getMoncount());
            dto.setMonvolstd(binf.getMonvolstd());
            dto.setFloatchartVol(tinf.getFloatGroupVol());
            if(battRtstate!=null){
                Float restTime= BattCapFactory.getTheoryTime(battRtstate.getLoadCurr(), realCap, binf.getMoncapstd());
                dto.setRestTime(restTime);
                dto.setFloatchartVol(battRtstate.getGroupVol());
            }else{
                dto.setRestTime(0f);
                dto.setFloatchartVol(0f);
            }
            //找这次放电的指定一笔数据
            List<BatttestdataId> idDataList=battTestdataIdService.getLastDataByBattgroupId(tinf.getBattgroupId(),tinf.getTestRecordCount(),1);
@@ -996,4 +997,20 @@
    public int getHrDisCount(Integer userId, Date startTime, Date endTime) {
        return mapper.getHrDisCount(userId, startTime, endTime);
    }
    //获取这一次的放电信息
    public BatttestdataInf getTinfByTestRecordCount(Integer battgroupId, Integer testRecordCount) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("battgroup_id",battgroupId);
        wrapper.eq("test_record_count",testRecordCount);
        wrapper.last(" limit 1");
        return mapper.selectOne(wrapper);
    }
    //历史测试数据导出
    public BatttestdataInf exportTinfDataByTestRecordCount(Integer battgroupId, Integer testRecordCount) {
        QueryWrapper wrapper =new QueryWrapper();
        wrapper.eq("battgroup_id",battgroupId);
        wrapper.eq("test_record_count",testRecordCount);
        wrapper.last(" limit 1");
        return mapper.selectOne(wrapper);
    }
}
src/main/java/com/whyc/service/DeviceScrapService.java
New file
@@ -0,0 +1,19 @@
package com.whyc.service;
import com.whyc.mapper.DeviceScrapMapper;
import com.whyc.pojo.web_site.DeviceScrap;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class DeviceScrapService {
    @Resource
    private DeviceScrapMapper mapper;
    public void add(List<DeviceScrap> scrapList) {
        mapper.insertBatchSomeColumn(scrapList);
    }
}
src/main/java/com/whyc/service/DeviceSpareService.java
@@ -1,6 +1,7 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -11,6 +12,7 @@
import com.whyc.util.CommonUtil;
import com.whyc.util.ThreadLocalUtil;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -19,6 +21,7 @@
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -158,4 +161,81 @@
        List<DeviceSpare> deviceSpares = mapper.selectList(query);
        return new Response<List<DeviceSpare>>().set(1,deviceSpares);
    }
    public void addBatch(List<DeviceSpare> spareList) {
        mapper.insertBatchSomeColumn(spareList);
    }
    public void addOrUpdate(List<DeviceSpare> spareList) {
        //查询库中是否存在该设备,存在则增加数量.
        for (DeviceSpare spare : spareList) {
            QueryWrapper<DeviceSpare> query = Wrappers.query();
            query.eq("name",spare.getName());
            query.eq("model",spare.getModel());
            query.eq("version",spare.getVersion());
            query.eq("brand",spare.getBrand());
            query.eq("type",spare.getType());
            query.eq("supplier",spare.getSupplier());
            query.last(" limit 1");
            DeviceSpare spareInDB = mapper.selectOne(query);
            if(spareInDB != null){
                spareInDB.setQuantity(spareInDB.getQuantity()+spare.getQuantity());
                mapper.updateById(spareInDB);
            }else{
                //不存在则新增
                mapper.insert(spare);
            }
        }
    }
    public void outBound(List<DeviceSpare> spareList) {
        mapper.outBound(spareList);
    }
    public Response addByExcel(MultipartFile file) throws IOException {
        //将文件流转化为workbook
        Workbook book = WorkbookFactory.create(file.getInputStream());
        Sheet sheet = book.getSheetAt(0);
        //获取最后一行
        int lastRowIndex = sheet.getLastRowNum();
        List<DeviceSpare> spareList = new ArrayList<>();
        for (int i = 1; i <= lastRowIndex; i++) {
            DeviceSpare spare = new DeviceSpare();
            Row row = sheet.getRow(i);
            //对每行的前7列进行非空校验
            for (int j = 0; j < 7; j++) {
                Cell cell = row.getCell(j);
                //非图片列进行非空校验.不合规无法上传
                if (cell == null || cell.getCellType() == CellType.BLANK) {
                    return new Response().set(1, false, "第" + (i + 1) + "行第" + (j + 1) + "列数据为空");
                }
            }
            //获取列的值
            String name = row.getCell(0).getStringCellValue();
            String model = row.getCell(1).getStringCellValue();
            String version = row.getCell(2).getStringCellValue();
            int quantity = (int) row.getCell(3).getNumericCellValue();
            String brand = row.getCell(4).getStringCellValue();
            String type = row.getCell(5).getStringCellValue();
            String supplier = row.getCell(6).getStringCellValue();
            spare.setName(name);
            spare.setModel(model);
            spare.setVersion(version);
            spare.setQuantity(quantity);
            spare.setBrand(brand);
            spare.setType(type);
            spare.setSupplier(supplier);
            spareList.add(spare);
            //第七列为图片 TODO å¾…处理
            /*Cell cell = row.getCell(7);
            CellType cellType = cell.getCellType();
            System.out.println("-");*/
        }
        addBatch(spareList);
        return null;
    }
}
src/main/java/com/whyc/service/ExportService.java
@@ -1,17 +1,28 @@
package com.whyc.service;
import cn.afterturn.easypoi.entity.ImageEntity;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import com.whyc.dto.Real.ExportTinfDataDto;
import com.whyc.dto.Response;
import com.whyc.dto.Statistic.MonStic;
import com.whyc.dto.Statistic.SticMonRes;
import com.whyc.mapper.CommonMapper;
import com.whyc.pojo.db_batt_testdata.BatttestdataId;
import com.whyc.pojo.db_batt_testdata.BatttestdataInf;
import com.whyc.pojo.db_user.User;
import com.whyc.util.ActionUtil;
import com.whyc.util.ServletUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import sun.misc.BASE64Decoder;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -20,16 +31,19 @@
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
public class ExportService {
    @Autowired
    private BatttestdataInfService battTinfService;
    @Autowired
    private SubTablePageInfoService subTablePageInfoService;
    @Resource
    private CommonMapper commonMapper;
    //单节数量统计导出(1.2.14)
@@ -169,4 +183,50 @@
            rowNum = rowNum+rowNumAdd+5;
        }
    }
    //历史测试数据导出
    public void exportTinfDataByTestRecordCount(HttpServletRequest req, HttpServletResponse resp, ExportTinfDataDto dto) throws IOException {
       Map<String,Object> map=new HashMap<>();
        //历史测试数据导出
        BatttestdataInf tinf = battTinfService.exportTinfDataByTestRecordCount(dto.getBattgroupId(), dto.getTestRecordCount());
        String tableName ="db_batt_testdata.tb_batttestdata_"+dto.getBattgroupId();
        //获取具体的放电数据
        List<BatttestdataId> dataList= subTablePageInfoService.exportTinfDataByTestRecordCount(dto.getBattgroupId(),dto.getTestRecordCount(),tableName);
        map.put("dataList",dataList);
        BASE64Decoder decoder = new BASE64Decoder();
        if(!dto.getPicGroupVol().equals("")) {
            ImageEntity volImage = new ImageEntity();
            volImage.setData(decoder.decodeBuffer(dto.getPicGroupVol().substring(dto.getPicGroupVol().indexOf(",") + 1)));
            volImage.setColspan(6);
            volImage.setRowspan(17);
            map.put("picGroupVol",volImage);
        }
        if(!dto.getPicBattVol().equals("")) {
            ImageEntity volImage = new ImageEntity();
            volImage.setData(decoder.decodeBuffer(dto.getPicGroupVol().substring(dto.getPicBattVol().indexOf(",") + 1)));
            volImage.setColspan(6);
            volImage.setRowspan(17);
            map.put("picBattVol",volImage);
        }
        if(!dto.getPicGroupCurr().equals("")) {
            ImageEntity volImage = new ImageEntity();
            volImage.setData(decoder.decodeBuffer(dto.getPicGroupVol().substring(dto.getPicGroupCurr().indexOf(",") + 1)));
            volImage.setColspan(6);
            volImage.setRowspan(17);
            map.put("picGroupCurr",volImage);
        }
        //获取导出模板地址
        ClassPathResource classPathResource = new ClassPathResource("excel_templates/batt_mon_static_template.xlsx");
        String path = classPathResource.getPath();
        TemplateExportParams templateExportParams1 = new TemplateExportParams(path,true);
        Workbook wb = ExcelExportUtil.exportExcel(templateExportParams1, map);
        try {
            String fileName = "历史测试数据表.xls";
            resp.setContentType("application/vnd.ms-excel");
            resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
            resp.flushBuffer();
            wb.write(resp.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
src/main/java/com/whyc/service/PwrdevAlarmParamService.java
@@ -91,13 +91,13 @@
            }
        }
       // PageInfo<PwrdevAlarmParam> pageInfo=new PageInfo(list);
        return new Response().setIII(1,list!=null,list,pinf,"获取电源告警参数");
        return new Response().setIII(1,list!=null&&list.size()>0,list,pinf,"获取电源告警参数");
    }
    //获取电源告警参数(无参用于导出)
    public Response getPwrAlmParamToExport(Integer uid) {
        List<PwrdevAlarmParam> list = mapper.getPwrAlmParamToExport(uid);
        return new Response().setII(1,list!=null,list,"获取电源告警参数(无参用于导出)");
        return new Response().setII(1,list!=null&&list.size()>0,list,"获取电源告警参数(无参用于导出)");
    }
    //修改电源告警参数
    public Response setPwrAlmParam(List<PwrdevAlarmParam> almparamList) {
src/main/java/com/whyc/service/PwrdevAlarmService.java
@@ -10,26 +10,46 @@
import com.whyc.dto.AlarmDto;
import com.whyc.dto.Param.AlmAnalyseDto;
import com.whyc.dto.Real.AlmDto;
import com.whyc.dto.Real.RealDateDTO;
import com.whyc.dto.Response;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.mapper.PwrdevAlarmMapper;
import com.whyc.pojo.db_alarm.DevalarmData;
import com.whyc.pojo.db_data_history.BattRealdataId;
import com.whyc.pojo.db_data_history.PwrdevHistorydataId;
import com.whyc.pojo.db_param.AlmAnalysisParam;
import com.whyc.pojo.db_param.AppParam;
import com.whyc.pojo.db_pwrdev_alarm.PwrdevAlarm;
import com.whyc.pojo.db_pwrdev_alarm.PwrdevAlarmParam;
import com.whyc.pojo.web_site.AlarmInspection;
import com.whyc.util.ActionUtil;
import com.whyc.util.DateUtil;
import com.whyc.util.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static java.lang.Thread.sleep;
@Service
public class PwrdevAlarmService {
    @Autowired(required = false)
    private PwrdevAlarmMapper mapper;
    @Autowired
    private AppParamService appParamService;
    @Autowired
    private AlmAnalysisParamService almAnalysisParamService;
    @Autowired
    private SubTablePageInfoService subTablePageInfoService;
    @Autowired
    private BattInfService battInfService;
    //获取电源实时告警信息
    public Response getPwrAlmReal(AlmDto almDto) {
        PageHelper.startPage(almDto.getPageNum(),almDto.getPageSize());
@@ -91,7 +111,14 @@
    public Response getPwrtAlmAnalyse(AlmAnalyseDto dto) {
        PageHelper .startPage(dto.getPageNum(),dto.getPageSize());
        List<PwrdevAlarm> list=mapper.getPwrtAlmAnalyse(dto);
        for (PwrdevAlarm pwrAlm:list) {
            pwrAlm.setAlmName(PowerAlarmEnum.getValue(pwrAlm.getAlmId()));
            //查询电源下所有的电池组id
            List<Integer> battgroupIdList = battInfService.getBattgroupIdList(pwrAlm.getPowerId());
            pwrAlm.setBattgroupIdList(battgroupIdList);
        }
        PageInfo pageInfo=new PageInfo(list);
        return new Response().setII(1,list!=null,pageInfo,"电源告警分析");
    }
}
src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
@@ -27,6 +27,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class PwrdevHistorydataIdService {
@@ -99,12 +100,9 @@
        List<String> datelist=ActionUtil.getDateListBetweenDates(apptimeParam.getParamValue(), new Date());
        //获取电源优良判断的标准参数值
        List<PowerPropertyParam> paramList=propertyParamService.getPwrStandardParam(powerType);
        /*Map<String,Float> paramValues=new HashMap<>();
        for (PowerPropertyParam param : paramList) {
            paramValues.put(param.getPropertyName()+"_upper", param.getBasisVal()*param.getAlarmLimithUpper());
            paramValues.put(param.getPropertyName()+"_lower", param.getBasisVal()*param.getAlarmLimitlLower());
            map.put(param.getPropertyName(), 0);
        }*/
        List<String> propertyNameList = paramList.stream()
                .map(param -> param.getPropertyName())
                .collect(Collectors.toList());
        for (int i=0;i<datelist.size();i++) {
            String date=datelist.get(i);
            String tableName ="db_data_history.tb_pwrdev_historydata_"+powerId+"_"+date;
@@ -113,29 +111,9 @@
            if(existTableName == null){
                continue;
            }
            List<PwrdevHistorydataId> datalist=subTablePageInfoService.getPwrQuarter7(tableName);
            List<PwrdevHistorydataId> datalist=subTablePageInfoService.getPwrQuarter7(tableName,propertyNameList);
            // éåކ dataList å¹¶æ¯”较属性值
            for (PwrdevHistorydataId data : datalist) {
                /*if(paramValues.get("acin1_vola_upper")!=null){
                    if ((data.getAcin1Vola() > paramValues.get("acin1_vola_upper"))||(data.getAcin1Vola() < paramValues.get("acin1_vola_lower"))) {
                        map.put("acin1_vola", map.get("acin1_vola") + 1);
                    }
                }
                if(paramValues.get("acout_curra_upper")!=null) {
                    if ((data.getAcoutCurra() > paramValues.get("acout_curra_upper")) || (data.getAcoutCurra() < paramValues.get("acout_curra_lower"))) {
                        map.put("acout_curra", map.get("acout_curra") + 1);
                    }
                }
                if(paramValues.get("dcout_vol_upper")!=null) {
                    if ((data.getDcoutVol() > paramValues.get("dcout_vol_upper")) || (data.getDcoutVol() < paramValues.get("dcout_vo_lower"))) {
                        map.put("dcout_vol", map.get("dcout_vol") + 1);
                    }
                }
                if(paramValues.get("dcout_curr_upper")!=null) {
                    if ((data.getDcoutCurr() > paramValues.get("dcout_curr_upper")) || (data.getDcoutCurr() < paramValues.get("dcout_curr_lower"))) {
                        map.put("dcout_curr", map.get("dcout_curr") + 1);
                    }
                }*/
                for (int j=0;j<paramList.size();j++) {
                    PowerPropertyParam param = paramList.get(j);
                    String propertyName = ActionUtil.toCamelCase(param.getPropertyName());
src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -3,6 +3,7 @@
import com.whyc.dto.AlmHis.BattAlmPar;
import com.whyc.dto.AlmHis.DevAlmPar;
import com.whyc.dto.AlmHis.PwrAlmPar;
import com.whyc.dto.AnalysisAlm.ResAnalysis;
import com.whyc.dto.Real.*;
import com.whyc.dto.Statistic.QuarterPwr7Res;
import com.whyc.mapper.CallBack;
@@ -12,13 +13,16 @@
import com.whyc.pojo.db_data_history.BattRealdataId;
import com.whyc.pojo.db_data_history.PwrdevHistorydataId;
import com.whyc.pojo.db_pwrdev_alarm.PwrdevAlarmHistory;
import com.whyc.util.ActionUtil;
import com.whyc.util.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class SubTablePageInfoService {
@@ -717,7 +721,7 @@
        });
        return list;
    }
    //判断历史实时表是否存在
    //判断电池组历史实时表是否存在
    public int judgeTable_realdata( String table){
        String sql="select count(*) as tableNum " +
                "        from INFORMATION_SCHEMA.TABLES " +
@@ -742,7 +746,31 @@
        }
        return tableNum;
    }
    //判断电源历史实时表是否存在
    public int judgeTable_pwrhis( String table){
        String sql="select count(*) as tableNum " +
                "        from INFORMATION_SCHEMA.TABLES " +
                "        where TABLE_SCHEMA = 'db_data_history' " +
                "          and TABLE_NAME = 'tb_pwrdev_historydata_"+table+"'";
        List list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
            @Override
            public List getResults(ResultSet rs) throws SQLException {
                LinkedList<Object> temp = new LinkedList<>();
                try {
                    while (rs.next())
                        temp.add(rs.getInt("tableNum"));
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                return temp;
            }
        });
        int tableNum =0;
        if(list!=null){
            tableNum= (int) list.get(0);
        }
        return tableNum;
    }
    //电池数据历史实时处理
    public List<RealDateDTO> getBattRealDataHis(BattRealdataId realdata, int granularity,Integer maxRecordNum,Integer minRecordNum) {
        String sql=" select record_time, group_vol, online_vol,group_curr, mon_vol, mon_tmp, mon_res, mon_num,record_num  " +
@@ -773,27 +801,95 @@
        return list;
    }
    //电池数据历史实时处理(预警分析)
    public List<RealDateDTO> getBattHisRealInAlm(BattRealdataId realdata) {
        String sql=" select record_time, group_vol, online_vol,group_curr, mon_vol, mon_tmp, mon_res, mon_num,record_num  " +
    public List<ResAnalysis> getBattHisRealInAlm(BattRealdataId realdata, Map<String,Integer> battMap) {
        String result = String.join(",", battMap.keySet());
        String sql=" select record_time,"+result+" " +
                "               from db_data_history.tb_batt_realdata_"+realdata.getTableName()+" " +
                "               where record_time >= '"+ThreadLocalUtil.format(realdata.getRecordTime(),1)+"' " +
                "               and record_time <= '"+ThreadLocalUtil.format(realdata.getRecordTime1(),1)+"' " +
                "               order by record_time asc,mon_num asc";
        List<RealDateDTO> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
        List<ResAnalysis> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
            @Override
            public List getResults(ResultSet rs) throws SQLException {
                List<RealDateDTO> list=new ArrayList<>();
                List<ResAnalysis> list=new ArrayList<>();
                while (rs.next()){
                    RealDateDTO ph=new RealDateDTO();
                    ResAnalysis ph=new ResAnalysis();
                    ph.setRecordTime(rs.getTimestamp("record_time"));
                    ph.setGroupVol(rs.getFloat("group_vol"));
                    ph.setOnlineVol(rs.getFloat("online_vol"));
                    ph.setGroupCurr(rs.getFloat("group_curr"));
                    ph.setMonVol(rs.getFloat("mon_vol"));
                    ph.setMonTmp(rs.getFloat("mon_tmp"));
                    ph.setMonRes(rs.getFloat("mon_res"));
                    ph.setMonNum(rs.getInt("mon_num"));
                    ph.setRecordNum(rs.getInt("record_num"));
                    int i=1;
                    for (String key : battMap.keySet()) {
                        Integer dataType = battMap.get(key);
                        try {
                            String propertyType = "dataType"+(i);
                            Field fieldType = ResAnalysis.class.getDeclaredField(propertyType);
                            fieldType.setAccessible(true);
                            fieldType.set(ph,dataType);
                            Float value = rs.getFloat(key);
                            String propertyName = "dataName"+(i);
                            Field fieldName = ResAnalysis.class.getDeclaredField(propertyName);
                            fieldName.setAccessible(true); // å¦‚果字段是私有的,需要设置为可访问
                            fieldName.set(ph,key);
                            String propertyValue = "dataValue"+(i);
                            Field fieldValue = ResAnalysis.class.getDeclaredField(propertyValue);
                            fieldValue.setAccessible(true);
                            fieldValue.set(ph,value);
                        } catch (NoSuchFieldException e) {
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }
                        i++;
                    }
                    list.add(ph);
                }
                return list;
            }
        });
        return list;
    }
    //电源数据历史实时处理(预警分析)
    public List<ResAnalysis> getPwrHisRealInAlm(PwrdevHistorydataId pwrHis, Map<String,Integer> pwrMap) {
        String result = String.join(",", pwrMap.keySet());
        String sql=" select record_datetime,"+result+"  " +
                "               from db_data_history.tb_pwrdev_historydata_"+pwrHis.getTableName()+" " +
                "               where record_datetime >= '"+ThreadLocalUtil.format(pwrHis.getRecordDatetime(),1)+"' " +
                "               and record_datetime <= '"+ThreadLocalUtil.format(pwrHis.getRecordDatetime1(),1)+"' " +
                "               order by record_datetime asc ";
        List<ResAnalysis> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
            @Override
            public List getResults(ResultSet rs) throws SQLException {
                List<ResAnalysis> list=new ArrayList<>();
                while (rs.next()){
                    ResAnalysis ph=new ResAnalysis();
                    ph.setRecordTime(rs.getTimestamp("record_datetime"));
                    int i=1;
                    for (String key : pwrMap.keySet()) {
                        Integer dataType = pwrMap.get(key);
                        try {
                            String propertyType = "dataType"+(i);
                            Field fieldType = ResAnalysis.class.getDeclaredField(propertyType);
                            fieldType.setAccessible(true);
                            fieldType.set(ph,dataType);
                            Float value = rs.getFloat(key);
                            String propertyName = "dataName"+(i);
                            Field fieldName = ResAnalysis.class.getDeclaredField(propertyName);
                            fieldName.setAccessible(true); // å¦‚果字段是私有的,需要设置为可访问
                            fieldName.set(ph,key);
                            String propertyValue = "dataValue"+(i);
                            Field fieldValue = ResAnalysis.class.getDeclaredField(propertyValue);
                            fieldValue.setAccessible(true);
                            fieldValue.set(ph,value);
                        } catch (NoSuchFieldException e) {
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }
                        i++;
                    }
                    list.add(ph);
                }
                return list;
@@ -822,8 +918,9 @@
         return list;
    }
    //1.2.7优良电源统计上一季度的电源某一属性和参数阈值超过的次数
    public List<PwrdevHistorydataId> getPwrQuarter7(String tableName) {
        String sql=" select  distinct * " +
    public List<PwrdevHistorydataId> getPwrQuarter7(String tableName,List<String> propertyNameList) {
        String result = propertyNameList.stream().collect(Collectors.joining(","));
        String sql=" select  distinct record_datetime,"+result+" " +
                " from "+tableName+" " ;
        sql+=" order by record_datetime asc";
        List<PwrdevHistorydataId> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
@@ -833,91 +930,55 @@
                while (rs.next()){
                    PwrdevHistorydataId data=new PwrdevHistorydataId();
                    data.setRecordDatetime(rs.getTimestamp("record_datetime"));
                    data.setAcin1Vola(rs.getFloat("acin1_vola"));
                    data.setAcin1Volb(rs.getFloat("acin1_volb"));
                    data.setAcin1Volc(rs.getFloat("acin1_volc"));
                    data.setAcin2Vola(rs.getFloat("acin2_vola"));
                    data.setAcin2Volb(rs.getFloat("acin2_volb"));
                    data.setAcin2Volc(rs.getFloat("acin2_volc"));
                    data.setAcoutVola(rs.getFloat("acout_vola"));
                    data.setAcoutVolb(rs.getFloat("acout_volb"));
                    data.setAcoutVolc(rs.getFloat("acout_volc"));
                    data.setAcoutCurra(rs.getFloat("acout_curra"));
                    data.setAcoutCurrb(rs.getFloat("acout_currb"));
                    data.setAcoutCurrc(rs.getFloat("acout_currc"));
                    data.setDcoutVol(rs.getFloat("dcout_vol"));
                    data.setDcoutCurr(rs.getFloat("dcout_curr"));
                    data.setBattgroup1Vol(rs.getFloat("battgroup1_vol"));
                    data.setBattgroup1Curr(rs.getFloat("battgroup1_curr"));
                    data.setBattgroup2Vol(rs.getFloat("battgroup2_vol"));
                    data.setBattgroup2Curr(rs.getFloat("battgroup2_curr"));
                    data.setTemprature(rs.getFloat("temprature"));
                    data.setMOutputvol(rs.getFloat("m_outputvol"));
                    data.setM1Outcurr(rs.getFloat("m1_outcurr"));
                    data.setM2Outcurr(rs.getFloat("m2_outcurr"));
                    data.setM3Outcurr(rs.getFloat("m3_outcurr"));
                    data.setM4Outcurr(rs.getFloat("m4_outcurr"));
                    data.setM5Outcurr(rs.getFloat("m5_outcurr"));
                    data.setM6Outcurr(rs.getFloat("m6_outcurr"));
                    data.setM7Outcurr(rs.getFloat("m7_outcurr"));
                    data.setM8Outcurr(rs.getFloat("m8_outcurr"));
                    data.setM9Outcurr(rs.getFloat("m9_outcurr"));
                    data.setM10Outcurr(rs.getFloat("m10_outcurr"));
                    data.setM11Outcurr(rs.getFloat("m11_outcurr"));
                    data.setM12Outcurr(rs.getFloat("m12_outcurr"));
                    data.setM13Outcurr(rs.getFloat("m13_outcurr"));
                    data.setM14Outcurr(rs.getFloat("m14_outcurr"));
                    data.setM15Outcurr(rs.getFloat("m15_outcurr"));
                    data.setM16Outcurr(rs.getFloat("m16_outcurr"));
                    data.setAcin1Curra(rs.getFloat("acin1_curra"));
                    data.setAcin1Currb(rs.getFloat("acin1_currb"));
                    data.setAcin1Currc(rs.getFloat("acin1_currc"));
                    data.setLoaderCurr(rs.getFloat("loader_curr"));
                    data.setBattgroup1Ah(rs.getFloat("battgroup1_ah"));
                    data.setBattgroup1Temp(rs.getFloat("battgroup1_temp"));
                    data.setBattgroup2Ah(rs.getFloat("battgroup2_ah"));
                    data.setBattgroup2Temp(rs.getFloat("battgroup2_temp"));
                    data.setAcdcmTemp(rs.getFloat("acdcm_temp"));
                    data.setM1OutVol(rs.getFloat("m1_out_vol"));
                    data.setM2OutVol(rs.getFloat("m2_out_vol"));
                    data.setM3OutVol(rs.getFloat("m3_out_vol"));
                    data.setM4OutVol(rs.getFloat("m4_out_vol"));
                    data.setM5OutVol(rs.getFloat("m5_out_vol"));
                    data.setM6OutVol(rs.getFloat("m6_out_vol"));
                    data.setM7OutVol(rs.getFloat("m7_out_vol"));
                    data.setM8OutVol(rs.getFloat("m8_out_vol"));
                    data.setM9OutVol(rs.getFloat("m9_out_vol"));
                    data.setM10OutVol(rs.getFloat("m10_out_vol"));
                    data.setM11OutVol(rs.getFloat("m11_out_vol"));
                    data.setM12OutVol(rs.getFloat("m12_out_vol"));
                    data.setM13OutVol(rs.getFloat("m13_out_vol"));
                    data.setM14OutVol(rs.getFloat("m14_out_vol"));
                    data.setM15OutVol(rs.getFloat("m15_out_vol"));
                    data.setM16OutVol(rs.getFloat("m16_out_vol"));
                    data.setUseracin1Vola(rs.getFloat("useracin1_vola"));
                    data.setUseracin1Volb(rs.getFloat("useracin1_volb"));
                    data.setUseracin1Volc(rs.getFloat("useracin1_volc"));
                    data.setUseracin1Curra(rs.getFloat("useracin1_curra"));
                    data.setUseracin1Currb(rs.getFloat("useracin1_currb"));
                    data.setUseracin1Currc(rs.getFloat("useracin1_currc"));
                    data.setUseracin1Freq(rs.getFloat("useracin1_freq"));
                    data.setUseracin2Vola(rs.getFloat("useracin2_vola"));
                    data.setUseracin2Volb(rs.getFloat("useracin2_volb"));
                    data.setUseracin2Volc(rs.getFloat("useracin2_volc"));
                    data.setUseracin2Curra(rs.getFloat("useracin2_curra"));
                    data.setUseracin2Currb(rs.getFloat("useracin2_currb"));
                    data.setUseracin2Currc(rs.getFloat("useracin2_currc"));
                    data.setUseracin2Freq(rs.getFloat("useracin2_freq"));
                    data.setMTemper1(rs.getFloat("m_temper1"));
                    data.setMTemper2(rs.getFloat("m_temper2"));
                    data.setMTemper3(rs.getFloat("m_temper3"));
                    data.setMHumidity1(rs.getFloat("m_humidity1"));
                    data.setMHumidity2(rs.getFloat("m_humidity2"));
                    data.setMHumidity3(rs.getFloat("m_humidity3"));
                    for (int i=0;i<propertyNameList.size();i++){
                        try {
                            Float value = rs.getFloat(propertyNameList.get(i));
                            String propertyName = ActionUtil.toCamelCase(propertyNameList.get(i));
                            Field fieldValue = PwrdevHistorydataId.class.getDeclaredField(propertyName);
                            fieldValue.setAccessible(true);
                            fieldValue.set(data,value);
                        } catch (NoSuchFieldException e) {
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }
                    }
                    list.add(data);
                }
                return list;
            }
        });
        return list;
    }
    //获取具体的放电数据
    public List<BatttestdataId> exportTinfDataByTestRecordCount(Integer battgroupId, Integer testRecordCount, String tableName) {
        String sql="select distinct * from "+tableName+" "+
                " where test_record_count="+testRecordCount;
        sql+=" order by record_time asc";
        List<BatttestdataId> list = sqlExecuteService.executeQuery_call(sql, new CallBack() {
            @Override
            public List getResults(ResultSet rs) throws SQLException {
                List<BatttestdataId> list=new ArrayList<>();
                while (rs.next()){
                    BatttestdataId data=new BatttestdataId();
                    data.setNum(rs.getInt("num"));
                    data.setBattgroupId(rs.getInt("battgroup_id"));
                    data.setTestRecordCount(rs.getInt("test_record_count"));
                    data.setTestType(rs.getInt("test_type"));
                    data.setRecordNum(rs.getInt("record_num"));
                    data.setDataNew(rs.getInt("data_new"));
                    data.setDataAvailable(rs.getInt("data_available"));
                    data.setTestTimelong(rs.getInt("test_timelong"));
                    data.setTestCurr(rs.getFloat("test_curr"));
                    data.setTestCap(rs.getFloat("test_cap"));
                    data.setMonNum(rs.getInt("mon_num"));
                    data.setMonVol(rs.getFloat("mon_vol"));
                    data.setMonTmp(rs.getFloat("mon_tmp"));
                    data.setMonRes(rs.getFloat("mon_res"));
                    data.setTestStarttime(rs.getTimestamp("test_starttime"));
                    data.setRecordTime(rs.getTimestamp("record_time"));
                    data.setGroupVol(rs.getFloat("group_vol"));
                    data.setOnlineVol(rs.getFloat("online_vol"));
                    list.add(data);
                }
                return list;
src/main/java/com/whyc/service/WorkflowLinkService.java
@@ -6,10 +6,9 @@
import com.whyc.dto.Response;
import com.whyc.mapper.*;
import com.whyc.pojo.db_user.User;
import com.whyc.pojo.web_site.WorkflowDevice;
import com.whyc.pojo.web_site.WorkflowLink;
import com.whyc.pojo.web_site.WorkflowMain;
import com.whyc.pojo.web_site.*;
import com.whyc.util.CommonUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -31,6 +30,11 @@
    @Autowired
    private WorkflowDeviceService deviceService;
    @Autowired
    private DeviceSpareService deviceSpareService;
    @Autowired
    private DeviceScrapService deviceScrapService;
    public void addBatch(List<WorkflowLink> links) {
@@ -77,6 +81,39 @@
                    mainInDB.setEndTime(now);
                    mainInDB.setEndReason(link.getDealReason());
                    mainService.updateById(mainInDB);
                    List<WorkflowDevice> deviceListInDB = deviceService.getByMainId(mainInDB.getId());
                    //入库
                    if(mainInDB.getType() == 2){
                        List<DeviceSpare> spareList = new ArrayList<>();
                        deviceListInDB.forEach(device -> {
                            DeviceSpare spare = new DeviceSpare();
                            /*spare.setName(device.getName());
                            spare.setModel(device.getModel());
                            spare.setVersion(device.getVersion());
                            spare.setQuantity(device.getQuantity());
                            spare.setBrand(device.getBrand());
                            spare.setType(device.getType());
                            spare.setSupplier(device.getSupplier());*/
                            BeanUtils.copyProperties(device,spare);
                            spareList.add(spare);
                        });
                        deviceSpareService.addOrUpdate(spareList);
                    }else{ //进入报废库
                        List<DeviceScrap> scrapList = new ArrayList<>();
                        deviceListInDB.forEach(device -> {
                            DeviceScrap deviceScrap = new DeviceScrap();
                            BeanUtils.copyProperties(device,deviceScrap);
                            deviceScrap.setApplyUserId(mainInDB.getCreateUserId());
                            deviceScrap.setApplyUserName(mainInDB.getCreateUserName());
                            deviceScrap.setCreateTime(now);
                            deviceScrap.setMainId(mainInDB.getId());
                            scrapList.add(deviceScrap);
                        });
                        deviceScrapService.add(scrapList);
                    }
                }else if(link.getStatus() == WorkflowEnum.LINK_STATUS_REJECT.getValue().intValue()){
                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_END_REJECT.getValue());
                    mainInDB.setEndReason(link.getDealRejectReason());
@@ -112,19 +149,26 @@
                    link.setDealAndClose(1);
                }
            }break;
            case 4:{ //TODO å‡ºåº“申请
            case 4:{ // å‡ºåº“申请
                if(link.getStatus() == WorkflowEnum.LINK_STATUS_PASS.getValue().intValue()){
                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_WAIT_FOR_DEALING.getValue());
                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_END_PASS.getValue());
                    mainInDB.setEndTime(now);
                    mainInDB.setEndReason(link.getDealReason());
                    mainService.updateById(mainInDB);
                    //获取出库申请单设备
                    List<WorkflowDevice> deviceListInDB = deviceService.getByMainId(mainInDB.getId());
                    List<DeviceSpare> spareList = new ArrayList<>();
                    deviceListInDB.forEach(device -> {
                        DeviceSpare spare = new DeviceSpare();
                        BeanUtils.copyProperties(device,spare);
                        spareList.add(spare);
                    });
                    //更新库存
                    deviceSpareService.outBound(spareList);
                }else if(link.getStatus() == WorkflowEnum.LINK_STATUS_REJECT.getValue().intValue()){
                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_END_REJECT.getValue());
                    mainInDB.setEndReason(link.getDealRejectReason());
                    mainInDB.setEndTime(now);
                    //检查是否有关联工单.如果有关联工单,关联工单状态重置为完结待处理,完成时间重置为空
                    if(mainInDB.getRelatedId() != null){
                        Integer relatedId = mainInDB.getRelatedId();
                        //mainService.resetRepairStatus(relatedId,mainInDB.getQuantity());
                    }
                    mainService.updateById(mainInDB);
                    link.setDealAndClose(1);
                }
src/main/java/com/whyc/service/WorkflowMainService.java
@@ -289,6 +289,7 @@
        main.setOrderId(orderId);
        main.setTitle(title);
        main.setCreateUserId(user.getId());
        main.setCreateUserName(user.getName());
        main.setCreateTime(now);
        main.setBeginTime(now);
        main.setStatus(mainStatus);
src/main/resources/excel_templates/batt_mon_static_template.xlsx
Binary files differ
src/main/resources/mapper/BaojigroupPowerMapper.xml
@@ -69,4 +69,19 @@
        )
        order by g.baoji_group_name
    </select>
    <select id="checkPwrIsInBanzu" resultType="com.whyc.pojo.db_user.BaojigroupPower">
        select tb_baojigroup_power.*,tb_baojigroup.baoji_group_name,tb_baojigroup.team_flag
        from db_user.tb_baojigroup_power,db_user.tb_baojigroup
        where tb_baojigroup_power.baoji_group_id=tb_baojigroup.baoji_group_id
        and tb_baojigroup_power.power_id in
              (SELECT power_id from tb_baojigroup_power where baoji_group_id=#{baoJiGroupId}
              )
         and tb_baojigroup_power.baoji_group_id!=#{baoJiGroupId}
    </select>
    <select id="checkPower" resultType="com.whyc.pojo.db_user.BaojigroupPower">
        select tb_baojigroup_power.*,tb_baojigroup.baoji_group_name,tb_baojigroup.team_flag
        from db_user.tb_baojigroup_power,db_user.tb_baojigroup
        where tb_baojigroup_power.baoji_group_id=tb_baojigroup.baoji_group_id
        and tb_baojigroup_power.power_id=#{powerId}
    </select>
</mapper>
src/main/resources/mapper/BattInfMapper.xml
@@ -466,7 +466,7 @@
            </if>
        </where>
    </select>
    <select id="getBattgroupIdList" resultType="com.whyc.pojo.db_station.BattInf">
    <select id="getBattgroupIdInf" resultType="com.whyc.pojo.db_station.BattInf">
        select distinct tb_batt_inf.*
        ,tb_station_inf.station_type,tb_station_inf.station_name,tb_station_inf.provice,tb_station_inf.city,tb_station_inf.country,tb_station_inf.full_name
        from db_station.tb_batt_inf,db_station.tb_station_inf
@@ -476,4 +476,12 @@
        </where>
        limit 1
    </select>
    <select id="getBattgroupIdList" resultType="java.lang.Integer">
        select distinct tb_batt_inf.battgroup_id
        from db_station.tb_batt_inf
        <where>
             tb_batt_inf.power_id=#{powerId}
        </where>
        order by battgroup_num asc
    </select>
</mapper>
src/main/resources/mapper/BattalarmDataMapper.xml
@@ -78,7 +78,8 @@
        )
    </select>
    <select id="getBattAlmAnalyse" resultType="com.whyc.pojo.db_alarm.BattalarmData">
        select tb_battalarm_data.*,tb_batt_inf.battgroup_name,tb_station_inf.station_name,tb_station_inf.provice,tb_station_inf.city,tb_station_inf.country,tb_station_inf.full_name
        select tb_battalarm_data.*,tb_batt_inf.battgroup_name,tb_batt_inf.power_id,tb_batt_inf.station_id
             ,tb_station_inf.station_name,tb_station_inf.provice,tb_station_inf.city,tb_station_inf.country,tb_station_inf.full_name
        from db_alarm.tb_battalarm_data,db_station.tb_batt_inf,db_station.tb_station_inf
        <where>
            tb_battalarm_data.battgroup_id=tb_batt_inf.battgroup_id
src/main/resources/mapper/BatttestdataInfMapper.xml
@@ -44,8 +44,9 @@
    <select id="getNoDischargeData" resultType="com.whyc.pojo.db_batt_testdata.BatttestdataInf">
        select * from db_batt_testdata.tb_batttestdata_inf
        <where>
            battgroup_id=#{battgroupId} and test_type=3
            and (test_starttype!=3 or test_timelong &lt;7200)
            battgroup_id=#{battgroupId}
            and test_type=3
            and  data_available!=1
            <if test="testStartTime!=null">
                and tb_batttestdata_inf.test_starttime>=#{stic.testStartTime}
            </if>
src/main/resources/mapper/DeviceSpareMapper.xml
New file
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.whyc.mapper.DeviceSpareMapper" >
    <update id="outBound">
        <foreach collection="list" item="item" separator=";">
            update web_site.tb_device_spare set quantity = quantity - #{item.quantity}
            where name = #{item.name}
            and model = #{item.model}
            and version = #{item.version}
            and brand = #{item.brand}
            and type = #{item.type}
            and supplier = #{item.supplier}
        </foreach>
    </update>
</mapper>
src/main/resources/mapper/StationInfMapper.xml
@@ -7,11 +7,12 @@
    </select>
    <resultMap id="name1List" type="provice">
        <result property="provice" column="provice" ></result>
        <collection property="cityList" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.City" column="{provice=provice}" select="selectCity">
        <result property="uid" column="uid" ></result>
        <collection property="cityList" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.City" column="{provice=provice,uid=uid}" select="selectCity">
        </collection>
    </resultMap>
    <select id="getLeftStation" resultMap="name1List">
          select distinct provice from db_station.tb_station_inf
          select distinct provice,#{uid} as uid from db_station.tb_station_inf
          <where>
          <if test="uid>100">
            and tb_station_inf.station_id in(
@@ -26,24 +27,42 @@
    <resultMap id="name2List" type="city">
        <result property="provice" column="provice"></result>
        <result property="city" column="city" ></result>
        <collection property="countryList" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.Country" column="{provice=provice,city=city}" select="selectCountry">
        <result property="uid" column="uid" ></result>
        <collection property="countryList" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.Country" column="{provice=provice,city=city,uid=uid}" select="selectCountry">
        </collection>
    </resultMap>
    <select id="selectCity" resultMap="name2List">
        SELECT distinct #{provice} as provice,city from  db_station.tb_station_inf
        where provice=#{provice}
        SELECT distinct #{provice} as provice,#{uid} as uid,city from  db_station.tb_station_inf
        <where>
            provice=#{provice}
            <if test="uid>100">
                and tb_station_inf.station_id in(
                select distinct station_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr
                where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id
                and tb_baojigroup_usr.uid=#{uid}
                )
            </if>
        </where>
    </select>
    <resultMap id="name3List" type="country">
        <result property="provice" column="provice"></result>
        <result property="city" column="city" ></result>
        <result property="country" column="country" ></result>
        <collection property="stationList" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.Station" column="{provice=provice,city=city,country=country}" select="selectStation">
        <result property="uid" column="uid" ></result>
        <collection property="stationList" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.Station" column="{provice=provice,city=city,country=country,uid=uid}" select="selectStation">
        </collection>
    </resultMap>
    <select id="selectCountry" resultMap="name3List">
        SELECT distinct #{provice} as provice, #{city} as city,country from  db_station.tb_station_inf
        SELECT distinct #{provice} as provice, #{city} as city,#{uid} as uid,country from  db_station.tb_station_inf
        where provice=#{provice} and city=#{city}
        <if test="uid>100">
            and tb_station_inf.station_id in(
            select distinct station_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr
            where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id
            and tb_baojigroup_usr.uid=#{uid}
            )
        </if>
    </select>
    <resultMap id="name4List" type="station">
@@ -52,12 +71,20 @@
        <result property="country" column="country" ></result>
        <result property="stationName" column="station_name" ></result>
        <result property="stationId" column="station_id" ></result>
        <collection property="pinflist" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.Power" column="{stationId=station_id}" select="selectPower">
        <result property="uid" column="uid" ></result>
        <collection property="pinflist" javaType="java.util.ArrayList" ofType="com.whyc.dto.Station.Power" column="{stationId=station_id,uid=uid}" select="selectPower">
        </collection>
    </resultMap>
    <select id="selectStation" resultMap="name4List">
        SELECT distinct #{provice} as provice, #{city} as city, #{country} as country,station_name,station_id from  db_station.tb_station_inf
        SELECT distinct #{provice} as provice, #{city} as city, #{country} as country,#{uid} as uid,station_name,station_id from  db_station.tb_station_inf
        where provice=#{provice} and city=#{city} and country=#{country}
        <if test="uid>100">
            and tb_station_inf.station_id in(
            select distinct station_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr
            where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id
            and tb_baojigroup_usr.uid=#{uid}
            )
        </if>
    </select>
    <resultMap id="name5List" type="power">
        <result property="powerId" column="power_id"></result>
@@ -69,6 +96,13 @@
    <select id="selectPower" resultMap="name5List">
        SELECT distinct tb_power_inf.power_id,power_name,station_id from db_station.tb_power_inf
        where tb_power_inf.station_id=#{stationId}
        <if test="uid>100">
            and tb_power_inf.power_id in(
            select distinct power_id from db_user.tb_baojigroup_power,db_user.tb_baojigroup_usr
            where   tb_baojigroup_power.baoji_group_id=tb_baojigroup_usr.baoji_group_id
            and tb_baojigroup_usr.uid=#{uid}
            )
        </if>
    </select>
    <select id="selectBatt" resultType="batt">
src/main/resources/mapper/WorkflowMainMapper.xml
@@ -6,8 +6,8 @@
        l.id link_id,
        l.main_id,
        l.parent_id,
        l.process_level as lProcessLevel,
        l.process_level_name,
        l.process_stage,
        l.process_name,
        l.create_time link_create_time,
        l.deal_user_id,
        l.deal_type,
@@ -55,8 +55,8 @@
            <id column="link_id" property="id"/>
            <result column="main_id" property="mainId"/>
            <result column="parent_id" property="parentId"/>
            <result column="lProcessLevel" property="processLevel"/>
            <result column="process_level_name" property="processLevelName"/>
            <result column="process_stage" property="processStage"/>
            <result column="process_name" property="processName"/>
            <result column="link_create_time" property="createTime"/>
            <result column="deal_user_id" property="dealUserId"/>
            <result column="deal_type" property="dealType"/>
@@ -83,39 +83,39 @@
        <choose>
            <!--全部-->
            <when test="status==0">
                SELECT m.*,u.uName as create_user_name,<include refid="linkColumn" />
                    FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user_inf u
                SELECT m.*,u.name as create_user_name,<include refid="linkColumn" />
                    FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user u
                    where m.id = l.main_id
                    and m.create_user_id = u.uId
                    and m.create_user_id = u.id
                    and m.type = #{type}
                    and l.deal_role_id = #{user.uRole}
                    and l.deal_role_id = #{user.role}
                    and l.deal_user_id is null
                union all
                SELECT m.*,u.uName as create_user_name,<include refid="linkColumn" />
                    FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user_inf u
                SELECT m.*,u.name as create_user_name,<include refid="linkColumn" />
                    FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user u
                    where m.id = l.main_id
                    and m.create_user_id = u.uId
                    and m.create_user_id = u.id
                    and m.type = #{type}
                    and l.deal_user_id = #{user.uId} order by id desc
                    and l.deal_user_id = #{user.id} order by id desc
            </when>
            <!--待接单-->
            <when test="status==1">
                SELECT m.*,u.uName as create_user_name,<include refid="linkColumn" />
                FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user_inf u
                SELECT m.*,u.name as create_user_name,<include refid="linkColumn" />
                FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user u
                where m.id = l.main_id
                and m.create_user_id = u.uId
                and m.create_user_id = u.id
                and m.type = #{type}
                and l.deal_role_id = #{user.uRole}
                and l.deal_role_id = #{user.role}
                and l.deal_user_id is null
                and l.status = #{status} order by m.id desc
            </when>
            <otherwise>
                SELECT m.*,u.uName as create_user_name,<include refid="linkColumn" />
                FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user_inf u
                SELECT m.*,u.name as create_user_name,<include refid="linkColumn" />
                FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user u
                where m.id = l.main_id
                and m.create_user_id = u.uId
                and m.create_user_id = u.id
                and m.type = #{type}
                and l.deal_user_id = #{user.uId}
                and l.deal_user_id = #{user.id}
                and l.status = #{status} order by m.id desc
            </otherwise>
        </choose>