Browse Source

执法全过程记录,检查超期,检查时长功能开发

linjiawei 2 months ago
parent
commit
4727e4737d

+ 66 - 0
zfjg-api/zfjg-api-manage/src/main/java/com/zfjg/manage/api/dto/enforce/job/EnforceJobTimeoutDto.java

@@ -0,0 +1,66 @@
+package com.zfjg.manage.api.dto.enforce.job;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zfjg.common.core.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(description = "机构检查超期")
+public class EnforceJobTimeoutDto {
+    @ApiModelProperty(value = "主键id")
+    private Long id;
+
+    @Excel(name = "任务编号")
+    @ApiModelProperty(value = "任务编号")
+    private String jobNo;
+
+    @Excel(name = "执法机构")
+    @ApiModelProperty(value = "执法机构")
+    private String enforceOrgName;
+    /**
+     * 任务类型(NORMAL-日常检查,SPECIAL-专项,REPORT-举报,TOWNS-乡镇检查,OTHER-其他,REVIEW-复查,BRIGADE-总队督查)OTHER-其他)
+     */
+    @Excel(name = "任务类型")
+    @ApiModelProperty(value = "任务类型:NORMAL-日常检查,SPECIAL-专项检查,REPORT-举报检查,TOWNS-乡镇检查,OTHER-其他,REVIEW-复查,BRIGADE-总队督查)")
+    private String jobType;
+
+    @Excel(name = "合格情况")
+    @ApiModelProperty(value = "PASS-合格,NOT_PASS:不合格,OVERPASS-不检查")
+    private String enforceResult;
+
+    @Excel(name = "检查员")
+    @ApiModelProperty(value = "检察员名称,多个人名字用,隔开,顺序和id的顺序一致")
+    private String executorNames;
+
+    @Excel(name = "检查对象")
+    @ApiModelProperty(value = "检查对象")
+    private String enforceObjId;
+
+    @Excel(name = "检查对象名称")
+    @ApiModelProperty(value = "检查对象名称")
+    private String enforceObjName;
+
+    /**
+     * 结束执行任务时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "结束执行任务时间")
+    private Date finishTime;
+
+    @ApiModelProperty(value = "执法机构ID")
+    private String enforceOrgId;
+
+    /**
+     * 检查期限
+     */
+    @Excel(name = "检查期限")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "检查期限")
+    private Date lastEnforceDate;
+
+
+}

+ 28 - 0
zfjg-api/zfjg-api-manage/src/main/java/com/zfjg/manage/api/dto/enforce/job/EnforceOrgAverageTimeDto.java

@@ -0,0 +1,28 @@
+package com.zfjg.manage.api.dto.enforce.job;
+
+import com.zfjg.common.core.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class EnforceOrgAverageTimeDto {
+    @ApiModelProperty("执法机构id")
+    private String orgId;
+
+    @Excel(name = "执法机构")
+    @ApiModelProperty("执法机构")
+    private String orgName;
+
+    @Excel(name = "支队平均时长")
+    @ApiModelProperty("支队平均时长")
+    private String orgAvgTime;
+
+    @Excel(name = "总队平均时长")
+    @ApiModelProperty("总队平均时长")
+    private String headCorpsAvgTime;
+
+    @Excel(name = "视频时长与检查终端时长的比值")
+    @ApiModelProperty("视频时长与检查终端时长的比值")
+    private String rate;
+
+}

+ 33 - 0
zfjg-api/zfjg-api-manage/src/main/java/com/zfjg/manage/api/dto/enforce/job/EnforceOrgTimeoutDto.java

@@ -0,0 +1,33 @@
+package com.zfjg.manage.api.dto.enforce.job;
+
+import com.zfjg.common.core.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "机构检查超期")
+public class EnforceOrgTimeoutDto {
+    @ApiModelProperty("机构id")
+    private String orgId;
+
+    @Excel(name = "执法机构")
+    @ApiModelProperty("机构名称")
+    private String orgName;
+
+    @Excel(name = "双随机超期数")
+    @ApiModelProperty("双随机超期数")
+    private Integer normalCount;
+
+    @Excel(name = "复查超期数")
+    @ApiModelProperty("复查超期数")
+    private Integer reviewCount;
+
+    @Excel(name = "举报投诉超期数")
+    @ApiModelProperty("举报投诉超期数")
+    private Integer reportCount;
+
+    @Excel(name = "超期总数")
+    @ApiModelProperty("超期总数")
+    private Integer allCount;
+}

+ 71 - 0
zfjg-api/zfjg-api-manage/src/main/java/com/zfjg/manage/api/dto/enforce/job/EnforcementJobAverageTimeDTO.java

@@ -0,0 +1,71 @@
+package com.zfjg.manage.api.dto.enforce.job;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zfjg.common.core.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(description = "任务检查时长列表")
+public class EnforcementJobAverageTimeDTO {
+    @ApiModelProperty(value = "主键id")
+    private Long id;
+
+    @Excel(name = "任务编号")
+    @ApiModelProperty(value = "任务编号")
+    private String jobNo;
+
+
+    @Excel(name = "执法机构")
+    @ApiModelProperty(value = "执法机构名称")
+    private String enforceOrgName;
+    /**
+     * 任务类型(NORMAL-日常检查,SPECIAL-专项,REPORT-举报,TOWNS-乡镇检查,OTHER-其他,REVIEW-复查,BRIGADE-总队督查)OTHER-其他)
+     */
+    @Excel(name = "任务类型")
+    @ApiModelProperty(value = "任务类型:NORMAL-日常检查,SPECIAL-专项检查,REPORT-举报检查,TOWNS-乡镇检查,OTHER-其他,REVIEW-复查,BRIGADE-总队督查)")
+    private String jobType;
+
+    @Excel(name = "检查员")
+    @ApiModelProperty(value = "检察员名称,多个人名字用,隔开,顺序和id的顺序一致")
+    private String executorNames;
+
+    @ApiModelProperty(value = "检查对象")
+    private String enforceObjId;
+
+    @Excel(name = "检查对象名称")
+    @ApiModelProperty(value = "检查对象名称")
+    private String enforceObjName;
+
+    @Excel(name = "开始任务时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "开始任务时间")
+    private Date startTime;
+
+    @Excel(name = "结束任务时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "结束执行任务时间")
+    private Date finishTime;
+
+    @ApiModelProperty(value = "执法机构ID")
+    private String enforceOrgId;
+
+    @Excel(name = "移动端检查时长(分钟)")
+    @ApiModelProperty("支队平均时长")
+    private String orgAvgTime;
+
+    @Excel(name = "执法记录仪时长(分钟)")
+    @ApiModelProperty("总队平均时长")
+    private String headCorpsAvgTime;
+
+    @Excel(name = "视频时长与检查终端时长的比值")
+    @ApiModelProperty("视频时长与检查终端时长的比值")
+    private String rate;
+
+
+
+}

+ 67 - 0
zfjg-api/zfjg-api-manage/src/main/java/com/zfjg/manage/api/dto/enforce/job/EnforcementJobProcessDTO.java

@@ -0,0 +1,67 @@
+package com.zfjg.manage.api.dto.enforce.job;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zfjg.common.core.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(description = "机构执法全过程记录")
+public class EnforcementJobProcessDTO {
+    @ApiModelProperty(value = "主键id")
+    private Long id;
+
+    @Excel(name = "执法机构")
+    @ApiModelProperty(value = "任务编号")
+    private String jobNo;
+    /**
+     * 任务类型(NORMAL-日常检查,SPECIAL-专项,REPORT-举报,TOWNS-乡镇检查,OTHER-其他,REVIEW-复查,BRIGADE-总队督查)OTHER-其他)
+     */
+    @Excel(name = "任务类型")
+    @ApiModelProperty(value = "任务类型:NORMAL-日常检查,SPECIAL-专项检查,REPORT-举报检查,TOWNS-乡镇检查,OTHER-其他,REVIEW-复查,BRIGADE-总队督查)")
+    private String jobType;
+
+    @Excel(name = "合格情况")
+    @ApiModelProperty(value = "PASS-合格,NOT_PASS:不合格,OVERPASS-不检查")
+    private String enforceResult;
+
+    @Excel(name = "检查员")
+    @ApiModelProperty(value = "检察员名称,多个人名字用,隔开,顺序和id的顺序一致")
+    private String executorNames;
+
+    @Excel(name = "检查对象")
+    @ApiModelProperty(value = "检查对象")
+    private String enforceObjId;
+
+    @Excel(name = "检查对象名称")
+    @ApiModelProperty(value = "检查对象名称")
+    private String enforceObjName;
+
+    /**
+     * 结束执行任务时间
+     */
+    @Excel(name = "结束执行任务时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "结束执行任务时间")
+    private Date finishTime;
+
+    @ApiModelProperty(value = "执法机构ID")
+    private String enforceOrgId;
+
+    @Excel(name = "执法机构")
+    @ApiModelProperty(value = "执法机构名称")
+    private String enforceOrgName;
+
+    @Excel(name = "视频数量")
+    @ApiModelProperty(value = "视频数量(是否关联通过视频数量判断,大于0关联,否则未关联)")
+    private Integer videoNum;
+
+    @Excel(name = "是否关联")
+    private String relate;
+
+
+}

+ 30 - 0
zfjg-api/zfjg-api-manage/src/main/java/com/zfjg/manage/api/dto/enforce/job/EnforcementJobProcessQuery.java

@@ -0,0 +1,30 @@
+package com.zfjg.manage.api.dto.enforce.job;
+
+import com.zfjg.common.core.web.page.PageQuery;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("高楼码查询建筑的查询条件")
+public class EnforcementJobProcessQuery extends PageQuery {
+
+    @ApiModelProperty(value = "执法机构ID")
+    private String enforceOrgId;
+
+    @ApiModelProperty(value = "检察员id")
+    private String executorId;
+
+    @ApiModelProperty(value = "任务类型:NORMAL-日常检查,SPECIAL-专项检查,REPORT-举报检查,TOWNS-乡镇检查,OTHER-其他,REVIEW-复查,BRIGADE-总队督查)")
+    private String jobType;
+
+    @ApiModelProperty(value = "是否关联")
+    private Boolean relate;
+
+    @ApiModelProperty(value = "开始时间")
+    private String startDate;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endDate;
+
+}

+ 30 - 0
zfjg-api/zfjg-api-manage/src/main/java/com/zfjg/manage/api/dto/enforce/job/EnforcementOrgProcess.java

@@ -0,0 +1,30 @@
+package com.zfjg.manage.api.dto.enforce.job;
+
+
+import com.zfjg.common.core.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "机构执法全过程记录")
+public class EnforcementOrgProcess {
+    @ApiModelProperty("机构id")
+    private String orgId;
+
+    @Excel(name = "执法机构")
+    @ApiModelProperty("机构名称")
+    private String orgName;
+
+    @Excel(name = "检查数量")
+    @ApiModelProperty("检查数量")
+    private Long checkNumber;
+
+    @Excel(name = "关联数量")
+    @ApiModelProperty("关联数量")
+    private String relationNumber;
+
+    @Excel(name = "关联率")
+    @ApiModelProperty("关联率")
+    private String relationRate;
+}

+ 196 - 0
zfjg-modules/zfjg-manage/src/main/java/com/zfjg/manage/controller/enforce/job/EnforceSuperviseController.java

@@ -0,0 +1,196 @@
+package com.zfjg.manage.controller.enforce.job;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.zfjg.common.core.domain.R;
+import com.zfjg.common.core.utils.poi.ExcelUtil;
+import com.zfjg.common.core.web.page.TableInfo;
+import com.zfjg.manage.api.dto.enforce.job.*;
+import com.zfjg.manage.api.search.random.RandomTaskViewQuery;
+import com.zfjg.manage.api.vo.random.DailyCheckRule;
+import com.zfjg.manage.mapper.enforce.job.EnforceSuperviseMapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+import static com.zfjg.common.core.utils.PageUtils.startPage;
+
+/**
+ * @Author: ljw
+ * @CreateTime: 2024-12-11
+ * @Description:
+ */
+@RestController
+@RequestMapping("/supervise")
+@Api(tags = "执法监督")
+@Slf4j
+public class EnforceSuperviseController {
+
+    @Resource
+    private EnforceSuperviseMapper enforceSuperviseMapper;
+
+    @ApiOperation(value = "获取执法记录全过程")
+    @GetMapping("/enforcement/process")
+    public R<List<EnforcementOrgProcess>> selectEnforcementProcess(EnforcementJobProcessQuery query) {
+        List<EnforcementOrgProcess> enforcementProcess = enforceSuperviseMapper.selectEnforcementProcess(query);
+        return R.ok(enforcementProcess);
+    }
+
+
+    @ApiOperation(value = "获取执法记录全过程导出")
+    @GetMapping(value = "/enforcement/process/export")
+    public void selectEnforcementProcessExport(HttpServletResponse response, EnforcementJobProcessQuery query) {
+        List<EnforcementOrgProcess> enforcementProcess = enforceSuperviseMapper.selectEnforcementProcess(query);
+        if(com.zfjg.common.core.utils.StringUtils.isEmpty(enforcementProcess)){
+            return;
+        }
+        ExcelUtil<EnforcementOrgProcess> util = new ExcelUtil<EnforcementOrgProcess>(EnforcementOrgProcess.class);
+        util.exportExcel(response, enforcementProcess, "执法全过程记录", "执法全过程记录");
+    }
+
+    @ApiOperation(value = "获取执法记录全过程的任务列表(分页)")
+    @GetMapping("/enforcement/process/joblist")
+    public TableInfo<EnforcementJobProcessDTO> getEnforcementJobProcessList(EnforcementJobProcessQuery query) {
+        startPage();
+        List<EnforcementJobProcessDTO> list = enforceSuperviseMapper.getEnforcementJobProcessList(query);
+        return new TableInfo<>(list);
+    }
+
+    @ApiOperation(value = "获取执法记录全过程的任务列表导出")
+    @GetMapping(value = "/enforcement/process/joblist/export")
+    public void getEnforcementJobProcessListExport(HttpServletResponse response, EnforcementJobProcessQuery query) {
+        startPage();
+        List<EnforcementJobProcessDTO> list = enforceSuperviseMapper.getEnforcementJobProcessList(query);
+        if(com.zfjg.common.core.utils.StringUtils.isEmpty(list)){
+            return;
+        }
+        ExcelUtil<EnforcementJobProcessDTO> util = new ExcelUtil<EnforcementJobProcessDTO>(EnforcementJobProcessDTO.class);
+        util.exportExcel(response, list, "执法全过程记录列表", "执法全过程记录列表");
+    }
+
+    @ApiOperation(value = "检查超期列表(分页)")
+    @GetMapping("/enforcement/timeout/joblist")
+    public TableInfo<EnforceJobTimeoutDto> getEnforcementJobTimeOutList(EnforcementJobProcessQuery query) {
+        startPage();
+        List<EnforceJobTimeoutDto> list = enforceSuperviseMapper.getEnforcementJobTimeOutList(query);
+        return new TableInfo<>(list);
+    }
+
+    @ApiOperation(value = "检查超期列表导出")
+    @GetMapping(value = "/enforcement/timeout/joblist/export")
+    public void getEnforcementJobTimeOutListExport(HttpServletResponse response, EnforcementJobProcessQuery query) {
+        startPage();
+        List<EnforceJobTimeoutDto> list = enforceSuperviseMapper.getEnforcementJobTimeOutList(query);
+        if(com.zfjg.common.core.utils.StringUtils.isEmpty(list)){
+            return;
+        }
+        ExcelUtil<EnforceJobTimeoutDto> util = new ExcelUtil<EnforceJobTimeoutDto>(EnforceJobTimeoutDto.class);
+        util.exportExcel(response, list, "检查超期列表", "检查超期列表");
+    }
+
+
+    @ApiOperation(value = "检查超期")
+    @GetMapping("/enforcement/timeout")
+    public R<List<EnforceOrgTimeoutDto>> selectEnforceTimeout(EnforcementJobProcessQuery query) {
+        List<EnforceOrgTimeoutDto> enforceTimeouts = enforceSuperviseMapper.selectEnforceTimeout(query);
+        return R.ok(enforceTimeouts);
+    }
+
+    @ApiOperation(value = "检查超期导出")
+    @GetMapping(value = "/enforcement/timeout/export")
+    public void selectEnforceTimeoutExport(HttpServletResponse response, EnforcementJobProcessQuery query) {
+        List<EnforceOrgTimeoutDto> enforceTimeouts = enforceSuperviseMapper.selectEnforceTimeout(query);
+        if(com.zfjg.common.core.utils.StringUtils.isEmpty(enforceTimeouts)){
+            return;
+        }
+        ExcelUtil<EnforceOrgTimeoutDto> util = new ExcelUtil<EnforceOrgTimeoutDto>(EnforceOrgTimeoutDto.class);
+        util.exportExcel(response, enforceTimeouts, "检查超期", "检查超期");
+    }
+
+    @ApiOperation(value = "检查时长")
+    @GetMapping("/enforcement/average-time")
+    public R<List<EnforceOrgAverageTimeDto>> selectEnforceAverageTime(EnforcementJobProcessQuery query) {
+        List<EnforceOrgAverageTimeDto> enforceAverageTimes = enforceSuperviseMapper.selectEnforceAverageTime(query);
+        EnforceOrgAverageTimeDto enforceAverageTimeDto = new EnforceOrgAverageTimeDto();
+        enforceAverageTimeDto.setOrgName("重庆市消防救援总队");
+        double orgAvgTime = 0;
+        double headCorpsAvgTime = 0;
+        double rate = 0;
+        for (EnforceOrgAverageTimeDto dto : enforceAverageTimes) {
+            if (StringUtils.isNotEmpty(dto.getOrgAvgTime())) {
+                orgAvgTime += Double.valueOf(dto.getOrgAvgTime());
+            }
+            if (StringUtils.isNotEmpty(dto.getHeadCorpsAvgTime())) {
+                headCorpsAvgTime += Double.valueOf(dto.getHeadCorpsAvgTime());
+            }
+            if (StringUtils.isNotEmpty(dto.getRate())) {
+                rate += Double.valueOf(dto.getRate());
+            }
+        }
+        if (CollectionUtils.isNotEmpty(enforceAverageTimes)) {
+            enforceAverageTimeDto.setOrgAvgTime(String.format("%.2f", orgAvgTime/enforceAverageTimes.size()));
+            enforceAverageTimeDto.setHeadCorpsAvgTime(String.format("%.2f", headCorpsAvgTime/enforceAverageTimes.size()));
+            enforceAverageTimeDto.setRate(String.format("%.2f", rate/enforceAverageTimes.size()));
+        }
+        enforceAverageTimes.add(0,enforceAverageTimeDto);
+        return R.ok(enforceAverageTimes);
+    }
+
+    @ApiOperation(value = "检查时长导出")
+    @GetMapping(value = "/enforcement/average-time/export")
+    public void selectEnforceAverageTimeExport(HttpServletResponse response, EnforcementJobProcessQuery query) {
+        List<EnforceOrgAverageTimeDto> enforceAverageTimes = enforceSuperviseMapper.selectEnforceAverageTime(query);
+        EnforceOrgAverageTimeDto enforceAverageTimeDto = new EnforceOrgAverageTimeDto();
+        enforceAverageTimeDto.setOrgName("重庆市消防救援总队");
+        double orgAvgTime = 0;
+        double headCorpsAvgTime = 0;
+        double rate = 0;
+        for (EnforceOrgAverageTimeDto dto : enforceAverageTimes) {
+            if (StringUtils.isNotEmpty(dto.getOrgAvgTime())) {
+                orgAvgTime += Double.valueOf(dto.getOrgAvgTime());
+            }
+            if (StringUtils.isNotEmpty(dto.getHeadCorpsAvgTime())) {
+                headCorpsAvgTime += Double.valueOf(dto.getHeadCorpsAvgTime());
+            }
+            if (StringUtils.isNotEmpty(dto.getRate())) {
+                rate += Double.valueOf(dto.getRate());
+            }
+        }
+        if (CollectionUtils.isNotEmpty(enforceAverageTimes)) {
+            enforceAverageTimeDto.setOrgAvgTime(String.format("%.2f", orgAvgTime/enforceAverageTimes.size()));
+            enforceAverageTimeDto.setHeadCorpsAvgTime(String.format("%.2f", headCorpsAvgTime/enforceAverageTimes.size()));
+            enforceAverageTimeDto.setRate(String.format("%.2f", rate/enforceAverageTimes.size()));
+        }
+        enforceAverageTimes.add(0,enforceAverageTimeDto);
+
+        ExcelUtil<EnforceOrgAverageTimeDto> util = new ExcelUtil<EnforceOrgAverageTimeDto>(EnforceOrgAverageTimeDto.class);
+        util.exportExcel(response, enforceAverageTimes, "检查时长", "检查时长");
+    }
+
+
+
+    @ApiOperation(value = "检查时长列表(分页)")
+    @GetMapping("/enforcement/org/average-time")
+    public TableInfo<EnforcementJobAverageTimeDTO> selectEnforceJobAverageTime(EnforcementJobProcessQuery query) {
+        startPage();
+        List<EnforcementJobAverageTimeDTO> list = enforceSuperviseMapper.selectEnforceJobAverageTime(query);
+        return new TableInfo<>(list);
+    }
+
+
+    @ApiOperation(value = "检查时长列表导出")
+    @GetMapping(value = "//enforcement/org/average-time/export")
+    public void selectEnforceJobAverageTimeExport(HttpServletResponse response, EnforcementJobProcessQuery query) {
+        startPage();
+        List<EnforcementJobAverageTimeDTO> list = enforceSuperviseMapper.selectEnforceJobAverageTime(query);
+        ExcelUtil<EnforcementJobAverageTimeDTO> util = new ExcelUtil<EnforcementJobAverageTimeDTO>(EnforcementJobAverageTimeDTO.class);
+        util.exportExcel(response, list, "检查时长列表", "检查时长列表");
+    }
+
+
+}

+ 31 - 0
zfjg-modules/zfjg-manage/src/main/java/com/zfjg/manage/mapper/enforce/job/EnforceSuperviseMapper.java

@@ -0,0 +1,31 @@
+package com.zfjg.manage.mapper.enforce.job;
+
+import com.zfjg.manage.api.dto.enforce.job.*;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * @Author: ljw
+ * @CreateTime: 2024-12-11
+ * @Description: 执法监督
+ */
+@Mapper
+public interface EnforceSuperviseMapper {
+
+    List<EnforcementOrgProcess> selectEnforcementProcess(@Param("pm") EnforcementJobProcessQuery query);
+
+    List<EnforceOrgTimeoutDto>  selectEnforceTimeout(@Param("pm") EnforcementJobProcessQuery query);
+
+    List<EnforceJobTimeoutDto> getEnforcementJobTimeOutList(@Param("pm")EnforcementJobProcessQuery query);
+
+    List<EnforceOrgAverageTimeDto> selectEnforceAverageTime(@Param("pm")EnforcementJobProcessQuery query);
+
+    List<EnforcementJobProcessDTO> getEnforcementJobProcessList(@Param("pm")EnforcementJobProcessQuery query);
+
+    List<EnforcementJobAverageTimeDTO> selectEnforceJobAverageTime(@Param("pm")EnforcementJobProcessQuery query);
+
+
+}

+ 334 - 0
zfjg-modules/zfjg-manage/src/main/resources/mapper/enforce/job/EnforceSuperviseMapper.xml

@@ -0,0 +1,334 @@
+<?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.zfjg.manage.mapper.enforce.job.EnforceSuperviseMapper">
+
+
+    <resultMap id="EnforcementProcessResultMap" type="com.zfjg.manage.api.dto.enforce.job.EnforcementOrgProcess">
+        <id property="orgId" column="orgId"/>
+        <result property="orgName" column="orgName"/>
+        <result property="checkNumber" column="checkNumber"/>
+        <result property="relationNumber" column="relationNumber"/>
+        <result property="relationRate" column="relationRate"/>
+    </resultMap>
+
+    <resultMap id="EnforceTimeoutDtoResultMap" type="com.zfjg.manage.api.dto.enforce.job.EnforceOrgTimeoutDto">
+        <id property="orgId" column="orgId"/>
+        <result property="orgName" column="orgName"/>
+        <result property="normalCount" column="normalCount"/>
+        <result property="reviewCount" column="reviewCount"/>
+        <result property="reportCount" column="reportCount"/>
+        <result property="allCount" column="allCount"/>
+    </resultMap>
+
+
+    <resultMap id="EnforceAverageTimeDtoResultMap" type="com.zfjg.manage.api.dto.enforce.job.EnforceOrgAverageTimeDto">
+        <id property="orgId" column="orgId"/>
+        <result property="orgName" column="orgName"/>
+        <result property="orgAvgTime" column="orgAvgTime"/>
+        <result property="headCorpsAvgTime" column="headCorpsAvgTime"/>
+        <result property="rate" column="rate"/>
+    </resultMap>
+
+    <select id="selectEnforcementProcess" resultMap="EnforcementProcessResultMap">
+        SELECT
+            enforce_org_id orgId,
+            enforce_org_name orgName,
+            count( * ) checkNumber,
+            sum( relationNumber ) relationNumber,
+            round( sum( relationNumber ) / count( * ) * 100, 2 ) relationRate
+        FROM
+            (
+                SELECT
+                    a.ID,
+                    a.enforce_org_id,
+                    a.enforce_org_name,
+                    (CASE WHEN ( SELECT count( * ) FROM enforce_video C WHERE c.is_deleted = 0 AND c.enfore_job_id = a.id ) <![CDATA[ > ]]> 0
+                     THEN '1' ELSE '0' END ) relationNumber
+                FROM
+                    enforce_job a
+                WHERE
+                    a.is_deleted = '0'
+                  AND a.enforce_org_id != '55c99876ec0f425aac6925a92cceeb17'
+	             AND job_status = 'ARCHIVED'
+                <if test="pm.enforceOrgId  != null  and pm.enforceOrgId != ''">
+                    and a.enforce_org_id = #{pm.enforceOrgId}
+                </if>
+                <if test="pm.startDate != null and pm.startDate !=''">
+                    AND a.finish_time <![CDATA[ >= ]]> #{pm.startDate}
+                </if>
+                <if test="pm.endDate != null and pm.endDate !=''">
+                    AND a.finish_time <![CDATA[ <= ]]> #{pm.endDate}
+                </if>
+            ) r
+        GROUP BY
+            enforce_org_id
+        order by relationRate,enforce_org_id
+    </select>
+
+    <select id="getEnforcementJobProcessList" resultType="com.zfjg.manage.api.dto.enforce.job.EnforcementJobProcessDTO">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    ej.id,
+                    ej.job_no,
+                    ej.job_type,
+                    ej.enforce_result,
+                    ej.executor_names,
+                    ej.finish_time,
+                    ej.enforce_obj_id,
+                    ej.enforce_obj_name,
+                    ej.enforce_org_id,
+                    ej.enforce_org_name,
+                    ( SELECT count( 1 ) FROM enforce_video ev WHERE ev.is_deleted = 0 AND ev.enfore_job_id = ej.id ) videoNum
+                FROM
+                    enforce_job ej
+                WHERE
+                    ej.is_deleted = 0 AND ej.job_status = 'ARCHIVED'
+            <if test="pm.enforceOrgId  != null  and pm.enforceOrgId != ''">
+                and ej.enforce_org_id = #{pm.enforceOrgId}
+            </if>
+            <if test="pm.executorId  != null  and pm.executorId != ''">
+                and ${pm.executorId} in (ej.executor_ids)
+            </if>
+            <if test="pm.jobType  != null  and pm.jobType != ''">
+                and ej.job_type = #{pm.jobType}
+            </if>
+            <if test="pm.startDate != null and pm.startDate !=''">
+                AND ej.finish_time <![CDATA[ >= ]]> #{pm.startDate}
+            </if>
+            <if test="pm.endDate != null and pm.endDate !=''">
+                AND ej.finish_time <![CDATA[ <= ]]> #{pm.endDate}
+            </if>
+            ) t
+        <if test="pm.relate  != null and pm.relate == true">
+            where t.videoNum > 0
+        </if>
+        <if test="pm.relate  != null and pm.relate == false">
+            where t.videoNum = 0
+        </if>
+        order by t.videoNum,finish_time desc
+    </select>
+
+    <select id="selectEnforceTimeout" resultMap="EnforceTimeoutDtoResultMap">
+        SELECT
+            *,
+            ( normalCount + reviewCount + reportCount ) AS allCount
+        FROM
+            (
+                SELECT
+                    eo.id,
+                    eo.enforce_org_id orgId,
+                    eo.enforce_org_name orgName,
+                    (
+                        SELECT
+                            count( 1 )
+                        FROM
+                            enforce_job a
+                        WHERE
+                            a.enforce_org_id = eo.enforce_org_id
+                          AND job_type = 'NORMAL'
+                          AND time_out = 1
+                          AND a.is_deleted = 0
+                        <if test="pm.startDate != null and pm.startDate !=''">
+                            AND a.last_enforce_date <![CDATA[ >= ]]> #{pm.startDate}
+                        </if>
+                        <if test="pm.endDate != null and pm.endDate !=''">
+                            AND a.last_enforce_date <![CDATA[ <= ]]> #{pm.endDate}
+                        </if>
+                    ) normalCount,
+                    (
+                        SELECT
+                            count( 1 )
+                        FROM
+                            enforce_job a
+                        WHERE
+                            a.enforce_org_id = eo.enforce_org_id
+                          AND job_type = 'REVIEW'
+                          AND time_out = 1
+                          AND a.is_deleted = 0
+                        <if test="pm.startDate != null and pm.startDate !=''">
+                            AND a.last_enforce_date <![CDATA[ >= ]]> #{pm.startDate}
+                        </if>
+                        <if test="pm.endDate != null and pm.endDate !=''">
+                            AND a.last_enforce_date <![CDATA[ <= ]]> #{pm.endDate}
+                        </if>
+                    ) reviewCount,
+                    (
+                        SELECT
+                            count( 1 )
+                        FROM
+                            enforce_job a
+                        WHERE
+                            a.enforce_org_id = eo.enforce_org_id
+                          AND job_type = 'REPORT'
+                          AND time_out = 1
+                          AND a.is_deleted = 0
+                            <if test="pm.startDate != null and pm.startDate !=''">
+                                AND a.last_enforce_date <![CDATA[ >= ]]> #{pm.startDate}
+                            </if>
+                            <if test="pm.endDate != null and pm.endDate !=''">
+                                AND a.last_enforce_date <![CDATA[ <= ]]> #{pm.endDate}
+                            </if>
+                    ) reportCount
+                FROM
+                    enforce_organize eo
+                WHERE
+                    eo.is_deleted = 0
+                  AND eo.enforce_org_id != '55c99876ec0f425aac6925a92cceeb17'
+                <if test="pm.enforceOrgId  != null  and pm.enforceOrgId != ''">
+                    and ej.enforce_org_id = #{pm.enforceOrgId}
+                </if>
+            ) t
+        ORDER BY
+        allCount DESC,
+            orgId
+    </select>
+
+
+    <select id="getEnforcementJobTimeOutList" resultType="com.zfjg.manage.api.dto.enforce.job.EnforceJobTimeoutDto">
+        SELECT
+        *
+        FROM
+        (
+        SELECT
+        ej.id,
+        ej.job_no,
+        ej.job_type,
+        ej.enforce_result,
+        ej.executor_names,
+        ej.finish_time,
+        ej.enforce_obj_id,
+        ej.enforce_obj_name,
+        ej.enforce_org_id,
+        ej.enforce_org_name,
+        ej.last_enforce_date
+        FROM
+        enforce_job ej
+        WHERE
+        ej.is_deleted = 0
+        AND ej.job_type in ('REPORT','NORMAL','REVIEW')
+        AND ej.time_out = 1
+        <if test="pm.enforceOrgId  != null  and pm.enforceOrgId != ''">
+            and ej.enforce_org_id = #{pm.enforceOrgId}
+        </if>
+        <if test="pm.executorId  != null  and pm.executorId != ''">
+            and ${pm.executorId} in (ej.executor_ids)
+        </if>
+        <if test="pm.jobType  != null  and pm.jobType != ''">
+            and ej.job_type = #{pm.jobType}
+        </if>
+        <if test="pm.startDate != null and pm.startDate !=''">
+            AND ej.last_enforce_date <![CDATA[ >= ]]> #{pm.startDate}
+        </if>
+        <if test="pm.endDate != null and pm.endDate !=''">
+            AND ej.last_enforce_date <![CDATA[ <= ]]> #{pm.endDate}
+        </if>
+        ) t
+        order by t.last_enforce_date asc
+    </select>
+
+    <select id="selectEnforceAverageTime" resultMap="EnforceAverageTimeDtoResultMap">
+        SELECT
+            *,
+            round( ( headCorpsAvgTime / orgAvgTime ) * 100, 2 ) rate
+        FROM
+            (
+                SELECT
+                    a.enforce_org_id orgId,
+                     a.enforce_org_name orgName,
+                    round( sum( a.time_consuming / 1000 / 60 ) / count( * ), 2 ) orgAvgTime,
+                    round(
+                                sum(
+                                        (
+                                            SELECT
+                                                sum( CASE WHEN media_id = '-1' THEN duration ELSE TIMESTAMPDIFF( SECOND, video_begin_time, video_end_time ) END ) zfzsc
+                                            FROM
+                                                enforce_video C
+                                            WHERE
+                                                c.is_deleted = 0
+                                              AND c.enfore_job_id = a.id
+                                        )
+                                    ) / count( * ) / 60,
+                                2
+                        ) headCorpsAvgTime
+                FROM
+                    enforce_job a
+                WHERE
+                    a.is_deleted = '0'
+                  AND a.job_status = 'ARCHIVED'
+                  AND a.enforce_org_id != '55c99876ec0f425aac6925a92cceeb17'
+                  AND a.job_type = 'NORMAL'
+                  and a.time_consuming <![CDATA[ <= ]]> 28800000
+                <if test="pm.enforceOrgId  != null  and pm.enforceOrgId != ''">
+                    and a.enforce_org_id = #{pm.enforceOrgId}
+                </if>
+                <if test="pm.startDate != null and pm.startDate !=''">
+                    AND a.finish_time <![CDATA[ >= ]]> #{pm.startDate}
+                </if>
+                <if test="pm.endDate != null and pm.endDate !=''">
+                    AND a.finish_time <![CDATA[ <= ]]> #{pm.endDate}
+                </if>
+                GROUP BY
+                a.enforce_org_id
+            ) t
+        ORDER BY
+            rate,orgId
+    </select>
+
+
+    <select id="selectEnforceJobAverageTime" resultType="com.zfjg.manage.api.dto.enforce.job.EnforcementJobAverageTimeDTO">
+        SELECT
+        *,round( ( headCorpsAvgTime / orgAvgTime ) * 100, 2 ) rate
+        FROM
+        (
+        SELECT
+        ej.id,
+        ej.job_no,
+        ej.job_type,
+        ej.enforce_result,
+        ej.executor_names,
+        ej.finish_time,
+        ej.enforce_obj_id,
+        ej.enforce_obj_name,
+        ej.enforce_org_id,
+        ej.enforce_org_name,
+        round( sum( time_consuming / 1000 / 60 ) / count( * ), 2 ) orgAvgTime,
+        round(
+        sum(
+        (
+        SELECT
+        sum( CASE WHEN media_id = '-1' THEN duration ELSE TIMESTAMPDIFF( SECOND, video_begin_time, video_end_time ) END ) zfzsc
+        FROM
+        enforce_video C
+        WHERE
+        c.is_deleted = 0
+        AND c.enfore_job_id = ej.id
+        )
+        ) / count( * ) / 60,
+        2
+        ) headCorpsAvgTime
+        FROM
+        enforce_job ej
+        WHERE
+        ej.is_deleted = 0 AND ej.job_status = 'ARCHIVED' and ej.time_consuming <![CDATA[ <= ]]> 28800000    and  ej.job_type = 'NORMAL'
+        <if test="pm.enforceOrgId  != null  and pm.enforceOrgId != ''">
+            and ej.enforce_org_id = #{pm.enforceOrgId}
+        </if>
+        <if test="pm.executorId  != null  and pm.executorId != ''">
+            and ${pm.executorId} in (ej.executor_ids)
+        </if>
+        <if test="pm.jobType  != null  and pm.jobType != ''">
+            and ej.job_type = #{pm.jobType}
+        </if>
+        <if test="pm.startDate != null and pm.startDate !=''">
+            AND ej.finish_time <![CDATA[ >= ]]> #{pm.startDate}
+        </if>
+        <if test="pm.endDate != null and pm.endDate !=''">
+            AND ej.finish_time <![CDATA[ <= ]]> #{pm.endDate}
+        </if>
+        ) t order by rate
+    </select>
+
+</mapper>