whyclxw
2025-06-12 eb81b0a16b2d4e87eefd085231ab6b20a1ea3cde
Merge branch 'master' of http://118.89.139.230:10101/r/powerIntelligenceSystem
7个文件已修改
3个文件已添加
250 ■■■■■ 已修改文件
src/main/java/com/whyc/config/StaticResourceConfig.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/AlarmInspectionController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/AlarmInspectionResultMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/web_site/AlarmInspection.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/web_site/AlarmInspectionResult.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/AlarmInspectionResultService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/AlarmInspectionService.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/CommonUtil.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/ThreadLocalUtil.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/AlarmInspectionMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/config/StaticResourceConfig.java
@@ -40,12 +40,12 @@
        if(YamlProperties.runModel == 1) {
            //开发路径
            baseDirPath = jarFile.getParentFile().toString()+File.separator+"battery_gwm_file"+File.separator;
            baseDirPath = jarFile.getParentFile().toString()+File.separator+"pis_file"+File.separator;
        }else {
            //打包路径
            baseDirPath = jarFile.toString()+File.separator+"battery_gwm_file"+File.separator;
            baseDirPath = jarFile.toString()+File.separator+"pis_file"+File.separator;
        }
        registry.addResourceHandler("/battery_gwm_file/**").addResourceLocations("file:/"+baseDirPath);
        registry.addResourceHandler("/pis_file/**").addResourceLocations("file:/"+baseDirPath);
        super.addResourceHandlers(registry);
src/main/java/com/whyc/controller/AlarmInspectionController.java
@@ -1,14 +1,19 @@
package com.whyc.controller;
import com.whyc.dto.Response;
import com.whyc.pojo.web_site.AlarmInspectionResult;
import com.whyc.service.AlarmInspectionService;
import com.whyc.util.CommonUtil;
import com.whyc.util.JsonUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
 * 要实现告警巡检单,创建巡检工单表.
@@ -26,11 +31,18 @@
    @Autowired
    private AlarmInspectionService service;
    @ApiOperation(value = "查询站点对应的巡检单",notes = "inspectionType=1表示告警级别为1的故障工单,inspectionType=2表示告警级别为2的巡检备忘录")
    @ApiOperation(value = "查询站点对应的巡检单",notes = "inspectionType=1表示告警级别为1的故障工单,inspectionType=2表示告警级别不为1的巡检备忘录")
    @GetMapping("getList")
    public Response getList(@RequestParam Integer stationId,@RequestParam Integer inspectionType){
    public Response getList(@RequestParam int stationId,@RequestParam int inspectionType){
        return service.getList(stationId,inspectionType);
    }
    @PostMapping("submitInspection")
    @ApiOperation(value = "提交巡检结果",notes = "alarmInspectionResultJsonStr填json字符串,字段包含stationId,stationName,inspectionType,inspectionResult,finishSuggestion")
    public Response submitInspection(@RequestPart(value = "file",required = false) List<MultipartFile>  file, @RequestParam String alarmInspectionResultJsonStr) throws IOException {
        AlarmInspectionResult result = JsonUtil.getGson().fromJson(alarmInspectionResultJsonStr,AlarmInspectionResult.class);
        return service.submitInspection(result,file);
    }
}
src/main/java/com/whyc/mapper/AlarmInspectionResultMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.web_site.AlarmInspectionResult;
public interface AlarmInspectionResultMapper extends CustomMapper<AlarmInspectionResult>{
}
src/main/java/com/whyc/pojo/web_site/AlarmInspection.java
@@ -33,6 +33,9 @@
    private Integer battGroupId;
    private String battGroupName;
    @ApiModelProperty("单体编号")
    private Integer monNum;
    @ApiModelProperty("告警属于哪种设备.1-电源,2-设备,3-电池")
    private Integer type;
src/main/java/com/whyc/pojo/web_site/AlarmInspectionResult.java
New file
@@ -0,0 +1,55 @@
package com.whyc.pojo.web_site;
import com.baomidou.mybatisplus.annotation.TableField;
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_alarm_inspection")
@ApiModel("告警巡检实时表")
public class AlarmInspectionResult {
    private Long id;
    private Integer stationId;
    private String stationName;
    @ApiModelProperty("1表示告警级别为1的故障工单,2表示告警级别不为1的巡检备忘录")
    private Integer inspectionType;
    /**
     * A电源在2025-06-12 9:00:00发生某某告警
     * B设备在2025-06-12 9:00:00发生某某告警
     * C电池在2025-06-12 9:00:00发生某某告警
     * D电池2号单体在2025-06-12 9:00:00发生某某告警
     */
    @ApiModelProperty("告警描述,综合了所有告警细节的告警描述")
    private String alarmDescription;
    @ApiModelProperty("巡检结果")
    private String inspectionResult;
    @ApiModelProperty("图片地址,多个地址用,隔开")
    private String pictureUrl;
    @ApiModelProperty("完成建议")
    private String finishSuggestion;
    private Integer submitUserId;
    private String submitUserName;
    private Integer baoJiGroupId;
    private String baoJiGroupName;
    private Date createTime;
}
src/main/java/com/whyc/service/AlarmInspectionResultService.java
New file
@@ -0,0 +1,19 @@
package com.whyc.service;
import com.whyc.mapper.AlarmInspectionResultMapper;
import com.whyc.pojo.web_site.AlarmInspectionResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class AlarmInspectionResultService {
    @Resource
    private AlarmInspectionResultMapper mapper;
    public void add(AlarmInspectionResult result) {
        mapper.insert(result);
    }
}
src/main/java/com/whyc/service/AlarmInspectionService.java
@@ -1,12 +1,28 @@
package com.whyc.service;
import com.whyc.constant.BattSingalIdEnum;
import com.whyc.constant.DevAlarmEnum;
import com.whyc.constant.PowerAlarmEnum;
import com.whyc.dto.Response;
import com.whyc.mapper.AlarmInspectionMapper;
import com.whyc.pojo.db_user.Baojigroup;
import com.whyc.pojo.db_user.User;
import com.whyc.pojo.web_site.AlarmInspection;
import com.whyc.pojo.web_site.AlarmInspectionResult;
import com.whyc.util.CommonUtil;
import com.whyc.util.DateUtil;
import com.whyc.util.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class AlarmInspectionService {
@@ -14,9 +30,95 @@
    @Resource
    private AlarmInspectionMapper mapper;
    @Autowired
    private AlarmInspectionResultService resultService;
    public Response getList(Integer stationId, Integer inspectionType) {
        //需要附加填充 负责班组信息 及 告警诊断信息
        List<AlarmInspection> list = mapper.getList(stationId,inspectionType);
        return new Response().set(1,list);
    }
    @Transactional
    public Response submitInspection(AlarmInspectionResult result, List<MultipartFile> file) throws IOException {
        //对file进行处理,保存到文件夹中
        //对存储路径进行定义
        String stationName = result.getStationName();
        Date now = new Date();
        String timeFormat = ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM_DD_HH_MM_SS_UNION, now);
        String fileDirPath = CommonUtil.getRootFile() + "alarmInspection" + File.separator + stationName + "_" + timeFormat;
        File fileDir = new File(fileDirPath);
        //如果文件夹不存在则创建
        if (!fileDir.exists()) {
            fileDir.mkdirs();
        }
        StringBuilder pictureUrlSb = new StringBuilder();
        if (file != null && file.size() > 0) {
            for (MultipartFile multipartFile : file) {
                String fileName = multipartFile.getOriginalFilename();
                //将fileName中可能存在的,去掉
                fileName = fileName.replace(",","");
                String filePath = fileDirPath + File.separator + fileName;
                multipartFile.transferTo(new File(filePath));
                String split = "pis_file"+File.separator+"alarmInspection";
                pictureUrlSb.append(File.separator + filePath.substring(filePath.indexOf(split))).append(",");
            }
        }
        result.setPictureUrl(pictureUrlSb.toString());
        //根据提交的站点id和inspectionType查询出对应的工单
        List<AlarmInspection> list = mapper.getList(result.getStationId(),result.getInspectionType());
        //校验告警是否全部消失,是则通过
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getIsExist() == 1) {
                return new Response().set(1,false,"当前巡检单内告警未全部消失");
            }
        }
        //检验通过,进行巡检结果提交,形成巡检历史
        //判断stationName,powerName,devName,battGroupName是否存在,逐个存在则拼接成一个字符串
        StringBuilder alarmDescriptionSb = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            AlarmInspection temp = list.get(i);
            if (temp.getStationName() != null) {
                alarmDescriptionSb.append(temp.getStationName()).append("-");
            }
            if (temp.getPowerName() != null) {
                alarmDescriptionSb.append(temp.getPowerName()).append("-");
            }
            if (temp.getDevName() != null) {
                alarmDescriptionSb.append(temp.getDevName()).append("-");
            }
            if (temp.getBattGroupName() != null) {
                alarmDescriptionSb.append(temp.getBattGroupName());
            }
            if(temp.getMonNum() != null){
                alarmDescriptionSb.append("单体编号:").append(temp.getMonNum());
            }
            if(temp.getType() == 1) { //电源告警
                alarmDescriptionSb.append("在" + DateUtil.YYYY_MM_DD_HH_MM_SS.format(temp.getAlmStartTime()) + "发生" + PowerAlarmEnum.getValue(temp.getAlmId()) + "告警,告警级别为" + temp.getAlmLevel() + ".\n");
            }
            else if(temp.getType() == 2) { //设备告警
                alarmDescriptionSb.append("在" + DateUtil.YYYY_MM_DD_HH_MM_SS.format(temp.getAlmStartTime()) + "发生" + DevAlarmEnum.getValue(temp.getAlmId()) + "告警,告警级别为" + temp.getAlmLevel() + ".\n");
            }else{ //电池告警
                alarmDescriptionSb.append("在" + DateUtil.YYYY_MM_DD_HH_MM_SS.format(temp.getAlmStartTime()) + "发生" + BattSingalIdEnum.getValue(temp.getAlmId()) +"告警,告警级别为" + temp.getAlmLevel() + ".\n");
            }
        }
        result.setAlarmDescription(alarmDescriptionSb.toString());
        User user = CommonUtil.getUser();
        result.setSubmitUserId(user.getId());
        result.setSubmitUserName(user.getName());
        result.setCreateTime(new Date());
        //所属班组
        Baojigroup baoJiGroup = list.get(0).getBaoJiGroup();
        result.setBaoJiGroupId(baoJiGroup.getBaojiGroupId());
        result.setBaoJiGroupName(baoJiGroup.getBaojiGroupName());
        resultService.add(result);
        //删除当前巡检单记录
        List<Long> ids = list.stream().map(AlarmInspection::getId).collect(Collectors.toList());
        mapper.deleteBatchIds(ids);
        return new Response().set(1,true,"提交完成");
    }
}
src/main/java/com/whyc/util/CommonUtil.java
@@ -3,12 +3,16 @@
import com.whyc.constant.YamlProperties;
import com.whyc.pojo.db_user.User;
import com.whyc.service.UserLogService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import static org.apache.shiro.web.filter.mgt.DefaultFilter.user;
/**
 * 通用工具列
@@ -28,6 +32,23 @@
        return (User) request.getSession().getAttribute("user");
    }
    /**
     * Shiro框架下的用户获取
     * @return
     */
    public static User getUser() {
        User user;
        Subject currentUser = SecurityUtils.getSubject();
        if(currentUser!=null && currentUser.isAuthenticated()){
            user = (User) currentUser.getPrincipal();
        }else{
            user = new User();
            user.setName("unlogged_user");
            user.setId(0);
        }
        return user;
    }
    public static String classesPath(){
        ApplicationHome applicationHome = new ApplicationHome(CommonUtil.class);
        File jarFile = applicationHome.getDir();
src/main/java/com/whyc/util/ThreadLocalUtil.java
@@ -5,6 +5,12 @@
import java.util.Date;
public class ThreadLocalUtil {
    public static String TIME_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    public static String TIME_YYYY_MM_DD = "yyyy-MM-dd";
    public static String TIME_YYYY_MM_DD_HH_MM_SS_UNION = "yyyyMMddHHmmss";
    public static String TIME_YYYY_MM_DD_HH_MM_SS_UNION2 = "yyyy-MM-dd_HH_mm_ss";
    public static ThreadLocal<SimpleDateFormat> sdf = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    public static ThreadLocal<SimpleDateFormat> sdfwithOutday = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy_MM"));
    public static ThreadLocal<SimpleDateFormat> sdfwithday = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));
@@ -45,4 +51,10 @@
        }
        return timeStr;
    }
    public static String format(String timeFormat,Date date) {
        ThreadLocal<SimpleDateFormat> formatThreadLocal = ThreadLocal.withInitial(() -> new SimpleDateFormat(timeFormat));
        SimpleDateFormat format = formatThreadLocal.get();
        return format.format(date);
    }
}
src/main/resources/mapper/AlarmInspectionMapper.xml
@@ -12,6 +12,7 @@
        <result column="dev_name" property="devName" />
        <result column="batt_group_id" property="battGroupId" />
        <result column="batt_group_name" property="battGroupName" />
        <result column="mon_num" property="monNum"/>
        <result column="type" property="type" />
        <result column="alm_num" property="almNum" />
        <result column="alm_id" property="almId" />
@@ -45,6 +46,7 @@
        ai.dev_name,
        ai.batt_group_id,
        ai.batt_group_name,
        ai.mon_num,
        ai.type,
        ai.alm_num,
        ai.alm_id,