77681 1 неделя назад
Родитель
Сommit
9733d697e9
36 измененных файлов с 1067 добавлено и 30 удалено
  1. 10 0
      gw-slaj/src/main/java/com/goldenwater/slaj/acci/controller/BisAcciAssessController.java
  2. 52 0
      gw-slaj/src/main/java/com/goldenwater/slaj/acci/controller/ObjAcciController.java
  3. 8 0
      gw-slaj/src/main/java/com/goldenwater/slaj/acci/mapper/BisAcciAssessMapper.java
  4. 29 0
      gw-slaj/src/main/java/com/goldenwater/slaj/acci/mapper/ObjAcciMapper.java
  5. 8 0
      gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/IBisAcciAssessService.java
  6. 29 0
      gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/IObjAcciService.java
  7. 14 3
      gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/impl/AcciNotifyService.java
  8. 6 0
      gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/impl/BisAcciAssessServiceImpl.java
  9. 21 0
      gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/impl/ObjAcciServiceImpl.java
  10. 17 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hazard/controller/BisHazMajRegWritController.java
  11. 6 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/BisHiddRecRepController.java
  12. 35 1
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/BisMajHiddSupController.java
  13. 35 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/BisOrgMonRepPeriController.java
  14. 20 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/HiddMobileController.java
  15. 23 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/TBusiHiddCountController.java
  16. 14 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/mapper/BisHiddRecRepMapper.java
  17. 15 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/mapper/TBusiHiddCountMapper.java
  18. 14 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/IBisHiddRecRepService.java
  19. 31 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/IBisOrgMonRepPeriService.java
  20. 15 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/ITBusiHiddCountService.java
  21. 11 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/impl/BisHiddRecRepServiceImpl.java
  22. 68 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/impl/BisOrgMonRepPeriServiceImpl.java
  23. 11 0
      gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/impl/TBusiHiddCountServiceImpl.java
  24. 21 0
      gw-slaj/src/main/resources/mapper/slaj/acci/BisAcciAssessMapper.xml
  25. 55 0
      gw-slaj/src/main/resources/mapper/slaj/acci/ObjAcciMapper.xml
  26. 21 0
      gw-slaj/src/main/resources/mapper/slaj/hidd/BisHiddRecRepMapper.xml
  27. 1 1
      gw-slaj/src/main/resources/mapper/slaj/hidd/BisOrgMonRepPeriMapper.xml
  28. 22 0
      gw-slaj/src/main/resources/mapper/slaj/hidd/TBusiHiddCountMapper.xml
  29. 53 0
      gw-ui/src/api/slaj/hidd.js
  30. 113 0
      gw-ui/src/views/slaj/hidd/inveAdd.vue
  31. 22 22
      gw-ui/src/views/slaj/hidd/monthDetail.vue
  32. 114 0
      gw-ui/src/views/slaj/hidd/rectImplAdd.vue
  33. 77 0
      gw-ui/src/views/slaj/hidd/rectProgAdd.vue
  34. 1 1
      gw-ui/src/views/slaj/hidd/stat.vue
  35. 73 0
      gw-ui/src/views/slaj/hidd/supDetail.vue
  36. 2 2
      gw-ui/src/views/slaj/hidd/supList.vue

+ 10 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/acci/controller/BisAcciAssessController.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.acci.controller;
 package com.goldenwater.slaj.acci.controller;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -58,4 +59,13 @@ public class BisAcciAssessController extends BaseController {
         ExcelUtil<BisAcciAssess> util = new ExcelUtil<BisAcciAssess>(BisAcciAssess.class);
         ExcelUtil<BisAcciAssess> util = new ExcelUtil<BisAcciAssess>(BisAcciAssess.class);
         util.exportExcel(response, list, "事故考核数据");
         util.exportExcel(response, list, "事故考核数据");
     }
     }
+
+    /**
+     * 事故考核排名查询
+     */
+    @GetMapping("/ranking")
+    public AjaxResult ranking(BisAcciAssess bisAcciAssess) {
+        List<Map<String, Object>> list = bisAcciAssessService.selectAcciAssessRanking(bisAcciAssess);
+        return AjaxResult.success(list);
+    }
 }
 }

+ 52 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/acci/controller/ObjAcciController.java

@@ -187,4 +187,56 @@ public class ObjAcciController extends BaseController {
     public AjaxResult mobileSave(@RequestBody ObjAcci objAcci) {
     public AjaxResult mobileSave(@RequestBody ObjAcci objAcci) {
         return toAjax(objAcciService.insertObjAcci(objAcci));
         return toAjax(objAcciService.insertObjAcci(objAcci));
     }
     }
+
+    /**
+     * 事故趋势图 — 各月份事故数量统计,用于折线图/柱状图展示。
+     */
+    @GetMapping("/trendChart")
+    public AjaxResult trendChart(@RequestParam(required = false) String startTime,
+                                  @RequestParam(required = false) String endTime) {
+        Map<String, Object> params = new java.util.HashMap<>();
+        params.put("startTime", startTime);
+        params.put("endTime", endTime);
+        List<Map<String, Object>> list = objAcciService.selectTrendChart(params);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 事故类型占比饼图 — 各事故类别(物体打击/机械伤害/高处坠落等)的数量及占比。
+     */
+    @GetMapping("/catePieChart")
+    public AjaxResult catePieChart(@RequestParam(required = false) String startTime,
+                                    @RequestParam(required = false) String endTime) {
+        Map<String, Object> params = new java.util.HashMap<>();
+        params.put("startTime", startTime);
+        params.put("endTime", endTime);
+        List<Map<String, Object>> list = objAcciService.selectCatePieChart(params);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 事故等级占比饼图 — 各事故等级(一般/较大/重大/特大)的数量及占比。
+     */
+    @GetMapping("/gradPieChart")
+    public AjaxResult gradPieChart(@RequestParam(required = false) String startTime,
+                                    @RequestParam(required = false) String endTime) {
+        Map<String, Object> params = new java.util.HashMap<>();
+        params.put("startTime", startTime);
+        params.put("endTime", endTime);
+        List<Map<String, Object>> list = objAcciService.selectGradPieChart(params);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 事故GIS地图数据 — 返回含经纬度的事故点位列表,用于前端地图聚合展示。
+     */
+    @GetMapping("/gisData")
+    public AjaxResult gisData(@RequestParam(required = false) String startTime,
+                               @RequestParam(required = false) String endTime) {
+        Map<String, Object> params = new java.util.HashMap<>();
+        params.put("startTime", startTime);
+        params.put("endTime", endTime);
+        List<Map<String, Object>> list = objAcciService.selectGisData(params);
+        return AjaxResult.success(list);
+    }
 }
 }

+ 8 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/acci/mapper/BisAcciAssessMapper.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.acci.mapper;
 package com.goldenwater.slaj.acci.mapper;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 import com.goldenwater.slaj.acci.domain.BisAcciAssess;
 import com.goldenwater.slaj.acci.domain.BisAcciAssess;
 
 
@@ -51,4 +52,11 @@ public interface BisAcciAssessMapper {
      * @return 影响行数
      * @return 影响行数
      */
      */
     int deleteBisAcciAssessByIds(Long[] ids);
     int deleteBisAcciAssessByIds(Long[] ids);
+
+    /**
+     * 查询事故考核排名列表
+     * @param bisAcciAssess 查询条件
+     * @return 排名列表
+     */
+    List<Map<String, Object>> selectAcciAssessRanking(BisAcciAssess bisAcciAssess);
 }
 }

+ 29 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/acci/mapper/ObjAcciMapper.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.acci.mapper;
 package com.goldenwater.slaj.acci.mapper;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 import com.goldenwater.slaj.acci.domain.ObjAcci;
 import com.goldenwater.slaj.acci.domain.ObjAcci;
 
 
@@ -51,4 +52,32 @@ public interface ObjAcciMapper {
      * @return 影响行数
      * @return 影响行数
      */
      */
     int deleteObjAcciByGuids(String[] guids);
     int deleteObjAcciByGuids(String[] guids);
+
+    /**
+     * 事故趋势图数据(按月份统计)
+     * @param params 查询参数(startTime, endTime等)
+     * @return 各月份事故数量
+     */
+    List<Map<String, Object>> selectTrendChart(Map<String, Object> params);
+
+    /**
+     * 事故类型占比饼图数据
+     * @param params 查询参数
+     * @return 各类型事故数量
+     */
+    List<Map<String, Object>> selectCatePieChart(Map<String, Object> params);
+
+    /**
+     * 事故等级占比饼图数据
+     * @param params 查询参数
+     * @return 各等级事故数量
+     */
+    List<Map<String, Object>> selectGradPieChart(Map<String, Object> params);
+
+    /**
+     * 事故GIS地图数据
+     * @param params 查询参数
+     * @return 含经纬度的事故列表
+     */
+    List<Map<String, Object>> selectGisData(Map<String, Object> params);
 }
 }

+ 8 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/IBisAcciAssessService.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.acci.service;
 package com.goldenwater.slaj.acci.service;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import com.goldenwater.slaj.acci.domain.BisAcciAssess;
 import com.goldenwater.slaj.acci.domain.BisAcciAssess;
 
 
 /**
 /**
@@ -49,4 +50,11 @@ public interface IBisAcciAssessService {
      * @return 影响行数
      * @return 影响行数
      */
      */
     int deleteBisAcciAssessByIds(Long[] ids);
     int deleteBisAcciAssessByIds(Long[] ids);
+
+    /**
+     * 查询事故考核排名列表
+     * @param bisAcciAssess 查询条件
+     * @return 排名列表
+     */
+    List<Map<String, Object>> selectAcciAssessRanking(BisAcciAssess bisAcciAssess);
 }
 }

+ 29 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/IObjAcciService.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.acci.service;
 package com.goldenwater.slaj.acci.service;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import com.goldenwater.slaj.acci.domain.ObjAcci;
 import com.goldenwater.slaj.acci.domain.ObjAcci;
 
 
 /**
 /**
@@ -49,4 +50,32 @@ public interface IObjAcciService {
      * @return 影响行数
      * @return 影响行数
      */
      */
     int deleteObjAcciByGuids(String[] guids);
     int deleteObjAcciByGuids(String[] guids);
+
+    /**
+     * 事故趋势图数据
+     * @param params 查询参数
+     * @return 各月份事故数量
+     */
+    List<Map<String, Object>> selectTrendChart(Map<String, Object> params);
+
+    /**
+     * 事故类型占比饼图数据
+     * @param params 查询参数
+     * @return 各类型事故数量
+     */
+    List<Map<String, Object>> selectCatePieChart(Map<String, Object> params);
+
+    /**
+     * 事故等级占比饼图数据
+     * @param params 查询参数
+     * @return 各等级事故数量
+     */
+    List<Map<String, Object>> selectGradPieChart(Map<String, Object> params);
+
+    /**
+     * 事故GIS地图数据
+     * @param params 查询参数
+     * @return 含经纬度的事故列表
+     */
+    List<Map<String, Object>> selectGisData(Map<String, Object> params);
 }
 }

+ 14 - 3
gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/impl/AcciNotifyService.java

@@ -26,21 +26,32 @@ public class AcciNotifyService {
 
 
     /**
     /**
      * 发送内部通知 — 向指定单位的收件箱推送消息(月报审核结果、事故催报提醒等)。
      * 发送内部通知 — 向指定单位的收件箱推送消息(月报审核结果、事故催报提醒等)。
-     * noticeCode 固定为 "11555113"(水文安全通知类型标识),appCode 固定为 "acci"
-     * 用于接收端区分业务模块。通知写入 WS 统一通知中心,收件人登录后可在站内信模块查看。
+     * noticeCode 固定为 "11555113"(水文安全通知类型标识),appCode 区分业务模块。
+     * 通知写入 WS 统一通知中心,收件人登录后可在站内信模块查看。
      *
      *
      * @param orgGuid 目标单位 GUID(接收通知的单位)
      * @param orgGuid 目标单位 GUID(接收通知的单位)
      * @param title   通知标题(如 "2025年6月事故月报审核通过")
      * @param title   通知标题(如 "2025年6月事故月报审核通过")
      * @param content 通知正文
      * @param content 通知正文
      */
      */
     public AjaxResult sendNotice(String orgGuid, String title, String content) {
     public AjaxResult sendNotice(String orgGuid, String title, String content) {
+        return sendNotice(orgGuid, title, content, "acci");
+    }
+
+    /**
+     * 发送内部通知(指定业务模块)
+     * @param orgGuid 目标单位 GUID
+     * @param title   通知标题
+     * @param content 通知正文
+     * @param appCode 业务模块标识(acci/hidd/hazard 等)
+     */
+    public AjaxResult sendNotice(String orgGuid, String title, String content, String appCode) {
         try {
         try {
             Map<String, Object> notice = new HashMap<>();
             Map<String, Object> notice = new HashMap<>();
             notice.put("noticeCode", "11555113");
             notice.put("noticeCode", "11555113");
             notice.put("noticeTitle", title);
             notice.put("noticeTitle", title);
             notice.put("noticeContent", content);
             notice.put("noticeContent", content);
             notice.put("orgGuid", orgGuid);
             notice.put("orgGuid", orgGuid);
-            notice.put("appCode", "acci");
+            notice.put("appCode", appCode);
             notice.put("fromDate", new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
             notice.put("fromDate", new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
             String jsonStr = JSON.toJSONString(notice);
             String jsonStr = JSON.toJSONString(notice);
             String resp = HttpUtils.sendPost(noticeUrl, jsonStr, MediaType.APPLICATION_JSON_VALUE);
             String resp = HttpUtils.sendPost(noticeUrl, jsonStr, MediaType.APPLICATION_JSON_VALUE);

+ 6 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/impl/BisAcciAssessServiceImpl.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.acci.service.impl;
 package com.goldenwater.slaj.acci.service.impl;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.goldenwater.slaj.acci.mapper.BisAcciAssessMapper;
 import com.goldenwater.slaj.acci.mapper.BisAcciAssessMapper;
@@ -75,4 +76,9 @@ public class BisAcciAssessServiceImpl implements IBisAcciAssessService {
     public int deleteBisAcciAssessByIds(Long[] ids) {
     public int deleteBisAcciAssessByIds(Long[] ids) {
         return bisAcciAssessMapper.deleteBisAcciAssessByIds(ids);
         return bisAcciAssessMapper.deleteBisAcciAssessByIds(ids);
     }
     }
+
+    @Override
+    public List<Map<String, Object>> selectAcciAssessRanking(BisAcciAssess bisAcciAssess) {
+        return bisAcciAssessMapper.selectAcciAssessRanking(bisAcciAssess);
+    }
 }
 }

+ 21 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/acci/service/impl/ObjAcciServiceImpl.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.acci.service.impl;
 package com.goldenwater.slaj.acci.service.impl;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.goldenwater.slaj.acci.mapper.ObjAcciMapper;
 import com.goldenwater.slaj.acci.mapper.ObjAcciMapper;
@@ -75,4 +76,24 @@ public class ObjAcciServiceImpl implements IObjAcciService {
     public int deleteObjAcciByGuids(String[] guids) {
     public int deleteObjAcciByGuids(String[] guids) {
         return objAcciMapper.deleteObjAcciByGuids(guids);
         return objAcciMapper.deleteObjAcciByGuids(guids);
     }
     }
+
+    @Override
+    public List<Map<String, Object>> selectTrendChart(Map<String, Object> params) {
+        return objAcciMapper.selectTrendChart(params);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectCatePieChart(Map<String, Object> params) {
+        return objAcciMapper.selectCatePieChart(params);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectGradPieChart(Map<String, Object> params) {
+        return objAcciMapper.selectGradPieChart(params);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectGisData(Map<String, Object> params) {
+        return objAcciMapper.selectGisData(params);
+    }
 }
 }

+ 17 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hazard/controller/BisHazMajRegWritController.java

@@ -58,4 +58,21 @@ public class BisHazMajRegWritController extends BaseController {
         ExcelUtil<BisHazMajRegWrit> util = new ExcelUtil<BisHazMajRegWrit>(BisHazMajRegWrit.class);
         ExcelUtil<BisHazMajRegWrit> util = new ExcelUtil<BisHazMajRegWrit>(BisHazMajRegWrit.class);
         util.exportExcel(response, list, "重大危险源备案核销数据");
         util.exportExcel(response, list, "重大危险源备案核销数据");
     }
     }
+
+    /**
+     * 移动端危险源备案
+     */
+    @PostMapping("/mobile/insert")
+    public AjaxResult mobileInsert(@RequestBody BisHazMajRegWrit bisHazMajRegWrit) {
+        return toAjax(bisHazMajRegWritService.insertBisHazMajRegWrit(bisHazMajRegWrit));
+    }
+
+    /**
+     * 移动端危险源核销
+     */
+    @PostMapping("/mobile/writInsert")
+    public AjaxResult mobileWritInsert(@RequestBody BisHazMajRegWrit bisHazMajRegWrit) {
+        bisHazMajRegWrit.setHazStat("4");
+        return toAjax(bisHazMajRegWritService.updateBisHazMajRegWrit(bisHazMajRegWrit));
+    }
 }
 }

+ 6 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/BisHiddRecRepController.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.hidd.controller;
 package com.goldenwater.slaj.hidd.controller;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import com.goldenwater.common.core.controller.BaseController;
 import com.goldenwater.common.core.controller.BaseController;
@@ -41,4 +42,9 @@ public class BisHiddRecRepController extends BaseController {
     public AjaxResult remove(@PathVariable String[] guids) {
     public AjaxResult remove(@PathVariable String[] guids) {
         return toAjax(bisHiddRecRepService.deleteBisHiddRecRepByGuids(guids));
         return toAjax(bisHiddRecRepService.deleteBisHiddRecRepByGuids(guids));
     }
     }
+
+    @GetMapping("/withHidd/{repGuid}")
+    public AjaxResult listWithHidd(@PathVariable String repGuid) {
+        return AjaxResult.success(bisHiddRecRepService.selectBisHiddRecRepWithHiddByRepGuid(repGuid));
+    }
 }
 }

+ 35 - 1
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/BisMajHiddSupController.java

@@ -2,12 +2,18 @@ package com.goldenwater.slaj.hidd.controller;
 
 
 import java.util.List;
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import com.goldenwater.common.annotation.Log;
 import com.goldenwater.common.core.controller.BaseController;
 import com.goldenwater.common.core.controller.BaseController;
 import com.goldenwater.common.core.domain.AjaxResult;
 import com.goldenwater.common.core.domain.AjaxResult;
 import com.goldenwater.common.core.page.TableDataInfo;
 import com.goldenwater.common.core.page.TableDataInfo;
+import com.goldenwater.common.enums.BusinessType;
 import com.goldenwater.slaj.hidd.domain.BisMajHiddSup;
 import com.goldenwater.slaj.hidd.domain.BisMajHiddSup;
+import com.goldenwater.slaj.hidd.domain.ObjHidd;
 import com.goldenwater.slaj.hidd.service.IBisMajHiddSupService;
 import com.goldenwater.slaj.hidd.service.IBisMajHiddSupService;
+import com.goldenwater.slaj.hidd.service.IObjHiddService;
+import com.goldenwater.slaj.acci.service.impl.AcciNotifyService;
 
 
 @RestController
 @RestController
 @RequestMapping("/hidd/majhiddsup")
 @RequestMapping("/hidd/majhiddsup")
@@ -15,6 +21,12 @@ public class BisMajHiddSupController extends BaseController {
     @Autowired
     @Autowired
     private IBisMajHiddSupService bisMajHiddSupService;
     private IBisMajHiddSupService bisMajHiddSupService;
 
 
+    @Autowired
+    private IObjHiddService objHiddService;
+
+    @Autowired
+    private AcciNotifyService acciNotifyService;
+
     @GetMapping("/list")
     @GetMapping("/list")
     public TableDataInfo list(BisMajHiddSup bisMajHiddSup) {
     public TableDataInfo list(BisMajHiddSup bisMajHiddSup) {
         startPage();
         startPage();
@@ -27,18 +39,40 @@ public class BisMajHiddSupController extends BaseController {
         return AjaxResult.success(bisMajHiddSupService.selectBisMajHiddSupByGuid(guid));
         return AjaxResult.success(bisMajHiddSupService.selectBisMajHiddSupByGuid(guid));
     }
     }
 
 
+    @Log(title = "隐患督办", businessType = BusinessType.INSERT)
+    @PreAuthorize("@ss.hasPermi('hidd:majhiddsup:add')")
     @PostMapping
     @PostMapping
     public AjaxResult add(@RequestBody BisMajHiddSup bisMajHiddSup) {
     public AjaxResult add(@RequestBody BisMajHiddSup bisMajHiddSup) {
-        return toAjax(bisMajHiddSupService.insertBisMajHiddSup(bisMajHiddSup));
+        int result = bisMajHiddSupService.insertBisMajHiddSup(bisMajHiddSup);
+        if (result > 0 && bisMajHiddSup.getHiddGuid() != null) {
+            ObjHidd hidd = objHiddService.selectObjHiddByGuid(bisMajHiddSup.getHiddGuid());
+            String orgGuid = hidd != null ? hidd.getOrgGuid() : null;
+            if (orgGuid != null) {
+                acciNotifyService.sendNotice(orgGuid, "隐患督办通知", "您有一条隐患督办信息,请及时处理", "hidd");
+            }
+        }
+        return toAjax(result);
     }
     }
 
 
+    @Log(title = "隐患督办", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('hidd:majhiddsup:edit')")
     @PutMapping
     @PutMapping
     public AjaxResult edit(@RequestBody BisMajHiddSup bisMajHiddSup) {
     public AjaxResult edit(@RequestBody BisMajHiddSup bisMajHiddSup) {
         return toAjax(bisMajHiddSupService.updateBisMajHiddSup(bisMajHiddSup));
         return toAjax(bisMajHiddSupService.updateBisMajHiddSup(bisMajHiddSup));
     }
     }
 
 
+    @Log(title = "隐患督办", businessType = BusinessType.DELETE)
+    @PreAuthorize("@ss.hasPermi('hidd:majhiddsup:remove')")
     @DeleteMapping("/{guids}")
     @DeleteMapping("/{guids}")
     public AjaxResult remove(@PathVariable String[] guids) {
     public AjaxResult remove(@PathVariable String[] guids) {
         return toAjax(bisMajHiddSupService.deleteBisMajHiddSupByGuids(guids));
         return toAjax(bisMajHiddSupService.deleteBisMajHiddSupByGuids(guids));
     }
     }
+
+    @Log(title = "隐患督办销号", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('hidd:majhiddsup:edit')")
+    @PutMapping("/writeOff")
+    public AjaxResult writeOff(@RequestBody BisMajHiddSup bisMajHiddSup) {
+        bisMajHiddSup.setSupStat("3");
+        return toAjax(bisMajHiddSupService.updateBisMajHiddSup(bisMajHiddSup));
+    }
 }
 }

+ 35 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/BisOrgMonRepPeriController.java

@@ -64,4 +64,39 @@ public class BisOrgMonRepPeriController extends BaseController {
         List<Map<String, Object>> list = bisOrgMonRepPeriService.selectMonthTotalList(params);
         List<Map<String, Object>> list = bisOrgMonRepPeriService.selectMonthTotalList(params);
         return AjaxResult.success(list);
         return AjaxResult.success(list);
     }
     }
+
+    @Log(title = "月报上报", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('hidd:monrepperi:edit')")
+    @PostMapping("/submit")
+    public AjaxResult submit(@RequestParam String guid, @RequestParam(required = false) String hiddGuids) {
+        try {
+            String[] ids = org.springframework.util.StringUtils.hasText(hiddGuids) ? hiddGuids.split(",") : new String[0];
+            bisOrgMonRepPeriService.submitMonth(guid, ids);
+            return AjaxResult.success("月报上报成功");
+        } catch (RuntimeException e) {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    @Log(title = "月报退回", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('hidd:monrepperi:edit')")
+    @PutMapping("/return")
+    public AjaxResult returnMonth(@RequestParam String guid, @RequestParam String returnDesc) {
+        return toAjax(bisOrgMonRepPeriService.returnMonth(guid, returnDesc));
+    }
+
+    @Log(title = "月报撤销", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('hidd:monrepperi:edit')")
+    @PutMapping("/revoke")
+    public AjaxResult revoke(@RequestParam String guid) {
+        return toAjax(bisOrgMonRepPeriService.revokeMonth(guid));
+    }
+
+    @Log(title = "月报撤销审核", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('hidd:monrepperi:edit')")
+    @PutMapping("/approveRevoke")
+    public AjaxResult approveRevoke(@RequestParam String guid, @RequestParam boolean approved,
+                                    @RequestParam(required = false) String opinion) {
+        return toAjax(bisOrgMonRepPeriService.approveRevoke(guid, approved, opinion));
+    }
 }
 }

+ 20 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/HiddMobileController.java

@@ -10,6 +10,7 @@ import com.goldenwater.slaj.hidd.domain.ObjHidd;
 import com.goldenwater.slaj.hidd.domain.BisOrgMonRepPeri;
 import com.goldenwater.slaj.hidd.domain.BisOrgMonRepPeri;
 import com.goldenwater.slaj.hidd.service.IObjHiddService;
 import com.goldenwater.slaj.hidd.service.IObjHiddService;
 import com.goldenwater.slaj.hidd.service.IBisOrgMonRepPeriService;
 import com.goldenwater.slaj.hidd.service.IBisOrgMonRepPeriService;
+import com.goldenwater.slaj.acci.service.impl.AcciNotifyService;
 
 
 /**
 /**
  * 移动端接口
  * 移动端接口
@@ -23,6 +24,9 @@ public class HiddMobileController extends BaseController {
     @Autowired
     @Autowired
     private IBisOrgMonRepPeriService bisOrgMonRepPeriService;
     private IBisOrgMonRepPeriService bisOrgMonRepPeriService;
 
 
+    @Autowired
+    private AcciNotifyService acciNotifyService;
+
     /**
     /**
      * 移动端隐患列表
      * 移动端隐患列表
      */
      */
@@ -57,4 +61,20 @@ public class HiddMobileController extends BaseController {
         bisOrgMonRepPeri.setRepAct("0");
         bisOrgMonRepPeri.setRepAct("0");
         return toAjax(bisOrgMonRepPeriService.updateBisOrgMonRepPeri(bisOrgMonRepPeri));
         return toAjax(bisOrgMonRepPeriService.updateBisOrgMonRepPeri(bisOrgMonRepPeri));
     }
     }
+
+    /**
+     * 月报催报提醒(向未上报单位发送通知)
+     * @param orgGuid 目标单位GUID
+     * @param repMonth 报表月份(可选)
+     */
+    @PostMapping("/pushForward")
+    public AjaxResult pushForward(@RequestParam String orgGuid,
+                                   @RequestParam(required = false) String repMonth) {
+        String title = "隐患月报督促上报信息";
+        String content = "隐患月报督促上报信息";
+        if (repMonth != null && !repMonth.isEmpty()) {
+            content = repMonth + "隐患月报督促上报信息";
+        }
+        return acciNotifyService.sendNotice(orgGuid, title, content, "hidd");
+    }
 }
 }

+ 23 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/controller/TBusiHiddCountController.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.hidd.controller;
 package com.goldenwater.slaj.hidd.controller;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import com.goldenwater.common.core.controller.BaseController;
 import com.goldenwater.common.core.controller.BaseController;
@@ -71,4 +72,26 @@ public class TBusiHiddCountController extends BaseController {
         ExcelUtil<TBusiHiddCount> util = new ExcelUtil<>(TBusiHiddCount.class);
         ExcelUtil<TBusiHiddCount> util = new ExcelUtil<>(TBusiHiddCount.class);
         util.exportExcel(response, list, "隐患统计数据");
         util.exportExcel(response, list, "隐患统计数据");
     }
     }
+
+    /**
+     * 隐患月报上报率柱状图数据
+     */
+    @GetMapping("/reportRateChart")
+    public AjaxResult reportRateChart(@RequestParam(required = false) String repTime) {
+        Map<String, Object> params = new java.util.HashMap<>();
+        params.put("repTime", repTime);
+        List<Map<String, Object>> list = tBusiHiddCountService.selectReportRateChart(params);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 隐患整改率柱状图数据
+     */
+    @GetMapping("/rectifyRateChart")
+    public AjaxResult rectifyRateChart(@RequestParam(required = false) String repTime) {
+        Map<String, Object> params = new java.util.HashMap<>();
+        params.put("repTime", repTime);
+        List<Map<String, Object>> list = tBusiHiddCountService.selectRectifyRateChart(params);
+        return AjaxResult.success(list);
+    }
 }
 }

+ 14 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/mapper/BisHiddRecRepMapper.java

@@ -51,4 +51,18 @@ public interface BisHiddRecRepMapper {
      * @return 影响行数
      * @return 影响行数
      */
      */
     int deleteBisHiddRecRepByGuids(String[] guids);
     int deleteBisHiddRecRepByGuids(String[] guids);
+
+    /**
+     * 根据月报ID删除隐患记录上报
+     * @param repGuid 月报ID
+     * @return 影响行数
+     */
+    int deleteBisHiddRecRepByRepGuid(String repGuid);
+
+    /**
+     * 根据月报ID查询隐患列表(含隐患名称、等级等信息)
+     * @param repGuid 月报ID
+     * @return 隐患记录列表
+     */
+    List<java.util.Map<String, Object>> selectBisHiddRecRepWithHiddByRepGuid(String repGuid);
 }
 }

+ 15 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/mapper/TBusiHiddCountMapper.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.hidd.mapper;
 package com.goldenwater.slaj.hidd.mapper;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 import com.goldenwater.slaj.hidd.domain.TBusiHiddCount;
 import com.goldenwater.slaj.hidd.domain.TBusiHiddCount;
 
 
@@ -51,4 +52,18 @@ public interface TBusiHiddCountMapper {
      * @return 影响行数
      * @return 影响行数
      */
      */
     int deleteTBusiHiddCountByIds(Long[] ids);
     int deleteTBusiHiddCountByIds(Long[] ids);
+
+    /**
+     * 查询隐患月报上报率图表数据
+     * @param params 查询参数(含repTime等)
+     * @return 单位名称和上报率列表
+     */
+    List<Map<String, Object>> selectReportRateChart(Map<String, Object> params);
+
+    /**
+     * 查询隐患整改率图表数据
+     * @param params 查询参数(含repTime等)
+     * @return 单位名称和整改率列表
+     */
+    List<Map<String, Object>> selectRectifyRateChart(Map<String, Object> params);
 }
 }

+ 14 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/IBisHiddRecRepService.java

@@ -49,4 +49,18 @@ public interface IBisHiddRecRepService {
      * @return 影响行数
      * @return 影响行数
      */
      */
     int deleteBisHiddRecRepByGuids(String[] guids);
     int deleteBisHiddRecRepByGuids(String[] guids);
+
+    /**
+     * 根据月报ID删除隐患记录上报
+     * @param repGuid 月报ID
+     * @return 影响行数
+     */
+    int deleteBisHiddRecRepByRepGuid(String repGuid);
+
+    /**
+     * 根据月报ID查询隐患列表(含隐患名称、等级等信息)
+     * @param repGuid 月报ID
+     * @return 隐患记录列表
+     */
+    List<java.util.Map<String, Object>> selectBisHiddRecRepWithHiddByRepGuid(String repGuid);
 }
 }

+ 31 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/IBisOrgMonRepPeriService.java

@@ -63,4 +63,35 @@ public interface IBisOrgMonRepPeriService {
      * @return 月报汇总列表
      * @return 月报汇总列表
      */
      */
     List<Map<String, Object>> selectMonthTotalList(Map<String, Object> params);
     List<Map<String, Object>> selectMonthTotalList(Map<String, Object> params);
+
+    /**
+     * 提交月报
+     * @param guid 月报ID
+     * @param hiddGuids 隐患ID数组
+     */
+    void submitMonth(String guid, String[] hiddGuids);
+
+    /**
+     * 退回月报
+     * @param guid 月报ID
+     * @param returnDesc 退回说明
+     * @return 结果
+     */
+    int returnMonth(String guid, String returnDesc);
+
+    /**
+     * 撤销月报
+     * @param guid 月报ID
+     * @return 结果
+     */
+    int revokeMonth(String guid);
+
+    /**
+     * 审核撤销
+     * @param guid 月报ID
+     * @param approved 是否通过
+     * @param opinion 审批意见
+     * @return 结果
+     */
+    int approveRevoke(String guid, boolean approved, String opinion);
 }
 }

+ 15 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/ITBusiHiddCountService.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.hidd.service;
 package com.goldenwater.slaj.hidd.service;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import com.goldenwater.slaj.hidd.domain.TBusiHiddCount;
 import com.goldenwater.slaj.hidd.domain.TBusiHiddCount;
 
 
 /**
 /**
@@ -49,4 +50,18 @@ public interface ITBusiHiddCountService {
      * @return 影响行数
      * @return 影响行数
      */
      */
     int deleteTBusiHiddCountByIds(Long[] ids);
     int deleteTBusiHiddCountByIds(Long[] ids);
+
+    /**
+     * 查询隐患月报上报率图表数据
+     * @param params 查询参数
+     * @return 上报率列表
+     */
+    List<Map<String, Object>> selectReportRateChart(Map<String, Object> params);
+
+    /**
+     * 查询隐患整改率图表数据
+     * @param params 查询参数
+     * @return 整改率列表
+     */
+    List<Map<String, Object>> selectRectifyRateChart(Map<String, Object> params);
 }
 }

+ 11 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/impl/BisHiddRecRepServiceImpl.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.hidd.service.impl;
 package com.goldenwater.slaj.hidd.service.impl;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.goldenwater.slaj.hidd.mapper.BisHiddRecRepMapper;
 import com.goldenwater.slaj.hidd.mapper.BisHiddRecRepMapper;
@@ -75,4 +76,14 @@ public class BisHiddRecRepServiceImpl implements IBisHiddRecRepService {
     public int deleteBisHiddRecRepByGuids(String[] guids) {
     public int deleteBisHiddRecRepByGuids(String[] guids) {
         return bisHiddRecRepMapper.deleteBisHiddRecRepByGuids(guids);
         return bisHiddRecRepMapper.deleteBisHiddRecRepByGuids(guids);
     }
     }
+
+    @Override
+    public int deleteBisHiddRecRepByRepGuid(String repGuid) {
+        return bisHiddRecRepMapper.deleteBisHiddRecRepByRepGuid(repGuid);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectBisHiddRecRepWithHiddByRepGuid(String repGuid) {
+        return bisHiddRecRepMapper.selectBisHiddRecRepWithHiddByRepGuid(repGuid);
+    }
 }
 }

+ 68 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/impl/BisOrgMonRepPeriServiceImpl.java

@@ -6,8 +6,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import com.goldenwater.slaj.hidd.mapper.BisOrgMonRepPeriMapper;
 import com.goldenwater.slaj.hidd.mapper.BisOrgMonRepPeriMapper;
+import com.goldenwater.slaj.hidd.mapper.BisHiddRecRepMapper;
 import com.goldenwater.slaj.hidd.domain.BisOrgMonRepPeri;
 import com.goldenwater.slaj.hidd.domain.BisOrgMonRepPeri;
+import com.goldenwater.slaj.hidd.domain.BisHiddRecRep;
 import com.goldenwater.slaj.hidd.service.IBisOrgMonRepPeriService;
 import com.goldenwater.slaj.hidd.service.IBisOrgMonRepPeriService;
 
 
 /**
 /**
@@ -19,6 +22,9 @@ public class BisOrgMonRepPeriServiceImpl implements IBisOrgMonRepPeriService {
     @Autowired
     @Autowired
     private BisOrgMonRepPeriMapper bisOrgMonRepPeriMapper;
     private BisOrgMonRepPeriMapper bisOrgMonRepPeriMapper;
 
 
+    @Autowired
+    private BisHiddRecRepMapper bisHiddRecRepMapper;
+
     @Override
     @Override
     public BisOrgMonRepPeri selectBisOrgMonRepPeriByGuid(String guid) {
     public BisOrgMonRepPeri selectBisOrgMonRepPeriByGuid(String guid) {
         return bisOrgMonRepPeriMapper.selectBisOrgMonRepPeriByGuid(guid);
         return bisOrgMonRepPeriMapper.selectBisOrgMonRepPeriByGuid(guid);
@@ -64,4 +70,66 @@ public class BisOrgMonRepPeriServiceImpl implements IBisOrgMonRepPeriService {
     public List<Map<String, Object>> selectMonthTotalList(Map<String, Object> params) {
     public List<Map<String, Object>> selectMonthTotalList(Map<String, Object> params) {
         return bisOrgMonRepPeriMapper.selectMonthTotalList(params);
         return bisOrgMonRepPeriMapper.selectMonthTotalList(params);
     }
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void submitMonth(String guid, String[] hiddGuids) {
+        BisOrgMonRepPeri period = bisOrgMonRepPeriMapper.selectBisOrgMonRepPeriByGuid(guid);
+        if (period == null) {
+            throw new RuntimeException("月报期间不存在");
+        }
+        if ("1".equals(period.getRepAct())) {
+            throw new RuntimeException("本月数据已上报,不允许重复上报");
+        }
+        // 删除该月报下原有上报记录
+        bisHiddRecRepMapper.deleteBisHiddRecRepByRepGuid(guid);
+        // 新增上报记录
+        if (hiddGuids != null) {
+            for (String hiddGuid : hiddGuids) {
+                BisHiddRecRep rec = new BisHiddRecRep();
+                rec.setHiddGuid(hiddGuid);
+                rec.setRepGuid(guid);
+                rec.setRepOrgGuid(period.getRepOrgGuid());
+                rec.setRepAct("1");
+                rec.setCollTime(java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                bisHiddRecRepMapper.insertBisHiddRecRep(rec);
+            }
+        }
+        // 更新月报状态为已上报
+        period.setRepAct("1");
+        period.setUpdTime(java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        bisOrgMonRepPeriMapper.updateBisOrgMonRepPeri(period);
+    }
+
+    @Override
+    public int returnMonth(String guid, String returnDesc) {
+        BisOrgMonRepPeri period = new BisOrgMonRepPeri();
+        period.setGuid(guid);
+        period.setRepAct("3");
+        period.setNote(returnDesc);
+        period.setUpdTime(java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        return bisOrgMonRepPeriMapper.updateBisOrgMonRepPeri(period);
+    }
+
+    @Override
+    public int revokeMonth(String guid) {
+        // 清除上报记录
+        bisHiddRecRepMapper.deleteBisHiddRecRepByRepGuid(guid);
+        // 更新月报状态为已撤销
+        BisOrgMonRepPeri period = new BisOrgMonRepPeri();
+        period.setGuid(guid);
+        period.setRepAct("2");
+        period.setUpdTime(java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        return bisOrgMonRepPeriMapper.updateBisOrgMonRepPeri(period);
+    }
+
+    @Override
+    public int approveRevoke(String guid, boolean approved, String opinion) {
+        BisOrgMonRepPeri period = new BisOrgMonRepPeri();
+        period.setGuid(guid);
+        period.setRepAct(approved ? "2" : "1");
+        period.setNote(opinion);
+        period.setUpdTime(java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        return bisOrgMonRepPeriMapper.updateBisOrgMonRepPeri(period);
+    }
 }
 }

+ 11 - 0
gw-slaj/src/main/java/com/goldenwater/slaj/hidd/service/impl/TBusiHiddCountServiceImpl.java

@@ -1,6 +1,7 @@
 package com.goldenwater.slaj.hidd.service.impl;
 package com.goldenwater.slaj.hidd.service.impl;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.goldenwater.slaj.hidd.mapper.TBusiHiddCountMapper;
 import com.goldenwater.slaj.hidd.mapper.TBusiHiddCountMapper;
@@ -75,4 +76,14 @@ public class TBusiHiddCountServiceImpl implements ITBusiHiddCountService {
     public int deleteTBusiHiddCountByIds(Long[] ids) {
     public int deleteTBusiHiddCountByIds(Long[] ids) {
         return tBusiHiddCountMapper.deleteTBusiHiddCountByIds(ids);
         return tBusiHiddCountMapper.deleteTBusiHiddCountByIds(ids);
     }
     }
+
+    @Override
+    public List<Map<String, Object>> selectReportRateChart(Map<String, Object> params) {
+        return tBusiHiddCountMapper.selectReportRateChart(params);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectRectifyRateChart(Map<String, Object> params) {
+        return tBusiHiddCountMapper.selectRectifyRateChart(params);
+    }
 }
 }

+ 21 - 0
gw-slaj/src/main/resources/mapper/slaj/acci/BisAcciAssessMapper.xml

@@ -75,4 +75,25 @@
             #{id}
             #{id}
         </foreach>
         </foreach>
     </delete>
     </delete>
+
+    <select id="selectAcciAssessRanking" parameterType="com.goldenwater.slaj.acci.domain.BisAcciAssess" resultType="java.util.LinkedHashMap">
+        select a.id,
+               a.org_guid as orgGuid,
+               a.org_name as orgName,
+               a.assess_year as assessYear,
+               a.assess_date_num as assessDateNum,
+               a.coeff_acci_score as coeffAcciScore,
+               a.coeff_acci_jumbo as coeffAcciJumbo,
+               a.coeff_acci_major as coeffAcciMajor,
+               a.coeff_acci_larger as coeffAcciLarger,
+               a.coeff_acci_normal as coeffAcciNormal
+        from bis_acci_assess a
+        <where>
+            <if test="assessYear != null">AND a.assess_year = #{assessYear}</if>
+            <if test="assessDateNum != null">AND a.assess_date_num = #{assessDateNum}</if>
+            <if test="orgGuid != null and orgGuid != ''">AND a.org_guid = #{orgGuid}</if>
+            <if test="unitRange != null">AND a.unit_range = #{unitRange}</if>
+        </where>
+        order by a.assess_year desc, a.assess_date_num desc, a.coeff_acci_score desc
+    </select>
 </mapper>
 </mapper>

+ 55 - 0
gw-slaj/src/main/resources/mapper/slaj/acci/ObjAcciMapper.xml

@@ -124,4 +124,59 @@
             #{guid}
             #{guid}
         </foreach>
         </foreach>
     </delete>
     </delete>
+
+    <select id="selectTrendChart" parameterType="java.util.Map" resultType="java.util.LinkedHashMap">
+        select substr(occu_time, 1, 7) as month,
+               count(1) as acciCount
+        from obj_acci
+        <where>
+            <if test="startTime != null and startTime != ''">AND occu_time &gt;= #{startTime}</if>
+            <if test="endTime != null and endTime != ''">AND occu_time &lt;= #{endTime}</if>
+            <if test="orgGuid != null and orgGuid != ''">AND org_guid = #{orgGuid}</if>
+        </where>
+        group by substr(occu_time, 1, 7)
+        order by month
+    </select>
+
+    <select id="selectCatePieChart" parameterType="java.util.Map" resultType="java.util.LinkedHashMap">
+        select acci_cate as name,
+               count(1) as value
+        from obj_acci
+        <where>
+            <if test="startTime != null and startTime != ''">AND occu_time &gt;= #{startTime}</if>
+            <if test="endTime != null and endTime != ''">AND occu_time &lt;= #{endTime}</if>
+            <if test="orgGuid != null and orgGuid != ''">AND org_guid = #{orgGuid}</if>
+        </where>
+        group by acci_cate
+        order by value desc
+    </select>
+
+    <select id="selectGradPieChart" parameterType="java.util.Map" resultType="java.util.LinkedHashMap">
+        select acci_grad as name,
+               count(1) as value
+        from obj_acci
+        <where>
+            <if test="startTime != null and startTime != ''">AND occu_time &gt;= #{startTime}</if>
+            <if test="endTime != null and endTime != ''">AND occu_time &lt;= #{endTime}</if>
+            <if test="orgGuid != null and orgGuid != ''">AND org_guid = #{orgGuid}</if>
+        </where>
+        group by acci_grad
+        order by value desc
+    </select>
+
+    <select id="selectGisData" parameterType="java.util.Map" resultType="java.util.LinkedHashMap">
+        select guid, acci_name as acciName, occu_long as occuLong, occu_lat as occuLat,
+               acci_cate as acciCate, acci_grad as acciGrad, occu_loc as occuLoc,
+               occu_time as occuTime, cas_num as casNum, ser_inj_num as serInjNum,
+               org_guid as orgGuid
+        from obj_acci
+        <where>
+            occu_long is not null and occu_lat is not null
+            and occu_long != '' and occu_lat != ''
+            <if test="startTime != null and startTime != ''">AND occu_time &gt;= #{startTime}</if>
+            <if test="endTime != null and endTime != ''">AND occu_time &lt;= #{endTime}</if>
+            <if test="orgGuid != null and orgGuid != ''">AND org_guid = #{orgGuid}</if>
+        </where>
+        order by occu_time desc
+    </select>
 </mapper>
 </mapper>

+ 21 - 0
gw-slaj/src/main/resources/mapper/slaj/hidd/BisHiddRecRepMapper.xml

@@ -57,4 +57,25 @@
             #{guid}
             #{guid}
         </foreach>
         </foreach>
     </delete>
     </delete>
+    <delete id="deleteBisHiddRecRepByRepGuid" parameterType="String">
+        delete from bis_hidd_rec_rep where rep_guid = #{repGuid}
+    </delete>
+
+    <resultMap type="java.util.Map" id="BisHiddRecRepWithHiddResult">
+        <result property="guid" column="guid"/>
+        <result property="hiddGuid" column="hidd_guid"/>
+        <result property="repGuid" column="rep_guid"/>
+        <result property="hiddName" column="hidd_name"/>
+        <result property="hiddGrad" column="hidd_grad"/>
+        <result property="hiddStat" column="hidd_stat"/>
+        <result property="proPart" column="pro_part"/>
+        <result property="collTime" column="coll_time"/>
+    </resultMap>
+    <select id="selectBisHiddRecRepWithHiddByRepGuid" parameterType="String" resultMap="BisHiddRecRepWithHiddResult">
+        SELECT r.guid, r.hidd_guid, r.rep_guid,
+               h.hidd_name, h.hidd_grad, h.hidd_stat, h.pro_part, r.coll_time
+        FROM bis_hidd_rec_rep r
+        LEFT JOIN obj_hidd h ON r.hidd_guid = h.guid
+        WHERE r.rep_guid = #{repGuid}
+    </select>
 </mapper>
 </mapper>

+ 1 - 1
gw-slaj/src/main/resources/mapper/slaj/hidd/BisOrgMonRepPeriMapper.xml

@@ -36,7 +36,7 @@
     </select>
     </select>
     <insert id="insertBisOrgMonRepPeri" parameterType="com.goldenwater.slaj.hidd.domain.BisOrgMonRepPeri">
     <insert id="insertBisOrgMonRepPeri" parameterType="com.goldenwater.slaj.hidd.domain.BisOrgMonRepPeri">
         insert into bis_org_mon_rep_peri (guid, rep_name, rep_act, url, rep_type, rep_time, start_date, end_date, rep_org_guid, note, coll_time, upd_time, rec_pers, lock_status)
         insert into bis_org_mon_rep_peri (guid, rep_name, rep_act, url, rep_type, rep_time, start_date, end_date, rep_org_guid, note, coll_time, upd_time, rec_pers, lock_status)
-        values (#{guid}, #{repName}, #{repAct}, #{url}, #{repType}, #{repTime}, #{startDate}, #{endDate}, #{repOrgGuid}, #{note}, #{collTime}, #{updTime}, #{recPers}, #{lockStatus}, )
+        values (#{guid}, #{repName}, #{repAct}, #{url}, #{repType}, #{repTime}, #{startDate}, #{endDate}, #{repOrgGuid}, #{note}, #{collTime}, #{updTime}, #{recPers}, #{lockStatus})
     </insert>
     </insert>
     <update id="updateBisOrgMonRepPeri" parameterType="com.goldenwater.slaj.hidd.domain.BisOrgMonRepPeri">
     <update id="updateBisOrgMonRepPeri" parameterType="com.goldenwater.slaj.hidd.domain.BisOrgMonRepPeri">
         update bis_org_mon_rep_peri
         update bis_org_mon_rep_peri

+ 22 - 0
gw-slaj/src/main/resources/mapper/slaj/hidd/TBusiHiddCountMapper.xml

@@ -67,4 +67,26 @@
             #{guid}
             #{guid}
         </foreach>
         </foreach>
     </delete>
     </delete>
+
+    <select id="selectReportRateChart" parameterType="java.util.Map" resultType="java.util.LinkedHashMap">
+        select c.org_guid as orgGuid,
+               c.pcl as rateData,
+               c.create_time as repTime
+        from t_busi_hidd_count c
+        <where>
+            <if test="repTime != null and repTime != ''">AND c.create_time = #{repTime}</if>
+        </where>
+        order by c.pcl desc
+    </select>
+
+    <select id="selectRectifyRateChart" parameterType="java.util.Map" resultType="java.util.LinkedHashMap">
+        select c.org_guid as orgGuid,
+               c.hidd_zgl as rateData,
+               c.create_time as repTime
+        from t_busi_hidd_count c
+        <where>
+            <if test="repTime != null and repTime != ''">AND c.create_time = #{repTime}</if>
+        </where>
+        order by c.hidd_zgl desc
+    </select>
 </mapper>
 </mapper>

+ 53 - 0
gw-ui/src/api/slaj/hidd.js

@@ -224,6 +224,14 @@ export function listBisHiddRecRep(query) {
   })
   })
 }
 }
 
 
+// 查询月报隐患列表(含隐患名称、等级等)
+export function listBisHiddRecRepWithHidd(repGuid) {
+  return request({
+    url: '/hidd/recrep/withHidd/' + repGuid,
+    method: 'get'
+  })
+}
+
 // 查询隐患记录上报详细
 // 查询隐患记录上报详细
 export function getBisHiddRecRep(guid) {
 export function getBisHiddRecRep(guid) {
   return request({
   return request({
@@ -301,6 +309,15 @@ export function delBisMajHiddSup(guids) {
   })
   })
 }
 }
 
 
+// 隐患督办销号
+export function writeOffBisMajHiddSup(data) {
+  return request({
+    url: '/hidd/majhiddsup/writeOff',
+    method: 'put',
+    data: data
+  })
+}
+
 // 查询重大隐患核实列表
 // 查询重大隐患核实列表
 export function listBisHiddMajVeri(query) {
 export function listBisHiddMajVeri(query) {
   return request({
   return request({
@@ -867,4 +884,40 @@ export function getMonthTotalList(query) {
   })
   })
 }
 }
 
 
+// 月报上报
+export function submitMonth(guid, hiddGuids) {
+  return request({
+    url: '/hidd/monrepperi/submit',
+    method: 'post',
+    params: { guid: guid, hiddGuids: hiddGuids.join(',') }
+  })
+}
+
+// 月报退回
+export function returnMonth(guid, returnDesc) {
+  return request({
+    url: '/hidd/monrepperi/return',
+    method: 'put',
+    params: { guid: guid, returnDesc: returnDesc }
+  })
+}
+
+// 月报撤销
+export function revokeMonth(guid) {
+  return request({
+    url: '/hidd/monrepperi/revoke',
+    method: 'put',
+    params: { guid: guid }
+  })
+}
+
+// 月报撤销审核
+export function approveRevoke(guid, approved, opinion) {
+  return request({
+    url: '/hidd/monrepperi/approveRevoke',
+    method: 'put',
+    params: { guid: guid, approved: approved, opinion: opinion }
+  })
+}
+
 
 

+ 113 - 0
gw-ui/src/views/slaj/hidd/inveAdd.vue

@@ -0,0 +1,113 @@
+<template>
+  <div class="app-container">
+    <el-card shadow="never">
+      <template #header>
+        <div class="card-header">
+          <span>新增隐患排查</span>
+          <el-button plain icon="ArrowLeft" @click="goBack">返回</el-button>
+        </div>
+      </template>
+      <el-form :model="form" :rules="rules" ref="inveRef" label-width="120px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="排查单位" prop="inspOrgGuid">
+              <el-input v-model="form.inspOrgGuid" placeholder="请输入排查单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="排查日期" prop="inspDate">
+              <el-date-picker v-model="form.inspDate" type="date" placeholder="请选择排查日期" value-format="YYYY-MM-DD" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="排查负责人" prop="inspLeader">
+              <el-input v-model="form.inspLeader" placeholder="请输入排查负责人" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="负责人职务" prop="inspLeaderPost">
+              <el-input v-model="form.inspLeaderPost" placeholder="请输入负责人职务" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="排查成员" prop="inspMem">
+              <el-input v-model="form.inspMem" placeholder="请输入排查成员" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="隐患内容" prop="hiddContent">
+              <el-input v-model="form.hiddContent" type="textarea" :rows="4" placeholder="请输入隐患内容" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="备注" prop="note">
+              <el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入备注" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div class="form-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="goBack">取 消</el-button>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script setup name="HiddInveAdd">
+import { addBisHiddInve } from "@/api/slaj/hidd"
+
+const { proxy } = getCurrentInstance()
+const route = useRoute()
+const router = useRouter()
+
+const form = ref({
+  hiddGuid: route.query.hiddGuid,
+  inspOrgGuid: undefined,
+  inspDate: undefined,
+  inspLeader: undefined,
+  inspLeaderPost: undefined,
+  inspMem: undefined,
+  hiddContent: undefined,
+  note: undefined
+})
+
+const rules = {
+  inspDate: [{ required: true, message: "排查日期不能为空", trigger: "change" }]
+}
+
+function submitForm() {
+  proxy.$refs["inveRef"].validate(valid => {
+    if (valid) {
+      addBisHiddInve(form.value).then(() => {
+        proxy.$modal.msgSuccess("新增成功")
+        goBack()
+      })
+    }
+  })
+}
+
+function goBack() {
+  router.push({ path: '/slaj/hidd/detail', query: { guid: form.value.hiddGuid } })
+}
+</script>
+
+<style scoped>
+.card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.form-footer {
+  text-align: center;
+  padding-top: 20px;
+}
+</style>

+ 22 - 22
gw-ui/src/views/slaj/hidd/monthDetail.vue

@@ -16,7 +16,7 @@
         <el-descriptions-item label="上报单位">{{ form.repOrgGuid }}</el-descriptions-item>
         <el-descriptions-item label="上报单位">{{ form.repOrgGuid }}</el-descriptions-item>
         <el-descriptions-item label="上报期间">{{ form.repPeri }}</el-descriptions-item>
         <el-descriptions-item label="上报期间">{{ form.repPeri }}</el-descriptions-item>
         <el-descriptions-item label="上报状态">
         <el-descriptions-item label="上报状态">
-          <dict-tag :options="rep_stat" :value="form.repStat" />
+          <dict-tag :options="rep_stat" :value="form.repAct" />
         </el-descriptions-item>
         </el-descriptions-item>
         <el-descriptions-item label="上报时间">{{ form.repTime }}</el-descriptions-item>
         <el-descriptions-item label="上报时间">{{ form.repTime }}</el-descriptions-item>
         <el-descriptions-item label="退回说明" :span="2">{{ form.returnDesc }}</el-descriptions-item>
         <el-descriptions-item label="退回说明" :span="2">{{ form.returnDesc }}</el-descriptions-item>
@@ -155,7 +155,7 @@
 </template>
 </template>
 
 
 <script setup name="MonthDetail">
 <script setup name="MonthDetail">
-import { getBisOrgMonRepPeri, updateBisOrgMonRepPeri } from "@/api/slaj/hidd"
+import { getBisOrgMonRepPeri, updateBisOrgMonRepPeri, submitMonth, returnMonth, revokeMonth, listBisHiddRecRepWithHidd } from "@/api/slaj/hidd"
 import { listObjHidd } from "@/api/slaj/hidd"
 import { listObjHidd } from "@/api/slaj/hidd"
 import { listAttMedBase, delAttMedBase } from "@/api/slaj/hidd"
 import { listAttMedBase, delAttMedBase } from "@/api/slaj/hidd"
 
 
@@ -168,6 +168,7 @@ const hiddList = ref([])
 const fileList = ref([])
 const fileList = ref([])
 const importList = ref([])
 const importList = ref([])
 const importSelection = ref([])
 const importSelection = ref([])
+const selectedHiddGuids = ref([])
 
 
 const hiddLoading = ref(false)
 const hiddLoading = ref(false)
 const fileLoading = ref(false)
 const fileLoading = ref(false)
@@ -210,9 +211,9 @@ function getInfo() {
 /** 查询月报隐患列表 */
 /** 查询月报隐患列表 */
 function getHiddList() {
 function getHiddList() {
   hiddLoading.value = true
   hiddLoading.value = true
-  listObjHidd({ repGuid: form.value.guid }).then(res => {
+  listBisHiddRecRepWithHidd(form.value.guid).then(res => {
     hiddLoading.value = false
     hiddLoading.value = false
-    hiddList.value = res.rows
+    hiddList.value = res.data
   })
   })
 }
 }
 
 
@@ -238,11 +239,8 @@ function handleReport() {
 function submitReport() {
 function submitReport() {
   proxy.$refs["reportRef"].validate(valid => {
   proxy.$refs["reportRef"].validate(valid => {
     if (valid) {
     if (valid) {
-      const data = {
-        guid: form.value.guid,
-        repStat: '1'
-      }
-      updateBisOrgMonRepPeri(data).then(response => {
+      const guids = selectedHiddGuids.value.length > 0 ? selectedHiddGuids.value : []
+      submitMonth(form.value.guid, guids).then(response => {
         proxy.$modal.msgSuccess("上报成功")
         proxy.$modal.msgSuccess("上报成功")
         reportOpen.value = false
         reportOpen.value = false
         getInfo()
         getInfo()
@@ -264,12 +262,7 @@ function handleReturn() {
 function submitReturn() {
 function submitReturn() {
   proxy.$refs["returnRef"].validate(valid => {
   proxy.$refs["returnRef"].validate(valid => {
     if (valid) {
     if (valid) {
-      const data = {
-        guid: form.value.guid,
-        repStat: '3',
-        returnDesc: returnForm.value.returnDesc
-      }
-      updateBisOrgMonRepPeri(data).then(response => {
+      returnMonth(form.value.guid, returnForm.value.returnDesc).then(response => {
         proxy.$modal.msgSuccess("退回成功")
         proxy.$modal.msgSuccess("退回成功")
         returnOpen.value = false
         returnOpen.value = false
         getInfo()
         getInfo()
@@ -291,11 +284,7 @@ function handleRevocation() {
 function submitRevocation() {
 function submitRevocation() {
   proxy.$refs["revocationRef"].validate(valid => {
   proxy.$refs["revocationRef"].validate(valid => {
     if (valid) {
     if (valid) {
-      const data = {
-        guid: form.value.guid,
-        repStat: '0'
-      }
-      updateBisOrgMonRepPeri(data).then(response => {
+      revokeMonth(form.value.guid).then(response => {
         proxy.$modal.msgSuccess("撤回成功")
         proxy.$modal.msgSuccess("撤回成功")
         revocationOpen.value = false
         revocationOpen.value = false
         getInfo()
         getInfo()
@@ -326,10 +315,21 @@ function submitImport() {
     proxy.$modal.msgError("请选择要导入的隐患")
     proxy.$modal.msgError("请选择要导入的隐患")
     return
     return
   }
   }
-  // 这里需要调用后端接口将隐患关联到月报
+  const existingHiddGuids = new Set(hiddList.value.map(h => h.hiddGuid))
+  for (const item of importSelection.value) {
+    if (!existingHiddGuids.has(item.guid)) {
+      hiddList.value.push({
+        hiddGuid: item.guid,
+        hiddName: item.hiddName,
+        hiddGrad: item.hiddGrad,
+        hiddStat: item.hiddStat,
+        proPart: item.proPart
+      })
+      selectedHiddGuids.value.push(item.guid)
+    }
+  }
   proxy.$modal.msgSuccess("导入成功")
   proxy.$modal.msgSuccess("导入成功")
   importOpen.value = false
   importOpen.value = false
-  getHiddList()
 }
 }
 
 
 /** 下载附件 */
 /** 下载附件 */

+ 114 - 0
gw-ui/src/views/slaj/hidd/rectImplAdd.vue

@@ -0,0 +1,114 @@
+<template>
+  <div class="app-container">
+    <el-card shadow="never">
+      <template #header>
+        <div class="card-header">
+          <span>新增整改落实</span>
+          <el-button plain icon="ArrowLeft" @click="goBack">返回</el-button>
+        </div>
+      </template>
+      <el-form :model="form" :rules="rules" ref="rectImplRef" label-width="140px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="整改责任单位" prop="goverRespWiunGuid">
+              <el-input v-model="form.goverRespWiunGuid" placeholder="请输入整改责任单位" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="整改责任人" prop="rectLegPers">
+              <el-input v-model="form.rectLegPers" placeholder="请输入整改责任人" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="联系电话" prop="rectPersOffiTel">
+              <el-input v-model="form.rectPersOffiTel" placeholder="请输入联系电话" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="要求完成日期" prop="requCompDate">
+              <el-date-picker v-model="form.requCompDate" type="date" placeholder="请选择要求完成日期" value-format="YYYY-MM-DD" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="整改资金" prop="acimpGoverFund">
+              <el-input-number v-model="form.acimpGoverFund" :min="0" :precision="2" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="整改措施" prop="corrMeas">
+              <el-input v-model="form.corrMeas" type="textarea" :rows="4" placeholder="请输入整改措施" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="备注" prop="note">
+              <el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入备注" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div class="form-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="goBack">取 消</el-button>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script setup name="HiddRectImplAdd">
+import { addBisHiddRectImpl } from "@/api/slaj/hidd"
+
+const { proxy } = getCurrentInstance()
+const route = useRoute()
+const router = useRouter()
+
+const form = ref({
+  hiddGuid: route.query.hiddGuid,
+  goverRespWiunGuid: undefined,
+  rectLegPers: undefined,
+  rectPersOffiTel: undefined,
+  requCompDate: undefined,
+  acimpGoverFund: undefined,
+  corrMeas: undefined,
+  note: undefined
+})
+
+const rules = {
+  rectLegPers: [{ required: true, message: "整改责任人不能为空", trigger: "blur" }],
+  requCompDate: [{ required: true, message: "要求完成日期不能为空", trigger: "change" }]
+}
+
+function submitForm() {
+  proxy.$refs["rectImplRef"].validate(valid => {
+    if (valid) {
+      addBisHiddRectImpl(form.value).then(() => {
+        proxy.$modal.msgSuccess("新增成功")
+        goBack()
+      })
+    }
+  })
+}
+
+function goBack() {
+  router.push({ path: '/slaj/hidd/detail', query: { guid: form.value.hiddGuid } })
+}
+</script>
+
+<style scoped>
+.card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.form-footer {
+  text-align: center;
+  padding-top: 20px;
+}
+</style>

+ 77 - 0
gw-ui/src/views/slaj/hidd/rectProgAdd.vue

@@ -0,0 +1,77 @@
+<template>
+  <div class="app-container">
+    <el-card shadow="never">
+      <template #header>
+        <div class="card-header">
+          <span>新增整改进展</span>
+          <el-button plain icon="ArrowLeft" @click="goBack">返回</el-button>
+        </div>
+      </template>
+      <el-form :model="form" :rules="rules" ref="rectProgRef" label-width="120px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="整改进展" prop="rectProg">
+              <el-input v-model="form.rectProg" type="textarea" :rows="4" placeholder="请输入整改进展情况" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="备注" prop="note">
+              <el-input v-model="form.note" type="textarea" :rows="2" placeholder="请输入备注" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div class="form-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="goBack">取 消</el-button>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script setup name="HiddRectProgAdd">
+import { addBisHiddRectProg } from "@/api/slaj/hidd"
+
+const { proxy } = getCurrentInstance()
+const route = useRoute()
+const router = useRouter()
+
+const form = ref({
+  hiddGuid: route.query.hiddGuid,
+  rectProg: undefined,
+  note: undefined
+})
+
+const rules = {
+  rectProg: [{ required: true, message: "整改进展不能为空", trigger: "blur" }]
+}
+
+function submitForm() {
+  proxy.$refs["rectProgRef"].validate(valid => {
+    if (valid) {
+      addBisHiddRectProg(form.value).then(() => {
+        proxy.$modal.msgSuccess("新增成功")
+        goBack()
+      })
+    }
+  })
+}
+
+function goBack() {
+  router.push({ path: '/slaj/hidd/detail', query: { guid: form.value.hiddGuid } })
+}
+</script>
+
+<style scoped>
+.card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.form-footer {
+  text-align: center;
+  padding-top: 20px;
+}
+</style>

+ 1 - 1
gw-ui/src/views/slaj/hidd/stat.vue

@@ -179,7 +179,7 @@ function resetQuery() {
 
 
 /** 详情按钮操作 */
 /** 详情按钮操作 */
 function handleDetail(row) {
 function handleDetail(row) {
-  proxy.$router.push({ path: '/slaj/hidd/countDetail', query: { orgGuid: row.orgGuid, statYear: row.statYear, statMonth: row.statMonth } })
+  proxy.$router.push({ path: '/slaj/hidd/detailCount', query: { orgGuid: row.orgGuid, statYear: row.statYear, statMonth: row.statMonth } })
 }
 }
 
 
 /** 导出按钮操作 */
 /** 导出按钮操作 */

+ 73 - 0
gw-ui/src/views/slaj/hidd/supDetail.vue

@@ -0,0 +1,73 @@
+<template>
+  <div class="app-container">
+    <el-card shadow="never">
+      <template #header>
+        <div class="card-header">
+          <span>督办详情</span>
+          <el-button plain icon="ArrowLeft" @click="goBack">返回</el-button>
+        </div>
+      </template>
+      <el-descriptions :column="2" border>
+        <el-descriptions-item label="隐患名称" :span="2">{{ form.hiddName }}</el-descriptions-item>
+        <el-descriptions-item label="隐患等级">
+          <dict-tag :options="hidd_grad" :value="form.hiddGrad" />
+        </el-descriptions-item>
+        <el-descriptions-item label="隐患状态">
+          <dict-tag :options="hidd_stat" :value="form.hiddStat" />
+        </el-descriptions-item>
+        <el-descriptions-item label="督办文号">{{ form.supLareId }}</el-descriptions-item>
+        <el-descriptions-item label="督办日期">{{ form.supDate }}</el-descriptions-item>
+        <el-descriptions-item label="督办单位">{{ form.supWiunCode }}</el-descriptions-item>
+        <el-descriptions-item label="督办负责人">{{ form.supLegPers }}</el-descriptions-item>
+        <el-descriptions-item label="整改期限">{{ form.rectPeri }}</el-descriptions-item>
+        <el-descriptions-item label="是否挂牌">
+          <dict-tag :options="sys_yes_no" :value="form.isList" />
+        </el-descriptions-item>
+        <el-descriptions-item label="督办意见" :span="2">{{ form.supOpin }}</el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2">{{ form.note }}</el-descriptions-item>
+      </el-descriptions>
+    </el-card>
+  </div>
+</template>
+
+<script setup name="HiddSupDetail">
+import { getBisMajHiddSup } from "@/api/slaj/hidd"
+import { getObjHidd } from "@/api/slaj/hidd"
+
+const { proxy } = getCurrentInstance()
+const route = useRoute()
+const router = useRouter()
+const { hidd_grad, hidd_stat, sys_yes_no } = proxy.useDict("hidd_grad", "hidd_stat", "sys_yes_no")
+
+const form = ref({})
+
+function getInfo() {
+  const guid = route.query.guid
+  if (guid) {
+    getBisMajHiddSup(guid).then(response => {
+      form.value = response.data
+      if (response.data.hiddGuid) {
+        getObjHidd(response.data.hiddGuid).then(hiddRes => {
+          form.value = { ...form.value, ...hiddRes.data }
+        })
+      }
+    })
+  }
+}
+
+function goBack() {
+  router.push({ path: '/slaj/hidd/supList' })
+}
+
+onMounted(() => {
+  getInfo()
+})
+</script>
+
+<style scoped>
+.card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+</style>

+ 2 - 2
gw-ui/src/views/slaj/hidd/supList.vue

@@ -97,7 +97,7 @@
 </template>
 </template>
 
 
 <script setup name="BisMajHiddSup">
 <script setup name="BisMajHiddSup">
-import { listBisMajHiddSup, getBisMajHiddSup, addBisMajHiddSup, updateBisMajHiddSup, delBisMajHiddSup } from "@/api/slaj/hidd"
+import { listBisMajHiddSup, getBisMajHiddSup, addBisMajHiddSup, updateBisMajHiddSup, delBisMajHiddSup, writeOffBisMajHiddSup } from "@/api/slaj/hidd"
 import { listObjHidd, getObjHidd } from "@/api/slaj/hidd"
 import { listObjHidd, getObjHidd } from "@/api/slaj/hidd"
 
 
 const { proxy } = getCurrentInstance()
 const { proxy } = getCurrentInstance()
@@ -205,7 +205,7 @@ function handleWriteOff(row) {
 }
 }
 
 
 function submitWriteOff() {
 function submitWriteOff() {
-  updateBisMajHiddSup({ guid: writeOffRow.value.guid, supStat: '3' }).then(response => {
+  writeOffBisMajHiddSup({ guid: writeOffRow.value.guid }).then(response => {
     proxy.$modal.msgSuccess("销号成功")
     proxy.$modal.msgSuccess("销号成功")
     writeOffOpen.value = false
     writeOffOpen.value = false
     getList()
     getList()