From 4dd0448031f3af6962ba70235d91b1e4eff3ca6f Mon Sep 17 00:00:00 2001 From: pengwei Date: Thu, 3 Jul 2025 17:07:52 +0800 Subject: [PATCH] =?UTF-8?q?fit:1=E3=80=81=E7=9D=A3=E5=AF=9F=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=8F=91=E5=B8=83=E5=90=8E=E7=AB=AFv1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataVSupervisionNotifyController.java | 1 + .../InspectionController.java | 34 ++- .../SelfexaminationController.java | 44 +++- .../TaskManagementController.java | 96 ++++++++ .../TestingAlcoholController.java | 11 + .../SubOneSupervisionNotifyController.java | 6 +- .../controller/system/DepartController.java | 6 + .../supervision/mapper/NegativeMapper.java | 88 ++++--- .../supervision/mapper/SupTaskMapper.java | 4 + .../SupTaskSelfexaminationDepartMapper.java | 11 + .../mapper/SupTaskTestingAlcoholMapper.java | 2 + .../SupTaskTestingAlcoholSamplingMapper.java | 10 + .../pojo/dto/TaskInspectionDto.java | 3 +- .../pojo/dto/TaskManagementDto.java | 49 ++++ .../pojo/dto/TemperancePoliceDto.java | 18 ++ .../pojo/entity/SamplingPolice.java | 3 + .../entity/SupTaskSelfexaminationDepart.java | 25 ++ .../entity/SupTaskTestingAlcoholPeople.java | 8 +- .../entity/SupTaskTestingAlcoholSampling.java | 19 ++ .../pojo/param/DepartQueryParam.java | 4 + .../pojo/param/SamplingQueryParam.java | 1 + .../biutag/supervision/pojo/vo/PoliceVo.java | 2 + .../supervision/pojo/vo/SamplingVo.java | 24 ++ .../supervision/pojo/vo/TaskInspectionVo.java | 2 - .../pojo/vo/TaskSelfexaminationProblemVo.java | 42 ++++ .../biutag/supervision/pojo/vo/TaskVo.java | 6 + .../pojo/vo/TemperancePoliceVo.java | 18 ++ .../supervision/service/DataMailService.java | 2 - .../supervision/service/SamplingService.java | 8 +- .../SupTaskSelfexaminationDepartService.java | 10 + .../supervision/service/SupTaskService.java | 28 +++ .../SupTaskTestingAlcoholSamplingService.java | 12 + .../service/SupTaskTestingAlcoholService.java | 6 + .../service/TaskManagementService.java | 230 ++++++++++++++++++ src/main/resources/mapper/SamplingMapper.xml | 2 + src/main/resources/mapper/SupTaskMapper.xml | 28 +++ .../mapper/SupTaskTestingAlcoholMapper.xml | 41 +++- .../重点人员管控导入模板.xlsx | Bin 0 -> 12125 bytes 38 files changed, 846 insertions(+), 58 deletions(-) create mode 100644 src/main/java/com/biutag/supervision/controller/mobileSupervision/TaskManagementController.java create mode 100644 src/main/java/com/biutag/supervision/mapper/SupTaskSelfexaminationDepartMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/SupTaskTestingAlcoholSamplingMapper.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/TaskManagementDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/TemperancePoliceDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/SupTaskSelfexaminationDepart.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/SupTaskTestingAlcoholSampling.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/TaskSelfexaminationProblemVo.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/TemperancePoliceVo.java create mode 100644 src/main/java/com/biutag/supervision/service/SupTaskSelfexaminationDepartService.java create mode 100644 src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholSamplingService.java create mode 100644 src/main/java/com/biutag/supervision/service/TaskManagementService.java create mode 100644 src/main/resources/static/templates/重点人员管控导入模板.xlsx diff --git a/src/main/java/com/biutag/supervision/controller/datav/DataVSupervisionNotifyController.java b/src/main/java/com/biutag/supervision/controller/datav/DataVSupervisionNotifyController.java index 5fc9708..bd90c18 100644 --- a/src/main/java/com/biutag/supervision/controller/datav/DataVSupervisionNotifyController.java +++ b/src/main/java/com/biutag/supervision/controller/datav/DataVSupervisionNotifyController.java @@ -149,6 +149,7 @@ public class DataVSupervisionNotifyController { endTime = DateUtil.endOfDay(endTime); //地图数据 List superviseTempMapVoList = negativeMapper.getSupervisionMapIconInfo(beginTime, endTime); + //todo 有问题 JSONObject data = new JSONObject().fluentPut("superviseTempMapVoList", superviseTempMapVoList); return Result.success(data); } diff --git a/src/main/java/com/biutag/supervision/controller/mobileSupervision/InspectionController.java b/src/main/java/com/biutag/supervision/controller/mobileSupervision/InspectionController.java index d3dd255..db9079d 100644 --- a/src/main/java/com/biutag/supervision/controller/mobileSupervision/InspectionController.java +++ b/src/main/java/com/biutag/supervision/controller/mobileSupervision/InspectionController.java @@ -1,41 +1,65 @@ package com.biutag.supervision.controller.mobileSupervision; +import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelReader; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.constants.enums.DepartLevelEnum; +import com.biutag.supervision.constants.enums.TaskStatusEnum; +import com.biutag.supervision.constants.enums.TaskTypeEnum; import com.biutag.supervision.pojo.Result; -import com.biutag.supervision.pojo.dto.TaskInspectionDto; -import com.biutag.supervision.pojo.dto.TaskProblemDto; -import com.biutag.supervision.pojo.dto.TaskInspectionProblemQueryParam; +import com.biutag.supervision.pojo.domain.Self; +import com.biutag.supervision.pojo.dto.*; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.pojo.entity.SupTask; import com.biutag.supervision.pojo.entity.SupTaskInspection; import com.biutag.supervision.pojo.entity.SupTaskProblem; import com.biutag.supervision.pojo.param.TaskInspectionQueryParam; import com.biutag.supervision.pojo.vo.FileVo; import com.biutag.supervision.pojo.vo.TaskInspectionProblemVo; import com.biutag.supervision.pojo.vo.TaskInspectionVo; +import com.biutag.supervision.pojo.vo.TemperancePoliceVo; import com.biutag.supervision.service.SupTaskProblemService; import com.biutag.supervision.service.SupTaskInspectionService; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.ConstraintViolation; +import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.net.http.HttpRequest; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * @author wxc * @date 2025/4/9 */ +@Slf4j @RequiredArgsConstructor @RestController @RequestMapping("task/inspection") -public class InspectionController { +public class InspectionController { private final SupTaskInspectionService taskInspectionService; private final SupTaskProblemService taskProblemService; + @GetMapping public Result> page(TaskInspectionQueryParam queryParam) { return Result.success(taskInspectionService.page(queryParam)); @@ -46,6 +70,8 @@ public class InspectionController { return Result.success(taskInspectionService.save(dto)); } + + @GetMapping("{taskId}") public Result get(@PathVariable Integer taskId) { return Result.success(taskInspectionService.getById(taskId)); diff --git a/src/main/java/com/biutag/supervision/controller/mobileSupervision/SelfexaminationController.java b/src/main/java/com/biutag/supervision/controller/mobileSupervision/SelfexaminationController.java index f5cee94..d630cd4 100644 --- a/src/main/java/com/biutag/supervision/controller/mobileSupervision/SelfexaminationController.java +++ b/src/main/java/com/biutag/supervision/controller/mobileSupervision/SelfexaminationController.java @@ -1,17 +1,26 @@ package com.biutag.supervision.controller.mobileSupervision; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.TaskInspectionProblemQueryParam; +import com.biutag.supervision.pojo.dto.TaskProblemDto; import com.biutag.supervision.pojo.dto.TaskSelfexaminationDto; +import com.biutag.supervision.pojo.entity.SupTaskProblem; import com.biutag.supervision.pojo.entity.SupTaskSelfexamination; import com.biutag.supervision.pojo.param.TaskInspectionQueryParam; -import com.biutag.supervision.pojo.vo.TaskSelfexaminationDetailVo; -import com.biutag.supervision.pojo.vo.TaskSelfexaminationVo; +import com.biutag.supervision.pojo.vo.*; +import com.biutag.supervision.service.SupTaskProblemService; import com.biutag.supervision.service.SupTaskSelfexaminationService; import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * @author wxc * @date 2025/4/30 @@ -23,6 +32,8 @@ public class SelfexaminationController { private final SupTaskSelfexaminationService taskSelfexaminationService; + private final SupTaskProblemService taskProblemService; + @GetMapping public Result> page(TaskInspectionQueryParam queryParam) { return Result.success(taskSelfexaminationService.page(queryParam)); @@ -33,6 +44,8 @@ public class SelfexaminationController { return Result.success(taskSelfexaminationService.get(taskId)); } + + @PostMapping public Result add(@RequestBody TaskSelfexaminationDto dto) { return Result.success(taskSelfexaminationService.save(dto)); @@ -44,4 +57,31 @@ public class SelfexaminationController { return Result.success(); } + + + @GetMapping("{taskId}/problem") + public Result> listProblem(@PathVariable Integer taskId, TaskInspectionProblemQueryParam queryParam) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SupTaskProblem::getTaskId, taskId) + .orderByDesc(SupTaskProblem::getCreateTime); + Page page = taskProblemService.page(Page.of(queryParam.getCurrent(), queryParam.getSize()), queryWrapper); + + List records = page.getRecords().stream().map(item -> { + TaskSelfexaminationProblemVo vo = new TaskSelfexaminationProblemVo(); + BeanUtils.copyProperties(item, vo); + if (StrUtil.isNotBlank(item.getPeoples())) { + vo.setPeoples(JSON.parseArray(item.getPeoples(), TaskProblemDto.People.class)); + } + if (StrUtil.isNotBlank(item.getFiles())) { + vo.setFiles(JSON.parseArray(item.getFiles(), FileVo.class)); + } + return vo; + }).toList(); + return Result.success(new Page().setRecords(records).setTotal(page.getTotal())); + } + + + + } diff --git a/src/main/java/com/biutag/supervision/controller/mobileSupervision/TaskManagementController.java b/src/main/java/com/biutag/supervision/controller/mobileSupervision/TaskManagementController.java new file mode 100644 index 0000000..d3a9e2e --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/mobileSupervision/TaskManagementController.java @@ -0,0 +1,96 @@ +package com.biutag.supervision.controller.mobileSupervision; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelReader; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.listener.ReadListener; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.DataCaseVerifImportDto; +import com.biutag.supervision.pojo.dto.TaskManagementDto; +import com.biutag.supervision.pojo.dto.TemperancePoliceDto; +import com.biutag.supervision.pojo.param.TaskInspectionQueryParam; +import com.biutag.supervision.pojo.param.TaskQueryParam; +import com.biutag.supervision.pojo.vo.TaskInspectionVo; +import com.biutag.supervision.pojo.vo.TaskVo; +import com.biutag.supervision.service.SupTaskService; +import com.biutag.supervision.service.TaskManagementService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@RequiredArgsConstructor +@RequestMapping("/task/management") +@RestController +public class TaskManagementController { + + private final TaskManagementService taskManagementService; + + private final SupTaskService taskService; + @GetMapping + public Result> pageResult(TaskQueryParam queryParam) { + return Result.success(taskService.pageTaskData(queryParam)); + } + @PostMapping("/addTaskManagement") + public Result addTaskManagement(@RequestBody TaskManagementDto dto){ + if(taskManagementService.save(dto)){ + return Result.success(); + }else{ + return Result.failed("操作失败"); + } + } + + @GetMapping("/{id}") + public Result getDetil(@PathVariable Integer id){ + TaskManagementDto taskManagementDto = taskManagementService.getDetail(id); + if(ObjectUtil.isNotEmpty(taskManagementDto)){ + return Result.success(taskManagementDto); + }else{ + return Result.failed("查询失败"); + } + } + + @DeleteMapping("/{id}") + public Result delTaskById(@PathVariable Integer id){ + if(taskManagementService.delTaskById(id)){ + return Result.success(); + }else{ + return Result.failed("操作失败"); + } + } + + @PostMapping("import") + public Result> importExcel(@RequestPart("file") MultipartFile file) throws IOException { + log.info("文件导入中------------------------------"); + String fileNameType = FileUtil.extName(file.getOriginalFilename()); + if (!"xls".equals(fileNameType) && !"xlsx".equals(fileNameType)) { + throw new RuntimeException("仅支持 xls/xlsx 格式文件的导入"); + } + List list = new ArrayList<>(); + + ExcelReader excelReader = EasyExcel.read(file.getInputStream(), TemperancePoliceDto.class, new ReadListener() { + @Override + public void invoke(TemperancePoliceDto data, AnalysisContext analysisContext) { + list.add(data); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + }).build().read(EasyExcel.readSheet(0).build()); + excelReader.close(); + log.info("数据导入完成"); + return Result.success(list); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/mobileSupervision/TestingAlcoholController.java b/src/main/java/com/biutag/supervision/controller/mobileSupervision/TestingAlcoholController.java index 6c446c6..c174d0b 100644 --- a/src/main/java/com/biutag/supervision/controller/mobileSupervision/TestingAlcoholController.java +++ b/src/main/java/com/biutag/supervision/controller/mobileSupervision/TestingAlcoholController.java @@ -59,6 +59,17 @@ public class TestingAlcoholController { public Result> page(TaskTestingAlcoholQueryParam queryParam) { return Result.success(taskTestingAlcoholService.page(queryParam)); } + /** + * 获取详情 + * todo + * */ + @GetMapping("/getDetail/{taskId}") + public Result getDetail(@PathVariable Integer taskId){ + return Result.success(taskTestingAlcoholService.getDetailFun(taskId)); + } + + + @GetMapping("getPersonNumber") public Result> getPersonNumber(TestingAlcoholFilter condition) { diff --git a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneSupervisionNotifyController.java b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneSupervisionNotifyController.java index c59833e..b25c895 100644 --- a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneSupervisionNotifyController.java +++ b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneSupervisionNotifyController.java @@ -187,10 +187,10 @@ public class SubOneSupervisionNotifyController { if(!negatives.isEmpty()){ List negativeIds = negatives.stream().filter(item -> InspectCaseEnum.isItTure(item.getCheckStatus())).map(Negative::getId).toList(); superviseMapIconVo.setTotalPro(String.valueOf(negatives.size())); - //已办结的 - superviseMapIconVo.setCompletedNumber(negatives.stream().filter(item ->"1".equals(item.getIsRectifyCode())).count()); + //已办理 + superviseMapIconVo.setCompletedNumber(negatives.stream().filter(item ->ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).count()); //办理中 - superviseMapIconVo.setProcessingNumber(negatives.stream().filter(item ->"0".equals(item.getIsRectifyCode())).count()); + superviseMapIconVo.setProcessingNumber(negatives.size() - superviseMapIconVo.getCompletedNumber()); // 办结率 // superviseMapIconVo.setCompletedRate(superviseMapIconVo.getProblemNumber() == 0 ? 0: NumberUtil.roundHalfEven(NumberUtil.mul(NumberUtil.div(superviseMapIconVo.getCompletedNumber(), superviseMapIconVo.getProblemNumber()), 100), 0).doubleValue()); //问责人数 、问责单位数 diff --git a/src/main/java/com/biutag/supervision/controller/system/DepartController.java b/src/main/java/com/biutag/supervision/controller/system/DepartController.java index f7d1966..b406473 100644 --- a/src/main/java/com/biutag/supervision/controller/system/DepartController.java +++ b/src/main/java/com/biutag/supervision/controller/system/DepartController.java @@ -43,6 +43,12 @@ public class DepartController { return Result.success(departService.page(departQueryParam)); } + @GetMapping("getDepartByIds") + public Result> getDepartByIds(DepartQueryParam departQueryParam){ + return Result.success(departService.list(new LambdaQueryWrapper().in(SupDepart::getId,departQueryParam.getIds()))); + } + + @PostMapping public Result add(@RequestBody SupDepart supDepart) { if (departService.existsByName(supDepart.getName())) { diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java index 0543124..c39bc2f 100644 --- a/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java @@ -143,7 +143,7 @@ public interface NegativeMapper extends BaseMapper { "IFNULL(ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1), 0) AS completedRate " + "FROM negative ng " + "LEFT JOIN sup_depart sd ON ng.second_involve_depart_id=sd.id " + - "WHERE problemSourcesCode IN (13) " + + "WHERE problemSourcesCode IN (13,14,15) " + "AND sd.statistics_group_id=#{groupId} " + "AND crtTime BETWEEN #{beginTime} AND #{endTime};") DayTimeSuperviseVo getSupervisionRank(Date beginTime, Date endTime, Integer groupId); @@ -159,7 +159,7 @@ public interface NegativeMapper extends BaseMapper { "ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1) AS `value` " + "FROM negative ng " + "LEFT JOIN sup_depart sd ON ng.second_involve_depart_id=sd.id " + - "WHERE problemSourcesCode IN (13) " + + "WHERE problemSourcesCode IN (13,14,15) " + "AND sd.statistics_group_id=#{groupId} " + "AND crtTime BETWEEN #{beginTime} AND #{endTime} " + "GROUP BY sd.short_name " + @@ -169,7 +169,7 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT npr.oneLevelContent as name, count(*) value FROM negative ng, negative_problem_relation npr " + "WHERE ng.id = npr.negativeId " + - "AND ng.problemSourcesCode in (13, 15) " + + "AND ng.problemSourcesCode in (13,14, 15) " + "and ng.checkStatus<>3 " + "AND ng.crtTime BETWEEN #{beginTime} AND #{endTime} " + "AND oneLevelContent is NOT NULL " + @@ -185,7 +185,7 @@ public interface NegativeMapper extends BaseMapper { "COALESCE(ROUND(COUNT(DISTINCT IF(ng.processing_status='completed', ng.id, NULL)) / COUNT(DISTINCT ng.id) * 100, 1), 0) AS completedRate " + "FROM negative ng " + "LEFT JOIN negative_blame nb ON ng.id = nb.negativeId " + - "WHERE ng.problemSourcesCode IN (13, 15) " + + "WHERE ng.problemSourcesCode IN (13,14, 15) " + "AND ng.crtTime BETWEEN #{beginTime} AND #{endTime}; ") SupervisionNotifyOverView getAllSupervisionNotifyCount(Date beginTime, Date endTime); @@ -198,8 +198,22 @@ public interface NegativeMapper extends BaseMapper { "COUNT( DISTINCT IF(ng.problemSourcesCode=15, ng.id, NULL) ) AS zx, " + "COUNT( DISTINCT IF(ng.processing_status in ('signing', 'processing', 'approval'), ng.id, NULL) ) AS processingNumber, " + "COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) ) AS completedNumber , " + - "COUNT( DISTINCT ng.involveDepartId ) AS relationOrg, " + - "COUNT( DISTINCT nb.blameIdCode ) AS personNum, " + + "SUM(CASE " + + " WHEN nb.type = 'personal' " + + " AND nb.handleResultName != '' " + + " AND nb.handleResultName IS NOT NULL " + + " AND nb.handleResultName != '不予追责' " + + " THEN 1 " + + " ELSE 0 " + + " END) AS personNum, " + + " SUM(CASE " + + " WHEN nb.type = 'department' " + + " AND nb.handleResultName != '' " + + " AND nb.handleResultName IS NOT NULL " + + " AND nb.handleResultName != '不予追责' " + + " THEN 1 " + + " ELSE 0 " + + " END) AS relationOrg, "+ "IFNULL( ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1), 0) AS completedRate " + "FROM sup_depart sd " + "LEFT JOIN negative ng ON ng.second_involve_depart_id=sd.id " + @@ -251,6 +265,7 @@ public interface NegativeMapper extends BaseMapper { "INNER JOIN negative ng ON sd.id = ng.involveDepartId " + "LEFT JOIN negative_blame nb ON ng.id = nb.negativeId " + "WHERE problemSourcesCode = 16 " + + "and ng.checkStatus in (1, 2) "+ "AND ng.crtTime BETWEEN #{beginTime} AND #{endTime}") VideoSuperviseCountVo getAllVideoSuperviseCount(Date beginTime, Date endTime); /** @@ -284,18 +299,19 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT " + "sd.short_name AS `name`, " + "sd.id AS departId, " + - "COUNT( DISTINCT ng.id) AS discoverProblem, " + + "COUNT(DISTINCT ng.id) as total, "+ + "COUNT( DISTINCT ng.id AND ng.checkStatus <> 3 ) AS discoverProblem, " + "COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) ) AS completionProblem, " + "COUNT( DISTINCT ng.involveDepartId) AS relativeOrg, " + "COUNT( DISTINCT nb.blameName ) AS relativePer, " + "IFNULL(ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id)*100, 1 ),0) AS completionRate " + "FROM sup_depart sd " + "LEFT JOIN negative ng ON sd.id=ng.second_involve_depart_id " + - "AND checkStatus <>3 " + - "AND problemSourcesCode =16 " + + "AND problemSourcesCode = 16 " + "AND crtTime BETWEEN #{beginTime} AND #{endTime} " + + "and checkStatus in (1, 2) "+ "LEFT JOIN negative_blame nb ON ng.id=nb.negativeId " + - "WHERE sd.statistics_group_id=3 " + + "WHERE sd.statistics_group_id=3 " + "GROUP BY sd.short_name; ") List getVideoSuperviseMapIconInfo(Date beginTime, Date endTime); @@ -561,12 +577,12 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT " + "COUNT(DISTINCT ng.id) AS proTotal, " + - "COUNT( DISTINCT IF(ng.isRectifyCode=0, ng.id, NULL) ) AS changing, " + - "COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) ) AS changed, " + - "IFNULL( ROUND( COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1), 0) AS correctionRate " + + "COUNT( DISTINCT IF(ng.processing_status in ('signing', 'processing', 'approval'), ng.id, NULL) ) AS changing, " + + "COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) ) AS changed, " + + "IFNULL(ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1), 0) AS correctionRate " + "FROM negative ng " + "LEFT JOIN sup_depart sd ON ng.involveDepartId=sd.id " + - "WHERE ng.problemSourcesCode IN (13) " + + "WHERE ng.problemSourcesCode IN (13,14,15) " + "AND ng.second_involve_depart_id=#{departId} " + "AND sd.statistics_group_id=10 " + "AND crtTime BETWEEN #{beginTime} AND #{endTime} ") @@ -574,12 +590,12 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT " + "COUNT(DISTINCT ng.id) AS proTotal, " + - "COUNT( DISTINCT IF(ng.isRectifyCode=0, ng.id, NULL) ) AS changing, " + - "COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) ) AS changed, " + - "IFNULL( ROUND( COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1), 0) AS correctionRate " + + "COUNT( DISTINCT IF(ng.processing_status in ('signing', 'processing', 'approval'), ng.id, NULL) ) AS changing, " + + "COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) ) AS changed, " + + "IFNULL(ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1), 0) AS correctionRate " + "FROM negative ng " + "LEFT JOIN sup_depart sd ON ng.involveDepartId=sd.id " + - "WHERE ng.problemSourcesCode IN (13) " + + "WHERE ng.problemSourcesCode IN (13,14,15) " + "AND ng.second_involve_depart_id=#{departId} " + "AND sd.statistics_group_id!=10 " + "AND crtTime BETWEEN #{beginTime} AND #{endTime} ") @@ -588,12 +604,12 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT " + "sd.short_name AS label, " + "COUNT(DISTINCT ng.id) AS denominator, " + - "COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) ) AS numerator, " + - "ifnull(ROUND( COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1),0) AS rate, " + - "ifnull(ROUND( COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1),0) AS value " + + "COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) ) AS numerator, " + + "ifnull(ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1),0) AS rate, " + + "ifnull(ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1),0) AS value " + "FROM negative ng " + "LEFT JOIN sup_depart sd ON ng.involveDepartId=sd.id " + - "WHERE ng.problemSourcesCode IN (13) " + + "WHERE ng.problemSourcesCode IN (13,14,15) " + "AND ng.second_involve_depart_id=#{departId} " + "AND sd.statistics_group_id=10 " + "AND crtTime BETWEEN #{beginTime} AND #{endTime} " + @@ -605,11 +621,11 @@ public interface NegativeMapper extends BaseMapper { "sd.short_name AS label, " + "COUNT(DISTINCT ng.id) AS denominator, " + "COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) ) AS numerator, " + - "ifnull(ROUND( COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1),0) AS rate, " + - "ifnull(ROUND( COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1),0) AS value " + + "ifnull(ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1),0) AS rate, " + + "ifnull(ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1),0) AS value " + "FROM negative ng " + "LEFT JOIN sup_depart sd ON ng.involveDepartId=sd.id " + - "WHERE ng.problemSourcesCode IN (13) " + + "WHERE ng.problemSourcesCode IN (13,14,15) " + "AND ng.second_involve_depart_id=#{departId} " + "AND sd.statistics_group_id!=10 " + "AND crtTime BETWEEN #{beginTime} AND #{endTime} " + @@ -621,8 +637,8 @@ public interface NegativeMapper extends BaseMapper { "sd.id AS departId, " + "count( DISTINCT ng.id) AS denominator, " + "count( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL )) AS numerator, " + - "ROUND( COUNT(DISTINCT if(ng.isRectifyCode=1, ng.id, NULL)) / count(DISTINCT ng.id)*100, 1 ) AS rate, " + - "ROUND( COUNT(DISTINCT if(ng.isRectifyCode=1, ng.id, NULL)) / count(DISTINCT ng.id)*100, 1 ) AS value " + + "ROUND( COUNT(DISTINCT if(ng.processing_status='completed', ng.id, NULL)) / count(DISTINCT ng.id)*100, 1 ) AS rate, " + + "ROUND( COUNT(DISTINCT if(ng.processing_status='completed', ng.id, NULL)) / count(DISTINCT ng.id)*100, 1 ) AS value " + "FROM sup_depart sd " + "INNER JOIN negative ng on ng.involveDepartId=sd.id AND sd.statistics_group_id=10 AND sd.pid=#{departId} " + "LEFT JOIN negative_blame nb on ng.id=nb.negativeId " + @@ -636,9 +652,9 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT sd.short_name as label, " + "sd.id AS departId, " + "count( DISTINCT ng.id) AS denominator, " + - "count( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL )) AS numerator, " + - "ROUND( COUNT(DISTINCT if(ng.isRectifyCode=1, ng.id, NULL)) / count(DISTINCT ng.id)*100, 1 ) AS rate, " + - "ROUND( COUNT(DISTINCT if(ng.isRectifyCode=1, ng.id, NULL)) / count(DISTINCT ng.id)*100, 1 ) AS value " + + "count( DISTINCT IF(ng.processing_status='completed', ng.id, NULL )) AS numerator, " + + "ROUND( COUNT(DISTINCT if(ng.processing_status='completed', ng.id, NULL)) / count(DISTINCT ng.id)*100, 1 ) AS rate, " + + "ROUND( COUNT(DISTINCT if(ng.processing_status='completed', ng.id, NULL)) / count(DISTINCT ng.id)*100, 1 ) AS value " + "FROM sup_depart sd " + "INNER JOIN negative ng on ng.involveDepartId=sd.id AND sd.statistics_group_id!=10 AND sd.pid=#{departId} " + "LEFT JOIN negative_blame nb on ng.id=nb.negativeId " + @@ -689,9 +705,9 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT " + "COUNT(DISTINCT ng.id) AS proTotal, " + - "COUNT( DISTINCT IF(ng.isRectifyCode=0, ng.id, NULL) ) AS changing, " + - "COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) ) AS changed, " + - "ROUND( COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1) AS correctionRate " + + "COUNT( DISTINCT IF(ng.processing_status in ('signing', 'processing', 'approval'), ng.id, NULL) ) AS changing, " + + "COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) ) AS changed, " + + "ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1) AS correctionRate " + "FROM negative ng " + "LEFT JOIN sup_depart sd ON ng.involveDepartId=sd.id " + "WHERE problemSourcesCode IN (15) " + @@ -703,9 +719,9 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT " + "COUNT(DISTINCT ng.id) AS proTotal, " + - "COUNT( DISTINCT IF(ng.isRectifyCode=0, ng.id, NULL) ) AS changing, " + - "COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) ) AS changed, " + - "ROUND( COUNT( DISTINCT IF(ng.isRectifyCode=1, ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1) AS correctionRate " + + "COUNT( DISTINCT IF(ng.processing_status in ('signing', 'processing', 'approval'), ng.id, NULL) ) AS changing, " + + "COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) ) AS changed, " + + "ROUND( COUNT( DISTINCT IF(ng.processing_status='completed', ng.id, NULL) )/COUNT( DISTINCT ng.id )*100, 1) AS correctionRate " + "FROM negative ng " + "LEFT JOIN sup_depart sd ON ng.involveDepartId=sd.id " + "WHERE problemSourcesCode IN (15) " + diff --git a/src/main/java/com/biutag/supervision/mapper/SupTaskMapper.java b/src/main/java/com/biutag/supervision/mapper/SupTaskMapper.java index d8c5bc1..8768554 100644 --- a/src/main/java/com/biutag/supervision/mapper/SupTaskMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/SupTaskMapper.java @@ -14,6 +14,10 @@ public interface SupTaskMapper extends BaseMapper { Page queryTask(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + Page queryTaskList(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + TaskCountVo queryTaskCount(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/src/main/java/com/biutag/supervision/mapper/SupTaskSelfexaminationDepartMapper.java b/src/main/java/com/biutag/supervision/mapper/SupTaskSelfexaminationDepartMapper.java new file mode 100644 index 0000000..c1fb589 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/SupTaskSelfexaminationDepartMapper.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.SupTaskSelfexaminationDepart; +import org.apache.ibatis.annotations.Mapper; + + +public interface SupTaskSelfexaminationDepartMapper extends BaseMapper { + + +} diff --git a/src/main/java/com/biutag/supervision/mapper/SupTaskTestingAlcoholMapper.java b/src/main/java/com/biutag/supervision/mapper/SupTaskTestingAlcoholMapper.java index ba8c94b..eabcd1e 100644 --- a/src/main/java/com/biutag/supervision/mapper/SupTaskTestingAlcoholMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/SupTaskTestingAlcoholMapper.java @@ -12,4 +12,6 @@ public interface SupTaskTestingAlcoholMapper extends BaseMapper queryPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + TaskTestingAlcoholVo getDetail(Integer id); + } diff --git a/src/main/java/com/biutag/supervision/mapper/SupTaskTestingAlcoholSamplingMapper.java b/src/main/java/com/biutag/supervision/mapper/SupTaskTestingAlcoholSamplingMapper.java new file mode 100644 index 0000000..4a29310 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/SupTaskTestingAlcoholSamplingMapper.java @@ -0,0 +1,10 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.BaseUser; +import com.biutag.supervision.pojo.entity.SupTaskTestingAlcoholSampling; +import org.apache.ibatis.annotations.Mapper; + + +public interface SupTaskTestingAlcoholSamplingMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/TaskInspectionDto.java b/src/main/java/com/biutag/supervision/pojo/dto/TaskInspectionDto.java index 27a3228..336d0cf 100644 --- a/src/main/java/com/biutag/supervision/pojo/dto/TaskInspectionDto.java +++ b/src/main/java/com/biutag/supervision/pojo/dto/TaskInspectionDto.java @@ -1,6 +1,7 @@ package com.biutag.supervision.pojo.dto; import com.biutag.supervision.pojo.entity.SupTaskPerson; +import com.biutag.supervision.pojo.vo.TemperancePoliceVo; import lombok.Getter; import lombok.Setter; @@ -17,10 +18,8 @@ import java.util.List; public class TaskInspectionDto { private String taskName; - // 督察单位 private Integer supDepartId; - // 督察类型 private String supervisionType; diff --git a/src/main/java/com/biutag/supervision/pojo/dto/TaskManagementDto.java b/src/main/java/com/biutag/supervision/pojo/dto/TaskManagementDto.java new file mode 100644 index 0000000..01e01d1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/TaskManagementDto.java @@ -0,0 +1,49 @@ +package com.biutag.supervision.pojo.dto; + +import com.biutag.supervision.pojo.entity.SupTaskPerson; +import com.biutag.supervision.pojo.entity.SupTaskSelfexaminationContent; +import com.biutag.supervision.pojo.entity.SupTaskTestingAlcoholPeople; +import com.biutag.supervision.pojo.vo.TemperancePoliceVo; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Setter +@Getter +public class TaskManagementDto { + + //任务名称 + private String taskName; + // 督察单位 + private Integer supDepartId; + // 督察类型 + private String supervisionType; + //专项督察类型 + private String specialType; + //督察时间 + private List times = new ArrayList<>(); + //督察人员 + private List persons = new ArrayList<>(); + //督察对象方式(禁酒督察) + private String samplingTarget; + //excel 导入的数据 + private List policeVos; + //选择的禁闭规则 + private List samplingIds; + // 选择的数据 + private List userList; + // 任务要求 + private String taskContent; + //任务要求 + private String taskContentHtml; + //自选单位 + private List selfOrgs; + //任务内容 + private List selfContents; + + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/TemperancePoliceDto.java b/src/main/java/com/biutag/supervision/pojo/dto/TemperancePoliceDto.java new file mode 100644 index 0000000..bd5812b --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/TemperancePoliceDto.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.pojo.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class TemperancePoliceDto { + @ExcelProperty({"警号"}) + private String empNo; + + @ExcelProperty({"姓名"}) + private String name; + + @ExcelProperty({"身份证"}) + private String idCode; +} diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SamplingPolice.java b/src/main/java/com/biutag/supervision/pojo/entity/SamplingPolice.java index 287d709..85c6297 100644 --- a/src/main/java/com/biutag/supervision/pojo/entity/SamplingPolice.java +++ b/src/main/java/com/biutag/supervision/pojo/entity/SamplingPolice.java @@ -32,4 +32,7 @@ public class SamplingPolice { @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @TableField("crt_time") private LocalDateTime crtTime; + + @TableField("id_code") + private String idCode; } diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupTaskSelfexaminationDepart.java b/src/main/java/com/biutag/supervision/pojo/entity/SupTaskSelfexaminationDepart.java new file mode 100644 index 0000000..8ca0063 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupTaskSelfexaminationDepart.java @@ -0,0 +1,25 @@ +package com.biutag.supervision.pojo.entity; + +import cn.hutool.core.date.DateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +public class SupTaskSelfexaminationDepart { + @TableId + private String id; + //部门id + @TableField("depart_id") + private String departId; + //任务id + @TableField("task_id") + private Integer taskId; + //创建时间 + @TableField("create_time") + private LocalDateTime createTime; +} diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupTaskTestingAlcoholPeople.java b/src/main/java/com/biutag/supervision/pojo/entity/SupTaskTestingAlcoholPeople.java index 947f260..b5d701e 100644 --- a/src/main/java/com/biutag/supervision/pojo/entity/SupTaskTestingAlcoholPeople.java +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupTaskTestingAlcoholPeople.java @@ -12,11 +12,11 @@ import java.time.LocalDateTime; @Getter public class SupTaskTestingAlcoholPeople { - // + // @TableId(value = "id", type = IdType.AUTO) private Integer id; - // + // @TableField("task_id") private Integer taskId; @@ -32,6 +32,8 @@ public class SupTaskTestingAlcoholPeople { @TableField("id_code") private String idCode; +// private String mobile; + // 单位ID @TableField("depart_id") private String departId; @@ -60,4 +62,4 @@ public class SupTaskTestingAlcoholPeople { // 检测照片 private String testingFiles; -} \ No newline at end of file +} diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupTaskTestingAlcoholSampling.java b/src/main/java/com/biutag/supervision/pojo/entity/SupTaskTestingAlcoholSampling.java new file mode 100644 index 0000000..3f717a7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupTaskTestingAlcoholSampling.java @@ -0,0 +1,19 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SupTaskTestingAlcoholSampling { + @TableId + private String id; + //督察任务id + @TableField("task_id") + private Integer taskId; + //人员抽检规则id + @TableField("sampling_id") + private String samplingId; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/DepartQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/DepartQueryParam.java index 8f6a092..216fd42 100644 --- a/src/main/java/com/biutag/supervision/pojo/param/DepartQueryParam.java +++ b/src/main/java/com/biutag/supervision/pojo/param/DepartQueryParam.java @@ -3,6 +3,8 @@ package com.biutag.supervision.pojo.param; import lombok.Getter; import lombok.Setter; +import java.util.List; + @Setter @Getter public class DepartQueryParam extends BasePage { @@ -13,4 +15,6 @@ public class DepartQueryParam extends BasePage { private String code; + private List ids; + } diff --git a/src/main/java/com/biutag/supervision/pojo/param/SamplingQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/SamplingQueryParam.java index 853f99b..d181371 100644 --- a/src/main/java/com/biutag/supervision/pojo/param/SamplingQueryParam.java +++ b/src/main/java/com/biutag/supervision/pojo/param/SamplingQueryParam.java @@ -43,6 +43,7 @@ public class SamplingQueryParam extends BasePage{ //是否值班人员 private String beDuty; + private List ids; } diff --git a/src/main/java/com/biutag/supervision/pojo/vo/PoliceVo.java b/src/main/java/com/biutag/supervision/pojo/vo/PoliceVo.java index 443be1a..f244ad7 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/PoliceVo.java +++ b/src/main/java/com/biutag/supervision/pojo/vo/PoliceVo.java @@ -19,6 +19,8 @@ public class PoliceVo { //单位id private String deptId; + private String idCode; + //年龄 private int age; //在规定时间中 抽检次数 diff --git a/src/main/java/com/biutag/supervision/pojo/vo/SamplingVo.java b/src/main/java/com/biutag/supervision/pojo/vo/SamplingVo.java index fa49480..b26ad92 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/SamplingVo.java +++ b/src/main/java/com/biutag/supervision/pojo/vo/SamplingVo.java @@ -1,4 +1,5 @@ package com.biutag.supervision.pojo.vo; +import cn.hutool.core.util.StrUtil; import com.biutag.supervision.pojo.entity.SamplingPolice; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; @@ -88,6 +89,29 @@ public class SamplingVo { private String value; } + + + public String createSamplingInspection(SamplingVo vo){ + String samplingInspection = ""; + if(StrUtil.isNotBlank(vo.getSamplingName())){ + samplingInspection += "抽检名称:"+vo.getSamplingName()+";"; + } + if(StrUtil.isNotBlank(vo.getInspectorType())){ + samplingInspection +="督察类型:"+vo.getInspectorType()+";"; + } + + if(vo.getAgeMax() > 0){ + samplingInspection +="最大年龄:"+vo.getAgeMax()+";"; + } + if(vo.getAgeMin() >= 0){ + samplingInspection +="最小年龄:"+vo.getSamplingName()+";"; + } + if(StrUtil.isNotBlank(vo.getGender())){ + samplingInspection +="性别:"+ ("1".equals(vo.getGender())?"男":"女")+";"; + } + + return samplingInspection; + } } diff --git a/src/main/java/com/biutag/supervision/pojo/vo/TaskInspectionVo.java b/src/main/java/com/biutag/supervision/pojo/vo/TaskInspectionVo.java index 03f2c13..73a0e17 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/TaskInspectionVo.java +++ b/src/main/java/com/biutag/supervision/pojo/vo/TaskInspectionVo.java @@ -19,8 +19,6 @@ public class TaskInspectionVo { // 任务名称 private String taskName; - // 督察单位 - private String supDepartName; // 开始时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm") diff --git a/src/main/java/com/biutag/supervision/pojo/vo/TaskSelfexaminationProblemVo.java b/src/main/java/com/biutag/supervision/pojo/vo/TaskSelfexaminationProblemVo.java new file mode 100644 index 0000000..244b4a5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/TaskSelfexaminationProblemVo.java @@ -0,0 +1,42 @@ +package com.biutag.supervision.pojo.vo; + +import com.biutag.supervision.pojo.dto.TaskProblemDto; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +public class TaskSelfexaminationProblemVo { + + private Integer id; + //任务列表 + private Integer taskId; + + // 是否存在督察问题 + private Boolean hasProblem; + //督察单位ID + private String departId; + //督察单位 + private String departName; + //问题类型 + private String problemType; + //问题类型编码 + private String problemTypeCode; + + // 具体情况 + private String detail; + + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + private LocalDateTime createTime; + + // 附件 + private List files = new ArrayList<>(); + + private List peoples = new ArrayList<>(); +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/TaskVo.java b/src/main/java/com/biutag/supervision/pojo/vo/TaskVo.java index 97c09a6..3e75cf7 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/TaskVo.java +++ b/src/main/java/com/biutag/supervision/pojo/vo/TaskVo.java @@ -53,4 +53,10 @@ public class TaskVo { private String type; + private String persons; + // 被督察单位 + private Integer departNumber; + //被督察人员 + private Integer problemNumber; + } diff --git a/src/main/java/com/biutag/supervision/pojo/vo/TemperancePoliceVo.java b/src/main/java/com/biutag/supervision/pojo/vo/TemperancePoliceVo.java new file mode 100644 index 0000000..c4e9487 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/TemperancePoliceVo.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.pojo.vo; + +import lombok.Getter; +import lombok.Setter; + +/** + * 禁酒抽检人员 + * */ +@Getter +@Setter +public class TemperancePoliceVo { + + private String empNo; + + private String empName; + + private String idCode; +} diff --git a/src/main/java/com/biutag/supervision/service/DataMailService.java b/src/main/java/com/biutag/supervision/service/DataMailService.java index 803836c..c576d0a 100644 --- a/src/main/java/com/biutag/supervision/service/DataMailService.java +++ b/src/main/java/com/biutag/supervision/service/DataMailService.java @@ -141,8 +141,6 @@ public class DataMailService extends ServiceImpl().between(Negative::getCrtTime, beginTime, endTime).eq(Negative::getHandleSecondDepartId,departId).eq(Negative::getProblemSourcesCode, ProblemSourcesEnum.JZXX.getValue())); - - Long total = countryTotal + policeTotal + commissionerTotal + numTotal; //国家信访 re.setCountryTotal(countryTotal.toString()); diff --git a/src/main/java/com/biutag/supervision/service/SamplingService.java b/src/main/java/com/biutag/supervision/service/SamplingService.java index 7b97553..65178d0 100644 --- a/src/main/java/com/biutag/supervision/service/SamplingService.java +++ b/src/main/java/com/biutag/supervision/service/SamplingService.java @@ -140,7 +140,9 @@ public class SamplingService extends ServiceImpl { queryWrapper.ge("start_time",queryParam.getSamplingTime().get(0)); queryWrapper.le("end_time",queryParam.getSamplingTime().get(1)); } - + if(CollectionUtil.isNotEmpty(queryParam.getIds())){ + queryWrapper.in("id",queryParam.getIds()); + } Page page= baseMapper.queryPage(Page.of(queryParam.getCurrent(), queryParam.getSize()), queryWrapper); List listData = new ArrayList<>(); @@ -156,9 +158,9 @@ public class SamplingService extends ServiceImpl { s.setPersonnelTypeArray(List.of(s.getPersonnelType().split(","))); } if(StrUtil.isNotBlank(s.getSamplingObj())){ - s.setSamplingObjectList((List) JSONObject.parseObject(s.getSamplingObj()).get("data")); } + s.setSamplingInspection(s.createSamplingInspection(s)); }); voPage.setRecords(listData); return voPage; @@ -205,7 +207,7 @@ public class SamplingService extends ServiceImpl { List leadPoliceVos = baseMapper.selectPoliceDataLead(samplingVo); //时间范围内的抽检次数 - if( samplingVo.getSamplingNum() > 0 ){ + if( samplingVo.getSamplingNumber() > 0 ){ policeVos = policeVos.stream().filter(s->s.getCjnum() == samplingVo.getSamplingNumber()).toList(); leadPoliceVos=leadPoliceVos.stream().filter(s->s.getCjnum()== samplingVo.getSamplingNumber()).toList(); } diff --git a/src/main/java/com/biutag/supervision/service/SupTaskSelfexaminationDepartService.java b/src/main/java/com/biutag/supervision/service/SupTaskSelfexaminationDepartService.java new file mode 100644 index 0000000..2057af0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/SupTaskSelfexaminationDepartService.java @@ -0,0 +1,10 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.SupTaskSelfexaminationDepartMapper; +import com.biutag.supervision.pojo.entity.SupTaskSelfexaminationDepart; +import org.springframework.stereotype.Service; + +@Service +public class SupTaskSelfexaminationDepartService extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervision/service/SupTaskService.java b/src/main/java/com/biutag/supervision/service/SupTaskService.java index c0ce6ca..64540ae 100644 --- a/src/main/java/com/biutag/supervision/service/SupTaskService.java +++ b/src/main/java/com/biutag/supervision/service/SupTaskService.java @@ -1,6 +1,8 @@ package com.biutag.supervision.service; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -9,6 +11,8 @@ import com.biutag.supervision.constants.enums.TaskTypeEnum; import com.biutag.supervision.constants.enums.WorkStatusEnum; import com.biutag.supervision.mapper.SupTaskMapper; import com.biutag.supervision.pojo.entity.SupTask; +import com.biutag.supervision.pojo.entity.SupTaskPerson; +import com.biutag.supervision.pojo.entity.SupTaskProblem; import com.biutag.supervision.pojo.model.NegativeWorkModel; import com.biutag.supervision.pojo.model.UserAuth; import com.biutag.supervision.pojo.param.NegativeQueryParam; @@ -18,6 +22,9 @@ import com.biutag.supervision.pojo.vo.TaskVo; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.stream.Collectors; + import java.util.Objects; @RequiredArgsConstructor @@ -26,6 +33,8 @@ public class SupTaskService extends ServiceImpl { private final NegativeWorkService negativeWorkService; + private final SupTaskPersonService personService; + public Page pageTask(TaskQueryParam queryParam) { UserAuth user = UserContextHolder.getCurrentUser(); QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -43,6 +52,25 @@ public class SupTaskService extends ServiceImpl { return baseMapper.queryTask(Page.of(queryParam.getCurrent(), queryParam.getSize()), queryWrapper); } + public Page pageTaskData(TaskQueryParam queryParam){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty( queryParam.getTaskStatus()), "t.task_status", queryParam.getTaskStatus()) + .like(StrUtil.isNotEmpty(queryParam.getTaskName()), "t.task_name", queryParam.getTaskName()) + .eq(StrUtil.isNotEmpty(queryParam.getTaskType()),"t.task_type", queryParam.getTaskType()) + .groupBy("t.id") + .orderByDesc("t.create_time"); + Page page= baseMapper.queryTaskList(Page.of(queryParam.getCurrent(), queryParam.getSize()), queryWrapper); + page.getRecords().forEach(s->{ + List problems =personService.list(new LambdaQueryWrapper().eq(SupTaskPerson::getTaskId,s.getId())); + if(CollectionUtil.isNotEmpty(problems)){ + s.setPersons(problems.stream().map(SupTaskPerson::getName).collect(Collectors.joining(","))); + } + }); + + return page; + } + + public TaskCountVo getTaskCount() { UserAuth user = UserContextHolder.getCurrentUser(); QueryWrapper queryWrapper = new QueryWrapper<>(); diff --git a/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholSamplingService.java b/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholSamplingService.java new file mode 100644 index 0000000..086fa1d --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholSamplingService.java @@ -0,0 +1,12 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.SupTaskTestingAlcoholSamplingMapper; +import com.biutag.supervision.pojo.entity.SupTaskTestingAlcoholSampling; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class SupTaskTestingAlcoholSamplingService extends ServiceImpl { +} diff --git a/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholService.java b/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholService.java index 01d8e94..40a41b3 100644 --- a/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholService.java +++ b/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholService.java @@ -40,6 +40,12 @@ public class SupTaskTestingAlcoholService extends ServiceImpl { + item.setTaskId(task.getId()); + }); + return taskPersonService.saveBatch(dto.getPersons()); + }else{ + if("所队自查".equals(dto.getSpecialType())){ + SupTaskSelfexamination selfexamination = new SupTaskSelfexamination(); + selfexamination.setTaskId(task.getId()); + selfexamination.setType(dto.getSpecialType()); + selfexamination.setRequirement(dto.getTaskContent()); + selfexamination.setRequirementHtml(dto.getTaskContentHtml()); + selfexamination.setHasSign(false); + selfexaminationService.save(selfexamination); + // 自选单位 + List list = new ArrayList<>(); + dto.getSelfOrgs().forEach(s->{ + SupTaskSelfexaminationDepart depart = new SupTaskSelfexaminationDepart(); + depart.setTaskId(task.getId()); + depart.setDepartId(s); + depart.setId(IdUtil.fastSimpleUUID()); + depart.setCreateTime(LocalDateTime.now()); + list.add(depart); + }); + supTaskSelfexaminationDepartService.saveBatch(list); + //任务内容 + dto.getSelfContents().forEach(content -> { + content.setTaskId(task.getId()); + content.setStatus(TaskStatusEnum.todo.name()); + }); + return selfexaminationContentService.saveBatch(dto.getSelfContents()); + + } + if("禁酒督察".equals(dto.getSpecialType())){ + SupTaskTestingAlcohol testingAlcohol = new SupTaskTestingAlcohol(); + BeanUtils.copyProperties(dto, testingAlcohol); + testingAlcohol.setTaskId(task.getId()); + testingAlcohol.setDataGenerationMethod(dto.getSamplingTarget()); + testingAlcoholService.save(testingAlcohol); + //处理关联关系 + List samplings = new ArrayList<>(); + if(CollectionUtil.isNotEmpty(dto.getSamplingIds())){ + dto.getSamplingIds().forEach(s->{ + SupTaskTestingAlcoholSampling sampling=new SupTaskTestingAlcoholSampling(); + sampling.setTaskId(task.getId()); + sampling.setSamplingId(s); + samplings.add(sampling); + }); + alcoholSamplingService.saveBatch(samplings); + } + + dto.getPersons().forEach(item -> { + item.setTaskId(task.getId()); + }); + taskPersonService.saveBatch(dto.getPersons()); + dto.getUserList().forEach(item -> { + item.setTaskId(task.getId()); + item.setStatus(TaskStatusEnum.todo.name()); + }); + return testingAlcoholPeopleService.saveBatch(dto.getUserList()); + }else{ + return true; + } + } + + } + /** + * 查看督察任务详情 + * */ + public TaskManagementDto getDetail(Integer id){ + TaskManagementDto taskManagementDto =new TaskManagementDto(); + SupTask supTask = taskService.getById(id); + BeanUtils.copyProperties(supTask,taskManagementDto); + List times = new ArrayList<>(); + times.add(supTask.getBeginTime()); + times.add(supTask.getEndTime()); + + taskManagementDto.setTimes(times); + + switch (supTask.getTaskType()){ + case "inspection": + taskManagementDto.setSupervisionType("日常督察"); + SupTaskInspection testInspection = supTaskInspectionService.getOne(new LambdaQueryWrapper().eq(SupTaskInspection::getTaskId,id)); + BeanUtils.copyProperties(testInspection,taskManagementDto ); + List personList = taskPersonService.list(new LambdaQueryWrapper().eq(SupTaskPerson::getTaskId,id)); + taskManagementDto.setPersons(personList); + break; + case "selfexamination": + taskManagementDto.setSpecialType("所队自查"); + taskManagementDto.setSupervisionType("专项督察"); + SupTaskSelfexamination selfexamination = selfexaminationService.getOne(new LambdaQueryWrapper().eq(SupTaskSelfexamination::getTaskId,id)); + taskManagementDto.setTaskContent(selfexamination.getRequirement()); + taskManagementDto.setTaskContentHtml(selfexamination.getRequirementHtml()); + //自选单位 + List list =supTaskSelfexaminationDepartService.list(new LambdaQueryWrapper().eq(SupTaskSelfexaminationDepart::getTaskId,id)); + if(CollectionUtil.isNotEmpty(list)){ + taskManagementDto.setSelfOrgs(list.stream().map(SupTaskSelfexaminationDepart::getDepartId).toList()); + } + //任务内容 + List contents = selfexaminationContentService.list(new LambdaQueryWrapper().eq(SupTaskSelfexaminationContent::getTaskId,id)); + taskManagementDto.setSelfContents(contents); + break; + case "testing_alcohol": + taskManagementDto.setSpecialType("禁酒督察"); + taskManagementDto.setSupervisionType("专项督察"); + SupTaskTestingAlcohol testingAlcohol = testingAlcoholService.getOne(new LambdaQueryWrapper().eq(SupTaskTestingAlcohol::getTaskId,id)); + + BeanUtils.copyProperties(testingAlcohol, taskManagementDto); + taskManagementDto.setSamplingTarget(testingAlcohol.getDataGenerationMethod()); + List sampling= alcoholSamplingService.list(new LambdaQueryWrapper().eq(SupTaskTestingAlcoholSampling::getTaskId,id)); + if(CollectionUtil.isNotEmpty(sampling)){ + taskManagementDto.setSamplingIds(sampling.stream().map(SupTaskTestingAlcoholSampling::getSamplingId).toList()); + } + //督察人员 + List taskPersonList = taskPersonService.list(new LambdaQueryWrapper().eq(SupTaskPerson::getTaskId,id)); + taskManagementDto.setPersons(taskPersonList); + //选择的数据 + List taskTestingAlcoholPeople= testingAlcoholPeopleService.list(new LambdaQueryWrapper().eq(SupTaskTestingAlcoholPeople::getTaskId,id)); + if (CollectionUtil.isNotEmpty(taskTestingAlcoholPeople)){ + taskManagementDto.setUserList(taskTestingAlcoholPeople); + } + + break; + } + return taskManagementDto; + } + + /** + * 删除数据 + * */ + public Boolean delTaskById(Integer id){ + //获取信息 + SupTask supTask = taskService.getById(id); + taskService.removeById(id); + switch (supTask.getTaskType()){ + case "inspection": + supTaskInspectionService.remove(new LambdaQueryWrapper().eq(SupTaskInspection::getTaskId,id)); + taskPersonService.remove(new LambdaQueryWrapper().eq(SupTaskPerson::getTaskId,id)); + break; + case "selfexamination": + selfexaminationService.remove(new LambdaQueryWrapper().eq(SupTaskSelfexamination::getTaskId,id)); + supTaskSelfexaminationDepartService.remove(new LambdaQueryWrapper().eq(SupTaskSelfexaminationDepart::getTaskId,id)); + selfexaminationContentService.remove(new LambdaQueryWrapper().eq(SupTaskSelfexaminationContent::getTaskId,id)); + break; + case "testing_alcohol": + testingAlcoholService.remove(new LambdaQueryWrapper().eq(SupTaskTestingAlcohol::getTaskId,id)); + alcoholSamplingService.remove(new LambdaQueryWrapper().eq(SupTaskTestingAlcoholSampling::getTaskId,id)); + taskPersonService.remove(new LambdaQueryWrapper().eq(SupTaskPerson::getTaskId,id)); + testingAlcoholPeopleService.remove(new LambdaQueryWrapper().eq(SupTaskTestingAlcoholPeople::getTaskId,id)); + break; + } + return true; + } + +} diff --git a/src/main/resources/mapper/SamplingMapper.xml b/src/main/resources/mapper/SamplingMapper.xml index d09f0e2..a5bc10a 100644 --- a/src/main/resources/mapper/SamplingMapper.xml +++ b/src/main/resources/mapper/SamplingMapper.xml @@ -15,6 +15,7 @@ + + + - + diff --git a/src/main/resources/static/templates/重点人员管控导入模板.xlsx b/src/main/resources/static/templates/重点人员管控导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..528867702d68a4f64df7eb6d686378d6ebd8d6cb GIT binary patch literal 12125 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 epWZ9~o9>@1Q$-obKVk