From f207fddf1f0271863cf348a8f0b0cd8410c97df0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E7=88=B1=E5=AD=A6=E4=B9=A0=E7=9A=84=E7=9F=B3?= =?UTF-8?q?=E5=90=8C=E5=AD=A6?= <2936013465@qq.com> Date: Fri, 1 Nov 2024 19:46:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=A1=E8=AE=BF=E5=A4=A7=E5=B1=8F?= =?UTF-8?q?=E5=90=8E=E7=AB=AF1.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constants/enums/MailTrendSourcesEnum.java | 25 ++++++++++ .../DataPetitionComplaintViewController.java | 47 +++++++++++++++++-- .../mapper/DataPetitionComplaintMapper.java | 10 ++++ .../pojo/vo/RecentMailTrendVo.java | 11 +++++ .../service/DataPetitionComplaintService.java | 16 ++++++- 5 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/biutag/supervision/constants/enums/MailTrendSourcesEnum.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/RecentMailTrendVo.java diff --git a/src/main/java/com/biutag/supervision/constants/enums/MailTrendSourcesEnum.java b/src/main/java/com/biutag/supervision/constants/enums/MailTrendSourcesEnum.java new file mode 100644 index 0000000..3718bbf --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/MailTrendSourcesEnum.java @@ -0,0 +1,25 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum MailTrendSourcesEnum { + ONE(1, 21), + TWO(2, 22), + THREE(3, 23), + FOUR(4, 24); + + private final int code; // 前端传来的code + private final int mappedCode; // 后端需要用到的code + + public static int getMappedCodeByCode(int code) { + for (MailTrendSourcesEnum value : MailTrendSourcesEnum.values()) { + if (value.code == code) { + return value.getMappedCode(); + } + } + throw new IllegalArgumentException("Invalid sourcesCode: " + code); + } +} diff --git a/src/main/java/com/biutag/supervision/controller/datav/DataPetitionComplaintViewController.java b/src/main/java/com/biutag/supervision/controller/datav/DataPetitionComplaintViewController.java index ff0bbdf..d2769f0 100644 --- a/src/main/java/com/biutag/supervision/controller/datav/DataPetitionComplaintViewController.java +++ b/src/main/java/com/biutag/supervision/controller/datav/DataPetitionComplaintViewController.java @@ -11,15 +11,17 @@ import com.biutag.supervision.mapper.DataPetitionComplaintMapper; import com.biutag.supervision.pojo.Result; import com.biutag.supervision.pojo.dto.CaseVerifDepart; import com.biutag.supervision.pojo.entity.DataPetitionComplaint; +import com.biutag.supervision.pojo.vo.RecentMailTrendVo; import com.biutag.supervision.service.DataPetitionComplaintService; import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -75,5 +77,42 @@ public class DataPetitionComplaintViewController { return Result.success(data); } + /** + * 信访数据大屏信访趋势统计 + */ + @GetMapping("/getRecentlyMailTrend") + public Result getRecentlyMailTrend(@RequestParam Integer sourcesCode, + @RequestParam Integer days, + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime, + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime + ) { + JSONObject jsonObject = new JSONObject(); + // 库中的数据 2024/10/24 22 + List recentMailTrendVoList = dataPetitionComplaintService.getRecentlyMailTrend(sourcesCode, days, endTime); + ArrayList dayList = new ArrayList<>(); + ArrayList totalList = new ArrayList<>(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + LocalDate previousDate = null; + for (RecentMailTrendVo recentMailTrendVo : recentMailTrendVoList) { + // 获取当前日期 + LocalDate currentDate = LocalDate.parse(recentMailTrendVo.getDayTime(), formatter); + if (previousDate != null) { + while (ChronoUnit.DAYS.between(previousDate, currentDate) > 1) { + previousDate = previousDate.plusDays(1); // 日期加1 + String res = previousDate.format(formatter); // 格式化日期 + dayList.add(res.substring(res.indexOf('/') + 1)); // 添加到dayList + totalList.add("0"); // 插入没有数据的日期,总数为0 + } + } + String res = currentDate.format(formatter); + dayList.add(res.substring(res.indexOf('/') + 1)); + totalList.add(recentMailTrendVo.getTotal()); + previousDate = currentDate; + } + jsonObject.fluentPut("dayList", dayList); + jsonObject.fluentPut("totalList", totalList); + return Result.success(jsonObject); + } + } diff --git a/src/main/java/com/biutag/supervision/mapper/DataPetitionComplaintMapper.java b/src/main/java/com/biutag/supervision/mapper/DataPetitionComplaintMapper.java index b45bd53..96eb1c0 100644 --- a/src/main/java/com/biutag/supervision/mapper/DataPetitionComplaintMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/DataPetitionComplaintMapper.java @@ -3,6 +3,7 @@ package com.biutag.supervision.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.biutag.supervision.pojo.dto.CaseVerifDepart; import com.biutag.supervision.pojo.entity.DataPetitionComplaint; +import com.biutag.supervision.pojo.vo.RecentMailTrendVo; import org.apache.ibatis.annotations.Select; import java.util.Date; @@ -71,4 +72,13 @@ public interface DataPetitionComplaintMapper extends BaseMapper selectMassMail(Integer id, int isMass, Date beginTime, Date endTime); + + @Select("SELECT DATE_FORMAT(dpc.discovery_time, '%Y/%m/%d') AS dayTime, COUNT(*) total " + + "FROM data_petition_complaint dpc " + + "WHERE dpc.discovery_time BETWEEN #{frontDay} AND #{currentDay} " + + "AND problem_sources_code = #{sourcesCode} " + + "GROUP BY dayTime " + + "ORDER BY dpc.discovery_time asc;") + List selectRecentlyMailTrend(Integer sourcesCode, String frontDay, String currentDay); + } diff --git a/src/main/java/com/biutag/supervision/pojo/vo/RecentMailTrendVo.java b/src/main/java/com/biutag/supervision/pojo/vo/RecentMailTrendVo.java new file mode 100644 index 0000000..6d8598a --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/RecentMailTrendVo.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.pojo.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class RecentMailTrendVo { + private String dayTime; // 10/01 + private String total; // 10 +} diff --git a/src/main/java/com/biutag/supervision/service/DataPetitionComplaintService.java b/src/main/java/com/biutag/supervision/service/DataPetitionComplaintService.java index 713cfdf..3676f3d 100644 --- a/src/main/java/com/biutag/supervision/service/DataPetitionComplaintService.java +++ b/src/main/java/com/biutag/supervision/service/DataPetitionComplaintService.java @@ -13,12 +13,16 @@ import com.biutag.supervision.mapper.DataPetitionComplaintMapper; import com.biutag.supervision.pojo.dto.*; import com.biutag.supervision.pojo.entity.DataPetitionComplaint; import com.biutag.supervision.pojo.param.DataPetitionComplaintQueryParam; +import com.biutag.supervision.pojo.vo.RecentMailTrendVo; import lombok.RequiredArgsConstructor; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; @@ -202,5 +206,15 @@ public class DataPetitionComplaintService extends ServiceImpl getRecentlyMailTrend(Integer sourcesCode, Integer days, Date endTime) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + // 将 endTime 转换为 LocalDate + LocalDate endLocalDate = endTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + String currentDay = endLocalDate.format(formatter); // 前端页面的最后查询日期 + LocalDate frontDateDay = endLocalDate.minusDays(days); // days天前 + String frontDay = frontDateDay.format(formatter); + List recentMailTrendVos = + dataPetitionComplaintMapper.selectRecentlyMailTrend(MailTrendSourcesEnum.getMappedCodeByCode(sourcesCode), frontDay, currentDay); + return recentMailTrendVos; + } } From 2aadc94bd4142b3b39beecce0da1fd78fdcd82d5 Mon Sep 17 00:00:00 2001 From: wxc <191104855@qq.com> Date: Fri, 1 Nov 2024 19:56:16 +0800 Subject: [PATCH 2/2] 2411011956 --- .gitignore | 33 + .mvn/wrapper/maven-wrapper.properties | 19 + README.md | 5 + demo.json | 1978 +++++++++++++++++ mvnw | 259 +++ mvnw.cmd | 149 ++ pom.xml | 219 ++ sql/0911.sql | 2 + sql/1008.sql | 115 + sql/1011.sql | 5 + sql/1014.sql | 9 + sql/1027.sql | 21 + sql/data.sql | 83 + sql/dict.sql | 25 + sql/file_class.sql | 8 + sql/negative_0904.sql | 548 +++++ sql/negative_mark.sql | 8 + sql/open-platform_0904.sql | 89 + sql/truncate.sql | 4 + sql/update-data.sql | 1 + .../supervision/SupervisionApplication.java | 15 + .../supervision/common/UserContextHolder.java | 34 + .../supervision/config/FastDFSConfig.java | 20 + .../config/GlobalExceptionHandler.java | 62 + .../supervision/config/InterceptorConfig.java | 73 + .../supervision/config/MybatisPlusConfig.java | 22 + .../supervision/config/ScheduledConfig.java | 22 + .../supervision/config/SwaggerConfig.java | 28 + .../supervision/constants/AppConstants.java | 28 + .../constants/RedisKeyConstants.java | 6 + .../constants/enums/ApprovalFlowEnum.java | 17 + .../constants/enums/ApproveStateEnum.java | 7 + .../constants/enums/BusinessTypeEnum.java | 39 + .../enums/CaseVerifProblemNatureEnum.java | 19 + .../constants/enums/DataUpdateMethodEnum.java | 9 + .../constants/enums/DepartGroupEnum.java | 20 + .../constants/enums/DepartLevelEnum.java | 16 + .../enums/DistributionCycleEnum.java | 10 + .../constants/enums/DistributionFlowEnum.java | 17 + .../enums/DistributionMethodEnum.java | 23 + .../enums/DistributionStateEnum.java | 22 + .../constants/enums/FlowActionEnum.java | 19 + .../constants/enums/FlowNodeEnum.java | 41 + .../constants/enums/HostLevelEnums.java | 15 + .../constants/enums/InitialPetition.java | 38 + .../constants/enums/InspectCaseEnum.java | 28 + .../constants/enums/IsRectifyEnum.java | 16 + .../supervision/constants/enums/MenuEnum.java | 17 + .../enums/NegativeTaskCategoryEnum.java | 13 + .../enums/NegativeTaskStatusEnum.java | 14 + .../constants/enums/PersonTypeEnum.java | 21 + .../constants/enums/ProblemSourcesEnum.java | 46 + .../constants/enums/ProcessingStatusEnum.java | 26 + .../constants/enums/RepeatEnum.java | 18 + .../constants/enums/RoleCodeEnum.java | 17 + .../constants/enums/StatusEnum.java | 15 + .../constants/enums/TimeLimitEnum.java | 38 + .../constants/enums/WorkStateEnum.java | 7 + .../constants/enums/WorkStatusEnum.java | 7 + .../controller/AuthController.java | 79 + .../controller/FileController.java | 46 + .../controller/LoginController.java | 64 + .../controller/StatisticsController.java | 156 ++ .../api/jwdc/NegativeApiController.java | 49 + .../plugin/PetitionComplainApiController.java | 30 + .../baseData/BusinessDepartController.java | 23 + .../baseData/BusinessPoliceController.java | 24 + .../data/DataCaseVerifController.java | 119 + .../data/DataPetitionComplaintController.java | 134 ++ .../DataPetitionComplaintViewController.java | 79 + .../datav/DataVCaseVerifController.java | 78 + .../datav/DatavRightsComfortController.java | 54 + .../ModelClassController.java | 26 + .../ModelClueController.java | 58 + .../ModelClueRecordController.java | 37 + .../ModelClueTaskController.java | 38 + .../sensitivePerception/ModelController.java | 75 + .../ProfileDepartController.java | 81 + .../controller/system/DepartController.java | 100 + .../system/DictContentController.java | 52 + .../controller/system/DictController.java | 104 + .../controller/system/HolidayController.java | 71 + .../controller/system/MenuController.java | 51 + .../controller/system/PoliceController.java | 249 +++ .../controller/system/RoleController.java | 60 + .../controller/system/UserController.java | 30 + .../controller/work/FlowNodeController.java | 25 + .../controller/work/NegativeController.java | 68 + .../work/NegativeFavController.java | 43 + .../work/NegativeTaskController.java | 26 + .../controller/work/WorkController.java | 31 + .../supervision/exception/AuthException.java | 4 + .../biutag/supervision/flow/FlowService.java | 53 + .../supervision/flow/action/Action.java | 9 + .../flow/action/ApplyCompletionAction.java | 182 ++ .../flow/action/ApplyExtensionAction.java | 108 + .../flow/action/FirstApproveAction.java | 77 + .../flow/action/FirstApproveReturnAction.java | 89 + .../flow/action/FirstDistributeAction.java | 114 + .../action/FirstExtensionApproveAction.java | 82 + .../action/FirstExtensionReturnAction.java | 70 + .../supervision/flow/action/SaveAction.java | 98 + .../flow/action/SecondApproveAction.java | 104 + .../action/SecondApproveReturnAction.java | 92 + .../flow/action/SecondDistributeAction.java | 76 + .../action/SecondExtensionApproveAction.java | 88 + .../action/SecondExtensionReturnAction.java | 70 + .../action/SecondLocalProcessingAction.java | 31 + .../flow/action/SecondSignAction.java | 45 + .../flow/action/SecondSignReturnAction.java | 83 + .../flow/action/ThreeSignAction.java | 46 + .../flow/action/ThreeSignReturnAction.java | 125 ++ .../java/com/biutag/supervision/job/Job.java | 98 + .../supervision/mapper/BaseAccountMapper.java | 14 + .../supervision/mapper/BaseRoleMapper.java | 10 + .../mapper/BaseRoleUserMapper.java | 10 + .../supervision/mapper/BaseUserMapper.java | 10 + .../mapper/BusinessDepartMapper.java | 14 + .../supervision/mapper/BusinessLogMapper.java | 8 + .../mapper/BusinessPoliceMapper.java | 13 + .../mapper/DataCaseVerifMapper.java | 24 + .../mapper/DataPetitionComplaintMapper.java | 74 + .../mapper/DataRightsComfortMapper.java | 7 + .../supervision/mapper/FlowActionMapper.java | 8 + .../supervision/mapper/FlowNodeMapper.java | 8 + .../supervision/mapper/GBaseAJJBXXMapper.java | 12 + .../supervision/mapper/GBaseCJDMapper.java | 17 + .../supervision/mapper/GBaseJJDMapper.java | 17 + .../supervision/mapper/HolidayMapper.java | 8 + .../biutag/supervision/mapper/MenuMapper.java | 10 + .../supervision/mapper/ModelClassMapper.java | 8 + .../mapper/ModelClueDataMapper.java | 23 + .../supervision/mapper/ModelClueMapper.java | 16 + .../mapper/ModelClueRecordMapper.java | 8 + .../mapper/ModelClueTaskMapper.java | 22 + .../supervision/mapper/ModelMapper.java | 8 + .../mapper/NegDepartAuthorityMapper.java | 8 + .../mapper/NegSourceAuthorityMapper.java | 8 + .../mapper/NegativeApproveMapper.java | 8 + .../mapper/NegativeBlameMapper.java | 8 + .../mapper/NegativeExtensionApplyMapper.java | 8 + .../NegativeExtensionApproveMapper.java | 8 + .../supervision/mapper/NegativeFavMapper.java | 16 + .../mapper/NegativeFileMapper.java | 8 + .../mapper/NegativeHistoryMapper.java | 8 + .../supervision/mapper/NegativeMapper.java | 7 + .../mapper/NegativeProblemRelationMapper.java | 8 + .../mapper/NegativeSignReturnMapper.java | 8 + .../mapper/NegativeTaskMapper.java | 8 + .../mapper/NegativeThingFileMapper.java | 8 + .../mapper/NegativeWorkMapper.java | 18 + .../mapper/ProfileDepartMapper.java | 19 + .../supervision/mapper/RoleMenuMapper.java | 10 + .../supervision/mapper/RpcApplyMapper.java | 37 + .../mapper/RpcApplyPersonMapper.java | 8 + .../mapper/RpcInfringerResultMapper.java | 8 + .../mapper/StatisticsDepartMapper.java | 18 + .../mapper/StatisticsGroupMapper.java | 18 + .../supervision/mapper/SupDepartMapper.java | 33 + .../mapper/SupDictContentMapper.java | 8 + .../supervision/mapper/SupDictDataMapper.java | 8 + .../mapper/SupDictProblemSourceMapper.java | 8 + .../supervision/mapper/SupDictTypeMapper.java | 8 + .../mapper/SupExternalDepartMapper.java | 19 + .../supervision/mapper/SupPoliceMapper.java | 15 + .../biutag/supervision/mapper/UserMapper.java | 8 + .../com/biutag/supervision/pojo/Result.java | 48 + .../biutag/supervision/pojo/domain/Blame.java | 180 ++ .../pojo/domain/ExtensionApply.java | 38 + .../pojo/domain/NegativeDetail.java | 44 + .../supervision/pojo/domain/NegativeVo.java | 182 ++ .../supervision/pojo/domain/PoliceAuth.java | 18 + .../pojo/domain/ProfileDepart.java | 52 + .../biutag/supervision/pojo/domain/Self.java | 22 + .../supervision/pojo/dto/AccountDto.java | 19 + .../supervision/pojo/dto/ActionDto.java | 23 + .../supervision/pojo/dto/CaseVerifDepart.java | 17 + .../pojo/dto/DataCaseVerifDistribute.java | 37 + .../pojo/dto/DataCaseVerifImportDto.java | 72 + .../DataDataPetitionComplainDistribute.java | 37 + .../pojo/dto/DataPetitionComplaintAddDto.java | 20 + .../pojo/dto/DataPetitionComplaintDto.java | 94 + .../dto/DataPetitionComplaintImportDto.java | 89 + .../supervision/pojo/dto/DictDataDto.java | 41 + .../supervision/pojo/dto/DictTypeDto.java | 23 + .../biutag/supervision/pojo/dto/MenuDto.java | 41 + .../pojo/dto/ModelClueDepartDto.java | 16 + .../pojo/dto/ModelClueTaskDistribute.java | 49 + .../supervision/pojo/dto/NegativeDto.java | 101 + .../supervision/pojo/dto/PoliceImport.java | 39 + .../biutag/supervision/pojo/dto/UserDto.java | 37 + .../supervision/pojo/dto/common/PieItem.java | 18 + .../pojo/dto/flow/ApproveData.java | 11 + .../pojo/dto/flow/ExtensionApplyData.java | 16 + .../pojo/dto/flow/FirstDistributeData.java | 37 + .../pojo/dto/flow/SecondDistributeData.java | 14 + .../pojo/dto/flow/SignReturnData.java | 11 + .../supervision/pojo/dto/flow/VerifyData.java | 223 ++ .../pojo/dto/jwdc/NegativeApiDto.java | 111 + .../supervision/pojo/entity/BaseAccount.java | 55 + .../supervision/pojo/entity/BaseRole.java | 50 + .../supervision/pojo/entity/BaseRoleUser.java | 30 + .../supervision/pojo/entity/BaseUser.java | 62 + .../pojo/entity/BusinessDepart.java | 56 + .../supervision/pojo/entity/BusinessLog.java | 37 + .../pojo/entity/BusinessPolice.java | 68 + .../pojo/entity/DataCaseVerif.java | 74 + .../pojo/entity/DataPetitionComplaint.java | 92 + .../pojo/entity/DataRightsComfort.java | 9 + .../supervision/pojo/entity/FlowAction.java | 56 + .../supervision/pojo/entity/FlowNode.java | 26 + .../supervision/pojo/entity/GBaseAJJBXX.java | 58 + .../supervision/pojo/entity/GBaseCJD.java | 36 + .../supervision/pojo/entity/GBaseJJD.java | 33 + .../supervision/pojo/entity/Holiday.java | 33 + .../biutag/supervision/pojo/entity/Menu.java | 74 + .../biutag/supervision/pojo/entity/Model.java | 94 + .../supervision/pojo/entity/ModelClass.java | 27 + .../supervision/pojo/entity/ModelClue.java | 96 + .../pojo/entity/ModelClueRecord.java | 42 + .../pojo/entity/ModelClueTask.java | 37 + .../pojo/entity/NegDepartAuthority.java | 22 + .../pojo/entity/NegSourceAuthority.java | 21 + .../supervision/pojo/entity/Negative.java | 255 +++ .../pojo/entity/NegativeApprove.java | 55 + .../pojo/entity/NegativeBlame.java | 243 ++ .../pojo/entity/NegativeExtensionApply.java | 53 + .../pojo/entity/NegativeExtensionApprove.java | 61 + .../supervision/pojo/entity/NegativeFav.java | 31 + .../supervision/pojo/entity/NegativeFile.java | 53 + .../pojo/entity/NegativeHistory.java | 50 + .../pojo/entity/NegativeProblemRelation.java | 48 + .../pojo/entity/NegativeSignReturn.java | 52 + .../supervision/pojo/entity/NegativeTask.java | 83 + .../pojo/entity/NegativeThingFile.java | 39 + .../supervision/pojo/entity/NegativeWork.java | 49 + .../supervision/pojo/entity/RoleMenu.java | 25 + .../supervision/pojo/entity/RpcApply.java | 38 + .../pojo/entity/RpcApplyPerson.java | 31 + .../pojo/entity/RpcInfringerResult.java | 35 + .../pojo/entity/StatisticsDepart.java | 47 + .../pojo/entity/StatisticsGroup.java | 47 + .../supervision/pojo/entity/SupDepart.java | 84 + .../supervision/pojo/entity/SupDictData.java | 73 + .../pojo/entity/SupDictProblemSource.java | 31 + .../pojo/entity/SupDictProblemType.java | 90 + .../supervision/pojo/entity/SupDictType.java | 53 + .../pojo/entity/SupExternalDepart.java | 63 + .../supervision/pojo/entity/SupPolice.java | 151 ++ .../biutag/supervision/pojo/entity/User.java | 59 + .../pojo/model/BusinessPoliceModel.java | 50 + .../pojo/model/DataRightsComfortModel.java | 28 + .../pojo/model/DepartNegativeModel.java | 27 + .../pojo/model/ModelClueModel.java | 51 + .../pojo/model/ModelClueTaskDepartModel.java | 33 + .../pojo/model/ModelClueTaskModel.java | 40 + .../pojo/model/NegativeFavModel.java | 55 + .../pojo/model/NegativeWorkModel.java | 90 + .../supervision/pojo/model/PoliceModel.java | 112 + .../supervision/pojo/model/UserAuth.java | 35 + .../supervision/pojo/model/UserModel.java | 48 + .../supervision/pojo/param/BasePage.java | 14 + .../pojo/param/BusinessQueryParam.java | 30 + .../pojo/param/DataCaseVerifQueryParam.java | 23 + .../DataPetitionComplaintQueryParam.java | 29 + .../pojo/param/DepartNegativeQueryParam.java | 23 + .../pojo/param/DepartQueryParam.java | 16 + .../pojo/param/DepartTreeListParam.java | 13 + .../pojo/param/ModelClueQueryParam.java | 29 + .../pojo/param/ModelClueTaskQueryParam.java | 23 + .../pojo/param/ModelQueryParam.java | 15 + .../pojo/param/NegativeQueryParam.java | 56 + .../pojo/param/NegativeTaskQueryParam.java | 20 + .../pojo/param/PoliceQueryParam.java | 18 + .../pojo/param/RoleQueryParam.java | 11 + .../pojo/param/UserQueryParam.java | 16 + .../supervision/pojo/param/WorkParam.java | 24 + .../supervision/pojo/vo/DepartTree.java | 41 + .../supervision/pojo/vo/DictContentTree.java | 48 + .../pojo/vo/DictProblemSourceTree.java | 23 + .../supervision/pojo/vo/ExportNegativeVo.java | 80 + .../biutag/supervision/pojo/vo/FileVo.java | 19 + .../biutag/supervision/pojo/vo/MenuTree.java | 67 + .../biutag/supervision/pojo/vo/ModelTree.java | 34 + .../supervision/pojo/vo/NegativeQueryVo.java | 185 ++ .../com/biutag/supervision/pojo/vo/Route.java | 11 + .../biutag/supervision/pojo/vo/TokenVo.java | 14 + .../service/BaseAccountService.java | 20 + .../supervision/service/BaseRoleService.java | 32 + .../service/BaseRoleUserService.java | 23 + .../supervision/service/BaseUserService.java | 92 + .../service/BusinessDepartService.java | 282 +++ .../service/BusinessLogService.java | 11 + .../service/BusinessPoliceService.java | 423 ++++ .../service/DataCaseVerifService.java | 100 + .../service/DataPetitionComplaintService.java | 206 ++ .../service/DataRightsComfortService.java | 73 + .../supervision/service/FileService.java | 44 + .../service/FlowActionService.java | 18 + .../supervision/service/FlowNodeService.java | 18 + .../supervision/service/HolidayService.java | 42 + .../supervision/service/MenuService.java | 61 + .../service/ModelClassService.java | 11 + .../service/ModelClueRecordService.java | 11 + .../supervision/service/ModelClueService.java | 802 +++++++ .../service/ModelClueTaskService.java | 41 + .../supervision/service/ModelService.java | 55 + .../service/NegDepartAuthorityService.java | 34 + .../service/NegSourceAuthorityService.java | 35 + .../service/NegativeApproveService.java | 22 + .../service/NegativeBlameService.java | 35 + .../NegativeExtensionApplyService.java | 25 + .../NegativeExtensionApproveService.java | 18 + .../service/NegativeFavService.java | 29 + .../service/NegativeFileService.java | 37 + .../service/NegativeHistoryService.java | 18 + .../NegativeProblemRelationService.java | 24 + .../service/NegativeQueryService.java | 112 + .../supervision/service/NegativeService.java | 308 +++ .../service/NegativeSignReturnService.java | 18 + .../service/NegativeTaskService.java | 90 + .../service/NegativeThingFileService.java | 19 + .../service/NegativeWorkService.java | 49 + .../supervision/service/RoleMenuService.java | 35 + .../service/RpcApplyPersonService.java | 11 + .../supervision/service/RpcApplyService.java | 13 + .../service/RpcInfringerResultService.java | 11 + .../service/StatisticsDepartService.java | 11 + .../service/StatisticsGroupService.java | 11 + .../supervision/service/SupDepartService.java | 273 +++ .../service/SupDictContentService.java | 51 + .../service/SupDictDataService.java | 33 + .../service/SupDictProblemSourceService.java | 50 + .../service/SupDictTypeService.java | 27 + .../service/SupExternalDepartService.java | 141 ++ .../supervision/service/SupPoliceService.java | 87 + .../supervision/service/UserLoginService.java | 46 + .../supervision/service/UserService.java | 11 + .../support/ModelClueDistributionAware.java | 78 + .../supervision/support/ModelEditAspect.java | 49 + .../java/com/biutag/supervision/util/AES.java | 154 ++ .../supervision/util/ExpressionBuilder.java | 22 + .../com/biutag/supervision/util/JSON.java | 45 + .../biutag/supervision/util/SpringUtil.java | 28 + .../com/biutag/supervision/util/TimeUtil.java | 105 + src/main/resources/application-dev.yml | 65 + src/main/resources/application-local.yml | 36 + src/main/resources/application-prod.yml | 57 + src/main/resources/application.yml | 45 + ...connector-java-8.3.81.53-build52.8-bin.jar | Bin 0 -> 786598 bytes .../resources/mapper/BusinessDepartMapper.xml | 24 + .../resources/mapper/BusinessPoliceMapper.xml | 24 + src/main/resources/mapper/GBaseCJDMapper.xml | 13 + src/main/resources/mapper/GBaseJJDMapper.xml | 13 + src/main/resources/mapper/ModelClueMapper.xml | 16 + .../resources/mapper/ModelClueTaskMapper.xml | 48 + .../resources/mapper/NegativeFavMapper.xml | 15 + .../resources/mapper/NegativeWorkMapper.xml | 18 + .../resources/mapper/ProfileDepartMapper.xml | 43 + src/main/resources/mapper/SupPoliceMapper.xml | 51 + .../templates/《处理反馈表》.doc | Bin 0 -> 27136 bytes ...警务评议容错免责申请表》.docx | Bin 0 -> 13411 bytes .../信访投诉数据台账(模板).xlsx | Bin 0 -> 10602 bytes .../数字督察警员权限导入模板.xlsx | Bin 0 -> 8918 bytes .../案件核查问题台账(模板).xlsx | Bin 0 -> 14335 bytes ...系问题赋分及风险预警机制.pdf | Bin 0 -> 166890 bytes .../com/biutag/supervision/PasswordTests.java | 29 + .../java/com/biutag/supervision/StrUtil.java | 22 + .../SupervisionApplicationTests.java | 40 + .../supervision/tools/ColumnMapper.java | 14 + .../biutag/supervision/tools/ExcelToDb.java | 51 + .../com/biutag/supervision/tools/GenCode.java | 47 + .../supervision/tools/GenCodeTests.java | 79 + .../biutag/supervision/tools/Translate.java | 44 + src/test/resources/templates/Entity.ftl | 27 + src/test/resources/templates/Mapper.ftl | 8 + src/test/resources/templates/Service.ftl | 11 + 377 files changed, 20788 insertions(+) create mode 100644 .gitignore create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 README.md create mode 100644 demo.json create mode 100644 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 sql/0911.sql create mode 100644 sql/1008.sql create mode 100644 sql/1011.sql create mode 100644 sql/1014.sql create mode 100644 sql/1027.sql create mode 100644 sql/data.sql create mode 100644 sql/dict.sql create mode 100644 sql/file_class.sql create mode 100644 sql/negative_0904.sql create mode 100644 sql/negative_mark.sql create mode 100644 sql/open-platform_0904.sql create mode 100644 sql/truncate.sql create mode 100644 sql/update-data.sql create mode 100644 src/main/java/com/biutag/supervision/SupervisionApplication.java create mode 100644 src/main/java/com/biutag/supervision/common/UserContextHolder.java create mode 100644 src/main/java/com/biutag/supervision/config/FastDFSConfig.java create mode 100644 src/main/java/com/biutag/supervision/config/GlobalExceptionHandler.java create mode 100644 src/main/java/com/biutag/supervision/config/InterceptorConfig.java create mode 100644 src/main/java/com/biutag/supervision/config/MybatisPlusConfig.java create mode 100644 src/main/java/com/biutag/supervision/config/ScheduledConfig.java create mode 100644 src/main/java/com/biutag/supervision/config/SwaggerConfig.java create mode 100644 src/main/java/com/biutag/supervision/constants/AppConstants.java create mode 100644 src/main/java/com/biutag/supervision/constants/RedisKeyConstants.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/ApprovalFlowEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/ApproveStateEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/BusinessTypeEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/CaseVerifProblemNatureEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/DataUpdateMethodEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/DepartGroupEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/DepartLevelEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/DistributionCycleEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/DistributionFlowEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/DistributionMethodEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/DistributionStateEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/FlowActionEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/FlowNodeEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/HostLevelEnums.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/InitialPetition.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/InspectCaseEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/IsRectifyEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/MenuEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/NegativeTaskCategoryEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/NegativeTaskStatusEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/PersonTypeEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/ProblemSourcesEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/ProcessingStatusEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/RepeatEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/RoleCodeEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/StatusEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/TimeLimitEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/WorkStateEnum.java create mode 100644 src/main/java/com/biutag/supervision/constants/enums/WorkStatusEnum.java create mode 100644 src/main/java/com/biutag/supervision/controller/AuthController.java create mode 100644 src/main/java/com/biutag/supervision/controller/FileController.java create mode 100644 src/main/java/com/biutag/supervision/controller/LoginController.java create mode 100644 src/main/java/com/biutag/supervision/controller/StatisticsController.java create mode 100644 src/main/java/com/biutag/supervision/controller/api/jwdc/NegativeApiController.java create mode 100644 src/main/java/com/biutag/supervision/controller/api/plugin/PetitionComplainApiController.java create mode 100644 src/main/java/com/biutag/supervision/controller/baseData/BusinessDepartController.java create mode 100644 src/main/java/com/biutag/supervision/controller/baseData/BusinessPoliceController.java create mode 100644 src/main/java/com/biutag/supervision/controller/data/DataCaseVerifController.java create mode 100644 src/main/java/com/biutag/supervision/controller/data/DataPetitionComplaintController.java create mode 100644 src/main/java/com/biutag/supervision/controller/datav/DataPetitionComplaintViewController.java create mode 100644 src/main/java/com/biutag/supervision/controller/datav/DataVCaseVerifController.java create mode 100644 src/main/java/com/biutag/supervision/controller/datav/DatavRightsComfortController.java create mode 100644 src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClassController.java create mode 100644 src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueController.java create mode 100644 src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueRecordController.java create mode 100644 src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueTaskController.java create mode 100644 src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelController.java create mode 100644 src/main/java/com/biutag/supervision/controller/sensitivePerception/ProfileDepartController.java create mode 100644 src/main/java/com/biutag/supervision/controller/system/DepartController.java create mode 100644 src/main/java/com/biutag/supervision/controller/system/DictContentController.java create mode 100644 src/main/java/com/biutag/supervision/controller/system/DictController.java create mode 100644 src/main/java/com/biutag/supervision/controller/system/HolidayController.java create mode 100644 src/main/java/com/biutag/supervision/controller/system/MenuController.java create mode 100644 src/main/java/com/biutag/supervision/controller/system/PoliceController.java create mode 100644 src/main/java/com/biutag/supervision/controller/system/RoleController.java create mode 100644 src/main/java/com/biutag/supervision/controller/system/UserController.java create mode 100644 src/main/java/com/biutag/supervision/controller/work/FlowNodeController.java create mode 100644 src/main/java/com/biutag/supervision/controller/work/NegativeController.java create mode 100644 src/main/java/com/biutag/supervision/controller/work/NegativeFavController.java create mode 100644 src/main/java/com/biutag/supervision/controller/work/NegativeTaskController.java create mode 100644 src/main/java/com/biutag/supervision/controller/work/WorkController.java create mode 100644 src/main/java/com/biutag/supervision/exception/AuthException.java create mode 100644 src/main/java/com/biutag/supervision/flow/FlowService.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/Action.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/ApplyCompletionAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/ApplyExtensionAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/FirstApproveAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/FirstApproveReturnAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/FirstDistributeAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/FirstExtensionApproveAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/FirstExtensionReturnAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/SaveAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/SecondApproveAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/SecondApproveReturnAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/SecondDistributeAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/SecondExtensionApproveAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/SecondExtensionReturnAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/SecondLocalProcessingAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/SecondSignAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/SecondSignReturnAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/ThreeSignAction.java create mode 100644 src/main/java/com/biutag/supervision/flow/action/ThreeSignReturnAction.java create mode 100644 src/main/java/com/biutag/supervision/job/Job.java create mode 100644 src/main/java/com/biutag/supervision/mapper/BaseAccountMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/BaseRoleMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/BaseRoleUserMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/BaseUserMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/BusinessLogMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/BusinessPoliceMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/DataPetitionComplaintMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/DataRightsComfortMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/FlowActionMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/FlowNodeMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/GBaseAJJBXXMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/GBaseCJDMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/GBaseJJDMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/HolidayMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/MenuMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/ModelClassMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/ModelClueDataMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/ModelClueMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/ModelClueRecordMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/ModelClueTaskMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/ModelMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegDepartAuthorityMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegSourceAuthorityMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeApproveMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeBlameMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeExtensionApplyMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeExtensionApproveMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeFavMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeFileMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeHistoryMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeProblemRelationMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeSignReturnMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeTaskMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeThingFileMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/NegativeWorkMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/ProfileDepartMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/RoleMenuMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/RpcApplyMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/RpcApplyPersonMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/RpcInfringerResultMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/StatisticsDepartMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/SupDepartMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/SupDictContentMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/SupDictDataMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/SupDictProblemSourceMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/SupDictTypeMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/SupExternalDepartMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/SupPoliceMapper.java create mode 100644 src/main/java/com/biutag/supervision/mapper/UserMapper.java create mode 100644 src/main/java/com/biutag/supervision/pojo/Result.java create mode 100644 src/main/java/com/biutag/supervision/pojo/domain/Blame.java create mode 100644 src/main/java/com/biutag/supervision/pojo/domain/ExtensionApply.java create mode 100644 src/main/java/com/biutag/supervision/pojo/domain/NegativeDetail.java create mode 100644 src/main/java/com/biutag/supervision/pojo/domain/NegativeVo.java create mode 100644 src/main/java/com/biutag/supervision/pojo/domain/PoliceAuth.java create mode 100644 src/main/java/com/biutag/supervision/pojo/domain/ProfileDepart.java create mode 100644 src/main/java/com/biutag/supervision/pojo/domain/Self.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/AccountDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/ActionDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/CaseVerifDepart.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/DataCaseVerifDistribute.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/DataCaseVerifImportDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/DataDataPetitionComplainDistribute.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintAddDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintImportDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/DictDataDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/DictTypeDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/MenuDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/ModelClueDepartDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/ModelClueTaskDistribute.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/PoliceImport.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/UserDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/common/PieItem.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/flow/ApproveData.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/flow/ExtensionApplyData.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/flow/FirstDistributeData.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/flow/SecondDistributeData.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/flow/SignReturnData.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/flow/VerifyData.java create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/jwdc/NegativeApiDto.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/BaseAccount.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/BaseRole.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/BaseRoleUser.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/BaseUser.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/BusinessDepart.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/BusinessLog.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/BusinessPolice.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/DataCaseVerif.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/DataPetitionComplaint.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/DataRightsComfort.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/FlowAction.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/FlowNode.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/GBaseAJJBXX.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/GBaseCJD.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/GBaseJJD.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/Holiday.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/Menu.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/Model.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/ModelClass.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/ModelClue.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/ModelClueRecord.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/ModelClueTask.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegDepartAuthority.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegSourceAuthority.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/Negative.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeApprove.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeBlame.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeExtensionApply.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeExtensionApprove.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeFav.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeFile.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeHistory.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeProblemRelation.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeSignReturn.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeTask.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeThingFile.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/NegativeWork.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/RoleMenu.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/RpcApply.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/RpcApplyPerson.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/RpcInfringerResult.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/StatisticsDepart.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/StatisticsGroup.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/SupDepart.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/SupDictData.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/SupDictProblemSource.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/SupDictProblemType.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/SupDictType.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/SupExternalDepart.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/SupPolice.java create mode 100644 src/main/java/com/biutag/supervision/pojo/entity/User.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/BusinessPoliceModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/DataRightsComfortModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/DepartNegativeModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/ModelClueModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/ModelClueTaskDepartModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/ModelClueTaskModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/NegativeFavModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/NegativeWorkModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/PoliceModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/UserAuth.java create mode 100644 src/main/java/com/biutag/supervision/pojo/model/UserModel.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/BasePage.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/BusinessQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/DataCaseVerifQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/DataPetitionComplaintQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/DepartNegativeQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/DepartQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/DepartTreeListParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/ModelClueQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/ModelClueTaskQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/ModelQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/NegativeQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/NegativeTaskQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/PoliceQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/RoleQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/UserQueryParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/param/WorkParam.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/DepartTree.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/DictContentTree.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/DictProblemSourceTree.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/ExportNegativeVo.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/FileVo.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/MenuTree.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/ModelTree.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/NegativeQueryVo.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/Route.java create mode 100644 src/main/java/com/biutag/supervision/pojo/vo/TokenVo.java create mode 100644 src/main/java/com/biutag/supervision/service/BaseAccountService.java create mode 100644 src/main/java/com/biutag/supervision/service/BaseRoleService.java create mode 100644 src/main/java/com/biutag/supervision/service/BaseRoleUserService.java create mode 100644 src/main/java/com/biutag/supervision/service/BaseUserService.java create mode 100644 src/main/java/com/biutag/supervision/service/BusinessDepartService.java create mode 100644 src/main/java/com/biutag/supervision/service/BusinessLogService.java create mode 100644 src/main/java/com/biutag/supervision/service/BusinessPoliceService.java create mode 100644 src/main/java/com/biutag/supervision/service/DataCaseVerifService.java create mode 100644 src/main/java/com/biutag/supervision/service/DataPetitionComplaintService.java create mode 100644 src/main/java/com/biutag/supervision/service/DataRightsComfortService.java create mode 100644 src/main/java/com/biutag/supervision/service/FileService.java create mode 100644 src/main/java/com/biutag/supervision/service/FlowActionService.java create mode 100644 src/main/java/com/biutag/supervision/service/FlowNodeService.java create mode 100644 src/main/java/com/biutag/supervision/service/HolidayService.java create mode 100644 src/main/java/com/biutag/supervision/service/MenuService.java create mode 100644 src/main/java/com/biutag/supervision/service/ModelClassService.java create mode 100644 src/main/java/com/biutag/supervision/service/ModelClueRecordService.java create mode 100644 src/main/java/com/biutag/supervision/service/ModelClueService.java create mode 100644 src/main/java/com/biutag/supervision/service/ModelClueTaskService.java create mode 100644 src/main/java/com/biutag/supervision/service/ModelService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegDepartAuthorityService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegSourceAuthorityService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeApproveService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeBlameService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeExtensionApplyService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeExtensionApproveService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeFavService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeFileService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeHistoryService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeProblemRelationService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeQueryService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeSignReturnService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeTaskService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeThingFileService.java create mode 100644 src/main/java/com/biutag/supervision/service/NegativeWorkService.java create mode 100644 src/main/java/com/biutag/supervision/service/RoleMenuService.java create mode 100644 src/main/java/com/biutag/supervision/service/RpcApplyPersonService.java create mode 100644 src/main/java/com/biutag/supervision/service/RpcApplyService.java create mode 100644 src/main/java/com/biutag/supervision/service/RpcInfringerResultService.java create mode 100644 src/main/java/com/biutag/supervision/service/StatisticsDepartService.java create mode 100644 src/main/java/com/biutag/supervision/service/StatisticsGroupService.java create mode 100644 src/main/java/com/biutag/supervision/service/SupDepartService.java create mode 100644 src/main/java/com/biutag/supervision/service/SupDictContentService.java create mode 100644 src/main/java/com/biutag/supervision/service/SupDictDataService.java create mode 100644 src/main/java/com/biutag/supervision/service/SupDictProblemSourceService.java create mode 100644 src/main/java/com/biutag/supervision/service/SupDictTypeService.java create mode 100644 src/main/java/com/biutag/supervision/service/SupExternalDepartService.java create mode 100644 src/main/java/com/biutag/supervision/service/SupPoliceService.java create mode 100644 src/main/java/com/biutag/supervision/service/UserLoginService.java create mode 100644 src/main/java/com/biutag/supervision/service/UserService.java create mode 100644 src/main/java/com/biutag/supervision/support/ModelClueDistributionAware.java create mode 100644 src/main/java/com/biutag/supervision/support/ModelEditAspect.java create mode 100644 src/main/java/com/biutag/supervision/util/AES.java create mode 100644 src/main/java/com/biutag/supervision/util/ExpressionBuilder.java create mode 100644 src/main/java/com/biutag/supervision/util/JSON.java create mode 100644 src/main/java/com/biutag/supervision/util/SpringUtil.java create mode 100644 src/main/java/com/biutag/supervision/util/TimeUtil.java create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-local.yml create mode 100644 src/main/resources/application-prod.yml create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/lib/gbase-connector-java-8.3.81.53-build52.8-bin.jar create mode 100644 src/main/resources/mapper/BusinessDepartMapper.xml create mode 100644 src/main/resources/mapper/BusinessPoliceMapper.xml create mode 100644 src/main/resources/mapper/GBaseCJDMapper.xml create mode 100644 src/main/resources/mapper/GBaseJJDMapper.xml create mode 100644 src/main/resources/mapper/ModelClueMapper.xml create mode 100644 src/main/resources/mapper/ModelClueTaskMapper.xml create mode 100644 src/main/resources/mapper/NegativeFavMapper.xml create mode 100644 src/main/resources/mapper/NegativeWorkMapper.xml create mode 100644 src/main/resources/mapper/ProfileDepartMapper.xml create mode 100644 src/main/resources/mapper/SupPoliceMapper.xml create mode 100644 src/main/resources/static/templates/《处理反馈表》.doc create mode 100644 src/main/resources/static/templates/《警务评议容错免责申请表》.docx create mode 100644 src/main/resources/static/templates/信访投诉数据台账(模板).xlsx create mode 100644 src/main/resources/static/templates/数字督察警员权限导入模板.xlsx create mode 100644 src/main/resources/static/templates/案件核查问题台账(模板).xlsx create mode 100644 src/main/resources/static/templates/长沙公安数字督察灵敏感知体系问题赋分及风险预警机制.pdf create mode 100644 src/test/java/com/biutag/supervision/PasswordTests.java create mode 100644 src/test/java/com/biutag/supervision/StrUtil.java create mode 100644 src/test/java/com/biutag/supervision/SupervisionApplicationTests.java create mode 100644 src/test/java/com/biutag/supervision/tools/ColumnMapper.java create mode 100644 src/test/java/com/biutag/supervision/tools/ExcelToDb.java create mode 100644 src/test/java/com/biutag/supervision/tools/GenCode.java create mode 100644 src/test/java/com/biutag/supervision/tools/GenCodeTests.java create mode 100644 src/test/java/com/biutag/supervision/tools/Translate.java create mode 100644 src/test/resources/templates/Entity.ftl create mode 100644 src/test/resources/templates/Mapper.ftl create mode 100644 src/test/resources/templates/Service.ftl diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..8f96f52 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip diff --git a/README.md b/README.md new file mode 100644 index 0000000..e8893ec --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# 数字督察一体化平台 +## 技术栈 +- JDK17 +- SpringBoot 3 +- MySQL \ No newline at end of file diff --git a/demo.json b/demo.json new file mode 100644 index 0000000..c95e6e1 --- /dev/null +++ b/demo.json @@ -0,0 +1,1978 @@ +{ + "id": "workbook", + "sheetOrder": [ + "sheet1" + ], + "appVersion": "0.2.5", + "locale": "zhCN", + "styles": { + "xGBbcX": { + "ff": "宋体", + "fs": 11, + "it": 0, + "bl": 1, + "ul": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "st": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "ol": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "tr": { + "a": 0, + "v": 0 + }, + "td": 0, + "cl": { + "rgb": "rgb(0,0,0)" + }, + "ht": 2, + "vt": 2, + "tb": 1, + "pd": { + "t": 0, + "b": 1, + "l": 2, + "r": 2 + }, + "bd": { + "l": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "r": { + "cl": { + "rgb": "black" + }, + "s": 1 + }, + "t": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "b": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + } + } + }, + "F-Ls2N": { + "ff": "宋体", + "fs": 11, + "it": 0, + "bl": 1, + "ul": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "st": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "ol": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "tr": { + "a": 0, + "v": 0 + }, + "td": 0, + "cl": { + "rgb": "rgb(0,0,0)" + }, + "bg": { + "rgb": "rgb(255,255,0)" + }, + "ht": 2, + "vt": 2, + "tb": 3, + "pd": { + "t": 0, + "b": 1, + "l": 2, + "r": 2 + }, + "bd": { + "r": { + "cl": { + "rgb": "black" + }, + "s": 1 + }, + "t": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "b": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + } + } + }, + "llzccW": { + "ff": "宋体", + "fs": 11, + "it": 0, + "bl": 1, + "ul": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "st": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "ol": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "tr": { + "a": 0, + "v": 0 + }, + "td": 0, + "cl": { + "rgb": "rgb(0,0,0)" + }, + "bg": { + "rgb": "rgb(255,255,0)" + }, + "ht": 2, + "vt": 2, + "tb": 3, + "pd": { + "t": 0, + "b": 1, + "l": 2, + "r": 2 + }, + "bd": { + "t": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "b": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + } + } + }, + "57w9Hq": { + "ff": "宋体", + "fs": 11, + "it": 0, + "bl": 1, + "ul": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "st": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "ol": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "tr": { + "a": 0, + "v": 0 + }, + "td": 0, + "cl": { + "rgb": "rgb(0,0,0)" + }, + "bg": { + "rgb": "rgb(255,255,0)" + }, + "ht": 2, + "vt": 2, + "tb": 3, + "pd": { + "t": 0, + "b": 1, + "l": 2, + "r": 2 + }, + "bd": { + "l": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "r": { + "cl": { + "rgb": "black" + }, + "s": 1 + }, + "t": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "b": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + } + } + }, + "jFn5AD": { + "ff": "黑体, monospace", + "fs": 11, + "it": 0, + "bl": 0, + "ul": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "st": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "ol": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "tr": { + "a": 0, + "v": 0 + }, + "td": 0, + "cl": { + "rgb": "rgb(0,0,0)" + }, + "bg": { + "rgb": "rgb(181,198,234)" + }, + "ht": 2, + "vt": 2, + "tb": 1, + "pd": { + "t": 0, + "b": 1, + "l": 2, + "r": 2 + }, + "bd": { + "l": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "r": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "b": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + } + } + }, + "qKi9hm": { + "ff": "黑体, monospace", + "fs": 11, + "it": 0, + "bl": 0, + "ul": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "st": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "ol": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "tr": { + "a": 0, + "v": 0 + }, + "td": 0, + "cl": { + "rgb": "rgb(0,0,0)" + }, + "bg": { + "rgb": "rgb(181,198,234)" + }, + "ht": 2, + "vt": 2, + "tb": 1, + "pd": { + "t": 0, + "b": 1, + "l": 2, + "r": 2 + }, + "bd": { + "r": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "b": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + } + } + }, + "_i-Ps5": { + "ff": "黑体, monospace", + "fs": 11, + "it": 0, + "bl": 0, + "ul": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "st": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "ol": { + "s": 0, + "cl": { + "rgb": "rgb(0,0,0)" + } + }, + "tr": { + "a": 0, + "v": 0 + }, + "td": 0, + "cl": { + "rgb": "rgb(0,0,0)" + }, + "bg": { + "rgb": "rgb(255,255,0)" + }, + "ht": 2, + "vt": 2, + "tb": 3, + "pd": { + "t": 0, + "b": 1, + "l": 2, + "r": 2 + }, + "bd": { + "r": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + }, + "b": { + "cl": { + "rgb": "windowtext" + }, + "s": 1 + } + } + } + }, + "sheets": { + "sheet1": { + "name": "信访投诉台账", + "id": "sheet1", + "cellData": { + "0": { + "0": { + "v": "信访基本信息", + "t": 1, + "s": "xGBbcX" + }, + "1": { + "s": "xGBbcX" + }, + "2": { + "s": "xGBbcX" + }, + "3": { + "s": "xGBbcX" + }, + "4": { + "s": "xGBbcX" + }, + "5": { + "s": "xGBbcX" + }, + "6": { + "s": "xGBbcX" + }, + "7": { + "s": "xGBbcX" + }, + "8": { + "s": "xGBbcX" + }, + "9": { + "s": "xGBbcX" + }, + "10": { + "s": "xGBbcX" + }, + "11": { + "s": "xGBbcX" + }, + "12": { + "s": "xGBbcX" + }, + "13": { + "s": "xGBbcX" + }, + "14": { + "v": "数字督察(单位责任信息)", + "t": 1, + "s": "F-Ls2N" + }, + "15": { + "s": "F-Ls2N" + }, + "16": { + "s": "F-Ls2N" + }, + "17": { + "v": "数字督察(涉及人员信息)", + "t": 1, + "s": "llzccW" + }, + "18": { + "s": "llzccW" + }, + "19": { + "s": "llzccW" + }, + "20": { + "s": "llzccW" + }, + "21": { + "s": "llzccW" + }, + "22": { + "s": "llzccW" + }, + "23": { + "s": "llzccW" + }, + "24": { + "s": "llzccW" + }, + "25": { + "s": "llzccW" + }, + "26": { + "s": "llzccW" + }, + "27": { + "s": "llzccW" + }, + "28": { + "v": "数字督察(涉及领导信息)", + "t": 1, + "s": "57w9Hq" + }, + "29": { + "s": "57w9Hq" + }, + "30": { + "s": "57w9Hq" + }, + "31": { + "s": "57w9Hq" + }, + "32": { + "s": "57w9Hq" + }, + "33": { + "s": "57w9Hq" + } + }, + "1": { + "0": { + "v": "投诉渠道", + "t": 1, + "s": "jFn5AD" + }, + "1": { + "v": "信件编号", + "t": 1, + "s": "qKi9hm" + }, + "2": { + "v": "受理层级", + "t": 1, + "s": "qKi9hm" + }, + "3": { + "v": "登记时间", + "t": 1, + "s": "qKi9hm" + }, + "4": { + "v": "投诉人", + "t": 1, + "s": "qKi9hm" + }, + "5": { + "v": "投诉人电话", + "t": 1, + "s": "qKi9hm" + }, + "6": { + "v": "初重信访", + "t": 1, + "s": "qKi9hm" + }, + "7": { + "v": "缠访闹访", + "t": 1, + "s": "qKi9hm" + }, + "8": { + "v": "群众集访", + "t": 1, + "s": "qKi9hm" + }, + "9": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": 72.41804504394531, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 1 + } + }, + "body": { + "dataStream": "涉嫌问题*\r\n", + "textRuns": [ + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "涉嫌问题*", + "t": 1, + "s": "qKi9hm" + }, + "10": { + "v": "业务类别", + "t": 1, + "s": "qKi9hm" + }, + "11": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": 72.41804504394531, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 1 + } + }, + "body": { + "dataStream": "涉及警种*\r\n", + "textRuns": [ + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "涉及警种*", + "t": 1, + "s": "qKi9hm" + }, + "12": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": 87.07803344726562, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 1 + } + }, + "body": { + "dataStream": "被投诉机构*\r\n", + "textRuns": [ + { + "st": 5, + "ed": 6, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 6, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "被投诉机构*", + "t": 1, + "s": "qKi9hm" + }, + "13": { + "v": "具体内容", + "t": 1, + "s": "qKi9hm" + }, + "14": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": 88, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "涉及单位*\r\n", + "textRuns": [ + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "涉及单位*", + "t": 1, + "s": "_i-Ps5" + }, + "15": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": 88, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "是否 单位责任*\r\n", + "textRuns": [ + { + "st": 10, + "ed": 11, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 11, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "是否 单位责任*", + "t": 1, + "s": "_i-Ps5" + }, + "16": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": 88, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "单位 处理结果\r\n", + "textRuns": [], + "paragraphs": [ + { + "startIndex": 10, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "单位 处理结果", + "t": 1, + "s": "_i-Ps5" + }, + "17": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "涉及人姓名*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 5, + "ed": 6, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 6, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "涉及人姓名*", + "t": 1, + "s": "_i-Ps5" + }, + "18": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "身份证号码*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 5, + "ed": 6, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 6, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "身份证号码*", + "t": 1, + "s": "_i-Ps5" + }, + "19": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "人员属性*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 4, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "人员属性*", + "t": 1, + "s": "_i-Ps5" + }, + "20": { + "v": "督察措施", + "t": 1, + "s": "_i-Ps5" + }, + "21": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "问题类型*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 4, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "问题类型*", + "t": 1, + "s": "_i-Ps5" + }, + "22": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "主观方面*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 4, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "主观方面*", + "t": 1, + "s": "_i-Ps5" + }, + "23": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "责任类别*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 4, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "责任类别*", + "t": 1, + "s": "_i-Ps5" + }, + "24": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "处理结果*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 4, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "处理结果*", + "t": 1, + "s": "_i-Ps5" + }, + "25": { + "v": "维权容错", + "t": 1, + "s": "_i-Ps5" + }, + "26": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "帮扶情况*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 4, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "帮扶情况*", + "t": 1, + "s": "_i-Ps5" + }, + "27": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "帮扶 开始结束时间*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 2, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 2, + "ed": 12, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 12, + "ed": 13, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 13, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "帮扶 开始结束时间*", + "t": 1, + "s": "_i-Ps5" + }, + "28": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "涉及领导姓名*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 6, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 6, + "ed": 7, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 7, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "涉及领导姓名*", + "t": 1, + "s": "_i-Ps5" + }, + "29": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "身份证号码*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 5, + "ed": 6, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 6, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "身份证号码*", + "t": 1, + "s": "_i-Ps5" + }, + "30": { + "v": "督察措施", + "t": 1, + "s": "_i-Ps5" + }, + "31": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "责任类别*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 4, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "责任类别*", + "t": 1, + "s": "_i-Ps5" + }, + "32": { + "p": { + "id": "d", + "documentStyle": { + "pageSize": { + "width": null, + "height": null + }, + "marginTop": 0, + "marginBottom": 1, + "marginRight": 2, + "marginLeft": 2, + "renderConfig": { + "horizontalAlign": 2, + "verticalAlign": 2, + "centerAngle": 0, + "vertexAngle": 0, + "wrapStrategy": 3 + } + }, + "body": { + "dataStream": "处理结果*\r\n", + "textRuns": [ + { + "st": 0, + "ed": 4, + "ts": { + "cl": { + "rgb": "rgb(0,0,0)" + }, + "fs": 11, + "ff": "黑体, monospace" + } + }, + { + "st": 4, + "ed": 5, + "ts": { + "cl": { + "rgb": "rgb(255,0,0)" + }, + "fs": 11, + "bl": 1, + "ff": "黑体, monospace" + } + } + ], + "paragraphs": [ + { + "startIndex": 5, + "paragraphStyle": { + "horizontalAlign": 2 + } + } + ] + }, + "drawings": {}, + "drawingsOrder": [] + }, + "v": "处理结果*", + "t": 1, + "s": "_i-Ps5" + }, + "33": { + "v": "维权容错", + "t": 1, + "s": "_i-Ps5" + } + } + }, + "mergeData": [ + { + "startRow": 0, + "endRow": 0, + "startColumn": 0, + "endColumn": 13 + }, + { + "startRow": 0, + "endRow": 0, + "startColumn": 14, + "endColumn": 16 + }, + { + "startRow": 0, + "endRow": 0, + "startColumn": 17, + "endColumn": 27 + }, + { + "startRow": 0, + "endRow": 0, + "startColumn": 42, + "endColumn": 47 + } + ], + "tabColor": "", + "hidden": 0, + "rowCount": 1000, + "columnCount": 34, + "zoomRatio": 1, + "freeze": { + "xSplit": 0, + "ySplit": 0, + "startRow": -1, + "startColumn": -1 + }, + "scrollTop": 0, + "scrollLeft": 0, + "defaultColumnWidth": 88, + "defaultRowHeight": 24, + "rowData": { + "0": { + "hd": 0, + "h": 40 + }, + "1": { + "hd": 0, + "h": 41.266666666666666 + } + }, + "columnData": { + "0": { + "w": 136, + "hd": 0 + }, + "1": { + "w": 146, + "hd": 0 + }, + "2": { + "w": 113, + "hd": 0 + }, + "3": { + "w": 146, + "hd": 0 + }, + "4": { + "w": 115, + "hd": 0 + }, + "5": { + "w": 146, + "hd": 0 + }, + "6": { + "w": 111, + "hd": 0 + }, + "7": { + "w": 98, + "hd": 0 + }, + "8": { + "w": 112, + "hd": 0 + }, + "9": { + "w": 98, + "hd": 0 + }, + "10": { + "w": 99, + "hd": 0 + }, + "11": { + "w": 94, + "hd": 0 + }, + "12": { + "w": 72, + "hd": 0 + }, + "13": { + "w": 88, + "hd": 0 + }, + "14": { + "w": 88, + "hd": 0 + }, + "15": { + "w": 88, + "hd": 0 + }, + "16": { + "w": 88, + "hd": 0 + }, + "17": { + "w": 88, + "hd": 0 + }, + "18": { + "w": 88, + "hd": 0 + }, + "19": { + "w": 88, + "hd": 0 + }, + "20": { + "w": 88, + "hd": 0 + }, + "21": { + "w": 96, + "hd": 0 + }, + "22": { + "w": 83, + "hd": 0 + }, + "23": { + "w": 90, + "hd": 0 + }, + "24": { + "w": 72, + "hd": 0 + }, + "25": { + "w": 91, + "hd": 0 + }, + "26": { + "w": 130, + "hd": 0 + }, + "27": { + "w": 124, + "hd": 0 + }, + "28": { + "w": 98, + "hd": 0 + }, + "29": { + "w": 107, + "hd": 0 + }, + "30": { + "w": 100, + "hd": 0 + }, + "31": { + "w": 102, + "hd": 0 + }, + "32": { + "w": 100, + "hd": 0 + }, + "33": { + "w": 88, + "hd": 0 + } + }, + "showGridlines": 1, + "rowHeader": { + "width": 46, + "hidden": 0 + }, + "columnHeader": { + "height": 20, + "hidden": 0 + }, + "selections": [ + "A1" + ], + "rightToLeft": 0 + } + }, + "resources": [] +} \ No newline at end of file diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..d7c358e --- /dev/null +++ b/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..6f779cf --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..8b4e47c --- /dev/null +++ b/pom.xml @@ -0,0 +1,219 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.2 + + + com.biutag + supervision + 0.0.1-SNAPSHOT + supervision + 长沙公安数据督察 + + + + + + + + + + + + + + + 17 + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springframework.boot + spring-boot-starter-data-redis-reactive + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + com.mysql + mysql-connector-j + runtime + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + io.projectreactor + reactor-test + test + + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.7 + + + + com.alibaba + easyexcel + 4.0.1 + + + + commons-io + commons-io + 2.17.0 + + + + + cn.hutool + hutool-core + 5.8.29 + + + cn.hutool + hutool-http + 5.8.29 + + + + com.baomidou + dynamic-datasource-spring-boot3-starter + 4.3.1 + + + + org.freemarker + freemarker + 2.3.32 + test + + + + org.springframework.security + spring-security-crypto + + + + com.github.tobato + fastdfs-client + 1.27.2 + + + + + com.github.xiaoymin + knife4j-openapi3-jakarta-spring-boot-starter + 4.1.0 + + + + com.gbase + gbase-jdbc + system + 8.3.81.53-build55.2.1-bin + ${project.basedir}/src/main/resources/lib/gbase-connector-java-8.3.81.53-build52.8-bin.jar + + + + com.alibaba + druid-spring-boot-starter + 1.2.22 + + + + com.alibaba + fastjson + 2.0.53 + + + + + + + + src/main/resources + false + + + src/main/resources + + application.yml + + true + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + org.projectlombok + lombok + + + + + + + supervision + + + + + local + + + local + + + + + true + + + + dev + + + dev + + + + prod + + prod + + + + + \ No newline at end of file diff --git a/sql/0911.sql b/sql/0911.sql new file mode 100644 index 0000000..f10ad05 --- /dev/null +++ b/sql/0911.sql @@ -0,0 +1,2 @@ +ALTER TABLE `negative`.`negative` + ADD COLUMN `case_number` varchar(255) NULL COMMENT '涉及案件/警情编号' AFTER `handle_three_depart_name`; \ No newline at end of file diff --git a/sql/1008.sql b/sql/1008.sql new file mode 100644 index 0000000..b7f5b8a --- /dev/null +++ b/sql/1008.sql @@ -0,0 +1,115 @@ +ALTER TABLE `negative`.`negative_problem_relation` + ADD COLUMN `threeLevelCode` varchar(255) NULL AFTER `twoLevelContent`, +ADD COLUMN `threeLevelContent` varchar(255) NULL AFTER `threeLevelCode`; + +ALTER TABLE `negative`.`sup_police` + ADD COLUMN `position` varchar(255); + +update sup_police set position = '正职' where job like '%正职%'; + +update sup_police set position = '副职' where job like '%副职%'; + + +INSERT INTO `sup_dict_problem_type` VALUES (1, '内务管理', '1', '-1', '0', '内务管理', '', 1, 1, NULL, '', '', '', '', '2020-08-13 14:47:51', '521677655146233856', 'oumyye', '127.0.0.1'); +INSERT INTO `sup_dict_problem_type` VALUES (2, '服务群众', '2', '-1', '0', '服务群众', '', 1, 2, NULL, '', '', '', '', '2020-08-13 14:48:21', '521677655146233856', 'oumyye', '127.0.0.1'); +INSERT INTO `sup_dict_problem_type` VALUES (3, '服务基层', '3', '-1', '0', NULL, NULL, 1, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (4, '纪律作风', '4', '-1', '0', NULL, NULL, 1, 4, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (5, '执法办案', '5', '-1', '0', NULL, NULL, 1, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (6, '安保维稳', '6', '-1', '0', NULL, NULL, 1, 6, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (7, '专项工作', '7', '-1', '0', NULL, NULL, 1, 7, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (8, '“二十个不准”', '8', '-1', '0', NULL, NULL, 1, 8, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (9, '钉钉使用弄虚作假。', '9', '1', '0', NULL, '/1/', 2, 9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (10, '未按规定请示报告。', '10', '1', '0', NULL, '/1/', 2, 10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (11, '迟到、早退、脱岗、旷工等。', '11', '1', '0', NULL, '/1/', 2, 11, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (12, '值班装备配备、使用不规范。', '12', '1', '0', NULL, '/1/', 2, 12, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (13, '内务卫生不整洁', '13', '1', '0', NULL, '/1/', 2, 13, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (14, '违反着装管理规定', '14', '1', '0', NULL, '/1/', 2, 14, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (15, '枪支保管使用不规范', '15', '1', '0', NULL, '/1/', 2, 15, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (16, '公车管理使用不规范', '16', '1', '0', NULL, '/1/', 2, 16, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (17, '办公备勤用房违规', '17', '1', '0', NULL, '/1/', 2, 17, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (18, '内部安全防范不到位', '18', '1', '0', NULL, '/1/', 2, 18, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (19, '会风会纪差', '19', '1', '0', NULL, '/1/', 2, 19, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (20, '违反保密管理规定', '20', '1', '0', NULL, '/1/', 2, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (21, '泄露警务秘密', '21', '1', '0', NULL, '/1/', 2, 21, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (22, '违反宣传纪律', '22', '1', '0', NULL, '/1/', 2, 22, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (23, '其他', '23', '1', '0', NULL, '/1/', 2, 23, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (24, '态度不好', '24', '2', '0', NULL, '/2/', 2, 24, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (26, '办事推诿、拖拉', '26', '2', '0', NULL, '/2/', 2, 26, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (27, '违规办理', '27', '2', '0', NULL, '/2/', 2, 27, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (28, '吃拿卡要', '28', '2', '0', NULL, '/2/', 2, 28, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (29, '其他', '29', '2', '0', NULL, '/2/', 2, 29, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (30, '测评满意率低', '30', '3', '0', NULL, '/3/', 2, 30, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (31, '办事推诿、拖拉', '31', '3', '0', NULL, '/3/', 2, 31, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (32, '违规摊派任务', '32', '3', '0', NULL, '/3/', 2, 32, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (33, '办理不满意', '33', '3', '0', NULL, '/3/', 2, 33, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (34, '拒不整改问题', '34', '3', '0', NULL, '/3/', 2, 34, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (35, '形式主义、官僚主义', '35', '3', '0', NULL, '/3/', 2, 35, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (36, '其他', '36', '3', '0', NULL, '/3/', 2, 36, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (37, '违反规定饮酒。', '37', '4', '0', NULL, '/4/', 2, 37, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (38, '酒后驾驶机动车。', '38', '4', '0', NULL, '/4/', 2, 38, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (39, '在公共场所酗酒滋事。', '39', '4', '0', NULL, '/4/', 2, 39, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (40, '携带枪支饮酒。', '40', '4', '0', NULL, '/4/', 2, 40, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (41, '吸食、注射毒品。', '41', '4', '0', NULL, '/4/', 2, 41, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (42, '贪污受贿', '42', '4', '0', NULL, '/4/', 2, 42, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (43, '其他违反政治纪律的行为', '43', '4', '0', NULL, '/4/', 2, 43, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (44, '其他违反组织纪律的行为', '44', '4', '0', NULL, '/4/', 2, 44, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (45, '其他违反廉洁纪律的行为', '45', '4', '0', NULL, '/4/', 2, 45, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (46, '其他违反群众纪律的行为', '46', '4', '0', NULL, '/4/', 2, 46, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (47, '其他违反工作纪律的行为', '47', '4', '0', NULL, '/4/', 2, 47, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (48, '其他违反生活纪律的行为', '48', '4', '0', NULL, '/4/', 2, 48, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (49, '其他违法犯罪行为', '49', '4', '0', NULL, '/4/', 2, 49, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (50, '其他', '50', '4', '0', NULL, '/4/', 2, 50, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (51, '接处警不及时。', '51', '5', '0', NULL, '/5/', 2, 51, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (52, '现场处置不文明、不规范。', '52', '5', '0', NULL, '/5/', 2, 52, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (53, '不如实、及时受立案', '53', '5', '0', NULL, '/5/', 2, 53, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (54, '调查取证不及时', '54', '5', '0', NULL, '/5/', 2, 54, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (55, '未按规定使用执法记录仪', '55', '5', '0', NULL, '/5/', 2, 55, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (56, '违反执法办案场所相关规定', '56', '5', '0', NULL, '/5/', 2, 56, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (57, '违反规定采取强制措施', '57', '5', '0', NULL, '/5/', 2, 57, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (58, '违规处理案件,执法不公、不严。', '58', '5', '0', NULL, '/5/', 2, 58, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (59, '执行不到位', '59', '5', '0', NULL, '/5/', 2, 59, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (60, '违规介入经济纠纷', '60', '5', '0', NULL, '/5/', 2, 60, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (61, '违规查封、扣押、冻结,影响营商环境', '61', '5', '0', NULL, '/5/', 2, 61, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (62, '涉案财物、随身物品管理违规', '62', '5', '0', NULL, '/5/', 2, 62, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (63, '违反法定程序办案。', '63', '5', '0', NULL, '/5/', 2, 63, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (64, '指供、诱供、刑讯逼供。', '64', '5', '0', NULL, '/5/', 2, 64, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (65, '办人情案、关系案、金钱案。', '65', '5', '0', NULL, '/5/', 2, 65, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (66, '充当违法犯罪保护伞。', '66', '5', '0', NULL, '/5/', 2, 66, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (67, '向违法犯罪嫌疑人通风报信', '67', '5', '0', NULL, '/5/', 2, 67, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (68, '违规安排会见,私自传递物品、信件。', '68', '5', '0', NULL, '/5/', 2, 68, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (69, '体罚、虐待被监管人员。', '69', '5', '0', NULL, '/5/', 2, 69, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (70, '违反监所安全管理规定。', '70', '5', '0', NULL, '/5/', 2, 70, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (71, '失职渎职导致发生执法安全事故', '71', '5', '0', NULL, '/5/', 2, 71, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (72, '处置不当引发负面舆情', '72', '5', '0', NULL, '/5/', 2, 72, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (73, '其他', '73', '5', '0', NULL, '/5/', 2, 73, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (74, '未按时到岗、脱岗', '74', '6', '0', NULL, '/6/', 2, 74, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (75, '履职不认真', '75', '6', '0', NULL, '/6/', 2, 75, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (76, '不按规定佩戴装备', '76', '6', '0', NULL, '/6/', 2, 76, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (77, '警容不整及不文明行为', '77', '6', '0', NULL, '/6/', 2, 77, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (78, '处置不规范', '78', '6', '0', NULL, '/6/', 2, 78, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (79, '失职渎职', '79', '6', '0', NULL, '/6/', 2, 79, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (80, '其他', '80', '6', '0', NULL, '/6/', 2, 80, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (81, '部署推进不力', '81', '7', '0', NULL, '/7/', 2, 81, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (82, '考核排名落后', '82', '7', '0', NULL, '/7/', 2, 82, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (83, '被上级点名通报', '83', '7', '0', NULL, '/7/', 2, 83, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (84, '其他', '84', '7', '0', NULL, '/7/', 2, 84, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (85, '搞团团伙伙。', '85', '8', '0', NULL, '/8/', 2, 85, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (86, '搞权力交换、利益输送。', '86', '8', '0', NULL, '/8/', 2, 86, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (87, '收受礼金及贵重礼品。', '87', '8', '0', NULL, '/8/', 2, 87, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (88, '组织参与黄、赌活动', '88', '8', '0', NULL, '/8/', 2, 88, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (89, '相互拆台、诬告、陷害,破坏队伍团结。', '89', '8', '0', NULL, '/8/', 2, 89, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (90, '拒绝、拖延执行上级依法依规作出的决定。', '90', '8', '0', NULL, '/8/', 2, 90, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (91, '违反党的干部政策,培植私人势力。', '91', '8', '0', NULL, '/8/', 2, 91, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (92, '干预执法办案。', '92', '8', '0', NULL, '/8/', 2, 92, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (93, '搞无原则一团和气。', '93', '8', '0', NULL, '/8/', 2, 93, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (94, '使用庸俗化称谓,搞人身依附。', '94', '8', '0', NULL, '/8/', 2, 94, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (95, '妄议中央大政方针。', '95', '8', '0', NULL, '/8/', 2, 95, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (96, '结交“风水大师”、参与迷信活动。', '96', '8', '0', NULL, '/8/', 2, 96, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (97, '帮助违法犯罪嫌疑人逃避法律责任。', '97', '8', '0', NULL, '/8/', 2, 97, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (98, '违规与当事人、中间人等特定关系人交往。', '98', '8', '0', NULL, '/8/', 2, 98, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (99, '超越“亲”“清”政商关系与企业老板交往。', '99', '8', '0', NULL, '/8/', 2, 99, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (100, '受雇于任何组织、个人。', '100', '8', '0', NULL, '/8/', 2, 100, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (101, '收受管理、服务对象及其代理人任何好处。', '101', '8', '0', NULL, '/8/', 2, 101, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (102, '违规从事盈利性经营活动。', '102', '8', '0', NULL, '/8/', 2, 102, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (103, '利用职权或影响力为亲友谋取好处。', '103', '8', '0', NULL, '/8/', 2, 103, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sup_dict_problem_type` VALUES (104, '利用网络社交媒体进行不正当交往。', '104', '8', '0', NULL, '/8/', 2, 104, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/sql/1011.sql b/sql/1011.sql new file mode 100644 index 0000000..ad0ae15 --- /dev/null +++ b/sql/1011.sql @@ -0,0 +1,5 @@ +ALTER TABLE `negative`.`sup_police` + ADD COLUMN `person_type` varchar(255) NULL COMMENT '人员属性' AFTER `position`, +ADD COLUMN `marital_status` varchar(255) NULL COMMENT '婚姻状况' AFTER `person_type`, +ADD COLUMN `have_children` tinyint(1) NULL COMMENT '子女' AFTER `marital_status`, +ADD COLUMN `education` varchar(255) NULL COMMENT '学历' AFTER `have_children`; \ No newline at end of file diff --git a/sql/1014.sql b/sql/1014.sql new file mode 100644 index 0000000..dd77ac8 --- /dev/null +++ b/sql/1014.sql @@ -0,0 +1,9 @@ +ALTER TABLE `negative`.`sup_depart` + ADD COLUMN `first_host` tinyint DEFAULT '0' COMMENT '是否是市局主办'; + +ALTER TABLE `negative`.`negative` + ADD COLUMN `current_processing_object` varchar(255) COMMENT '当前处理对象'; + +ALTER TABLE `negative`.`sup_police` + ADD COLUMN `employment_date` datetime COMMENT '入职时间', + ADD COLUMN `police_role` varchar(255) COMMENT '角色'; diff --git a/sql/1027.sql b/sql/1027.sql new file mode 100644 index 0000000..1e0fc67 --- /dev/null +++ b/sql/1027.sql @@ -0,0 +1,21 @@ +UPDATE negative_work w + LEFT JOIN negative n ON w.create_time = n.crtTime + AND n.involveDepartId = w.depart_id + SET w.negative_id = n.id +WHERE + w.negative_id IS NULL + AND n.id IS NOT NULL; + +UPDATE negative +SET handle_three_depart_id = involveDepartId, + handle_three_depart_name = involveDepartName +WHERE + crtTime > '2024-10-25 19:00:00' + AND handle_three_depart_id IS NULL; + +// 删除数据 +DELETE +FROM + negative_work +WHERE + negative_id IS NULL; \ No newline at end of file diff --git a/sql/data.sql b/sql/data.sql new file mode 100644 index 0000000..8cb954c --- /dev/null +++ b/sql/data.sql @@ -0,0 +1,83 @@ +CREATE TABLE data_case_verification ( + origin_id varchar(255) NOT NULL COMMENT '样本源头编号(案件编号)', + discovery_time datetime NULL COMMENT '问题发现时间(受理时间)', + happen_time datetime NULL COMMENT '问题发生时间', + problem_sources varchar(255) NULL COMMENT '问题来源', + complainant varchar(255) NULL COMMENT '投诉反映人(投诉人)', + complainant_phone varchar(255) NULL COMMENT '联系电话(投诉人电话)', + business_type_name varchar(255) NULL COMMENT '业务类别', + involve_problem varchar(255) NULL COMMENT '涉嫌问题(问题类别)', + police_type varchar(255) NULL COMMENT '涉及警种', + police_type_name varchar(255) NULL COMMENT '涉及警种名称', + involve_depart_id varchar(40) NULL COMMENT '涉及单位(被投诉单位)', + thing_desc text NULL COMMENT '事情简述(投诉具体内容)', + check_status_name varchar(255) NULL COMMENT '核查情况(审定结果)', + check_status_desc varchar(255) NULL COMMENT '核查处理结果(处理情况简要描述)', + involved_name varchar(255) NULL COMMENT '涉及人姓名', + involved_id_code varchar(40) NULL COMMENT '身份证号码', + personnel_attr varchar(255) NULL COMMENT '人员属性', + inspection_measures varchar(255) NULL COMMENT '督察措施', + problem_type varchar(255) NULL COMMENT '问题类型', + problem_category varchar(255) NULL COMMENT '问题类别', + subjective_aspect varchar(255) NULL COMMENT '主观方面', + responsibility_category varchar(255) NULL COMMENT '责任类别', + processing_results varchar(255) NULL COMMENT '处理结果', + involved_rights_protection_fault_tolerance varchar(255) NULL COMMENT '维权容错', + assistance_situation varchar(255) NULL COMMENT '帮扶情况', + assistance_start_time datetime NULL COMMENT '帮扶开始时间', + assistance_end_time datetime NULL COMMENT '帮扶结束时间', + involved_leader_name varchar(255) NULL COMMENT '涉及领导姓名', + involved_leader_id_code varchar(40) NULL COMMENT '涉及领导-身份证号码', + involved_leader_inspection_measures varchar(255) NULL COMMENT '涉及领导-督察措施', + involved_leader_responsibility_category varchar(255) NULL COMMENT '涉及领导-责任类别', + involved_leader_processing_results varchar(255) NULL COMMENT '涉及领导-处理结果', + involved_leader_rights_protection_fault_tolerance varchar(255) NULL COMMENT '涉及领导-维权容错', + crt_time datetime NULL DEFAULT now(), + upd_time datetime NULL DEFAULT now(), + PRIMARY KEY (`origin_id`) +) COMMENT='案件核查台账'; + + +CREATE TABLE data_petition_complaint ( + letter_id varchar(255) COMMENT '信件编号', + channel_for_filing_complaints varchar(255) COMMENT '投诉渠道', + acceptance_level varchar(255) COMMENT '受理层级', + registration_time datetime COMMENT '登记时间', + complainant varchar(255) COMMENT '投诉人', + complainant_phone varchar(255) COMMENT '投诉人电话', + initial_petition varchar(255) COMMENT '初重信访', + entanglement_disturbance_during_visits varchar(255) COMMENT '缠访闹访', + mass_visits varchar(255) COMMENT '群众集访', + involve_problem varchar(255) COMMENT '涉嫌问题', + business_type_name varchar(255) COMMENT '业务类别', + police_type varchar(255) NULL COMMENT '涉及警种', + police_type_name varchar(255) NULL COMMENT '涉及警种名称', + complained_depart_id varchar(255) COMMENT '被投诉机构ID', + complained_depart_name varchar(255) COMMENT '被投诉机构', + thing_desc text COMMENT '具体内容', + involve_depart_id varchar(255) COMMENT '涉及单位', + involve_depart_name varchar(255) COMMENT '涉及单位', + is_unit_responsible int COMMENT '是否单位责任', + depart_processing_results varchar(255) COMMENT '单位处理结果', + involved_name varchar(255) COMMENT '涉及人姓名', + involved_id_code varchar(40) COMMENT '身份证号码', + personnel_attributes varchar(255) COMMENT '人员属性', + inspection_measures varchar(255) COMMENT '督察措施', + problem_type varchar(255) COMMENT '问题类型', + subjective_aspect varchar(255) COMMENT '主观方面', + responsibility_category varchar(255) COMMENT '责任类别', + processing_results varchar(255) COMMENT '处理结果', + rights_protection_fault_tolerance varchar(255) COMMENT '维权容错', + assistance_situation varchar(255) COMMENT '帮扶情况', + assistance_start_time datetime NULL COMMENT '帮扶开始时间', + assistance_end_time datetime NULL COMMENT '帮扶结束时间', + involved_leader_name varchar(255) COMMENT '涉及领导姓名', + involved_leader_id_code varchar(255) COMMENT '身份证号码', + involved_leader_inspection_measures varchar(255) COMMENT '督察措施', + involved_leader_responsibility_category varchar(255) COMMENT '责任类别', + involved_leader_processing_results varchar(255) COMMENT '处理结果', + involved_leader_rights_protection_fault_tolerance varchar(255) COMMENT '维权容错', + crt_time datetime NULL DEFAULT now(), + upd_time datetime NULL DEFAULT now(), + PRIMARY KEY (`letter_id`) +) COMMENT='信访投诉台账'; diff --git a/sql/dict.sql b/sql/dict.sql new file mode 100644 index 0000000..d20e725 --- /dev/null +++ b/sql/dict.sql @@ -0,0 +1,25 @@ +INSERT INTO `negative`.`sup_dict_type`(`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (17, '主办层级', 'hostLevel', '0', '', '2024-08-13 16:21:32', '', '2024-08-13 16:21:32', ''); +INSERT INTO `negative`.`sup_dict_type`(`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (18, '办理时限', 'timeLimit', '0', '', '2024-08-13 16:42:50', '', '2024-08-13 16:42:50', ''); +INSERT INTO `negative`.`sup_dict_type`(`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (19, '审批流程', 'approvalFlow', '0', '', '2024-08-13 16:54:26', '', '2024-08-13 16:54:26', ''); +INSERT INTO `negative`.`sup_dict_type`(`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (20, '追责对象', 'accountabilityTarget', '0', '', '2024-08-16 10:23:19', '', '2024-08-16 10:23:19', ''); +INSERT INTO `negative`.`sup_dict_type`(`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (21, '办理状态', 'processingStatus', '0', '', '2024-08-19 15:37:24', '', '2024-08-19 15:37:24', ''); + + +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (220, 0, '市局主办', '1', 'hostLevel', '', '', '0', '0', '', '2024-08-13 16:34:23', '', '2024-08-13 16:34:23', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (222, 0, '二级机构主办', '2', 'hostLevel', '', '', '0', '0', '', '2024-08-13 16:39:09', '', '2024-08-13 16:39:09', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (223, 0, '三级机构主办', '3', 'hostLevel', '', '', '0', '0', '', '2024-08-13 16:39:44', '', '2024-08-13 16:39:44', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (224, 0, '137工作制', '3+7', 'timeLimit', '', '', '0', '0', '', '2024-08-13 16:44:13', '', '2024-08-13 16:44:13', '1个工作日签收,3个工作日办结,延期不超过7天'); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (225, 0, '10+10工作制', '10+10', 'timeLimit', '', '', '0', '0', '', '2024-08-13 16:45:49', '', '2024-08-13 16:45:49', '1个工作日签收,10个工作日办结,延期不超过10天'); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (226, 0, '14+7工作制', '14+7', 'timeLimit', '', '', '0', '0', '', '2024-08-13 16:46:56', '', '2024-08-13 16:46:56', '1个工作日签收,14个工作日办结,延期不超过7天'); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (227, 0, '其他', 'other', 'timeLimit', '', '', '0', '0', '', '2024-08-13 16:49:33', '', '2024-08-13 16:49:33', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (228, 0, '三级审批', '3', 'approvalFlow', '', '', '0', '0', '', '2024-08-13 16:55:14', '', '2024-08-13 16:55:14', '所队一>二級机构一>市局'); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (229, 0, '二级审批', '2', 'approvalFlow', '', '', '0', '0', '', '2024-08-13 16:55:29', '', '2024-08-13 16:55:29', '所队一>二级机构'); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (230, 0, '涉及个人', '1', 'accountabilityTarget', '', '', '0', '0', '', '2024-08-16 10:24:48', '', '2024-08-16 10:24:48', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (231, 0, '涉及单位', '2', 'accountabilityTarget', '', '', '0', '0', '', '2024-08-16 10:25:02', '', '2024-08-16 10:25:02', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (232, 0, '涉及个人及单位', '3', 'accountabilityTarget', '', '', '0', '0', '', '2024-08-16 10:25:16', '', '2024-08-16 10:25:16', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (233, 0, '签收中', 'signing', 'processingStatus', '', '', '0', '0', '', '2024-08-19 15:38:20', '', '2024-08-19 15:38:20', '问题签收'); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (234, 0, '办理中', 'processing', 'processingStatus', '', '', '0', '0', '', '2024-08-19 15:39:01', '', '2024-08-19 15:39:01', '核查办理'); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (235, 0, '审批中', 'approval', 'processingStatus', '', '', '0', '0', '', '2024-08-19 15:40:34', '', '2024-08-19 15:40:34', '办结审批'); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (236, 0, '已办结', 'completed', 'processingStatus', '', '', '0', '0', '', '2024-08-19 15:41:07', '', '2024-08-19 15:41:07', '认定办结'); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (237, 2, '分局通报批评', '1-2', 'handleResult', '', '', '0', '0', '', '2024-09-04 18:45:08', '', '2024-09-04 18:45:08', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (238, 3, '市局通报批评', '1-1', 'handleResult', '', '', '0', '0', '', '2024-09-04 18:45:47', '', '2024-09-04 18:45:47', ''); diff --git a/sql/file_class.sql b/sql/file_class.sql new file mode 100644 index 0000000..65fd887 --- /dev/null +++ b/sql/file_class.sql @@ -0,0 +1,8 @@ +CREATE TABLE file_class ( + id int NOT NULL AUTO_INCREMENT, + class_name varchar(255) not null, + class_remarks varchar(255), + problem_sources_code varchar(40) not null COMMENT '问题来源', + sort int, + PRIMARY KEY (`id`) +) COMMENT='文件分类'; \ No newline at end of file diff --git a/sql/negative_0904.sql b/sql/negative_0904.sql new file mode 100644 index 0000000..5b73f3a --- /dev/null +++ b/sql/negative_0904.sql @@ -0,0 +1,548 @@ +ALTER TABLE `negative`.`negative` + ADD COLUMN `host_level` varchar(255) NULL COMMENT '主办层级' AFTER `distribute_flow`, + ADD COLUMN `time_limit` varchar(255) NULL COMMENT '办理时限' AFTER `host_level`, + ADD COLUMN `approval_flow` varchar(255) NULL COMMENT '审批流程' AFTER `time_limit`, + ADD COLUMN `flow_key` varchar(255) NULL COMMENT '流程节点key' AFTER `flow_key`, + ADD COLUMN `check_status_desc` text NULL COMMENT '问题核查情况' AFTER `flow_key`, + ADD COLUMN `rectify_desc` text NULL COMMENT '问题整改情况' AFTER `check_status_desc`, + ADD COLUMN `rectify_restriction_days` int NULL COMMENT '整改限制天数' AFTER `rectify_desc`, + ADD COLUMN `accountability_target` varchar(255) NULL COMMENT '追责对象' AFTER `rectify_restriction_days`, + ADD COLUMN `processing_status` varchar(255) NULL COMMENT '办理状态' AFTER `accountability_target`, + ADD COLUMN `negative_extension_apply_id` int NULL COMMENT '延期申请ID' AFTER `processing_status`, + ADD COLUMN `extension_apply_flag` tinyint NULL DEFAULT 1 COMMENT '是否能申请延期' AFTER `negative_extension_apply_id`, + ADD COLUMN `extension_days` int NULL COMMENT '延期天数' AFTER `extension_apply_flag`, + ADD COLUMN `first_distribute_time` datetime NULL COMMENT '市局下发时间' AFTER `extension_days`, + ADD COLUMN `is_second_handle` tinyint NULL DEFAULT 0 COMMENT '是否是二级机构办理 true=是 false=否' AFTER `first_distribute_time`, + ADD COLUMN `handle_second_depart_id` varchar(255) NULL COMMENT '二级办理单位' AFTER `is_second_handle`, + ADD COLUMN `handle_second_depart_name` varchar(255) NULL COMMENT '二级办理单位' AFTER `handle_second_depart_id`, + ADD COLUMN `handle_three_depart_id` varchar(255) NULL COMMENT '三级办理单位' AFTER `handle_second_depart_name`, + ADD COLUMN `handle_three_depart_name` varchar(255) NULL COMMENT '三级办理单位' AFTER `handle_three_depart_id`; + +CREATE TABLE `flow_action` ( + `id` int(0) NOT NULL AUTO_INCREMENT, + `action_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `flow_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `next_flow_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '下一流程节点key', + `button_label` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '动作名称', + `button_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '按钮类型', + `plain` tinyint(1) NULL DEFAULT NULL COMMENT '是否是简单按钮', + `sort` int(0) NULL DEFAULT NULL COMMENT '排序', + `action_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `validate_form` tinyint(0) NULL DEFAULT NULL COMMENT '是否需要校验表单', + `do_close` tinyint(0) NULL DEFAULT NULL COMMENT '完成后是否需要关闭', + `open_dialog` tinyint(0) NULL DEFAULT NULL COMMENT '是否需要启动对话框', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '流程节点动作' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flow_action +-- ---------------------------- +INSERT INTO `flow_action` VALUES (1, 'apply_completion', 'verify', 'second_approve', '提交审批', 'primary', 0, 4, '提交审批', 1, 1, 1); +INSERT INTO `flow_action` VALUES (2, 'apply_extension', 'verify', 'second_extension_approve', '申请延期', 'primary', 1, 3, '申请延期', 0, 0, 1); +INSERT INTO `flow_action` VALUES (3, 'first_approve', 'first_approve', 'completed', '审批通过', 'primary', 0, 2, '已审批', NULL, 1, 1); +INSERT INTO `flow_action` VALUES (4, 'first_approve_return', 'first_approve', 'second_approve', '退回整改', 'danger', 1, 1, '已退回', NULL, NULL, NULL); +INSERT INTO `flow_action` VALUES (5, 'first_distribute', 'first_distribute', 'second_sign', '下发问题', 'primary', 0, 1, '已下发', 1, 1, NULL); +INSERT INTO `flow_action` VALUES (6, 'save', 'verify', 'verify', '保存信息', 'primary', 1, 1, NULL, 1, 0, NULL); +INSERT INTO `flow_action` VALUES (7, 'second_approve', 'second_approve', 'first_approve', '审批通过', 'primary', 0, 2, '已审批', NULL, NULL, 1); +INSERT INTO `flow_action` VALUES (8, 'second_approve_return', 'second_approve', 'verify', '退回整改', 'danger', 1, 1, '退回整改', NULL, 1, 1); +INSERT INTO `flow_action` VALUES (9, 'second_distribute', 'second_distribute', 'three_sign', '下发问题', 'primary', 0, 3, '已下发', 1, 1, NULL); +INSERT INTO `flow_action` VALUES (10, 'second_sign', 'second_sign', 'second_distribute', '确认签收', 'primary', 0, 3, '已签收', 0, 0, NULL); +INSERT INTO `flow_action` VALUES (11, 'second_sign_return', 'second_sign', 'first_distribute', '问题退回', 'danger', 1, 1, '已退回', 0, 0, NULL); +INSERT INTO `flow_action` VALUES (12, 'three_sign', 'three_sign', 'verify', '确认签收', 'primary', 0, 2, '已签收', 0, 0, NULL); +INSERT INTO `flow_action` VALUES (13, 'three_sign_return', 'verify', 'second_distribute', '问题退回', 'danger', 0, 2, '已退回', NULL, 1, 1); +INSERT INTO `flow_action` VALUES (14, 'second_sign_return', 'second_distribute', 'first_distribute', '问题退回', 'danger', 1, 1, '已退回', 0, 1, 1); +INSERT INTO `flow_action` VALUES (15, 'second_extension_approve', 'second_extension_approve', 'first_extension_approve', '审批通过', 'primary', 0, 2, '延期申请已审批', 0, 1, 1); +INSERT INTO `flow_action` VALUES (16, 'second_extension_return', 'second_extension_approve', NULL, '审批驳回', 'danger', 0, 1, '延期申请已驳回', 0, 1, 1); +INSERT INTO `flow_action` VALUES (17, 'first_extension_approve', 'first_extension_approve', '', '审批通过', 'primary', 0, 2, '延期申请已审批', 0, 1, 1); +INSERT INTO `flow_action` VALUES (18, 'first_extension_return', 'first_extension_approve', NULL, '审批驳回', 'danger', 0, 1, '延期申请已驳回', 0, 1, 1); +INSERT INTO `flow_action` VALUES (19, 'second_local_processing', 'second_distribute', 'verify', '本级处理', 'primary', 1, 2, '本级处理', 0, 0, 0); +INSERT INTO `flow_action` VALUES (20, 'three_sign_return', 'three_sign', 'second_distribute', '问题退回', 'danger', 0, 1, '已退回', NULL, 1, 1); + + +CREATE TABLE `flow_node` ( + `flow_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `flow_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '流程节点名称', + `flow_sort` int(0) NULL DEFAULT NULL COMMENT '排序', + PRIMARY KEY (`flow_key`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '流程节点' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flow_node +-- ---------------------------- +INSERT INTO `flow_node` VALUES ('completed', '已办结', 10); +INSERT INTO `flow_node` VALUES ('first_approve', '市局审批', 7); +INSERT INTO `flow_node` VALUES ('first_distribute', '市局下发', 1); +INSERT INTO `flow_node` VALUES ('first_extension_approve', '市局延期审批', 9); +INSERT INTO `flow_node` VALUES ('second_approve', '二级机构审批', 6); +INSERT INTO `flow_node` VALUES ('second_distribute', '二级机构下发', 3); +INSERT INTO `flow_node` VALUES ('second_extension_approve', '二级机构延期审批', 8); +INSERT INTO `flow_node` VALUES ('second_sign', '二级机构签收', 2); +INSERT INTO `flow_node` VALUES ('three_sign', '三级机构签收', 4); +INSERT INTO `flow_node` VALUES ('verify', '核查办理', 5); + +CREATE TABLE holiday ( + id int NOT NULL AUTO_INCREMENT, + date varchar(255) NOT NULL COMMENT '日期', + flag tinyint NOT NULL COMMENT '是否是节假日', + holiday_name varchar(255) COMMENT '节假日名称', + year int NOT NULL COMMENT '年', + PRIMARY KEY (`id`) +) COMMENT='节假日'; + +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-01', 1, '元旦', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-02', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-03', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-04', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-05', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-06', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-07', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-08', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-09', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-10', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-11', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-12', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-13', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-14', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-15', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-16', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-17', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-18', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-20', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-21', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-22', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-23', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-24', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-25', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-27', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-28', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-29', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-30', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-01-31', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-03', 1, '劳动节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-04', 1, '劳动节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-05', 1, '劳动节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-06', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-07', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-08', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-09', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-10', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-11', 0, '正常上班', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-12', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-13', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-14', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-15', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-16', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-17', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-18', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-19', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-20', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-21', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-22', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-23', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-24', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-25', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-26', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-27', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-28', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-29', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-30', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-31', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-01', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-01', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-02', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-03', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-04', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-05', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-06', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-07', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-08', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-09', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-10', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-11', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-12', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-13', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-14', 0, '正常上班', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-15', 1, '中秋节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-16', 1, '中秋节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-17', 1, '中秋节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-18', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-20', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-21', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-22', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-23', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-24', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-25', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-27', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-28', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-29', 0, '正常上班', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-30', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-01', 1, '国庆节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-02', 1, '国庆节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-03', 1, '国庆节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-04', 0, '正常上班', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-05', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-06', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-07', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-08', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-09', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-10', 1, '初一', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-11', 1, '初二', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-12', 1, '初三', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-13', 1, '初四', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-14', 1, '初五', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-15', 1, '初六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-16', 1, '初七', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-17', 1, '初八', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-18', 0, '正常上班', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-20', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-21', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-22', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-23', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-24', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-25', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-27', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-28', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-02-29', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-01', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-02', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-03', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-04', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-05', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-06', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-07', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-08', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-09', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-10', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-11', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-12', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-13', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-14', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-15', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-16', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-17', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-18', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-20', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-21', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-22', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-23', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-24', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-25', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-27', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-28', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-29', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-30', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-03-31', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-01', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-02', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-03', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-04', 1, '清明节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-05', 1, '清明节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-06', 1, '清明节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-07', 0, '正常上班', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-08', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-09', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-10', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-11', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-12', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-13', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-14', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-15', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-16', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-17', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-18', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-20', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-21', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-22', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-23', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-24', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-25', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-27', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-28', 0, '正常上班', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-29', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-04-30', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-01', 1, '劳动节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-05-02', 1, '劳动节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-02', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-03', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-04', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-05', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-06', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-07', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-08', 1, '端午节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-09', 1, '端午节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-10', 1, '端午节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-11', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-12', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-13', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-14', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-15', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-16', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-17', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-18', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-20', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-21', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-22', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-23', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-24', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-25', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-27', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-28', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-29', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-06-30', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-01', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-02', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-03', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-04', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-05', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-06', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-07', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-08', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-09', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-10', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-11', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-12', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-13', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-14', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-15', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-16', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-17', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-18', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-20', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-21', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-22', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-23', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-24', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-25', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-27', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-28', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-29', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-30', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-07-31', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-01', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-02', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-03', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-04', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-05', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-06', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-07', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-08', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-09', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-10', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-11', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-12', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-13', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-14', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-15', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-16', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-17', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-18', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-20', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-21', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-22', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-23', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-24', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-25', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-27', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-28', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-29', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-30', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-08-31', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-01', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-02', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-09-03', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-04', 1, '国庆节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-05', 1, '国庆节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-06', 1, '国庆节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-07', 1, '国庆节', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-08', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-09', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-10', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-11', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-12', 0, '正常上班', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-13', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-14', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-15', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-16', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-17', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-18', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-19', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-20', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-21', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-22', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-23', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-24', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-25', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-26', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-27', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-28', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-29', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-30', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-10-31', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-01', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-02', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-03', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-04', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-05', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-06', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-07', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-08', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-09', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-10', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-11', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-12', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-13', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-14', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-15', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-16', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-17', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-18', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-20', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-21', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-22', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-23', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-24', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-25', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-27', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-28', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-29', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-11-30', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-01', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-02', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-03', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-04', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-05', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-06', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-07', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-08', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-09', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-10', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-11', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-12', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-13', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-14', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-15', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-16', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-17', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-18', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-19', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-20', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-21', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-22', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-23', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-24', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-25', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-26', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-27', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-28', 1, '周六', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-29', 1, '周日', 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-30', 0, NULL, 2024); +INSERT INTO holiday (date, flag, holiday_name, year) VALUES ('2024-12-31', 0, NULL, 2024); + +CREATE TABLE negative_approve ( + id int NOT NULL AUTO_INCREMENT, + negative_id varchar(40) not null, + state varchar(40) not null, + handler_depart_id varchar(40), + handler_depart_name varchar(255), + handler_user_name varchar(255), + handler_name varchar(255), + comments text COMMENT '审批意见', + action_key varchar(255), + create_time datetime DEFAULT now(), + PRIMARY KEY (`id`) +) COMMENT='问题审批'; + +CREATE TABLE negative_extension_apply ( + id int NOT NULL AUTO_INCREMENT, + negative_id varchar(40) not null, + handler_depart_id varchar(40), + handler_depart_name varchar(255), + handler_user_name varchar(255), + handler_name varchar(255), + comments text COMMENT '延期理由', + extension_days int COMMENT '延期天数', + create_time datetime DEFAULT now(), + PRIMARY KEY (`id`) +) COMMENT='问题申请延期'; + +CREATE TABLE negative_extension_approve ( + id int NOT NULL AUTO_INCREMENT, + negative_id varchar(40) not null, + negative_extension_apply_id int not null, + handler_depart_id varchar(40), + handler_depart_name varchar(255), + handler_user_name varchar(255), + handler_name varchar(255), + comments text COMMENT '审批意见/驳回理由', + state varchar(40) not null, + action_key varchar(255), + create_time datetime DEFAULT now(), + PRIMARY KEY (`id`) +) COMMENT='问题申请延期'; + +CREATE TABLE negative_fav ( + id int NOT NULL AUTO_INCREMENT, + negative_id varchar(40) not null, + user_id varchar(40) not null, + create_time datetime DEFAULT now(), + PRIMARY KEY (`id`) +) COMMENT='问题收藏'; + +CREATE TABLE negative_sign_return ( + id int NOT NULL AUTO_INCREMENT, + negative_id varchar(40) not null, + handler_depart_id varchar(40), + handler_depart_name varchar(255), + handler_user_name varchar(255), + handler_name varchar(255), + comments text COMMENT '退回原因', + action_key varchar(255), + create_time datetime DEFAULT now(), + PRIMARY KEY (`id`) +) COMMENT='问题签收退回'; + +CREATE TABLE negative_thing_file ( + id int NOT NULL AUTO_INCREMENT, + negative_id varchar(40) not null, + file_name varchar(255) not null COMMENT '文件名称', + file_path varchar(255) not null COMMENT '文件路径', + type varchar(255), + create_time datetime DEFAULT now(), + PRIMARY KEY (`id`) +) COMMENT='问题事件附件'; + + +CREATE TABLE negative_work ( + id int NOT NULL AUTO_INCREMENT, + negative_id varchar(40), + depart_id varchar(40), + role_code varchar(255), + problem_sources_code varchar(255), + flow_key varchar(255), + status varchar(255) default 'todo', + create_time datetime DEFAULT now(), + update_time datetime DEFAULT now(), + PRIMARY KEY (`id`) +) COMMENT='问题工作记录表'; + + +ALTER TABLE `negative`.`negative_file` + ADD COLUMN `file_class_id` int NULL AFTER `status`; \ No newline at end of file diff --git a/sql/negative_mark.sql b/sql/negative_mark.sql new file mode 100644 index 0000000..e6f68bc --- /dev/null +++ b/sql/negative_mark.sql @@ -0,0 +1,8 @@ +CREATE TABLE negative_mark ( + negative_id varchar(40), + involve_second_depart_id varchar(40) COMMENT '涉及二级单位', + involve_second_depart_name varchar(255) COMMENT '涉及二级单位名称', + involve_three_depart_id varchar(40) COMMENT '涉及三级单位', + involve_three_depart_name varchar(255) COMMENT '涉及三级单位名称', + PRIMARY KEY (`negative_id`) +) COMMENT='问题统计表'; \ No newline at end of file diff --git a/sql/open-platform_0904.sql b/sql/open-platform_0904.sql new file mode 100644 index 0000000..f416e64 --- /dev/null +++ b/sql/open-platform_0904.sql @@ -0,0 +1,89 @@ +-- ---------------------------- +-- Table structure for menu +-- ---------------------------- + +CREATE TABLE `menu` ( + `id` int(0) NOT NULL AUTO_INCREMENT, + `pid` int(0) NULL DEFAULT NULL, + `menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '菜单类型', + `menu_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '菜单名称', + `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '菜单图标', + `menu_sort` int(0) NULL DEFAULT NULL COMMENT '排序', + `perms` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `paths` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '路径', + `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '组件', + `is_cache` int(0) NOT NULL DEFAULT 0 COMMENT '是否缓存', + `is_show` int(0) NOT NULL DEFAULT 1, + `is_disable` int(0) NOT NULL DEFAULT 0, + `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0), + `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0), + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '菜单' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of menu +-- ---------------------------- +INSERT INTO `menu` VALUES (1, 0, 'C', '首页', 'el-icon-House', 1, NULL, '/', 'Home', 1, 1, 0, '2024-08-06 17:13:17', '2024-08-07 15:49:38'); +INSERT INTO `menu` VALUES (2, 0, 'C', '一体化大屏', 'el-icon-PieChart', 1, NULL, '/bigscreen', NULL, 1, 1, 0, '2024-08-06 17:20:08', '2024-08-07 15:50:25'); +INSERT INTO `menu` VALUES (3, 0, 'M', '我的工作', 'el-icon-Box', 1, NULL, '/work', NULL, 1, 1, 0, '2024-08-06 17:20:42', '2024-08-07 15:51:05'); +INSERT INTO `menu` VALUES (4, 0, 'M', '系统管理', 'el-icon-Setting', NULL, NULL, '/system', NULL, 1, 1, 0, '2024-08-06 17:23:12', '2024-08-26 15:47:58'); +INSERT INTO `menu` VALUES (5, 3, 'C', '我的待办', NULL, 10, NULL, '/work/todo', '/work/Todo', 1, 1, 0, '2024-08-06 17:26:38', '2024-08-07 16:55:48'); +INSERT INTO `menu` VALUES (6, 3, 'C', '我的已办', NULL, 9, NULL, '/work/done', '/work/Done', 1, 1, 0, '2024-08-06 17:26:59', '2024-08-07 16:56:10'); +INSERT INTO `menu` VALUES (7, 4, 'C', '用户管理', NULL, 10, NULL, '/system/user', '/system/User', 1, 1, 0, '2024-08-06 17:28:19', '2024-08-09 14:19:48'); +INSERT INTO `menu` VALUES (8, 4, 'C', '警员中心', NULL, 9, NULL, '/system/police', '/system/Police', 1, 1, 0, '2024-08-06 17:28:26', '2024-08-07 15:47:53'); +INSERT INTO `menu` VALUES (9, 4, 'C', '菜单管理', NULL, 8, NULL, '/system/menu', '/system/Menu', 1, 1, 0, '2024-08-06 17:28:40', '2024-08-07 15:48:30'); +INSERT INTO `menu` VALUES (10, 4, 'C', '角色管理', NULL, 7, NULL, '/system/role', '/system/Role', 1, 1, 0, '2024-08-07 16:54:20', '2024-08-07 16:54:20'); +INSERT INTO `menu` VALUES (11, 4, 'C', '部门管理', NULL, 6, NULL, '/system/depart', '/system/Depart', 1, 1, 0, '2024-08-08 16:44:16', '2024-08-08 16:44:16'); +INSERT INTO `menu` VALUES (12, 4, 'C', '数据字典', NULL, 5, NULL, '/system/dict', '/system/Dict', 1, 1, 0, '2024-08-08 16:44:59', '2024-08-08 16:44:59'); +INSERT INTO `menu` VALUES (13, 4, 'C', '问题类型', NULL, NULL, NULL, '/system/dictContent', '/system/DictContent', 1, 1, 0, '2024-08-16 14:40:53', '2024-08-16 14:40:53'); +INSERT INTO `menu` VALUES (14, 3, 'C', '我的收藏', NULL, NULL, NULL, '/work/myFav', '/work/Fav', 1, 1, 0, '2024-08-16 18:52:26', '2024-08-16 18:52:26'); +INSERT INTO `menu` VALUES (15, 3, 'C', '综合查询', NULL, NULL, NULL, '/query', '/work/Query', 1, 1, 0, '2024-08-27 10:09:25', '2024-08-27 10:09:25'); +INSERT INTO `menu` VALUES (16, 8, 'A', '新增警员', NULL, NULL, 'police:add', '', NULL, 0, 1, 0, '2024-09-03 18:38:46', '2024-09-03 18:38:46'); +INSERT INTO `menu` VALUES (17, 8, 'A', '权限设置', NULL, NULL, 'police:auth', NULL, NULL, 0, 1, 0, '2024-09-03 18:45:04', '2024-09-03 18:45:04'); +INSERT INTO `menu` VALUES (18, 5, 'A', '问题录入', NULL, NULL, 'negative:add', NULL, NULL, 0, 1, 0, '2024-09-04 11:29:54', '2024-09-04 11:29:54'); + +-- ---------------------------- +-- Table structure for role_menu +-- ---------------------------- + +CREATE TABLE `role_menu` ( + `id` int(0) NOT NULL AUTO_INCREMENT, + `role_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `menu_id` int(0) NULL DEFAULT NULL, + `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0), + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 103 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '角色菜单权限表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of role_menu +-- ---------------------------- +INSERT INTO `role_menu` VALUES (43, 'admin_1_1_1_2', 1, '2024-09-03 18:42:22'); +INSERT INTO `role_menu` VALUES (44, 'admin_1_1_1_2', 3, '2024-09-03 18:42:22'); +INSERT INTO `role_menu` VALUES (45, 'admin_1_1_1_2', 5, '2024-09-03 18:42:22'); +INSERT INTO `role_menu` VALUES (46, 'admin_1_1_1_2', 6, '2024-09-03 18:42:22'); +INSERT INTO `role_menu` VALUES (47, 'admin_1_1_1_2', 14, '2024-09-03 18:42:22'); +INSERT INTO `role_menu` VALUES (48, 'admin_1_1_1_2', 15, '2024-09-03 18:42:22'); +INSERT INTO `role_menu` VALUES (49, 'admin_1_1_1_2', 4, '2024-09-03 18:42:22'); +INSERT INTO `role_menu` VALUES (50, 'admin_1_1_1_2', 8, '2024-09-03 18:42:22'); +INSERT INTO `role_menu` VALUES (70, 'admin_1_1_1_3', 3, '2024-09-03 20:48:31'); +INSERT INTO `role_menu` VALUES (71, 'admin_1_1_1_3', 5, '2024-09-03 20:48:32'); +INSERT INTO `role_menu` VALUES (72, 'admin_1_1_1_3', 6, '2024-09-03 20:48:32'); +INSERT INTO `role_menu` VALUES (73, 'admin_1_1_1_3', 14, '2024-09-03 20:48:32'); +INSERT INTO `role_menu` VALUES (74, 'admin_1_1_1_3', 15, '2024-09-03 20:48:32'); +INSERT INTO `role_menu` VALUES (75, 'admin_1_1_1_3', 1, '2024-09-03 20:48:32'); +INSERT INTO `role_menu` VALUES (76, 'admin_1_1_1_3', 4, '2024-09-03 20:48:32'); +INSERT INTO `role_menu` VALUES (77, 'admin_1_1_1_3', 8, '2024-09-03 20:48:32'); +INSERT INTO `role_menu` VALUES (78, 'admin_1_1_1_3', 16, '2024-09-03 20:48:32'); +INSERT INTO `role_menu` VALUES (79, 'admin_1_1_1_3', 17, '2024-09-03 20:48:32'); +INSERT INTO `role_menu` VALUES (91, 'admin_1', 3, '2024-09-04 11:30:26'); +INSERT INTO `role_menu` VALUES (92, 'admin_1', 5, '2024-09-04 11:30:26'); +INSERT INTO `role_menu` VALUES (93, 'admin_1', 18, '2024-09-04 11:30:26'); +INSERT INTO `role_menu` VALUES (94, 'admin_1', 6, '2024-09-04 11:30:27'); +INSERT INTO `role_menu` VALUES (95, 'admin_1', 14, '2024-09-04 11:30:27'); +INSERT INTO `role_menu` VALUES (96, 'admin_1', 15, '2024-09-04 11:30:27'); +INSERT INTO `role_menu` VALUES (97, 'admin_1', 1, '2024-09-04 11:30:27'); +INSERT INTO `role_menu` VALUES (98, 'admin_1', 4, '2024-09-04 11:30:27'); +INSERT INTO `role_menu` VALUES (99, 'admin_1', 7, '2024-09-04 11:30:27'); +INSERT INTO `role_menu` VALUES (100, 'admin_1', 8, '2024-09-04 11:30:27'); +INSERT INTO `role_menu` VALUES (101, 'admin_1', 16, '2024-09-04 11:30:27'); +INSERT INTO `role_menu` VALUES (102, 'admin_1', 11, '2024-09-04 11:30:27'); \ No newline at end of file diff --git a/sql/truncate.sql b/sql/truncate.sql new file mode 100644 index 0000000..a9f8e01 --- /dev/null +++ b/sql/truncate.sql @@ -0,0 +1,4 @@ +truncate negative_work; +truncate negative_history; +truncate negative_fav; +truncate negative_fav; \ No newline at end of file diff --git a/sql/update-data.sql b/sql/update-data.sql new file mode 100644 index 0000000..61f2684 --- /dev/null +++ b/sql/update-data.sql @@ -0,0 +1 @@ +UPDATE `negative`.`negative` set flow_key = 'completed', processing_status = 'completed'; \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/SupervisionApplication.java b/src/main/java/com/biutag/supervision/SupervisionApplication.java new file mode 100644 index 0000000..6095661 --- /dev/null +++ b/src/main/java/com/biutag/supervision/SupervisionApplication.java @@ -0,0 +1,15 @@ +package com.biutag.supervision; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableScheduling +@SpringBootApplication +public class SupervisionApplication { + + public static void main(String[] args) { + SpringApplication.run(SupervisionApplication.class, args); + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/common/UserContextHolder.java b/src/main/java/com/biutag/supervision/common/UserContextHolder.java new file mode 100644 index 0000000..ac449fa --- /dev/null +++ b/src/main/java/com/biutag/supervision/common/UserContextHolder.java @@ -0,0 +1,34 @@ +package com.biutag.supervision.common; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.Header; +import com.biutag.supervision.constants.RedisKeyConstants; +import com.biutag.supervision.exception.AuthException; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.util.SpringUtil; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +public class UserContextHolder { + + public static String getCurrentToken() { + HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest(); + return request.getHeader(Header.AUTHORIZATION.getValue()); + } + + public static UserAuth getCurrentUser() { + String authorization = getCurrentToken(); + if (StrUtil.isBlank(authorization)) { + throw new AuthException(); + } + UserAuth userAuth = (UserAuth) SpringUtil.getBean("redisTemplate", RedisTemplate.class).opsForValue().get(String.format(RedisKeyConstants.LOGIN_USERINFO_KEY, authorization)); + return userAuth; + } + + public static String getCurrentUserId() { + return getCurrentUser().getUserId(); + } + +} diff --git a/src/main/java/com/biutag/supervision/config/FastDFSConfig.java b/src/main/java/com/biutag/supervision/config/FastDFSConfig.java new file mode 100644 index 0000000..d3aedd2 --- /dev/null +++ b/src/main/java/com/biutag/supervision/config/FastDFSConfig.java @@ -0,0 +1,20 @@ +package com.biutag.supervision.config; + +import com.github.tobato.fastdfs.domain.conn.TrackerConnectionManager; +import jakarta.annotation.PostConstruct; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@ComponentScan("com.github.tobato.fastdfs") +@Configuration +public class FastDFSConfig { + + @Autowired + private TrackerConnectionManager trackerConnectionManager; + + @PostConstruct + public void init() { + trackerConnectionManager.initTracker(); + } +} diff --git a/src/main/java/com/biutag/supervision/config/GlobalExceptionHandler.java b/src/main/java/com/biutag/supervision/config/GlobalExceptionHandler.java new file mode 100644 index 0000000..d83bb84 --- /dev/null +++ b/src/main/java/com/biutag/supervision/config/GlobalExceptionHandler.java @@ -0,0 +1,62 @@ +package com.biutag.supervision.config; + +import com.biutag.supervision.exception.AuthException; +import com.biutag.supervision.pojo.Result; +import jakarta.validation.ValidationException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.dao.DataAccessException; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import java.util.stream.Collectors; + +@Slf4j +@ControllerAdvice +public class GlobalExceptionHandler { + + @ResponseStatus(HttpStatus.OK) + @ExceptionHandler(Exception.class) + @ResponseBody + public Result handleException(Exception e) { + log.error("系统异常: {}", e.getMessage(), e); + return Result.failed(e.getMessage()); + } + + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + @ExceptionHandler(DataAccessException.class) + @ResponseBody + public Result handleDataAccessException(DataAccessException e) { + log.error("数据库异常: {}", e.getMessage(), e); + return Result.failed(String.format("数据库异常:%s", e.getMessage())); + } + + @ResponseStatus(HttpStatus.UNAUTHORIZED) + @ExceptionHandler(AuthException.class) + @ResponseBody + public Result handleAuthException(AuthException e) { + log.error("未授权", e); + return Result.failed(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.getReasonPhrase()); + } + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(MethodArgumentNotValidException.class) + @ResponseBody + public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + String message = e.getBindingResult().getFieldErrors().stream().map(item -> "不能为空".equals(item.getDefaultMessage()) ? item.getField() + "-" + item.getDefaultMessage() : item.getDefaultMessage()).collect(Collectors.joining("; ")); + log.error("参数错误: {}", message, e); + return Result.failed(HttpStatus.BAD_REQUEST.value(), String.format("参数错误:%s", message)); + } + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(ValidationException.class) + @ResponseBody + public Result handleValidationException(ValidationException e) { + log.error("参数错误", e); + return Result.failed(HttpStatus.BAD_REQUEST.value(), e.getMessage()); + } + +} diff --git a/src/main/java/com/biutag/supervision/config/InterceptorConfig.java b/src/main/java/com/biutag/supervision/config/InterceptorConfig.java new file mode 100644 index 0000000..37ee69d --- /dev/null +++ b/src/main/java/com/biutag/supervision/config/InterceptorConfig.java @@ -0,0 +1,73 @@ +package com.biutag.supervision.config; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.Header; +import com.biutag.supervision.constants.RedisKeyConstants; +import com.biutag.supervision.exception.AuthException; +import com.biutag.supervision.util.SpringUtil; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * @author wxc + * @date 2024/1/8 + */ +@Slf4j +@Configuration +public class InterceptorConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new DefaultInterceptor()) + .addPathPatterns("/**") + .excludePathPatterns("/api/**") + .excludePathPatterns("/login") + .excludePathPatterns("/auth/self") + .excludePathPatterns("/file/stream/**", "/templates/**") + .excludePathPatterns(List.of("/doc.html", "/webjars/**", "/favicon.ico", "/v3/api-docs/**")); + + registry.addInterceptor(new ApiInterceptor()) + .addPathPatterns("/api/jwdc/**"); + } + + static class DefaultInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + log.info("请求地址:{}", request.getRequestURI()); + String authorization = request.getHeader(Header.AUTHORIZATION.getValue()); + RedisTemplate redisTemplate = SpringUtil.getBean("redisTemplate", RedisTemplate.class); + if (StrUtil.isBlank(authorization) || Objects.isNull(redisTemplate.opsForValue().get(String.format(RedisKeyConstants.LOGIN_USERINFO_KEY, authorization)))) { + throw new AuthException(); + } + // 更新 会话 有效期 + redisTemplate.expire(String.format(RedisKeyConstants.LOGIN_USERINFO_KEY, authorization), 24, TimeUnit.HOURS); + return true; + } + + } + + static class ApiInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + log.info("请求地址【API】:{}", request.getRequestURI()); + String authorization = request.getHeader("Authorization"); + if (!"565318a8ea367e03904e1c241048dd6c".equals(authorization)) { + throw new AuthException(); + } + return true; + } + } + +} diff --git a/src/main/java/com/biutag/supervision/config/MybatisPlusConfig.java b/src/main/java/com/biutag/supervision/config/MybatisPlusConfig.java new file mode 100644 index 0000000..ef5b671 --- /dev/null +++ b/src/main/java/com/biutag/supervision/config/MybatisPlusConfig.java @@ -0,0 +1,22 @@ +package com.biutag.supervision.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@MapperScan("com.biutag.supervision.mapper") +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加 + // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType + return interceptor; + } + +} diff --git a/src/main/java/com/biutag/supervision/config/ScheduledConfig.java b/src/main/java/com/biutag/supervision/config/ScheduledConfig.java new file mode 100644 index 0000000..705eef7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/config/ScheduledConfig.java @@ -0,0 +1,22 @@ +package com.biutag.supervision.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; + +/** + * @author wxc + * @date 2024/10/17 + */ +@Configuration +public class ScheduledConfig { + + @Bean + public ScheduledTaskRegistrar scheduledTaskRegistrar(TaskScheduler taskScheduler) { + ScheduledTaskRegistrar scheduledTaskRegistrar = new ScheduledTaskRegistrar(); + scheduledTaskRegistrar.setTaskScheduler(taskScheduler); + return scheduledTaskRegistrar; + } + +} diff --git a/src/main/java/com/biutag/supervision/config/SwaggerConfig.java b/src/main/java/com/biutag/supervision/config/SwaggerConfig.java new file mode 100644 index 0000000..356c611 --- /dev/null +++ b/src/main/java/com/biutag/supervision/config/SwaggerConfig.java @@ -0,0 +1,28 @@ +package com.biutag.supervision.config; + +import io.swagger.v3.oas.models.ExternalDocumentation; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Contact; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.info.License; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +@Configuration +public class SwaggerConfig { + + @Bean + public OpenAPI springShopOpenAPI() { + return new OpenAPI() + .info(new Info().title("长沙公安数字督察一体化平台接口文档") + .contact(new Contact()) + .description("长沙公安数字督察一体化平台接口文档") + .version("v1") + .license(new License().name("长沙市公安局").url(""))) + .externalDocs(new ExternalDocumentation() + .description("接口文档")); + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/constants/AppConstants.java b/src/main/java/com/biutag/supervision/constants/AppConstants.java new file mode 100644 index 0000000..18d145b --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/AppConstants.java @@ -0,0 +1,28 @@ +package com.biutag.supervision.constants; + +public class AppConstants { + + public static final int MENU_ROOT_ID = 0; + + // 单位 + public static final String DICT_CONTENT_ROOT_PARENT_CODE = "-1"; + + public static final Integer DICT_PROBLEM_SOURCE_ROOT_PARENT_CODE = -1; + + // 管理员类型类型(超级管理员) + public static final String USER_TYPE_SUPER = "super"; + + + // 单位 + public static final String DEPART_ROOT_PID = "0"; + + + // 单位根节点ID(长沙市公安局) + public static final String ROOT_DEPART_ID = "12630"; + + public static final String ROOT_DEPART_NAME = "长沙市公安局"; + + // + public static final String SIGN_RETURN_ACTION_NAME = "已退回"; + +} diff --git a/src/main/java/com/biutag/supervision/constants/RedisKeyConstants.java b/src/main/java/com/biutag/supervision/constants/RedisKeyConstants.java new file mode 100644 index 0000000..c1bfe10 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/RedisKeyConstants.java @@ -0,0 +1,6 @@ +package com.biutag.supervision.constants; + +public class RedisKeyConstants { + + public final static String LOGIN_USERINFO_KEY = "login:userinfo:%s"; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/ApprovalFlowEnum.java b/src/main/java/com/biutag/supervision/constants/enums/ApprovalFlowEnum.java new file mode 100644 index 0000000..3278397 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/ApprovalFlowEnum.java @@ -0,0 +1,17 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ApprovalFlowEnum { + + // 二级审批 所队一>二级机构 + SECOND_APPROVAL("2"), + // 三级审批 所队一>二級机构一>市局 + THREE_APPROVAL("3"); + + private String value; + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/ApproveStateEnum.java b/src/main/java/com/biutag/supervision/constants/enums/ApproveStateEnum.java new file mode 100644 index 0000000..030ba88 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/ApproveStateEnum.java @@ -0,0 +1,7 @@ +package com.biutag.supervision.constants.enums; + +public enum ApproveStateEnum { + + approved, + rejected; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/BusinessTypeEnum.java b/src/main/java/com/biutag/supervision/constants/enums/BusinessTypeEnum.java new file mode 100644 index 0000000..71d27c8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/BusinessTypeEnum.java @@ -0,0 +1,39 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum BusinessTypeEnum { + + JCJ_110("110接处警", "1", "110"), + JCJ_122("122接处警", "2", "122"), + RJCKFW("人境窗口服务", "3", "RJ"), + CJGFF("车驾管服务", "4", "CJG"), + JJCF("交警执法", "5", "JJ"), + ZFBA("执法办案", "6", "CF"), + ZXGZ("专项工作", "7", "ZX"), + ABWW("安保维稳", "8", "AB"), + JAFK("治安防控", "9", "ZA"), + XZGL("行政管理", "10", "XZ"), + FFJC("服务基层", "12", "FF"), + DWGL("队伍管理", "13", "DW"), + QT("其他", "14", "QT"), + ; + + private String label; + + private String value; + + private String key; + + public static BusinessTypeEnum get(String value) { + for (BusinessTypeEnum businessTypeEnum : values()) { + if (businessTypeEnum.value.equals(value)) { + return businessTypeEnum; + } + } + throw new RuntimeException("无此业务类型"); + } +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/CaseVerifProblemNatureEnum.java b/src/main/java/com/biutag/supervision/constants/enums/CaseVerifProblemNatureEnum.java new file mode 100644 index 0000000..9714240 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/CaseVerifProblemNatureEnum.java @@ -0,0 +1,19 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author wxc + * @date 2024/10/29 + */ +@AllArgsConstructor +public enum CaseVerifProblemNatureEnum { + + ZFBA("执法办案"), + FWGL("服务管理"), + JJJG("警纪警规"); + + @Getter + private String laebl; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/DataUpdateMethodEnum.java b/src/main/java/com/biutag/supervision/constants/enums/DataUpdateMethodEnum.java new file mode 100644 index 0000000..b8795c2 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/DataUpdateMethodEnum.java @@ -0,0 +1,9 @@ +package com.biutag.supervision.constants.enums; + +public enum DataUpdateMethodEnum { + + // 增量更新 + incremental, + // 覆盖更新 + overwrite +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/DepartGroupEnum.java b/src/main/java/com/biutag/supervision/constants/enums/DepartGroupEnum.java new file mode 100644 index 0000000..160743f --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/DepartGroupEnum.java @@ -0,0 +1,20 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author wxc + * @date 2024/10/29 + */ +@AllArgsConstructor +@Getter +public enum DepartGroupEnum { + + COUNTY_CITY_BUREAUS(3, "分县市局"), + BUREAU_AFFILIATED(4, "局属单位"); + + private Integer id; + + private String label; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/DepartLevelEnum.java b/src/main/java/com/biutag/supervision/constants/enums/DepartLevelEnum.java new file mode 100644 index 0000000..18b7a41 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/DepartLevelEnum.java @@ -0,0 +1,16 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum DepartLevelEnum { + + SECOND_CATEGORY(1), + SECOND(2), + THREE(3); + + private Integer value; + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/DistributionCycleEnum.java b/src/main/java/com/biutag/supervision/constants/enums/DistributionCycleEnum.java new file mode 100644 index 0000000..2130ac6 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/DistributionCycleEnum.java @@ -0,0 +1,10 @@ +package com.biutag.supervision.constants.enums; + +/** + * @author wxc + * @date 2024/10/17 + */ +public enum DistributionCycleEnum { + day, + weekly +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/DistributionFlowEnum.java b/src/main/java/com/biutag/supervision/constants/enums/DistributionFlowEnum.java new file mode 100644 index 0000000..25f8809 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/DistributionFlowEnum.java @@ -0,0 +1,17 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author wxc + * @date 2024/10/17 + */ +@AllArgsConstructor +@Getter +public enum DistributionFlowEnum { + + SECOND("2"), + THIRD("3"); + private String value; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/DistributionMethodEnum.java b/src/main/java/com/biutag/supervision/constants/enums/DistributionMethodEnum.java new file mode 100644 index 0000000..76aa7d5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/DistributionMethodEnum.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author wxc + * @date 2024/10/17 + */ +@AllArgsConstructor +@Getter +public enum DistributionMethodEnum { + + // 问题下发 + NEGATIVE_DISTRIBUTE("1"), + // 数据保存 + DATA_SAVE("2"), + // 预警通知 + WARNING_NOTIFICATION("3"); + + private String value; + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/DistributionStateEnum.java b/src/main/java/com/biutag/supervision/constants/enums/DistributionStateEnum.java new file mode 100644 index 0000000..cd2b2e5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/DistributionStateEnum.java @@ -0,0 +1,22 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author wxc + * @date 2024/10/17 + */ +@AllArgsConstructor +public enum DistributionStateEnum { + + // 未分发 + UNDISTRIBUTED("0"), + // 已分发 + DISTRIBUTED("1"), + // 已处置 + HANDLED("2"); + + @Getter + private String value; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/FlowActionEnum.java b/src/main/java/com/biutag/supervision/constants/enums/FlowActionEnum.java new file mode 100644 index 0000000..f8af85c --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/FlowActionEnum.java @@ -0,0 +1,19 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum FlowActionEnum { + + FIRST_DISTRIBUTE("first_distribute", "已下发"), + SECOND_APPROVE("second_approve", "已审批"), + FIRST_APPROVE("first_approve", "已审批"); + + @Getter + private String key; + + @Getter + private String name; + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/FlowNodeEnum.java b/src/main/java/com/biutag/supervision/constants/enums/FlowNodeEnum.java new file mode 100644 index 0000000..3ca8ecf --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/FlowNodeEnum.java @@ -0,0 +1,41 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.List; + +@AllArgsConstructor +@Getter +public enum FlowNodeEnum { + + FIRST_DISTRIBUTE("first_distribute"), + SECOND_SIGN("second_sign"), + SECOND_DISTRIBUTE("second_distribute"), + THREE_SIGN("three_sign"), + VERIFY("verify"), + SECOND_APPROVE("first_approve"), + FIRST_APPROVE("first_approve"), + SECOND_EXTENSION_APPROVE("first_approve"), + FIRST_EXTENSION_APPROVE("first_approve"), + COMPLETED("completed"); + + private String key; + + public static List getSignFlowKeys() { + return List.of(FIRST_DISTRIBUTE.getKey(), SECOND_SIGN.getKey(), SECOND_DISTRIBUTE.getKey(), THREE_SIGN.getKey()); + } + + public static boolean isSignFlow(String flowKey) { + return getSignFlowKeys().contains(flowKey); + } + + /** + * 办结审批 + * @return + */ + public static List getApproveFlowKeys() { + return List.of(FIRST_DISTRIBUTE.getKey(), SECOND_SIGN.getKey(), SECOND_DISTRIBUTE.getKey(), THREE_SIGN.getKey()); + } + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/HostLevelEnums.java b/src/main/java/com/biutag/supervision/constants/enums/HostLevelEnums.java new file mode 100644 index 0000000..f04942c --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/HostLevelEnums.java @@ -0,0 +1,15 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum HostLevelEnums { + + FIRST("1"), + SECOND("2"), + THREE("3"); + + private String value; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/InitialPetition.java b/src/main/java/com/biutag/supervision/constants/enums/InitialPetition.java new file mode 100644 index 0000000..8de6cca --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/InitialPetition.java @@ -0,0 +1,38 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * + * @author wxc + * @date 2024/10/22 + */ +@Getter +@AllArgsConstructor +public enum InitialPetition { + + THE_FIRST("1", "初访"), + + REPEAT("2", "重访"); + + private String value; + + public String label; + + public static String getValue(String str) { + if ("初".equals(str)) { + return THE_FIRST.getValue(); + } + if ("重".equals(str)) { + return REPEAT.getValue(); + } + for (InitialPetition value : values()) { + if (value.getLabel().equals(str)) { + return value.getValue(); + } + } + return null; + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/constants/enums/InspectCaseEnum.java b/src/main/java/com/biutag/supervision/constants/enums/InspectCaseEnum.java new file mode 100644 index 0000000..9a20161 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/InspectCaseEnum.java @@ -0,0 +1,28 @@ +package com.biutag.supervision.constants.enums; + +import cn.hutool.core.util.StrUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum InspectCaseEnum { + + // 属实 + TRUE("1"), + // 部分属实 + PARTIALLY_TRUE("2"), + // 不属实 + FALSE("3"), + + NOT_VERIFIED("4"), + + OTHER("5"); + + private String value; + + public static boolean isItTure(String value) { + return StrUtil.isNotBlank(value) && !OTHER.getValue().equals(value); + } + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/IsRectifyEnum.java b/src/main/java/com/biutag/supervision/constants/enums/IsRectifyEnum.java new file mode 100644 index 0000000..1397490 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/IsRectifyEnum.java @@ -0,0 +1,16 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +// 是否整改 +@AllArgsConstructor +@Getter +public enum IsRectifyEnum { + + NOT("0"), + YES("1"); + + private String value; + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/MenuEnum.java b/src/main/java/com/biutag/supervision/constants/enums/MenuEnum.java new file mode 100644 index 0000000..acee071 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/MenuEnum.java @@ -0,0 +1,17 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum MenuEnum { + + CATALOGUE("M"), + MENU("C"), + BUTTON("A"); + + private String value; + + public String value() { + return value; + } +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/NegativeTaskCategoryEnum.java b/src/main/java/com/biutag/supervision/constants/enums/NegativeTaskCategoryEnum.java new file mode 100644 index 0000000..04aa08d --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/NegativeTaskCategoryEnum.java @@ -0,0 +1,13 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum NegativeTaskCategoryEnum { + IMPORT("0"), + EXPORT("2"); + + @Getter + private String value; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/NegativeTaskStatusEnum.java b/src/main/java/com/biutag/supervision/constants/enums/NegativeTaskStatusEnum.java new file mode 100644 index 0000000..3102a9d --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/NegativeTaskStatusEnum.java @@ -0,0 +1,14 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum NegativeTaskStatusEnum { + SUCCESS("0"), + FAIL("1"), + PADDING("2"); + + @Getter + private String value; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/PersonTypeEnum.java b/src/main/java/com/biutag/supervision/constants/enums/PersonTypeEnum.java new file mode 100644 index 0000000..c0bd005 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/PersonTypeEnum.java @@ -0,0 +1,21 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author wxc + * @date 2024/11/1 + */ +@Getter +@AllArgsConstructor +public enum PersonTypeEnum { + + police("1", "民警"), + works("2", "职工"), + aux("3", "辅警"), + clerk("4", "文员"), + xj("5", "协警"); + private String value; + private String label; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/ProblemSourcesEnum.java b/src/main/java/com/biutag/supervision/constants/enums/ProblemSourcesEnum.java new file mode 100644 index 0000000..9bc160e --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/ProblemSourcesEnum.java @@ -0,0 +1,46 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ProblemSourcesEnum { + XCDC("现场督察", "13"), + SZDC("数字督察", "14"), + ZXDC("专项督察", "15"), + SPDC("视频督察", "16"), + + A12389("12389", "17"), + SLDJB("市局领导交办", "18"), + ZDDJB("支队领导交办", "19"), + SJJB("上级交办", "20"), + + GJXFPT("国家信访平台", "21"), + GABXF("公安部信访", "22"), + JZXX("局长信箱", "23"), + XF12337("12337信访", "24"), + XF_QT("其他", "25"), + + SJJD("审计监督", "26"), + + JWDC("警务评议", "2"), + JYDC("警意调查", "3"), + CFJD("持法监督", "4"), + JCKH("检查考核", "8"), + QT("其他", "9"), + LMGZ("灵敏感知", "27"); + + private String label; + + private String value; + + public static ProblemSourcesEnum get(String value) { + for (ProblemSourcesEnum problemSourcesEnum : values()) { + if (problemSourcesEnum.value.equals(value)) { + return problemSourcesEnum; + } + } + throw new RuntimeException("无此问题来源"); + } +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/ProcessingStatusEnum.java b/src/main/java/com/biutag/supervision/constants/enums/ProcessingStatusEnum.java new file mode 100644 index 0000000..617753f --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/ProcessingStatusEnum.java @@ -0,0 +1,26 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum ProcessingStatusEnum { + + signing("签收中"), + processing("办理中"), + approval("审批中"), + completed("已办结"); + + @Getter + private String label; + + public static String getLabel(String name) { + for (ProcessingStatusEnum value : values()) { + if (value.name().equals(name)) { + return value.getLabel(); + } + } + return null; + } + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/RepeatEnum.java b/src/main/java/com/biutag/supervision/constants/enums/RepeatEnum.java new file mode 100644 index 0000000..0ad1243 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/RepeatEnum.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.constants.enums; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum RepeatEnum { + + FIRST_MAIL(1, "初访信件"), + REPEAT_MAIL(2, "重访信件"); + + private Integer id; + + private String label; + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/RoleCodeEnum.java b/src/main/java/com/biutag/supervision/constants/enums/RoleCodeEnum.java new file mode 100644 index 0000000..a75a2d9 --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/RoleCodeEnum.java @@ -0,0 +1,17 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum RoleCodeEnum { + + ADMIN("admin"), + FIRST_ADMIN("admin_1"), + SECOND_ADMIN("admin_1_1_1_2"), + THREE_ADMIN("admin_1_1_1_3"); + + private String code; + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/StatusEnum.java b/src/main/java/com/biutag/supervision/constants/enums/StatusEnum.java new file mode 100644 index 0000000..a3a847e --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/StatusEnum.java @@ -0,0 +1,15 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum StatusEnum { + + ENABLE("1"), + DISABLE("0"); + + private String value; + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/TimeLimitEnum.java b/src/main/java/com/biutag/supervision/constants/enums/TimeLimitEnum.java new file mode 100644 index 0000000..905e5bc --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/TimeLimitEnum.java @@ -0,0 +1,38 @@ +package com.biutag.supervision.constants.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +// 办理时限 +@Getter +@AllArgsConstructor +public enum TimeLimitEnum { + + WORK_137("137工作制", "3+7", 1, 3, 7), + WORK_10_10("10+10工作制", "10+10", 1, 10, 10), + WORK_14_7("14+7工作制", "14+7", 1, 14, 7), + OTHER("其他", "other", null, null, null); + + private String label; + + private String value; + + // 签收时长(天) + private Integer maxSignDuration; + + // 办理时长(天) + private Integer maxHandleDuration; + + // 最大延期时长(天) + private Integer maxExtensionDuration; + + public static TimeLimitEnum get(String value) { + for (TimeLimitEnum timeLimitEnum : values()) { + if (timeLimitEnum.getValue().equals(value)) { + return timeLimitEnum; + } + } + throw new RuntimeException(String.format("办理时限字典[%s]未找到", value)); + } + +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/WorkStateEnum.java b/src/main/java/com/biutag/supervision/constants/enums/WorkStateEnum.java new file mode 100644 index 0000000..eb3103b --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/WorkStateEnum.java @@ -0,0 +1,7 @@ +package com.biutag.supervision.constants.enums; + +public enum WorkStateEnum { + + todo, + done; +} diff --git a/src/main/java/com/biutag/supervision/constants/enums/WorkStatusEnum.java b/src/main/java/com/biutag/supervision/constants/enums/WorkStatusEnum.java new file mode 100644 index 0000000..f71d10c --- /dev/null +++ b/src/main/java/com/biutag/supervision/constants/enums/WorkStatusEnum.java @@ -0,0 +1,7 @@ +package com.biutag.supervision.constants.enums; + +public enum WorkStatusEnum { + + todo, + done; +} diff --git a/src/main/java/com/biutag/supervision/controller/AuthController.java b/src/main/java/com/biutag/supervision/controller/AuthController.java new file mode 100644 index 0000000..695e60b --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/AuthController.java @@ -0,0 +1,79 @@ +package com.biutag.supervision.controller; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.RedisKeyConstants; +import com.biutag.supervision.exception.AuthException; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.domain.Self; +import com.biutag.supervision.pojo.entity.Menu; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.pojo.vo.MenuTree; +import com.biutag.supervision.service.MenuService; +import com.biutag.supervision.service.UserLoginService; +import com.biutag.supervision.util.JSON; +import com.fasterxml.jackson.databind.JsonNode; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +@Slf4j +@RequiredArgsConstructor +@RequestMapping("auth") +@RestController +public class AuthController { + + private final MenuService menuService; + + private final UserLoginService userLoginService; + + private final RedisTemplate redisTemplate; + + @Value("${spring.profiles.active}") + private String profilesActive; + + @Value("${negative.v1-user-url:''}") + private String v1UserUrl; + + @GetMapping("self") + public Result self() { + String authorization = UserContextHolder.getCurrentToken(); + if (StrUtil.isBlank(authorization)) { + throw new AuthException(); + } + UserAuth user = UserContextHolder.getCurrentUser(); + if ("prod".equals(profilesActive)) { + if (Objects.isNull(user)) { + HttpResponse httpResponse = HttpUtil + .createGet(v1UserUrl) + .bearerAuth(authorization) + .execute(); + log.info("获取用户信息:{}", httpResponse.body()); + JsonNode jsonNode = JSON.readTree(httpResponse.body()); + String account = jsonNode.get("data") + .get("username").asText(); + user = userLoginService.buildUserAuth(account); + redisTemplate.opsForValue().set(String.format(RedisKeyConstants.LOGIN_USERINFO_KEY, authorization), user, 24, TimeUnit.HOURS); + } + } + if (Objects.isNull(user)) { + throw new AuthException(); + } + boolean superFlag = AppConstants.USER_TYPE_SUPER.equals(user.getUserType()); + List menus = superFlag ? menuService.listAll() : menuService.listMenuByCurrentUser(); + List perms = superFlag ? List.of("*") : menuService.listPermsByCurrentUser(); + return Result.success(new Self().setUser(user).setMenus(MenuTree.buildTree(menus)).setPerms(perms)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/FileController.java b/src/main/java/com/biutag/supervision/controller/FileController.java new file mode 100644 index 0000000..a1dd2d9 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/FileController.java @@ -0,0 +1,46 @@ +package com.biutag.supervision.controller; + +import cn.hutool.core.io.IoUtil; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.vo.FileVo; +import com.biutag.supervision.service.FileService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@Slf4j +@RequiredArgsConstructor +@RequestMapping("file") +@Controller +public class FileController { + + private final FileService fileService; + + @ResponseBody + @PostMapping("upload") + public Result upload(@RequestPart("file") MultipartFile file) throws IOException { + log.info("文件上传 upload------------------------------"); + String filePath = fileService.upload(file); + return Result.success(new FileVo() + .setFileName(file.getOriginalFilename()) + .setFilePath(filePath)); + } + + @GetMapping("stream/**") + public void download(HttpServletRequest request, HttpServletResponse response) throws IOException { + String filePath = request.getRequestURI().substring(12); + if (filePath.toLowerCase().endsWith(".pdf")) { + response.setContentType("application/pdf"); + } else { + response.setContentType("application/octet-stream"); + } + IoUtil.copy(fileService.download(filePath), response.getOutputStream()); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/LoginController.java b/src/main/java/com/biutag/supervision/controller/LoginController.java new file mode 100644 index 0000000..41d4624 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/LoginController.java @@ -0,0 +1,64 @@ +package com.biutag.supervision.controller; + +import cn.hutool.core.util.IdUtil; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.RedisKeyConstants; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.AccountDto; +import com.biutag.supervision.pojo.entity.*; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.pojo.vo.TokenVo; +import com.biutag.supervision.service.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.security.crypto.bcrypt.BCrypt; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +@Tag(name = "登录接口") +@Slf4j +@RequiredArgsConstructor +@RestController +public class LoginController { + + private final BaseAccountService accountService; + + private final UserLoginService userLoginService; + + private final RedisTemplate redisTemplate; + + @Operation(summary = "登录") + @PostMapping("login") + public Result login(@RequestBody AccountDto account) { + BaseAccount baseAccount = accountService.getByLogin(account.getAccount()); + try { + if (Objects.isNull(baseAccount) || !BCrypt.checkpw(account.getPassword(), baseAccount.getPassword())) { + throw new RuntimeException("用户名或密码有误,请重新输入"); + } + } catch (RuntimeException e) { + log.error(e.getMessage(), e); + throw new RuntimeException("用户名或密码有误,请重新输入"); + } + UserAuth userAuth = userLoginService.buildUserAuth(baseAccount.getAccount()); + String token = IdUtil.fastSimpleUUID(); + redisTemplate.opsForValue().set(String.format(RedisKeyConstants.LOGIN_USERINFO_KEY, token), userAuth, 24, TimeUnit.HOURS); + return Result.success(new TokenVo().setToken(token)); + } + + @PostMapping("logout") + public Result logout() { + redisTemplate.opsForValue(); + redisTemplate.delete(String.format(RedisKeyConstants.LOGIN_USERINFO_KEY, UserContextHolder.getCurrentToken())); + return Result.success(); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/StatisticsController.java b/src/main/java/com/biutag/supervision/controller/StatisticsController.java new file mode 100644 index 0000000..57a635f --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/StatisticsController.java @@ -0,0 +1,156 @@ +package com.biutag.supervision.controller; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.FlowNodeEnum; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; +import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeService; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; + +@RequiredArgsConstructor +@RequestMapping("statistics") +@RestController +public class StatisticsController { + + private final NegativeService negativeService; + + @GetMapping("flowNumberAndTodayNumber") + public Result> flowNumber() { + UserAuth user = UserContextHolder.getCurrentUser(); + boolean authEmpty = (user.getAuthSources().isEmpty() || user.getAuthDepartIds().isEmpty()) && !AppConstants.USER_TYPE_SUPER.equals(user.getUserType()); + if (authEmpty) { + Map data = new HashMap<>(); + data.put("flowNumber", List.of(new FlowNumber("问题签收中", "sign", 0L), + new FlowNumber("核查办理", "verify", 0L), + new FlowNumber("申请延期", "delay", 0L), + new FlowNumber("办结审批", "completedApprove", 0L)) + ); + data.put("todayNumber", List.of(new TodayNumber("今日问题", 0L), + new TodayNumber("今日办结", 0L), + new TodayNumber("累计问题", 0L), + new TodayNumber("累计办结", 0L)) + ); + return Result.success(data); + } + boolean nonAdminAuth = !AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) && !user.getRoleCodes().contains(RoleCodeEnum.FIRST_ADMIN.getCode()); + long signCount = negativeService.count(new LambdaUpdateWrapper() + .eq(Negative::getProcessingStatus, ProcessingStatusEnum.signing.name()) + .in(!user.getAuthSources().isEmpty(), Negative::getProblemSourcesCode, user.getAuthSources()) + .and(nonAdminAuth, query -> { + query.in(Negative::getHandleSecondDepartId, user.getAuthDepartIds()).or() + .in(Negative::getThingDesc, user.getAuthDepartIds()); + }) + ); + long verifyCount = negativeService.count(new LambdaUpdateWrapper() + .eq(Negative::getProcessingStatus, ProcessingStatusEnum.processing.name()) + .in(!user.getAuthSources().isEmpty(), Negative::getProblemSourcesCode, user.getAuthSources()) + .and(nonAdminAuth, query -> { + query.in(Negative::getHandleSecondDepartId, user.getAuthDepartIds()).or() + .in(Negative::getThingDesc, user.getAuthDepartIds()); + }) + ); + long delayCount = negativeService.count(new LambdaUpdateWrapper() + .eq(Negative::getExtensionApplyFlag, false) + .in(!user.getAuthSources().isEmpty(), Negative::getProblemSourcesCode, user.getAuthSources()) + .and(nonAdminAuth, query -> { + query.in(Negative::getHandleSecondDepartId, user.getAuthDepartIds()).or() + .in(Negative::getThingDesc, user.getAuthDepartIds()); + }) + ); + long completedApproveCount = negativeService.count(new LambdaUpdateWrapper() + .eq(Negative::getProcessingStatus, ProcessingStatusEnum.approval.name()) + .in(!user.getAuthSources().isEmpty(), Negative::getProblemSourcesCode, user.getAuthSources()) + .and(nonAdminAuth, query -> { + query.in(Negative::getHandleSecondDepartId, user.getAuthDepartIds()).or() + .in(Negative::getThingDesc, user.getAuthDepartIds()); + }) + ); + + Date now = new Date(); + DateTime beginOfDay = DateUtil.beginOfDay(now); + DateTime endOfDay = DateUtil.endOfDay(now); + long todayNumber = negativeService.count(new LambdaUpdateWrapper() + .between(Negative::getCrtTime, beginOfDay, endOfDay) + .in(!user.getAuthSources().isEmpty(), Negative::getProblemSourcesCode, user.getAuthSources()) + .and(nonAdminAuth, query -> { + query.in(Negative::getHandleSecondDepartId, user.getAuthDepartIds()).or() + .in(Negative::getThingDesc, user.getAuthDepartIds()); + }) + ); + long todayCompleted = negativeService.count(new LambdaUpdateWrapper() + .between(Negative::getCompleteDate, beginOfDay, endOfDay) + .in(!user.getAuthSources().isEmpty(), Negative::getProblemSourcesCode, user.getAuthSources()) + .and(nonAdminAuth, query -> { + query.in(Negative::getHandleSecondDepartId, user.getAuthDepartIds()).or() + .in(Negative::getThingDesc, user.getAuthDepartIds()); + }) + ); + long totalNumber = negativeService.count(new LambdaUpdateWrapper() + .in(!user.getAuthSources().isEmpty(), Negative::getProblemSourcesCode, user.getAuthSources()) + .and(nonAdminAuth, query -> { + query.in(Negative::getHandleSecondDepartId, user.getAuthDepartIds()).or() + .in(Negative::getThingDesc, user.getAuthDepartIds()); + }) + ); + long totalCompleted = negativeService.count(new LambdaUpdateWrapper() + .eq(Negative::getProcessingStatus, ProcessingStatusEnum.completed.name()) + .in(!user.getAuthSources().isEmpty(), Negative::getProblemSourcesCode, user.getAuthSources()) + .and(nonAdminAuth, query -> { + query.in(Negative::getHandleSecondDepartId, user.getAuthDepartIds()).or() + .in(Negative::getThingDesc, user.getAuthDepartIds()); + }) + ); + + Map data = new HashMap<>(); + data.put("flowNumber", List.of(new FlowNumber("问题签收中", "sign", signCount), + new FlowNumber("核查办理", "verify", verifyCount), + new FlowNumber("申请延期", "delay", delayCount), + new FlowNumber("办结审批", "completedApprove", completedApproveCount)) + ); + data.put("todayNumber", List.of(new TodayNumber("今日问题", todayNumber), + new TodayNumber("今日办结", todayCompleted), + new TodayNumber("累计问题", totalNumber), + new TodayNumber("累计办结", totalCompleted)) + ); + return Result.success(data); + } + + @Setter + @Getter + public class FlowNumber { + private String name; + private String icon; + private Long total; + public FlowNumber(String name, String icon, Long total) { + this.name = name; + this.icon = icon; + this.total = total; + } + } + + @Setter + @Getter + public class TodayNumber { + private String name; + private Long total; + public TodayNumber(String name, Long total) { + this.name = name; + this.total = total; + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/controller/api/jwdc/NegativeApiController.java b/src/main/java/com/biutag/supervision/controller/api/jwdc/NegativeApiController.java new file mode 100644 index 0000000..69d5a3b --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/api/jwdc/NegativeApiController.java @@ -0,0 +1,49 @@ +package com.biutag.supervision.controller.api.jwdc; + +import com.alibaba.fastjson.JSON; +import com.biutag.supervision.pojo.domain.Blame; +import com.biutag.supervision.pojo.dto.jwdc.NegativeApiDto; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.service.NegativeBlameService; +import com.biutag.supervision.service.NegativeService; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@Slf4j +@Validated +@RequiredArgsConstructor +@RequestMapping("api/jwdc/negative") +@RestController +public class NegativeApiController { + + private final NegativeService negativeService; + + private final NegativeBlameService negativeBlameService; + + @PostMapping + public String addAll(@RequestBody @Valid List list) { + log.info("问题数据导入: {}", JSON.toJSONString(list)); + negativeService.saveByJwpy(list); + return "success"; + } + + @GetMapping("responsible") + public List responsible(@RequestParam @Valid @NotBlank(message = "来源ID不能为空") String originId) { + log.info("警务调查责任民警查询,来源ID: {}", originId); + Negative negative = negativeService.getByOriginId(originId); + if (Objects.isNull(negative)) { + return new ArrayList<>(); + } + List list = negativeBlameService.list(negative.getId()); + log.info("警务调查责任民警查询,返回结果数量: {}", list.size()); + return list; + } +} diff --git a/src/main/java/com/biutag/supervision/controller/api/plugin/PetitionComplainApiController.java b/src/main/java/com/biutag/supervision/controller/api/plugin/PetitionComplainApiController.java new file mode 100644 index 0000000..369db97 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/api/plugin/PetitionComplainApiController.java @@ -0,0 +1,30 @@ +package com.biutag.supervision.controller.api.plugin; + +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.DataPetitionComplaintDto; +import com.biutag.supervision.service.DataPetitionComplaintService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "信访投诉(插件)") +@RequiredArgsConstructor +@RequestMapping("plugin/petitionComplain") +@RestController +public class PetitionComplainApiController { + + private final DataPetitionComplaintService dataPetitionComplaintService; + + @Operation(summary = "推送信访投诉数据") + @PostMapping + public Result add(@RequestBody @Validated DataPetitionComplaintDto body) { + return Result.success(dataPetitionComplaintService.save(body)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/baseData/BusinessDepartController.java b/src/main/java/com/biutag/supervision/controller/baseData/BusinessDepartController.java new file mode 100644 index 0000000..b76bc44 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/baseData/BusinessDepartController.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.controller.baseData; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.model.BusinessPoliceModel; +import com.biutag.supervision.pojo.param.BusinessQueryParam; +import com.biutag.supervision.service.BusinessDepartService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequiredArgsConstructor +@RequestMapping("baseData/depart") +@RestController +public class BusinessDepartController { + private final BusinessDepartService businessDepartService; + + @GetMapping("page") + public Result> page(BusinessQueryParam businessQueryParam) { + return Result.success(businessDepartService.page(businessQueryParam)); + } +} diff --git a/src/main/java/com/biutag/supervision/controller/baseData/BusinessPoliceController.java b/src/main/java/com/biutag/supervision/controller/baseData/BusinessPoliceController.java new file mode 100644 index 0000000..b2be0a0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/baseData/BusinessPoliceController.java @@ -0,0 +1,24 @@ +package com.biutag.supervision.controller.baseData; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.model.BusinessPoliceModel; +import com.biutag.supervision.pojo.param.BusinessQueryParam; +import com.biutag.supervision.service.BusinessPoliceService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequiredArgsConstructor +@RequestMapping("baseData/police") +@RestController +public class BusinessPoliceController { + + private final BusinessPoliceService businessPoliceService; + + @GetMapping("page") + public Result> page(BusinessQueryParam businessQueryParam) { + return Result.success(businessPoliceService.page(businessQueryParam)); + } +} diff --git a/src/main/java/com/biutag/supervision/controller/data/DataCaseVerifController.java b/src/main/java/com/biutag/supervision/controller/data/DataCaseVerifController.java new file mode 100644 index 0000000..9ca59c1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/data/DataCaseVerifController.java @@ -0,0 +1,119 @@ +package com.biutag.supervision.controller.data; + +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.exception.ExcelDataConvertException; +import com.alibaba.excel.read.listener.ReadListener; +import com.alibaba.excel.read.metadata.ReadSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.constants.enums.DepartLevelEnum; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.DataCaseVerifDistribute; +import com.biutag.supervision.pojo.dto.DataCaseVerifImportDto; +import com.biutag.supervision.pojo.entity.DataCaseVerif; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.pojo.param.DataCaseVerifQueryParam; +import com.biutag.supervision.service.DataCaseVerifService; +import com.biutag.supervision.service.SupDepartService; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; +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; +import java.util.Set; +import java.util.stream.Collectors; + +@Slf4j +@RequestMapping("data/caseVerif") +@RequiredArgsConstructor +@RestController +public class DataCaseVerifController { + + private final DataCaseVerifService dataCaseVerifService; + + private final SupDepartService departService; + + private final Validator validator; + + @GetMapping + public Result> list(DataCaseVerifQueryParam queryParam) { + return Result.success(dataCaseVerifService.page(queryParam)); + } + + @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<>(); + List secondDeparts = departService.listByLevel(List.of(DepartLevelEnum.SECOND.getValue())); + ExcelReader excelReader = EasyExcel.read(file.getInputStream(), DataCaseVerifImportDto.class, new ReadListener() { + @Override + public void invoke(DataCaseVerifImportDto data, AnalysisContext analysisContext) { + String secondDepartId = secondDeparts.stream() + .filter(item -> item.getShortName().equals(data.getSecondDepartName())).findFirst() + .map(SupDepart::getId).orElse(""); + data.setSecondDepartId(secondDepartId); + if (StrUtil.isNotBlank(secondDepartId)) { + String complainedThirdDepartId = departService.list(new LambdaQueryWrapper().eq(SupDepart::getPid, secondDepartId) + .like(SupDepart::getShortName, data.getThirdDepartName())) + .stream().findFirst().map(SupDepart::getId).orElse(""); + data.setThirdDepartId(complainedThirdDepartId); + } + Set> validate = validator.validate(data); + if (!validate.isEmpty()) { + String message = validate.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining("\n")); + data.setErrMsg(message); + data.setState("fail"); + } else { + data.setState("success"); + } + list.add(data); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + }).build(); + ReadSheet sheet = EasyExcel.readSheet(0).build(); + try { + excelReader.read(sheet); + } catch (ExcelDataConvertException e) { + log.error(e.getMessage(), e); + throw new RuntimeException("日期格式错误"); + } + excelReader.close(); + return Result.success(list); + } + + @PostMapping("{dataUpdateMethod}") + public Result add(@RequestBody List body, @PathVariable String dataUpdateMethod) { + if (body.isEmpty()) { + return Result.success(); + } + return Result.success(dataCaseVerifService.save(body, dataUpdateMethod)); + } + + @DeleteMapping("{id}") + public Result del(@PathVariable String id) { + return Result.success(dataCaseVerifService.removeById(id)); + } + + @PostMapping("distribute") + public Result distribute(@RequestBody DataCaseVerifDistribute dataDistribute) { + return Result.success(dataCaseVerifService.distribution(dataDistribute)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/data/DataPetitionComplaintController.java b/src/main/java/com/biutag/supervision/controller/data/DataPetitionComplaintController.java new file mode 100644 index 0000000..893fbad --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/data/DataPetitionComplaintController.java @@ -0,0 +1,134 @@ +package com.biutag.supervision.controller.data; + +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.excel.read.metadata.ReadSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.constants.enums.DepartLevelEnum; +import com.biutag.supervision.constants.enums.InitialPetition; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.DataDataPetitionComplainDistribute; +import com.biutag.supervision.pojo.dto.DataPetitionComplaintAddDto; +import com.biutag.supervision.pojo.dto.DataPetitionComplaintImportDto; +import com.biutag.supervision.pojo.entity.DataPetitionComplaint; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.pojo.param.DataPetitionComplaintQueryParam; +import com.biutag.supervision.service.DataPetitionComplaintService; +import com.biutag.supervision.service.SupDepartService; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; +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; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * + * @author wxc + * @date + */ +@Slf4j +@RequiredArgsConstructor +@RequestMapping("data/petitionComplaint") +@RestController +public class DataPetitionComplaintController { + + private final DataPetitionComplaintService dataPetitionComplaintService; + + private final SupDepartService departService; + + private final Validator validator; + + @GetMapping + public Result> list(DataPetitionComplaintQueryParam queryParam) { + return Result.success(dataPetitionComplaintService.page(queryParam)); + } + + @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 secondDeparts = departService.listByLevel(List.of(DepartLevelEnum.SECOND.getValue())); + + List list = new ArrayList<>(); + ExcelReader excelReader = EasyExcel.read(file.getInputStream(), DataPetitionComplaintImportDto.class, new ReadListener() { + + @Override + public void invoke(DataPetitionComplaintImportDto data, AnalysisContext analysisContext) { + if ("是".equals(data.getEntanglementVisitsLabel())) { + data.setEntanglementVisits(true); + } + if ("否".equals(data.getEntanglementVisitsLabel())) { + data.setEntanglementVisits(false); + } + if ("是".equals(data.getMassVisitsLabel())) { + data.setMassVisits(true); + } + if ("否".equals(data.getMassVisitsLabel())) { + data.setMassVisits(false); + } + data.setInitialPetition(InitialPetition.getValue(data.getInitialPetition())); + + String secondDepartId = secondDeparts.stream() + .filter(item -> item.getShortName().equals(data.getInvolveSecondDepartName())).findFirst() + .map(SupDepart::getId).orElse(""); + data.setInvolveSecondDepartId(secondDepartId); + if (StrUtil.isNotBlank(secondDepartId)) { + String complainedThirdDepartId = departService.list(new LambdaQueryWrapper().eq(SupDepart::getPid, secondDepartId) + .like(SupDepart::getShortName, data.getInvolveThirdDepartName())) + .stream().findFirst().map(SupDepart::getId).orElse(""); + data.setInvolveThirdDepartId(complainedThirdDepartId); + } + Set> validate = validator.validate(data); + if (!validate.isEmpty()) { + String message = validate.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining("\n")); + data.setErrMsg(message); + data.setState("fail"); + } else { + data.setState("success"); + } + list.add(data); + } + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + } + }).build(); + ReadSheet sheet = EasyExcel.readSheet(0).build(); + excelReader.read(sheet); + excelReader.close(); + return Result.success(list); + } + + @PostMapping() + public Result add(@RequestBody DataPetitionComplaintAddDto body) { + if (body.getData().isEmpty()) { + return Result.success(); + } + return Result.success(dataPetitionComplaintService.save(body)); + } + + @DeleteMapping("{id}") + public Result del(@PathVariable String id) { + return Result.success(dataPetitionComplaintService.removeById(id)); + } + + @PostMapping("distribute") + public Result distribute(@RequestBody DataDataPetitionComplainDistribute dataDistribute) { + return Result.success(dataPetitionComplaintService.distribution(dataDistribute)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/datav/DataPetitionComplaintViewController.java b/src/main/java/com/biutag/supervision/controller/datav/DataPetitionComplaintViewController.java new file mode 100644 index 0000000..ff0bbdf --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/datav/DataPetitionComplaintViewController.java @@ -0,0 +1,79 @@ +package com.biutag.supervision.controller.datav; + + +import cn.hutool.core.util.NumberUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.biutag.supervision.constants.enums.DepartGroupEnum; +import com.biutag.supervision.constants.enums.RepeatEnum; +import com.biutag.supervision.mapper.DataCaseVerifMapper; +import com.biutag.supervision.mapper.DataPetitionComplaintMapper; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.CaseVerifDepart; +import com.biutag.supervision.pojo.entity.DataPetitionComplaint; +import com.biutag.supervision.service.DataPetitionComplaintService; +import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + + +/** + * @author: sh + * @date: 2024/10/31 + */ +@RequestMapping("datav/mailVisits") +@RequiredArgsConstructor +@RestController +public class DataPetitionComplaintViewController { + + private final DataPetitionComplaintService dataPetitionComplaintService; + private final DataPetitionComplaintMapper dataPetitionComplaintMapper; + + /** + * 信访数据大屏统计 + * + * @param beginTime + * @param endTime + * @return + */ + @GetMapping + public Result mailVisits(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { + // 信访数据总数概览 + JSONObject overview = dataPetitionComplaintService.allMailCount(beginTime, endTime); + // 分县市局信初重访领导访排名 + List fxsjFirstMailList = dataPetitionComplaintService.mailRank(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId(), RepeatEnum.FIRST_MAIL.getId(), beginTime, endTime); + List fxsjRepeatMailList = dataPetitionComplaintService.mailRank(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId(), RepeatEnum.REPEAT_MAIL.getId(), beginTime, endTime); + List fxsjLeaderViewMailList = dataPetitionComplaintMapper.selectLeaderViewMail(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId(), beginTime, endTime); + // 部委支队初重领导访排名 + List bwzdFirstMailList = dataPetitionComplaintService.mailRank(DepartGroupEnum.BUREAU_AFFILIATED.getId(), RepeatEnum.FIRST_MAIL.getId(), beginTime, endTime); + List bwzdRepeatMailList = dataPetitionComplaintService.mailRank(DepartGroupEnum.BUREAU_AFFILIATED.getId(), RepeatEnum.REPEAT_MAIL.getId(), beginTime, endTime); + List bwzdLeaderViewMailList = dataPetitionComplaintMapper.selectLeaderViewMail(DepartGroupEnum.BUREAU_AFFILIATED.getId(), beginTime, endTime); + // 分县市局领导督办、缠访、集访排名 + List fxsjEntanglementMailList = dataPetitionComplaintMapper.selectEntanglementMail(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId(), 1, beginTime, endTime); + List fxsjMassMailList = dataPetitionComplaintMapper.selectMassMail(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId(), 1, beginTime, endTime); + // 部委支队缠访集访排名 + List bwzdEntanglementMailList = dataPetitionComplaintMapper.selectEntanglementMail(DepartGroupEnum.BUREAU_AFFILIATED.getId(), 1, beginTime, endTime); + List bwzdMassMailList = dataPetitionComplaintMapper.selectMassMail(DepartGroupEnum.BUREAU_AFFILIATED.getId(), 1, beginTime, endTime); + JSONObject data = new JSONObject().fluentPut("overview", overview) + .fluentPut("fxsjFirstMailList", fxsjFirstMailList) + .fluentPut("fxsjRepeatMailList", fxsjRepeatMailList) + .fluentPut("fxsjLeaderViewMailList", fxsjLeaderViewMailList) + .fluentPut("bwzdFirstMailList", bwzdFirstMailList) + .fluentPut("bwzdRepeatMailList", bwzdRepeatMailList) + .fluentPut("bwzdLeaderViewMailList", bwzdLeaderViewMailList) + .fluentPut("fxsjEntanglementMailList", fxsjEntanglementMailList) + .fluentPut("fxsjMassMailList", fxsjMassMailList) + .fluentPut("bwzdEntanglementMailList", bwzdEntanglementMailList) + .fluentPut("bwzdMassMailList", bwzdMassMailList); + return Result.success(data); + } + + +} diff --git a/src/main/java/com/biutag/supervision/controller/datav/DataVCaseVerifController.java b/src/main/java/com/biutag/supervision/controller/datav/DataVCaseVerifController.java new file mode 100644 index 0000000..41283dd --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/datav/DataVCaseVerifController.java @@ -0,0 +1,78 @@ +package com.biutag.supervision.controller.datav; + +import cn.hutool.core.util.NumberUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervision.constants.enums.CaseVerifProblemNatureEnum; +import com.biutag.supervision.constants.enums.DepartGroupEnum; +import com.biutag.supervision.mapper.DataCaseVerifMapper; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.CaseVerifDepart; +import com.biutag.supervision.pojo.dto.common.PieItem; +import com.biutag.supervision.pojo.entity.DataCaseVerif; +import com.biutag.supervision.service.DataCaseVerifService; +import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * @author wxc + * @date 2024/10/24 + */ +@RequestMapping("datav/caseVerif") +@RequiredArgsConstructor +@RestController +public class DataVCaseVerifController { + + private final DataCaseVerifService dataCaseVerifService; + + private final DataCaseVerifMapper dataCaseVerifMapper; + + @GetMapping + public Result caseVerif(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { + long total = dataCaseVerifService.count(new LambdaQueryWrapper().between(DataCaseVerif::getDiscoveryTime, beginTime, endTime)); + long confirmed = 0; + JSONObject overview = new JSONObject() + // 案件总数(起) + .fluentPut("total", total) + // 查实案件数 + .fluentPut("confirmed", 0) + // 查处问题(个) + .fluentPut("investigateAndPunish", 0) + // 问责人次 + .fluentPut("accountablePeopleNumber", 0) + // 问责单位数 + .fluentPut("accountableDepartNumber", 0) + // 查实率 + .fluentPut("confirmedRate", total == 0 ? 0 : BigDecimal.valueOf(NumberUtil.div(confirmed, total) * 100).intValue()); + // 分县市局排名 + List fxsjBarList = dataCaseVerifMapper.selectDepartStatistic(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId(), beginTime, endTime); + // 局属单位排名 + List jsdwBarList = dataCaseVerifMapper.selectDepartStatistic(DepartGroupEnum.BUREAU_AFFILIATED.getId(), beginTime, endTime); + // 执法办案 + List zfbaPieList = dataCaseVerifMapper.selectInvolveProblemGroupByBusinessTypeName(CaseVerifProblemNatureEnum.ZFBA.getLaebl(), beginTime, endTime); + // 服务管理 + List fwglPieList = dataCaseVerifMapper.selectInvolveProblemGroupByBusinessTypeName(CaseVerifProblemNatureEnum.FWGL.getLaebl(), beginTime, endTime); + // 警察纪警规 + List jjjgPieList = dataCaseVerifMapper.selectInvolveProblemGroupByBusinessTypeName(CaseVerifProblemNatureEnum.JJJG.getLaebl(), beginTime, endTime); + // 案件来源占比 + List ajlyPieList = dataCaseVerifMapper.selectGroupByProblemSources(beginTime, endTime); + + JSONObject data = new JSONObject().fluentPut("overview", overview) + .fluentPut("fxsjBarList", fxsjBarList) + .fluentPut("jsdwBarList", jsdwBarList) + .fluentPut("zfbaPieList", zfbaPieList) + .fluentPut("fwglPieList", fwglPieList) + .fluentPut("jjjgPieList", jjjgPieList) + .fluentPut("ajlyPieList", ajlyPieList); + return Result.success(data); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/datav/DatavRightsComfortController.java b/src/main/java/com/biutag/supervision/controller/datav/DatavRightsComfortController.java new file mode 100644 index 0000000..edeee4c --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/datav/DatavRightsComfortController.java @@ -0,0 +1,54 @@ +package com.biutag.supervision.controller.datav; + +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.model.DataRightsComfortModel; +import com.biutag.supervision.service.DataRightsComfortService; +import com.biutag.supervision.service.RpcApplyService; +import com.biutag.supervision.service.RpcInfringerResultService; +import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Date; + +@RequestMapping("datav/rightsComfort") +@RequiredArgsConstructor +@RestController +public class DatavRightsComfortController { + + private final RpcApplyService rpcApplyService; + + private final DataRightsComfortService dataRightsComfortService; + private final RpcInfringerResultService rpcInfringerResultService; + + @GetMapping + public Result rightsComfort(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { + DataRightsComfortModel result = new DataRightsComfortModel(); + // 维权案件总数 + + // 受侵害人数 + + // 抚慰人数 + result.setComfortPersonNumber(dataRightsComfortService.countComfortPersonNumber(beginTime, endTime)); + // 打击处理人数 + result.setHitPersonNumber(dataRightsComfortService.countHitPersonNumber(beginTime, endTime)); + // 抚慰金额(万元) + result.setComfortMoney(dataRightsComfortService.countComfortMoney(beginTime, endTime)); + // 维权案件情况 + + // 案件类别占比 + + // 打处情况 + result.setPunishmentSituation(dataRightsComfortService.selectPunishmentSituation(beginTime, endTime)); + // 抚慰情况 + result.setComfortSituation(dataRightsComfortService.selectComfortSituation(beginTime, endTime)); + // 民辅警受伤情况 + + // 发案情况占比 + + return Result.success(result); + } +} diff --git a/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClassController.java b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClassController.java new file mode 100644 index 0000000..512ff13 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClassController.java @@ -0,0 +1,26 @@ +package com.biutag.supervision.controller.sensitivePerception; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.ModelClass; +import com.biutag.supervision.service.ModelClassService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RequestMapping("modelClass") +@RequiredArgsConstructor +@RestController +public class ModelClassController { + + private final ModelClassService modelClassService; + + @GetMapping + public Result> list() { + return Result.success(modelClassService.list(new LambdaQueryWrapper().orderByAsc(ModelClass::getSort))); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueController.java b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueController.java new file mode 100644 index 0000000..5c223d8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueController.java @@ -0,0 +1,58 @@ +package com.biutag.supervision.controller.sensitivePerception; + +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.ModelClueDepartDto; +import com.biutag.supervision.pojo.dto.ModelClueTaskDistribute; +import com.biutag.supervision.pojo.entity.ModelClue; +import com.biutag.supervision.pojo.model.ModelClueModel; +import com.biutag.supervision.pojo.param.ModelClueQueryParam; +import com.biutag.supervision.service.ModelClueService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +/** + * @author wxc + * @date 2024/10/16 + */ +@RequestMapping("model/clues") +@RequiredArgsConstructor +@RestController +public class ModelClueController { + + private final ModelClueService modelClueService; + + @GetMapping + public Result> page(ModelClueQueryParam param) { + return Result.success(modelClueService.page(param)); + } + + @GetMapping("{id}") + public Result page(@PathVariable Integer id) { + ModelClueModel modelClueModel = new ModelClueModel(); + ModelClue modelClue = modelClueService.getById(id); + BeanUtils.copyProperties(modelClue, modelClueModel); + return Result.success(modelClueModel); + } + + /** + * 手动分发 + * @param taskDistribute + * @return + */ + @PostMapping("task/distribute/manuel") + public Result manuelDistribute(@RequestBody ModelClueTaskDistribute taskDistribute) { + return Result.success(modelClueService.distribution(taskDistribute)); + } + + @PostMapping("{id}/updateDepart") + public Result updateDepart(@PathVariable Integer id, @RequestBody ModelClueDepartDto departDto) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(ModelClue::getId, id) + .set(ModelClue::getInvolveDepartId, departDto.getDepartId()); + return Result.success(modelClueService.update(updateWrapper)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueRecordController.java b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueRecordController.java new file mode 100644 index 0000000..8be86bb --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueRecordController.java @@ -0,0 +1,37 @@ +package com.biutag.supervision.controller.sensitivePerception; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +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.entity.ModelClueRecord; +import com.biutag.supervision.service.ModelClueRecordService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author wxc + * @date 2024/10/16 + */ +@RequestMapping("model/clue/records") +@RequiredArgsConstructor +@RestController +public class ModelClueRecordController { + + private final ModelClueRecordService modelClueRecordService; + + @GetMapping("/{modelId}/top") + public Result> list(@PathVariable Integer modelId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(ModelClueRecord::getModelId, modelId) + .orderByDesc(ModelClueRecord::getCreateTime); + return Result.success(modelClueRecordService.page(new Page<>(1, 8), queryWrapper).getRecords()); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueTaskController.java b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueTaskController.java new file mode 100644 index 0000000..4baa0a1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelClueTaskController.java @@ -0,0 +1,38 @@ +package com.biutag.supervision.controller.sensitivePerception; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.model.ModelClueTaskDepartModel; +import com.biutag.supervision.pojo.model.ModelClueTaskModel; +import com.biutag.supervision.pojo.param.ModelClueTaskQueryParam; +import com.biutag.supervision.service.ModelClueTaskService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author wxc + * @date 2024/10/16 + */ +@RequestMapping("model/clue/tasks") +@RequiredArgsConstructor +@RestController +public class ModelClueTaskController { + + private final ModelClueTaskService modelClueTaskService; + + @GetMapping + public Result> page(ModelClueTaskQueryParam param) { + return Result.success(modelClueTaskService.page(param)); + } + + @GetMapping("{taskId}/byDepart") + public Result> listDepart(@PathVariable Integer taskId) { + return Result.success(modelClueTaskService.listDepart(taskId)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelController.java b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelController.java new file mode 100644 index 0000000..49a15ce --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ModelController.java @@ -0,0 +1,75 @@ +package com.biutag.supervision.controller.sensitivePerception; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.Model; +import com.biutag.supervision.pojo.entity.ModelClass; +import com.biutag.supervision.pojo.param.ModelQueryParam; +import com.biutag.supervision.pojo.vo.ModelTree; +import com.biutag.supervision.service.ModelClassService; +import com.biutag.supervision.service.ModelService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@RequestMapping("models") +@RequiredArgsConstructor +@RestController +public class ModelController { + + private final ModelService modelService; + + private final ModelClassService modelClassService; + + @GetMapping + public Result> list(ModelQueryParam queryParam) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper + .like(StrUtil.isNotBlank(queryParam.getModelName()), Model::getModelName, queryParam.getModelName()) + .eq(StrUtil.isNotBlank(queryParam.getDistributionMethod()), Model::getDistributionMethod, queryParam.getDistributionMethod()) + .eq(Objects.nonNull(queryParam.getClassId()), Model::getClassId, queryParam.getClassId()) + .orderByDesc(Model::getCreateTime); + return Result.success(modelService.page(new Page<>(queryParam.getCurrent(), queryParam.getSize()), queryWrapper)); + } + + @GetMapping("tree") + public Result> tree() { + List modelClasses = modelClassService.list(); + List models = modelService.list(); + List list = new ArrayList<>(); + list.addAll(modelClasses.stream().map(item -> { + ModelTree node = new ModelTree(); + node.setValue(item.getId()); + node.setLabel(item.getName()); + node.setType("modelClass"); + List children = models.stream().filter(model -> item.getId().equals(model.getClassId())).map(ModelTree::of).toList(); + node.setChildren(children); + return node; + }).toList()); + list.addAll(models.stream().filter(model -> Objects.isNull(model.getClassId())).map(ModelTree::of).toList()); + return Result.success(list); + } + + @PostMapping + public Result add(@RequestBody Model model) { + + return Result.success(modelService.saveModel(model)); + } + + @PutMapping + public Result update(@RequestBody Model model) { + modelService.updateModel(model); + return Result.success(model); + } + + @DeleteMapping("{id}") + public Result del(@PathVariable Integer id) { + return Result.success(modelService.remove(id)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/sensitivePerception/ProfileDepartController.java b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ProfileDepartController.java new file mode 100644 index 0000000..5cea706 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/sensitivePerception/ProfileDepartController.java @@ -0,0 +1,81 @@ +package com.biutag.supervision.controller.sensitivePerception; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.constants.enums.InspectCaseEnum; +import com.biutag.supervision.constants.enums.PersonTypeEnum; +import com.biutag.supervision.mapper.ProfileDepartMapper; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.domain.ProfileDepart; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeBlame; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.pojo.entity.SupPolice; +import com.biutag.supervision.pojo.model.DepartNegativeModel; +import com.biutag.supervision.pojo.param.DepartNegativeQueryParam; +import com.biutag.supervision.service.NegativeBlameService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.SupDepartService; +import com.biutag.supervision.service.SupPoliceService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * 单位/个人画像 + * @author wxc + * @date 2024/10/31 + */ +@RequiredArgsConstructor +@RequestMapping("profile/depart") +@RestController +public class ProfileDepartController { + + private final ProfileDepartMapper profileDepartMapper; + private final SupDepartService departService; + private final SupPoliceService policeService; + private final NegativeService negativeService; + private final NegativeBlameService blameService; + + @GetMapping + public Result> list(DepartNegativeQueryParam param) { + Date beginTime = DateUtil.parse("1949", "YYYY"); + Date endTime = new Date(); + if (Objects.nonNull(param.getCrtTime()) && !param.getCrtTime().isEmpty()) { + beginTime = param.getCrtTime().get(0); + endTime = param.getCrtTime().get(1); + } + Page page = profileDepartMapper.queryDepartNegative(Page.of(param.getCurrent(), param.getSize()), beginTime, endTime, param.getDepartName(), param.getDepartId()); + return Result.success(page); + } + + @GetMapping("{departId}") + public Result profile(@PathVariable String departId, Date beginTime, Date endTime) { + ProfileDepart profileDepart = new ProfileDepart(); + SupDepart depart = departService.getById(departId); + profileDepart.getDepartInfo() + .setName(depart.getName()) + .setShortName(depart.getShortName()); + List polices = policeService.listAllByDepartId(departId); + profileDepart.getDepartInfo().setMainRole(polices.stream().filter(item -> "正职".equals(item.getPosition())).findFirst().map(SupPolice::getName).orElse(null)); + profileDepart.getDepartInfo().setDeputyRole(polices.stream().filter(item -> "副职".equals(item.getPosition())).map(SupPolice::getName).toList()); + // 民警数量 + profileDepart.getDepartInfo().setPoliceSize(polices.stream().filter(item -> PersonTypeEnum.police.getValue().equals(item.getPersonStatus())).count()); + + // 协警辅警数量 + profileDepart.getDepartInfo().setAuxSize(polices.stream().filter(item -> PersonTypeEnum.aux.getValue().equals(item.getPersonStatus()) || PersonTypeEnum.xj.getValue().equals(item.getPersonStatus())).count()); + long negativeSize = negativeService.count(new LambdaQueryWrapper().eq(Negative::getInvolveDepartId, departId) + .in(Negative::getCheckStatus, List.of(InspectCaseEnum.TRUE.getValue(), InspectCaseEnum.PARTIALLY_TRUE.getValue()))); + profileDepart.getNegativeInfo().setSize(negativeSize); + + return Result.success(profileDepart); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/system/DepartController.java b/src/main/java/com/biutag/supervision/controller/system/DepartController.java new file mode 100644 index 0000000..3d8ae14 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/system/DepartController.java @@ -0,0 +1,100 @@ +package com.biutag.supervision.controller.system; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.constants.enums.DepartLevelEnum; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.pojo.param.DepartQueryParam; +import com.biutag.supervision.pojo.param.DepartTreeListParam; +import com.biutag.supervision.pojo.vo.DepartTree; +import com.biutag.supervision.service.SupDepartService; +import com.biutag.supervision.service.SupPoliceService; +import jakarta.validation.ValidationException; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +@RequestMapping("depart") +@RequiredArgsConstructor +@RestController +public class DepartController { + + private final SupDepartService departService; + + public final SupPoliceService policeService; + + @GetMapping + public Result> treeList(DepartTreeListParam departTreeListParam) { + return Result.success(departService.buildTreeByParam(departTreeListParam)); + } + + @GetMapping("list") + public Result> list(DepartQueryParam departQueryParam) { + return Result.success(departService.page(departQueryParam)); + } + + @PostMapping + public Result add(@RequestBody SupDepart supDepart) { + if (departService.existsByName(supDepart.getName())) { + throw new ValidationException("单位全称已存在"); + } + if (departService.existsByCode(supDepart.getCode())) { + throw new ValidationException("单位编码已存在"); + } + SupDepart parent = departService.getById(supDepart.getPid()); + supDepart.setId(String.valueOf(NumberUtil.nullToZero(departService.getMaxId()) + 1)); + supDepart.setLevel(parent.getLevel() + 1); + supDepart.setUpdatedAt(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMAT)); + return Result.success(departService.save(supDepart)); + } + + @PutMapping + public Result update(@RequestBody SupDepart supDepart) { + if (departService.exists(new LambdaQueryWrapper().eq(SupDepart::getName, supDepart.getName()).ne(SupDepart::getId, supDepart.getId()))) { + throw new ValidationException("单位全称已存在"); + } + if (departService.exists(new LambdaQueryWrapper().eq(SupDepart::getCode, supDepart.getCode()).ne(SupDepart::getId, supDepart.getId()))) { + throw new ValidationException("单位编码已存在"); + } + SupDepart parent = departService.getById(supDepart.getPid()); + supDepart.setLevel(parent.getLevel() + 1); + supDepart.setUpdatedAt(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMAT)); + return Result.success(departService.updateById(supDepart)); + } + + @DeleteMapping("{id}") + public Result del(@PathVariable String id) { + if (policeService.exists(id)) { + throw new RuntimeException("该单位下还有警务人员,请移除后再删除"); + } + return Result.success(departService.removeById(id)); + } + + @GetMapping("tree") + public Result> tree() { + return Result.success(departService.buildTreeByAuth()); + } + + @GetMapping("second") + public Result> seconds() { + List supDeparts = departService.listByLevel(List.of(DepartLevelEnum.SECOND_CATEGORY.getValue(), DepartLevelEnum.SECOND.getValue())); + return Result.success(departService.buildTreeBySecond(supDeparts)); + } + + @GetMapping("firstHost") + public Result> firstHost() { + return Result.success(departService.buildTreeByFirstHost()); + } + + @GetMapping("{departId}/children") + public Result> children(@PathVariable String departId) { + return Result.success(departService.list(new LambdaQueryWrapper().eq(SupDepart::getPid, departId).orderByAsc(SupDepart::getOrderNo))); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/system/DictContentController.java b/src/main/java/com/biutag/supervision/controller/system/DictContentController.java new file mode 100644 index 0000000..203c210 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/system/DictContentController.java @@ -0,0 +1,52 @@ +package com.biutag.supervision.controller.system; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.SupDictProblemType; +import com.biutag.supervision.pojo.vo.DictContentTree; +import com.biutag.supervision.service.SupDictContentService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.List; + +@RequiredArgsConstructor +@RequestMapping("dict/content") +@RestController +public class DictContentController { + + private final SupDictContentService dictContentService; + + @GetMapping("tree") + public Result> list() { + return Result.success(dictContentService.buildTree()); + } + + @PostMapping + public Result add(@RequestBody SupDictProblemType dictContent) { + dictContent.setUpdTime(LocalDateTime.now()); + dictContent.setCrtTime(LocalDateTime.now()); + dictContent.setStatus("0"); + dictContentService.save(dictContent); + dictContentService.update(new LambdaUpdateWrapper().eq(SupDictProblemType::getId, dictContent.getId()).set(SupDictProblemType::getCode, dictContent.getId())); + return Result.success(); + } + + @PutMapping + public Result update(@RequestBody SupDictProblemType dictContent) { + dictContent.setUpdTime(LocalDateTime.now()); + dictContentService.updateById(dictContent); + return Result.success(); + } + + @DeleteMapping("{id}") + public Result update(@PathVariable Integer id) { + if (dictContentService.exists(new LambdaQueryWrapper().eq(SupDictProblemType::getParentCode, id))) { + throw new RuntimeException("该节点下还存在子节点,无法删除"); + } + dictContentService.removeById(id); + return Result.success(); + } +} diff --git a/src/main/java/com/biutag/supervision/controller/system/DictController.java b/src/main/java/com/biutag/supervision/controller/system/DictController.java new file mode 100644 index 0000000..550fefd --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/system/DictController.java @@ -0,0 +1,104 @@ +package com.biutag.supervision.controller.system; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +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.DictDataDto; +import com.biutag.supervision.pojo.dto.DictTypeDto; +import com.biutag.supervision.pojo.entity.SupDictData; +import com.biutag.supervision.pojo.entity.SupDictType; +import com.biutag.supervision.pojo.vo.DictProblemSourceTree; +import com.biutag.supervision.service.SupDictDataService; +import com.biutag.supervision.service.SupDictProblemSourceService; +import com.biutag.supervision.service.SupDictTypeService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.List; + +@RequiredArgsConstructor +@RequestMapping("dict") +@RestController +public class DictController { + + private final SupDictTypeService dictTypeService; + + private final SupDictDataService dictDataService; + + private final SupDictProblemSourceService dictProblemSourceService; + + @GetMapping + public Result> page(Page page, String dictName) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .like(StrUtil.isNotBlank(dictName), SupDictType::getDictName, dictName) + .orderByDesc(SupDictType::getUpdateTime); + return Result.success(dictTypeService.page(page, queryWrapper)); + } + + @PostMapping + public Result add(@RequestBody DictTypeDto dictType) { + return Result.success(dictTypeService.save(dictType)); + } + + @PutMapping + public Result update(@RequestBody DictTypeDto dictType) { + SupDictType supDictType = new SupDictType(); + BeanUtil.copyProperties(dictType, supDictType); + supDictType.setUpdateTime(LocalDateTime.now()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().ne(SupDictType::getDictId, dictType.getDictId()).eq(SupDictType::getDictType, dictType.getDictType()); + if (dictTypeService.exists(queryWrapper)) { + throw new RuntimeException("字典类型已存在"); + } + SupDictType oldSupDictType = dictTypeService.getById(dictType.getDictId()); + if (!oldSupDictType.getDictType().equals(supDictType.getDictType())) { + // 更新 + dictDataService.update(new LambdaUpdateWrapper().eq(SupDictData::getDictType, oldSupDictType.getDictType()).set(SupDictData::getDictType, dictType.getDictType())); + } + return Result.success(dictTypeService.updateById(supDictType)); + } + + @DeleteMapping("{dictId}") + public Result update(@PathVariable Integer dictId) { + return Result.success(dictTypeService.removeById(dictId)); + } + @GetMapping("{dictType}/dictData") + public Result> list(Page page, @PathVariable String dictType) { + return Result.success(dictDataService.page(page, new LambdaQueryWrapper() + .eq(SupDictData::getDictType, dictType) + .orderByAsc(SupDictData::getDictSort))); + } + + @PostMapping("{dictType}/dictData") + public Result add(@RequestBody DictDataDto dictData) { + return Result.success(dictDataService.save(dictData)); + } + + @PutMapping("{dictType}/dictData") + public Result update(@RequestBody DictDataDto dictData) { + SupDictData supDictData = new SupDictData(); + BeanUtil.copyProperties(dictData, supDictData); + return Result.success(dictDataService.updateById(supDictData)); + } + + @DeleteMapping("{dictType}/dictData/{dictCode}") + public Result del(@PathVariable Integer dictCode) { + return Result.success(dictDataService.removeById(dictCode)); + } + + @GetMapping("data/{dictType}") + public Result> list(@PathVariable String dictType) { + return Result.success(dictDataService.list(new LambdaQueryWrapper() + .eq(SupDictData::getDictType, dictType) + .orderByAsc(SupDictData::getDictSort))); + } + + @GetMapping("problemSource") + public Result> listProblemSource() { + return Result.success(dictProblemSourceService.buildTree()); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/system/HolidayController.java b/src/main/java/com/biutag/supervision/controller/system/HolidayController.java new file mode 100644 index 0000000..a331b0b --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/system/HolidayController.java @@ -0,0 +1,71 @@ +package com.biutag.supervision.controller.system; + +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.Holiday; +import com.biutag.supervision.service.HolidayService; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.ArrayList; +import java.util.List; + +@RequiredArgsConstructor +@RequestMapping("holiday") +@RestController +public class HolidayController { + + private final HolidayService holidayService; + + public static final List months = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + + @GetMapping("{year}") + public Result> list(@PathVariable Integer year) { + List holidays = holidayService.list(year); + List list = months.stream().map(month -> { + HolidayVo holidayVo = new HolidayVo(); + holidayVo.setMonth(month); + LocalDate beginDay = LocalDate.of(year, month, 1); + int beginDayOfWeek = beginDay.getDayOfWeek().getValue(); + for (int i = 0; i < (beginDayOfWeek != 0 ? beginDayOfWeek - 1 : 6); i++) { + holidayVo.getDays().add(new Day()); + } + LocalDate.of(year, month, 1); + for (int i = 1; i <= beginDay.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth(); i++) { + String date = LocalDate.of(year, month, i).toString(); + Boolean flag = holidays.stream().filter(item -> item.getDate().equals(date)).findFirst().map(Holiday::getFlag).orElse(false); + holidayVo.getDays().add(Day.of(i, flag)); + } + return holidayVo; + }).toList(); + return Result.success(list); + } + + @Setter + @Getter + public static class HolidayVo { + private Integer month; + private List days = new ArrayList<>(); + } + + @Setter + @Getter + public static class Day { + private Integer day; + private Boolean flag = false; + + public static Day of(Integer day, Boolean flag) { + Day obj = new Day(); + obj.setDay(day); + obj.setFlag(flag); + return obj; + } + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/system/MenuController.java b/src/main/java/com/biutag/supervision/controller/system/MenuController.java new file mode 100644 index 0000000..90ac260 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/system/MenuController.java @@ -0,0 +1,51 @@ +package com.biutag.supervision.controller.system; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.MenuDto; +import com.biutag.supervision.pojo.entity.Menu; +import com.biutag.supervision.pojo.vo.MenuTree; +import com.biutag.supervision.service.MenuService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.List; + +@RequiredArgsConstructor +@RequestMapping("menu") +@RestController +public class MenuController { + + private final MenuService menuService; + + @GetMapping + public Result> list() { + List menus = menuService.list(new LambdaQueryWrapper().orderByAsc(Menu::getMenuSort)); + return Result.success(MenuTree.buildTree(menus)); + } + + @PostMapping + public Result add(@RequestBody MenuDto menuDto) { + Menu menu = new Menu(); + BeanUtils.copyProperties(menuDto, menu); + menuService.save(menu); + return Result.success(); + } + + @PutMapping + public Result> update(@RequestBody MenuDto menuDto) { + Menu menu = new Menu(); + BeanUtils.copyProperties(menuDto, menu); + menu.setUpdateTime(LocalDateTime.now()); + menuService.updateById(menu); + return Result.success(); + } + + @DeleteMapping("{id}") + public Result del(@PathVariable Integer id) { + return Result.success(menuService.removeById(id)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/system/PoliceController.java b/src/main/java/com/biutag/supervision/controller/system/PoliceController.java new file mode 100644 index 0000000..c54ae56 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/system/PoliceController.java @@ -0,0 +1,249 @@ +package com.biutag.supervision.controller.system; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; +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.excel.read.metadata.ReadSheet; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.constants.enums.DepartLevelEnum; +import com.biutag.supervision.constants.enums.InitialPetition; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.domain.PoliceAuth; +import com.biutag.supervision.pojo.dto.PoliceImport; +import com.biutag.supervision.pojo.entity.*; +import com.biutag.supervision.pojo.model.PoliceModel; +import com.biutag.supervision.pojo.param.PoliceQueryParam; +import com.biutag.supervision.service.*; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +@RequestMapping("police") +@RequiredArgsConstructor +@RestController +public class PoliceController { + + private final SupPoliceService policeService; + + private final SupDepartService departService; + + private final NegDepartAuthorityService negDepartAuthorityService; + + private final NegSourceAuthorityService negSourceAuthorityService; + + private final Validator validator; + + @GetMapping + public Result> list(PoliceQueryParam param) { + return Result.success(policeService.page(param)); + } + + @PostMapping + public Result add(@RequestBody SupPolice police) { + SupPolice policeByEmpNo = policeService.getOne(new LambdaQueryWrapper().eq(SupPolice::getEmpNo, police.getEmpNo())); + if (Objects.nonNull(policeByEmpNo)) { + SupDepart depart = departService.getById(policeByEmpNo.getOrgId()); + throw new RuntimeException(String.format("该人员[%s]已存在于“%s”单位中,请联系二级机构或市局管理员以进行人员调整。", police.getEmpNo(), depart.getName())); + } + SupPolice one = policeService.getOne(new LambdaQueryWrapper().eq(SupPolice::getIdCode, police.getIdCode())); + if (Objects.nonNull(one)) { + SupDepart depart = departService.getById(one.getOrgId()); + throw new RuntimeException(String.format("该人员[%s]已存在于“%s”单位中,请联系二级机构或市局管理员以进行人员调整。", police.getIdCode(), depart.getName())); + } + police.setId(IdUtil.getSnowflakeNextIdStr()); + police.setUpdatedAt(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMAT)); + police.setCreatedAt(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMAT)); + return Result.success(policeService.save(police)); + } + + @PutMapping + public Result update(@RequestBody SupPolice police) { + SupPolice policeByEmpNo = policeService.getOne(new LambdaQueryWrapper().eq(SupPolice::getEmpNo, police.getEmpNo()).ne(SupPolice::getId, police.getId())); + if (Objects.nonNull(policeByEmpNo)) { + SupDepart depart = departService.getById(policeByEmpNo.getOrgId()); + throw new RuntimeException(String.format("该人员[%s]已存在于“%s”单位中,请联系二级机构或市局管理员以进行人员调整。", police.getEmpNo(), depart.getName())); + } + SupPolice one = policeService.getOne(new LambdaQueryWrapper().eq(SupPolice::getIdCode, police.getIdCode()).ne(SupPolice::getId, police.getId())); + if (Objects.nonNull(one)) { + SupDepart depart = departService.getById(one.getOrgId()); + throw new RuntimeException(String.format("该人员[%s]已存在于“%s”单位中,请联系二级机构或市局管理员以进行人员调整。", police.getIdCode(), depart.getName())); + } + police.setUpdatedAt(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMAT)); + return Result.success(policeService.updateById(police)); + } + + @DeleteMapping("{id}") + public Result del(@PathVariable String id) { + return Result.success(policeService.removeById(id)); + } + + @GetMapping("{departId}/all") + public Result> all(@PathVariable String departId) { + return Result.success(policeService.listAllByDepartId(departId)); + } + + @GetMapping("{departId}/leader") + public Result> leader(@PathVariable String departId) { + return Result.success(policeService.listLeaderByDepartId(departId)); + } + + @GetMapping("auth/{idCode}") + public Result auth(@PathVariable String idCode) { + PoliceAuth policeAuth = new PoliceAuth().setDeparts(negDepartAuthorityService.list(idCode).stream().map(NegDepartAuthority::getDepartId).toList()) + .setSources(negSourceAuthorityService.list(idCode).stream().map(NegSourceAuthority::getSource).toList()); + return Result.success(policeAuth); + } + + @PostMapping("auth/{idCode}") + public Result auth(@PathVariable String idCode, @RequestBody PoliceAuth policeAuth) { + negDepartAuthorityService.save(idCode, policeAuth.getDeparts()); + negSourceAuthorityService.save(idCode, policeAuth.getSources()); + return Result.success(); + } + + private final BaseUserService userService; + private final BaseAccountService accountService; + private final SupDictProblemSourceService dictProblemSourceService; + + @PostMapping("import") + public Result> importExcel(@RequestPart("file") MultipartFile file) throws IOException { + String fileNameType = FileUtil.extName(file.getOriginalFilename()); + if (!"xls".equals(fileNameType) && !"xlsx".equals(fileNameType)) { + throw new RuntimeException("仅支持 xls/xlsx 格式文件的导入"); + } + List list = new ArrayList<>(); + List problemSources = dictProblemSourceService.list(); + ExcelReader excelReader = EasyExcel.read(file.getInputStream(), PoliceImport.class, new ReadListener() { + @Override + public void invoke(PoliceImport data, AnalysisContext analysisContext) { + Set> validate = validator.validate(data); + if (!validate.isEmpty()) { + String message = validate.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining("\n")); + throw new RuntimeException(String.format("第%s条数据的异常:%s", list.size() + 1, message)); + } + list.add(data); + } + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + } + }).build(); + ReadSheet sheet = EasyExcel.readSheet(0).build(); + excelReader.read(sheet); + excelReader.close(); + for (int i = 0; i < list.size(); i++) { + PoliceImport police = list.get(i); + SupDepart depart = departService.getOne(new LambdaQueryWrapper().eq(SupDepart::getShortName, police.getSecondDepartName()).eq(SupDepart::getLevel, 2)); + if (Objects.isNull(depart)) { + throw new RuntimeException(String.format("%s 该单位在系统中未找到,请核实", police.getSecondDepartName())); + } + if (StrUtil.isNotBlank(police.getThirdDepartName())) { + depart = departService.getOne(new LambdaQueryWrapper().eq(SupDepart::getPid, depart.getId()) + .eq(SupDepart::getShortName, police.getThirdDepartName()).eq(SupDepart::getLevel, 3)); + if (Objects.isNull(depart)) { + throw new RuntimeException(String.format("%s/%s 该单位在系统中未找到,请核实", police.getSecondDepartName(), police.getThirdDepartName())); + } + } + SupPolice supPolice = policeService.getByIdCode(list.get(i).getIdCode()); + if (supPolice == null) { + supPolice = new SupPolice(); + supPolice.setName(police.getName()); + supPolice.setIdCode(police.getIdCode()); + supPolice.setEmpNo(police.getEmpNo()); + supPolice.setOrgId(depart.getId()); + + } else { + supPolice.setName(police.getName()); + supPolice.setIdCode(police.getIdCode()); + supPolice.setEmpNo(police.getEmpNo()); + supPolice.setOrgId(depart.getId()); + if (police.getEmpNo().contains("A")) { + supPolice.setPersonType("3"); + } else { + supPolice.setPersonType("1"); + } + policeService.updateById(supPolice); + } + if ("三级机构专班".equals(police.getRole()) || "二级机构专班".equals(police.getRole())) { + String userId = saveOrUpdateUser(police); + // 角色 + addRoleUser(userId, police.getRole()); + // 权限 + addAuth(police.getIdCode(), supPolice.getOrgId(), problemSources); + } + + } + return Result.success(list); + } + + public String saveOrUpdateUser(PoliceImport police) { + BaseUser user = userService.getByUserName(police.getIdCode()); + if (user != null) { + return user.getUserId(); + } + BaseUser baseUser = new BaseUser(); + baseUser.setUserName(police.getIdCode()); + baseUser.setNickName(police.getName()); + baseUser.setUserType("admin"); + baseUser.setCreateTime(LocalDateTime.now()); + baseUser.setUpdateTime(LocalDateTime.now()); + userService.save(baseUser); + BaseAccount account = new BaseAccount(); + account.setAccount(police.getIdCode()); + account.setUserId(baseUser.getUserId()); + account.setAccountType("username"); + account.setDomain("@admin.com"); + account.setPassword("$2a$10$q0NbHH1fbkDotxJ1dT7PbOcV4G47R8n15uVxz2.imTiDqdCwAJYBC"); + account.setDomain("@admin.com"); + account.setCreateTime(LocalDateTime.now()); + account.setUpdateTime(LocalDateTime.now()); + accountService.save(account); + return baseUser.getUserId(); + } + + private final BaseRoleUserService roleUserService; + public void addRoleUser(String userId, String role) { + roleUserService.remove(new LambdaQueryWrapper().eq(BaseRoleUser::getUserId, userId)); + BaseRoleUser baseRoleUser = new BaseRoleUser(); + baseRoleUser.setUserId(userId); + if ("三级机构专班".equals(role)) { + baseRoleUser.setRoleId("5"); + } + if ("二级机构专班".equals(role)) { + baseRoleUser.setRoleId("4"); + } + baseRoleUser.setCreateTime(LocalDateTime.now()); + baseRoleUser.setUpdateTime(LocalDateTime.now()); + roleUserService.save(baseRoleUser); + } + + public void addAuth(String idCode, String orgId, List problemSources) { + negDepartAuthorityService.remove(new LambdaQueryWrapper().eq(NegDepartAuthority::getIdCode, idCode)); + NegDepartAuthority authority = new NegDepartAuthority(); + authority.setDepartId(orgId); + authority.setIdCode(idCode); + negDepartAuthorityService.save(authority); + negSourceAuthorityService.remove(new LambdaQueryWrapper().eq(NegSourceAuthority::getIdCode, idCode)); + + List list = problemSources.stream().map(item -> { + NegSourceAuthority sourceAuthority = new NegSourceAuthority(); + sourceAuthority.setIdCode(idCode); + sourceAuthority.setSource(item.getId()); + return sourceAuthority; + }).toList(); + negSourceAuthorityService.saveBatch(list); + } +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/controller/system/RoleController.java b/src/main/java/com/biutag/supervision/controller/system/RoleController.java new file mode 100644 index 0000000..e7866d1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/system/RoleController.java @@ -0,0 +1,60 @@ +package com.biutag.supervision.controller.system; + +import cn.hutool.core.util.IdUtil; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.BaseRole; +import com.biutag.supervision.pojo.entity.RoleMenu; +import com.biutag.supervision.pojo.param.RoleQueryParam; +import com.biutag.supervision.service.BaseRoleService; +import com.biutag.supervision.service.RoleMenuService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.List; + +@RequiredArgsConstructor +@RequestMapping("role") +@RestController +public class RoleController { + + private final BaseRoleService baseRoleService; + + private final RoleMenuService roleMenuService; + + @GetMapping + public Result> list(RoleQueryParam roleQueryParam) { + List roles = baseRoleService.list(roleQueryParam); + return Result.success(roles); + } + + @PostMapping + public Result add(@RequestBody BaseRole role) { + role.setRoleId(String.valueOf(IdUtil.getSnowflakeNextId())); + role.setCreateTime(LocalDateTime.now()); + role.setUpdateTime(LocalDateTime.now()); + return Result.success(baseRoleService.save(role)); + } + + @PutMapping + public Result update(@RequestBody BaseRole role) { + role.setUpdateTime(LocalDateTime.now()); + return Result.success(baseRoleService.updateById(role)); + } + + @DeleteMapping("{id}") + public Result del(@PathVariable String id) { + return Result.success(baseRoleService.removeById(id)); + } + + @GetMapping("{roleCode}/menu") + public Result> add(@PathVariable String roleCode) { + return Result.success(roleMenuService.list(roleCode).stream().map(RoleMenu::getMenuId).toList()); + } + + @PostMapping("{roleCode}/menu") + public Result add(@PathVariable String roleCode, @RequestBody List menuIds) { + return Result.success(roleMenuService.update(roleCode, menuIds)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/system/UserController.java b/src/main/java/com/biutag/supervision/controller/system/UserController.java new file mode 100644 index 0000000..5b8d4bc --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/system/UserController.java @@ -0,0 +1,30 @@ +package com.biutag.supervision.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.dto.UserDto; +import com.biutag.supervision.pojo.model.UserModel; +import com.biutag.supervision.pojo.param.UserQueryParam; +import com.biutag.supervision.service.BaseUserService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RequiredArgsConstructor +@RequestMapping("user") +@RestController +public class UserController { + + private final BaseUserService baseUserService; + + @GetMapping + public Result> list(UserQueryParam queryParam) { + Page baseUserPage = baseUserService.page(queryParam); + return Result.success(baseUserPage); + } + + @PostMapping + public Result update(@RequestBody UserDto userDto) { + return Result.success(baseUserService.update(userDto)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/work/FlowNodeController.java b/src/main/java/com/biutag/supervision/controller/work/FlowNodeController.java new file mode 100644 index 0000000..b1f1e78 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/work/FlowNodeController.java @@ -0,0 +1,25 @@ +package com.biutag.supervision.controller.work; + +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.FlowNode; +import com.biutag.supervision.service.FlowNodeService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RequestMapping("negative/flowNode") +@RequiredArgsConstructor +@RestController +public class FlowNodeController { + + private final FlowNodeService flowNodeService; + + @GetMapping + public Result> list() { + return Result.success(flowNodeService.listAll()); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/work/NegativeController.java b/src/main/java/com/biutag/supervision/controller/work/NegativeController.java new file mode 100644 index 0000000..eda9da7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/work/NegativeController.java @@ -0,0 +1,68 @@ +package com.biutag.supervision.controller.work; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.flow.FlowService; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.domain.NegativeDetail; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.NegativeDto; +import com.biutag.supervision.pojo.entity.NegativeTask; +import com.biutag.supervision.pojo.param.NegativeQueryParam; +import com.biutag.supervision.pojo.vo.NegativeQueryVo; +import com.biutag.supervision.service.NegativeQueryService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeTaskService; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RequiredArgsConstructor +@RequestMapping("negative") +@RestController +public class NegativeController { + + private final NegativeService negativeService; + + private final FlowService flowService; + + private final NegativeQueryService negativeQueryService; + + private final NegativeTaskService negativeTaskService; + + @GetMapping + public Result> list(NegativeQueryParam queryParam) { + return Result.success(negativeQueryService.page(queryParam)); + } + + @GetMapping("{id}") + public Result get(@PathVariable String id, Integer workId) { + return Result.success(negativeService.get(id, workId)); + } + + @PostMapping + public Result add(@Valid @RequestBody NegativeDto negativeDto) { + return Result.success(negativeService.save(negativeDto)); + } + + @PostMapping("{id}/execute") + public Result execute(@PathVariable String id, @RequestBody ActionDto action) { + action.setNegativeId(id); + return Result.success(flowService.execute(action)); + } + + @PostMapping("export/excel") + public Result export(NegativeQueryParam queryParam) { + queryParam.setSize(10000); + queryParam.setCurrent(1); + Page page = negativeQueryService.page(queryParam); + NegativeTask negativeTask = negativeTaskService.save(page.getRecords().size()); + negativeTaskService.updateExcel(page.getRecords(), negativeTask.getId()); + return Result.success(); + } + + @DeleteMapping("{id}") + public Result remove(@PathVariable String id) { + return Result.success(negativeService.remove(id)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/work/NegativeFavController.java b/src/main/java/com/biutag/supervision/controller/work/NegativeFavController.java new file mode 100644 index 0000000..c028faf --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/work/NegativeFavController.java @@ -0,0 +1,43 @@ +package com.biutag.supervision.controller.work; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.NegativeFav; +import com.biutag.supervision.pojo.model.NegativeFavModel; +import com.biutag.supervision.pojo.param.WorkParam; +import com.biutag.supervision.service.NegativeFavService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; + +@RequestMapping("negative/fav") +@RequiredArgsConstructor +@RestController +public class NegativeFavController { + + private final NegativeFavService favService; + + @GetMapping + public Result> list(WorkParam workParam) { + return Result.success(favService.page(workParam)); + } + + @PostMapping + public Result add(@RequestBody NegativeFav fav) { + fav.setCreateTime(LocalDateTime.now()); + fav.setUserId(UserContextHolder.getCurrentUserId()); + fav.setCreateTime(LocalDateTime.now()); + return Result.success(favService.save(fav)); + } + + @DeleteMapping("{negativeId}") + public Result del(@PathVariable String negativeId) { + return Result.success(favService.remove(new LambdaQueryWrapper() + .eq(NegativeFav::getNegativeId, negativeId) + .eq(NegativeFav::getUserId, UserContextHolder.getCurrentUserId()))); + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/controller/work/NegativeTaskController.java b/src/main/java/com/biutag/supervision/controller/work/NegativeTaskController.java new file mode 100644 index 0000000..73d52fe --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/work/NegativeTaskController.java @@ -0,0 +1,26 @@ +package com.biutag.supervision.controller.work; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.entity.NegativeTask; +import com.biutag.supervision.pojo.param.NegativeTaskQueryParam; +import com.biutag.supervision.service.NegativeTaskService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequiredArgsConstructor +@RequestMapping("negativeTask") +@RestController +public class NegativeTaskController { + + private final NegativeTaskService negativeTaskService; + + @GetMapping + public Result> page(NegativeTaskQueryParam param) { + return Result.success(negativeTaskService.page(param)); + } + +} diff --git a/src/main/java/com/biutag/supervision/controller/work/WorkController.java b/src/main/java/com/biutag/supervision/controller/work/WorkController.java new file mode 100644 index 0000000..99210fc --- /dev/null +++ b/src/main/java/com/biutag/supervision/controller/work/WorkController.java @@ -0,0 +1,31 @@ +package com.biutag.supervision.controller.work; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.model.NegativeWorkModel; +import com.biutag.supervision.pojo.param.WorkParam; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequiredArgsConstructor +@RequestMapping("work") +@RestController +public class WorkController { + + private final NegativeWorkService negativeWorkService; + + @GetMapping("todo") + public Result> todo(WorkParam workParam) { + return Result.success(negativeWorkService.page(workParam, WorkStatusEnum.todo.name())); + } + + @GetMapping("done") + public Result> done(WorkParam workParam) { + return Result.success(negativeWorkService.page(workParam, WorkStatusEnum.done.name())); + } + +} diff --git a/src/main/java/com/biutag/supervision/exception/AuthException.java b/src/main/java/com/biutag/supervision/exception/AuthException.java new file mode 100644 index 0000000..29389a5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/exception/AuthException.java @@ -0,0 +1,4 @@ +package com.biutag.supervision.exception; + +public class AuthException extends RuntimeException { +} diff --git a/src/main/java/com/biutag/supervision/flow/FlowService.java b/src/main/java/com/biutag/supervision/flow/FlowService.java new file mode 100644 index 0000000..a7f5da8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/FlowService.java @@ -0,0 +1,53 @@ +package com.biutag.supervision.flow; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.flow.action.Action; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.entity.NegativeHistory; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeHistoryService; +import com.biutag.supervision.service.NegativeWorkService; +import com.biutag.supervision.util.JSON; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class FlowService { + + private final List actions; + + private final NegativeHistoryService negativeHistoryService; + + private final NegativeWorkService workService; + + @Transactional(rollbackFor = Exception.class) + public Boolean execute(ActionDto actionDto) { + Action action = actions + .stream() + .filter(item -> item.getClass().getName().contains(StrUtil.upperFirst(StrUtil.toCamelCase(actionDto.getActionKey())))) + .findFirst() + .orElseThrow(() -> new RuntimeException("配置异常,请联系系统管理员")); + action.next(actionDto); + NegativeWork work = workService.getById(actionDto.getWorkId()); + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeHistory history = new NegativeHistory().setHistoryId(IdUtil.fastSimpleUUID()) + .setNegativeId(actionDto.getNegativeId()) + .setActionName(actionDto.getActionName()) + .setDepartName(work.getDepartName()) + .setCrtUser(user.getUserId()) + .setCrtUserName(user.getUserName()) + .setCrtName(user.getNickName()) + .setCrtTime(LocalDateTime.now()) + .setDataJson(JSON.toJSONString(actionDto)); + return negativeHistoryService.save(history); + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/flow/action/Action.java b/src/main/java/com/biutag/supervision/flow/action/Action.java new file mode 100644 index 0000000..e5777e2 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/Action.java @@ -0,0 +1,9 @@ +package com.biutag.supervision.flow.action; + +import com.biutag.supervision.pojo.dto.ActionDto; + +public interface Action { + + void next(ActionDto actionDto); + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/ApplyCompletionAction.java b/src/main/java/com/biutag/supervision/flow/action/ApplyCompletionAction.java new file mode 100644 index 0000000..5afeb74 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/ApplyCompletionAction.java @@ -0,0 +1,182 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.*; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.VerifyData; +import com.biutag.supervision.pojo.entity.*; +import com.biutag.supervision.service.*; +import jakarta.validation.Validator; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * 申请办结 + */ +@RequiredArgsConstructor +@Component +public class ApplyCompletionAction implements Action { + + private final NegativeService negativeService; + + private final NegativeBlameService negativeBlameService; + + private final NegativeProblemRelationService negativeProblemRelationService; + + private final NegativeFileService fileService; + + private final NegativeApproveService aproveService; + + private final NegativeWorkService workService; + + private final SupDepartService departService; + + private final Validator validator; + + @Override + public void next(ActionDto actionDto) { + VerifyData verifyData = BeanUtil.toBean(actionDto.getData(), VerifyData.class); + //validator.validate(verifyData); + // 新增审批数据 + Negative negative = negativeService.getById(actionDto.getNegativeId()); + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey(), verifyData, negative); + doneWork(actionDto.getWorkId()); + addWork(actionDto.getNegativeId(), actionDto.getWorkId(), + // 是否是本级办理 + negative.getIsSecondHandle() ? RoleCodeEnum.FIRST_ADMIN.getCode() : RoleCodeEnum.SECOND_ADMIN.getCode(), + negative); + } + + public void updateNegative(String negativeId, String nextFlowKey, VerifyData verifyData, Negative negative) { + LocalDateTime now = LocalDateTime.now(); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(Negative::getId, negativeId) + .set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getUpdTime, now) + .set(Negative::getProcessingStatus, ProcessingStatusEnum.approval.name()) + .set(Negative::getCheckStatus, verifyData.getCheckStatus()) + .set(Negative::getCheckStatusDesc, verifyData.getCheckStatusDesc()) + .set(Negative::getCheckStatusName, verifyData.getCheckStatusName()) + .set(Negative::getIsRectifyCode, verifyData.getIsRectifyCode()) + .set(Negative::getIsRectifyName, verifyData.getIsRectifyName()) + .set(Negative::getAccountabilityTarget, verifyData.getAccountabilityTarget()) + .set(Negative::getCaseNumber, verifyData.getCaseNumber()) + // 当前处理对象 + .set(Negative::getCurrentProcessingObject, negative.getIsSecondHandle() ? "市局专班" : String.format("%s专班", negative.getHandleSecondDepartName())); + // 未整改 + if (IsRectifyEnum.NOT.getValue().equals(verifyData.getIsRectifyCode())) { + updateWrapper.set(Negative::getRectifyRestrictionDays, verifyData.getRectifyRestrictionDays()); + } + negativeService.update(updateWrapper); + + if (!verifyData.getBlames().isEmpty()) { + List problemRelations = new ArrayList<>(); + List negativeBlames = verifyData.getBlames().stream().map(item -> { + NegativeBlame negativeBlame = new NegativeBlame(); + BeanUtil.copyProperties(item, negativeBlame); + negativeBlame + .setBlameId(IdUtil.fastSimpleUUID()) + .setNegativeId(negativeId) + .setCrtTime(now) + .setUpdTime(now); + if (Objects.nonNull(item.getAssistTime()) && item.getAssistTime().size() >= 2) { + negativeBlame.setAssistStartTime(item.getAssistTime().get(0)) + .setAssistEndTime(item.getAssistTime().get(1)); + } + problemRelations.addAll(item.getProblems().stream().filter(problem -> StrUtil.isNotBlank(problem.getOneLevelCode())).map(problem -> { + NegativeProblemRelation problemRelation = new NegativeProblemRelation(); + BeanUtil.copyProperties(problem, problemRelation); + problemRelation.setId(IdUtil.fastSimpleUUID()); + problemRelation.setBlameId(negativeBlame.getBlameId()); + problemRelation.setNegativeId(negativeId); + return problemRelation; + }).toList()); + return negativeBlame; + }).toList(); + // 先删除 + negativeBlameService.remove(negativeId); + // 新增涉及人员 + negativeBlameService.saveBatch(negativeBlames); + // 新增涉及人员问题类型 + // 先删除 + negativeProblemRelationService.remove(negativeId); + if (!problemRelations.isEmpty()) { + // 新增 + negativeProblemRelationService.saveBatch(problemRelations); + } + } + if (!verifyData.getFiles().isEmpty()) { + // 先删除 + fileService.remove(negativeId); + // 新增 + fileService.saveBatch(verifyData.getFiles(), negativeId); + } + aproveService.remove(negativeId); + + // 不是二级机构本级办理 + if (!negative.getIsSecondHandle()) { + NegativeApprove approve1 = new NegativeApprove() + .setNegativeId(negativeId) + .setActionKey(FlowActionEnum.SECOND_APPROVE.getKey()) + .setCreateTime(now); + aproveService.save(approve1); + } + // 三级审批 所队一>二級机构一>市局 + if (!ApprovalFlowEnum.SECOND_APPROVAL.getValue().equals(negative.getApprovalFlow())) { + NegativeApprove approve2 = new NegativeApprove() + .setNegativeId(negativeId) + .setActionKey(FlowActionEnum.FIRST_APPROVE.getKey()) + .setCreateTime(now); + aproveService.save(approve2); + } + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .eq(NegativeWork::getId, workId)); + } + + public void addWork(String negativeId, Integer workId, String roleCode, Negative negative) { + NegativeWork currentWork = workService.getById(workId); + SupDepart depart = departService.getById(currentWork.getDepartId()); + String parentDepartId; + String parentDepartName; + if (DepartLevelEnum.SECOND.getValue().equals(depart.getLevel())) { + parentDepartId = AppConstants.ROOT_DEPART_ID; + parentDepartName = AppConstants.ROOT_DEPART_NAME; + } else { + SupDepart parentDepart = departService.getById(depart.getPid()); + parentDepartId = parentDepart.getId(); + parentDepartName = parentDepart.getShortName(); + } + + workService.remove(new LambdaQueryWrapper() + .eq(NegativeWork::getNegativeId, negativeId) + .eq(NegativeWork::getRoleCode, roleCode) + .eq(NegativeWork::getDepartId, parentDepartId)); + + NegativeWork work = new NegativeWork() + .setNegativeId(negativeId) + .setRoleCode(roleCode) + .setDepartId(parentDepartId) + .setDepartName(parentDepartName) + .setProblemSourcesCode(negative.getProblemSourcesCode()) + .setCreateTime(LocalDateTime.now()) + .setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.save(work); + } + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/ApplyExtensionAction.java b/src/main/java/com/biutag/supervision/flow/action/ApplyExtensionAction.java new file mode 100644 index 0000000..8c391b7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/ApplyExtensionAction.java @@ -0,0 +1,108 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.ExtensionApplyData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeExtensionApply; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeExtensionApplyService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import com.biutag.supervision.service.SupDepartService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 申请延期 + */ +@RequiredArgsConstructor +@Component +public class ApplyExtensionAction implements Action { + + private final NegativeService negativeService; + + private final NegativeExtensionApplyService extensionApplyService; + + private final NegativeWorkService workService; + + private final SupDepartService departService; + + @Override + public void next(ActionDto actionDto) { + ExtensionApplyData extensionApplyData = BeanUtil.toBean(actionDto.getData(), ExtensionApplyData.class); + NegativeExtensionApply extensionApply = addExtensionApply(actionDto, extensionApplyData); + updateNegative(actionDto.getNegativeId(), extensionApply.getId()); + addWork(actionDto); + } + + public NegativeExtensionApply addExtensionApply(ActionDto actionDto, ExtensionApplyData applyExtensionData) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(actionDto.getWorkId()); + NegativeExtensionApply extensionApply = new NegativeExtensionApply() + .setNegativeId(actionDto.getNegativeId()) + .setComments(applyExtensionData.getComments()) + .setExtensionDays(applyExtensionData.getExtensionDays()) + .setHandlerDepartId(work.getDepartId()) + .setHandlerDepartName(work.getDepartName()) + .setHandlerUserName(user.getUserName()) + .setHandlerName(user.getNickName()) + .setCreateTime(LocalDateTime.now()); + extensionApplyService.save(extensionApply); + return extensionApply; + } + + public void updateNegative(String negativeId, Integer negativeExtensionApplyId) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getUpdTime, LocalDateTime.now()) + .set(Negative::getNegativeExtensionApplyId, negativeExtensionApplyId) + .set(Negative::getExtensionApplyFlag, false) + .eq(Negative::getId, negativeId)); + } + + public void addWork(ActionDto actionDto) { + NegativeWork currentWork = workService.getById(actionDto.getWorkId()); + Negative negative = negativeService.getById(actionDto.getNegativeId()); + String roleCode; + String departId; + String departName; + // 是否是二级机构办理 + if (negative.getIsSecondHandle()) { + roleCode = RoleCodeEnum.FIRST_ADMIN.getCode(); + departId = AppConstants.ROOT_DEPART_ID; + departName = AppConstants.ROOT_DEPART_NAME; + } else { + roleCode = RoleCodeEnum.SECOND_ADMIN.getCode(); + SupDepart parentDepart = departService.getParentDepart(currentWork.getDepartId()); + departId = parentDepart.getId(); + departName = parentDepart.getShortName(); + } + workService.remove(new LambdaQueryWrapper() + .eq(NegativeWork::getNegativeId, actionDto.getNegativeId()) + .eq(NegativeWork::getRoleCode, roleCode) + .eq(NegativeWork::getDepartId, departId)); + + NegativeWork work = new NegativeWork() + .setNegativeId(actionDto.getNegativeId()) + .setRoleCode(roleCode) + .setDepartId(departId) + .setDepartName(departName) + .setProblemSourcesCode(negative.getProblemSourcesCode()) + .setFlowKey(actionDto.getNextFlowKey()) + .setCreateTime(LocalDateTime.now()) + .setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.save(work); + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/flow/action/FirstApproveAction.java b/src/main/java/com/biutag/supervision/flow/action/FirstApproveAction.java new file mode 100644 index 0000000..cbef37c --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/FirstApproveAction.java @@ -0,0 +1,77 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.ApproveStateEnum; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.ApproveData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeApprove; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeApproveService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 市局审批通过 + */ +@RequiredArgsConstructor +@Component +public class FirstApproveAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + + private final NegativeApproveService approveService; + + + @Override + public void next(ActionDto actionDto) { + ApproveData approveData = BeanUtil.toBean(actionDto.getData(), ApproveData.class); + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey()); + updateApprove(actionDto.getNegativeId(), actionDto.getActionKey(), actionDto.getWorkId(), approveData.getComments()); + doneWork(actionDto.getWorkId()); + } + + public void updateNegative(String negativeId, String nextFlowKey) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getProcessingStatus, ProcessingStatusEnum.completed.name()) + .set(Negative::getCompleteDate, LocalDateTime.now()) + .set(Negative::getUpdTime, LocalDateTime.now()) + .eq(Negative::getId, negativeId)); + } + + public void updateApprove(String negativeId, String actionKey, Integer workId, String comments) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(workId); + approveService.update(new LambdaUpdateWrapper() + .set(NegativeApprove::getState, ApproveStateEnum.approved.name()) + .set(NegativeApprove::getComments, comments) + .set(NegativeApprove::getHandlerDepartId, work.getDepartId()) + .set(NegativeApprove::getHandlerDepartName, work.getDepartName()) + .set(NegativeApprove::getHandlerUserName, user.getUserName()) + .set(NegativeApprove::getHandlerName, user.getNickName()) + .set(NegativeApprove::getUpdateTime, LocalDateTime.now()) + .eq(NegativeApprove::getNegativeId, negativeId) + .eq(NegativeApprove::getActionKey, actionKey)); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .eq(NegativeWork::getId, workId)); + } + + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/flow/action/FirstApproveReturnAction.java b/src/main/java/com/biutag/supervision/flow/action/FirstApproveReturnAction.java new file mode 100644 index 0000000..6e4b102 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/FirstApproveReturnAction.java @@ -0,0 +1,89 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.*; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.ApproveData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeApprove; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeApproveService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 市局 退回整改 + */ +@RequiredArgsConstructor +@Component +public class FirstApproveReturnAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + + private final NegativeApproveService approveService; + + @Override + public void next(ActionDto actionDto) { + ApproveData approveData = BeanUtil.toBean(actionDto.getData(), ApproveData.class); + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey()); + addApprove(actionDto.getNegativeId(), approveData.getComments(), actionDto.getWorkId()); + doneWork(actionDto.getWorkId()); + addWork(actionDto.getNegativeId(), RoleCodeEnum.SECOND_ADMIN.getCode()); + } + + public void updateNegative(String negativeId, String nextFlowKey) { + Negative negative = negativeService.getById(negativeId); + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getUpdTime, LocalDateTime.now()) + // 当前处理对象 + .set(Negative::getCurrentProcessingObject, String.format("%s专班", negative.getHandleSecondDepartName())) + .eq(Negative::getId, negativeId)); + } + + public void addApprove(String negativeId, String comments, Integer workId) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(workId); + approveService.update(new LambdaUpdateWrapper() + .set(NegativeApprove::getState, ApproveStateEnum.rejected.name()) + .set(NegativeApprove::getComments, comments) + .set(NegativeApprove::getHandlerDepartId, work.getDepartId()) + .set(NegativeApprove::getHandlerDepartName, work.getDepartName()) + .set(NegativeApprove::getHandlerUserName, user.getUserName()) + .set(NegativeApprove::getHandlerName, user.getNickName()) + .set(NegativeApprove::getUpdateTime, LocalDateTime.now()) + .eq(NegativeApprove::getNegativeId, negativeId) + .eq(NegativeApprove::getActionKey, FlowActionEnum.FIRST_APPROVE.getKey())); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .eq(NegativeWork::getId, workId)); + } + + public void addWork(String negativeId, String roleCode) { + List works = workService.list(new LambdaQueryWrapper() + .eq(NegativeWork::getNegativeId, negativeId) + .eq(NegativeWork::getRoleCode, roleCode) + .orderByDesc(NegativeWork::getCreateTime)); + if (works.isEmpty()) { + throw new RuntimeException("数据异常,请联系管理员:无二级机构工作流程数据"); + } + works.get(0).setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.updateById(works.get(0)); + } +} diff --git a/src/main/java/com/biutag/supervision/flow/action/FirstDistributeAction.java b/src/main/java/com/biutag/supervision/flow/action/FirstDistributeAction.java new file mode 100644 index 0000000..2e0cefd --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/FirstDistributeAction.java @@ -0,0 +1,114 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.constants.enums.*; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.FirstDistributeData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import com.biutag.supervision.service.SupDepartService; +import jakarta.validation.Validator; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.validation.annotation.Validated; + +import java.time.LocalDateTime; + +/** + * 市局下发 + */ +@Validated +@RequiredArgsConstructor +@Component +public class FirstDistributeAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + + private final SupDepartService departService; + + private final Validator validator; + + @Override + public void next(ActionDto actionDto) { + FirstDistributeData firstDistributeData = BeanUtil.toBean(actionDto.getData(), FirstDistributeData.class); + validator.validate(firstDistributeData); + SupDepart depart = departService.getById(firstDistributeData.getDepartId()); + // 三级单位办理 + boolean thirdHandling = DepartLevelEnum.THREE.getValue().equals(depart.getLevel()); + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey(), firstDistributeData, thirdHandling); + doneWork(actionDto.getWorkId()); + + addWork(actionDto.getNegativeId(), + thirdHandling ? RoleCodeEnum.THREE_ADMIN.getCode() : RoleCodeEnum.SECOND_ADMIN.getCode(), + firstDistributeData.getDepartId(), firstDistributeData.getDepartName()); + } + + public void updateNegative(String negativeId, String nextFlowKey, @Validated FirstDistributeData distributeData, boolean thirdHandling) { + LocalDateTime now = LocalDateTime.now(); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .set(Negative::getHostLevel, distributeData.getHostLevel()) + .set(Negative::getTimeLimit, distributeData.getTimeLimit()) + .set(Negative::getApprovalFlow, distributeData.getApprovalFlow()) + // 当前处理对象 + .set(Negative::getCurrentProcessingObject, String.format("%s专班", distributeData.getDepartName())) + .set(Negative::getFirstDistributeTime, now) + .set(Negative::getUpdTime, now) + .eq(Negative::getId, negativeId); + if (TimeLimitEnum.OTHER.getValue().equals(distributeData.getTimeLimit())) { + updateWrapper.set(Negative::getMaxSignDuration, distributeData.getMaxSignDuration()) + .set(Negative::getMaxHandleDuration, distributeData.getMaxHandleDuration()) + .set(Negative::getMaxExtensionDuration, distributeData.getMaxExtensionDuration()); + } else { + TimeLimitEnum timeLimitEnum = TimeLimitEnum.get(distributeData.getTimeLimit()); + updateWrapper.set(Negative::getMaxSignDuration, timeLimitEnum.getMaxSignDuration()) + .set(Negative::getMaxHandleDuration, timeLimitEnum.getMaxHandleDuration()) + .set(Negative::getMaxExtensionDuration, timeLimitEnum.getMaxExtensionDuration()); + } + if (thirdHandling) { + SupDepart parentDepart = departService.getParentDepart(distributeData.getDepartId()); + updateWrapper.set(Negative::getFlowKey, FlowNodeEnum.THREE_SIGN.getKey()) + .set(Negative::getHandleSecondDepartId, parentDepart.getId()) + .set(Negative::getHandleSecondDepartName, parentDepart.getShortName()) + .set(Negative::getHandleThreeDepartId, distributeData.getDepartId()) + .set(Negative::getHandleThreeDepartName, distributeData.getDepartName()); + } else { + updateWrapper.set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getHandleSecondDepartId, distributeData.getDepartId()) + .set(Negative::getHandleSecondDepartName, distributeData.getDepartName()); + } + negativeService.update(updateWrapper); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .eq(NegativeWork::getId, workId)); + } + + public void addWork(String negativeId, String roleCode, String departId, String departName) { + workService.remove(new LambdaQueryWrapper() + .eq(NegativeWork::getNegativeId, negativeId) + .eq(NegativeWork::getRoleCode, roleCode) + .eq(NegativeWork::getDepartId, departId)); + Negative negative = negativeService.getById(negativeId); + NegativeWork work = new NegativeWork() + .setNegativeId(negativeId) + .setRoleCode(roleCode) + .setDepartId(departId) + .setDepartName(departName) + .setProblemSourcesCode(negative.getProblemSourcesCode()) + .setCreateTime(LocalDateTime.now()) + .setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.save(work); + } + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/FirstExtensionApproveAction.java b/src/main/java/com/biutag/supervision/flow/action/FirstExtensionApproveAction.java new file mode 100644 index 0000000..62b1151 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/FirstExtensionApproveAction.java @@ -0,0 +1,82 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.NumberUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.ApproveStateEnum; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.ApproveData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeExtensionApply; +import com.biutag.supervision.pojo.entity.NegativeExtensionApprove; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeExtensionApplyService; +import com.biutag.supervision.service.NegativeExtensionApproveService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 市局申请延期审批通过 + */ +@RequiredArgsConstructor +@Component +public class FirstExtensionApproveAction implements Action { + + private final NegativeService negativeService; + + private final NegativeExtensionApplyService extensionApplyService; + + private final NegativeExtensionApproveService extensionApproveService; + + private final NegativeWorkService workService; + + + @Override + public void next(ActionDto actionDto) { + ApproveData approveData = BeanUtil.toBean(actionDto.getData(), ApproveData.class); + Negative negative = negativeService.getById(actionDto.getNegativeId()); + updateNegative(negative); + addExtensionApprove(actionDto, approveData.getComments(), negative.getNegativeExtensionApplyId()); + doneWork(actionDto.getWorkId()); + } + + public void updateNegative(Negative negative) { + NegativeExtensionApply extensionApply = extensionApplyService.getById(negative.getNegativeExtensionApplyId()); + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getExtensionApplyFlag, true) + // 延期天数 + .set(Negative::getExtensionDays, NumberUtil.nullToZero(negative.getExtensionDays()) + extensionApply.getExtensionDays()) + .eq(Negative::getId, negative.getId())); + } + + public void addExtensionApprove(ActionDto actionDto, String comments, Integer negativeExtensionApplyId) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(actionDto.getWorkId()); + NegativeExtensionApprove extensionApprove = new NegativeExtensionApprove() + .setNegativeId(actionDto.getNegativeId()) + .setNegativeExtensionApplyId(negativeExtensionApplyId) + .setComments(comments) + .setHandlerDepartId(work.getDepartId()) + .setHandlerDepartName(work.getDepartName()) + .setHandlerUserName(user.getUserName()) + .setHandlerName(user.getNickName()) + .setState(ApproveStateEnum.approved.name()) + .setCreateTime(LocalDateTime.now()); + extensionApproveService.save(extensionApprove); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper().set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .set(NegativeWork::getFlowKey, null) + .eq(NegativeWork::getId, workId)); + } + + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/flow/action/FirstExtensionReturnAction.java b/src/main/java/com/biutag/supervision/flow/action/FirstExtensionReturnAction.java new file mode 100644 index 0000000..0ecbce5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/FirstExtensionReturnAction.java @@ -0,0 +1,70 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.ApproveStateEnum; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.ApproveData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeExtensionApprove; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeExtensionApproveService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 市局申请延期审批驳回 + */ +@RequiredArgsConstructor +@Component +public class FirstExtensionReturnAction implements Action { + + private final NegativeService negativeService; + + private final NegativeExtensionApproveService extensionApproveService; + + private final NegativeWorkService workService; + + @Override + public void next(ActionDto actionDto) { + ApproveData approveData = BeanUtil.toBean(actionDto.getData(), ApproveData.class); + updateNegative(actionDto.getNegativeId()); + addExtensionApprove(actionDto, approveData.getComments()); + doneWork(actionDto.getWorkId()); + } + + public void updateNegative(String negativeId) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getExtensionApplyFlag, true) + .eq(Negative::getId, negativeId)); + } + + public void addExtensionApprove(ActionDto actionDto, String comments) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(actionDto.getWorkId()); + NegativeExtensionApprove extensionApprove = new NegativeExtensionApprove() + .setNegativeId(actionDto.getNegativeId()) + .setComments(comments) + .setHandlerDepartId(work.getDepartId()) + .setHandlerDepartName(work.getDepartName()) + .setHandlerUserName(user.getUserName()) + .setHandlerName(user.getNickName()) + .setState(ApproveStateEnum.rejected.name()) + .setCreateTime(LocalDateTime.now()); + extensionApproveService.save(extensionApprove); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper().set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .set(NegativeWork::getFlowKey, null) + .eq(NegativeWork::getId, workId)); + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/flow/action/SaveAction.java b/src/main/java/com/biutag/supervision/flow/action/SaveAction.java new file mode 100644 index 0000000..bf3ff7e --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/SaveAction.java @@ -0,0 +1,98 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.constants.enums.InspectCaseEnum; +import com.biutag.supervision.constants.enums.IsRectifyEnum; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.VerifyData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeBlame; +import com.biutag.supervision.pojo.entity.NegativeProblemRelation; +import com.biutag.supervision.service.NegativeBlameService; +import com.biutag.supervision.service.NegativeFileService; +import com.biutag.supervision.service.NegativeProblemRelationService; +import com.biutag.supervision.service.NegativeService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + * 核查办理-保存 + */ +@RequiredArgsConstructor +@Component +public class SaveAction implements Action { + + private final NegativeService negativeService; + + private final NegativeBlameService negativeBlameService; + + private final NegativeProblemRelationService negativeProblemRelationService; + + private final NegativeFileService fileService; + + @Override + public void next(ActionDto actionDto) { + VerifyData verifyData = BeanUtil.toBean(actionDto.getData(), VerifyData.class); + updateNegative(actionDto.getNegativeId(), verifyData); + } + + public void updateNegative(String negativeId, VerifyData verifyData) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(Negative::getId, negativeId) + .set(Negative::getUpdTime, LocalDateTime.now()) + .set(Negative::getCheckStatusDesc, verifyData.getCheckStatusDesc()) + .set(Negative::getCaseNumber, verifyData.getCaseNumber()) + .set(Negative::getCheckStatus, verifyData.getCheckStatus()) + .set(Negative::getCheckStatusName, verifyData.getCheckStatusName()); + // 核查情况是否属实 + if (InspectCaseEnum.isItTure(verifyData.getCheckStatus())) { + updateWrapper.set(Negative::getIsRectifyCode, verifyData.getIsRectifyCode()) + .set(Negative::getIsRectifyName, verifyData.getIsRectifyName()) + .set(Negative::getAccountabilityTarget, verifyData.getAccountabilityTarget()); + // 未整改 + if (IsRectifyEnum.NOT.getValue().equals(verifyData.getIsRectifyCode())) { + updateWrapper.set(Negative::getRectifyRestrictionDays, verifyData.getRectifyRestrictionDays()); + } + } + negativeService.update(updateWrapper); + + if (!verifyData.getBlames().isEmpty()) { + negativeBlameService.remove(negativeId); + List problemRelations = new ArrayList<>(); + List negativeBlames = verifyData.getBlames().stream().map(item -> { + NegativeBlame negativeBlame = new NegativeBlame(); + BeanUtil.copyProperties(item, negativeBlame); + negativeBlame.setNegativeId(negativeId) + .setBlameId(IdUtil.fastSimpleUUID()) + .setCrtTime(LocalDateTime.now()) + .setUpdTime(LocalDateTime.now()); + problemRelations.addAll(item.getProblems().stream().map(problem -> { + NegativeProblemRelation problemRelation = new NegativeProblemRelation(); + BeanUtil.copyProperties(problem, problemRelation); + problemRelation.setId(IdUtil.fastSimpleUUID()); + problemRelation.setBlameId(negativeBlame.getBlameId()); + problemRelation.setNegativeId(negativeId); + return problemRelation; + }).toList()); + return negativeBlame; + }).toList(); + // 新增涉及人员 + negativeBlameService.saveBatch(negativeBlames); + // 新增涉及人员问题类型 + if (!problemRelations.isEmpty()) { + negativeProblemRelationService.remove(negativeId); + negativeProblemRelationService.saveBatch(problemRelations); + } + } + fileService.remove(negativeId); + fileService.saveBatch(verifyData.getFiles(), negativeId); + } + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/SecondApproveAction.java b/src/main/java/com/biutag/supervision/flow/action/SecondApproveAction.java new file mode 100644 index 0000000..c6d2260 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/SecondApproveAction.java @@ -0,0 +1,104 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.*; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.ApproveData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeApprove; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeApproveService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 二级机构审批通过 + */ +@RequiredArgsConstructor +@Component +public class SecondApproveAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + + private final NegativeApproveService approveService; + + @Override + public void next(ActionDto actionDto) { + ApproveData approveData = BeanUtil.toBean(actionDto.getData(), ApproveData.class); + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey()); + updateApprove(actionDto.getNegativeId(), actionDto.getActionKey(), approveData.getComments(), actionDto.getWorkId()); + doneWork(actionDto.getWorkId()); + Negative negative = negativeService.getById(actionDto.getNegativeId()); + if (ApprovalFlowEnum.THREE_APPROVAL.getValue().equals(negative.getApprovalFlow())) { + addWork(actionDto.getNegativeId(), RoleCodeEnum.FIRST_ADMIN.getCode()); + } + } + + public void updateNegative(String negativeId, String nextFlowKey) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getUpdTime, LocalDateTime.now()) + .eq(Negative::getId, negativeId); + Negative negative = negativeService.getById(negativeId); + if (ApprovalFlowEnum.SECOND_APPROVAL.getValue().equals(negative.getApprovalFlow())) { + updateWrapper.set(Negative::getFlowKey, FlowNodeEnum.COMPLETED.getKey()) + .set(Negative::getProcessingStatus, ProcessingStatusEnum.completed.name()) + .set(Negative::getCompleteDate, LocalDateTime.now()); + } else { + updateWrapper.set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getCurrentProcessingObject, "市局专班"); + } + negativeService.update(updateWrapper); + } + + public void updateApprove(String negativeId, String actionKey, String comments, Integer workId) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(workId); + approveService.update(new LambdaUpdateWrapper() + .set(NegativeApprove::getState, ApproveStateEnum.approved.name()) + .set(NegativeApprove::getComments, comments) + .set(NegativeApprove::getHandlerDepartId, work.getDepartId()) + .set(NegativeApprove::getHandlerDepartName, work.getDepartName()) + .set(NegativeApprove::getHandlerUserName, user.getUserName()) + .set(NegativeApprove::getHandlerName, user.getNickName()) + .set(NegativeApprove::getUpdateTime, LocalDateTime.now()) + .eq(NegativeApprove::getNegativeId, negativeId) + .eq(NegativeApprove::getActionKey, actionKey)); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .eq(NegativeWork::getId, workId)); + } + + public void addWork(String negativeId, String roleCode) { + workService.remove(new LambdaQueryWrapper() + .eq(NegativeWork::getNegativeId, negativeId) + .eq(NegativeWork::getRoleCode, roleCode) + .eq(NegativeWork::getDepartId, AppConstants.ROOT_DEPART_ID)); + Negative negative = negativeService.getById(negativeId); + NegativeWork work = new NegativeWork() + .setNegativeId(negativeId) + .setRoleCode(roleCode) + .setDepartId(AppConstants.ROOT_DEPART_ID) + .setProblemSourcesCode(negative.getProblemSourcesCode()) + .setCreateTime(LocalDateTime.now()) + .setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.save(work); + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/flow/action/SecondApproveReturnAction.java b/src/main/java/com/biutag/supervision/flow/action/SecondApproveReturnAction.java new file mode 100644 index 0000000..cd7afeb --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/SecondApproveReturnAction.java @@ -0,0 +1,92 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.*; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.ApproveData; +import com.biutag.supervision.pojo.entity.FlowAction; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeApprove; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeApproveService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 二级机构 退回整改 + */ +@RequiredArgsConstructor +@Component +public class SecondApproveReturnAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + + private final NegativeApproveService approveService; + + @Override + public void next(ActionDto actionDto) { + ApproveData approveData = BeanUtil.toBean(actionDto.getData(), ApproveData.class); + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey()); + updateApprove(actionDto.getNegativeId(), approveData.getComments(), actionDto.getWorkId()); + doneWork(actionDto.getWorkId()); + addWork(actionDto.getNegativeId(), RoleCodeEnum.THREE_ADMIN.getCode()); + } + + public void updateNegative(String negativeId, String nextFlowKey) { + Negative negative = negativeService.getById(negativeId); + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getUpdTime, LocalDateTime.now()) + .set(Negative::getProcessingStatus, ProcessingStatusEnum.processing.name()) + // 当前处理对象 + .set(Negative::getCurrentProcessingObject, String.format("%s专班", negative.getHandleThreeDepartName())) + .eq(Negative::getId, negativeId)); + } + + public void updateApprove(String negativeId, String comments, Integer workId) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(workId); + approveService.update(new LambdaUpdateWrapper() + .set(NegativeApprove::getState, ApproveStateEnum.rejected.name()) + .set(NegativeApprove::getComments, comments) + .set(NegativeApprove::getHandlerDepartId, work.getDepartId()) + .set(NegativeApprove::getHandlerDepartName, work.getDepartName()) + .set(NegativeApprove::getHandlerUserName, user.getUserName()) + .set(NegativeApprove::getHandlerName, user.getNickName()) + .set(NegativeApprove::getUpdateTime, LocalDateTime.now()) + .eq(NegativeApprove::getNegativeId, negativeId) + .eq(NegativeApprove::getActionKey, FlowActionEnum.SECOND_APPROVE.getKey())); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .eq(NegativeWork::getId, workId)); + } + + public void addWork(String negativeId, String roleCode) { + List works = workService.list(new LambdaQueryWrapper() + .eq(NegativeWork::getNegativeId, negativeId) + .eq(NegativeWork::getRoleCode, roleCode) + .orderByDesc(NegativeWork::getCreateTime)); + if (works.isEmpty()) { + throw new RuntimeException("数据异常,请联系管理员:无三级机构工作流程数据"); + } + works.get(0).setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.updateById(works.get(0)); + } + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/SecondDistributeAction.java b/src/main/java/com/biutag/supervision/flow/action/SecondDistributeAction.java new file mode 100644 index 0000000..bb98ba3 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/SecondDistributeAction.java @@ -0,0 +1,76 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.FirstDistributeData; +import com.biutag.supervision.pojo.dto.flow.SecondDistributeData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 二级机构下发 + */ +@RequiredArgsConstructor +@Component +public class SecondDistributeAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + + @Override + public void next(ActionDto actionDto) { + SecondDistributeData secondDistributeData = BeanUtil.toBean(actionDto.getData(), SecondDistributeData.class); + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey(), secondDistributeData); + doneWork(actionDto.getWorkId()); + addWork(actionDto.getNegativeId(), RoleCodeEnum.THREE_ADMIN.getCode(), secondDistributeData.getDepartId(), secondDistributeData.getDepartName()); + } + + public void updateNegative(String negativeId, String nextFlowKey, SecondDistributeData secondDistributeData) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getHandleThreeDepartId, secondDistributeData.getDepartId()) + .set(Negative::getHandleThreeDepartName, secondDistributeData.getDepartName()) + .set(Negative::getUpdTime, LocalDateTime.now()) + .set(Negative::getUpdTime, LocalDateTime.now()) + // 当前处理对象 + .set(Negative::getCurrentProcessingObject, String.format("%s专班", secondDistributeData.getDepartName())) + .eq(Negative::getId, negativeId)); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .eq(NegativeWork::getId, workId)); + } + + public void addWork(String negativeId, String roleCode, String departId, String departName) { + workService.remove(new LambdaQueryWrapper() + .eq(NegativeWork::getNegativeId, negativeId) + .eq(NegativeWork::getRoleCode, roleCode) + .eq(NegativeWork::getDepartId, departId)); + Negative negative = negativeService.getById(negativeId); + NegativeWork work = new NegativeWork() + .setNegativeId(negativeId) + .setRoleCode(roleCode) + .setDepartId(departId) + .setDepartName(departName) + .setProblemSourcesCode(negative.getProblemSourcesCode()) + .setCreateTime(LocalDateTime.now()) + .setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.save(work); + } + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/SecondExtensionApproveAction.java b/src/main/java/com/biutag/supervision/flow/action/SecondExtensionApproveAction.java new file mode 100644 index 0000000..3405931 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/SecondExtensionApproveAction.java @@ -0,0 +1,88 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.ApproveStateEnum; +import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.ApproveData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeExtensionApprove; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeExtensionApproveService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 二级机构申请延期审批通过 + */ +@RequiredArgsConstructor +@Component +public class SecondExtensionApproveAction implements Action { + + private final NegativeService negativeService; + + private final NegativeExtensionApproveService extensionApproveService; + + private final NegativeWorkService workService; + + @Override + public void next(ActionDto actionDto) { + ApproveData approveData = BeanUtil.toBean(actionDto.getData(), ApproveData.class); + addExtensionApprove(actionDto, approveData.getComments()); + doneWork(actionDto.getWorkId()); + addWork(actionDto, RoleCodeEnum.FIRST_ADMIN.getCode(), actionDto.getNextFlowKey()); + } + + public void addExtensionApprove(ActionDto actionDto, String comments) { + Negative negative = negativeService.getById(actionDto.getNegativeId()); + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(actionDto.getWorkId()); + NegativeExtensionApprove extensionApprove = new NegativeExtensionApprove() + .setNegativeId(actionDto.getNegativeId()) + .setNegativeExtensionApplyId(negative.getNegativeExtensionApplyId()) + .setComments(comments) + .setHandlerDepartId(work.getDepartId()) + .setHandlerDepartName(work.getDepartName()) + .setHandlerUserName(user.getUserName()) + .setHandlerName(user.getNickName()) + .setState(ApproveStateEnum.approved.name()) + .setCreateTime(LocalDateTime.now()); + extensionApproveService.save(extensionApprove); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper().set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .set(NegativeWork::getFlowKey, null) + .eq(NegativeWork::getId, workId)); + } + public void addWork(ActionDto actionDto, String roleCode, String nextFlowKey) { + workService.remove(new LambdaQueryWrapper() + .eq(NegativeWork::getNegativeId, actionDto.getNegativeId()) + .eq(NegativeWork::getRoleCode, roleCode) + .eq(NegativeWork::getDepartId, AppConstants.ROOT_DEPART_ID)); + Negative negative = negativeService.getById(actionDto.getNegativeId()); + NegativeWork work = new NegativeWork() + .setNegativeId(actionDto.getNegativeId()) + .setRoleCode(roleCode) + .setFlowKey(actionDto.getNextFlowKey()) + .setDepartId(AppConstants.ROOT_DEPART_ID) + .setDepartName(AppConstants.ROOT_DEPART_NAME) + .setProblemSourcesCode(negative.getProblemSourcesCode()) + .setFlowKey(nextFlowKey) + .setCreateTime(LocalDateTime.now()) + .setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.save(work); + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/flow/action/SecondExtensionReturnAction.java b/src/main/java/com/biutag/supervision/flow/action/SecondExtensionReturnAction.java new file mode 100644 index 0000000..8f32dae --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/SecondExtensionReturnAction.java @@ -0,0 +1,70 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.ApproveStateEnum; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.ApproveData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeExtensionApprove; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeExtensionApproveService; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 二级机构申请延期审批驳回 + */ +@RequiredArgsConstructor +@Component +public class SecondExtensionReturnAction implements Action { + + private final NegativeService negativeService; + + private final NegativeExtensionApproveService extensionApproveService; + + private final NegativeWorkService workService; + + @Override + public void next(ActionDto actionDto) { + ApproveData approveData = BeanUtil.toBean(actionDto.getData(), ApproveData.class); + updateNegative(actionDto.getNegativeId()); + addExtensionApprove(actionDto, approveData.getComments()); + doneWork(actionDto.getWorkId()); + } + + public void updateNegative(String negativeId) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getExtensionApplyFlag, true) + .eq(Negative::getId, negativeId)); + } + + public void addExtensionApprove(ActionDto actionDto, String comments) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(actionDto.getWorkId()); + NegativeExtensionApprove extensionApprove = new NegativeExtensionApprove() + .setNegativeId(actionDto.getNegativeId()) + .setComments(comments) + .setHandlerDepartId(work.getDepartId()) + .setHandlerDepartName(work.getDepartName()) + .setHandlerUserName(user.getUserName()) + .setHandlerName(user.getNickName()) + .setState(ApproveStateEnum.rejected.name()) + .setCreateTime(LocalDateTime.now()); + extensionApproveService.save(extensionApprove); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper().set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .set(NegativeWork::getFlowKey, null) + .eq(NegativeWork::getId, workId)); + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/flow/action/SecondLocalProcessingAction.java b/src/main/java/com/biutag/supervision/flow/action/SecondLocalProcessingAction.java new file mode 100644 index 0000000..6ecb619 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/SecondLocalProcessingAction.java @@ -0,0 +1,31 @@ +package com.biutag.supervision.flow.action; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.service.NegativeService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +@RequiredArgsConstructor +@Component +public class SecondLocalProcessingAction implements Action { + + private final NegativeService negativeService; + + @Override + public void next(ActionDto actionDto) { + updateNegative(actionDto); + } + + public void updateNegative(ActionDto actionDto) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getFlowKey, actionDto.getNextFlowKey()) + .set(Negative::getIsSecondHandle, true) + .set(Negative::getUpdTime, LocalDateTime.now()) + .eq(Negative::getId, actionDto.getNegativeId())); + } + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/SecondSignAction.java b/src/main/java/com/biutag/supervision/flow/action/SecondSignAction.java new file mode 100644 index 0000000..0468684 --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/SecondSignAction.java @@ -0,0 +1,45 @@ +package com.biutag.supervision.flow.action; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 二级机构签收 + */ +@RequiredArgsConstructor +@Component +public class SecondSignAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + @Override + public void next(ActionDto actionDto) { + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey()); + updateWork(actionDto.getWorkId()); + } + + public void updateNegative(String negativeId, String nextFlowKey) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getUpdTime, LocalDateTime.now()) + + .eq(Negative::getId, negativeId)); + } + + public void updateWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .eq(NegativeWork::getId, workId)); + } + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/SecondSignReturnAction.java b/src/main/java/com/biutag/supervision/flow/action/SecondSignReturnAction.java new file mode 100644 index 0000000..44d5e4b --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/SecondSignReturnAction.java @@ -0,0 +1,83 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.SignReturnData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeSignReturn; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeSignReturnService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 二级机构问题退回 + */ +@RequiredArgsConstructor +@Component +public class SecondSignReturnAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + + private final NegativeSignReturnService signReturnService; + + @Override + public void next(ActionDto actionDto) { + SignReturnData signReturnData = BeanUtil.toBean(actionDto.getData(), SignReturnData.class); + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey()); + addSignReturn(actionDto, signReturnData.getComments()); + doneWork(actionDto.getWorkId()); + addWork(actionDto.getNegativeId(), RoleCodeEnum.FIRST_ADMIN.getCode()); + } + + public void updateNegative(String negativeId, String nextFlowKey) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getUpdTime, LocalDateTime.now()) + // 当前处理对象 + .set(Negative::getCurrentProcessingObject, "市局专班") + .eq(Negative::getId, negativeId)); + } + + public void addSignReturn(ActionDto actionDto, String comments) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(actionDto.getWorkId()); + NegativeSignReturn signReturn = new NegativeSignReturn() + .setNegativeId(actionDto.getNegativeId()) + .setActionKey(actionDto.getActionKey()) + .setComments(comments) + .setHandlerDepartId(work.getDepartId()) + .setHandlerDepartName(work.getDepartName()) + .setHandlerUserName(user.getUserName()) + .setHandlerName(user.getNickName()) + .setCreateTime(LocalDateTime.now()); + signReturnService.save(signReturn); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .eq(NegativeWork::getId, workId)); + } + + public void addWork(String negativeId, String roleCode) { + NegativeWork work = workService.getOne(new LambdaQueryWrapper().eq(NegativeWork::getNegativeId, negativeId).eq(NegativeWork::getRoleCode, roleCode)); + work.setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.updateById(work); + } + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/ThreeSignAction.java b/src/main/java/com/biutag/supervision/flow/action/ThreeSignAction.java new file mode 100644 index 0000000..13f095c --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/ThreeSignAction.java @@ -0,0 +1,46 @@ +package com.biutag.supervision.flow.action; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.service.NegativeService; +import com.biutag.supervision.service.NegativeWorkService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 三级机构签收 + */ +@RequiredArgsConstructor +@Component +public class ThreeSignAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + + @Override + public void next(ActionDto actionDto) { + updateNegative(actionDto.getNegativeId(), actionDto.getNextFlowKey()); + updateWork(actionDto.getWorkId()); + } + + public void updateNegative(String negativeId, String nextFlowKey) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getFlowKey, nextFlowKey) + .set(Negative::getUpdTime, LocalDateTime.now()) + .set(Negative::getProcessingStatus, ProcessingStatusEnum.processing.name()) + .eq(Negative::getId, negativeId)); + } + + public void updateWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .eq(NegativeWork::getId, workId)); + } + +} diff --git a/src/main/java/com/biutag/supervision/flow/action/ThreeSignReturnAction.java b/src/main/java/com/biutag/supervision/flow/action/ThreeSignReturnAction.java new file mode 100644 index 0000000..459c0cf --- /dev/null +++ b/src/main/java/com/biutag/supervision/flow/action/ThreeSignReturnAction.java @@ -0,0 +1,125 @@ +package com.biutag.supervision.flow.action; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.FlowNodeEnum; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; +import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.constants.enums.WorkStatusEnum; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.flow.SignReturnData; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.NegativeSignReturn; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.service.*; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.Objects; + +/** + * 三级机构问题退回 + */ +@RequiredArgsConstructor +@Component +public class ThreeSignReturnAction implements Action { + + private final NegativeService negativeService; + + private final NegativeWorkService workService; + + private final NegativeSignReturnService signReturnService; + + private final NegativeBlameService blameService; + + private final NegativeProblemRelationService problemRelationService; + + private final NegativeWorkService negativeWorkService; + + @Override + public void next(ActionDto actionDto) { + SignReturnData signReturnData = BeanUtil.toBean(actionDto.getData(), SignReturnData.class); + boolean secondFlag = negativeWorkService.exists(new LambdaQueryWrapper() + .eq(NegativeWork::getRoleCode, RoleCodeEnum.SECOND_ADMIN.getCode()) + .eq(NegativeWork::getNegativeId, actionDto.getNegativeId())); + updateNegative(actionDto.getNegativeId(), secondFlag); + addSignReturn(actionDto, signReturnData.getComments()); + doneWork(actionDto.getWorkId()); + addWork(actionDto.getNegativeId(), secondFlag); + } + + public void updateNegative(String negativeId, boolean secondFlag) { + Negative negative = negativeService.getById(negativeId); + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getFlowKey, secondFlag ? FlowNodeEnum.SECOND_SIGN.getKey() : FlowNodeEnum.FIRST_DISTRIBUTE.getKey()) + .set(Negative::getUpdTime, LocalDateTime.now()) + .set(Negative::getProcessingStatus, ProcessingStatusEnum.signing.name()) + // 当前处理对象 + .set(Negative::getCurrentProcessingObject, secondFlag ? String.format("%s专班", negative.getHandleSecondDepartName()) : "市局专班") + //----------------------------------------------------------------------------- + .set(Negative::getCheckStatus, null) + .set(Negative::getCheckStatusName, null) + .set(Negative::getIsRectifyCode, null) + .set(Negative::getIsRectifyName, null) + .set(Negative::getAccountabilityTarget, null) + .set(Negative::getRectifyRestrictionDays, null) + .eq(Negative::getId, negativeId)); + // 删除涉及人员 + blameService.remove(negativeId); + // 删除涉及人员问题类型 + problemRelationService.remove(negativeId); + } + + public void addSignReturn(ActionDto actionDto, String comments) { + UserAuth user = UserContextHolder.getCurrentUser(); + NegativeWork work = workService.getById(actionDto.getWorkId()); + NegativeSignReturn signReturn = new NegativeSignReturn() + .setNegativeId(actionDto.getNegativeId()) + .setActionKey(actionDto.getActionKey()) + .setComments(comments) + .setHandlerDepartId(work.getDepartId()) + .setHandlerDepartName(work.getDepartName()) + .setHandlerUserName(user.getUserName()) + .setHandlerName(user.getNickName()) + .setCreateTime(LocalDateTime.now()); + signReturnService.save(signReturn); + } + + public void doneWork(Integer workId) { + workService.update(new LambdaUpdateWrapper() + .set(NegativeWork::getStatus, WorkStatusEnum.done.name()) + .set(NegativeWork::getUpdateTime, LocalDateTime.now()) + .eq(NegativeWork::getId, workId)); + } + + public void addWork(String negativeId, boolean secondFlag) { + String roleCode = secondFlag ? RoleCodeEnum.SECOND_ADMIN.getCode() : RoleCodeEnum.FIRST_ADMIN.getCode(); + NegativeWork work = workService.getOne(new LambdaQueryWrapper() + .eq(NegativeWork::getNegativeId, negativeId) + .eq(NegativeWork::getRoleCode, roleCode)); + if (Objects.nonNull(work)) { + work.setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.updateById(work); + } else { + Negative negative = negativeService.getById(negativeId); + work = new NegativeWork() + .setNegativeId(negativeId) + .setRoleCode(roleCode) + .setDepartId(secondFlag ? negative.getHandleSecondDepartId() : AppConstants.ROOT_DEPART_ID) + .setDepartName(secondFlag ? negative.getHandleSecondDepartName() : AppConstants.ROOT_DEPART_NAME) + .setProblemSourcesCode(negative.getProblemSourcesCode()) + .setCreateTime(LocalDateTime.now()) + .setUpdateTime(LocalDateTime.now()) + .setStatus(WorkStatusEnum.todo.name()); + workService.save(work); + } + + } + +} diff --git a/src/main/java/com/biutag/supervision/job/Job.java b/src/main/java/com/biutag/supervision/job/Job.java new file mode 100644 index 0000000..f4a8816 --- /dev/null +++ b/src/main/java/com/biutag/supervision/job/Job.java @@ -0,0 +1,98 @@ +package com.biutag.supervision.job; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.service.*; +import com.biutag.supervision.util.TimeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@RequiredArgsConstructor +@Component +public class Job { + + private final NegativeService negativeService; + + private final SupDepartService departService; + + private final BusinessPoliceService businessPoliceService; + + private final BusinessDepartService businessDepartService; + + private final ModelClueService modelClueService; + + // 10分钟 + // 更新流程状态 + @Scheduled(fixedRate = 600000) + public void updateNegativeProcessingStatus() { + List list = negativeService.list(new LambdaQueryWrapper().isNull(Negative::getProcessingStatus).isNotNull(Negative::getCheckStatus)); + list.forEach(item -> { + negativeService.update(new LambdaUpdateWrapper().set(Negative::getProcessingStatus, ProcessingStatusEnum.completed).eq(Negative::getId, item.getId())); + }); + } + + // 更新办理单位 + @Scheduled(fixedRate = 600000) + public void updateHandleDepart() { + List list = negativeService.list(new LambdaQueryWrapper() + .isNotNull(Negative::getInvolveDepartId) + .isNull(Negative::getHandleThreeDepartId) + .isNull(Negative::getFlowKey)); + list.forEach(item -> { + SupDepart depart = departService.getById(item.getInvolveDepartId()); + if (depart.getLevel() == 3) { + SupDepart parent = departService.getById(depart.getPid()); + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getHandleThreeDepartId, depart.getId()) + .set(Negative::getHandleThreeDepartName, depart.getShortName()) + .set(Negative::getHandleSecondDepartId, parent.getId()) + .set(Negative::getHandleSecondDepartName, parent.getShortName()) + .eq(Negative::getId, item.getId())); + } + }); + } + + // 更新办理超时 +// @Scheduled(fixedRate = 600000) + public void updateHandleTimeout() { + List list = negativeService.list(new LambdaQueryWrapper() + .isNotNull(Negative::getCompleteDate) + .isNotNull(Negative::getCrtTime) + .isNull(Negative::getFlowKey)); + list.forEach(item -> { + long remainingDuration = TimeUtil.getRemainingDuration(item.getCrtTime(), item.getCompleteDate(), 3 * 24 * 60 * 60L); + if (remainingDuration < 0) { + negativeService.update(new LambdaUpdateWrapper() + .set(Negative::getHandleTimeout, -remainingDuration) + .eq(Negative::getId, item.getId())); + } + }); + } + + // 每日04:00更新基础数据 +// @Scheduled(cron = "0 0 4 * * ?") + public void updateBaseData() { + List happenTime = new ArrayList<>(); + Date start = Date.from(LocalDateTime.now().minusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0).atZone(ZoneId.systemDefault()).toInstant()); + Date end = Date.from(LocalDateTime.now().minusDays(1).withHour(23).withMinute(59).withSecond(59).withNano(0).atZone(ZoneId.systemDefault()).toInstant()); + happenTime.add(start); + happenTime.add(end); + businessDepartService.generate(happenTime); + businessPoliceService.generate(happenTime); + } + +// @Scheduled(cron = "0 0 5 * * ?") + public void executeModel() { + modelClueService.generate(1); + } +} diff --git a/src/main/java/com/biutag/supervision/mapper/BaseAccountMapper.java b/src/main/java/com/biutag/supervision/mapper/BaseAccountMapper.java new file mode 100644 index 0000000..5e9a799 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/BaseAccountMapper.java @@ -0,0 +1,14 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.BaseAccount; +import org.apache.ibatis.annotations.Select; + +@DS("slave") +public interface BaseAccountMapper extends BaseMapper { + + @Select("select a.* from base_account a left join negative.sup_police p on a.account = p.id_code where a.account = #{account} or p.emp_no = #{account}") + BaseAccount selectByLogin(String account); + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/BaseRoleMapper.java b/src/main/java/com/biutag/supervision/mapper/BaseRoleMapper.java new file mode 100644 index 0000000..5cfc9e1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/BaseRoleMapper.java @@ -0,0 +1,10 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.BaseRole; + +@DS("slave") +public interface BaseRoleMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/BaseRoleUserMapper.java b/src/main/java/com/biutag/supervision/mapper/BaseRoleUserMapper.java new file mode 100644 index 0000000..5b47d94 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/BaseRoleUserMapper.java @@ -0,0 +1,10 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.BaseRoleUser; + +@DS("slave") +public interface BaseRoleUserMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/BaseUserMapper.java b/src/main/java/com/biutag/supervision/mapper/BaseUserMapper.java new file mode 100644 index 0000000..d10cc13 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/BaseUserMapper.java @@ -0,0 +1,10 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.BaseUser; + +@DS("slave") +public interface BaseUserMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java b/src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java new file mode 100644 index 0000000..d0ac758 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java @@ -0,0 +1,14 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.entity.BusinessDepart; +import com.biutag.supervision.pojo.model.BusinessPoliceModel; +import org.apache.ibatis.annotations.Param; + +public interface BusinessDepartMapper extends BaseMapper { + Page queryPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/BusinessLogMapper.java b/src/main/java/com/biutag/supervision/mapper/BusinessLogMapper.java new file mode 100644 index 0000000..ed4e0f9 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/BusinessLogMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.BusinessLog; + +public interface BusinessLogMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/BusinessPoliceMapper.java b/src/main/java/com/biutag/supervision/mapper/BusinessPoliceMapper.java new file mode 100644 index 0000000..18aff6a --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/BusinessPoliceMapper.java @@ -0,0 +1,13 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.entity.BusinessPolice; +import com.biutag.supervision.pojo.model.BusinessPoliceModel; +import org.apache.ibatis.annotations.Param; + +public interface BusinessPoliceMapper extends BaseMapper { + Page queryPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java b/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java new file mode 100644 index 0000000..5c588bb --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java @@ -0,0 +1,24 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.dto.CaseVerifDepart; +import com.biutag.supervision.pojo.dto.common.PieItem; +import com.biutag.supervision.pojo.entity.DataCaseVerif; +import org.apache.ibatis.annotations.Select; + +import java.util.Date; +import java.util.List; + +public interface DataCaseVerifMapper extends BaseMapper { + + @Select("select d.id, d.short_name label, count(cv.originId) value from sup_depart d left join (select originId, second_depart_id from data_case_verif where discovery_time between #{beginTime} and #{endTime} ) cv " + + "on d.id = cv.second_depart_id where d.statistics_group_id = #{departGroupId} GROUP BY d.id, d.short_name order by value desc, d.order_no") + List selectDepartStatistic(Integer departGroupId, Date beginTime, Date endTime); + + @Select("select involve_problem name, count(originId) value from data_case_verif where business_type_name = #{businessTypeName} and discovery_time between #{beginTime} and #{endTime} group by involve_problem") + List selectInvolveProblemGroupByBusinessTypeName(String businessTypeName, Date beginTime, Date endTime); + + @Select("select problem_sources name, count(originId) value from data_case_verif where discovery_time between #{beginTime} and #{endTime} group by problem_sources") + List selectGroupByProblemSources(Date beginTime, Date endTime); + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/DataPetitionComplaintMapper.java b/src/main/java/com/biutag/supervision/mapper/DataPetitionComplaintMapper.java new file mode 100644 index 0000000..b45bd53 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/DataPetitionComplaintMapper.java @@ -0,0 +1,74 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.dto.CaseVerifDepart; +import com.biutag.supervision.pojo.entity.DataPetitionComplaint; +import org.apache.ibatis.annotations.Select; + +import java.util.Date; +import java.util.List; + +public interface DataPetitionComplaintMapper extends BaseMapper { + + + /** + * 查询初访重访 + * @param departId + * @param Repeat + * @param beginTime + * @param endTime + * @return + */ + @Select("SELECT sd.id, sd.short_name label,count(*) value " + + "FROM (SELECT * FROM data_petition_complaint dpc " + + "WHERE dpc.discovery_time BETWEEN #{beginTime} AND #{endTime}) as temp " + + "INNER JOIN sup_depart sd on sd.id=temp.second_depart_id " + + "WHERE sd.statistics_group_id=#{departId} and temp.initial_petition=#{Repeat} " + + "GROUP BY temp.second_depart_id " + + "ORDER BY value DESC") + List selectDepartStatistic(Integer departId, Integer Repeat, Date beginTime, Date endTime); + + /** + * 查询领导阅信接访 + * @param departId + * @param beginTime + * @param endTime + * @return + */ + @Select("SELECT sd.id, sd.short_name label,count(*) value " + + "FROM (SELECT * FROM data_petition_complaint dpc " + + "WHERE dpc.discovery_time BETWEEN #{beginTime} AND #{endTime}) as temp " + + "INNER JOIN sup_depart sd on sd.id=temp.second_depart_id " + + "WHERE sd.statistics_group_id=#{departId} and temp.receiving_leader_name is not null " + + "GROUP BY temp.second_depart_id " + + "ORDER BY value DESC") + List selectLeaderViewMail(Integer departId, Date beginTime, Date endTime); + + + /** + * 缠访闹访县局排行 + * @param id + * @param isEntanglement + * @param beginTime + * @param endTime + * @return + */ + @Select("SELECT sd.id, sd.short_name label,count(*) value " + + "FROM (SELECT * FROM data_petition_complaint dpc " + + "WHERE dpc.discovery_time BETWEEN #{beginTime} AND #{endTime}) as temp " + + "INNER JOIN sup_depart sd on sd.id=temp.second_depart_id " + + "WHERE sd.statistics_group_id=#{id} AND entanglement_visits =#{isEntanglement} " + + "GROUP BY temp.second_depart_id " + + "ORDER BY value DESC") + List selectEntanglementMail(Integer id, int isEntanglement, Date beginTime, Date endTime); + + + @Select("SELECT sd.id, sd.short_name label,count(*) value " + + "FROM (SELECT * FROM data_petition_complaint dpc " + + "WHERE dpc.discovery_time BETWEEN #{beginTime} AND #{endTime}) as temp " + + "INNER JOIN sup_depart sd on sd.id=temp.second_depart_id " + + "WHERE sd.statistics_group_id=#{id} AND mass_visits =#{isMass} " + + "GROUP BY temp.second_depart_id " + + "ORDER BY value DESC") + List selectMassMail(Integer id, int isMass, Date beginTime, Date endTime); +} diff --git a/src/main/java/com/biutag/supervision/mapper/DataRightsComfortMapper.java b/src/main/java/com/biutag/supervision/mapper/DataRightsComfortMapper.java new file mode 100644 index 0000000..87f3812 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/DataRightsComfortMapper.java @@ -0,0 +1,7 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.DataRightsComfort; + +public interface DataRightsComfortMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervision/mapper/FlowActionMapper.java b/src/main/java/com/biutag/supervision/mapper/FlowActionMapper.java new file mode 100644 index 0000000..5e98c0d --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/FlowActionMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.FlowAction; + +public interface FlowActionMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/FlowNodeMapper.java b/src/main/java/com/biutag/supervision/mapper/FlowNodeMapper.java new file mode 100644 index 0000000..6e8c663 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/FlowNodeMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.FlowNode; + +public interface FlowNodeMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/GBaseAJJBXXMapper.java b/src/main/java/com/biutag/supervision/mapper/GBaseAJJBXXMapper.java new file mode 100644 index 0000000..fa6a29f --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/GBaseAJJBXXMapper.java @@ -0,0 +1,12 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.GBaseAJJBXX; +import org.apache.ibatis.annotations.Mapper; + +@DS("slave2") +@Mapper +public interface GBaseAJJBXXMapper extends BaseMapper { + +} diff --git a/src/main/java/com/biutag/supervision/mapper/GBaseCJDMapper.java b/src/main/java/com/biutag/supervision/mapper/GBaseCJDMapper.java new file mode 100644 index 0000000..515bc29 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/GBaseCJDMapper.java @@ -0,0 +1,17 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.biutag.supervision.pojo.entity.GBaseCJD; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@DS("slave2") +@Mapper +public interface GBaseCJDMapper extends BaseMapper { + List selectCJDList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); +} diff --git a/src/main/java/com/biutag/supervision/mapper/GBaseJJDMapper.java b/src/main/java/com/biutag/supervision/mapper/GBaseJJDMapper.java new file mode 100644 index 0000000..5eed9dd --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/GBaseJJDMapper.java @@ -0,0 +1,17 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.biutag.supervision.pojo.entity.GBaseJJD; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@DS("slave2") +@Mapper +public interface GBaseJJDMapper extends BaseMapper { + List selectJJDList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); +} diff --git a/src/main/java/com/biutag/supervision/mapper/HolidayMapper.java b/src/main/java/com/biutag/supervision/mapper/HolidayMapper.java new file mode 100644 index 0000000..e785112 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/HolidayMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.Holiday; + +public interface HolidayMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/MenuMapper.java b/src/main/java/com/biutag/supervision/mapper/MenuMapper.java new file mode 100644 index 0000000..e796e8f --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/MenuMapper.java @@ -0,0 +1,10 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.Menu; + +@DS("slave") +public interface MenuMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/ModelClassMapper.java b/src/main/java/com/biutag/supervision/mapper/ModelClassMapper.java new file mode 100644 index 0000000..8db59f1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/ModelClassMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.ModelClass; + +public interface ModelClassMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/ModelClueDataMapper.java b/src/main/java/com/biutag/supervision/mapper/ModelClueDataMapper.java new file mode 100644 index 0000000..3d1c1a1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/ModelClueDataMapper.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.ModelClue; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@DS("slave2") // 该注解勿动 +public interface ModelClueDataMapper extends BaseMapper { + + @Select("${sql}") + List selectDataByDynamicSql(@org.apache.ibatis.annotations.Param("sql") String sql); + + @Select("${newSql}") + List> selectByUniqueKeys(@org.apache.ibatis.annotations.Param("newSql") String newSql); + + @Select("SELECT XM, JH FROM dwd_ry_zfba_baryxx WHERE ZJ = #{barID}") + Map selectBAR(String barID); + +} diff --git a/src/main/java/com/biutag/supervision/mapper/ModelClueMapper.java b/src/main/java/com/biutag/supervision/mapper/ModelClueMapper.java new file mode 100644 index 0000000..1572155 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/ModelClueMapper.java @@ -0,0 +1,16 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.entity.ModelClue; +import com.biutag.supervision.pojo.model.ModelClueModel; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +public interface ModelClueMapper extends BaseMapper { + + Page queryPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/ModelClueRecordMapper.java b/src/main/java/com/biutag/supervision/mapper/ModelClueRecordMapper.java new file mode 100644 index 0000000..41c00b3 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/ModelClueRecordMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.ModelClueRecord; + +public interface ModelClueRecordMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/ModelClueTaskMapper.java b/src/main/java/com/biutag/supervision/mapper/ModelClueTaskMapper.java new file mode 100644 index 0000000..09f908e --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/ModelClueTaskMapper.java @@ -0,0 +1,22 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.entity.ModelClueTask; +import com.biutag.supervision.pojo.model.ModelClueTaskDepartModel; +import com.biutag.supervision.pojo.model.ModelClueTaskModel; +import com.biutag.supervision.pojo.model.NegativeWorkModel; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface ModelClueTaskMapper extends BaseMapper { + + Page queryPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + + List selectGroupByDepart(@Param("taskId") Integer taskId); + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/ModelMapper.java b/src/main/java/com/biutag/supervision/mapper/ModelMapper.java new file mode 100644 index 0000000..62ca945 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/ModelMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.Model; + +public interface ModelMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegDepartAuthorityMapper.java b/src/main/java/com/biutag/supervision/mapper/NegDepartAuthorityMapper.java new file mode 100644 index 0000000..f77f880 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegDepartAuthorityMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegDepartAuthority; + +public interface NegDepartAuthorityMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegSourceAuthorityMapper.java b/src/main/java/com/biutag/supervision/mapper/NegSourceAuthorityMapper.java new file mode 100644 index 0000000..d816996 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegSourceAuthorityMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegSourceAuthority; + +public interface NegSourceAuthorityMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeApproveMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeApproveMapper.java new file mode 100644 index 0000000..7a872b4 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeApproveMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeApprove; + +public interface NegativeApproveMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeBlameMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeBlameMapper.java new file mode 100644 index 0000000..7a60f0b --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeBlameMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeBlame; + +public interface NegativeBlameMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeExtensionApplyMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeExtensionApplyMapper.java new file mode 100644 index 0000000..40ba213 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeExtensionApplyMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeExtensionApply; + +public interface NegativeExtensionApplyMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeExtensionApproveMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeExtensionApproveMapper.java new file mode 100644 index 0000000..a6f3543 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeExtensionApproveMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeExtensionApprove; + +public interface NegativeExtensionApproveMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeFavMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeFavMapper.java new file mode 100644 index 0000000..21814da --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeFavMapper.java @@ -0,0 +1,16 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.entity.NegativeFav; +import com.biutag.supervision.pojo.model.NegativeFavModel; +import com.biutag.supervision.pojo.model.NegativeWorkModel; +import org.apache.ibatis.annotations.Param; + +public interface NegativeFavMapper extends BaseMapper { + + Page queryPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeFileMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeFileMapper.java new file mode 100644 index 0000000..47d9c46 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeFileMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeFile; + +public interface NegativeFileMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeHistoryMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeHistoryMapper.java new file mode 100644 index 0000000..cb377b0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeHistoryMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeHistory; + +public interface NegativeHistoryMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java new file mode 100644 index 0000000..1d000aa --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java @@ -0,0 +1,7 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.Negative; + +public interface NegativeMapper extends BaseMapper { +} diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeProblemRelationMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeProblemRelationMapper.java new file mode 100644 index 0000000..4b33425 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeProblemRelationMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeProblemRelation; + +public interface NegativeProblemRelationMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeSignReturnMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeSignReturnMapper.java new file mode 100644 index 0000000..b70badf --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeSignReturnMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeSignReturn; + +public interface NegativeSignReturnMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeTaskMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeTaskMapper.java new file mode 100644 index 0000000..3fd1ad8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeTaskMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeTask; + +public interface NegativeTaskMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeThingFileMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeThingFileMapper.java new file mode 100644 index 0000000..62dd4ce --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeThingFileMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.NegativeThingFile; + +public interface NegativeThingFileMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeWorkMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeWorkMapper.java new file mode 100644 index 0000000..bb879ee --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/NegativeWorkMapper.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.NegativeWorkModel; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface NegativeWorkMapper extends BaseMapper { + + Page queryPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/ProfileDepartMapper.java b/src/main/java/com/biutag/supervision/mapper/ProfileDepartMapper.java new file mode 100644 index 0000000..64c761e --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/ProfileDepartMapper.java @@ -0,0 +1,19 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.model.DepartNegativeModel; + +import java.util.Date; +import java.util.List; + +/** + * @author wxc + * @date 2024/11/1 + */ +public interface ProfileDepartMapper { + + Page queryDepartNegative(Page page, Date beginTime, Date endTime, String departName, String departId); + + int getNegativePoliceSize(List idCodes); + +} diff --git a/src/main/java/com/biutag/supervision/mapper/RoleMenuMapper.java b/src/main/java/com/biutag/supervision/mapper/RoleMenuMapper.java new file mode 100644 index 0000000..7938dc3 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/RoleMenuMapper.java @@ -0,0 +1,10 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.RoleMenu; + + +public interface RoleMenuMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/RpcApplyMapper.java b/src/main/java/com/biutag/supervision/mapper/RpcApplyMapper.java new file mode 100644 index 0000000..293a8e0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/RpcApplyMapper.java @@ -0,0 +1,37 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.dto.common.PieItem; +import com.biutag.supervision.pojo.entity.RpcApply; +import com.biutag.supervision.pojo.entity.RpcInfringerResult; +import org.apache.ibatis.annotations.Select; + +import java.util.Date; +import java.util.List; + +public interface RpcApplyMapper extends BaseMapper { + + @Select("SELECT COUNT(a.rpc_id) FROM rpc_apply_person a LEFT JOIN rpc_apply b ON a.rpc_id = b.rpc_id " + + "WHERE b.apply_date BETWEEN #{beginTime} AND #{endTime} AND b.type = 2") + Integer countComfortPersonNumber(Date beginTime, Date endTime); + + @Select("SELECT a.tort_name FROM rpc_infringer_result a LEFT JOIN rpc_apply b ON a.rpc_id = b.rpc_id " + + "WHERE b.apply_date BETWEEN #{beginTime} AND #{endTime} AND b.type = 2") + List getHitPeople(Date beginTime, Date endTime); + + @Select("SELECT SUM(a.provide_relief) FROM rpc_apply_person a LEFT JOIN rpc_apply b ON a.rpc_id = b.rpc_id " + + "WHERE b.apply_date BETWEEN #{beginTime} AND #{endTime} AND b.type = 2") + Double countComfortMoney(Date beginTime, Date endTime); + + @Select("select tort_name, defend_handle_way_name from rpc_infringer_result a LEFT JOIN rpc_apply b ON a.rpc_id = b.rpc_id " + + "WHERE b.apply_date BETWEEN #{beginTime} AND #{endTime} AND b.type = 2") + List selectPunishmentSituation(Date beginTime, Date endTime); + + @Select("SELECT c.job name, COUNT(c.job) value FROM sup_police c JOIN " + + "(SELECT a.emp_no FROM rpc_apply_person a LEFT JOIN rpc_apply b ON a.rpc_id = b.rpc_id " + + "WHERE b.apply_date BETWEEN #{beginTime} AND #{endTime} AND b.type = 2) d on c.emp_no = d.emp_no " + + "GROUP BY c.job") + List selectComfortSituation(Date beginTime, Date endTime); + + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/RpcApplyPersonMapper.java b/src/main/java/com/biutag/supervision/mapper/RpcApplyPersonMapper.java new file mode 100644 index 0000000..6f3d607 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/RpcApplyPersonMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.RpcApplyPerson; + +public interface RpcApplyPersonMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/RpcInfringerResultMapper.java b/src/main/java/com/biutag/supervision/mapper/RpcInfringerResultMapper.java new file mode 100644 index 0000000..f3ba7b0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/RpcInfringerResultMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.RpcInfringerResult; + +public interface RpcInfringerResultMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/StatisticsDepartMapper.java b/src/main/java/com/biutag/supervision/mapper/StatisticsDepartMapper.java new file mode 100644 index 0000000..a644031 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/StatisticsDepartMapper.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.StatisticsDepart; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +public interface StatisticsDepartMapper extends BaseMapper { + @Select("") + List> getGroupIdsByDepartIds(List departIds); +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java b/src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java new file mode 100644 index 0000000..f21f7f4 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.StatisticsGroup; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +public interface StatisticsGroupMapper extends BaseMapper { + @Select("") + List> getNameByGroupIds(List groupIds); +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/SupDepartMapper.java b/src/main/java/com/biutag/supervision/mapper/SupDepartMapper.java new file mode 100644 index 0000000..af017f0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/SupDepartMapper.java @@ -0,0 +1,33 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.SupDepart; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +public interface SupDepartMapper extends BaseMapper { + + @Select("select d.* from sup_depart d left join sup_depart_jwpy t on d.code = t.depart_code where t.code = #{departCode}") + SupDepart selectByJwpyCode(String departCode); + + @Select("select max(id) from sup_depart") + Integer getMaxId(); + + @Select("") + List> getIdsByDepartIds(List departIds); + + @Select("") + List> getIdsByCode(List departIds); +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/SupDictContentMapper.java b/src/main/java/com/biutag/supervision/mapper/SupDictContentMapper.java new file mode 100644 index 0000000..4df70ab --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/SupDictContentMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.SupDictProblemType; + +public interface SupDictContentMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/SupDictDataMapper.java b/src/main/java/com/biutag/supervision/mapper/SupDictDataMapper.java new file mode 100644 index 0000000..c0af7b1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/SupDictDataMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.SupDictData; + +public interface SupDictDataMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/SupDictProblemSourceMapper.java b/src/main/java/com/biutag/supervision/mapper/SupDictProblemSourceMapper.java new file mode 100644 index 0000000..835c3ca --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/SupDictProblemSourceMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.SupDictProblemSource; + +public interface SupDictProblemSourceMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/SupDictTypeMapper.java b/src/main/java/com/biutag/supervision/mapper/SupDictTypeMapper.java new file mode 100644 index 0000000..189ee81 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/SupDictTypeMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.SupDictType; + +public interface SupDictTypeMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/SupExternalDepartMapper.java b/src/main/java/com/biutag/supervision/mapper/SupExternalDepartMapper.java new file mode 100644 index 0000000..1ab38d0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/SupExternalDepartMapper.java @@ -0,0 +1,19 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.SupExternalDepart; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +public interface SupExternalDepartMapper extends BaseMapper { + + @Select("") + List> getIdsByDepartIds(List departIds); +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/SupPoliceMapper.java b/src/main/java/com/biutag/supervision/mapper/SupPoliceMapper.java new file mode 100644 index 0000000..780dec6 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/SupPoliceMapper.java @@ -0,0 +1,15 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.pojo.entity.SupPolice; +import com.biutag.supervision.pojo.model.PoliceModel; +import org.apache.ibatis.annotations.Param; + +public interface SupPoliceMapper extends BaseMapper { + + Page queryPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/mapper/UserMapper.java b/src/main/java/com/biutag/supervision/mapper/UserMapper.java new file mode 100644 index 0000000..401b933 --- /dev/null +++ b/src/main/java/com/biutag/supervision/mapper/UserMapper.java @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.User; + +public interface UserMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/Result.java b/src/main/java/com/biutag/supervision/pojo/Result.java new file mode 100644 index 0000000..f9f1ba4 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/Result.java @@ -0,0 +1,48 @@ +package com.biutag.supervision.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; +import org.springframework.http.HttpStatus; + +@Accessors(chain = true) +@Setter +@Getter +public class Result { + + @Schema(description = "状态码") + private int code; + + @Schema(description = "消息") + private String message; + + @Schema(description = "数据") + private T data; + + public Result(int code) { + this.code = code; + } + + public Result(int code, String message) { + this.code = code; + this.message = message; + } + + public static Result success() { + return new Result<>(HttpStatus.OK.value()); + } + + public static Result success(T data) { + return new Result(HttpStatus.OK.value()).setData(data); + } + + public static Result failed(String message) { + return new Result<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), message); + } + + public static Result failed(int code, String message) { + return new Result<>(code, message); + } + +} diff --git a/src/main/java/com/biutag/supervision/pojo/domain/Blame.java b/src/main/java/com/biutag/supervision/pojo/domain/Blame.java new file mode 100644 index 0000000..d301431 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/domain/Blame.java @@ -0,0 +1,180 @@ +package com.biutag.supervision.pojo.domain; + +import com.biutag.supervision.pojo.entity.NegativeProblemRelation; +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 Blame { + + private String blameId; + + private String negativeId; + + // 核实人员 + private String blameFlag; + + // 涉及人员 + private String involveFlag; + + // 涉及姓名 + private String blameName; + + // 涉及身份证 + private String blameIdCode; + + // 涉及警号 + private String blameEmpNo; + + // 涉及部门 + private String blameDepartId; + + // 涉及人部门名称 + private String blameDepartName; + + // 人员属性 + private String ivPersonType; + + // 人员属性 + private String ivPersonTypeCode; + + // 二级机构 + private String twoLevelDapartId; + + // 二级机构 + private String twoLevelDapartName; + + // 三级机构 + private String threeLevelDapartName; + + // 三级机构 + private String threeLevelDapart; + + // 警种 + private String policeTypeName; + + // 警种 + private String policeTypeCode; + + // 核查情况code + private String inspectCaseCode; + + // 核查情况 + private String inspectCaseName; + + // 督察措施 + private String superviseMeasuresCode; + + // 督察措施 + private String superviseMeasuresName; + + // 主观方面 + private String subjectiveAspectCode; + + // 主观方面 + private String subjectiveAspectName; + + // 责任类别 + private String responsibilityTypeCode; + + // 责任类别 + private String responsibilityTypeName; + + // 处理结果 + private String handleResultCode; + + // 处理结果 + private String handleResultName; + + // 维权容错 + private String protectRightsCode; + + // 维权容错 + private String protectRightsName; + + // 帮扶对象 + private String assistCaseCode; + + // 帮扶对象 + private String assistCaseName; + + // 帮扶结束时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime assistEndTime; + + // 帮扶开始时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime assistStartTime; + + // 责任领导 + private String leadName; + + private String leadEmpNo; + + // 责任领导身份证 + private String leadIdCode; + + // 责任领导部门 + private String leadDepartName; + + // 责任领导部门id + private String leadDepartId; + + // 二级机构 + private String leadTwoDepartId; + + // 二级机构 + private String leadTwoDepartName; + + // 三级机构 + private String leadThreeDepartId; + + // 三级机构 + private String leadThreeDepartName; + + // 领导督察措施 + private String leadMeasuresName; + + // 领导督察措施 + private String leadMeasuresCode; + + // 领导责任类别 + private String leadResponsibilityTypeName; + + // 领导责任类别 + private String leadResponsibilityTypeCode; + + // 领导处理结果 + private String leadHandleResultCode; + + // 领导处理结果 + private String leadHandleResultName; + + // 领导维权容错 + private String leadProtectRightsName; + + // 领导维权容错 + private String leadProtectRightsCode; + + // 统计人员类型 1 民警 2 其他 + private String statisticsPersonType; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime crtTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updTime; + + private String status; + + // 涉及类型 + private String type; + + private List problems = new ArrayList<>(); +} diff --git a/src/main/java/com/biutag/supervision/pojo/domain/ExtensionApply.java b/src/main/java/com/biutag/supervision/pojo/domain/ExtensionApply.java new file mode 100644 index 0000000..f4e7d93 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/domain/ExtensionApply.java @@ -0,0 +1,38 @@ +package com.biutag.supervision.pojo.domain; + +import com.biutag.supervision.pojo.entity.NegativeExtensionApprove; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Accessors(chain = true) +@Setter +@Getter +public class ExtensionApply { + + private Integer id; + + private String negativeId; + + private String handlerDepartId; + + private String handlerDepartName; + + private String handlerUserName; + + private String handlerName; + + private String comments; + + private Integer extensionDays; + + private LocalDateTime createTime; + + private List approves = new ArrayList<>(); + + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/domain/NegativeDetail.java b/src/main/java/com/biutag/supervision/pojo/domain/NegativeDetail.java new file mode 100644 index 0000000..285fe50 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/domain/NegativeDetail.java @@ -0,0 +1,44 @@ +package com.biutag.supervision.pojo.domain; + +import com.biutag.supervision.pojo.entity.*; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.util.ArrayList; +import java.util.List; + +@Accessors(chain = true) +@Setter +@Getter +public class NegativeDetail { + + private NegativeVo negative; + + // 操作历史 + private List actionHistory = new ArrayList<>(); + + // 流程节点 + private FlowNode flowNode; + + // 流程操作 + private List flowActions = new ArrayList<>(); + + // 签收退回 + private List signReturns = new ArrayList<>(); + + private List approves = new ArrayList<>(); + + // 延期申请 + private ExtensionApply extensionApply; + + // 是否收藏 + private Boolean isFav; + + // 办理剩余时长 + private Long remainingDuration; + + // 最大限时 + private Long maxDuration; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/domain/NegativeVo.java b/src/main/java/com/biutag/supervision/pojo/domain/NegativeVo.java new file mode 100644 index 0000000..1666a09 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/domain/NegativeVo.java @@ -0,0 +1,182 @@ +package com.biutag.supervision.pojo.domain; + +import com.biutag.supervision.pojo.entity.NegativeFile; +import com.biutag.supervision.pojo.entity.NegativeThingFile; +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 NegativeVo { + + private String id; + + // 样本来源编号 + private String originId; + + // 编号 + private String serialNumber; + + // 问题发生时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime happenTime; + + // 问题发现时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime discoveryTime; + + // 问题来源code + private String problemSourcesCode; + + // 问题来源 + private String problemSources; + + // 联系电话 + private String contactPhone; + + // 涉及人姓名 + private String responderName; + + // 反映人部门id + private String responderDepartId; + + // 反映人部门名称 + private String responderDepartName; + + // 涉及人身份证 + private String responderIdCard; + + // 业务类型 + private String businessTypeCode; + + // 业务类别名称 + private String businessTypeName; + + // 涉嫌问题JSON + private String involveProblemLables; + + // 涉及警种名称 + private String policeTypeName; + + // 涉及警种 + private String policeType; + + // 涉及单位名称 + private String involveDepartName; + + // 涉及单位 + private String involveDepartId; + + // 简要描述 + private String thingDesc; + + // 填写人姓名 + private String fillName; + + // 填写人部门id + private String fillDepartId; + + // 填写人部门名称 + private String fillDeaprtName; + + // 审核人姓名 + private String checkName; + + // 审核人身份证 + private String checkIdCode; + + private LocalDateTime crtTime; + + + // 0 正常 1 禁用 + private String status; + + private String remark; + + // 预留 + private String reserve; + + // 核查情况 + private String checkStatus; + + // 核查情况 + private String checkStatusName; + + // 完善状态 0 -- 待完善 1 -- 已完善 + private String completeStatus; + + + private String supervisionSubjectCode; + + private String supervisionSubjectName; + + // 是否整改 + private String isRectifyCode; + + // 是否整改 + private String isRectifyName; + + // 办结时间 + private LocalDateTime completeDate; + + //--------------------------------------------- + + private String flowKey; + + // 主办层级 + private String hostLevel; + + // 办理时限 + private String timeLimit; + + // 审批流程 + private String approvalFlow; + + // 问题核查情况 + private String checkStatusDesc; + + // 问题整改情况 + private String rectifyDesc; + + // 整改限制天数 + private Integer rectifyRestrictionDays; + + // 追责对象 + private String accountabilityTarget; + + // 办理状态 + private String processingStatus; + + // 是否能申请延期 + private Boolean extensionApplyFlag; + + // 延期天数 + private Integer extensionDays; + + // 最大延期时长(天) + private Integer maxExtensionDuration; + + private String handleSecondDepartId; + + private String handleSecondDepartName; + + private String handleThreeDepartId; + + private String handleThreeDepartName; + + private String caseNumber; + + // 涉及人员 + private List blames = new ArrayList<>(); + + // 办结佐证材料 + private List files = new ArrayList<>(); + + private List thingFiles = new ArrayList<>(); + +} diff --git a/src/main/java/com/biutag/supervision/pojo/domain/PoliceAuth.java b/src/main/java/com/biutag/supervision/pojo/domain/PoliceAuth.java new file mode 100644 index 0000000..d477eef --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/domain/PoliceAuth.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.pojo.domain; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.util.List; + +@Accessors(chain = true) +@Setter +@Getter +public class PoliceAuth { + + private List departs; + + private List sources; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/domain/ProfileDepart.java b/src/main/java/com/biutag/supervision/pojo/domain/ProfileDepart.java new file mode 100644 index 0000000..9b4b389 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/domain/ProfileDepart.java @@ -0,0 +1,52 @@ +package com.biutag.supervision.pojo.domain; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author wxc + * @date 2024/11/1 + */ +@Setter +@Getter +public class ProfileDepart { + + private DepartInfo departInfo = new DepartInfo(); + private NegativeInfo negativeInfo = new NegativeInfo(); + + + @Setter + @Getter + @Accessors(chain = true) + public static class DepartInfo { + private String name; + private String shortName; + // 所长 + private String mainRole; + // 副所长 + private List deputyRole; + + private Long policeSize; + // 问题涉及民警数 + private Integer negativePoliceSize; + private Long auxSize; + // 问题涉及协辅警数 + private Integer negativeAuxSize; + } + + @Setter + @Getter + public static class NegativeInfo { + private long size; + // 接处警 + private Integer jcjBusinessSize; + private Integer jcjSize; + // 执法办案 + private Integer zfbaBusinessSize; + private Integer jfbaSize; + } + +} diff --git a/src/main/java/com/biutag/supervision/pojo/domain/Self.java b/src/main/java/com/biutag/supervision/pojo/domain/Self.java new file mode 100644 index 0000000..f8b605f --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/domain/Self.java @@ -0,0 +1,22 @@ +package com.biutag.supervision.pojo.domain; + +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.pojo.vo.MenuTree; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.util.List; + +@Accessors(chain = true) +@Setter +@Getter +public class Self { + + private UserAuth user; + + private List menus; + + private List perms; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/AccountDto.java b/src/main/java/com/biutag/supervision/pojo/dto/AccountDto.java new file mode 100644 index 0000000..c61f4a9 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/AccountDto.java @@ -0,0 +1,19 @@ +package com.biutag.supervision.pojo.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class AccountDto { + + @Schema(description = "用户名") + @NotBlank(message = "请您输入用户名") + private String account; + + @Schema(description = "密码") + @NotBlank(message = "请您输入密码") + private String password; +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/ActionDto.java b/src/main/java/com/biutag/supervision/pojo/dto/ActionDto.java new file mode 100644 index 0000000..938e2da --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/ActionDto.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.pojo.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Accessors(chain = true) +@Setter +@Getter +public class ActionDto { + + private String negativeId; + + private Integer workId; + + private String actionKey; + + private String nextFlowKey; + + private String actionName; + + private Object data; +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/CaseVerifDepart.java b/src/main/java/com/biutag/supervision/pojo/dto/CaseVerifDepart.java new file mode 100644 index 0000000..7ec5f6f --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/CaseVerifDepart.java @@ -0,0 +1,17 @@ +package com.biutag.supervision.pojo.dto; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author wxc + * @date 2024/10/29 + */ +@Setter +@Getter +public class CaseVerifDepart { + + private String label; + private String departId; + private Integer value; +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/DataCaseVerifDistribute.java b/src/main/java/com/biutag/supervision/pojo/dto/DataCaseVerifDistribute.java new file mode 100644 index 0000000..28179ed --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/DataCaseVerifDistribute.java @@ -0,0 +1,37 @@ +package com.biutag.supervision.pojo.dto; + +import com.biutag.supervision.pojo.entity.DataCaseVerif; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wxc + * @date 2024/10/24 + */ +@Setter +@Getter +public class DataCaseVerifDistribute { + + List data = new ArrayList<>(); + + // 办理时限 + @NotBlank + private String timeLimit; + + // 最大签收时长(天) + private Integer maxSignDuration; + + // 最大办理时长(天) + private Integer maxHandleDuration; + + // 最大延期时长(天) + private Integer maxExtensionDuration; + + // 审批流程 + @NotBlank + private String approvalFlow; +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/DataCaseVerifImportDto.java b/src/main/java/com/biutag/supervision/pojo/dto/DataCaseVerifImportDto.java new file mode 100644 index 0000000..69283b7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/DataCaseVerifImportDto.java @@ -0,0 +1,72 @@ +package com.biutag.supervision.pojo.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Schema(description = "案件核查") +@Setter +@Getter +public class DataCaseVerifImportDto { + + // 信件编号 + @ExcelProperty({"问题基本信息", "案件编号"}) + private String originId; + + // 登记时间 + @ExcelProperty({"问题基本信息", "受理时间"}) + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm") + private LocalDateTime discoveryTime; + + // 登记时间 + @ExcelProperty({"问题基本信息", "问题发生时间"}) + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm") + private LocalDateTime happenTime; + + @ExcelProperty({"问题基本信息", "问题来源"}) + private String problemSources; + + // 投诉人 + @ExcelProperty({"问题基本信息", "投诉人"}) + private String responderName; + + // 投诉人电话 + @ExcelProperty({"问题基本信息", "投诉人电话"}) + private String contactPhone; + + @ExcelProperty({"问题基本信息", "业务类别"}) + private String businessTypeName; + + @ExcelProperty({"问题基本信息", "涉嫌问题"}) + private String involveProblem; + + @ExcelProperty({"问题基本信息", "涉及警种"}) + private String policeTypeName; + + // 被投诉机构 + private String secondDepartId; + + @ExcelProperty({"问题基本信息", "涉及单位(二级机构)"}) + private String secondDepartName; + + // 被投诉机构 + @ExcelProperty({"问题基本信息", "涉及单位(三级机构)"}) + private String thirdDepartName; + + private String thirdDepartId; + + // 具体内容 + @ExcelProperty({"问题基本信息", "具体内容"}) + @NotBlank(message = "具体内容为空") + private String thingDesc; + + private String state; + + private String errMsg; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/dto/DataDataPetitionComplainDistribute.java b/src/main/java/com/biutag/supervision/pojo/dto/DataDataPetitionComplainDistribute.java new file mode 100644 index 0000000..7f8a4b8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/DataDataPetitionComplainDistribute.java @@ -0,0 +1,37 @@ +package com.biutag.supervision.pojo.dto; + +import com.biutag.supervision.pojo.entity.DataPetitionComplaint; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wxc + * @date 2024/10/24 + */ +@Setter +@Getter +public class DataDataPetitionComplainDistribute { + + List data = new ArrayList<>(); + + // 办理时限 + @NotBlank + private String timeLimit; + + // 最大签收时长(天) + private Integer maxSignDuration; + + // 最大办理时长(天) + private Integer maxHandleDuration; + + // 最大延期时长(天) + private Integer maxExtensionDuration; + + // 审批流程 + @NotBlank + private String approvalFlow; +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintAddDto.java b/src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintAddDto.java new file mode 100644 index 0000000..55ee1ff --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintAddDto.java @@ -0,0 +1,20 @@ +package com.biutag.supervision.pojo.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@Setter +@Getter +public class DataPetitionComplaintAddDto { + + // 更新方式 + private String dataUpdateMethod; + + // 来源 + private String problemSourcesCode; + + List data = new ArrayList<>(); +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintDto.java b/src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintDto.java new file mode 100644 index 0000000..00f23e6 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintDto.java @@ -0,0 +1,94 @@ +package com.biutag.supervision.pojo.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Schema(description = "信访投诉") +@Setter +@Getter +public class DataPetitionComplaintDto { + + // 信件编号 + @Schema(description = "信件编号") + @NotBlank + private String letterId; + + // 投诉渠道 + @Schema(description = "投诉渠道") + private String channelForFilingComplaints; + + // 受理层级 + @Schema(description = "受理层级") + @NotBlank + private String acceptanceLevel; + + // 登记时间 + @Schema(description = "登记时间(问题发现时间) 示例:2024-08-28 11:00:00") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") + @NotNull + private LocalDateTime discoveryTime; + + // 投诉人 + @Schema(description = "投诉人") + @NotBlank + private String responderName; + + // 投诉人电话 + @Schema(description = "投诉人电话") + @NotBlank + private String responderPhone; + + // 初重信访 + @Schema(description = "初重信访") + @NotBlank + private String initialPetition; + + // 缠访闹访 + @Schema(description = "缠访闹访") + @NotBlank + private String entanglementVisits; + + // 群众集访 + @Schema(description = "群众集访") + @NotBlank + private String massVisits; + + // 涉嫌问题 + @Schema(description = "涉嫌问题") + @NotBlank + private String involveProblem; + + // 业务类别 + @Schema(description = "业务类别") + @NotBlank + private String businessTypeName; + + // 涉及警种 + @Schema(description = "涉及警种") + @NotBlank + private String policeTypeName; + + // 被投诉机构 + @Schema(description = "被投诉机构") + @NotBlank + private String complainedDepartName; + + // 具体内容 + @Schema(description = "具体内容") + @NotBlank + private String thingDesc; + + @Schema(description = "办结时间 示例:2024-08-28 11:00:00") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") + private LocalDateTime completedTime; + + @Schema(description = "办结状态") + private String completedState; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintImportDto.java b/src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintImportDto.java new file mode 100644 index 0000000..9d7c986 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/DataPetitionComplaintImportDto.java @@ -0,0 +1,89 @@ +package com.biutag.supervision.pojo.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Schema(description = "信访投诉") +@Setter +@Getter +public class DataPetitionComplaintImportDto { + + // 投诉渠道 + @ExcelProperty({"信访基本信息", "投诉渠道"}) + private String channelForFilingComplaints; + + // 信件编号 + @ExcelProperty({"信访基本信息", "信件编号"}) + private String originId; + + // 受理层级 + @ExcelProperty({"信访基本信息", "受理层级"}) + private String acceptanceLevel; + + // 登记时间 + @ExcelProperty({"信访基本信息", "登记时间"}) + private String discoveryTime; + + // 投诉人 + @ExcelProperty({"信访基本信息", "投诉人"}) + private String responderName; + + // 投诉人电话 + @ExcelProperty({"信访基本信息", "投诉人电话"}) + private String contactPhone; + + // 初重信访 + @ExcelProperty({"信访基本信息", "初重信访"}) + @NotBlank(message = "初重信访为空或值描述不准确") + private String initialPetition; + + // 缠访闹访 + @ExcelProperty({"信访基本信息", "缠访闹访"}) + private String entanglementVisitsLabel; + + private Boolean entanglementVisits; + + // 群众集访 + @ExcelProperty({"信访基本信息", "群众集访"}) + private String massVisitsLabel; + + private Boolean massVisits; + + // 涉嫌问题 + @ExcelProperty({"信访基本信息", "涉嫌问题"}) + private String involveProblem; + + // 业务类别 + @ExcelProperty({"信访基本信息", "业务类别"}) + private String businessTypeName; + + @ExcelProperty({"信访基本信息", "被投诉二级机构"}) + private String involveSecondDepartName; + + // 被投诉机构 + @ExcelProperty({"信访基本信息", "被投诉所队"}) + private String involveThirdDepartName; + + + @NotBlank(message = "涉及二级机构为空或与系统未匹配上") + private String involveSecondDepartId; + + private String involveThirdDepartId; + + // 具体内容 + @ExcelProperty({"信访基本信息", "具体内容"}) + @NotBlank(message = "具体内容为空") + private String thingDesc; + + private String state; + + private String errMsg; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/dto/DictDataDto.java b/src/main/java/com/biutag/supervision/pojo/dto/DictDataDto.java new file mode 100644 index 0000000..1983ba3 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/DictDataDto.java @@ -0,0 +1,41 @@ +package com.biutag.supervision.pojo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class DictDataDto { + + private Long dictCode; + + // 字典标签 + private String dictLabel; + + // 字典键值 + private String dictValue; + + // 字典类型 + private String dictType; + + // 样式属性(其他样式扩展) + private String cssClass; + + // 表格回显样式 + private String listClass; + + // 是否默认(1是 0否) + private String isDefault; + + + // 字典排序 + private Integer dictSort; + + // 状态(0正常 1停用) + private String status; + + + // 备注 + private String remark; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/DictTypeDto.java b/src/main/java/com/biutag/supervision/pojo/dto/DictTypeDto.java new file mode 100644 index 0000000..2769b05 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/DictTypeDto.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.pojo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class DictTypeDto { + + private Long dictId; + + // 字典名称 + private String dictName; + + // 字典类型 + private String dictType; + + // 状态(0正常 1停用) + private String status; + + private String remark; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/MenuDto.java b/src/main/java/com/biutag/supervision/pojo/dto/MenuDto.java new file mode 100644 index 0000000..af87396 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/MenuDto.java @@ -0,0 +1,41 @@ +package com.biutag.supervision.pojo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class MenuDto { + + private Integer id; + + private Integer pid; + + // 菜单类型 + private String menuType; + + // 菜单名称 + private String menuName; + + // 菜单图标 + private String icon; + + // 路径 + private String paths; + + private String component; + + // 排序 + private Integer menuSort; + + private String perms; + + private Integer isCache; + + private Integer isShow; + + private Integer isDisable; + + // 是否打开新页面 默认为false + private Boolean openNewPage; +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/ModelClueDepartDto.java b/src/main/java/com/biutag/supervision/pojo/dto/ModelClueDepartDto.java new file mode 100644 index 0000000..774541b --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/ModelClueDepartDto.java @@ -0,0 +1,16 @@ +package com.biutag.supervision.pojo.dto; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author wxc + * @date 2024/10/22 + */ +@Setter +@Getter +public class ModelClueDepartDto { + + private String departId; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/ModelClueTaskDistribute.java b/src/main/java/com/biutag/supervision/pojo/dto/ModelClueTaskDistribute.java new file mode 100644 index 0000000..cb2252d --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/ModelClueTaskDistribute.java @@ -0,0 +1,49 @@ +package com.biutag.supervision.pojo.dto; + +import com.biutag.supervision.pojo.entity.ModelClue; +import com.biutag.supervision.pojo.model.ModelClueModel; +import com.biutag.supervision.pojo.vo.FileVo; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +/** + * 模型线索手动分发 + * @author wxc + * @date 2024/10/18 + */ +@Setter +@Getter +public class ModelClueTaskDistribute { + + private List modelClues = new ArrayList<>(); + + private String taskName; + + // 办理时限 + @NotBlank + private String timeLimit; + + // 最大签收时长(天) + private Integer maxSignDuration; + + // 最大办理时长(天) + private Integer maxHandleDuration; + + // 最大延期时长(天) + private Integer maxExtensionDuration; + + // 下发流程 + private String distributionFlow; + + // 审批流程 + @NotBlank + private String approvalFlow; + + + private List thingFiles = new ArrayList<>(); + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java b/src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java new file mode 100644 index 0000000..1a2d7b3 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java @@ -0,0 +1,101 @@ +package com.biutag.supervision.pojo.dto; + +import com.biutag.supervision.pojo.vo.FileVo; +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Setter +@Getter +public class NegativeDto { + + private String id; + + private String originId; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm") + private LocalDateTime happenTime; + + // 问题发现时间 + @NotNull + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm") + private LocalDateTime discoveryTime; + + // 问题来源 + @NotBlank(message = "问题来源不能为空") + private String problemSourcesCode; + + // 问题来源 + @NotBlank(message = "问题来源不能为空") + private String problemSources; + + // 业务类别 + @NotBlank(message = "业务类别不能为空") + private String businessTypeCode; + + // 业务类别名称 + @NotBlank(message = "业务类别不能为空") + private String businessTypeName; + + private String policeTypeName; + + // 涉及警种 + private String policeType; + + // 涉嫌问题JSON + private List> involveProblem; + + // 反映人姓名 + private String responderName; + + // 联系电话 + private String contactPhone; + + // 简要描述 + @NotBlank(message = "简要描述不能为空") + private String thingDesc; + + private List thingFiles = new ArrayList<>(); + + private String involveDepartName; + + // 涉及单位 + private String involveDepartId; + + @NotBlank(message = "主办层级不能为空") + private String hostLevel; + + // 办理时限 + @NotBlank(message = "办理时限不能为空") + private String timeLimit; + + // 审批流程 + @NotBlank(message = "审批流程不能为空") + private String approvalFlow; + + @NotBlank(message = "指定具体办理单位不能为空") + private String departId; + + @NotBlank(message = "指定具体办理单位不能为空") + private String departName; + + // 最大签收时长(天) + private Integer maxSignDuration; + + // 最大办理时长(天) + private Integer maxHandleDuration; + + // 最大延期时长(天) + private Integer maxExtensionDuration; + + // 涉及案件/警情编号 + private String caseNumber; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/PoliceImport.java b/src/main/java/com/biutag/supervision/pojo/dto/PoliceImport.java new file mode 100644 index 0000000..f19c0b3 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/PoliceImport.java @@ -0,0 +1,39 @@ +package com.biutag.supervision.pojo.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +/** + * @author wxc + * @date 2024/10/30 + */ +@Setter +@Getter +public class PoliceImport { + + @NotBlank(message = "姓名为空") + @ExcelProperty("姓名") + private String name; + + @NotBlank(message = "警号为空") + @ExcelProperty("警号") + private String empNo; + + @NotBlank(message = "身份证为空") + @ExcelProperty("身份证") + private String idCode; + + @NotBlank(message = "二级单位为空") + @ExcelProperty("二级单位") + private String secondDepartName; + + @ExcelProperty("三级单位") + private String thirdDepartName; + + @NotBlank(message = "角色为空") + @ExcelProperty("角色") + private String role; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/UserDto.java b/src/main/java/com/biutag/supervision/pojo/dto/UserDto.java new file mode 100644 index 0000000..deb34c6 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/UserDto.java @@ -0,0 +1,37 @@ +package com.biutag.supervision.pojo.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Setter +@Getter +public class UserDto { + + private String userId; + + // 登陆账号 + private String userName; + + // 昵称 + private String nickName; + + // 邮箱 + private String email; + + // 手机号 + private String mobile; + + // 用户类型:super-超级管理员 normal-普通管理员 + private String userType; + + // 描述 + private String userDesc; + + // 状态:0-禁用 1-正常 2-锁定 + private Integer status; + + private List roleIds; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/common/PieItem.java b/src/main/java/com/biutag/supervision/pojo/dto/common/PieItem.java new file mode 100644 index 0000000..0960e65 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/common/PieItem.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.pojo.dto.common; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +/** + * @author wxc + * @date 2024/10/29 + */ +@Setter +@Getter +@AllArgsConstructor +public class PieItem { + + private String name; + private Integer value; +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/flow/ApproveData.java b/src/main/java/com/biutag/supervision/pojo/dto/flow/ApproveData.java new file mode 100644 index 0000000..8895de5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/flow/ApproveData.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.pojo.dto.flow; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class ApproveData { + + private String comments; +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/flow/ExtensionApplyData.java b/src/main/java/com/biutag/supervision/pojo/dto/flow/ExtensionApplyData.java new file mode 100644 index 0000000..18a167d --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/flow/ExtensionApplyData.java @@ -0,0 +1,16 @@ +package com.biutag.supervision.pojo.dto.flow; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class ExtensionApplyData { + + // 延期天数 + private Integer extensionDays; + + // 延期理由 + private String comments; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/flow/FirstDistributeData.java b/src/main/java/com/biutag/supervision/pojo/dto/flow/FirstDistributeData.java new file mode 100644 index 0000000..cd1ca8f --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/flow/FirstDistributeData.java @@ -0,0 +1,37 @@ +package com.biutag.supervision.pojo.dto.flow; + +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class FirstDistributeData { + + @NotBlank + private String hostLevel; + + // 办理时限 + @NotBlank + private String timeLimit; + + // 审批流程 + @NotBlank + private String approvalFlow; + + @NotBlank + private String departId; + + @NotBlank + private String departName; + + // 最大签收时长(天) + private Integer maxSignDuration; + + // 最大办理时长(天) + private Integer maxHandleDuration; + + // 最大延期时长(天) + private Integer maxExtensionDuration; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/flow/SecondDistributeData.java b/src/main/java/com/biutag/supervision/pojo/dto/flow/SecondDistributeData.java new file mode 100644 index 0000000..553b6dc --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/flow/SecondDistributeData.java @@ -0,0 +1,14 @@ +package com.biutag.supervision.pojo.dto.flow; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class SecondDistributeData { + + private String departId; + + private String departName; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/flow/SignReturnData.java b/src/main/java/com/biutag/supervision/pojo/dto/flow/SignReturnData.java new file mode 100644 index 0000000..1adc1be --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/flow/SignReturnData.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.pojo.dto.flow; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class SignReturnData { + + private String comments; +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/flow/VerifyData.java b/src/main/java/com/biutag/supervision/pojo/dto/flow/VerifyData.java new file mode 100644 index 0000000..21a2e3c --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/flow/VerifyData.java @@ -0,0 +1,223 @@ +package com.biutag.supervision.pojo.dto.flow; + +import com.biutag.supervision.pojo.vo.FileVo; +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Setter +@Getter +public class VerifyData { + + // 核查情况 + @NotBlank + private String checkStatus; + + // 核查情况 + @NotBlank + private String checkStatusName; + + // 是否整改 + @NotBlank + private String isRectifyCode; + + // 是否整改 + @NotBlank + private String isRectifyName; + + // 问题核查情况 + @NotBlank + private String checkStatusDesc; + + // 整改限制天数 + private Integer rectifyRestrictionDays; + + // 追责对象 + @NotBlank + private String accountabilityTarget; + + // 涉及案件/警情编号 + private String caseNumber; + + private List blames = new ArrayList<>(); + + private List files = new ArrayList<>(); + + @Setter + @Getter + public static class Blame { + + // 涉及姓名 + @NotBlank + private String blameName; + + // 涉及身份证 + @NotBlank + private String blameIdCode; + + // 涉及警号 + @NotBlank + private String blameEmpNo; + + // 警种 + @NotBlank + private String policeTypeName; + + // 警种 + @NotBlank + private String policeTypeCode; + + @NotBlank + private String ivPersonType; + + // 人员属性 + @NotBlank + private String ivPersonTypeCode; + + // 核查情况code + @NotBlank + private String inspectCaseCode; + + // 核查情况 + @NotBlank + private String inspectCaseName; + + + + // 督察措施 + @NotBlank + private String superviseMeasuresCode; + + // 督察措施 + @NotBlank + private String superviseMeasuresName; + + // 主观方面 + @NotBlank + private String subjectiveAspectCode; + + // 主观方面 + @NotBlank + private String subjectiveAspectName; + + // 责任类别 + @NotBlank + private String responsibilityTypeCode; + + // 责任类别 + @NotBlank + private String responsibilityTypeName; + + // 处理结果 + @NotBlank + private String handleResultCode; + + // 处理结果 + @NotBlank + private String handleResultName; + + // 维权容错 + @NotBlank + private String protectRightsCode; + + // 维权容错 + @NotBlank + private String protectRightsName; + + // 帮扶对象 + @NotBlank + private String assistCaseCode; + + // 帮扶对象 + @NotBlank + private String assistCaseName; + + // 帮扶时间 (开始时间、结束时间) + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") + private List assistTime = new ArrayList<>(); + + // 责任领导 + @NotBlank + private String leadName; + + // 责任领导警号 + @NotBlank + private String leadEmpNo; + + // 责任领导身份证 + @NotBlank + private String leadIdCode; + + // 三级机构 + @NotBlank + private String leadThreeDepartName; + + // 领导督察措施 + @NotBlank + private String leadMeasuresName; + + // 领导督察措施 + @NotBlank + private String leadMeasuresCode; + + // 领导责任类别 + @NotBlank + private String leadResponsibilityTypeName; + + // 领导责任类别 + @NotBlank + private String leadResponsibilityTypeCode; + + // 领导处理结果 + @NotBlank + private String leadHandleResultCode; + + // 领导处理结果 + @NotBlank + private String leadHandleResultName; + + // 领导维权容错 + @NotBlank + private String leadProtectRightsName; + + // 领导维权容错 + @NotBlank + private String leadProtectRightsCode; + + // 问题类型 + private List problems; + + private String type; + + } + + @Setter + @Getter + public static class Problem { + + @NotBlank + private String oneLevelCode; + + @NotBlank + private String twoLevelCode; + + @NotBlank + private String oneLevelContent; + + @NotBlank + private String twoLevelContent; + + @NotBlank + private String threeLevelCode; + + @NotBlank + private String threeLevelContent; + + } + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/jwdc/NegativeApiDto.java b/src/main/java/com/biutag/supervision/pojo/dto/jwdc/NegativeApiDto.java new file mode 100644 index 0000000..56071b8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/jwdc/NegativeApiDto.java @@ -0,0 +1,111 @@ +package com.biutag.supervision.pojo.dto.jwdc; + +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.ValidationException; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.BeanUtils; + +import java.util.Date; + +@Setter +@Getter +public class NegativeApiDto { + + // 来源ID + @NotBlank + private String originId; + + // 反映人姓名 + @NotBlank + private String responderName; + + // 联系电话 + @NotBlank + private String contactPhone; + + // 发生时间 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date happenTime; + + // 发现时间 + @NotNull + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date discoveryTime; + + // 业务类型名称 + @NotBlank + private String businessTypeName; + + // 涉及单位名称 + @NotBlank + private String departName; + + @NotBlank + private String departCode; + + // 简要描述 + @NotBlank + private String thingDesc; + + public NegativeApiDto toEntity() { + NegativeApiDto negative = new NegativeApiDto(); + BeanUtils.copyProperties(this, negative); + return negative; + } + + @AllArgsConstructor + public enum BusinessType { + // 业务类型 + JCJ_110("1", "110接处警", "警令", "1"), // 警令 + JCJ_122("2", "122接处警", "交警", "11"), // 交警 + RJCKFW("3", "人境窗口服务", "人境", "18"), // 人境 + CJGFF("4", "车驾管服务", "交警", "11"), // 交警 + //JJCF(5, "交警执法"), + ZFBA("6", "执法办案", "法制", "21") // 法制 +// , ZXGZ(7, "专项工作"), +// ABWW(8, "安保维稳"), +// ZAFK(9, "治安防控"), +// XZGL(10, "行政管理"), +// FWJC(11, "服务基层"), +// DWGL(12, "队伍管理"), +// OTHER(13, "其他") + ; + + @Getter + private String code; + private String name; + private String policeTypeName; + private String policeType; + + public static String getCode(String name) { + for (BusinessType businessType : values()) { + if (businessType.name.equals(name)) { + return businessType.code; + } + } + throw new ValidationException("没有该业务类型"); + } + + public static String getPoliceTypeName(String name) { + for (BusinessType businessType : values()) { + if (businessType.name.equals(name)) { + return businessType.policeTypeName; + } + } + throw new ValidationException("没有该业务类型"); + } + public static String getPoliceType(String name) { + for (BusinessType businessType : values()) { + if (businessType.name.equals(name)) { + return businessType.policeType; + } + } + throw new ValidationException("没有该业务类型"); + } + + } +} diff --git a/src/main/java/com/biutag/supervision/pojo/entity/BaseAccount.java b/src/main/java/com/biutag/supervision/pojo/entity/BaseAccount.java new file mode 100644 index 0000000..33b7e0e --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/BaseAccount.java @@ -0,0 +1,55 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Setter +@Getter +public class BaseAccount implements Serializable { + + // + @TableId + private String accountId; + + // 用户Id + @TableField("user_id") + private String userId; + + // 标识:手机号、邮箱、 用户名、或第三方应用的唯一标识 + @TableField("account") + private String account; + + // 密码凭证:站内的保存密码、站外的不保存或保存token) + @TableField("password") + private String password; + + // 登录类型:password-密码、mobile-手机号、email-邮箱 + @TableField("account_type") + private String accountType; + + // 账户域:@admin.com,@developer.com + @TableField("domain") + private String domain; + + // 注册IP + @TableField("register_ip") + private String registerIp; + + // 注册时间 + @TableField("create_time") + private LocalDateTime createTime; + + // 状态:0-禁用 1-启用 2-锁定 + @TableField("status") + private Integer status; + + // 更新时间 + @TableField("update_time") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/BaseRole.java b/src/main/java/com/biutag/supervision/pojo/entity/BaseRole.java new file mode 100644 index 0000000..1f00474 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/BaseRole.java @@ -0,0 +1,50 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class BaseRole { + + // 角色ID + @TableId + private String roleId; + + // 角色编码 + @TableField("role_code") + private String roleCode; + + // 角色名称 + @TableField("role_name") + private String roleName; + + // 状态:0-无效 1-有效 + @TableField("status") + private String status; + + // 角色描述 + @TableField("role_desc") + private String roleDesc; + + @TableField("create_time") + private LocalDateTime createTime; + + @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss") + @TableField("update_time") + private LocalDateTime updateTime; + + // 保留数据0-否 1-是 不允许删除 + @TableField("is_persist") + private Integer isPersist; + + // 级别 1:市局管理员层级,2:二级管理员层级,3:三级管理员层级 + @TableField("level") + private Integer level; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/BaseRoleUser.java b/src/main/java/com/biutag/supervision/pojo/entity/BaseRoleUser.java new file mode 100644 index 0000000..786b249 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/BaseRoleUser.java @@ -0,0 +1,30 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class BaseRoleUser { + + // 用户ID + @TableField("user_id") + private String userId; + + // 角色ID + @TableField("role_id") + private String roleId; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + + // 修改时间 + @TableField("update_time") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/BaseUser.java b/src/main/java/com/biutag/supervision/pojo/entity/BaseUser.java new file mode 100644 index 0000000..02fee4f --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/BaseUser.java @@ -0,0 +1,62 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class BaseUser { + + // 用户ID + @TableId + private String userId; + + // 登陆账号 + @TableField("user_name") + private String userName; + + // 昵称 + @TableField("nick_name") + private String nickName; + + // 头像 + @TableField("avatar") + private String avatar; + + // 邮箱 + @TableField("email") + private String email; + + // 手机号 + @TableField("mobile") + private String mobile; + + // 用户类型:super-超级管理员 admin-普通管理员 + @TableField("user_type") + private String userType; + + // 企业ID + @TableField("company_id") + private String companyId; + + // 描述 + @TableField("user_desc") + private String userDesc; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + + // 更新时间 + @TableField("update_time") + private LocalDateTime updateTime; + + // 状态:0-禁用 1-正常 2-锁定 + @TableField("status") + private Integer status; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/BusinessDepart.java b/src/main/java/com/biutag/supervision/pojo/entity/BusinessDepart.java new file mode 100644 index 0000000..a4b040d --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/BusinessDepart.java @@ -0,0 +1,56 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.Date; + +@Setter +@Getter +public class BusinessDepart { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // 日期(天) + @TableField("date") + private Date date; + + // 单位ID + @TableField("depart_id") + private String departId; + + // 单位名称 + @TableField("depart_name") + private String departName; + + // 单位类型ID + @TableField("group_id") + private Long groupId; + + // 单位类型名称 + @TableField("group_name") + private String groupName; + + // 业务类型 + @TableField("business_type") + private String businessType; + + // 业务类型名称 + @TableField("business_type_name") + private String businessTypeName; + + // 业务量 + @TableField("number") + private Integer number; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/BusinessLog.java b/src/main/java/com/biutag/supervision/pojo/entity/BusinessLog.java new file mode 100644 index 0000000..6faea4e --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/BusinessLog.java @@ -0,0 +1,37 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class BusinessLog { + + // id + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // 类型 + @TableField("type") + private String type; + + // 应更新数量 + @TableField("num") + private Integer num; + + // 实际更新数量 + @TableField("actual_num") + private Integer actualNum; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/BusinessPolice.java b/src/main/java/com/biutag/supervision/pojo/entity/BusinessPolice.java new file mode 100644 index 0000000..cf264c6 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/BusinessPolice.java @@ -0,0 +1,68 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.Date; + +@Setter +@Getter +public class BusinessPolice { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // 日期(天) + @TableField("date") + private Date date; + + // 警员姓名 + @TableField("police_name") + private String policeName; + + // 警员身份证 + @TableField("police_id_code") + private String policeIdCode; + + // 警号 + @TableField("emp_no") + private String empNo; + + // 警员所属单位ID + @TableField("depart_id") + private String departId; + + // 警员所属单位名称 + @TableField("depart_name") + private String departName; + + // 单位类型ID + @TableField("group_id") + private Long groupId; + + // 单位类型名称 + @TableField("group_name") + private String groupName; + + // 业务类别 + @TableField("business_type") + private String businessType; + + // 业务量 + @TableField("number") + private Integer number; + + // 业务类型名称 + @TableField("business_type_name") + private String businessTypeName; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/DataCaseVerif.java b/src/main/java/com/biutag/supervision/pojo/entity/DataCaseVerif.java new file mode 100644 index 0000000..3fab562 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/DataCaseVerif.java @@ -0,0 +1,74 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class DataCaseVerif { + + // 样本源头编号 + @TableId(value = "originId") + private String originId; + + // 问题发现时间 + @TableField("discovery_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm") + private LocalDateTime discoveryTime; + + // 问题发生时间 + @TableField("happen_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm") + private LocalDateTime happenTime; + + // 问题来源 + @TableField("problem_sources") + private String problemSources; + + // 投诉人姓名 + @TableField("responder_name") + private String responderName; + + // 投诉人电话 + @TableField("responder_phone") + private String responderPhone; + + // 业务类型 + @TableField("business_type_name") + private String businessTypeName; + + // 涉及问题 + @TableField("involve_problem") + private String involveProblem; + + // 涉及警种 + @TableField("police_type_name") + private String policeTypeName; + + // 涉及单位 二级 + private String secondDepartId; + + private String secondDepartName; + + // 所对 + private String thirdDepartId; + + private String thirdDepartName; + + // 事情简述 + @TableField("thing_desc") + private String thingDesc; + + // + @TableField("create_time") + private LocalDateTime createTime; + + // 分发状态 + private String distributionState; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/DataPetitionComplaint.java b/src/main/java/com/biutag/supervision/pojo/entity/DataPetitionComplaint.java new file mode 100644 index 0000000..2e8fd6b --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/DataPetitionComplaint.java @@ -0,0 +1,92 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * 信访投诉 + */ +@Setter +@Getter +public class DataPetitionComplaint { + + // 信件编号 + @TableId + private String originId; + + // 投诉渠道 + @TableField("channel_for_filing_complaints") + private String channelForFilingComplaints; + + // 受理层级 + @TableField("acceptance_level") + private String acceptanceLevel; + + // 登记时间 + private LocalDateTime discoveryTime; + + // 投诉人 + @TableField("responder_name") + private String responderName; + + // 投诉人电话 + @TableField("responder_phone") + private String responderPhone; + + // 初重信访 + @TableField("initial_petition") + private String initialPetition; + + // 缠访闹访 + @TableField("entanglement_visits") + private Boolean entanglementVisits; + + // 群众集访 + @TableField("mass_visits") + private Boolean massVisits; + + // 涉嫌问题 + @TableField("involve_problem") + private String involveProblem; + + // 业务类别 + @TableField("business_type_name") + private String businessTypeName; + + // 涉及警种名称 + @TableField("police_type_name") + private String policeTypeName; + + // 具体内容 + @TableField("thing_desc") + private String thingDesc; + + + //--------------------- + + // 涉及单位 二级 + private String secondDepartId; + + private String secondDepartName; + + // 所对 + private String thirdDepartId; + + private String thirdDepartName; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; + + // 来源 + private String problemSourcesCode; + + // 分发状态 + private String distributionState; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/DataRightsComfort.java b/src/main/java/com/biutag/supervision/pojo/entity/DataRightsComfort.java new file mode 100644 index 0000000..fd49c97 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/DataRightsComfort.java @@ -0,0 +1,9 @@ +package com.biutag.supervision.pojo.entity; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class DataRightsComfort { +} diff --git a/src/main/java/com/biutag/supervision/pojo/entity/FlowAction.java b/src/main/java/com/biutag/supervision/pojo/entity/FlowAction.java new file mode 100644 index 0000000..8ee2c35 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/FlowAction.java @@ -0,0 +1,56 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class FlowAction { + + @TableId(type = IdType.AUTO) + private Integer id; + + + private String actionKey; + + // + @TableField("flow_key") + private String flowKey; + + // 下一流程节点key + @TableField("next_flow_key") + private String nextFlowKey; + + // 按钮名称 + @TableField("button_label") + private String buttonLabel; + + // 按钮类型 + @TableField("button_type") + private String buttonType; + + // 是否是简单按钮 + @TableField("plain") + private Boolean plain; + + // 排序 + @TableField("sort") + private Integer sort; + + // 动作名称 + @TableField("action_name") + private String actionName; + + // 是否需要校验表单 + private Boolean validateForm; + + // 完成后是否需要关闭 + private Boolean doClose; + + // 是否需要启动对话框 + private Boolean openDialog; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/FlowNode.java b/src/main/java/com/biutag/supervision/pojo/entity/FlowNode.java new file mode 100644 index 0000000..ca1b062 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/FlowNode.java @@ -0,0 +1,26 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class FlowNode { + + // + @TableId + private String flowKey; + + // 流程节点名称 + @TableField("flow_name") + private String flowName; + + // 排序 + @TableField("flow_sort") + private Integer flowSort; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/GBaseAJJBXX.java b/src/main/java/com/biutag/supervision/pojo/entity/GBaseAJJBXX.java new file mode 100644 index 0000000..e1d9958 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/GBaseAJJBXX.java @@ -0,0 +1,58 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +@TableName("dwd_asj_zfba_ajjbxx") +public class GBaseAJJBXX { + + // 立案单位编码 + @TableField("LADWBMdm") + private String LADWBMdm; + + // 立案单位名称 + @TableField("LADWBMmc") + private String LADWBMmc; + + // 破案单位编码 + @TableField("PADWBMdm") + private String PADWBMdm; + + // 破案单位名称 + @TableField("PADWBMmc") + private String PADWBMmc; + + // 办案单位编码 + @TableField("BADWIDdm") + private String BADWIDdm; + + // 办案单位名称 + @TableField("BADWIDmc") + private String BADWIDmc; + + // 办案人1ID + @TableField("BAR1ID") + private String BAR1ID; + + // 办案人2ID + @TableField("BAR2ID") + private String BAR2ID; + + // 办案人姓名 + @TableField("XM") + private String XM; + + // 办案人ID + @TableField(exist = false) + private String BARID; + + @TableField(exist = false) + private Integer BADWNum; + + @TableField(exist = false) + private Integer BARNum; +} diff --git a/src/main/java/com/biutag/supervision/pojo/entity/GBaseCJD.java b/src/main/java/com/biutag/supervision/pojo/entity/GBaseCJD.java new file mode 100644 index 0000000..22e6c18 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/GBaseCJD.java @@ -0,0 +1,36 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@TableName("dwd_asj_zhtx_cjd") +@Setter +@Getter +public class GBaseCJD { + + private Integer clwbrxmTotal; + + // 处理完毕人姓名 + @TableField("clwbrxm") + private String clwbrxm; + + // 处警时间 + @TableField("cjsj") + private Date cjsj; + + // 处理完毕人编号 + @TableField("clwbrbh") + private String clwbrbh; + + // 处警对象所属单位代码 + @TableField("cjdxssdwdm") + private String cjdxssdwdm; + + // 处警对象所属单位名称 + @TableField("cjdxssdwmc") + private String cjdxssdwmc; +} diff --git a/src/main/java/com/biutag/supervision/pojo/entity/GBaseJJD.java b/src/main/java/com/biutag/supervision/pojo/entity/GBaseJJD.java new file mode 100644 index 0000000..98a7e9e --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/GBaseJJD.java @@ -0,0 +1,33 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@TableName("dwd_asj_zhtx_jjd") +@Setter +@Getter +public class GBaseJJD { + + @TableField(exist = false) + private Integer jjdbhTotal; + + // 接警单编号 + @TableField("jjdbh") + private String jjdbh; + + // 创建时间 + @TableField("cjsj") + private Date cjsj; + + // 管辖单位代码 + @TableField("gxdwdm") + private String gxdwdm; + + // 管辖单位名称 + @TableField("gxdwmc") + private String gxdwmc; +} diff --git a/src/main/java/com/biutag/supervision/pojo/entity/Holiday.java b/src/main/java/com/biutag/supervision/pojo/entity/Holiday.java new file mode 100644 index 0000000..6bca422 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/Holiday.java @@ -0,0 +1,33 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class Holiday { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // 日期 + @TableField("date") + private String date; + + // 是否是节假日 + @TableField("flag") + private Boolean flag; + + // 节假日名称 + @TableField("holiday_name") + private String holidayName; + + // 年 + @TableField("year") + private Integer year; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/Menu.java b/src/main/java/com/biutag/supervision/pojo/entity/Menu.java new file mode 100644 index 0000000..d75eda2 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/Menu.java @@ -0,0 +1,74 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class Menu { + + // + @TableId(type = IdType.AUTO) + private Integer id; + + // + @TableField("pid") + private Integer pid; + + // 菜单类型 + @TableField("menu_type") + private String menuType; + + // 菜单名称 + @TableField("menu_name") + private String menuName; + + // 菜单图标 + @TableField("icon") + private String icon; + + // 排序 + @TableField("menu_sort") + private Integer menuSort; + + // + @TableField("perms") + private String perms; + + // 路径 + @TableField("paths") + private String paths; + + // 组件 + @TableField("component") + private String component; + + // 是否缓存 + @TableField("is_cache") + private Integer isCache; + + // + @TableField("is_show") + private Integer isShow; + + // + @TableField("is_disable") + private Integer isDisable; + + // + @TableField("create_time") + private LocalDateTime createTime; + + // + @TableField("update_time") + private LocalDateTime updateTime; + + // 是否打开新页面 默认为false + private Boolean openNewPage; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/Model.java b/src/main/java/com/biutag/supervision/pojo/entity/Model.java new file mode 100644 index 0000000..aa66988 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/Model.java @@ -0,0 +1,94 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class Model { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("model_name") + private String modelName; + + private Integer classId; + + // + @TableField("icon") + private String icon; + + // + @TableField("remarks") + private String remarks; + + // 分发方式 + @TableField("distribution_method") + private String distributionMethod; + + // 分发周期 + @TableField("distribution_cycle") + private String distributionCycle; + + // 分发周期 周 + private String distributionCycleDayOfWeek; + + // 分发周期 时间 + private String distributionCycleTime; + + // 分发周期,cron 表达式 + private String distributionCycleExpression; + + // 限时 + @TableField("time_limit") + private String timeLimit; + + // + @TableField("max_sign_duration") + private Integer maxSignDuration; + + // + @TableField("max_handle_duration") + private Integer maxHandleDuration; + + // + @TableField("max_extension_duration") + private Integer maxExtensionDuration; + + // + @TableField("distribution_flow") + private String distributionFlow; + + @TableField("approval_flow") + private String approvalFlow; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") + @TableField("create_time") + private LocalDateTime createTime; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") + @TableField("update_time") + private LocalDateTime updateTime; + + private String createDepartId; + + private String createDepartName; + + // 建模方式 + private String modelingMethod; + + // 模型数据类型 + private String modelDataType; + + @TableField("model_sql") + private String modelSql; +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/ModelClass.java b/src/main/java/com/biutag/supervision/pojo/entity/ModelClass.java new file mode 100644 index 0000000..ddcab72 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/ModelClass.java @@ -0,0 +1,27 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class ModelClass { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("name") + private String name; + + // + @TableField("sort") + private Integer sort; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/ModelClue.java b/src/main/java/com/biutag/supervision/pojo/entity/ModelClue.java new file mode 100644 index 0000000..556f076 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/ModelClue.java @@ -0,0 +1,96 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Setter +@Getter +public class ModelClue { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("model_id") + private Integer modelId; + + // 涉及单位 + @TableField("involve_depart_name") + private String involveDepartName; + + @TableField("involve_depart_id") + private String involveDepartId; + + // 涉及人员 + @TableField("involve_police_name") + private String involvePoliceName; + + // 涉及人员警号 + @TableField("involve_police_emp_no") + private String involvePoliceEmpNo; + + // 预警内容 + @TableField("thing_desc") + private String thingDesc; + + // 分发状态 默认 0-未分发 1-已分发 + @TableField("distribution_state") + private String distributionState; + + @TableField("create_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm") + private LocalDateTime createTime; + + @TableField("update_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm") + private LocalDateTime updateTime; + + // 数据详情 JSON + private String data; + + // 问题ID + @TableField("negative_id") + private String negativeId; + + // 状态:0-未处理 1-已处理 + @TableField("status") + private Integer status; + + // 外部主键 + @TableField("unique_key") + private String uniqueKey; + + // 任务ID + private Integer taskId; + + + // 总警情数 + @TableField(exist = false) + private Long zjjs; + + // 执法场所登记数 + @TableField(exist = false) + private Long zfcsdjs; + + // 比例 + @TableField(exist = false) + private BigDecimal bl; + + @TableField(exist = false) + private String parentId; + + @TableField(exist = false) + private String thisId; + + @TableField(exist = false) + private Integer departLevel; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/ModelClueRecord.java b/src/main/java/com/biutag/supervision/pojo/entity/ModelClueRecord.java new file mode 100644 index 0000000..5888f89 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/ModelClueRecord.java @@ -0,0 +1,42 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class ModelClueRecord { + + // + @TableId(type = IdType.AUTO) + private Integer id; + + // 模型ID + private Integer modelId; + + // 条数 + @TableField("size") + private Integer size; + + // 创建时间 + @TableField("create_time") + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime createTime; + + // 状态 success-成功 fail-失败 + @TableField("state") + private String state; + + // 异常详情 + @TableField("err_msg") + private String errMsg; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/ModelClueTask.java b/src/main/java/com/biutag/supervision/pojo/entity/ModelClueTask.java new file mode 100644 index 0000000..eb92b2a --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/ModelClueTask.java @@ -0,0 +1,37 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class ModelClueTask { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // 任务名称 + @TableField("task_name") + private String taskName; + + // 模型名称 + @TableField("model_id") + private Integer modelId; + + // 下发时间 + @TableField("distribution_time") + private LocalDateTime distributionTime; + + // 条数 + @TableField("size") + private Integer size; + + private String distributionMethod; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegDepartAuthority.java b/src/main/java/com/biutag/supervision/pojo/entity/NegDepartAuthority.java new file mode 100644 index 0000000..1294186 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegDepartAuthority.java @@ -0,0 +1,22 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegDepartAuthority { + + // 身份证号 + @TableField("idCode") + private String idCode; + + // 可查看的部门 + @TableField("departId") + private String departId; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegSourceAuthority.java b/src/main/java/com/biutag/supervision/pojo/entity/NegSourceAuthority.java new file mode 100644 index 0000000..202376f --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegSourceAuthority.java @@ -0,0 +1,21 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegSourceAuthority { + + // 身份证号 + @TableField("idCode") + private String idCode; + + // 可查看的来源 + private Integer source; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/Negative.java b/src/main/java/com/biutag/supervision/pojo/entity/Negative.java new file mode 100644 index 0000000..73239d0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/Negative.java @@ -0,0 +1,255 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class Negative { + + // + @TableId + private String id; + + // 样本来源编号 + @TableField("originId") + private String originId; + + // 编号 + @TableField("serialNumber") + private String serialNumber; + + // 问题发生时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + @TableField("happenTime") + private LocalDateTime happenTime; + + // 问题发现时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + @TableField("discoveryTime") + private LocalDateTime discoveryTime; + + // 问题来源code + @TableField("problemSourcesCode") + private String problemSourcesCode; + + // 问题来源 + @TableField("problemSources") + private String problemSources; + + // 联系电话 + @TableField("contactPhone") + private String contactPhone; + + // 反映人姓名 + @TableField("responderName") + private String responderName; + + // 反映人部门id + @TableField("responderDepartId") + private String responderDepartId; + + // 反映人部门名称 + @TableField("responderDepartName") + private String responderDepartName; + + // 涉及人身份证 + @TableField("responderIdCard") + private String responderIdCard; + + // 业务类型 + @TableField("businessTypeCode") + private String businessTypeCode; + + // 业务类别名称 + @TableField("businessTypeName") + private String businessTypeName; + + // 涉嫌问题JSON + @TableField("involveProblem") + private String involveProblem; + + // 涉及警种名称 + @TableField("policeTypeName") + private String policeTypeName; + + // 涉及警种 + @TableField("policeType") + private String policeType; + + // 涉及单位名称 + @TableField("involveDepartName") + private String involveDepartName; + + // 涉及单位 + @TableField("involveDepartId") + private String involveDepartId; + + // 简要描述 + @TableField("thingDesc") + private String thingDesc; + + // 填写人姓名 + @TableField("fillName") + private String fillName; + + // 填写人部门id + @TableField("fillDepartId") + private String fillDepartId; + + // 填写人部门名称 + @TableField("fillDeaprtName") + private String fillDeaprtName; + + // 审核人姓名 + @TableField("checkName") + private String checkName; + + // 审核人身份证 + @TableField("checkIdCode") + private String checkIdCode; + + // + @TableField("crtTime") + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime crtTime; + + // + @TableField("updName") + private String updName; + + // + @TableField("updUser") + private String updUser; + + // + @TableField("updTime") + private LocalDateTime updTime; + + // 0 正常 1 禁用 + @TableField("status") + private String status; + + // + @TableField("remark") + private String remark; + + // 预留 + @TableField("reserve") + private String reserve; + + // 核查情况 + @TableField("checkStatus") + private String checkStatus; + + // 核查情况 + @TableField("checkStatusName") + private String checkStatusName; + + // 完善状态 0 -- 待完善 1 -- 已完善 + @TableField("completeStatus") + private String completeStatus; + + // 最后编辑人员 + @TableField("lastEditName") + private String lastEditName; + + // + @TableField("taskId") + private String taskId; + + // + @TableField("supervisionSubjectCode") + private String supervisionSubjectCode; + + // + @TableField("supervisionSubjectName") + private String supervisionSubjectName; + + // 是否整改 + @TableField("isRectifyCode") + private String isRectifyCode; + + // 是否整改 + @TableField("isRectifyName") + private String isRectifyName; + + // 办结时间 + @TableField("completeDate") + private LocalDateTime completeDate; + + //--------------------------------------------- + + private String flowKey; + + // 主办层级 + private String hostLevel; + + // 办理时限 + private String timeLimit; + + // 最大签收时长(天) + private Integer maxSignDuration; + + // 最大办理时长(天) + private Integer maxHandleDuration; + + // 最大延期时长(天) + private Integer maxExtensionDuration; + + // 审批流程 + private String approvalFlow; + + // 问题核查情况 + private String checkStatusDesc; + + + // 整改限制天数 + private Integer rectifyRestrictionDays; + + // 追责对象 + private String accountabilityTarget; + + // 办理状态 + private String processingStatus; + + // 延期申请ID + private Integer negativeExtensionApplyId; + + // 是否能申请延期 true = 能 false = 不能 + private Boolean extensionApplyFlag; + + // 延期天数 + private Integer extensionDays; + + // 市局下发时间 + private LocalDateTime firstDistributeTime; + + // 是否是二级机构办理 true=是 false=否 + private Boolean isSecondHandle; + + private String handleSecondDepartId; + + private String handleSecondDepartName; + + private String handleThreeDepartId; + + private String handleThreeDepartName; + + // 涉及案件/警情编号 + private String caseNumber; + + // 办理超时(秒) + private Long handleTimeout; + + // 当前处理对象 + private String currentProcessingObject; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeApprove.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeApprove.java new file mode 100644 index 0000000..e92d62f --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeApprove.java @@ -0,0 +1,55 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class NegativeApprove { + + // + @TableId(type = IdType.AUTO) + private Integer id; + + // + @TableField("negative_id") + private String negativeId; + + // + @TableField("state") + private String state; + + private String handlerDepartId; + + // + @TableField("handler_depart_name") + private String handlerDepartName; + + private String handlerUserName; + + // + @TableField("handler_name") + private String handlerName; + + // 审批意见 + @TableField("comments") + private String comments; + + // + @TableField("create_time") + private LocalDateTime createTime; + + @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + private String actionKey; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeBlame.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeBlame.java new file mode 100644 index 0000000..6106e46 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeBlame.java @@ -0,0 +1,243 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class NegativeBlame { + + // + @TableId("blameId") + private String blameId; + + // + @TableField("negativeId") + private String negativeId; + + // 核实人员 + @TableField("blameFlag") + private String blameFlag; + + // 涉及人员 + @TableField("involveFlag") + private String involveFlag; + + // 涉及姓名 + @TableField("blameName") + private String blameName; + + // 涉及身份证 + @TableField("blameIdCode") + private String blameIdCode; + + // 涉及警号 + @TableField("blameEmpNo") + private String blameEmpNo; + + // 涉及部门 + @TableField("blameDepartId") + private String blameDepartId; + + // 涉及人部门名称 + @TableField("blameDepartName") + private String blameDepartName; + + // 人员属性 + @TableField("ivPersonType") + private String ivPersonType; + + // 人员属性 + @TableField("ivPersonTypeCode") + private String ivPersonTypeCode; + + // 二级机构 + @TableField("twoLevelDapartId") + private String twoLevelDapartId; + + // 二级机构 + @TableField("twoLevelDapartName") + private String twoLevelDapartName; + + // 三级机构 + @TableField("threeLevelDapartName") + private String threeLevelDapartName; + + // 三级机构 + @TableField("threeLevelDapart") + private String threeLevelDapart; + + // 警种 + @TableField("policeTypeName") + private String policeTypeName; + + // 警种 + @TableField("policeTypeCode") + private String policeTypeCode; + + // 核查情况code + @TableField("inspectCaseCode") + private String inspectCaseCode; + + // 核查情况 + @TableField("inspectCaseName") + private String inspectCaseName; + + // 督察措施 + @TableField("superviseMeasuresCode") + private String superviseMeasuresCode; + + // 督察措施 + @TableField("superviseMeasuresName") + private String superviseMeasuresName; + + // 主观方面 + @TableField("subjectiveAspectCode") + private String subjectiveAspectCode; + + // 主观方面 + @TableField("subjectiveAspectName") + private String subjectiveAspectName; + + // 责任类别 + @TableField("responsibilityTypeCode") + private String responsibilityTypeCode; + + // 责任类别 + @TableField("responsibilityTypeName") + private String responsibilityTypeName; + + // 处理结果 + @TableField("handleResultCode") + private String handleResultCode; + + // 处理结果 + @TableField("handleResultName") + private String handleResultName; + + // 维权容错 + @TableField("protectRightsCode") + private String protectRightsCode; + + // 维权容错 + @TableField("protectRightsName") + private String protectRightsName; + + // 帮扶对象 + @TableField("assistCaseCode") + private String assistCaseCode; + + // 帮扶对象 + @TableField("assistCaseName") + private String assistCaseName; + + // 帮扶结束时间 + @TableField("assistEndTime") + private LocalDateTime assistEndTime; + + // 帮扶开始时间 + @TableField("assistStartTime") + private LocalDateTime assistStartTime; + + // 责任领导 + @TableField("leadName") + private String leadName; + + // 领导警号 + private String leadEmpNo; + + // 责任领导身份证 + @TableField("leadIdCode") + private String leadIdCode; + + // 责任领导部门 + @TableField("leadDepartName") + private String leadDepartName; + + // 责任领导部门id + @TableField("leadDepartId") + private String leadDepartId; + + // 二级机构 + @TableField("leadTwoDepartId") + private String leadTwoDepartId; + + // 二级机构 + @TableField("leadTwoDepartName") + private String leadTwoDepartName; + + // 三级机构 + @TableField("leadThreeDepartId") + private String leadThreeDepartId; + + // 三级机构 + @TableField("leadThreeDepartName") + private String leadThreeDepartName; + + // 领导督察措施 + @TableField("leadMeasuresName") + private String leadMeasuresName; + + // 领导督察措施 + @TableField("leadMeasuresCode") + private String leadMeasuresCode; + + // 领导责任类别 + @TableField("leadResponsibilityTypeName") + private String leadResponsibilityTypeName; + + // 领导责任类别 + @TableField("leadResponsibilityTypeCode") + private String leadResponsibilityTypeCode; + + // 领导处理结果 + @TableField("leadHandleResultCode") + private String leadHandleResultCode; + + // 领导处理结果 + @TableField("leadHandleResultName") + private String leadHandleResultName; + + // 领导维权容错 + @TableField("leadProtectRightsName") + private String leadProtectRightsName; + + // 领导维权容错 + @TableField("leadProtectRightsCode") + private String leadProtectRightsCode; + + // 统计人员类型 1 民警 2 其他 + @TableField("statisticsPersonType") + private String statisticsPersonType; + + // + @TableField("crtTime") + private LocalDateTime crtTime; + + // + @TableField("updTime") + private LocalDateTime updTime; + + // + @TableField("status") + private String status; + + // + @TableField("crtUser") + private String crtUser; + + // + @TableField("updUser") + private String updUser; + + // 涉及类型 + private String type; + + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeExtensionApply.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeExtensionApply.java new file mode 100644 index 0000000..3e1ca9c --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeExtensionApply.java @@ -0,0 +1,53 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class NegativeExtensionApply { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("negative_id") + private String negativeId; + + // + @TableField("handler_depart_id") + private String handlerDepartId; + + // + @TableField("handler_depart_name") + private String handlerDepartName; + + // + @TableField("handler_user_name") + private String handlerUserName; + + // + @TableField("handler_name") + private String handlerName; + + // 延期理由 + @TableField("comments") + private String comments; + + // 延期天数 + @TableField("extension_days") + private Integer extensionDays; + + // + @TableField("create_time") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeExtensionApprove.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeExtensionApprove.java new file mode 100644 index 0000000..358c283 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeExtensionApprove.java @@ -0,0 +1,61 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class NegativeExtensionApprove { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("negative_id") + private String negativeId; + + // + @TableField("negative_extension_apply_id") + private Integer negativeExtensionApplyId; + + // + @TableField("handler_depart_id") + private String handlerDepartId; + + // + @TableField("handler_depart_name") + private String handlerDepartName; + + // + @TableField("handler_user_name") + private String handlerUserName; + + // + @TableField("handler_name") + private String handlerName; + + // 审批意见/驳回理由 + @TableField("comments") + private String comments; + + // + @TableField("state") + private String state; + + // + @TableField("action_key") + private String actionKey; + + // + @TableField("create_time") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeFav.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeFav.java new file mode 100644 index 0000000..b26ffbf --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeFav.java @@ -0,0 +1,31 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegativeFav { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("negative_id") + private String negativeId; + + // + @TableField("user_id") + private String userId; + + // + @TableField("create_time") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeFile.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeFile.java new file mode 100644 index 0000000..8dd298e --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeFile.java @@ -0,0 +1,53 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegativeFile { + + // + @TableId(value = "id") + private String id; + + // + @TableField("fileId") + private String fileId; + + // + @TableField("filePath") + private String filePath; + + // + @TableField("negtiveId") + private String negtiveId; + + // + @TableField("type") + private String type; + + // + @TableField("crtTime") + private LocalDateTime crtTime; + + // + @TableField("crtUser") + private String crtUser; + + // + @TableField("fileName") + private String fileName; + + // + @TableField("status") + private String status; + + private Integer fileClassId; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeHistory.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeHistory.java new file mode 100644 index 0000000..8d9d49c --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeHistory.java @@ -0,0 +1,50 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class NegativeHistory { + + // + @TableId("historyId") + private String historyId; + + // 组名 + @TableField("dataJson") + private String dataJson; + + // 类型 + @TableField("negativeId") + private String negativeId; + + // 创建时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss") + @TableField("crtTime") + private LocalDateTime crtTime; + + // 创建人 + @TableField("crtUser") + private String crtUser; + + // + @TableField("crtUserName") + private String crtUserName; + + // + @TableField("crtName") + private String crtName; + + private String actionName; + + private String departName; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeProblemRelation.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeProblemRelation.java new file mode 100644 index 0000000..2c2ce88 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeProblemRelation.java @@ -0,0 +1,48 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegativeProblemRelation { + + // + @TableId + private String id; + + // 清单id + @TableField("negativeId") + private String negativeId; + + // 关联涉及人 + @TableField("blameId") + private String blameId; + + // + @TableField("oneLevelCode") + private String oneLevelCode; + + // + @TableField("twoLevelCode") + private String twoLevelCode; + + // + @TableField("oneLevelContent") + private String oneLevelContent; + + // + @TableField("twoLevelContent") + private String twoLevelContent; + + @TableField("threeLevelCode") + private String threeLevelCode; + + @TableField("threeLevelContent") + private String threeLevelContent; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeSignReturn.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeSignReturn.java new file mode 100644 index 0000000..dec841a --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeSignReturn.java @@ -0,0 +1,52 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class NegativeSignReturn { + + @TableId(type = IdType.AUTO) + private Integer id; + + // + @TableField("negative_id") + private String negativeId; + + // + @TableField("handler_depart_id") + private String handlerDepartId; + + // + @TableField("handler_depart_name") + private String handlerDepartName; + + // + @TableField("handler_user_name") + private String handlerUserName; + + // + @TableField("handler_name") + private String handlerName; + + // 审批意见 + @TableField("comments") + private String comments; + + // + @TableField("action_key") + private String actionKey; + + // + @TableField("create_time") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeTask.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeTask.java new file mode 100644 index 0000000..66cba99 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeTask.java @@ -0,0 +1,83 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegativeTask { + + // + @TableId(value = "id") + private String id; + + // 任务名称 + @TableField("taskName") + private String taskName; + + // 导入条数 + @TableField("importRow") + private Integer importRow; + + // 成功条数 + @TableField("successRow") + private String successRow; + + // 错误条数 + @TableField("errorRow") + private String errorRow; + + // 文件路径 + @TableField("filePath") + private String filePath; + + // 错误信息下载 + @TableField("errorPath") + private String errorPath; + + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + @TableField("crtTime") + private LocalDateTime crtTime; + + // + @TableField("crtUser") + private String crtUser; + + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + @TableField("updTime") + private LocalDateTime updTime; + + // + @TableField("updUser") + private String updUser; + + // 状态 0 成功 1 失败 2 导入中 + @TableField("status") + private String status; + + // 备注 + @TableField("remark") + private String remark; + + // 文件id + @TableField("fileId") + private String fileId; + + // 导入任务类型 0 完整导入 1 部分导入 + @TableField("type") + private String type; + + // + @TableField("excepionInfo") + private String excepionInfo; + + // + @TableField("category") + private String category; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeThingFile.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeThingFile.java new file mode 100644 index 0000000..33f5966 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeThingFile.java @@ -0,0 +1,39 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegativeThingFile { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("negative_id") + private String negativeId; + + // 文件名称 + @TableField("file_name") + private String fileName; + + // 文件路径 + @TableField("file_path") + private String filePath; + + // + @TableField("type") + private String type; + + // + @TableField("create_time") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/NegativeWork.java b/src/main/java/com/biutag/supervision/pojo/entity/NegativeWork.java new file mode 100644 index 0000000..6ac4124 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/NegativeWork.java @@ -0,0 +1,49 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class NegativeWork { + + // + @TableId(type = IdType.AUTO) + private Integer id; + + // + @TableField("negative_id") + private String negativeId; + + // + @TableField("depart_id") + private String departId; + + private String departName; + + // 角色编码 + @TableField("role_code") + private String roleCode; + + // 问题来源 + private String problemSourcesCode; + + private String status; + + @TableField("create_time") + private LocalDateTime createTime; + + // + @TableField("update_time") + private LocalDateTime updateTime; + + private String flowKey; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/RoleMenu.java b/src/main/java/com/biutag/supervision/pojo/entity/RoleMenu.java new file mode 100644 index 0000000..86df6a5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/RoleMenu.java @@ -0,0 +1,25 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +@Accessors(chain = true) +@Setter +@Getter +public class RoleMenu { + + @TableId(type = IdType.AUTO) + private Integer id; + + private String roleCode; + + private Integer menuId; + + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/RpcApply.java b/src/main/java/com/biutag/supervision/pojo/entity/RpcApply.java new file mode 100644 index 0000000..c6d41f0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/RpcApply.java @@ -0,0 +1,38 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class RpcApply { + + @TableId(value = "rpc_id") + private String rpcId; + + // 申请时间 + @TableField("apply_date") + private LocalDateTime applyDate; + + // 部门id + @TableField("depart_id") + private String departId; + + // 部门 + @TableField("depart_name") + private String departName; + + // 类型,1维权,2,抚慰,3容错 + @TableField("type") + private String type; + + // 状态 + @TableField("rpc_status") + private String rpcStatus; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/RpcApplyPerson.java b/src/main/java/com/biutag/supervision/pojo/entity/RpcApplyPerson.java new file mode 100644 index 0000000..6068748 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/RpcApplyPerson.java @@ -0,0 +1,31 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class RpcApplyPerson { + + // + @TableId(value = "id") + private String id; + + // 申请id + @TableField("rpc_id") + private String rpcId; + + // 警号 + @TableField("emp_no") + private String empNo; + + // 提供救济 + @TableField("provide_relief") + private String provideRelief; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/RpcInfringerResult.java b/src/main/java/com/biutag/supervision/pojo/entity/RpcInfringerResult.java new file mode 100644 index 0000000..b1cc1d8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/RpcInfringerResult.java @@ -0,0 +1,35 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class RpcInfringerResult { + + // + @TableId(value = "id") + private String id; + + // + @TableField("rpc_id") + private String rpcId; + + // 侵权人 + @TableField("tort_name") + private String tortName; + + // 处理方式 + @TableField("defend_handle_way") + private String defendHandleWay; + + // 处理方式-名称 + @TableField("defend_handle_way_name") + private String defendHandleWayName; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/StatisticsDepart.java b/src/main/java/com/biutag/supervision/pojo/entity/StatisticsDepart.java new file mode 100644 index 0000000..203ebc6 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/StatisticsDepart.java @@ -0,0 +1,47 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class StatisticsDepart { + + // + @TableId(value = "departId") + private String departId; + + // + @TableField("name") + private String name; + + // + @TableField("level") + private Integer level; + + // + @TableField("groupId") + private String groupId; + + // + @TableField("pid") + private String pid; + + // 总人数 + @TableField("total") + private Integer total; + + // 警察人数 + @TableField("policeNumber") + private Integer policeNumber; + + // 辅警人数 + @TableField("auxiliaryPoliceNumber") + private Integer auxiliaryPoliceNumber; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/StatisticsGroup.java b/src/main/java/com/biutag/supervision/pojo/entity/StatisticsGroup.java new file mode 100644 index 0000000..bcc2fa3 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/StatisticsGroup.java @@ -0,0 +1,47 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class StatisticsGroup { + + // + @TableId(value = "groupId") + private String groupId; + + // + @TableField("name") + private String name; + + // + @TableField("level") + private Integer level; + + // + @TableField("remark") + private String remark; + + // + @TableField("type") + private String type; + + // + @TableField("pid") + private String pid; + + // 特殊处理, 为1为派出所 + @TableField("flag") + private String flag; + + // + @TableField("sort") + private Integer sort; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupDepart.java b/src/main/java/com/biutag/supervision/pojo/entity/SupDepart.java new file mode 100644 index 0000000..a2bc7c0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupDepart.java @@ -0,0 +1,84 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class SupDepart { + + // + @TableId + private String id; + + // + @TableField("type") + private String type; + + // + @TableField("category") + private String category; + + // + @TableField("code") + private String code; + + // + @TableField("name") + private String name; + + // + @TableField("short_name") + private String shortName; + + // + @TableField("domain_name") + private String domainName; + + // + @TableField("pid") + private String pid; + + // + @TableField("level") + private Integer level; + + // + @TableField("path_trace") + private String pathTrace; + + // + @TableField("is_hide") + private String isHide; + + // + @TableField("status") + private String status; + + // + @TableField("order_no") + private Integer orderNo; + + // + @TableField("version") + private String version; + + // + @TableField("status_updated_at") + private String statusUpdatedAt; + + // + @TableField("created_at") + private String createdAt; + + // + @TableField("updated_at") + private String updatedAt; + + private Boolean firstHost; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupDictData.java b/src/main/java/com/biutag/supervision/pojo/entity/SupDictData.java new file mode 100644 index 0000000..69aa063 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupDictData.java @@ -0,0 +1,73 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class SupDictData { + + // 字典编码 + @TableId(type = IdType.AUTO) + private Integer dictCode; + + // 字典排序 + @TableField("dict_sort") + private Integer dictSort; + + // 字典标签 + @TableField("dict_label") + private String dictLabel; + + // 字典键值 + @TableField("dict_value") + private String dictValue; + + // 字典类型 + @TableField("dict_type") + private String dictType; + + // 样式属性(其他样式扩展) + @TableField("css_class") + private String cssClass; + + // 表格回显样式 + @TableField("list_class") + private String listClass; + + // 是否默认(1是 0否) + @TableField("is_default") + private String isDefault; + + // 状态(0正常 1停用) + @TableField("status") + private String status; + + // 创建者 + @TableField("create_by") + private String createBy; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + + // 更新者 + @TableField("update_by") + private String updateBy; + + // 更新时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss") + @TableField("update_time") + private LocalDateTime updateTime; + + // 备注 + @TableField("remark") + private String remark; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupDictProblemSource.java b/src/main/java/com/biutag/supervision/pojo/entity/SupDictProblemSource.java new file mode 100644 index 0000000..11ec2b4 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupDictProblemSource.java @@ -0,0 +1,31 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class SupDictProblemSource { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("parent_id") + private Integer parentId; + + // + @TableField("label") + private String label; + + // + @TableField("sort") + private Integer sort; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupDictProblemType.java b/src/main/java/com/biutag/supervision/pojo/entity/SupDictProblemType.java new file mode 100644 index 0000000..a5e7048 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupDictProblemType.java @@ -0,0 +1,90 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class SupDictProblemType { + + @TableId(type = IdType.AUTO) + private Integer id; + + // 类型名称 + @TableField("name") + private String name; + + // 类型编码 + @TableField("code") + private String code; + + // 父级code + @TableField("parent_code") + private String parentCode; + + // 状态 + @TableField("status") + private String status; + + // 备注 + @TableField("remark") + private String remark; + + // 祖级列表 + @TableField("ancestors") + private String ancestors; + + // + @TableField("level") + private Integer level; + + // 排序 + @TableField("sort") + private Integer sort; + + @TableField("crt_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") + private LocalDateTime crtTime; + + @TableField("crt_user") + private String crtUser; + + // 创建单位 + @TableField("crt_depart_id") + private String crtDepartId; + + @TableField("crt_name") + private String crtName; + + @TableField("crt_host") + private String crtHost; + + // + @TableField("upd_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") + private LocalDateTime updTime; + + // + @TableField("upd_user") + private String updUser; + + // + @TableField("upd_name") + private String updName; + + // + @TableField("upd_host") + private String updHost; + + private Double score; + + // 是否开启严重等级 + private Boolean isActiveLevel; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupDictType.java b/src/main/java/com/biutag/supervision/pojo/entity/SupDictType.java new file mode 100644 index 0000000..033e2a8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupDictType.java @@ -0,0 +1,53 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class SupDictType { + + // 字典主键 + @TableId(type = IdType.AUTO) + private Long dictId; + + // 字典名称 + @TableField("dict_name") + private String dictName; + + // 字典类型 + @TableField("dict_type") + private String dictType; + + // 状态(0正常 1停用) + @TableField("status") + private String status; + + // 创建者 + @TableField("create_by") + private String createBy; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + + // 更新者 + @TableField("update_by") + private String updateBy; + + // 更新时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss") + @TableField("update_time") + private LocalDateTime updateTime; + + // 备注 + @TableField("remark") + private String remark; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupExternalDepart.java b/src/main/java/com/biutag/supervision/pojo/entity/SupExternalDepart.java new file mode 100644 index 0000000..22f9493 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupExternalDepart.java @@ -0,0 +1,63 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class SupExternalDepart { + + // id + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // 外部单位id + @TableField("external_id") + private String externalId; + + // 外部单位名称 + @TableField("external_name") + private String externalName; + + // 外部来源 + @TableField("source") + private String source; + + // 内部单位id + @TableField("internal_id") + private String internalId; + + // 内部单位名称 + @TableField("internal_name") + private String internalName; + + // 内部单位短名称 + @TableField("internal_short_name") + private String internalShortName; + + // 单位级别 + @TableField("level") + private Integer level; + + // 上级单位id + @TableField("pid") + private String pid; + + // 状态:0-启用,1-禁用 + @TableField("status") + private Integer status; + + // 创建时间 + @TableField("create_time") + private LocalDateTime createTime; + + // 更新时间 + @TableField("update_time") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/SupPolice.java b/src/main/java/com/biutag/supervision/pojo/entity/SupPolice.java new file mode 100644 index 0000000..1d22bc8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/SupPolice.java @@ -0,0 +1,151 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDate; + +@Setter +@Getter +public class SupPolice implements Serializable { + + + // + @TableId + private String id; + + // 账号id + @TableField("account_id") + private String accountId; + + // + @TableField("district_id") + private String districtId; + + // 组织机构id + @NotBlank + @TableField("org_id") + private String orgId; + + // 警号 + @NotBlank + @TableField("emp_no") + private String empNo; + + // + @TableField("job") + private String job; + + // 职位类型 + @TableField("job_type") + private String jobType; + + // + @TableField("manager_id") + private String managerId; + + // 电话 + @TableField("phone") + private String phone; + + // + @TableField("fax_no") + private String faxNo; + + // + @TableField("post_title") + private String postTitle; + + // 工作地址 + @TableField("work_address") + private String workAddress; + + // 账号 + @TableField("account") + private String account; + + // 手机号 + @TableField("mobile") + private String mobile; + + // + @TableField("email") + private String email; + + // 身份证 + @NotBlank + @TableField("id_code") + private String idCode; + + // 名称 + @TableField("display_name") + private String displayName; + + // 姓名 + @TableField("name") + private String name; + + // + @TableField("gender") + private String gender; + + // + @TableField("birthday") + private String birthday; + + // + @TableField("avatar_url") + private String avatarUrl; + + // + @TableField("status") + private String status; + + // + @TableField("hired_at") + private String hiredAt; + + // + @TableField("created_at") + private String createdAt; + + // + @TableField("updated_at") + private String updatedAt; + + // 类型 0 原始数据 1 协警 2 文员 3 临时工 + @TableField("type") + private String type; + + // + @TableField("person_status") + private String personStatus; + + // 职位 正职 副职 + private String position; + + // 人员属性 + private String personType; + + // 婚姻状况 + private String maritalStatus; + + // 子女 + private Boolean haveChildren; + + // 学历 + private String education; + + // 入职日期 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd") + private LocalDate employmentDate; + + // 警员角色 + private String policeRole; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/User.java b/src/main/java/com/biutag/supervision/pojo/entity/User.java new file mode 100644 index 0000000..e1e2269 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/entity/User.java @@ -0,0 +1,59 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class User { + + // + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // + @TableField("certificate_num") + private String certificateNum; + + // + @TableField("cert_eff_date") + private String certEffDate; + + // + @TableField("cert_exp_date") + private String certExpDate; + + // + @TableField("certificate_type") + private String certificateType; + + // + @TableField("name") + private String name; + + // + @TableField("phone") + private String phone; + + // + @TableField("real_lvl") + private String realLvl; + + // + @TableField("sex") + private String sex; + + // + @TableField("user_type") + private String userType; + + // + @TableField("yxd_id") + private String yxdId; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/model/BusinessPoliceModel.java b/src/main/java/com/biutag/supervision/pojo/model/BusinessPoliceModel.java new file mode 100644 index 0000000..8eafa07 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/BusinessPoliceModel.java @@ -0,0 +1,50 @@ +package com.biutag.supervision.pojo.model; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class BusinessPoliceModel { + // 警员姓名 + private String policeName; + + // 警号 + private String empNo; + + // 单位名称 + private String departName; + + // 单位类型 + private String groupName; + + // 110接处警 + private Integer jiechujing110; + + // 122接处警 + private Integer jiechujing122; + + // 身份证业务 + private Integer shenfenzhengyewu; + + // 执法办案(受案) + private Integer zhifabananSA; + + // 执法办案(立案) + private Integer zhifabananLA; + + // 执法办案(破案) + private Integer zhifabananPA; + + // 户口业务 + private Integer hukouyewu; + + // 出入境业务 + private Integer churujingyewu; + + // 车辆上牌 + private Integer cheliangshangpai; + + // 驾驶人考试 + private Integer jiashirenkaoshi; +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/DataRightsComfortModel.java b/src/main/java/com/biutag/supervision/pojo/model/DataRightsComfortModel.java new file mode 100644 index 0000000..f7b71f4 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/DataRightsComfortModel.java @@ -0,0 +1,28 @@ +package com.biutag.supervision.pojo.model; + +import com.biutag.supervision.pojo.dto.common.PieItem; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Setter +@Getter +public class DataRightsComfortModel { + // 维权案件总数 + // 受侵害人数 + // 抚慰人数 + private Integer comfortPersonNumber; + // 打击处理人数 + Integer hitPersonNumber; + // 抚慰金额(万元) + Double comfortMoney; + // 维权案件情况 + // 案件类别占比 + // 打处情况 + List punishmentSituation; + // 抚慰情况 + List comfortSituation; + // 民辅警受伤情况 + // 发案情况占比 +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/DepartNegativeModel.java b/src/main/java/com/biutag/supervision/pojo/model/DepartNegativeModel.java new file mode 100644 index 0000000..371a42f --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/DepartNegativeModel.java @@ -0,0 +1,27 @@ +package com.biutag.supervision.pojo.model; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author wxc + * @date 2024/11/1 + */ +@Setter +@Getter +public class DepartNegativeModel { + + private String departId; + private String departName; + private String parentDepartName; + // + //民警人数 + private Integer policeSize; + // + //协辅警人数 + private Integer auxSize; + // 查实问题涉及人数 + private Integer verifyPoliceSize; + // 查实问题数 + private Integer verifySize; +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/ModelClueModel.java b/src/main/java/com/biutag/supervision/pojo/model/ModelClueModel.java new file mode 100644 index 0000000..7b3b13d --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/ModelClueModel.java @@ -0,0 +1,51 @@ +package com.biutag.supervision.pojo.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * + * @author wxc + * @date 2024/10/16 + */ +@Setter +@Getter +public class ModelClueModel { + + private Integer id; + + private Integer modelId; + + private String modelName; + + private String involveDepartId; + // 涉及单位 + private String involveDepartName; + + private String involveParentDepartName; + + // 涉及人员 + private String involvePoliceName; + + // 涉及人员警号 + private String involvePoliceEmpNo; + + // 预警内容 + private String thingDesc; + + // 分发状态 + private String distributionState; + + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime createTime; + + private String data; + + private String negativeId; + + private String status; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/ModelClueTaskDepartModel.java b/src/main/java/com/biutag/supervision/pojo/model/ModelClueTaskDepartModel.java new file mode 100644 index 0000000..fc42caf --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/ModelClueTaskDepartModel.java @@ -0,0 +1,33 @@ +package com.biutag.supervision.pojo.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author wxc + * @date 2024/10/17 + */ +@Setter +@Getter +public class ModelClueTaskDepartModel { + + private String departId; + + // 模型名称 + private String departName; + + // 条数 + private Integer size; + + private Integer completedSize; + + private Double completedRate; + + private Integer verifySize; + + private Integer personalSize; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/ModelClueTaskModel.java b/src/main/java/com/biutag/supervision/pojo/model/ModelClueTaskModel.java new file mode 100644 index 0000000..003bfdf --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/ModelClueTaskModel.java @@ -0,0 +1,40 @@ +package com.biutag.supervision.pojo.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @author wxc + * @date 2024/10/17 + */ +@Setter +@Getter +public class ModelClueTaskModel { + + private Integer id; + + // 任务名称 + private String taskName; + + // 模型名称 + private String modelName; + + // 下发时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime distributionTime; + + // 条数 + private Integer size; + + private Integer completedSize; + + private Integer verifySize; + + private Integer departSize; + + private Integer personalSize; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/NegativeFavModel.java b/src/main/java/com/biutag/supervision/pojo/model/NegativeFavModel.java new file mode 100644 index 0000000..00537e7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/NegativeFavModel.java @@ -0,0 +1,55 @@ +package com.biutag.supervision.pojo.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegativeFavModel { + + private String negativeId; + + private String originId; + + // 问题发生时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime happenTime; + + // 问题发现时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime discoveryTime; + + // 问题来源 + private String problemSources; + + // 问题内容 + private String thingDesc; + + // 联系电话 + private String contactPhone; + + // 业务类型 + private String businessTypeCode; + + // 业务类别名称 + private String businessTypeName; + + // 涉及警种名称 + private String policeTypeName; + + // 涉及警种 + private String policeType; + + // 涉及单位名称 + private String involveDepartName; + + // 涉及单位 + private String involveDepartId; + + // 部门ID(工作表) + private String workDepartId; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/NegativeWorkModel.java b/src/main/java/com/biutag/supervision/pojo/model/NegativeWorkModel.java new file mode 100644 index 0000000..d61117f --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/NegativeWorkModel.java @@ -0,0 +1,90 @@ +package com.biutag.supervision.pojo.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegativeWorkModel { + + private Integer id; + + private String negativeId; + + private String originId; + + // 问题发生时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime happenTime; + + // 问题发现时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime discoveryTime; + + // 问题来源 + private String problemSources; + + // 问题内容 + private String thingDesc; + + // 联系电话 + private String contactPhone; + + private String responderName; + + // 业务类型 + private String businessTypeCode; + + // 业务类别名称 + private String businessTypeName; + + // 涉及警种名称 + private String policeTypeName; + + // 涉及警种 + private String policeType; + + // 涉及单位名称 + private String involveDepartName; + + // 涉及单位 + private String involveDepartId; + + // 部门ID(工作表) + private String workDepartId; + + // 办理状态 + private String processingStatus; + + private String flowKey; + + // 市局下发时间 + private LocalDateTime firstDistributeTime; + + // 最大签收时长(天) + private Integer maxSignDuration; + + // 最大办理时长(天) + private Integer maxHandleDuration; + + // 延期天数 + private Integer extensionDays; + + // 办理剩余时长 + private Long remainingDuration; + + private String handleSecondDepartId; + + private String handleSecondDepartName; + + private String handleThreeDepartId; + + private String handleThreeDepartName; + + // 涉嫌问题 + private String involveProblem; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/PoliceModel.java b/src/main/java/com/biutag/supervision/pojo/model/PoliceModel.java new file mode 100644 index 0000000..793a6dc --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/PoliceModel.java @@ -0,0 +1,112 @@ +package com.biutag.supervision.pojo.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class PoliceModel { + + private String id; + + // 账号id + private String accountId; + + private String districtId; + + // 组织机构id + private String orgId; + + // 警号 + private String empNo; + + private String job; + + // 职位类型 + private String jobType; + + private String managerId; + + // 电话 + private String phone; + + private String faxNo; + + private String postTitle; + + // 工作地址 + private String workAddress; + + // 账号 + private String account; + + // 手机号 + private String mobile; + + // + private String email; + + // 身份证 + private String idCode; + + // 名称 + private String displayName; + + // 姓名 + @TableField("name") + private String name; + + private String gender; + + private String birthday; + + private String avatarUrl; + + private String status; + + // 类型 0 原始数据 1 协警 2 文员 3 临时工 + private String type; + + private String personStatus; + + // 组织机构名称 + private String departName; + + private String departShortName; + + private String parentDepartShortName; + + private String position; + + // 人员属性 + private String personType; + + // 婚姻状况 + private String maritalStatus; + + // 子女 + private Boolean haveChildren; + + // 学历 + private String education; + + private String createdAt; + + private String updatedAt; + + @JsonFormat(pattern="yyyy-MM-dd") + private LocalDateTime employmentDate; + + // 警员角色 + private String policeRole; + + private Integer level; + + private String role; + + +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/UserAuth.java b/src/main/java/com/biutag/supervision/pojo/model/UserAuth.java new file mode 100644 index 0000000..2915246 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/UserAuth.java @@ -0,0 +1,35 @@ +package com.biutag.supervision.pojo.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +@Accessors(chain = true) +@Setter +@Getter +public class UserAuth implements Serializable { + + private String userId; + + private String userName; + + private String userType; + + private String nickName; + + private String departId; + + private String departName; + + // 角色编号 + private List roleCodes; + + // 权限(问题来源) + private List authSources; + + private List authDepartIds; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/model/UserModel.java b/src/main/java/com/biutag/supervision/pojo/model/UserModel.java new file mode 100644 index 0000000..a29c3c7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/model/UserModel.java @@ -0,0 +1,48 @@ +package com.biutag.supervision.pojo.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.List; + +@Setter +@Getter +public class UserModel { + + private String userId; + + // 登陆账号 + private String userName; + + // 昵称 + private String nickName; + + // 头像 + private String avatar; + + // 邮箱 + private String email; + + // 手机号 + private String mobile; + + // 用户类型:super-超级管理员 normal-普通管理员 + private String userType; + + // 描述 + private String userDesc; + + // 更新时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + // 状态:0-禁用 1-正常 2-锁定 + private Integer status; + + private List roleIds; + + private List roleNames; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/BasePage.java b/src/main/java/com/biutag/supervision/pojo/param/BasePage.java new file mode 100644 index 0000000..c259aec --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/BasePage.java @@ -0,0 +1,14 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class BasePage { + + private long current = 1; + private long size = 10; + + +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/BusinessQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/BusinessQueryParam.java new file mode 100644 index 0000000..ea13eda --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/BusinessQueryParam.java @@ -0,0 +1,30 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Setter +@Getter +public class BusinessQueryParam { + private long current = 1; + private long size = 10; + @DateTimeFormat(pattern = "yyyy-MM-dd") + private List happenTime = new ArrayList<>(); + // 姓名 + private String policeName; + // 警号 + private String empNo; + // 单位名称 + private String departName; + // 单位类型 + private String groupName; + // 排序字段 + private String sortField; + // 排序顺序(ASC 或 DESC) + private String sortOrder; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/DataCaseVerifQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/DataCaseVerifQueryParam.java new file mode 100644 index 0000000..84ffd85 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/DataCaseVerifQueryParam.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author wxc + * @date 2024/10/15 + */ +@Setter +@Getter +public class DataCaseVerifQueryParam extends BasePage { + + private String originId; + + private String responderKey; + + private String responderValue; + + private String thingDesc; + + private String distributionState; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/DataPetitionComplaintQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/DataPetitionComplaintQueryParam.java new file mode 100644 index 0000000..6306ba1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/DataPetitionComplaintQueryParam.java @@ -0,0 +1,29 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Setter +@Getter +public class DataPetitionComplaintQueryParam extends BasePage { + + // 来源 + private String problemSourcesCode; + + private String responderKey; + + private String responderValue; + + private String originId; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List discoveryTime = new ArrayList<>(); + + private String thingDesc; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/DepartNegativeQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/DepartNegativeQueryParam.java new file mode 100644 index 0000000..1743c4d --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/DepartNegativeQueryParam.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author wxc + * @date 2024/11/1 + */ +@Setter +@Getter +public class DepartNegativeQueryParam extends BasePage { + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List crtTime = new ArrayList<>(); + private String departName; + private String departId; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/DepartQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/DepartQueryParam.java new file mode 100644 index 0000000..8f6a092 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/DepartQueryParam.java @@ -0,0 +1,16 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class DepartQueryParam extends BasePage { + + private String shortName; + + private String name; + + private String code; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/DepartTreeListParam.java b/src/main/java/com/biutag/supervision/pojo/param/DepartTreeListParam.java new file mode 100644 index 0000000..f2fa5be --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/DepartTreeListParam.java @@ -0,0 +1,13 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class DepartTreeListParam { + + private String pid; + + +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/ModelClueQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/ModelClueQueryParam.java new file mode 100644 index 0000000..e5513dd --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/ModelClueQueryParam.java @@ -0,0 +1,29 @@ +package com.biutag.supervision.pojo.param; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author wxc + * @date 2024/10/16 + */ +@Setter +@Getter +public class ModelClueQueryParam extends BasePage { + private List modelIds; + private String modelType; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List createTime = new ArrayList<>(); + private Integer involveDepartId; + private String thingDesc; + private String distributionState; + private String distributionMethod; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/ModelClueTaskQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/ModelClueTaskQueryParam.java new file mode 100644 index 0000000..c2a3bc2 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/ModelClueTaskQueryParam.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author wxc + * @date 2024/10/16 + */ +@Setter +@Getter +public class ModelClueTaskQueryParam extends BasePage { + private List modelIds; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List distributionTime = new ArrayList<>(); + private String taskName; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/ModelQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/ModelQueryParam.java new file mode 100644 index 0000000..c7ffaec --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/ModelQueryParam.java @@ -0,0 +1,15 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class ModelQueryParam extends BasePage { + + private String modelName; + + private String distributionMethod; + + private Integer classId; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/NegativeQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/NegativeQueryParam.java new file mode 100644 index 0000000..8ca3e67 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/NegativeQueryParam.java @@ -0,0 +1,56 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Setter +@Getter +public class NegativeQueryParam extends BasePage { + + private String originId; + + // 问题发生时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List happenTime = new ArrayList<>(); + + // 问题发现时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List discoveryTime = new ArrayList<>(); + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List crtTime = new ArrayList<>(); + + private String responderKey; + + private String responderValue; + + private String flowKey; + + // 办理状态 + private List processingStatus = new ArrayList<>(); + + private String thingDesc; + + private String problemSourcesCode; + + private String businessTypeCode; + + private String checkStatus; + + private List checkStatusList = new ArrayList<>(); + + private String isRectifyCode; + + // 是否超时 + private Boolean timeoutFlag; + + private String involveDepartId; + + private String handleDepartId; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/NegativeTaskQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/NegativeTaskQueryParam.java new file mode 100644 index 0000000..96c0c10 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/NegativeTaskQueryParam.java @@ -0,0 +1,20 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Setter +@Getter +public class NegativeTaskQueryParam extends BasePage { + + private String taskName; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List crtTime = new ArrayList<>(); + +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/PoliceQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/PoliceQueryParam.java new file mode 100644 index 0000000..f2126ae --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/PoliceQueryParam.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class PoliceQueryParam extends BasePage { + + private String name; + private String empNo; + private String idCode; + private String phone; + private String departId; + // 当前单位及其所有子单位 + private Boolean departBranch; + private String roleId; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/RoleQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/RoleQueryParam.java new file mode 100644 index 0000000..c897e44 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/RoleQueryParam.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class RoleQueryParam { + + private String roleName; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/UserQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/UserQueryParam.java new file mode 100644 index 0000000..2080e06 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/UserQueryParam.java @@ -0,0 +1,16 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Setter +@Getter +public class UserQueryParam extends BasePage { + + private String userName; + private String nickName; + private List roleId; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/WorkParam.java b/src/main/java/com/biutag/supervision/pojo/param/WorkParam.java new file mode 100644 index 0000000..5f624b1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/WorkParam.java @@ -0,0 +1,24 @@ +package com.biutag.supervision.pojo.param; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Setter +@Getter +public class WorkParam extends BasePage { + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private List happenTime = new ArrayList<>(); + private String problemSourcesCode; + private String businessTypeCode; + private String involveProblem; + private String thingDesc; + private String involveDepartId; + private String handleThreeDepartId; + private String processingStatus; +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/DepartTree.java b/src/main/java/com/biutag/supervision/pojo/vo/DepartTree.java new file mode 100644 index 0000000..19a0a90 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/DepartTree.java @@ -0,0 +1,41 @@ +package com.biutag.supervision.pojo.vo; + +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@Setter +@Getter +public class DepartTree { + + private String id; + + private String pid; + + private String type; + + private String category; + + private String code; + + private String name; + + private String shortName; + + private Integer level; + + private String status; + + private Integer orderNo; + + private String updatedAt; + + private List children = new ArrayList<>(); + + private boolean hasChildren = false; + + private Boolean firstHost; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/DictContentTree.java b/src/main/java/com/biutag/supervision/pojo/vo/DictContentTree.java new file mode 100644 index 0000000..49ebec1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/DictContentTree.java @@ -0,0 +1,48 @@ +package com.biutag.supervision.pojo.vo; + +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 DictContentTree { + + private Integer id; + + // 类型名称 + private String name; + + // 类型编码 + private String code; + + // 父级code + private String parentCode; + + // 状态 + private String status; + + // 备注 + private String remark; + + + // + private Integer level; + + // 排序 + private Integer sort; + + private Double score; + + // 是否开启严重等级 + private Boolean isActiveLevel; + + @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss") + private LocalDateTime updTime; + + private List children = new ArrayList<>(); +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/DictProblemSourceTree.java b/src/main/java/com/biutag/supervision/pojo/vo/DictProblemSourceTree.java new file mode 100644 index 0000000..b6a0203 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/DictProblemSourceTree.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.pojo.vo; + +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@Setter +@Getter +public class DictProblemSourceTree { + + private Integer id; + + private Integer parentId; + + private String label; + + private Integer sort; + + private List children = new ArrayList<>(); + +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/ExportNegativeVo.java b/src/main/java/com/biutag/supervision/pojo/vo/ExportNegativeVo.java new file mode 100644 index 0000000..7aec4d0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/ExportNegativeVo.java @@ -0,0 +1,80 @@ +package com.biutag.supervision.pojo.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class ExportNegativeVo { + + @ExcelProperty("样本源头编号") + private String originId; + + // 问题发生时间 + @ExcelProperty("问题发生时间") + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime happenTime; + + // 问题发现时间 + @ExcelProperty("问题发现时间") + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime discoveryTime; + + // 问题来源 + @ExcelProperty("问题来源") + private String problemSources; + + // 业务类别名称 + @ExcelProperty("业务类别") + private String businessTypeName; + + // 涉嫌问题 JSON + @ExcelProperty("涉嫌问题") + private String involveProblem; + + // 简要描述 + @ExcelProperty("简要描述") + private String thingDesc; + + // 反映人姓名 + @ExcelProperty("投诉反映人") + private String responderName; + + // 联系电话 + @ExcelProperty("联系电话") + private String contactPhone; + + // 涉及警种名称 + @ExcelProperty("涉及警种") + private String policeTypeName; + + // 涉及单位名称 + @ExcelProperty("涉及单位") + private String involveDepartName; + + // 办理状态 + @ExcelProperty("办理状态") + private String processingStatus; + + // 办理单位 二级 + @ExcelProperty("办理单位(二级)") + private String handleSecondDepartName; + + // 办理单位 三级 + @ExcelProperty("办理单位(三级)") + private String handleThreeDepartName; + + // 核查情况 + @ExcelProperty("核查情况") + private String checkStatusName; + + // 是否整改 + @ExcelProperty("是否整改") + private String isRectifyName; + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/vo/FileVo.java b/src/main/java/com/biutag/supervision/pojo/vo/FileVo.java new file mode 100644 index 0000000..10b8576 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/FileVo.java @@ -0,0 +1,19 @@ +package com.biutag.supervision.pojo.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Accessors(chain = true) +@Setter +@Getter +public class FileVo { + + private String filePath; + + private String fileName; + + private Integer fileClassId; + + +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/MenuTree.java b/src/main/java/com/biutag/supervision/pojo/vo/MenuTree.java new file mode 100644 index 0000000..0350ebd --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/MenuTree.java @@ -0,0 +1,67 @@ +package com.biutag.supervision.pojo.vo; + +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.pojo.entity.Menu; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.BeanUtils; + +import java.time.LocalDateTime; +import java.util.List; + +@Setter +@Getter +public class MenuTree { + + private Integer id; + + private Integer pid; + + // 菜单类型 + private String menuType; + + // 菜单名称 + private String menuName; + + // 菜单图标 + private String icon; + + // 路径 + private String paths; + + private String component; + + // 排序 + private Integer menuSort; + + private String perms; + + private Integer isCache; + + private Integer isShow; + + private Integer isDisable; + + // 是否打开新页面 默认为false + private Boolean openNewPage; + + @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + private List children; + + public static List buildTree(List list) { + return buildTree(list, AppConstants.MENU_ROOT_ID); + } + + public static List buildTree(List list, Integer pid) { + return list.stream().filter(item -> pid.equals(item.getPid())).map(item -> { + MenuTree menuTree = new MenuTree(); + BeanUtils.copyProperties(item, menuTree); + menuTree.setChildren(buildTree(list, item.getId())); + return menuTree; + }).toList(); + } + +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/ModelTree.java b/src/main/java/com/biutag/supervision/pojo/vo/ModelTree.java new file mode 100644 index 0000000..05db427 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/ModelTree.java @@ -0,0 +1,34 @@ +package com.biutag.supervision.pojo.vo; + +import com.biutag.supervision.pojo.entity.Model; +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wxc + * @date 2024/10/15 + */ +@Setter +@Getter +public class ModelTree { + + private Integer value; + + private String label; + + private String type; + + private List children = new ArrayList<>(); + + public static ModelTree of(Model model) { + ModelTree child = new ModelTree(); + child.setValue(model.getId()); + child.setLabel(model.getModelName()); + child.setType("model"); + return child; + } + +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/NegativeQueryVo.java b/src/main/java/com/biutag/supervision/pojo/vo/NegativeQueryVo.java new file mode 100644 index 0000000..4eeb262 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/NegativeQueryVo.java @@ -0,0 +1,185 @@ +package com.biutag.supervision.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class NegativeQueryVo { + + private String id; + + // 样本来源编号 + private String originId; + + // 编号 + private String serialNumber; + + // 问题发生时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime happenTime; + + // 问题发现时间 + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime discoveryTime; + + // 问题来源code + private String problemSourcesCode; + + // 问题来源 + private String problemSources; + + // 联系电话 + private String contactPhone; + + // 反映人姓名 + private String responderName; + + // 反映人部门id + private String responderDepartId; + + // 反映人部门名称 + private String responderDepartName; + + // 涉及人身份证 + private String responderIdCard; + + // 业务类型 + private String businessTypeCode; + + // 业务类别名称 + private String businessTypeName; + + // 涉嫌问题JSON + private String involveProblem; + + // 涉及警种名称 + private String policeTypeName; + + // 涉及警种 + private String policeType; + + // 涉及单位名称 + private String involveDepartName; + + // 涉及单位 + private String involveDepartId; + + // 简要描述 + private String thingDesc; + + + // 审核人姓名 + private String checkName; + + // 审核人身份证 + private String checkIdCode; + + @JsonFormat(pattern = "YYYY-MM-dd HH:mm") + private LocalDateTime crtTime; + + + private LocalDateTime updTime; + + // 0 正常 1 禁用 + private String status; + + private String remark; + + + // 核查情况 + private String checkStatus; + + // 核查情况 + private String checkStatusName; + + // 完善状态 0 -- 待完善 1 -- 已完善 + private String completeStatus; + + + private String supervisionSubjectCode; + + private String supervisionSubjectName; + + // 是否整改 + private String isRectifyCode; + + // 是否整改 + private String isRectifyName; + + // 办结时间 + private LocalDateTime completeDate; + + //--------------------------------------------- + + private String flowKey; + + // 主办层级 + private String hostLevel; + + // 办理时限 + private String timeLimit; + + // 最大签收时长(天) + private Integer maxSignDuration; + + // 最大办理时长(天) + private Integer maxHandleDuration; + + // 最大延期时长(天) + private Integer maxExtensionDuration; + + // 审批流程 + private String approvalFlow; + + // 问题核查情况 + private String checkStatusDesc; + + + // 整改限制天数 + private Integer rectifyRestrictionDays; + + // 追责对象 + private String accountabilityTarget; + + // 办理状态 + private String processingStatus; + + // 延期申请ID + private Integer negativeExtensionApplyId; + + // 是否能申请延期 true = 能 false = 不能 + private Boolean extensionApplyFlag; + + // 延期天数 + private Integer extensionDays; + + // 市局下发时间 + private LocalDateTime firstDistributeTime; + + // 是否是二级机构办理 true=是 false=否 + private Boolean isSecondHandle; + + private String handleSecondDepartId; + + private String handleSecondDepartName; + + private String handleThreeDepartId; + + private String handleThreeDepartName; + + private String caseNumber; + + // 办理剩余时长 + private Long remainingDuration; + + // 办理超时(秒) + private Long handleTimeout; + + // 当前处理对象 + private String currentProcessingObject; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/Route.java b/src/main/java/com/biutag/supervision/pojo/vo/Route.java new file mode 100644 index 0000000..2eec120 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/Route.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.pojo.vo; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class Route { + + private String path; +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/TokenVo.java b/src/main/java/com/biutag/supervision/pojo/vo/TokenVo.java new file mode 100644 index 0000000..d8cc323 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/vo/TokenVo.java @@ -0,0 +1,14 @@ +package com.biutag.supervision.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Accessors(chain = true) +@Setter +@Getter +public class TokenVo { + + private String token; +} diff --git a/src/main/java/com/biutag/supervision/service/BaseAccountService.java b/src/main/java/com/biutag/supervision/service/BaseAccountService.java new file mode 100644 index 0000000..39030f2 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/BaseAccountService.java @@ -0,0 +1,20 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.BaseAccount; +import com.biutag.supervision.mapper.BaseAccountMapper; +import org.springframework.stereotype.Service; + +@Service +public class BaseAccountService extends ServiceImpl { + + public BaseAccount getByAccount(String account) { + return getOne(new LambdaQueryWrapper().eq(BaseAccount::getAccount, account)); + } + + public BaseAccount getByLogin(String account) { + return baseMapper.selectByLogin(account); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/BaseRoleService.java b/src/main/java/com/biutag/supervision/service/BaseRoleService.java new file mode 100644 index 0000000..3ea8d9d --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/BaseRoleService.java @@ -0,0 +1,32 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.BaseRole; +import com.biutag.supervision.mapper.BaseRoleMapper; +import com.biutag.supervision.pojo.entity.BaseRoleUser; +import com.biutag.supervision.pojo.param.RoleQueryParam; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@RequiredArgsConstructor +@Service +public class BaseRoleService extends ServiceImpl { + + private final BaseRoleUserService roleUserService; + + public List listByUserId(String userId) { + List baseRoleUsers = roleUserService.listByUserId(userId); + return listByIds(baseRoleUsers.stream().map(BaseRoleUser::getRoleId).toList()); + } + + public List list(RoleQueryParam roleQueryParam) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(StrUtil.isNotBlank(roleQueryParam.getRoleName()), BaseRole::getRoleName, roleQueryParam.getRoleName()); + return list(queryWrapper); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/BaseRoleUserService.java b/src/main/java/com/biutag/supervision/service/BaseRoleUserService.java new file mode 100644 index 0000000..11e48f2 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/BaseRoleUserService.java @@ -0,0 +1,23 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.BaseRole; +import com.biutag.supervision.pojo.entity.BaseRoleUser; +import com.biutag.supervision.mapper.BaseRoleUserMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class BaseRoleUserService extends ServiceImpl { + + public List listByUserId(String userId) { + return list(new LambdaQueryWrapper().eq(BaseRoleUser::getUserId, userId)); + } + + public boolean remove(String userId) { + return remove(new LambdaQueryWrapper().eq(BaseRoleUser::getUserId, userId)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/BaseUserService.java b/src/main/java/com/biutag/supervision/service/BaseUserService.java new file mode 100644 index 0000000..a1dd2f1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/BaseUserService.java @@ -0,0 +1,92 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.BaseUserMapper; +import com.biutag.supervision.pojo.dto.UserDto; +import com.biutag.supervision.pojo.entity.BaseRole; +import com.biutag.supervision.pojo.entity.BaseRoleUser; +import com.biutag.supervision.pojo.entity.BaseUser; +import com.biutag.supervision.pojo.model.UserModel; +import com.biutag.supervision.pojo.param.UserQueryParam; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@Service +public class BaseUserService extends ServiceImpl { + + private final BaseRoleUserService roleUserService; + + private final BaseRoleService roleService; + + public Page page(UserQueryParam queryParam) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .like(StrUtil.isNotBlank(queryParam.getUserName()), BaseUser::getUserName, queryParam.getUserName()) + .like(StrUtil.isNotBlank(queryParam.getNickName()), BaseUser::getNickName, queryParam.getNickName()); + if (Objects.nonNull(queryParam.getRoleId()) && !queryParam.getRoleId().isEmpty()) { + List userIds = roleUserService.list(new LambdaQueryWrapper() + .in(BaseRoleUser::getRoleId, queryParam.getRoleId())).stream().map(BaseRoleUser::getUserId).toList(); + if (userIds.isEmpty()) { + return new Page().setTotal(0).setRecords(new ArrayList<>()); + } + queryWrapper.in(BaseUser::getUserId, userIds); + } + Page baseUserPage = page(Page.of(queryParam.getCurrent(), queryParam.getSize()), queryWrapper); + if (baseUserPage.getRecords().isEmpty()) { + return new Page().setRecords(new ArrayList<>()).setTotal(0); + } + List roleUsers = roleUserService.list(new LambdaQueryWrapper() + .in(BaseRoleUser::getUserId, baseUserPage.getRecords().stream().map(BaseUser::getUserId).toList())); + List roleList; + if (!roleUsers.isEmpty()) { + roleList = roleService.listByIds(roleUsers.stream().map(BaseRoleUser::getRoleId).collect(Collectors.toSet())); + } else { + roleList = new ArrayList<>(); + } + List records = baseUserPage.getRecords().stream().map(item -> { + UserModel userModel = new UserModel(); + BeanUtils.copyProperties(item, userModel); + List roleIds = roleUsers.stream().filter(roleUser -> item.getUserId().equals(roleUser.getUserId())).map(BaseRoleUser::getRoleId).toList(); + userModel.setRoleIds(roleIds); + List roleNames = roleList.stream().filter(role -> roleIds.contains(role.getRoleId())).map(BaseRole::getRoleName).toList(); + userModel.setRoleNames(roleNames); + return userModel; + }).toList(); + return new Page().setRecords(records).setTotal(baseUserPage.getTotal()); + } + + public BaseUser getByUserName(String userName) { + return getOne(new LambdaQueryWrapper().eq(BaseUser::getUserName, userName)); + } + + @DS("slave") + public boolean update(UserDto userDto) { + BaseUser baseUser = new BaseUser(); + BeanUtils.copyProperties(userDto, baseUser); + baseUser.setUpdateTime(LocalDateTime.now()); + if (!userDto.getRoleIds().isEmpty()) { + roleUserService.remove(userDto.getUserId()); + roleUserService.saveBatch(userDto.getRoleIds().stream().map(roleId -> { + BaseRoleUser baseRoleUser = new BaseRoleUser(); + baseRoleUser.setUserId(userDto.getUserId()); + baseRoleUser.setRoleId(roleId); + baseRoleUser.setCreateTime(LocalDateTime.now()); + baseRoleUser.setUpdateTime(LocalDateTime.now()); + return baseRoleUser; + }).toList()); + } + return updateById(baseUser); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/BusinessDepartService.java b/src/main/java/com/biutag/supervision/service/BusinessDepartService.java new file mode 100644 index 0000000..b95a48a --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/BusinessDepartService.java @@ -0,0 +1,282 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.*; +import com.biutag.supervision.pojo.entity.BusinessDepart; +import com.biutag.supervision.pojo.entity.BusinessLog; +import com.biutag.supervision.pojo.entity.GBaseAJJBXX; +import com.biutag.supervision.pojo.entity.GBaseJJD; +import com.biutag.supervision.pojo.model.BusinessPoliceModel; +import com.biutag.supervision.pojo.model.DataRightsComfortModel; +import com.biutag.supervision.pojo.param.BusinessQueryParam; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.BatchResult; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@RequiredArgsConstructor +@Service +public class BusinessDepartService extends ServiceImpl { + + private final GBaseJJDMapper gBaseJJDMapper; + + private final StatisticsDepartMapper statisticsDepartMapper; + + private final StatisticsGroupMapper statisticsGroupMapper; + + private final BusinessLogMapper businessLogMapper; + + private final ModelClueService modelClueService; + + private final SupExternalDepartService externalDepartService; + + private final GBaseAJJBXXMapper gBaseAJJBXXMapper; + + private final SupExternalDepartMapper supExternalDepartMapper; + + private final DataRightsComfortService dataRightsComfortService; + + public Page page(BusinessQueryParam businessQueryParam) { + // 测基础数据 + if (businessQueryParam.getDepartName() != null && businessQueryParam.getDepartName().equals("开始导入今年所有的数据")) { + LocalDate start = LocalDate.parse("2024-01-01"); + LocalDate end = LocalDate.parse("2024-10-31"); + for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) { + List happenTime = new ArrayList<>(); + Date startDate = Date.from(date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()); + Date endDate = Date.from(date.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); + happenTime.add(startDate); + happenTime.add(endDate); + generate(happenTime); + log.info("已经导入{}的单位数据", date.format(DateTimeFormatter.ofPattern("yyyy年M月d日"))); + } + } else if (businessQueryParam.getDepartName() != null && businessQueryParam.getDepartName().equals("开始导入今天所有的数据")) { + List happenTime = new ArrayList<>(); + Date start = Date.from(LocalDateTime.parse("2024-09-17T00:00:00", DateTimeFormatter.ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant()); + Date end = Date.from(LocalDateTime.parse("2024-09-17T23:59:59", DateTimeFormatter.ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant()); + happenTime.add(start); + happenTime.add(end); + generate(happenTime); + } + // 测模型 + String departName = businessQueryParam.getDepartName(); + if (departName != null && departName.startsWith("运行测试")) { + int testNumber = Integer.parseInt(departName.substring(4)); + System.out.println("开始执行测试" + testNumber); + modelClueService.generate(testNumber); + System.out.println("测试" + testNumber + "执行完毕"); + } + if (departName != null && departName.equals("测大屏")) { + Date beginTime = Date.from(LocalDateTime.parse("2024-10-01T00:00:00", DateTimeFormatter.ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant()); + Date endTime = Date.from(LocalDateTime.parse("2024-10-02T00:00:00", DateTimeFormatter.ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant()); + DataRightsComfortModel result = new DataRightsComfortModel(); + + int i = 0; + } + // 测导入单位关联表 + if (businessQueryParam.getDepartName() != null && businessQueryParam.getDepartName().equals("导入单位")) { + System.out.println("开始导入单位"); + externalDepartService.insertPreData(); + System.out.println("导入单位完毕"); + return null; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper + .like(StrUtil.isNotBlank(businessQueryParam.getDepartName()), "depart_name", businessQueryParam.getDepartName()) + .eq(StrUtil.isNotBlank(businessQueryParam.getGroupName()), "group_name", businessQueryParam.getGroupName()) + .groupBy("depart_name") + .orderBy(StrUtil.isNotBlank(businessQueryParam.getSortField()), businessQueryParam.getSortOrder().equals("ASC"), businessQueryParam.getSortField()); + if (businessQueryParam.getHappenTime().size() == 2) { + queryWrapper.between("date", businessQueryParam.getHappenTime().get(0), businessQueryParam.getHappenTime().get(1)); + } + return baseMapper.queryPage(Page.of(businessQueryParam.getCurrent(), businessQueryParam.getSize()), queryWrapper); + } + + public void generate(List happenTime) { + List businessDepartList = new ArrayList<>(); + List gBaseJJDSList = selectJJDList(happenTime); + List gBaseAJJBXXListSA = selectAJJBXX(1, happenTime); + List gBaseAJJBXXListLA = selectAJJBXX(2, happenTime); + List gBaseAJJBXXListPA = selectAJJBXX(3, happenTime); + if (gBaseJJDSList.isEmpty() && gBaseAJJBXXListSA.isEmpty() && gBaseAJJBXXListLA.isEmpty() && gBaseAJJBXXListPA.isEmpty()) { + businessLogMapper.insert(new BusinessLog().setType("单位业务数据").setNum(0).setCreateTime(LocalDateTime.now())); + log.info("{}没有单位数据", happenTime.get(0)); + return; + } + List departIds = new ArrayList<>(); + generateDepartIds(gBaseJJDSList, departIds, gBaseAJJBXXListSA, gBaseAJJBXXListLA, gBaseAJJBXXListPA); + if (departIds.isEmpty()) { + return; + } + List> idsByDepartIds = supExternalDepartMapper.getIdsByDepartIds(departIds);// 430100221100-1011 + Map resultMap2 = idsByDepartIds.stream().filter(map -> map.get("external_id") != null).collect(Collectors.toMap( + map -> (String) map.get("external_id"), + map -> map.get("internal_id") == null ? "" : (String) map.get("internal_id") + )); + List values = resultMap2.values().stream().filter(Objects::nonNull).toList();// 1011 + Map resultMap3 = idsByDepartIds.stream().filter(map -> map.get("external_id") != null).collect(Collectors.toMap( + map -> (String) map.get("external_id"), + map -> map.get("internal_short_name") == null ? "" : (String) map.get("internal_short_name") + )); + List> resultList = new ArrayList<>(); + if (!values.isEmpty()) { + resultList = statisticsDepartMapper.getGroupIdsByDepartIds(values); + } + if (resultList.isEmpty()) { + businessLogMapper.insert(new BusinessLog().setType("单位业务数据").setNum(0).setCreateTime(LocalDateTime.now())); + log.info("{}没有单位数据", happenTime.get(0)); + return; + } + Map resultMap = resultList.stream().collect(Collectors.toMap(map -> (String) map.get("departId"), map -> (Long) map.get("groupId"))); + List groupIds = new ArrayList<>(); + generateBusinessDepartList(happenTime, gBaseJJDSList, resultMap, resultMap2, resultMap3, groupIds, businessDepartList, gBaseAJJBXXListSA, gBaseAJJBXXListLA, gBaseAJJBXXListPA); + List> nameList = statisticsGroupMapper.getNameByGroupIds(groupIds); + Map names = nameList.stream().collect(Collectors.toMap(map -> (Long) map.get("groupId"), map -> (String) map.get("name"))); + for (BusinessDepart businessDepart : businessDepartList) { + businessDepart.setGroupName(names.get(businessDepart.getGroupId())); + businessDepart.setCreateTime(LocalDateTime.now()); + } + log.info("单位业务数据准备插入:{}", businessDepartList.size()); + List insert = baseMapper.insert(businessDepartList); + log.info("单位业务数据插入成功"); + int actualNum = (int) Arrays.stream(insert.get(0).getUpdateCounts()).parallel().filter(num -> num != 0).count(); + businessLogMapper.insert(new BusinessLog().setType("单位业务数据").setNum(gBaseJJDSList.size() + gBaseAJJBXXListSA.size() + gBaseAJJBXXListLA.size() + gBaseAJJBXXListPA.size()).setActualNum(actualNum).setCreateTime(LocalDateTime.now())); + } + + private static void generateBusinessDepartList(List happenTime, List gBaseJJDSList, Map resultMap, Map resultMap2, Map resultMap3, List groupIds, List businessDepartList, List gBaseAJJBXXListSA, List gBaseAJJBXXListLA, List gBaseAJJBXXListPA) { + for (GBaseJJD gBaseJJD : gBaseJJDSList) { + Long groupId = resultMap.get(resultMap2.get(gBaseJJD.getGxdwdm())); + if (groupId == null) { + continue; + } + groupIds.add(groupId); + BusinessDepart businessDepart = getJJDBusinessDepart(happenTime, gBaseJJD, groupId, resultMap2, resultMap3); + businessDepartList.add(businessDepart); + } + for (GBaseAJJBXX gBaseAJJBXX : gBaseAJJBXXListSA) { + Long groupId = resultMap.get(resultMap2.get(gBaseAJJBXX.getBADWIDdm())); + if (groupId == null) { + continue; + } + groupIds.add(groupId); + BusinessDepart businessDepart = getAJJBXXBusinessDepart(happenTime, gBaseAJJBXX, groupId, 1, resultMap2, resultMap3); + businessDepartList.add(businessDepart); + } + for (GBaseAJJBXX gBaseAJJBXX : gBaseAJJBXXListLA) { + Long groupId = resultMap.get(resultMap2.get(gBaseAJJBXX.getBADWIDdm())); + if (groupId == null) { + continue; + } + groupIds.add(groupId); + BusinessDepart businessDepart = getAJJBXXBusinessDepart(happenTime, gBaseAJJBXX, groupId, 2, resultMap2, resultMap3); + businessDepartList.add(businessDepart); + } + for (GBaseAJJBXX gBaseAJJBXX : gBaseAJJBXXListPA) { + Long groupId = resultMap.get(resultMap2.get(gBaseAJJBXX.getBADWIDdm())); + if (groupId == null) { + continue; + } + groupIds.add(groupId); + BusinessDepart businessDepart = getAJJBXXBusinessDepart(happenTime, gBaseAJJBXX, groupId, 3, resultMap2, resultMap3); + businessDepartList.add(businessDepart); + } + } + + private static void generateDepartIds(List gBaseJJDSList, List departIds, List gBaseAJJBXXListSA, List gBaseAJJBXXListLA, List gBaseAJJBXXListPA) { + if (!gBaseJJDSList.isEmpty()) { + departIds.addAll(gBaseJJDSList.stream().map(GBaseJJD::getGxdwdm).toList()); + } + if (!gBaseAJJBXXListSA.isEmpty()) { + departIds.addAll(gBaseAJJBXXListSA.stream().map(GBaseAJJBXX::getBADWIDdm).toList()); + } + if (!gBaseAJJBXXListLA.isEmpty()) { + departIds.addAll(gBaseAJJBXXListLA.stream().map(GBaseAJJBXX::getLADWBMdm).toList()); + } + if (!gBaseAJJBXXListPA.isEmpty()) { + departIds.addAll(gBaseAJJBXXListPA.stream().map(GBaseAJJBXX::getLADWBMdm).toList()); + } + } + + private static BusinessDepart getJJDBusinessDepart(List happenTime, GBaseJJD gBaseJJD, Long groupId, Map resultMap2, Map resultMap3) { + BusinessDepart businessDepart = new BusinessDepart(); + businessDepart.setDate(happenTime.get(0)); + businessDepart.setDepartId(resultMap2.get(gBaseJJD.getGxdwdm())); + businessDepart.setDepartName(resultMap3.get(gBaseJJD.getGxdwdm())); + businessDepart.setGroupId(groupId); + businessDepart.setNumber(gBaseJJD.getJjdbhTotal()); + if (groupId != null) { + if (groupId == 10L) { + businessDepart.setBusinessType("1"); + businessDepart.setBusinessTypeName("110接处警"); + } else if (groupId == 11L) { + businessDepart.setBusinessType("2"); + businessDepart.setBusinessTypeName("122接处警"); + } + } + return businessDepart; + } + + private static BusinessDepart getAJJBXXBusinessDepart(List happenTime, GBaseAJJBXX gBasAJJBXX, Long groupId, int type, Map resultMap2, Map resultMap3) { + BusinessDepart businessDepart = new BusinessDepart(); + businessDepart.setDate(happenTime.get(0)); + businessDepart.setDepartId(resultMap2.get(gBasAJJBXX.getBADWIDdm())); + businessDepart.setDepartName(resultMap3.get(gBasAJJBXX.getBADWIDdm())); + businessDepart.setGroupId(groupId); + businessDepart.setNumber(gBasAJJBXX.getBADWNum()); + if (type == 1) { + businessDepart.setBusinessType("4"); + businessDepart.setBusinessTypeName("执法办案(受案)"); + } else if (type == 2) { + businessDepart.setBusinessType("5"); + businessDepart.setBusinessTypeName("执法办案(立案)"); + } else if (type == 3) { + businessDepart.setBusinessType("6"); + businessDepart.setBusinessTypeName("执法办案(破案)"); + } + return businessDepart; + } + + @DS("slave2") + public List selectJJDList(List happenTime) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.between("cjsj", happenTime.get(0), happenTime.get(1)); + queryWrapper.notLikeRight("jqxzdm", "11"); + queryWrapper.notLikeRight("jqxzdm", "99"); + queryWrapper.groupBy("gxdwdm", "gxdwmc"); + return gBaseJJDMapper.selectJJDList(queryWrapper); + } + + @DS("slave2") + private List selectAJJBXX(int type, List happenTime) { + List result = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (type == 1) { + queryWrapper.select("COUNT(BADWIDdm) as BADWNum, BADWIDdm, BADWIDmc").ne("AJBZdm", "3").between("slrq", happenTime.get(0), happenTime.get(1)).groupBy("BADWIDdm", "BADWIDmc"); + } else if (type == 2) { + queryWrapper.select("COUNT(BADWIDdm) as BADWNum, BADWIDdm, BADWIDmc").ne("AJBZdm", "3").between("larq", happenTime.get(0), happenTime.get(1)).groupBy("BADWIDdm", "BADWIDmc"); + } else if (type == 3) { + queryWrapper.select("COUNT(BADWIDdm) as BADWNum, BADWIDdm, BADWIDmc").ne("AJBZdm", "3").between("parq", happenTime.get(0), happenTime.get(1)).groupBy("BADWIDdm", "BADWIDmc"); + } + List gBaseAJJBXXs = gBaseAJJBXXMapper.selectList(queryWrapper); + if (!gBaseAJJBXXs.isEmpty()) { + gBaseAJJBXXs.forEach(item -> { + if (item != null && item.getBADWIDdm() != null && !item.getBADWIDmc().isEmpty()) { + result.add(item); + } + }); + } + return result; + } +} diff --git a/src/main/java/com/biutag/supervision/service/BusinessLogService.java b/src/main/java/com/biutag/supervision/service/BusinessLogService.java new file mode 100644 index 0000000..9cb14d9 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/BusinessLogService.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.BusinessLog; +import com.biutag.supervision.mapper.BusinessLogMapper; +import org.springframework.stereotype.Service; + +@Service +public class BusinessLogService extends ServiceImpl { + +} diff --git a/src/main/java/com/biutag/supervision/service/BusinessPoliceService.java b/src/main/java/com/biutag/supervision/service/BusinessPoliceService.java new file mode 100644 index 0000000..48f30d6 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/BusinessPoliceService.java @@ -0,0 +1,423 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.*; +import com.biutag.supervision.pojo.entity.BusinessLog; +import com.biutag.supervision.pojo.entity.BusinessPolice; +import com.biutag.supervision.pojo.entity.GBaseAJJBXX; +import com.biutag.supervision.pojo.entity.GBaseCJD; +import com.biutag.supervision.pojo.model.BusinessPoliceModel; +import com.biutag.supervision.pojo.param.BusinessQueryParam; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.BatchResult; +import org.springframework.stereotype.Service; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@RequiredArgsConstructor +@Service +public class BusinessPoliceService extends ServiceImpl { + + private final GBaseCJDMapper gBaseCJDMapper; + + private final StatisticsDepartMapper statisticsDepartMapper; + + private final StatisticsGroupMapper statisticsGroupMapper; + + private final BusinessLogMapper businessLogMapper; + + public final ModelClueDataMapper modelClueDataMapper; + + private final SupExternalDepartMapper supExternalDepartMapper; + + public Page page(BusinessQueryParam businessQueryParam) { + if (businessQueryParam.getDepartName()!=null && businessQueryParam.getDepartName().equals("开始导入今年所有的数据")) { + LocalDate start = LocalDate.parse("2024-01-01"); + LocalDate end = LocalDate.parse("2024-10-31"); + for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) { + List happenTime = new ArrayList<>(); + Date startDate = Date.from(date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()); + Date endDate = Date.from(date.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); + happenTime.add(startDate); + happenTime.add(endDate); + generate(happenTime); + log.info("已经导入{}的个人数据", date.format(DateTimeFormatter.ofPattern("yyyy年M月d日"))); + } + } else if (businessQueryParam.getDepartName() != null && businessQueryParam.getDepartName().equals("开始导入今天所有的数据")) { + List happenTime = new ArrayList<>(); + Date start = Date.from(LocalDateTime.parse("2024-09-02T00:00:00", DateTimeFormatter.ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant()); + Date end = Date.from(LocalDateTime.parse("2024-10-14T09:59:59", DateTimeFormatter.ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant()); + happenTime.add(start); + happenTime.add(end); + generate(happenTime); + } + String empNo = ""; + if (businessQueryParam.getEmpNo() != null && !businessQueryParam.getEmpNo().isEmpty()) { + empNo = businessQueryParam.getEmpNo(); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StrUtil.isNotBlank(businessQueryParam.getPoliceName()), "police_name", businessQueryParam.getPoliceName()) + .like(StrUtil.isNotBlank(empNo), "emp_no", empNo) + .like(StrUtil.isNotBlank(businessQueryParam.getDepartName()), "depart_name", businessQueryParam.getDepartName()) + .eq(StrUtil.isNotBlank(businessQueryParam.getGroupName()), "group_name", businessQueryParam.getGroupName()) + .groupBy("police_name") + .orderBy(StrUtil.isNotBlank(businessQueryParam.getSortField()), businessQueryParam.getSortOrder().equals("ASC"), businessQueryParam.getSortField()); + if (businessQueryParam.getHappenTime().size() == 2) { + queryWrapper.between("date", businessQueryParam.getHappenTime().get(0), businessQueryParam.getHappenTime().get(1)); + } + return baseMapper.queryPage(Page.of(businessQueryParam.getCurrent(), businessQueryParam.getSize()), queryWrapper); + } + + public void generate(List happenTime) { + List businessPoliceList = new ArrayList<>(); + // 110、122 + List gBaseCJDSList = selectCJDList(happenTime); + // 执法办案 + ZFBAResult zfbaresult = getZfbaResult(happenTime); + if (gBaseCJDSList.isEmpty() && zfbaresult.bar1().isEmpty() && zfbaresult.bar2().isEmpty() && zfbaresult.bar3().isEmpty() && zfbaresult.bar4().isEmpty() && zfbaresult.bar5().isEmpty() && zfbaresult.bar6().isEmpty()) { + log.info("{}没有个人数据", happenTime.get(0)); + businessLogMapper.insert(new BusinessLog().setType("个人业务数据").setNum(0).setCreateTime(LocalDateTime.now())); + return; + } + Map gBaseAJJBXXMapSR = new HashMap<>(); + Map gBaseAJJBXXMapLR = new HashMap<>(); + Map gBaseAJJBXXMapPR = new HashMap<>(); + generateAJJBXXMap(zfbaresult, gBaseAJJBXXMapSR, gBaseAJJBXXMapLR, gBaseAJJBXXMapPR); + List departIds = new ArrayList<>(); + generateDepartIds(gBaseCJDSList, departIds, zfbaresult); + if (departIds.isEmpty()) { + return; + } + List> idsByDepartIds = supExternalDepartMapper.getIdsByDepartIds(departIds);// 430100221100-1011 + Map resultMap2 = idsByDepartIds.stream().filter(map -> map.get("external_id") != null).collect(Collectors.toMap( + map -> (String) map.get("external_id"), + map -> map.get("internal_id") == null ? "" : (String) map.get("internal_id") + )); + List values = resultMap2.values().stream().filter(Objects::nonNull).toList();// 1011 + Map resultMap3 = idsByDepartIds.stream().filter(map -> map.get("external_id") != null).collect(Collectors.toMap( + map -> (String) map.get("external_id"), + map -> map.get("internal_short_name") == null ? "" : (String) map.get("internal_short_name") + )); + List> resultList = statisticsDepartMapper.getGroupIdsByDepartIds(values); + Map resultMap = resultList.stream().collect(Collectors.toMap( + map -> (String) map.get("departId"), + map -> (Long) map.get("groupId") + )); + List groupIds = new ArrayList<>(); + generateBusinessPoliceList(happenTime, gBaseCJDSList, resultMap, resultMap2, resultMap3, groupIds, businessPoliceList, gBaseAJJBXXMapSR, gBaseAJJBXXMapLR, gBaseAJJBXXMapPR); + List> nameList = statisticsGroupMapper.getNameByGroupIds(groupIds); + Map names = nameList.stream().collect(Collectors.toMap( + map -> (Long) map.get("groupId"), + map -> (String) map.get("name") + )); + for (BusinessPolice businessPolice : businessPoliceList) { + businessPolice.setGroupName(names.get(businessPolice.getGroupId())); + businessPolice.setCreateTime(LocalDateTime.now()); + } + log.info("个人业务数据准备插入:{}", businessPoliceList.size()); + List insert = baseMapper.insert(businessPoliceList); + log.info("个人业务数据插入成功"); + int actualNum = (int) Arrays.stream(insert.get(0).getUpdateCounts()).parallel().filter(num -> num != 0).count(); + businessLogMapper.insert(new BusinessLog().setType("个人业务数据").setNum(gBaseCJDSList.size()).setActualNum(actualNum).setCreateTime(LocalDateTime.now())); + } + + private static void generateBusinessPoliceList(List happenTime, List gBaseCJDSList, Map resultMap, Map resultMap2, Map resultMap3, List groupIds, List businessPoliceList, Map gBaseAJJBXXMapSR, Map gBaseAJJBXXMapLR, Map gBaseAJJBXXMapPR) { + for (GBaseCJD gBaseCJD : gBaseCJDSList) { + Long groupId = resultMap.get(resultMap2.get(gBaseCJD.getCjdxssdwdm())); + if (groupId == null) { + continue; + } + groupIds.add(groupId); + BusinessPolice businessPolice = getJJDBusinessPolice(happenTime, gBaseCJD, groupId, resultMap2, resultMap3); + businessPoliceList.add(businessPolice); + } + for (GBaseAJJBXX gBaseAJJBXX : gBaseAJJBXXMapSR.values()) { + Long groupId = resultMap.get(resultMap2.get(gBaseAJJBXX.getBADWIDdm())); + if (groupId == null) { + continue; + } + groupIds.add(groupId); + BusinessPolice businessPolice = getAJJBXXBusinessPolice(happenTime, gBaseAJJBXX, groupId, 4, resultMap2, resultMap3); + businessPoliceList.add(businessPolice); + } + for (GBaseAJJBXX gBaseAJJBXX : gBaseAJJBXXMapLR.values()) { + Long groupId = resultMap.get(resultMap2.get(gBaseAJJBXX.getBADWIDdm())); + if (groupId == null) { + continue; + } + groupIds.add(groupId); + BusinessPolice businessPolice = getAJJBXXBusinessPolice(happenTime, gBaseAJJBXX, groupId, 5, resultMap2, resultMap3); + businessPoliceList.add(businessPolice); + } + for (GBaseAJJBXX gBaseAJJBXX : gBaseAJJBXXMapPR.values()) { + Long groupId = resultMap.get(resultMap2.get(gBaseAJJBXX.getBADWIDdm())); + if (groupId == null) { + continue; + } + groupIds.add(groupId); + BusinessPolice businessPolice = getAJJBXXBusinessPolice(happenTime, gBaseAJJBXX, groupId, 6, resultMap2, resultMap3); + businessPoliceList.add(businessPolice); + } + } + + private static void generateDepartIds(List gBaseCJDSList, List departIds, ZFBAResult zfbaresult) { + List collect = gBaseCJDSList.stream().map(GBaseCJD::getCjdxssdwdm).toList(); + if (!collect.isEmpty()) { + departIds.addAll(collect); + } + List badwiDdm1 = zfbaresult.bar1().stream().map(map -> (String) map.get("BADWIDdm")).toList(); + if (!badwiDdm1.isEmpty()) { + departIds.addAll(badwiDdm1); + } + List badwiDdm2 = zfbaresult.bar2().stream().map(map -> (String) map.get("BADWIDdm")).toList(); + if (!badwiDdm2.isEmpty()) { + departIds.addAll(badwiDdm2); + } + List badwiDdm3 = zfbaresult.bar3().stream().map(map -> (String) map.get("BADWIDdm")).toList(); + if (!badwiDdm3.isEmpty()) { + departIds.addAll(badwiDdm3); + } + List badwiDdm4 = zfbaresult.bar4().stream().map(map -> (String) map.get("BADWIDdm")).toList(); + if (!badwiDdm4.isEmpty()) { + departIds.addAll(badwiDdm4); + } + } + + private static void generateAJJBXXMap(ZFBAResult zfbaresult, Map gBaseAJJBXXMapSR, Map gBaseAJJBXXMapLR, Map gBaseAJJBXXMapPR) { + for (Map bar : zfbaresult.bar1()) { + if (bar.get("BAR1ID") == null) { + continue; + } + if (gBaseAJJBXXMapSR.containsKey((String)bar.get("BAR1ID"))) { + GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapSR.get((String) bar.get("BAR1ID")); + gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapSR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } else { + GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX(); + gBaseAJJBXX.setBARID((String)bar.get("BAR1ID")); + gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm")); + gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc")); + gBaseAJJBXX.setXM((String)bar.get("XM")); + gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapSR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } + } + for (Map bar : zfbaresult.bar2()) { + if (bar.get("BAR2ID") == null) { + continue; + } + if (gBaseAJJBXXMapSR.containsKey((String)bar.get("BAR2ID"))) { + GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapSR.get((String) bar.get("BAR2ID")); + gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapSR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } else { + GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX(); + gBaseAJJBXX.setBARID((String)bar.get("BAR2ID")); + gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm")); + gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc")); + gBaseAJJBXX.setXM((String)bar.get("XM")); + gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapSR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } + } + for (Map bar : zfbaresult.bar3()) { + if (bar.get("BAR1ID") == null) { + continue; + } + if (gBaseAJJBXXMapLR.containsKey((String)bar.get("BAR1ID"))) { + GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapLR.get((String) bar.get("BAR1ID")); + gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapLR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } else { + GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX(); + gBaseAJJBXX.setBARID((String)bar.get("BAR1ID")); + gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm")); + gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc")); + gBaseAJJBXX.setXM((String)bar.get("XM")); + gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapLR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } + } + for (Map bar : zfbaresult.bar4()) { + if (bar.get("BAR2ID") == null) { + continue; + } + if (gBaseAJJBXXMapLR.containsKey((String)bar.get("BAR2ID"))) { + GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapLR.get((String) bar.get("BAR2ID")); + gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapLR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } else { + GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX(); + gBaseAJJBXX.setBARID((String)bar.get("BAR2ID")); + gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm")); + gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc")); + gBaseAJJBXX.setXM((String)bar.get("XM")); + gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapLR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } + } + for (Map bar : zfbaresult.bar5()) { + if (bar.get("BAR1ID") == null) { + continue; + } + if (gBaseAJJBXXMapPR.containsKey((String)bar.get("BAR1ID"))) { + GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapPR.get((String) bar.get("BAR1ID")); + gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapPR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } else { + GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX(); + gBaseAJJBXX.setBARID((String)bar.get("BAR1ID")); + gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm")); + gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc")); + gBaseAJJBXX.setXM((String)bar.get("XM")); + gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapPR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } + } + for (Map bar : zfbaresult.bar6()) { + if (bar.get("BAR2ID") == null) { + continue; + } + if (gBaseAJJBXXMapPR.containsKey((String)bar.get("BAR2ID"))) { + GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapPR.get((String) bar.get("BAR2ID")); + gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapPR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } else { + GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX(); + gBaseAJJBXX.setBARID((String)bar.get("BAR2ID")); + gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm")); + gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc")); + gBaseAJJBXX.setXM((String)bar.get("XM")); + gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num"))); + gBaseAJJBXXMapPR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX); + } + } + } + + private ZFBAResult getZfbaResult(List happenTime) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 4:受案 + List> bar1 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR1ID) as num, a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM " + + "FROM dwd_asj_zfba_ajjbxx a " + + "LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR1ID = b.ZJ " + + "WHERE a.SLRQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " + + "GROUP BY a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM;"); + List> bar2 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR2ID) as num, a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM " + + "FROM dwd_asj_zfba_ajjbxx a " + + "LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR2ID = b.ZJ " + + "WHERE a.SLRQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " + + "GROUP BY a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM;"); + // 5:立案 + List> bar3 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR1ID) as num, a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM " + + "FROM dwd_asj_zfba_ajjbxx a " + + "LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR1ID = b.ZJ " + + "WHERE a.LARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " + + "GROUP BY a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM;"); + List> bar4 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR2ID) as num, a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM " + + "FROM dwd_asj_zfba_ajjbxx a " + + "LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR2ID = b.ZJ " + + "WHERE a.LARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " + + "GROUP BY a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM;"); + // 6:破案 + List> bar5 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR1ID) as num, a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM " + + "FROM dwd_asj_zfba_ajjbxx a " + + "LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR1ID = b.ZJ " + + "WHERE a.PARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " + + "GROUP BY a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM;"); + List> bar6 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR2ID) as num, a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM " + + "FROM dwd_asj_zfba_ajjbxx a " + + "LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR2ID = b.ZJ " + + "WHERE a.PARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " + + "GROUP BY a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM;"); + ZFBAResult zfbaresult = new ZFBAResult(bar1, bar2, bar3, bar4, bar5, bar6); + return zfbaresult; + } + + private record ZFBAResult(List> bar1, List> bar2, List> bar3, List> bar4, List> bar5, List> bar6) { + } + + private static BusinessPolice getJJDBusinessPolice(List happenTime, GBaseCJD gBaseCJD, Long groupId, Map resultMap2, Map resultMap3) { + BusinessPolice businessPolice = new BusinessPolice(); + businessPolice.setDate(happenTime.get(0)); + businessPolice.setDepartId(resultMap2.get(gBaseCJD.getCjdxssdwdm())); + businessPolice.setDepartName(resultMap3.get(gBaseCJD.getCjdxssdwdm())); + businessPolice.setGroupId(groupId); + businessPolice.setNumber(gBaseCJD.getClwbrxmTotal()); + businessPolice.setPoliceName(gBaseCJD.getClwbrxm()); + businessPolice.setEmpNo(gBaseCJD.getClwbrbh()); + businessPolice.setPoliceIdCode(hashConcatenatedStrings(gBaseCJD.getClwbrxm(), gBaseCJD.getClwbrbh())); + if (groupId != null) { + if (groupId == 10L) { + businessPolice.setBusinessType("1"); + businessPolice.setBusinessTypeName("110接处警"); + } else if (groupId == 11L) { + businessPolice.setBusinessType("2"); + businessPolice.setBusinessTypeName("122接处警"); + } + } + return businessPolice; + } + + private static BusinessPolice getAJJBXXBusinessPolice(List happenTime, GBaseAJJBXX gBaseAJJBXX, Long groupId, int type, Map resultMap2, Map resultMap3) { + BusinessPolice businessPolice = new BusinessPolice(); + businessPolice.setDate(happenTime.get(0)); + businessPolice.setDepartId(resultMap2.get(gBaseAJJBXX.getBADWIDdm())); + businessPolice.setDepartName(resultMap3.get(gBaseAJJBXX.getBADWIDdm())); + businessPolice.setGroupId(groupId); + businessPolice.setNumber(gBaseAJJBXX.getBARNum()); + businessPolice.setPoliceName(gBaseAJJBXX.getXM()); + businessPolice.setEmpNo(gBaseAJJBXX.getBARID()); + businessPolice.setPoliceIdCode(hashConcatenatedStrings(businessPolice.getPoliceName(), businessPolice.getEmpNo())); + if (type == 4) { + businessPolice.setBusinessType("4"); + businessPolice.setBusinessTypeName("执法办案(受案)"); + } else if (type == 5) { + businessPolice.setBusinessType("5"); + businessPolice.setBusinessTypeName("执法办案(立案)"); + } else if (type == 6) { + businessPolice.setBusinessType("6"); + businessPolice.setBusinessTypeName("执法办案(破案)"); + } + return businessPolice; + } + + @DS("slave2") + public List selectCJDList(List happenTime) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.isNotNull("clwbrxm"); + queryWrapper.between("cjsj", happenTime.get(0), happenTime.get(1)); + queryWrapper.groupBy("clwbrxm", "clwbrbh", "cjdxssdwdm", "cjdxssdwmc"); + return gBaseCJDMapper.selectCJDList(queryWrapper); + } + + public static String hashConcatenatedStrings(String a, String b) { + try { + String concatenated = a + b; + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(concatenated.getBytes()); + StringBuilder hexString = new StringBuilder(); + for (byte b1 : hash) { + String hex = Integer.toHexString(0xff & b1); + if(hex.length() == 1) hexString.append('0'); + hexString.append(hex); + } + return hexString.toString(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("Error while hashing", e); + } + } +} diff --git a/src/main/java/com/biutag/supervision/service/DataCaseVerifService.java b/src/main/java/com/biutag/supervision/service/DataCaseVerifService.java new file mode 100644 index 0000000..0ce6268 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/DataCaseVerifService.java @@ -0,0 +1,100 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.constants.enums.DataUpdateMethodEnum; +import com.biutag.supervision.constants.enums.DistributionStateEnum; +import com.biutag.supervision.constants.enums.HostLevelEnums; +import com.biutag.supervision.constants.enums.ProblemSourcesEnum; +import com.biutag.supervision.mapper.DataCaseVerifMapper; +import com.biutag.supervision.pojo.dto.DataCaseVerifImportDto; +import com.biutag.supervision.pojo.dto.DataCaseVerifDistribute; +import com.biutag.supervision.pojo.dto.NegativeDto; +import com.biutag.supervision.pojo.entity.DataCaseVerif; +import com.biutag.supervision.pojo.param.DataCaseVerifQueryParam; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class DataCaseVerifService extends ServiceImpl { + + private final NegativeService negativeService; + + public Page page(DataCaseVerifQueryParam queryParam) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(StrUtil.isNotBlank(queryParam.getOriginId()), DataCaseVerif::getOriginId, queryParam.getOriginId()) + .like(StrUtil.isNotBlank(queryParam.getThingDesc()), DataCaseVerif::getThingDesc, queryParam.getThingDesc()) + .eq(StrUtil.isNotBlank(queryParam.getDistributionState()), DataCaseVerif::getDistributionState, queryParam.getDistributionState()) + .orderByDesc(DataCaseVerif::getCreateTime); + return page(Page.of(queryParam.getCurrent(), queryParam.getSize()), queryWrapper); + } + + public boolean save(List list, String dataUpdateMethod) { + LocalDateTime now = LocalDateTime.now(); + int index = 0; + for (DataCaseVerifImportDto dto : list) { + index++; + boolean exists = exists(new LambdaQueryWrapper().eq(DataCaseVerif::getOriginId, dto.getOriginId())); + // 增量更新 + if (DataUpdateMethodEnum.incremental.name().equals(dataUpdateMethod) && exists) { + throw new RuntimeException(String.format("第%s条数据的案件编号已存在,请核实", index)); + } + DataCaseVerif data = new DataCaseVerif(); + BeanUtils.copyProperties(dto, data); + data.setCreateTime(now); + data.setDistributionState(DistributionStateEnum.UNDISTRIBUTED.getValue()); + saveOrUpdate(data); + } + return true; + } + + public boolean distribution(DataCaseVerifDistribute dataDistribute) { + dataDistribute.getData().forEach(item -> { + NegativeDto negativeDto = new NegativeDto(); + negativeDto.setOriginId(item.getOriginId()); + negativeDto.setHappenTime(item.getHappenTime()); + negativeDto.setDiscoveryTime(item.getDiscoveryTime()); + negativeDto.setProblemSourcesCode(ProblemSourcesEnum.A12389.getValue()); + negativeDto.setProblemSources(ProblemSourcesEnum.A12389.getLabel()); +// negativeDto.setBusinessTypeCode(BusinessTypeEnum.ABWW); +// negativeDto.setBusinessTypeName(); + negativeDto.setResponderName(item.getResponderName()); + negativeDto.setContactPhone(item.getResponderPhone()); + negativeDto.setThingDesc(item.getThingDesc()); + String departId; + String departName; + if (StrUtil.isBlank(item.getThirdDepartId())) { + departId = item.getSecondDepartId(); + departName = item.getSecondDepartName(); + } else { + departId = item.getThirdDepartId(); + departName = item.getThirdDepartName(); + } + negativeDto.setInvolveDepartId(departId); + negativeDto.setInvolveDepartName(departName); + negativeDto.setHostLevel(HostLevelEnums.SECOND.getValue()); + + negativeDto.setApprovalFlow(dataDistribute.getApprovalFlow()); + negativeDto.setDepartId(departId); + negativeDto.setDepartName(departName); + negativeDto.setTimeLimit(dataDistribute.getTimeLimit()); + negativeDto.setMaxSignDuration(dataDistribute.getMaxSignDuration()); + negativeDto.setMaxHandleDuration(dataDistribute.getMaxHandleDuration()); + negativeDto.setMaxExtensionDuration(dataDistribute.getMaxExtensionDuration()); + negativeDto.setCaseNumber(item.getOriginId()); + negativeService.save(negativeDto); + update(new LambdaUpdateWrapper().eq(DataCaseVerif::getOriginId, item.getOriginId()) + .set(DataCaseVerif::getDistributionState, DistributionStateEnum.DISTRIBUTED.getValue())); + }); + return true; + } + +} diff --git a/src/main/java/com/biutag/supervision/service/DataPetitionComplaintService.java b/src/main/java/com/biutag/supervision/service/DataPetitionComplaintService.java new file mode 100644 index 0000000..713cfdf --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/DataPetitionComplaintService.java @@ -0,0 +1,206 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.constants.enums.*; +import com.biutag.supervision.mapper.DataPetitionComplaintMapper; +import com.biutag.supervision.pojo.dto.*; +import com.biutag.supervision.pojo.entity.DataPetitionComplaint; +import com.biutag.supervision.pojo.param.DataPetitionComplaintQueryParam; +import lombok.RequiredArgsConstructor; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class DataPetitionComplaintService extends ServiceImpl { + + private final NegativeService negativeService; + + private final DataPetitionComplaintMapper dataPetitionComplaintMapper; + + public Page page(DataPetitionComplaintQueryParam queryParam) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(DataPetitionComplaint::getProblemSourcesCode, queryParam.getProblemSourcesCode()) + .like(StrUtil.isNotBlank(queryParam.getOriginId()), DataPetitionComplaint::getOriginId, queryParam.getOriginId()) + .like(StrUtil.isNotBlank(queryParam.getThingDesc()), DataPetitionComplaint::getThingDesc, queryParam.getThingDesc()) + .orderByDesc(DataPetitionComplaint::getCreateTime); + if (queryParam.getDiscoveryTime().size() == 2) { + queryWrapper.between(DataPetitionComplaint::getDiscoveryTime, queryParam.getDiscoveryTime().get(0), queryParam.getDiscoveryTime().get(1)); + } + if (StrUtil.isNotBlank(queryParam.getResponderKey()) && StrUtil.isNotBlank(queryParam.getResponderValue())) { + switch (queryParam.getResponderKey()) { + case "name": + queryWrapper.like(DataPetitionComplaint::getResponderName, queryParam.getResponderValue()); + break; + case "phone": + queryWrapper.like(DataPetitionComplaint::getResponderPhone, queryParam.getResponderValue()); + break; + } + } + return page(Page.of(queryParam.getCurrent(), queryParam.getSize()), queryWrapper); + } + + public boolean save(DataPetitionComplaintDto dto) { + DataPetitionComplaint dataPetitionComplaint = new DataPetitionComplaint(); + BeanUtil.copyProperties(dto, dataPetitionComplaint); + dataPetitionComplaint.setCreateTime(LocalDateTime.now()); + dataPetitionComplaint.setUpdateTime(LocalDateTime.now()); + return save(dataPetitionComplaint); + } + + public boolean save(DataPetitionComplaintAddDto body) { + LocalDateTime now = LocalDateTime.now(); + int index = 0; + for (DataPetitionComplaintImportDto dto : body.getData()) { + index++; + boolean exists = exists(new LambdaQueryWrapper().eq(DataPetitionComplaint::getOriginId, dto.getOriginId())); + // 增量更新 + if (DataUpdateMethodEnum.incremental.name().equals(body.getDataUpdateMethod()) && exists) { + throw new RuntimeException(String.format("第%s条数据的信件编号已存在,请核实", index)); + } + DataPetitionComplaint data = new DataPetitionComplaint(); + BeanUtils.copyProperties(dto, data); + + data.setCreateTime(now); + data.setUpdateTime(now); + data.setProblemSourcesCode(body.getProblemSourcesCode()); + data.setDistributionState(DistributionStateEnum.UNDISTRIBUTED.getValue()); + saveOrUpdate(data); + } + return true; + } + + public boolean distribution(DataDataPetitionComplainDistribute dataDistribute) { + dataDistribute.getData().forEach(item -> { + NegativeDto negativeDto = new NegativeDto(); + negativeDto.setOriginId(item.getOriginId()); + negativeDto.setDiscoveryTime(item.getDiscoveryTime()); + negativeDto.setProblemSourcesCode(item.getProblemSourcesCode()); + negativeDto.setProblemSources(ProblemSourcesEnum.get(item.getProblemSourcesCode()).getLabel()); +// negativeDto.setBusinessTypeCode(BusinessTypeEnum.ABWW); +// negativeDto.setBusinessTypeName(); + negativeDto.setResponderName(item.getResponderName()); + negativeDto.setContactPhone(item.getResponderPhone()); + negativeDto.setThingDesc(item.getThingDesc()); + String departId; + String departName; + if (StrUtil.isBlank(item.getThirdDepartId())) { + departId = item.getSecondDepartId(); + departName = item.getSecondDepartName(); + } else { + departId = item.getThirdDepartId(); + departName = item.getThirdDepartName(); + } + negativeDto.setInvolveDepartId(departId); + negativeDto.setInvolveDepartName(departName); + negativeDto.setHostLevel(HostLevelEnums.SECOND.getValue()); + + negativeDto.setApprovalFlow(dataDistribute.getApprovalFlow()); + negativeDto.setDepartId(departId); + negativeDto.setDepartName(departName); + negativeDto.setTimeLimit(dataDistribute.getTimeLimit()); + negativeDto.setMaxSignDuration(dataDistribute.getMaxSignDuration()); + negativeDto.setMaxHandleDuration(dataDistribute.getMaxHandleDuration()); + negativeDto.setMaxExtensionDuration(dataDistribute.getMaxExtensionDuration()); + negativeDto.setCaseNumber(item.getOriginId()); + negativeService.save(negativeDto); + update(new LambdaUpdateWrapper().eq(DataPetitionComplaint::getOriginId, item.getOriginId()) + .set(DataPetitionComplaint::getDistributionState, DistributionStateEnum.DISTRIBUTED.getValue())); + }); + return true; + } + + //所有分类数据总数 + public JSONObject allMailCount(Date beginTime, Date endTime) { + QueryWrapper totalQueryWrapper = new QueryWrapper<>(); + totalQueryWrapper.between("discovery_time", beginTime, endTime); + long totalMail = this.count(totalQueryWrapper); + // 国家信访 + QueryWrapper countryQueryWrapper = new QueryWrapper<>(); + countryQueryWrapper.eq("problem_sources_code", 21); + countryQueryWrapper.between("discovery_time", beginTime, endTime); + Long countryMail = dataPetitionComplaintMapper.selectCount(countryQueryWrapper); + // 公安部信访 + QueryWrapper policeQueryWrapper = new QueryWrapper<>(); + policeQueryWrapper.eq("problem_sources_code", 22); + policeQueryWrapper.between("discovery_time", beginTime, endTime); + Long policeMail = dataPetitionComplaintMapper.selectCount(policeQueryWrapper); + // 初访 + QueryWrapper firstQueryWrapper = new QueryWrapper<>(); + firstQueryWrapper.eq("initial_petition", 1); + firstQueryWrapper.between("discovery_time", beginTime, endTime); + Long firstMail = dataPetitionComplaintMapper.selectCount(firstQueryWrapper); + // 重访 + QueryWrapper secondQueryWrapper = new QueryWrapper<>(); + secondQueryWrapper.eq("initial_petition", 2); + secondQueryWrapper.between("discovery_time", beginTime, endTime); + Long secondMail = dataPetitionComplaintMapper.selectCount(secondQueryWrapper); + // 领导接访 + QueryWrapper leaderQueryWrapper = new QueryWrapper<>(); + leaderQueryWrapper.isNotNull("receiving_leader_name"); + leaderQueryWrapper.between("discovery_time", beginTime, endTime); + Long leaderReceiveMail = dataPetitionComplaintMapper.selectCount(leaderQueryWrapper); + // 领导督办 + QueryWrapper leaderViewQueryWrapper = new QueryWrapper<>(); + leaderViewQueryWrapper.isNotNull("receiving_leader_name"); + leaderViewQueryWrapper.between("discovery_time", beginTime, endTime); + Long leaderViewMail = dataPetitionComplaintMapper.selectCount(leaderViewQueryWrapper); + // 闹访 1:闹 2:不闹 + QueryWrapper tangleQueryWrapper = new QueryWrapper<>(); + tangleQueryWrapper.eq("entanglement_visits", 1); + tangleQueryWrapper.between("discovery_time", beginTime, endTime); + Long tangleMail = dataPetitionComplaintMapper.selectCount(tangleQueryWrapper); + // 集访 1:集 2:不集 + QueryWrapper massQueryWrapper = new QueryWrapper<>(); + massQueryWrapper.eq("mass_visits", 1); + massQueryWrapper.between("discovery_time", beginTime, endTime); + Long massMail = dataPetitionComplaintMapper.selectCount(massQueryWrapper); + JSONObject overview = new JSONObject() + // 信访总数(起) + .fluentPut("total", totalMail) + // 国家信访 + .fluentPut("countryMail", countryMail) + // 公安部信访 + .fluentPut("policeMail", policeMail) + // 局长信箱 + .fluentPut("commissionerMail", 10) + // 12337信访 + .fluentPut("numMail", 10) + // 初访; + .fluentPut("firstMail", firstMail) + // 重访 + .fluentPut("secondMail", secondMail) + // 领导接访 + .fluentPut("leaderReceiveMail", leaderReceiveMail) + // 领导督办 + .fluentPut("leaderViewMail", leaderViewMail) + // 闹访问 + .fluentPut("tangleMail", tangleMail) + // 集访 + .fluentPut("massMail", massMail); + return overview; + } + + + // 初访重访分类数据排行 + public List mailRank(Integer departId, Integer Repeat, Date beginTime, Date endTime) { + List list = dataPetitionComplaintMapper. + selectDepartStatistic(departId, Repeat, beginTime, endTime); + return list; + } + + + +} diff --git a/src/main/java/com/biutag/supervision/service/DataRightsComfortService.java b/src/main/java/com/biutag/supervision/service/DataRightsComfortService.java new file mode 100644 index 0000000..214c53c --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/DataRightsComfortService.java @@ -0,0 +1,73 @@ +package com.biutag.supervision.service; + +import com.biutag.supervision.mapper.RpcApplyMapper; +import com.biutag.supervision.pojo.dto.common.PieItem; +import com.biutag.supervision.pojo.entity.RpcInfringerResult; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@Service +public class DataRightsComfortService { + + private final RpcApplyService rpcApplyService; + + private final RpcApplyPersonService rpcApplyPersonService; + + private final RpcInfringerResultService rpcInfringerResultService; + + private final RpcApplyMapper rpcApplyMapper; + + // 抚慰人数 + public Integer countComfortPersonNumber(Date beginTime, Date endTime) { + return rpcApplyMapper.countComfortPersonNumber(beginTime, endTime); + } + + // 打击处理人数 + public Integer countHitPersonNumber(Date beginTime, Date endTime) { + List hitPeople = rpcApplyMapper.getHitPeople(beginTime, endTime); + int totalPeople = 0; + if (hitPeople == null || hitPeople.isEmpty()) { + return 0; + } + for (String hitPerson : hitPeople) { + if (hitPerson.isEmpty()) { + continue; + } + if (hitPerson.contains(",")) { + String[] people = hitPerson.split(","); + totalPeople += people.length; + } else { + totalPeople += 1; + } + } + return totalPeople; + } + + public Double countComfortMoney(Date beginTime, Date endTime) { + return rpcApplyMapper.countComfortMoney(beginTime, endTime) / 10000.0; + } + + public List selectPunishmentSituation(Date beginTime, Date endTime) { + List rpcInfringerResults = rpcApplyMapper.selectPunishmentSituation(beginTime, endTime); + if (rpcInfringerResults == null || rpcInfringerResults.isEmpty()) { + return new ArrayList<>(); + } + Map countMap = new HashMap<>(); + for (RpcInfringerResult rpcInfringerResult : rpcInfringerResults) { + String defendHandleWayName = rpcInfringerResult.getDefendHandleWayName(); + String tortName = rpcInfringerResult.getTortName(); + String[] names = tortName.split(","); + int count = names.length; + countMap.put(defendHandleWayName, countMap.getOrDefault(defendHandleWayName, 0) + count); + } + return countMap.entrySet().stream().map(entry -> new PieItem(entry.getKey(), entry.getValue())).collect(Collectors.toList()); + } + + public List selectComfortSituation(Date beginTime, Date endTime) { + return rpcApplyMapper.selectComfortSituation(beginTime, endTime); + } +} diff --git a/src/main/java/com/biutag/supervision/service/FileService.java b/src/main/java/com/biutag/supervision/service/FileService.java new file mode 100644 index 0000000..f969293 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/FileService.java @@ -0,0 +1,44 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.vo.FileVo; +import com.github.tobato.fastdfs.domain.fdfs.StorePath; +import com.github.tobato.fastdfs.service.FastFileStorageClient; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +@RequiredArgsConstructor +@Service +public class FileService { + + private final FastFileStorageClient fastFileStorageClient; + + @Value("${fdfs.preview-url}") + private String FDFS_PREVIEW_URL; + + public String upload(MultipartFile file) throws IOException { + return upload(file.getInputStream(), file.getSize(), FileUtil.extName(file.getOriginalFilename())); + } + + public String upload(InputStream is, long size, String fileExtName) { + StorePath storePath = fastFileStorageClient.uploadFile("group1", is, size, fileExtName); + return "/" + storePath.getFullPath(); + } + + public InputStream download(String filePath) { + HttpResponse httpResponse = HttpUtil.createGet(FDFS_PREVIEW_URL + filePath) + .execute(); + return httpResponse.bodyStream(); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/FlowActionService.java b/src/main/java/com/biutag/supervision/service/FlowActionService.java new file mode 100644 index 0000000..61177c4 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/FlowActionService.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.FlowAction; +import com.biutag.supervision.mapper.FlowActionMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class FlowActionService extends ServiceImpl { + + public List list(String flowKey) { + return list(new LambdaQueryWrapper().eq(FlowAction::getFlowKey, flowKey).orderByAsc(FlowAction::getSort)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/FlowNodeService.java b/src/main/java/com/biutag/supervision/service/FlowNodeService.java new file mode 100644 index 0000000..7f20d88 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/FlowNodeService.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.FlowNode; +import com.biutag.supervision.mapper.FlowNodeMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class FlowNodeService extends ServiceImpl { + + public List listAll() { + return list(new LambdaUpdateWrapper().orderByAsc(FlowNode::getFlowSort)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/HolidayService.java b/src/main/java/com/biutag/supervision/service/HolidayService.java new file mode 100644 index 0000000..ce9062e --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/HolidayService.java @@ -0,0 +1,42 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.HolidayMapper; +import com.biutag.supervision.pojo.entity.Holiday; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; + +@Slf4j +@RequiredArgsConstructor +@Service +public class HolidayService extends ServiceImpl { + + private final RedisTemplate redisTemplate; + + public List list(Integer year) { + return list(new LambdaQueryWrapper().eq(Holiday::getYear, year)); + } + + public boolean isHoliday(String date) { + long l = System.currentTimeMillis(); + Boolean result = (Boolean) redisTemplate.opsForValue().get(String.format("holiday:%s", date)); + if (Objects.nonNull(result)) { + return result; + } + Holiday holiday = getOne(new LambdaUpdateWrapper().eq(Holiday::getDate, date)); + if (Objects.isNull(holiday)) { + // log.error("节假日 {} 数据未找到", date); + return false; + } + redisTemplate.opsForValue().set(String.format("holiday:%s", date), holiday.getFlag()); + return holiday.getFlag(); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/MenuService.java b/src/main/java/com/biutag/supervision/service/MenuService.java new file mode 100644 index 0000000..5c30bd5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/MenuService.java @@ -0,0 +1,61 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.MenuEnum; +import com.biutag.supervision.pojo.entity.Menu; +import com.biutag.supervision.mapper.MenuMapper; +import com.biutag.supervision.pojo.entity.RoleMenu; +import com.biutag.supervision.pojo.model.UserAuth; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@Service +public class MenuService extends ServiceImpl { + + private final RoleMenuService roleMenuService; + + public List listAll() { + return list(new LambdaQueryWrapper() + .in(Menu::getMenuType, Arrays.asList(MenuEnum.CATALOGUE.value(), MenuEnum.MENU.value())) + .orderByAsc(Menu::getMenuSort)); + } + + public List listMenuByCurrentUser() { + UserAuth user = UserContextHolder.getCurrentUser(); + if (user.getRoleCodes().isEmpty()) { + return new ArrayList<>(); + } + List roleMenus = roleMenuService.list(user.getRoleCodes()); + if (roleMenus.isEmpty()) { + return new ArrayList<>(); + } + return list(new LambdaQueryWrapper() + .in(Menu::getMenuType, Arrays.asList(MenuEnum.CATALOGUE.value(), MenuEnum.MENU.value())) + .in(Menu::getId, roleMenus.stream().map(RoleMenu::getMenuId).collect(Collectors.toSet())) + .orderByAsc(Menu::getMenuSort)); + } + + public List listPermsByCurrentUser() { + UserAuth user = UserContextHolder.getCurrentUser(); + if (user.getRoleCodes().isEmpty()) { + return new ArrayList<>(); + } + List roleMenus = roleMenuService.list(user.getRoleCodes()); + if (roleMenus.isEmpty()) { + return new ArrayList<>(); + } + return list(new LambdaQueryWrapper() + .eq(Menu::getMenuType, MenuEnum.BUTTON.value()) + .in(Menu::getId, roleMenus.stream().map(RoleMenu::getMenuId).collect(Collectors.toSet())) + ).stream().map(Menu::getPerms).toList(); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/ModelClassService.java b/src/main/java/com/biutag/supervision/service/ModelClassService.java new file mode 100644 index 0000000..37a42bc --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/ModelClassService.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.ModelClass; +import com.biutag.supervision.mapper.ModelClassMapper; +import org.springframework.stereotype.Service; + +@Service +public class ModelClassService extends ServiceImpl { + +} diff --git a/src/main/java/com/biutag/supervision/service/ModelClueRecordService.java b/src/main/java/com/biutag/supervision/service/ModelClueRecordService.java new file mode 100644 index 0000000..4641af1 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/ModelClueRecordService.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.ModelClueRecord; +import com.biutag.supervision.mapper.ModelClueRecordMapper; +import org.springframework.stereotype.Service; + +@Service +public class ModelClueRecordService extends ServiceImpl { + +} diff --git a/src/main/java/com/biutag/supervision/service/ModelClueService.java b/src/main/java/com/biutag/supervision/service/ModelClueService.java new file mode 100644 index 0000000..96a08bd --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/ModelClueService.java @@ -0,0 +1,802 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.constants.enums.*; +import com.biutag.supervision.mapper.*; +import com.biutag.supervision.pojo.dto.ModelClueTaskDistribute; +import com.biutag.supervision.pojo.dto.NegativeDto; +import com.biutag.supervision.pojo.entity.*; +import com.biutag.supervision.pojo.model.ModelClueModel; +import com.biutag.supervision.pojo.param.ModelClueQueryParam; +import com.biutag.supervision.pojo.vo.FileVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Slf4j +@RequiredArgsConstructor +@Service +public class ModelClueService extends ServiceImpl { + + private final ModelMapper modelMapper; + + private final ModelClueTaskService modelClueTaskService; + + private final NegativeService negativeService; + + public final SupDepartService departService; + + public final ModelClueMapper modelClueMapper; + + public final ModelClueDataMapper modelClueDataMapper; + + public final ModelClueRecordMapper modelClueRecordMapper; + + public final SupExternalDepartMapper supExternalDepartMapper; + + public Page page(ModelClueQueryParam param) { + if (Objects.nonNull(param.getModelIds()) && param.getModelIds().isEmpty()) { + return new Page().setTotal(0).setRecords(new ArrayList<>()); + } + QueryWrapper queryWrapper = new QueryWrapper() + .eq(StrUtil.isNotBlank(param.getDistributionMethod()), "m.distribution_method", param.getDistributionMethod()) + .in(Objects.nonNull(param.getModelIds()) && !param.getModelIds().isEmpty(), "mc.model_id", param.getModelIds()) + .eq(Objects.nonNull(param.getInvolveDepartId()), "mc.involve_depart_id", param.getInvolveDepartId()) + .eq(StrUtil.isNotBlank(param.getDistributionState()), "mc.distribution_state", param.getDistributionState()) + .like(StrUtil.isNotBlank(param.getThingDesc()), "mc.thing_desc", param.getThingDesc()) + .orderByDesc("mc.create_time"); + if (Objects.nonNull(param.getCreateTime()) && param.getCreateTime().size() == 2) { + queryWrapper.between("mc.create_time", param.getCreateTime().get(0), param.getCreateTime().get(1)); + } + return baseMapper.queryPage(Page.of(param.getCurrent(), param.getSize()), queryWrapper); + } + + public List listByUnDistributed(Integer modelId) { + return list(new LambdaQueryWrapper().eq(ModelClue::getModelId, modelId).eq(ModelClue::getDistributionState, DistributionStateEnum.UNDISTRIBUTED.getValue())); + } + + public boolean distribution(ModelClueTaskDistribute taskDistribute) { + List modelClues = taskDistribute.getModelClues(); + Model model = modelMapper.selectById(modelClues.get(0).getModelId()); + model.setTimeLimit(taskDistribute.getTimeLimit()); + model.setMaxSignDuration(taskDistribute.getMaxSignDuration()); + model.setMaxHandleDuration(taskDistribute.getMaxHandleDuration()); + model.setMaxExtensionDuration(taskDistribute.getMaxExtensionDuration()); + model.setApprovalFlow(taskDistribute.getApprovalFlow()); + model.setDistributionFlow(taskDistribute.getDistributionFlow()); + + return distribution(modelClues, model, taskDistribute.getTaskName(), taskDistribute.getThingFiles()); + } + + + public boolean distribution(Integer modelId) { + List modelClues = listByUnDistributed(modelId); + Model model = modelMapper.selectById(modelId); + String taskName = "自动下发"; + return distribution(modelClues, model, taskName, new ArrayList<>()); + } + + @Transactional(rollbackFor = Exception.class) + public boolean distribution(List modelClues, Model model, String taskName, List thingFiles) { + LocalDateTime now = LocalDateTime.now(); + modelClues.forEach(item -> { + if (Objects.isNull(item.getInvolveDepartId())) { + throw new RuntimeException("涉及单位不能为空..."); + } + NegativeDto negative = new NegativeDto(); + // 问题来源 + negative.setProblemSources(ProblemSourcesEnum.LMGZ.getLabel()); + negative.setProblemSourcesCode(ProblemSourcesEnum.LMGZ.getValue()); + // TODO 业务类别 涉及问题 + // 涉及单位 + negative.setInvolveDepartId(item.getInvolveDepartId()); + negative.setInvolveDepartName(item.getInvolveDepartName()); + // 问题发生时间 + negative.setHappenTime(item.getCreateTime()); + // 问题发现时间 + negative.setDiscoveryTime(item.getCreateTime()); + // 事情简要描述 + negative.setThingDesc(item.getThingDesc()); + // 主办层级 + negative.setHostLevel(HostLevelEnums.THREE.getValue()); + // 办理单位 + SupDepart depart = departService.getById(item.getInvolveDepartId()); + if (depart.getLevel().equals(DepartLevelEnum.SECOND.getValue())) { + negative.setDepartId(depart.getId()); + negative.setDepartName(depart.getName()); + } + if (depart.getLevel().equals(DepartLevelEnum.THREE.getValue()) && Objects.equals(model.getDistributionFlow(), DistributionFlowEnum.SECOND.getValue())) { + SupDepart parentDepart = departService.getParentDepart(item.getInvolveDepartId()); + negative.setDepartId(parentDepart.getId()); + negative.setDepartName(parentDepart.getName()); + } + if (depart.getLevel().equals(DepartLevelEnum.THREE.getValue()) && Objects.equals(model.getDistributionFlow(), DistributionFlowEnum.THIRD.getValue())) { + negative.setDepartId(depart.getId()); + negative.setDepartName(depart.getName()); + } + negative.setTimeLimit(model.getTimeLimit()); + negative.setMaxSignDuration(model.getMaxSignDuration()); + negative.setMaxHandleDuration(model.getMaxHandleDuration()); + negative.setMaxExtensionDuration(model.getMaxExtensionDuration()); + // 审批流程 + negative.setApprovalFlow(model.getApprovalFlow()); + + negativeService.save(negative); + + item.setDistributionState(DistributionStateEnum.DISTRIBUTED.getValue()); + item.setUpdateTime(LocalDateTime.now()); + item.setNegativeId(negative.getId()); + updateById(item); + }); + ModelClueTask modelClueTask = new ModelClueTask(); + modelClueTask.setTaskName(taskName); + modelClueTask.setModelId(model.getId()); + modelClueTask.setSize(modelClues.size()); + modelClueTask.setDistributionTime(now); + // 下发方式 + modelClueTask.setDistributionMethod(model.getDistributionMethod()); + modelClueTaskService.save(modelClueTask); + return true; + } + + public void generate(Integer modelId) { + Model model = modelMapper.selectById(modelId); + List modelClues = new ArrayList<>(); + if (!Objects.isNull(model)) { + if (model.getModelSql() != null) { + modelClues.addAll(getModelClueBySql(model.getModelSql(), modelId)); + } + } + if (!modelClues.isEmpty()) { + for (ModelClue modelClue : modelClues) { + modelClue.setModelId(modelId); + modelClue.setCreateTime(LocalDateTime.now()); + } + modelClueMapper.insert(modelClues); + modelClueRecordMapper.insert(new ModelClueRecord().setModelId(modelId).setSize(modelClues.size()).setCreateTime(LocalDateTime.now()).setState("success")); + } else { + modelClueRecordMapper.insert(new ModelClueRecord().setModelId(modelId).setSize(0).setCreateTime(LocalDateTime.now()).setState("fail").setErrMsg("数据为空")); + } + } + + public List getModelClueBySql(String sql, Integer modelId) { + List modelClues = new ArrayList<>(); + if (modelId == 2) { // 2号模型:行政、刑事案件受立案不及时问题监督模型 + return getModelCluesForModel2(sql, modelClues); + } else if (modelId == 4) { // 4号模型:疑似漏登执法办案场所问题监督模型 + return getModelCluesForModel4(sql, modelClues); + } else if (modelId == 16) { // 16号模型:多次取保的异常数据 + getModelCluesForModel16(sql, modelClues); + return modelClues; + } else { + System.out.println("模型" + modelId + "开始查询数据库"); + modelClues = modelClueDataMapper.selectDataByDynamicSql(sql); + System.out.println("模型" + modelId + "查询数据库完毕,数量为:" + modelClues.size()); + } + List uniqueKeys = modelClues.stream().map(ModelClue::getUniqueKey).filter(k -> k != null && !k.isEmpty()).toList(); + List oldUniqueKeys = this.listObjs(new LambdaQueryWrapper().select(ModelClue::getUniqueKey).eq(ModelClue::getStatus, 0).eq(ModelClue::getModelId, modelId), String::valueOf); + List changeStatusIds = oldUniqueKeys.stream().filter(item -> !uniqueKeys.contains(item)).toList(); + if (!changeStatusIds.isEmpty()) { + modelClueMapper.update(null, new LambdaUpdateWrapper().in(ModelClue::getUniqueKey, changeStatusIds).set(ModelClue::getStatus, 1)); + } + List needsInsertIds = uniqueKeys.stream().filter(item -> !oldUniqueKeys.contains(item)).toList(); + if (needsInsertIds.isEmpty()) { + return new ArrayList<>(); + } + List needsInsertModelClues = modelClues.stream().filter(item -> needsInsertIds.contains(item.getUniqueKey())).toList(); + String newSql = generateNewSql(sql, needsInsertIds); + List> allData = modelClueDataMapper.selectByUniqueKeys(newSql); + String originalFieldName = getKeyFieldName(sql); + for (ModelClue modelClue : needsInsertModelClues) { + for (Map data : allData) { + String keyColumn = (String) data.get(originalFieldName); + if (Objects.equals(keyColumn, modelClue.getUniqueKey())) { + modelClue.setData(JSONObject.toJSONString(data)); + modelClue.setStatus(0); + SupExternalDepart supExternalDepart = supExternalDepartMapper.selectOne(new LambdaQueryWrapper().eq(SupExternalDepart::getExternalId, modelClue.getInvolveDepartId()).last("LIMIT 1")); + if (supExternalDepart != null && supExternalDepart.getInternalShortName() != null && !supExternalDepart.getInternalShortName().isEmpty()) { + modelClue.setInvolveDepartName(supExternalDepart.getInternalShortName()); + modelClue.setInvolveDepartId(supExternalDepart.getInternalId()); + } + setPerson(modelId, modelClue, data); + generateZFBAThingDesc(modelId, modelClue, data); + break; + } + } + } + return needsInsertModelClues; + } + + private void setPerson(Integer modelId, ModelClue modelClue, Map data) { + if (modelId == 3) { // 执法区域人员表 + if (data.get("bar1") != null && !data.get("bar1").equals("")) { + if (data.get("bar2") != null && !data.get("bar2").equals("")) { + modelClue.setInvolvePoliceName(data.get("bar1") + "," + data.get("bar2")); + } else { + modelClue.setInvolvePoliceName((String) data.get("bar1")); + } + } else { + if (data.get("bar2") != null && !data.get("bar2").equals("")) { + modelClue.setInvolvePoliceName((String) data.get("bar2")); + } else { + modelClue.setInvolvePoliceName("无数据"); + } + } + if (data.get("bar1jh") != null && !data.get("bar1jh").equals("")) { + if (data.get("bar2jh") != null && !data.get("bar2jh").equals("")) { + modelClue.setInvolvePoliceEmpNo(data.get("bar1jh") + "," + data.get("bar2jh")); + } else { + modelClue.setInvolvePoliceEmpNo((String) data.get("bar1jh")); + } + } else { + if (data.get("bar2jh") != null && !data.get("bar2jh").equals("")) { + modelClue.setInvolvePoliceEmpNo((String) data.get("bar2jh")); + } else { + modelClue.setInvolvePoliceEmpNo("无数据"); + } + } + } + if (modelId == 10 || modelId == 11 || modelId == 12 || modelId == 13 || modelId == 14 || modelId == 15) { // 案件基本信息表 + Map bar1; + Map bar2; + if (data.get("BAR1ID") != null && !data.get("BAR1ID").equals("")) { + bar1 = modelClueDataMapper.selectBAR((String) data.get("BAR1ID")); + if (data.get("BAR2ID") != null && !data.get("BAR2ID").equals("")) { + bar2 = modelClueDataMapper.selectBAR((String) data.get("BAR2ID")); + if (bar1 != null) { + if (bar2 != null) { + modelClue.setInvolvePoliceEmpNo(bar1.get("JH") + "," + bar2.get("JH")); + modelClue.setInvolvePoliceName(bar1.get("XM") + "," + bar2.get("XM")); + } else { + modelClue.setInvolvePoliceEmpNo((String) bar1.get("JH")); + modelClue.setInvolvePoliceName((String) bar1.get("XM")); + } + } else if (bar2 != null) { + modelClue.setInvolvePoliceEmpNo((String) bar2.get("JH")); + modelClue.setInvolvePoliceName((String) bar2.get("XM")); + } else { + modelClue.setInvolvePoliceEmpNo("无数据"); + modelClue.setInvolvePoliceName("无数据"); + } + } else { + if (bar1 != null) { + modelClue.setInvolvePoliceEmpNo((String) bar1.get("JH")); + modelClue.setInvolvePoliceName((String) bar1.get("XM")); + } else { + modelClue.setInvolvePoliceEmpNo("无数据"); + modelClue.setInvolvePoliceName("无数据"); + } + } + } else { + if (data.get("bar2jh") != null && !data.get("bar2jh").equals("")) { + bar2 = modelClueDataMapper.selectBAR((String) data.get("BAR2ID")); + if (bar2 != null) { + modelClue.setInvolvePoliceEmpNo((String) bar2.get("JH")); + modelClue.setInvolvePoliceName((String) bar2.get("XM")); + } else { + modelClue.setInvolvePoliceEmpNo("无数据"); + modelClue.setInvolvePoliceName("无数据"); + } + } else { + modelClue.setInvolvePoliceEmpNo("无数据"); + modelClue.setInvolvePoliceName("无数据"); + } + } + } + } + + private static void generateZFBAThingDesc(Integer modelId, ModelClue modelClue, Map data) { + if (modelId == 1) { // 1号模型:行政、刑事案件受理30天仍未立案问题监督模型 + String thingDesc = modelClue.getThingDesc(); + modelClue.setThingDesc("该" + data.get("AJBZmc") + + "案件编号为" + data.get("AJBH") + + ",报案日期为" + getDateString(data.get("BARQ")) + + ",受理日期为" + getDateString(data.get("SLRQ")) + + ",当前案件状态为“" + data.get("AJZTmc") + + "”,已经超过" + "30" + + "日仍未受理。" + thingDesc); + } else if (modelId == 3) { // 3号模型:执法办案场所登记时长超时问题监督模型 + if (data.get("lksj") != null && !data.get("lksj").equals("")) { + modelClue.setThingDesc("姓名" + data.get("xm") + + ",身份证号" + data.get("zjhm") + + ",于" + formatStringDate((String) data.get("djsj")) + + "登记进入" + modelClue.getInvolveDepartName() + + ",离开时间为" + formatStringDate((String) data.get("lksj")) + + ",超过了48小时。"); + } else { + modelClue.setThingDesc("姓名" + data.get("xm") + + ",身份证号" + data.get("zjhm") + + ",于" + formatStringDate((String) data.get("djsj")) + + "登记进入" + modelClue.getInvolveDepartName() + + ",没有离开时间。"); + } + } else if (modelId == 10) { // 10号模型:案件受理不及时的异常数据 + modelClue.setThingDesc("该" + data.get("AJBZmc") + + "案件编号为" + getAjbh(data) + + ",报案日期为" + getDateString(data.get("BARQ")) + + ",受理日期为" + getDateString(data.get("SLRQ")) + + ",当前案件状态为“" + data.get("AJZTmc") + + "”,超过" + "3" + + "日未受理。"); + } else if (modelId == 11) { // 11号模型:立案不及时的异常数据(7天) + modelClue.setThingDesc("该" + data.get("AJBZmc") + + "案件编号为" + getAjbh(data) + + ",受理日期为" + getDateString(data.get("SLRQ")) + + ",立案日期为" + getDateString(data.get("LARQ")) + + ",当前案件状态为“" + data.get("AJZTmc") + + "”,超过" + "7" + + "日未受理。"); + } else if (modelId == 12) { // 12号模型:立案不及时的异常数据(30天) + modelClue.setThingDesc("该" + data.get("AJBZmc") + + "案件编号为" + getAjbh(data) + + ",受理日期为" + getDateString(data.get("SLRQ")) + + ",立案日期为" + getDateString(data.get("LARQ")) + + ",当前案件状态为“" + data.get("AJZTmc") + + "”,超过" + "30" + + "日未受理。"); + } else if (modelId == 13) { // 13号模型:立案不及时的异常数据(60天) + modelClue.setThingDesc("该" + data.get("AJBZmc") + + "案件编号为" + getAjbh(data) + + ",受理日期为" + getDateString(data.get("SLRQ")) + + ",立案日期为" + getDateString(data.get("LARQ")) + + ",当前案件状态为“" + data.get("AJZTmc") + + "”,超过" + "60" + + "日未受理。"); + } else if (modelId == 14) { // 14号模型:立案不及时的异常数据(无数据) + modelClue.setThingDesc("该" + data.get("AJBZmc") + + "案件编号为" + getAjbh(data) + + ",受理日期为" + getDateString(data.get("SLRQ")) + + ",立案日期 无数据" + + ",当前案件状态为“" + data.get("AJZTmc") + + "”,立案不及时。"); + } else if (modelId == 15) { // 15号模型:未录入受害人员的异常数据 + modelClue.setThingDesc("该" + data.get("AJBZmc") + + "案件编号为" + getAjbh(data) + + ",受理日期为" + getDateString(data.get("SLRQ")) + + ",没有录入受害人。"); + } + } + + private static String getAjbh(Map data) { + String AJBH; + if (data.get("AJBH") == null || data.get("AJBH").equals("")) { + AJBH = "空"; + } else { + AJBH = (String) data.get("AJBH"); + } + return AJBH; + } + + private List getModelCluesForModel4(String param, List modelClues) { + System.out.println("模型4开始查询数据库"); + List params = parseSqlForModel2(param); + String jjdSql = "SELECT gxdwdm AS involve_depart_id, gxdwmc AS involve_depart_name, COUNT(*) AS zjjs FROM dwd_asj_zhtx_jjd WHERE cjsj BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00' GROUP BY gxdwdm, gxdwmc;"; + String zfqySql = "SELECT csid AS involve_depart_id, COUNT(*) AS zfcsdjs FROM dwd_ry_zfba_zfqywfryb WHERE STR_TO_DATE( djsj, '%Y%m%d%H%i%s' ) BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00' GROUP BY csid;"; + List> jjdmaps = modelClueDataMapper.selectByUniqueKeys(jjdSql); + List> zfqymaps = modelClueDataMapper.selectByUniqueKeys(zfqySql); + System.out.println("模型4查询数据库完毕"); + if (jjdmaps.isEmpty()) { + return modelClues; + } + List jjdModelClues = new ArrayList<>(); + for (Map data : jjdmaps) { + SupExternalDepart supExternalDepart = supExternalDepartMapper.selectOne(new LambdaQueryWrapper().eq(SupExternalDepart::getExternalId, data.get("involve_depart_id")).last("LIMIT 1")); + if (supExternalDepart != null && supExternalDepart.getExternalId() != null && supExternalDepart.getExternalName() != null && supExternalDepart.getInternalId() != null && supExternalDepart.getLevel() != null && supExternalDepart.getPid() != null) { + ModelClue modelClue = new ModelClue(); + modelClue.setData(JSONObject.toJSONString(data)); + modelClue.setInvolveDepartId(supExternalDepart.getExternalId()); + modelClue.setInvolveDepartName(supExternalDepart.getExternalName()); + modelClue.setZjjs((Long) data.get("zjjs")); + modelClue.setDepartLevel(supExternalDepart.getLevel()); + modelClue.setParentId(supExternalDepart.getPid()); + modelClue.setThisId(supExternalDepart.getInternalId()); + jjdModelClues.add(modelClue); + } + } + List jjdModelClues3 = new ArrayList<>(jjdModelClues.stream().filter(clue -> clue.getDepartLevel() == 3).toList()); + List jjdModelClues4 = new ArrayList<>(jjdModelClues.stream().filter(clue -> clue.getDepartLevel() == 4).toList()); + List jjdModelClues5 = new ArrayList<>(jjdModelClues.stream().filter(clue -> clue.getDepartLevel() == 5).toList()); + mergeModelClues(jjdModelClues5, jjdModelClues4, 1); + mergeModelClues(jjdModelClues4, jjdModelClues3, 1); + List zfqymModelClues = new ArrayList<>(); + for (Map data : zfqymaps) { + SupExternalDepart supExternalDepart = supExternalDepartMapper.selectOne(new LambdaQueryWrapper().eq(SupExternalDepart::getExternalId, data.get("involve_depart_id")).last("LIMIT 1")); + if (supExternalDepart != null && supExternalDepart.getExternalId() != null && supExternalDepart.getExternalName() != null && supExternalDepart.getInternalId() != null && supExternalDepart.getLevel() != null && supExternalDepart.getPid() != null) { + ModelClue modelClue = new ModelClue(); + modelClue.setData(JSONObject.toJSONString(data)); + modelClue.setInvolveDepartId(supExternalDepart.getExternalId()); + modelClue.setZfcsdjs((Long) data.get("zfcsdjs")); + modelClue.setDepartLevel(supExternalDepart.getLevel()); + modelClue.setParentId(supExternalDepart.getPid()); + modelClue.setThisId(supExternalDepart.getInternalId()); + zfqymModelClues.add(modelClue); + } + } + List zfqymModelClues3 = new ArrayList<>(zfqymModelClues.stream().filter(clue -> clue.getDepartLevel() == 3).toList()); + List zfqymModelClues4 = new ArrayList<>(zfqymModelClues.stream().filter(clue -> clue.getDepartLevel() == 4).toList()); + List zfqymModelClues5 = new ArrayList<>(zfqymModelClues.stream().filter(clue -> clue.getDepartLevel() == 5).toList()); + mergeModelClues(zfqymModelClues5, zfqymModelClues4, 2); + mergeModelClues(zfqymModelClues4, zfqymModelClues3, 2); + BigDecimal avgPercentage; + if (!zfqymModelClues3.isEmpty()) { + BigDecimal zjjsTotal = BigDecimal.valueOf(jjdModelClues3.stream().mapToLong(ModelClue::getZjjs).sum()); + BigDecimal zfcsdjsTotal = BigDecimal.valueOf(zfqymModelClues3.stream().mapToLong(ModelClue::getZfcsdjs).sum()); + // 全市平均数 + avgPercentage = zfcsdjsTotal.divide(zjjsTotal, 2, RoundingMode.HALF_UP); + } else { + avgPercentage = BigDecimal.ZERO; + } + for (ModelClue jjdModelClue : jjdModelClues3) { + if (zfqymModelClues3.isEmpty()) { + jjdModelClue.setStatus(0); + jjdModelClue.setThingDesc("在" + params.get(0) + "到" + params.get(1) + "之间," + jjdModelClue.getInvolveDepartName() + + "的总警情数为" + jjdModelClue.getZjjs() + + ",执法场所登记数为0" + + ",每100起警情执法场所登记比例为0" + + ",低于全市平均值(" + avgPercentage + + "%),疑似漏登执法办案场所。"); + } else { + Iterator iterator1 = zfqymModelClues3.iterator(); + boolean found = false; + while (iterator1.hasNext()) { + ModelClue zfqymModelClue = iterator1.next(); + if (jjdModelClue.getInvolveDepartId().equals(zfqymModelClue.getInvolveDepartId())) { + jjdModelClue.setZfcsdjs(zfqymModelClue.getZfcsdjs()); + BigDecimal zfcsdjs = BigDecimal.valueOf(jjdModelClue.getZfcsdjs()); + BigDecimal zjjs = BigDecimal.valueOf(jjdModelClue.getZjjs()); + BigDecimal bl = zfcsdjs.divide(zjjs, 2, RoundingMode.HALF_UP); + jjdModelClue.setBl(bl); + jjdModelClue.setStatus(0); + jjdModelClue.setThingDesc("在" + params.get(0) + "到" + params.get(1) + "之间," + jjdModelClue.getInvolveDepartName() + + "的总警情数为" + jjdModelClue.getZjjs() + + ",执法场所登记数为" + jjdModelClue.getZfcsdjs() + + ",每100起警情执法场所登记比例为" + jjdModelClue.getBl() + + ",低于全市平均值(" + avgPercentage + + "%),疑似漏登执法办案场所。"); + iterator1.remove(); + found = true; + break; + } + } + if (!found) { + jjdModelClue.setStatus(0); + jjdModelClue.setThingDesc("在" + params.get(0) + "到" + params.get(1) + "之间," + jjdModelClue.getInvolveDepartName() + + "的总警情数为" + jjdModelClue.getZjjs() + + ",执法场所登记数为0" + + ",每100起警情执法场所登记比例为0%" + + ",低于全市平均值(" + avgPercentage + + "%),疑似漏登执法办案场所。"); + } + } + } + modelClues.addAll(jjdModelClues3); + return modelClues; + } + + private void getModelCluesForModel16(String param, List modelClues) { + System.out.println("模型16开始查询数据库"); + List params = parseSqlForModel2(param); + String selectSfzh = "SELECT count(sfzh) as num, sfzh FROM dwd_wp_zfba_qbhsjds WHERE STR_TO_DATE(pzrq, '%Y%m%d%H%i%s') BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00' GROUP BY sfzh HAVING count(sfzh) > 2;"; + List> sfzhList = modelClueDataMapper.selectByUniqueKeys(selectSfzh); + Map sfzhMap = sfzhList.stream().filter(map -> map.get("sfzh") != null).collect(Collectors.toMap( + map -> (String) map.get("sfzh"), + map -> (long)map.get("num")) + ); + System.out.println("模型16查询数据库完毕"); + if (sfzhMap.isEmpty()) { + return; + } + String selectSfzh2 = "SELECT a.zj AS uniqueKey, a.sfzh AS negative_id, a.badwid AS involve_depart_id, a.badwmc AS involve_depart_name, a.bar1xm, a.bar2xm, a.bar1id, a.bar2id, a.sfzh, a.xm FROM dwd_wp_zfba_qbhsjds a INNER JOIN (SELECT sfzh, MAX(STR_TO_DATE(pzrq, '%Y%m%d%H%i%s')) AS max_create_time FROM dwd_wp_zfba_qbhsjds WHERE STR_TO_DATE(pzrq, '%Y%m%d%H%i%s') BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00' GROUP BY sfzh) b ON a.sfzh = b.sfzh AND STR_TO_DATE(a.pzrq, '%Y%m%d%H%i%s') = b.max_create_time;"; + List> newModelClues = modelClueDataMapper.selectByUniqueKeys(selectSfzh2); + for (Map modelClue : newModelClues) { + if (!sfzhMap.containsKey((String) modelClue.get("sfzh"))) { + continue; + } + Long count = baseMapper.selectCount(new LambdaQueryWrapper().eq(ModelClue::getNegativeId, modelClue.get("sfzh"))); + if (count > 0) { + continue; + } + ModelClue newModelClue = new ModelClue(); + newModelClue.setUniqueKey((String) modelClue.get("uniqueKey")); + newModelClue.setNegativeId((String) modelClue.get("negative_id")); + if (modelClue.get("involve_depart_id") != null) { + SupExternalDepart supExternalDepart = supExternalDepartMapper.selectOne(new LambdaQueryWrapper().eq(SupExternalDepart::getExternalId, modelClue.get("involve_depart_id")).last("LIMIT 1")); + if (supExternalDepart != null) { + if (supExternalDepart.getInternalId() != null) { + newModelClue.setInvolveDepartId(supExternalDepart.getInternalId()); + } + if (supExternalDepart.getInternalShortName() != null) { + newModelClue.setInvolveDepartName(supExternalDepart.getInternalShortName()); + } + } + } + if (modelClue.get("bar1xm") != null) { + if (modelClue.get("bar2xm") != null) { + newModelClue.setInvolvePoliceName(modelClue.get("bar1xm") + "、" + modelClue.get("bar2xm")); + } else { + newModelClue.setInvolvePoliceName((String) modelClue.get("bar1xm")); + } + } else { + if (modelClue.get("bar2xm") != null) { + newModelClue.setInvolvePoliceName((String) modelClue.get("bar2xm")); + } else { + newModelClue.setInvolvePoliceName("无数据"); + } + } + Map bar1 = modelClueDataMapper.selectBAR((String) modelClue.get("bar1id")); + Map bar2 = modelClueDataMapper.selectBAR((String) modelClue.get("bar2id")); + if (bar1 != null && bar1.get("JH") != null) { + if (bar2 != null && bar2.get("JH") != null) { + newModelClue.setInvolvePoliceEmpNo(bar1.get("JH") + "、" + bar2.get("JH")); + } else { + newModelClue.setInvolvePoliceEmpNo((String) bar1.get("JH")); + } + } else { + if (bar2 != null && bar2.get("JH") != null) { + newModelClue.setInvolvePoliceEmpNo((String) bar2.get("JH")); + } else { + newModelClue.setInvolvePoliceEmpNo("无数据"); + } + } + newModelClue.setData(JSONObject.toJSONString(modelClue)); + newModelClue.setStatus(0); + newModelClue.setThingDesc("在" + params.get(0) + "到" + params.get(1) + "之间," + + (String) modelClue.get("xm") + + "(身份证号:" + modelClue.get("sfzh") + ")的取保次数为" + + sfzhMap.get((String) modelClue.get("sfzh")) + "次,大于2次,属于多次取保异常数据。"); + modelClues.add(newModelClue); + sfzhMap.remove((String) modelClue.get("sfzh")); + } + } + + private void mergeModelClues(List modelClues2, List modelClues1 , int no) { + for (ModelClue modelClue2 : modelClues2) { + Iterator iterator1 = modelClues1.iterator(); + boolean found = false; + while (iterator1.hasNext()) { + ModelClue modelClue1 = iterator1.next(); + if (modelClue2.getParentId().equals(modelClue1.getThisId())) { + if (no == 1) { + modelClue1.setZjjs(modelClue2.getZjjs() + modelClue1.getZjjs()); + } else if (no == 2) { + modelClue1.setZfcsdjs(modelClue2.getZfcsdjs() + modelClue1.getZfcsdjs()); + } + modelClue1.setData(modelClue1.getData() + modelClue2.getData()); + found = true; + break; + } + } + if (!found) { + SupExternalDepart supExternalDepart = supExternalDepartMapper.selectOne(new LambdaQueryWrapper().eq(SupExternalDepart::getInternalId, modelClue2.getParentId()).last("LIMIT 1")); + if (supExternalDepart != null) { + ModelClue newModelClue = new ModelClue(); + newModelClue.setData(modelClue2.getData()); + newModelClue.setInvolveDepartId(supExternalDepart.getExternalId()); + newModelClue.setInvolveDepartName(supExternalDepart.getExternalName()); + newModelClue.setParentId(supExternalDepart.getPid()); + newModelClue.setThisId(supExternalDepart.getInternalId()); + newModelClue.setDepartLevel(supExternalDepart.getLevel()); + if (no == 1) { + newModelClue.setZjjs(modelClue2.getZjjs()); + } else if (no == 2) { + newModelClue.setZfcsdjs(modelClue2.getZfcsdjs()); + } + modelClues1.add(newModelClue); + } else { + System.out.println("父级部门" + modelClue2.getParentId() + "不存在"); + } + } + } + } + + private List getModelCluesForModel2(String param, List modelClues) { + List modelClues1 = new ArrayList<>(); + List params = parseSqlForModel2(param); + String preSql = "SELECT a.jjdbh AS uniqueKey, a.jjdbh AS negative_id, a.gxdwmc AS involve_depart_name, a.gxdwdm AS involve_depart_id FROM dwd_asj_zhtx_jjd a WHERE (a.jqxzdm LIKE '01%' OR a.jqxzdm LIKE '02%') AND a.bjnr LIKE '%"; + String postSql = "%' AND NOT EXISTS (SELECT 1 FROM dwd_asj_sjjhygx_jjcjxxb b WHERE b.BARLXDH = a.bjdh) AND a.bjsj BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00';"; + genarateModelCluesForModel2(preSql, postSql, modelClues1); + List uniqueKeys = modelClues1.stream().map(ModelClue::getUniqueKey).filter(k -> k != null && !k.isEmpty()).toList(); + if (!uniqueKeys.isEmpty()) { + String newSql = "SELECT a.* FROM dwd_asj_zhtx_jjd a LEFT JOIN dwd_asj_sjjhygx_jjcjxxb b ON b.BARLXDH = a.bjdh WHERE a.jjdbh IN " + "(" + uniqueKeys.stream().map(k -> "'" + k + "'").collect(Collectors.joining(",")) + ");"; + System.out.println("测试2开始查询数据库 newSql"); + List> allData = modelClueDataMapper.selectByUniqueKeys(newSql); + System.out.println("测试2查询数据库newSql记录条数:" + allData.size()); + for (ModelClue modelClue : modelClues1) { + for (Map data : allData) { + String keyColumn = (String) data.get("jjdbh"); + if (Objects.equals(keyColumn, modelClue.getUniqueKey())) { + modelClue.setData(JSONObject.toJSONString(data)); + modelClue.setStatus(0); + String jqxz = ""; + jqxz = summarizeAttribute(data, jqxz); + modelClue.setThingDesc("该" + jqxz + + "警情接警单编号为" + data.get("jjdbh") + + ",报案时间为" + getDateString(data.get("bjsj")) + + ",没有匹配到立案时间,受立案不及时。"); + break; + } + } + } + modelClues.addAll(modelClues1); + } + List modelClues2 = new ArrayList<>(); + String preSql2 = "SELECT a.jjdbh AS uniqueKey, a.jjdbh AS negative_id, a.gxdwmc AS involve_depart_name, a.gxdwdm AS involve_depart_id FROM dwd_asj_zhtx_jjd a WHERE (a.jqxzdm LIKE '01%' OR a.jqxzdm LIKE '02%') AND a.bjnr LIKE '%"; + String postSql2 = "%' AND EXISTS (SELECT 1 FROM dwd_asj_sjjhygx_jjcjxxb b WHERE b.lasj IS NOT NULL AND b.basj < DATE_SUB(STR_TO_DATE(b.lasj, '%Y%m%d%H%i%s') , INTERVAL 7 DAY) AND b.BARLXDH = a.bjdh AND STR_TO_DATE(b.lasj, '%Y%m%d%H%i%s') > a.bjsj) AND a.bjsj BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00' ORDER BY a.bjsj desc LIMIT 1;"; + genarateModelCluesForModel2(preSql2, postSql2, modelClues2); + List uniqueKeys2 = modelClues2.stream().map(ModelClue::getUniqueKey).filter(k -> k != null && !k.isEmpty()).toList(); + if (!uniqueKeys2.isEmpty()) { + String newSql2 = "SELECT a.*, b.ajbh, b.lasj FROM dwd_asj_zhtx_jjd a LEFT JOIN dwd_asj_sjjhygx_jjcjxxb b ON b.BARLXDH = a.bjdh WHERE a.jjdbh IN " + "(" + uniqueKeys2.stream().map(k -> "'" + k + "'").collect(Collectors.joining(",")) + ");"; + List> allData2 = modelClueDataMapper.selectByUniqueKeys(newSql2); + for (ModelClue modelClue : modelClues2) { + for (Map data : allData2) { + String keyColumn = (String) data.get("jjdbh"); + if (Objects.equals(keyColumn, modelClue.getUniqueKey())) { + modelClue.setData(JSONObject.toJSONString(data)); + modelClue.setStatus(0); + String jqxz = ""; + jqxz = summarizeAttribute(data, jqxz); + modelClue.setThingDesc("该" + jqxz + + "警情接警单编号为" + data.get("jjdbh") + + ",报案时间为" + getDateString(data.get("bjsj")) + + ",案件编号为" + data.get("ajbh") + + ",立案时间为" + formatStringDate((String) data.get("lasj")) + + ",报案时间与立案时间超过7天,受立案不及时。"); + break; + } + } + } + modelClues.addAll(modelClues2); + } + return modelClues; + } + + private void genarateModelCluesForModel2(String preSql, String postSql, List modelClues) { + System.out.println("模型2开始查询数据库 盗"); + List modelClues1 = modelClueDataMapper.selectDataByDynamicSql(preSql + "盗" + postSql); + System.out.println("模型2开始查询数据库 骗"); + List modelClues2 = modelClueDataMapper.selectDataByDynamicSql(preSql + "骗" + postSql); + System.out.println("模型2开始查询数据库 强奸"); + List modelClues3 = modelClueDataMapper.selectDataByDynamicSql(preSql + "强奸" + postSql); + System.out.println("模型2开始查询数据库 抢"); + List modelClues4 = modelClueDataMapper.selectDataByDynamicSql(preSql + "抢" + postSql); + System.out.println("模型2开始查询数据库 10岁"); + List modelClues5 = modelClueDataMapper.selectDataByDynamicSql(preSql + "10岁" + postSql); + System.out.println("模型2开始查询数据库 11岁"); + List modelClues6 = modelClueDataMapper.selectDataByDynamicSql(preSql + "11岁" + postSql); + System.out.println("模型2开始查询数据库 12岁"); + List modelClues7 = modelClueDataMapper.selectDataByDynamicSql(preSql + "12岁" + postSql); + System.out.println("模型2开始查询数据库 13岁"); + List modelClues8 = modelClueDataMapper.selectDataByDynamicSql(preSql + "13岁" + postSql); + System.out.println("模型2开始查询数据库 14岁"); + List modelClues9 = modelClueDataMapper.selectDataByDynamicSql(preSql + "14岁" + postSql); + System.out.println("模型2开始查询数据库 15岁"); + List modelClues10 = modelClueDataMapper.selectDataByDynamicSql(preSql + "15岁" + postSql); + System.out.println("模型2开始查询数据库 16岁"); + List modelClues11 = modelClueDataMapper.selectDataByDynamicSql(preSql + "16岁" + postSql); + System.out.println("模型2开始查询数据库 未成年"); + List modelClues12 = modelClueDataMapper.selectDataByDynamicSql(preSql + "未成年" + postSql); + modelClues.addAll(Stream.of(modelClues1, modelClues2, modelClues3, modelClues4, modelClues5, modelClues6, modelClues7, modelClues8, modelClues9, modelClues10, modelClues11, modelClues12) + .flatMap(List::stream) + .collect(Collectors.toMap(ModelClue::getUniqueKey, data -> data, (existing, replacement) -> existing)) + .values()); + System.out.println("模型2查询数据库完毕,数量为:" + modelClues.size()); + } + + private static String getDateString(Object param) { + if (param != null) { + String time = null; + try { + time = String.valueOf(param); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + Date parse = sdf.parse(time); + Instant instant = parse.toInstant(); + ZoneId zoneId = ZoneId.systemDefault(); + LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + return formatter.format(localDateTime); + } catch (Exception e) { + try { + time = String.valueOf(param); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); + Date parse = sdf.parse(time); + Instant instant = parse.toInstant(); + ZoneId zoneId = ZoneId.systemDefault(); + LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + return formatter.format(localDateTime); + } catch (Exception ex) { + log.info("日期转换异常{}", time, ex); + } + } + } + return " 无时间数据 "; + } + + public static String generateNewSql(String originalSql, List uniqueKeys) { + Pattern tablePattern = Pattern.compile("FROM\\s+(\\w+)", Pattern.CASE_INSENSITIVE); + Matcher tableMatcher = tablePattern.matcher(originalSql); + String tableName = ""; + if (tableMatcher.find()) { + tableName = tableMatcher.group(1); + } + String originalFieldName = getKeyFieldName(originalSql); + return "SELECT * FROM " + tableName + " " + "WHERE " + originalFieldName + " IN " + "(" + uniqueKeys.stream().map(k -> "'" + k + "'").collect(Collectors.joining(",")) + ");"; + } + + private static String getKeyFieldName(String originalSql) { + String patternString = "SELECT\\s+(\\w+)\\s+AS\\s+" + Pattern.quote("uniqueKey"); + Pattern uniqueKeyPattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE); + Matcher uniqueKeyMatcher = uniqueKeyPattern.matcher(originalSql); + String originalFieldName = ""; + if (uniqueKeyMatcher.find()) { + originalFieldName = uniqueKeyMatcher.group(1); + } + if (originalFieldName.isEmpty()) { + throw new RuntimeException("未找到唯一键字段名"); + } + return originalFieldName; + } + + public static String formatStringDate(String date) { + DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + try { + DateTimeFormatter inputFormatterWithSeconds = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); + LocalDateTime dateTime = LocalDateTime.parse(date, inputFormatterWithSeconds); + return dateTime.format(outputFormatter); + } catch (Exception e) { + try { + DateTimeFormatter inputFormatterWithMinutes = DateTimeFormatter.ofPattern("yyyyMMddHHmm"); + LocalDateTime dateTime = LocalDateTime.parse(date, inputFormatterWithMinutes); + return dateTime.withSecond(0).format(outputFormatter); + } catch (Exception ex) { + log.info("日期转换异常", ex); + } + } + return " 无时间数据 "; + } + + public static List parseSqlForModel2(String param) { + List result = new ArrayList<>(); + String date1 = param.substring(0, 8); + String date2 = param.substring(8, 16); + String formattedDate1 = date1.substring(0, 4) + "-" + date1.substring(4, 6) + "-" + date1.substring(6, 8); + String formattedDate2 = date2.substring(0, 4) + "-" + date2.substring(4, 6) + "-" + date2.substring(6, 8); + result.add(formattedDate1); + result.add(formattedDate2); + return result; + } + + private static String summarizeAttribute(Map data, String jqxz) { + try { + String substring = String.valueOf(data.get("jqxzdm")).substring(0, 2); + if (substring.equals("01")) { + jqxz = "刑事"; + } else if (substring.equals("02")) { + jqxz = "行政"; + } + } catch (Exception e) { + System.out.println("警情性质转换失败" + e); + } + return jqxz; + } +} diff --git a/src/main/java/com/biutag/supervision/service/ModelClueTaskService.java b/src/main/java/com/biutag/supervision/service/ModelClueTaskService.java new file mode 100644 index 0000000..bdeee9a --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/ModelClueTaskService.java @@ -0,0 +1,41 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.ModelClueTaskMapper; +import com.biutag.supervision.pojo.entity.ModelClueTask; +import com.biutag.supervision.pojo.model.ModelClueTaskDepartModel; +import com.biutag.supervision.pojo.model.ModelClueTaskModel; +import com.biutag.supervision.pojo.param.ModelClueTaskQueryParam; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@RequiredArgsConstructor +@Service +public class ModelClueTaskService extends ServiceImpl { + + public Page page(ModelClueTaskQueryParam param) { + if (Objects.nonNull(param.getModelIds()) && param.getModelIds().isEmpty()) { + return new Page().setTotal(0).setRecords(new ArrayList<>()); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in(Objects.nonNull(param.getModelIds()), "mt.model_id", param.getModelIds()); + queryWrapper.like(StrUtil.isNotBlank(param.getTaskName()), "mt.task_name", param.getTaskName()); + if (Objects.nonNull(param.getDistributionTime()) && !param.getDistributionTime().isEmpty()) { + queryWrapper.between("mt.distribution_time", param.getDistributionTime().get(0), param.getDistributionTime().get(1)); + } + Page page = baseMapper.queryPage(Page.of(param.getCurrent(), param.getSize()), queryWrapper); + return page; + } + + public List listDepart(Integer taskId) { + return baseMapper.selectGroupByDepart(taskId); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/ModelService.java b/src/main/java/com/biutag/supervision/service/ModelService.java new file mode 100644 index 0000000..884d0e0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/ModelService.java @@ -0,0 +1,55 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.DistributionCycleEnum; +import com.biutag.supervision.constants.enums.DistributionMethodEnum; +import com.biutag.supervision.mapper.ModelMapper; +import com.biutag.supervision.pojo.entity.Model; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.util.ExpressionBuilder; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class ModelService extends ServiceImpl { + + public List listByDistributionMethodOfNegative() { + return list(new LambdaQueryWrapper().eq(Model::getDistributionMethod, DistributionMethodEnum.NEGATIVE_DISTRIBUTE.getValue())); + } + + public boolean saveModel(Model model) { + if (DistributionMethodEnum.NEGATIVE_DISTRIBUTE.getValue().equals(model.getDistributionMethod())) { + String expression = DistributionCycleEnum.day.name().equals(model.getDistributionCycle()) ? ExpressionBuilder.build(model.getDistributionCycleTime()) : + ExpressionBuilder.build(model.getDistributionCycleTime(), model.getDistributionCycleDayOfWeek()); + model.setDistributionCycleExpression(expression); + } + model.setCreateTime(LocalDateTime.now()); + model.setUpdateTime(LocalDateTime.now()); + UserAuth user = UserContextHolder.getCurrentUser(); + model.setCreateDepartId(user.getDepartId()); + model.setCreateDepartName(user.getDepartName()); + boolean save = save(model); + return save; + } + + public boolean updateModel(Model model) { + if (DistributionMethodEnum.NEGATIVE_DISTRIBUTE.getValue().equals(model.getDistributionMethod())) { + String expression = DistributionCycleEnum.day.name().equals(model.getDistributionCycle()) ? ExpressionBuilder.build(model.getDistributionCycleTime()) : + ExpressionBuilder.build(model.getDistributionCycleTime(), model.getDistributionCycleDayOfWeek()); + model.setDistributionCycleExpression(expression); + } + model.setUpdateTime(LocalDateTime.now()); + return updateById(model); + } + + public boolean remove(Integer modelId) { + return removeById(modelId); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegDepartAuthorityService.java b/src/main/java/com/biutag/supervision/service/NegDepartAuthorityService.java new file mode 100644 index 0000000..4f0ace7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegDepartAuthorityService.java @@ -0,0 +1,34 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.NegDepartAuthority; +import com.biutag.supervision.mapper.NegDepartAuthorityMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class NegDepartAuthorityService extends ServiceImpl { + + @Transactional(rollbackFor = Exception.class) + public boolean save(String idCode, List departs) { + remove(new LambdaQueryWrapper().eq(NegDepartAuthority::getIdCode, idCode)); + if (departs.isEmpty()) { + return true; + } + List list = departs.stream().map(departId -> { + NegDepartAuthority authority = new NegDepartAuthority(); + authority.setDepartId(departId); + authority.setIdCode(idCode); + return authority; + }).toList(); + return saveBatch(list); + } + + public List list(String idCode) { + return list(new LambdaQueryWrapper().eq(NegDepartAuthority::getIdCode, idCode)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegSourceAuthorityService.java b/src/main/java/com/biutag/supervision/service/NegSourceAuthorityService.java new file mode 100644 index 0000000..325504f --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegSourceAuthorityService.java @@ -0,0 +1,35 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.NegDepartAuthority; +import com.biutag.supervision.pojo.entity.NegSourceAuthority; +import com.biutag.supervision.mapper.NegSourceAuthorityMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class NegSourceAuthorityService extends ServiceImpl { + + @Transactional(rollbackFor = Exception.class) + public boolean save(String idCode, List sources) { + remove(new LambdaQueryWrapper().eq(NegSourceAuthority::getIdCode, idCode)); + if (sources.isEmpty()) { + return true; + } + List list = sources.stream().map(source -> { + NegSourceAuthority authority = new NegSourceAuthority(); + authority.setSource(source); + authority.setIdCode(idCode); + return authority; + }).toList(); + return saveBatch(list); + } + + public List list(String idCode) { + return list(new LambdaQueryWrapper().eq(NegSourceAuthority::getIdCode, idCode)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeApproveService.java b/src/main/java/com/biutag/supervision/service/NegativeApproveService.java new file mode 100644 index 0000000..61bb3e2 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeApproveService.java @@ -0,0 +1,22 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.NegativeApprove; +import com.biutag.supervision.mapper.NegativeApproveMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class NegativeApproveService extends ServiceImpl { + + public List list(String negativeId) { + return list(new LambdaQueryWrapper().eq(NegativeApprove::getNegativeId, negativeId)); + } + + public boolean remove(String negativeId) { + return remove(new LambdaQueryWrapper().eq(NegativeApprove::getNegativeId, negativeId)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeBlameService.java b/src/main/java/com/biutag/supervision/service/NegativeBlameService.java new file mode 100644 index 0000000..cfb94e5 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeBlameService.java @@ -0,0 +1,35 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.domain.Blame; +import com.biutag.supervision.pojo.entity.NegativeBlame; +import com.biutag.supervision.mapper.NegativeBlameMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@RequiredArgsConstructor +@Service +public class NegativeBlameService extends ServiceImpl { + + private final NegativeProblemRelationService problemRelationService; + + public List list(String negativeId) { + return list(new LambdaQueryWrapper().eq(NegativeBlame::getNegativeId, negativeId)) + .stream() + .map(item -> { + Blame vo = new Blame(); + BeanUtil.copyProperties(item, vo); + vo.setProblems(problemRelationService.list(negativeId, item.getBlameId())); + return vo; + }).toList(); + } + + public boolean remove(String negativeId) { + return remove(new LambdaQueryWrapper().eq(NegativeBlame::getNegativeId, negativeId)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeExtensionApplyService.java b/src/main/java/com/biutag/supervision/service/NegativeExtensionApplyService.java new file mode 100644 index 0000000..fcdda0a --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeExtensionApplyService.java @@ -0,0 +1,25 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.domain.ExtensionApply; +import com.biutag.supervision.pojo.entity.NegativeExtensionApply; +import com.biutag.supervision.mapper.NegativeExtensionApplyMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class NegativeExtensionApplyService extends ServiceImpl { + + private final NegativeExtensionApproveService extensionApproveService; + + public ExtensionApply get(int id) { + NegativeExtensionApply extensionApply = getById(id); + ExtensionApply apply = new ExtensionApply(); + BeanUtil.copyProperties(extensionApply, apply); + apply.setApproves(extensionApproveService.list(id)); + return apply; + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeExtensionApproveService.java b/src/main/java/com/biutag/supervision/service/NegativeExtensionApproveService.java new file mode 100644 index 0000000..1aa69c0 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeExtensionApproveService.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.NegativeExtensionApprove; +import com.biutag.supervision.mapper.NegativeExtensionApproveMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class NegativeExtensionApproveService extends ServiceImpl { + + public List list(Integer negativeExtensionApplyId) { + return list(new LambdaQueryWrapper().eq(NegativeExtensionApprove::getNegativeExtensionApplyId, negativeExtensionApplyId)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeFavService.java b/src/main/java/com/biutag/supervision/service/NegativeFavService.java new file mode 100644 index 0000000..e898611 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeFavService.java @@ -0,0 +1,29 @@ +package com.biutag.supervision.service; + +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; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.mapper.NegativeFavMapper; +import com.biutag.supervision.pojo.entity.NegativeFav; +import com.biutag.supervision.pojo.model.NegativeFavModel; +import com.biutag.supervision.pojo.param.WorkParam; +import org.springframework.stereotype.Service; + +@Service +public class NegativeFavService extends ServiceImpl { + + public boolean existsByCurrentUser(String negativeId) { + return exists(new LambdaQueryWrapper().eq(NegativeFav::getNegativeId, negativeId) + .eq(NegativeFav::getUserId, UserContextHolder.getCurrentUserId())); + } + + public Page page(WorkParam workParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("f.user_id", UserContextHolder.getCurrentUserId()) + .orderByDesc("f.create_time"); + return baseMapper.queryPage(Page.of(workParam.getCurrent(), workParam.getSize()), queryWrapper); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeFileService.java b/src/main/java/com/biutag/supervision/service/NegativeFileService.java new file mode 100644 index 0000000..665ef40 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeFileService.java @@ -0,0 +1,37 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.NegativeFile; +import com.biutag.supervision.mapper.NegativeFileMapper; +import com.biutag.supervision.pojo.vo.FileVo; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class NegativeFileService extends ServiceImpl { + + public List list(String negativeId) { + return list(new LambdaQueryWrapper().eq(NegativeFile::getNegtiveId, negativeId)); + } + + public boolean remove(String negativeId) { + return remove(new LambdaQueryWrapper().eq(NegativeFile::getNegtiveId, negativeId)); + } + + public boolean saveBatch(List fileVos, String negativeId) { + if (fileVos.isEmpty()) { + return false; + } + List files = fileVos.stream().map(item -> { + NegativeFile file = new NegativeFile(); + BeanUtil.copyProperties(item, file); + file.setNegtiveId(negativeId); + return file; + }).toList(); + return saveBatch(files); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeHistoryService.java b/src/main/java/com/biutag/supervision/service/NegativeHistoryService.java new file mode 100644 index 0000000..ef58954 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeHistoryService.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.NegativeHistory; +import com.biutag.supervision.mapper.NegativeHistoryMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class NegativeHistoryService extends ServiceImpl { + + public List listByNegativeId(String negativeId) { + return list(new LambdaQueryWrapper().eq(NegativeHistory::getNegativeId, negativeId).orderByAsc(NegativeHistory::getCrtTime)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeProblemRelationService.java b/src/main/java/com/biutag/supervision/service/NegativeProblemRelationService.java new file mode 100644 index 0000000..3ae8855 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeProblemRelationService.java @@ -0,0 +1,24 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.NegativeBlame; +import com.biutag.supervision.pojo.entity.NegativeProblemRelation; +import com.biutag.supervision.mapper.NegativeProblemRelationMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class NegativeProblemRelationService extends ServiceImpl { + + public List list(String negativeId, String blameId) { + return list(new LambdaQueryWrapper().eq(NegativeProblemRelation::getNegativeId, negativeId).eq(NegativeProblemRelation::getBlameId, blameId)); + } + + public boolean remove(String negativeId) { + return remove(new LambdaQueryWrapper() + .eq(NegativeProblemRelation::getNegativeId, negativeId)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeQueryService.java b/src/main/java/com/biutag/supervision/service/NegativeQueryService.java new file mode 100644 index 0000000..d7fc4ab --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeQueryService.java @@ -0,0 +1,112 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.DepartLevelEnum; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; +import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.pojo.entity.Negative; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.pojo.param.NegativeQueryParam; +import com.biutag.supervision.pojo.vo.DepartTree; +import com.biutag.supervision.pojo.vo.NegativeQueryVo; +import com.biutag.supervision.util.TimeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@RequiredArgsConstructor +@Service +public class NegativeQueryService { + + private final NegativeService negativeService; + + private final SupDepartService departService; + + public Page page(NegativeQueryParam param) { + UserAuth user = UserContextHolder.getCurrentUser(); + if (!AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) && (user.getRoleCodes().isEmpty() || user.getAuthSources().isEmpty() || user.getAuthDepartIds().isEmpty())) { + return new Page().setTotal(0).setRecords(new ArrayList<>()); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (!AppConstants.USER_TYPE_SUPER.equals(user.getUserType())) { + queryWrapper.in(Negative::getProblemSourcesCode, user.getAuthSources()); + if (user.getRoleCodes().contains(RoleCodeEnum.SECOND_ADMIN.getCode())) { + queryWrapper.in(Negative::getHandleSecondDepartId, user.getAuthDepartIds()); + } else if (user.getRoleCodes().contains(RoleCodeEnum.THREE_ADMIN.getCode())) { + queryWrapper.in(Negative::getHandleThreeDepartId, user.getAuthDepartIds()); + } + } + queryWrapper.like(StrUtil.isNotBlank(param.getOriginId()), Negative::getOriginId, param.getOriginId()) + .in(!param.getProcessingStatus().isEmpty(), Negative::getProcessingStatus, param.getProcessingStatus()) + .eq(StrUtil.isNotBlank(param.getFlowKey()), Negative::getFlowKey, param.getFlowKey()) + .like(StrUtil.isNotBlank(param.getThingDesc()), Negative::getThingDesc, param.getThingDesc()) + .eq(StrUtil.isNotBlank(param.getProblemSourcesCode()), Negative::getProblemSourcesCode, param.getProblemSourcesCode()) + .eq(StrUtil.isNotBlank(param.getBusinessTypeCode()), Negative::getBusinessTypeCode, param.getBusinessTypeCode()) + .eq(StrUtil.isNotBlank(param.getCheckStatus()), Negative::getCheckStatus, param.getCheckStatus()) + .in(!param.getCheckStatusList().isEmpty(), Negative::getCheckStatus, param.getCheckStatusList()) + .eq(StrUtil.isNotBlank(param.getIsRectifyCode()), Negative::getIsRectifyCode, param.getIsRectifyCode()) + .orderByDesc(Negative::getCrtTime); + if (param.getHappenTime().size() == 2) { + queryWrapper.between(Negative::getHappenTime, param.getHappenTime().get(0), param.getHappenTime().get(1)); + } + if (param.getDiscoveryTime().size() == 2) { + queryWrapper.between(Negative::getDiscoveryTime, param.getDiscoveryTime().get(0), param.getDiscoveryTime().get(1)); + } + if (param.getCrtTime().size() == 2) { + queryWrapper.between(Negative::getCrtTime, param.getCrtTime().get(0), param.getCrtTime().get(1)); + } + if (StrUtil.isNotBlank(param.getResponderKey()) && StrUtil.isNotBlank(param.getResponderValue())) { + switch (param.getResponderKey()) { + case "name": + queryWrapper.like(Negative::getResponderName, param.getResponderValue()); + break; + case "phone": + queryWrapper.like(Negative::getContactPhone, param.getResponderValue()); + break; + } + } + if (Objects.nonNull(param.getTimeoutFlag())) { + if (param.getTimeoutFlag()) { + queryWrapper.isNotNull(Negative::getCompleteDate).apply("TIMESTAMPDIFF(HOUR, crtTime, completeDate) > 72"); + } else { + queryWrapper.isNotNull(Negative::getCompleteDate).apply("TIMESTAMPDIFF(HOUR, crtTime, completeDate) <= 72"); + } + } + // 涉及单位 + if (StrUtil.isNotBlank(param.getInvolveDepartId())) { + List departIds = departService.getAllNodeIds(param.getInvolveDepartId()); + queryWrapper.in(Negative::getInvolveDepartId, departIds); + } + // 办理单位 + if (StrUtil.isNotBlank(param.getHandleDepartId())) { + List nodes = departService.getAllNode(List.of(param.getHandleDepartId())); + List secondIds = nodes.stream().filter(node -> DepartLevelEnum.SECOND.getValue().equals(node.getLevel())).map(DepartTree::getId).toList(); + if (!secondIds.isEmpty()) { + queryWrapper.in(Negative::getHandleSecondDepartId, secondIds); + } else { + queryWrapper.in(Negative::getHandleThreeDepartId, nodes.stream().filter(node -> DepartLevelEnum.THREE.getValue().equals(node.getLevel())).map(DepartTree::getId).toList()); + } + } + Page page = negativeService.page(Page.of(param.getCurrent(), param.getSize()), queryWrapper); + long l = System.currentTimeMillis(); + List list = page.getRecords().stream().map(item -> { + NegativeQueryVo vo = new NegativeQueryVo(); + BeanUtils.copyProperties(item, vo); + if (Objects.nonNull(item.getFirstDistributeTime()) && !ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())) { + vo.setRemainingDuration(TimeUtil.getRemainingDuration(item.getFirstDistributeTime(), item.getMaxSignDuration(), item.getMaxHandleDuration(), item.getExtensionDays(), item.getFlowKey())); + } + return vo; + }).toList(); + System.out.printf("耗时:%sms", System.currentTimeMillis() - l); + return new Page().setRecords(list).setTotal(page.getTotal()); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeService.java b/src/main/java/com/biutag/supervision/service/NegativeService.java new file mode 100644 index 0000000..1cb1276 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeService.java @@ -0,0 +1,308 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.*; +import com.biutag.supervision.flow.FlowService; +import com.biutag.supervision.mapper.NegativeMapper; +import com.biutag.supervision.pojo.domain.Blame; +import com.biutag.supervision.pojo.domain.NegativeDetail; +import com.biutag.supervision.pojo.domain.NegativeVo; +import com.biutag.supervision.pojo.dto.ActionDto; +import com.biutag.supervision.pojo.dto.NegativeDto; +import com.biutag.supervision.pojo.dto.flow.FirstDistributeData; +import com.biutag.supervision.pojo.dto.jwdc.NegativeApiDto; +import com.biutag.supervision.pojo.entity.*; +import com.biutag.supervision.util.JSON; +import com.biutag.supervision.util.SpringUtil; +import com.biutag.supervision.util.TimeUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +@Slf4j +@RequiredArgsConstructor +@Service +public class NegativeService extends ServiceImpl { + + private final NegativeHistoryService negativeHistoryService; + + private final NegativeBlameService blameService; + + private final NegativeSignReturnService signReturnService; + + private final NegativeExtensionApplyService extensionApplyService; + + private final NegativeThingFileService thingFileService; + + private final NegativeFileService fileService; + + private final NegativeApproveService approveService; + + private final NegativeWorkService workService; + + private final NegativeFavService favService; + + private final FlowNodeService flowNodeService; + + private final FlowActionService flowActionService; + + private final SupDepartService departService; + + public NegativeDetail get(String id, Integer workId) { + Negative negative = getById(id); + List blameVos = blameService.list(id); + List flows = negativeHistoryService.listByNegativeId(id); + AtomicReference flowKey = new AtomicReference<>(negative.getFlowKey()); + List files = fileService.list(id); + List thingFiles = thingFileService.list(id); + if (Objects.nonNull(workId)) { + Optional.ofNullable(workService.getById(workId)).map(NegativeWork::getFlowKey).filter(StrUtil::isNotBlank).ifPresent(flowKey::set); + } + FlowNode flowNode = flowNodeService.getById(flowKey.get()); + List flowActions = flowActionService.list(flowKey.get()); + + NegativeVo vo = new NegativeVo(); + BeanUtil.copyProperties(negative, vo); + if (StrUtil.isNotBlank(negative.getInvolveProblem())) { + String involveProblemLables = JSON.readValueForList(negative.getInvolveProblem(), Map.class).stream().map(item -> String.valueOf(item.get("dictLabel"))).collect(Collectors.joining(" ")); + vo.setInvolveProblemLables(involveProblemLables); + } + vo.setBlames(blameVos); + vo.setFiles(files); + vo.setThingFiles(thingFiles); + NegativeDetail detail = new NegativeDetail() + .setNegative(vo) + .setActionHistory(flows) + .setFlowNode(flowNode) + .setFlowActions(flowActions) + .setApproves(approveService.list(id)) + .setIsFav(favService.existsByCurrentUser(id)); + // 签收退回 + if (!flows.isEmpty() && AppConstants.SIGN_RETURN_ACTION_NAME.equals(flows.get(flows.size() - 1).getActionName())) { + detail.setSignReturns(signReturnService.list(id)); + } + // 是否延期申请 + if (Objects.nonNull(negative.getNegativeExtensionApplyId()) && !negative.getExtensionApplyFlag()) { + detail.setExtensionApply(extensionApplyService.get(negative.getNegativeExtensionApplyId())); + } + // 办理剩余时长 + if (StrUtil.isNotBlank(negative.getFlowKey())) { + if (FlowNodeEnum.isSignFlow(negative.getFlowKey())) { + detail.setMaxDuration(NumberUtil.mul(negative.getMaxSignDuration(), TimeUtil.SECONDS_OF_A_DAY).longValue()); + } + // 未延期 + else if (Objects.isNull(negative.getExtensionDays())) { + detail.setMaxDuration(NumberUtil.mul(negative.getMaxHandleDuration(), TimeUtil.SECONDS_OF_A_DAY).longValue()); + } else { + // 已延期 + Integer maxDuration = negative.getMaxHandleDuration() + negative.getExtensionDays(); + detail.setMaxDuration(NumberUtil.mul(maxDuration, TimeUtil.SECONDS_OF_A_DAY).longValue()); + } + detail.setRemainingDuration(TimeUtil.getRemainingDuration(negative.getFirstDistributeTime(), + negative.getMaxSignDuration(), + negative.getMaxHandleDuration(), + negative.getExtensionDays(), + negative.getFlowKey())); + } + return detail; + } + + public Negative getByOriginId(String originId) { + return getOne(new LambdaUpdateWrapper().eq(Negative::getOriginId, originId)); + } + + @Transactional(rollbackFor = Exception.class) + public boolean save(NegativeDto negativeDto) { + Negative negative = new Negative(); + BeanUtil.copyProperties(negativeDto, negative); + if (StrUtil.isBlank(negativeDto.getOriginId())) { + String originId = generateOriginId(negativeDto.getProblemSourcesCode(), negativeDto.getBusinessTypeCode()); + negative.setOriginId(originId); + } + LocalDateTime now = LocalDateTime.now(); + negative.setId(IdUtil.getSnowflakeNextIdStr()) + .setProcessingStatus(ProcessingStatusEnum.signing.name()) + .setFlowKey(FlowNodeEnum.FIRST_DISTRIBUTE.getKey()) + .setCrtTime(now) + .setUpdTime(now); + if (Objects.nonNull(negativeDto.getInvolveProblem())) { + negative.setInvolveProblem(JSON.toJSONString(negativeDto.getInvolveProblem())); + } + save(negative); + negativeDto.setId(negative.getId()); + if (!negativeDto.getThingFiles().isEmpty()) { + List files = negativeDto.getThingFiles().stream().map(item -> { + NegativeThingFile negativeThingFile = new NegativeThingFile(); + BeanUtil.copyProperties(item, negativeThingFile); + negativeThingFile.setNegativeId(negative.getId()); + negativeThingFile.setCreateTime(now); + return negativeThingFile; + }).toList(); + thingFileService.saveBatch(files); + } + + NegativeWork work = new NegativeWork() + .setNegativeId(negative.getId()) + .setStatus(WorkStatusEnum.todo.name()) + .setDepartId(AppConstants.ROOT_DEPART_ID) + .setDepartName(AppConstants.ROOT_DEPART_NAME) + .setRoleCode(RoleCodeEnum.FIRST_ADMIN.getCode()) + .setProblemSourcesCode(negative.getProblemSourcesCode()) + .setUpdateTime(now) + .setCreateTime(now); + workService.save(work); + + // 下发 + FirstDistributeData firstDistributeData = new FirstDistributeData(); + BeanUtil.copyProperties(negativeDto, firstDistributeData); + ActionDto actionDto = new ActionDto() + .setActionKey(FlowActionEnum.FIRST_DISTRIBUTE.getKey()) + .setActionName(FlowActionEnum.FIRST_DISTRIBUTE.getName()) + .setNegativeId(negative.getId()) + .setWorkId(work.getId()) + .setNextFlowKey(FlowNodeEnum.SECOND_SIGN.getKey()) + .setData(firstDistributeData); + SpringUtil.getBean(FlowService.class).execute(actionDto); + return true; + } + + @Transactional(rollbackFor = Exception.class) + public boolean saveByJwpy(List list) { + LocalDateTime now = LocalDateTime.now(); + list.forEach(item -> { + if (exists(item.getOriginId())) { + throw new RuntimeException("样本源头编号已存在请核实"); + } + SupDepart dept = departService.getByJwpyCode(item.getDepartCode()); + Negative negative = new Negative(); + BeanUtil.copyProperties(item, negative); + negative + .setBusinessTypeCode(NegativeApiDto.BusinessType.getCode(item.getBusinessTypeName())) + .setPoliceType(NegativeApiDto.BusinessType.getPoliceType(item.getBusinessTypeName())) + .setPoliceTypeName(NegativeApiDto.BusinessType.getPoliceTypeName(item.getBusinessTypeName())) + // 导入的数据都是警务调查 + .setProblemSources(ProblemSourcesEnum.JWDC.getLabel()) + .setProblemSourcesCode(ProblemSourcesEnum.JWDC.getValue()) + // 警务调查默认为137工作制 + .setTimeLimit(TimeLimitEnum.WORK_137.getValue()) + .setMaxSignDuration(TimeLimitEnum.WORK_137.getMaxSignDuration()) + .setMaxHandleDuration(TimeLimitEnum.WORK_137.getMaxHandleDuration()) + .setMaxExtensionDuration(TimeLimitEnum.WORK_137.getMaxHandleDuration()) + .setApprovalFlow(ApprovalFlowEnum.SECOND_APPROVAL.getValue()) + // 下发时间 + .setFirstDistributeTime(now) + .setProcessingStatus(ProcessingStatusEnum.signing.name()) + // 完成状态 0-待完善 1-已完善 + .setCompleteStatus("0") + .setTaskId("api") + .setCrtTime(now) + .setUpdTime(now); + + // [{"dictLabel":"自动回访不满意\n","dictType":"suspectProblem","dictValue":"1"}] + Map involveProblem = new HashMap<>(); + involveProblem.put("dictLabel", "自动回访不满意"); + involveProblem.put("dictType", "suspectProblem"); + involveProblem.put("dictValue", "1"); + negative.setInvolveProblem(JSON.toJSONString(Collections.singletonList(involveProblem))); + + if (Objects.nonNull(dept)) { + negative.setInvolveDepartId(dept.getId()) + .setInvolveDepartName(dept.getShortName()) + .setFlowKey(FlowNodeEnum.THREE_SIGN.getKey()); + if (DepartLevelEnum.THREE.getValue().equals(dept.getLevel())) { + SupDepart parentDepart = departService.getById(dept.getPid()); + negative.setHandleThreeDepartId(dept.getId()) + .setHandleThreeDepartName(dept.getShortName()) + .setHandleSecondDepartId(parentDepart.getId()) + .setHandleSecondDepartName(parentDepart.getShortName()); + } + } + save(negative); + // 新增work + String departId; + String departName; + String roleCode; + if (Objects.nonNull(dept)) { + departId = dept.getId(); + departName = dept.getShortName(); + roleCode = RoleCodeEnum.THREE_ADMIN.getCode(); + } else { + log.error("未匹配上单位:{}, code: {}", item.getDepartName(), item.getDepartCode()); + departId = AppConstants.ROOT_DEPART_ID; + departName = AppConstants.ROOT_DEPART_NAME; + roleCode = RoleCodeEnum.FIRST_ADMIN.getCode(); + } + NegativeWork work = new NegativeWork() + .setNegativeId(negative.getId()) + .setDepartId(departId) + .setDepartName(departName) + .setRoleCode(roleCode) + .setProblemSourcesCode(negative.getProblemSourcesCode()) + .setStatus(WorkStatusEnum.todo.name()) + .setUpdateTime(now) + .setCreateTime(now); + workService.save(work); + }); + return true; + } + + public boolean exists(String originId) { + return exists(new LambdaUpdateWrapper().eq(Negative::getOriginId, originId)); + } + + /** + * 生成样本源头编号 + * @param problemSourcesCode + * @return + */ + public String generateOriginId(String problemSourcesCode, String businessTypeCode) { + String originId = String.format("%s_%s_%s%s", StrUtil.isBlank(problemSourcesCode) ? "" : ProblemSourcesEnum.get(problemSourcesCode).name(), + StrUtil.isBlank(businessTypeCode) ? "" : BusinessTypeEnum.get(businessTypeCode).getKey(), + DateUtil.format(new Date(), DatePattern.PURE_DATE_FORMAT), + RandomUtil.randomString(4)); + if (exists(originId)) { + return generateOriginId(problemSourcesCode, businessTypeCode); + } + return originId; + } + + @Transactional(rollbackFor = Exception.class) + public boolean remove(String id) { + removeById(id); + negativeHistoryService.removeById(id); + // 工作表 + workService.remove(new LambdaQueryWrapper().eq(NegativeWork::getNegativeId, id)); + // 收藏表 + favService.remove(new LambdaQueryWrapper().eq(NegativeFav::getNegativeId, id)); + // 事件详情描述表 + thingFileService.remove(new LambdaQueryWrapper().eq(NegativeThingFile::getNegativeId, id)); + // 涉及人员 + blameService.remove(id); + // 核查附件 + fileService.remove(new LambdaQueryWrapper().eq(NegativeFile::getNegtiveId, id)); + // 签收退回 + signReturnService.remove(new LambdaQueryWrapper().eq(NegativeSignReturn::getNegativeId, id)); + // 申请延期 + extensionApplyService.remove(new LambdaQueryWrapper().eq(NegativeExtensionApply::getNegativeId, id)); + // 审批 + approveService.remove(new LambdaQueryWrapper().eq(NegativeApprove::getNegativeId, id)); + return true; + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/service/NegativeSignReturnService.java b/src/main/java/com/biutag/supervision/service/NegativeSignReturnService.java new file mode 100644 index 0000000..b93de58 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeSignReturnService.java @@ -0,0 +1,18 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.NegativeSignReturn; +import com.biutag.supervision.mapper.NegativeSignReturnMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class NegativeSignReturnService extends ServiceImpl { + + public List list(String negativeId) { + return list(new LambdaQueryWrapper().eq(NegativeSignReturn::getNegativeId, negativeId).orderByDesc(NegativeSignReturn::getCreateTime)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeTaskService.java b/src/main/java/com/biutag/supervision/service/NegativeTaskService.java new file mode 100644 index 0000000..2755ca8 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeTaskService.java @@ -0,0 +1,90 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.enums.NegativeTaskCategoryEnum; +import com.biutag.supervision.constants.enums.NegativeTaskStatusEnum; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; +import com.biutag.supervision.mapper.NegativeTaskMapper; +import com.biutag.supervision.pojo.entity.NegativeTask; +import com.biutag.supervision.pojo.param.NegativeTaskQueryParam; +import com.biutag.supervision.pojo.vo.ExportNegativeVo; +import com.biutag.supervision.pojo.vo.NegativeQueryVo; +import com.biutag.supervision.util.JSON; +import com.fasterxml.jackson.databind.JsonNode; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@Service +public class NegativeTaskService extends ServiceImpl { + + private final FileService fileService; + + public Page page(NegativeTaskQueryParam param) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(NegativeTask::getCategory, NegativeTaskCategoryEnum.EXPORT.getValue()) + .like(StrUtil.isNotBlank(param.getTaskName()), NegativeTask::getTaskName, param.getTaskName()) + .orderByDesc(NegativeTask::getCrtTime); + if (param.getCrtTime().size() == 2) { + queryWrapper.between(NegativeTask::getCrtTime, param.getCrtTime().get(0), param.getCrtTime().get(1)); + } + return page(Page.of(param.getCurrent(), param.getSize()), queryWrapper); + } + + public NegativeTask save(Integer importRow) { + NegativeTask task = new NegativeTask(); + task.setId(IdUtil.simpleUUID()); + task.setTaskName(String.format("问题台账_%s", LocalDate.now())); + task.setImportRow(importRow); + task.setCrtTime(LocalDateTime.now()); + task.setStatus(NegativeTaskStatusEnum.PADDING.getValue()); + task.setCategory(NegativeTaskCategoryEnum.EXPORT.getValue()); + task.setCrtUser(UserContextHolder.getCurrentUser().getNickName()); + save(task); + return task; + } + + @Async + public boolean updateExcel(List data, String negativeTaskId) { + List list = data.stream().map(item -> { + ExportNegativeVo vo = new ExportNegativeVo(); + BeanUtils.copyProperties(item, vo); + if (StrUtil.isNotBlank(item.getInvolveProblem())) { + JsonNode jsonNode = JSON.readTree(item.getInvolveProblem()); + List arr = new ArrayList<>(); + jsonNode.forEach(problem -> { + String dictLabel = problem.get("dictLabel").asText(); + arr.add(dictLabel); + }); + vo.setInvolveProblem(arr.stream().collect(Collectors.joining("、"))); + } + vo.setProcessingStatus(ProcessingStatusEnum.getLabel(item.getProcessingStatus())); + return vo; + }).toList(); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + EasyExcel.write(os, ExportNegativeVo.class).inMemory(Boolean.TRUE).sheet("问题台账").doWrite(list); + String filePath = fileService.upload(new ByteArrayInputStream(os.toByteArray()), os.size(), ".xlsx"); + return update(new LambdaUpdateWrapper().eq(NegativeTask::getId, negativeTaskId) + .set(NegativeTask::getStatus, NegativeTaskStatusEnum.SUCCESS.getValue()) + .set(NegativeTask::getFilePath, filePath) + .set(NegativeTask::getUpdTime, LocalDateTime.now())); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeThingFileService.java b/src/main/java/com/biutag/supervision/service/NegativeThingFileService.java new file mode 100644 index 0000000..8630f06 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeThingFileService.java @@ -0,0 +1,19 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.NegativeFile; +import com.biutag.supervision.pojo.entity.NegativeThingFile; +import com.biutag.supervision.mapper.NegativeThingFileMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class NegativeThingFileService extends ServiceImpl { + + public List list(String negativeId) { + return list(new LambdaQueryWrapper().eq(NegativeThingFile::getNegativeId, negativeId)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/NegativeWorkService.java b/src/main/java/com/biutag/supervision/service/NegativeWorkService.java new file mode 100644 index 0000000..9d69c75 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/NegativeWorkService.java @@ -0,0 +1,49 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.mapper.NegativeWorkMapper; +import com.biutag.supervision.pojo.entity.NegativeWork; +import com.biutag.supervision.pojo.model.NegativeWorkModel; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.pojo.param.WorkParam; +import com.biutag.supervision.util.TimeUtil; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; + +@Service +public class NegativeWorkService extends ServiceImpl { + + public Page page(WorkParam workParam, String workStatus) { + UserAuth user = UserContextHolder.getCurrentUser(); + if (user.getRoleCodes().isEmpty() || user.getAuthDepartIds().isEmpty() || user.getAuthSources().isEmpty()) { + return new Page().setTotal(0).setRecords(new ArrayList<>()); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("w.role_code", user.getRoleCodes()) + .in("w.depart_id", user.getAuthDepartIds()) + .in("w.problem_sources_code", user.getAuthSources()) + .eq("w.status", workStatus) + .eq(StrUtil.isNotBlank(workParam.getProblemSourcesCode()), "n.problemSourcesCode", workParam.getProblemSourcesCode()) + .eq(StrUtil.isNotBlank(workParam.getBusinessTypeCode()), "n.businessTypeCode", workParam.getBusinessTypeCode()) + .like(StrUtil.isNotBlank(workParam.getInvolveProblem()), "n.involveProblem", workParam.getInvolveProblem()) + .like(StrUtil.isNotBlank(workParam.getThingDesc()), "n.thingDesc", workParam.getThingDesc()) + .eq(StrUtil.isNotBlank(workParam.getInvolveDepartId()), "n.involveDepartId", workParam.getInvolveDepartId()) + .eq(StrUtil.isNotBlank(workParam.getHandleThreeDepartId()), "n.handle_three_depart_id", workParam.getHandleThreeDepartId()) + .eq(StrUtil.isNotBlank(workParam.getProcessingStatus()), "n.processing_status", workParam.getProcessingStatus()) + .orderByDesc("w.create_time"); + if (workParam.getHappenTime().size() == 2) { + queryWrapper.between("n.happenTime", workParam.getHappenTime().get(0), workParam.getHappenTime().get(1)); + } + Page modelPage = baseMapper.queryPage(Page.of(workParam.getCurrent(), workParam.getSize()), queryWrapper); + modelPage.getRecords().forEach(item -> { + item.setRemainingDuration(TimeUtil.getRemainingDuration(item.getFirstDistributeTime(), item.getMaxSignDuration(), item.getMaxHandleDuration(), item.getExtensionDays(), item.getFlowKey())); + }); + return modelPage; + } + +} \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/service/RoleMenuService.java b/src/main/java/com/biutag/supervision/service/RoleMenuService.java new file mode 100644 index 0000000..a1570d3 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/RoleMenuService.java @@ -0,0 +1,35 @@ +package com.biutag.supervision.service; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.RoleMenuMapper; +import com.biutag.supervision.pojo.entity.RoleMenu; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@DS("slave") +@Service +public class RoleMenuService extends ServiceImpl { + + @Transactional(rollbackFor = Exception.class) + public boolean update(String roleCode, List menuIds) { + remove(new LambdaQueryWrapper().eq(RoleMenu::getRoleCode, roleCode)); + if (menuIds.isEmpty()) { + return true; + } + List list = menuIds.stream().map(menuId -> new RoleMenu().setRoleCode(roleCode).setMenuId(menuId)).toList(); + return saveBatch(list); + } + + public List list(String roleCode) { + return list(new LambdaQueryWrapper().eq(RoleMenu::getRoleCode, roleCode)); + } + + public List list(List roleCodes) { + return list(new LambdaQueryWrapper().in(RoleMenu::getRoleCode, roleCodes)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/RpcApplyPersonService.java b/src/main/java/com/biutag/supervision/service/RpcApplyPersonService.java new file mode 100644 index 0000000..4497f75 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/RpcApplyPersonService.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.RpcApplyPerson; +import com.biutag.supervision.mapper.RpcApplyPersonMapper; +import org.springframework.stereotype.Service; + +@Service +public class RpcApplyPersonService extends ServiceImpl { + +} diff --git a/src/main/java/com/biutag/supervision/service/RpcApplyService.java b/src/main/java/com/biutag/supervision/service/RpcApplyService.java new file mode 100644 index 0000000..9507279 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/RpcApplyService.java @@ -0,0 +1,13 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.RpcApply; +import com.biutag.supervision.mapper.RpcApplyMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class RpcApplyService extends ServiceImpl { + +} diff --git a/src/main/java/com/biutag/supervision/service/RpcInfringerResultService.java b/src/main/java/com/biutag/supervision/service/RpcInfringerResultService.java new file mode 100644 index 0000000..5058903 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/RpcInfringerResultService.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.RpcInfringerResultMapper; +import com.biutag.supervision.pojo.entity.RpcInfringerResult; +import org.springframework.stereotype.Service; + +@Service +public class RpcInfringerResultService extends ServiceImpl { + +} diff --git a/src/main/java/com/biutag/supervision/service/StatisticsDepartService.java b/src/main/java/com/biutag/supervision/service/StatisticsDepartService.java new file mode 100644 index 0000000..1911326 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/StatisticsDepartService.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.StatisticsDepart; +import com.biutag.supervision.mapper.StatisticsDepartMapper; +import org.springframework.stereotype.Service; + +@Service +public class StatisticsDepartService extends ServiceImpl { + +} diff --git a/src/main/java/com/biutag/supervision/service/StatisticsGroupService.java b/src/main/java/com/biutag/supervision/service/StatisticsGroupService.java new file mode 100644 index 0000000..5012593 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/StatisticsGroupService.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.StatisticsGroup; +import com.biutag.supervision.mapper.StatisticsGroupMapper; +import org.springframework.stereotype.Service; + +@Service +public class StatisticsGroupService extends ServiceImpl { + +} diff --git a/src/main/java/com/biutag/supervision/service/SupDepartService.java b/src/main/java/com/biutag/supervision/service/SupDepartService.java new file mode 100644 index 0000000..fc75311 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/SupDepartService.java @@ -0,0 +1,273 @@ +package com.biutag.supervision.service; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.constants.enums.StatusEnum; +import com.biutag.supervision.mapper.SupDepartMapper; +import com.biutag.supervision.pojo.entity.SupDepart; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.pojo.param.DepartQueryParam; +import com.biutag.supervision.pojo.param.DepartTreeListParam; +import com.biutag.supervision.pojo.vo.DepartTree; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +public class SupDepartService extends ServiceImpl { + + public Page page(DepartQueryParam param) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .like(StrUtil.isNotBlank(param.getShortName()), SupDepart::getShortName, param.getShortName()) + .like(StrUtil.isNotBlank(param.getName()), SupDepart::getName, param.getName()) + .like(StrUtil.isNotBlank(param.getCode()), SupDepart::getCode, param.getCode()) + .ne(SupDepart::getId, AppConstants.ROOT_DEPART_ID) + .orderByAsc(SupDepart::getLevel) + .orderByAsc(SupDepart::getOrderNo); + return page(Page.of(param.getCurrent(), param.getSize()), queryWrapper); + } + + public List listByEnabled() { + return list(new LambdaQueryWrapper() + .notIn(SupDepart::getLevel, List.of(4, 5)) + .eq(SupDepart::getStatus, StatusEnum.ENABLE.getValue()) + .orderByAsc(SupDepart::getOrderNo)); + } + + public List listAllByEnabled() { + return list(new LambdaQueryWrapper() + .eq(SupDepart::getStatus, StatusEnum.ENABLE.getValue()) + .orderByAsc(SupDepart::getOrderNo)); + } + + public List listByLevel(List levels) { + return list(new LambdaQueryWrapper().in(SupDepart::getLevel, levels).eq(SupDepart::getStatus, StatusEnum.ENABLE.getValue()).orderByAsc(SupDepart::getOrderNo)); + } + + public List getAllNodeIds(String departId) { + return getAllNodeIds(List.of(departId)); + } + + public List getAllNodeIds(List departIds) { + return getAllNode(departIds).stream().map(DepartTree::getId).toList(); + } + + public List getAllNode(List departIds) { + List treeList = buildTreeAll(); + List nodes = new ArrayList<>(); + getAllNodeRecursive(departIds, treeList, nodes); + return nodes; + } + + private void getAllNodeRecursive(List departIds, List treeList, List nodes) { + treeList.forEach(item -> { + if (departIds.contains(item.getId())) { + getAllNodeRecursive(item, nodes); + } else { + getAllNodeRecursive(departIds, item.getChildren(), nodes); + } + }); + } + + private void getAllNodeRecursive(DepartTree tree, List nodes) { + nodes.add(tree); + tree.getChildren().forEach(item -> { + getAllNodeRecursive(item, nodes); + }); + } + + public SupDepart getParentDepart(String departId) { + return Optional.ofNullable(getById(departId)).map(item -> getById(item.getPid())).orElse(null); + } + public SupDepart getByJwpyCode(String departCode) { + return baseMapper.selectByJwpyCode(departCode); + } + + public boolean existsByPid(String pid) { + return exists(new LambdaQueryWrapper().eq(SupDepart::getPid, pid)); + } + + public boolean existsByCode(String code) { + return exists(new LambdaQueryWrapper().eq(SupDepart::getCode, code)); + } + + public boolean existsByName(String name) { + return exists(new LambdaQueryWrapper().eq(SupDepart::getName, name)); + } + + public Integer getMaxId() { + return baseMapper.getMaxId(); + } + + public List buildTreeAll() { + // 所有有效的数据 + List departs = listAllByEnabled(); + return buildTreeAll(departs); + } + + public List buildTreeAll(List departs) { + Map> childMap = new HashMap<>(); + List tree = new ArrayList<>(); + for (SupDepart depart : departs) { + DepartTree node = new DepartTree(); + BeanUtils.copyProperties(depart, node); + node.setHasChildren(!depart.getLevel().equals(4) && departs.stream().anyMatch(item -> node.getId().equals(item.getPid()))); + List children = childMap.computeIfAbsent(node.getPid(), k -> new ArrayList<>()); + children.add(node); + if (AppConstants.ROOT_DEPART_ID.equals(node.getId())) { + tree.add(node); + } + } + for (DepartTree node : tree) { + buildTreeRecursive(node, childMap); + } + return tree; + } + + /** + * 市局主办 + * @return + */ + public List buildTreeByFirstHost() { + List departs = listByEnabled(); + Map> childMap = new HashMap<>(); + List tree = new ArrayList<>(); + for (SupDepart depart : departs) { + DepartTree node = new DepartTree(); + BeanUtils.copyProperties(depart, node); + List children = childMap.computeIfAbsent(node.getPid(), k -> new ArrayList<>()); + children.add(node); + if (node.getFirstHost()) { + tree.add(node); + } + } + for (DepartTree node : tree) { + buildTreeRecursive(node, childMap); + } + return tree; + } + + /** + * 根据角色权限 + * @return + */ + public List buildTreeByAuth() { + // 所有有效的数据 + List departs = listByEnabled(); + return buildTreeByAuth(departs); + } + + /** + * 根据角色权限 + * @param departs + * @return + */ + public List buildTreeByAuth(List departs) { + Map> childMap = new HashMap<>(); + List tree = new ArrayList<>(); + UserAuth user = UserContextHolder.getCurrentUser(); + // 权限 + if (!AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) && (user.getRoleCodes().isEmpty() || user.getAuthDepartIds().isEmpty())) { + return tree; + } + // 市局权限 + boolean firstAuth = AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) || user.getRoleCodes().contains(RoleCodeEnum.FIRST_ADMIN.getCode()); + List authDepartIds = new ArrayList<>(); + if (!firstAuth) { + List authDeparts = departs.stream().filter(item -> user.getAuthDepartIds().contains(item.getId())).toList(); + Integer maxLevel = authDeparts.stream().map(SupDepart::getLevel).max(Integer::compareTo).get(); + authDepartIds = authDeparts.stream().filter(item -> maxLevel.equals(item.getLevel())).map(SupDepart::getId).toList(); + } + for (SupDepart depart : departs) { + DepartTree node = new DepartTree(); + BeanUtils.copyProperties(depart, node); + node.setHasChildren(!depart.getLevel().equals(4) && departs.stream().anyMatch(item -> node.getId().equals(item.getPid()))); + List children = childMap.computeIfAbsent(node.getPid(), k -> new ArrayList<>()); + children.add(node); + if (firstAuth && AppConstants.ROOT_DEPART_ID.equals(node.getId())) { + tree.add(node); + } else if (authDepartIds.contains(node.getId())) { + tree.add(node); + } + } + for (DepartTree node : tree) { + buildTreeRecursive(node, childMap); + } + return tree; + } + + public List buildTreeBySecond(List departs) { + Map> childMap = new HashMap<>(); + List tree = new ArrayList<>(); + for (SupDepart depart : departs) { + DepartTree node = new DepartTree(); + BeanUtils.copyProperties(depart, node); + List children = childMap.computeIfAbsent(node.getPid(), k -> new ArrayList<>()); + children.add(node); + if (AppConstants.ROOT_DEPART_ID.equals(node.getPid())) { + tree.add(node); + } + } + for (DepartTree node : tree) { + buildTreeRecursive(node, childMap); + } + return tree; + } + + public List buildTreeByParam(DepartTreeListParam departTreeListParam) { + if (Objects.nonNull(departTreeListParam.getPid())) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().eq(SupDepart::getPid, departTreeListParam.getPid()).orderByAsc(SupDepart::getOrderNo); + return list(queryWrapper).stream() + .map(depart -> { + DepartTree node = new DepartTree(); + BeanUtils.copyProperties(depart, node); + node.setHasChildren(existsByPid(node.getId())); + return node; + }).toList(); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .in(SupDepart::getLevel, List.of(1)).orderByAsc(SupDepart::getOrderNo); + List departs = list(queryWrapper); + Map> childMap = new HashMap<>(); + List tree = new ArrayList<>(); + for (SupDepart depart : departs) { + DepartTree node = new DepartTree(); + BeanUtils.copyProperties(depart, node); + node.setHasChildren(existsByPid(node.getId())); + List children = childMap.computeIfAbsent(node.getPid(), k -> new ArrayList<>()); + children.add(node); + String pid = node.getPid(); + if (AppConstants.ROOT_DEPART_ID.equals(pid) || pid.equals(departTreeListParam.getPid())) { + tree.add(node); + } + } + for (DepartTree node : tree) { + buildTreeRecursive(node, childMap); + } + return tree; + } + + /** + * 递归构建 + * @param node + * @param childMap + * @return + */ + private static DepartTree buildTreeRecursive(DepartTree node, Map> childMap) { + List children = childMap.get(node.getId()); + if (children != null) { + node.getChildren().addAll(children.stream() + .map(childNode -> buildTreeRecursive(childNode, childMap)) + .toList()); + } + return node; + } + + +} diff --git a/src/main/java/com/biutag/supervision/service/SupDictContentService.java b/src/main/java/com/biutag/supervision/service/SupDictContentService.java new file mode 100644 index 0000000..634ea9d --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/SupDictContentService.java @@ -0,0 +1,51 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.mapper.SupDictContentMapper; +import com.biutag.supervision.pojo.entity.SupDictProblemType; +import com.biutag.supervision.pojo.vo.DictContentTree; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +public class SupDictContentService extends ServiceImpl { + + public List list() { + return list(new LambdaQueryWrapper().orderByAsc(SupDictProblemType::getSort)); + } + + public List buildTree() { + List dictContents = list(); + Map> childMap = new HashMap<>(); + List tree = new ArrayList<>(); + for (SupDictProblemType dictContent : dictContents) { + DictContentTree node = new DictContentTree(); + BeanUtils.copyProperties(dictContent, node); + List children = childMap.computeIfAbsent(node.getParentCode(), k -> new ArrayList<>()); + children.add(node); + String pCode = node.getParentCode(); + if (AppConstants.DICT_CONTENT_ROOT_PARENT_CODE.equals(pCode)) { + tree.add(node); + } + } + for (DictContentTree node : tree) { + buildTreeRecursive(node, childMap); + } + return tree; + } + + private static DictContentTree buildTreeRecursive(DictContentTree node, Map> childMap) { + List children = childMap.get(node.getCode()); + if (children != null) { + node.getChildren().addAll(children.stream() + .map(childNode -> buildTreeRecursive(childNode, childMap)) + .toList()); + } + return node; + } + +} diff --git a/src/main/java/com/biutag/supervision/service/SupDictDataService.java b/src/main/java/com/biutag/supervision/service/SupDictDataService.java new file mode 100644 index 0000000..82a4530 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/SupDictDataService.java @@ -0,0 +1,33 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.dto.DictDataDto; +import com.biutag.supervision.pojo.dto.DictTypeDto; +import com.biutag.supervision.pojo.entity.SupDictData; +import com.biutag.supervision.mapper.SupDictDataMapper; +import com.biutag.supervision.pojo.entity.SupDictType; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +@Service +public class SupDictDataService extends ServiceImpl { + + public List listByDictType(String dictType) { + return list(new LambdaQueryWrapper().eq(SupDictData::getDictType, dictType)); + } + + public boolean save(DictDataDto dto) { + if (exists(new LambdaQueryWrapper().eq(SupDictData::getDictType, dto.getDictType()).eq(SupDictData::getDictValue, dto.getDictValue()))) { + throw new RuntimeException("字典值已存在"); + } + SupDictData supDictData = new SupDictData(); + BeanUtils.copyProperties(dto, supDictData); + supDictData.setCreateTime(LocalDateTime.now()); + supDictData.setUpdateTime(LocalDateTime.now()); + return save(supDictData); + } +} diff --git a/src/main/java/com/biutag/supervision/service/SupDictProblemSourceService.java b/src/main/java/com/biutag/supervision/service/SupDictProblemSourceService.java new file mode 100644 index 0000000..a42b981 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/SupDictProblemSourceService.java @@ -0,0 +1,50 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.mapper.SupDictProblemSourceMapper; +import com.biutag.supervision.pojo.entity.SupDictProblemSource; +import com.biutag.supervision.pojo.vo.DictProblemSourceTree; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class SupDictProblemSourceService extends ServiceImpl { + + public List buildTree() { + List dictProblemSources = list(new LambdaQueryWrapper().orderByAsc(SupDictProblemSource::getSort)); + Map> childMap = new HashMap<>(); + List tree = new ArrayList<>(); + for (SupDictProblemSource dictProblemSource : dictProblemSources) { + DictProblemSourceTree node = new DictProblemSourceTree(); + BeanUtils.copyProperties(dictProblemSource, node); + List children = childMap.computeIfAbsent(node.getParentId(), k -> new ArrayList<>()); + children.add(node); + Integer parentId = node.getParentId(); + if (AppConstants.DICT_PROBLEM_SOURCE_ROOT_PARENT_CODE.equals(parentId)) { + tree.add(node); + } + } + for (DictProblemSourceTree node : tree) { + buildTreeRecursive(node, childMap); + } + return tree; + } + + private static DictProblemSourceTree buildTreeRecursive(DictProblemSourceTree node, Map> childMap) { + List children = childMap.get(node.getId()); + if (children != null) { + node.getChildren().addAll(children.stream() + .map(childNode -> buildTreeRecursive(childNode, childMap)) + .toList()); + } + return node; + } + +} diff --git a/src/main/java/com/biutag/supervision/service/SupDictTypeService.java b/src/main/java/com/biutag/supervision/service/SupDictTypeService.java new file mode 100644 index 0000000..e991835 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/SupDictTypeService.java @@ -0,0 +1,27 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.dto.DictTypeDto; +import com.biutag.supervision.pojo.entity.SupDictType; +import com.biutag.supervision.mapper.SupDictTypeMapper; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; + +@Service +public class SupDictTypeService extends ServiceImpl { + + public boolean save(DictTypeDto dto) { + if (exists(new LambdaQueryWrapper().eq(SupDictType::getDictType, dto.getDictType()))) { + throw new RuntimeException("字典类型已存在"); + } + SupDictType supDictType = new SupDictType(); + BeanUtils.copyProperties(dto, supDictType); + supDictType.setCreateTime(LocalDateTime.now()); + supDictType.setUpdateTime(LocalDateTime.now()); + return save(supDictType); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/SupExternalDepartService.java b/src/main/java/com/biutag/supervision/service/SupExternalDepartService.java new file mode 100644 index 0000000..0f21d39 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/SupExternalDepartService.java @@ -0,0 +1,141 @@ +package com.biutag.supervision.service; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.mapper.*; +import com.biutag.supervision.pojo.entity.*; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@RequiredArgsConstructor +@Service +public class SupExternalDepartService extends ServiceImpl { + + private final SupExternalDepartMapper supExternalDepartMapper; + + private final GBaseAJJBXXMapper gBaseAJJBXXMapper; + + private final SupDepartMapper supDepartMapper; + + private final GBaseJJDMapper gBaseJJDMapper; + + private final GBaseCJDMapper gBaseCJDMapper; + + public final ModelClueDataMapper modelClueDataMapper; + + public void insertPreData() { + List supExternalDeparts = new ArrayList<>(); + Set dms = new HashSet<>(); + selectAJJBXX(1, supExternalDeparts, dms); + selectAJJBXX(2, supExternalDeparts, dms); + selectAJJBXX(3, supExternalDeparts, dms); + selectJJDandCJD(dms, supExternalDeparts); + selectWFQYZFRYB(dms, supExternalDeparts); + List supDeparts = supDepartMapper.selectList(new LambdaQueryWrapper().in(SupDepart::getCode, dms)); + for (SupExternalDepart supExternalDepart : supExternalDeparts) { + SupDepart supDepart = supDeparts.stream().filter(item -> item.getCode().equals(supExternalDepart.getExternalId())).findFirst().orElse(null); + if (supDepart != null) { + supExternalDepart.setInternalId(supDepart.getId()); + supExternalDepart.setInternalName(supDepart.getName()); + supExternalDepart.setInternalShortName(supDepart.getShortName()); + supExternalDepart.setLevel(supDepart.getLevel()); + supExternalDepart.setPid(supDepart.getPid()); + } + supExternalDepart.setStatus(0); + supExternalDepart.setCreateTime(LocalDateTime.now()); + } + supExternalDepartMapper.insert(supExternalDeparts); + } + + private void selectJJDandCJD(Set dms, List supExternalDeparts) { + List gBaseJJDS = gBaseJJDMapper.selectList(new QueryWrapper().select("DISTINCT gxdwdm, gxdwmc").ge("bjsj", "2022-10-01")); + if (!gBaseJJDS.isEmpty()) { + gBaseJJDS.forEach(item -> { + if (item != null && item.getGxdwdm() != null && !item.getGxdwdm().isEmpty() && !dms.contains(item.getGxdwdm())) { + SupExternalDepart supExternalDepart = new SupExternalDepart(); + supExternalDepart.setExternalId(item.getGxdwdm()); + supExternalDepart.setExternalName(item.getGxdwmc() == null ? "" : item.getGxdwmc()); + dms.add(item.getGxdwdm()); + supExternalDepart.setSource("情指行"); + supExternalDeparts.add(supExternalDepart); + } + }); + } + List gBaseCJDS = gBaseCJDMapper.selectList(new QueryWrapper().select("DISTINCT cjdxssdwdm, cjdxssdwmc").ge("cjsj", "2022-10-01")); + if (!gBaseCJDS.isEmpty()) { + gBaseCJDS.forEach(item -> { + if (item != null && item.getCjdxssdwdm() != null && !item.getCjdxssdwdm().isEmpty() && !dms.contains(item.getCjdxssdwdm())) { + SupExternalDepart supExternalDepart = new SupExternalDepart(); + supExternalDepart.setExternalId(item.getCjdxssdwdm()); + supExternalDepart.setExternalName(item.getCjdxssdwmc() == null ? "" : item.getCjdxssdwmc()); + dms.add(item.getCjdxssdwdm()); + supExternalDepart.setSource("情指行"); + supExternalDeparts.add(supExternalDepart); + } + }); + } + } + + private void selectWFQYZFRYB(Set dms, List supExternalDeparts) { + List> jjdmaps = modelClueDataMapper.selectByUniqueKeys("SELECT DISTINCT csid, csmc FROM dwd_ry_zfba_zfqywfryb WHERE STR_TO_DATE(djsj, '%Y%m%d%H%i%s') > '2022-10-01';"); + if (!jjdmaps.isEmpty()) { + jjdmaps.forEach(item -> { + if (item != null && item.get("csid") != null && !Objects.equals(item.get("csid"), "") && !dms.contains((String)item.get("csid"))) { + SupExternalDepart supExternalDepart = new SupExternalDepart(); + supExternalDepart.setExternalId((String)item.get("csid")); + supExternalDepart.setExternalName(item.get("csmc") == null ? "" : (String)item.get("csmc")); + dms.add((String)item.get("csid")); + supExternalDepart.setSource("执法办案"); + supExternalDeparts.add(supExternalDepart); + } + }); + } + } + + @DS("slave2") + private void selectAJJBXX(int type, List result, Set dms) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (type == 1) { + queryWrapper.select("DISTINCT LADWBMdm, LADWBMmc").ge("BARQ", "2022-10-01"); + } else if (type == 2) { + queryWrapper.select("DISTINCT PADWBMdm, PADWBMmc").ge("BARQ", "2022-10-01"); + } else if (type == 3) { + queryWrapper.select("DISTINCT BADWIDdm, BADWIDmc").ge("BARQ", "2022-10-01"); + } else { + return; + } + List supExternalDeparts = gBaseAJJBXXMapper.selectList(queryWrapper); + if (!supExternalDeparts.isEmpty()) { + supExternalDeparts.forEach(item -> { + if (item != null && item.getLADWBMdm() != null && !item.getLADWBMdm().isEmpty()) { + SupExternalDepart supExternalDepart = new SupExternalDepart(); + if (type == 1) { + supExternalDepart.setExternalId(item.getLADWBMdm()); + supExternalDepart.setExternalName(item.getLADWBMmc() == null ? "" : item.getLADWBMmc()); + } else if (type == 2 && !dms.contains(item.getPADWBMdm())) { + supExternalDepart.setExternalId(item.getPADWBMdm() == null ? "" : item.getPADWBMdm()); + supExternalDepart.setExternalName(item.getPADWBMmc() == null ? "" : item.getPADWBMmc()); + dms.add(item.getPADWBMdm()); + } else if (type == 3 && !dms.contains(item.getBADWIDdm())) { + supExternalDepart.setExternalId(item.getBADWIDdm() == null ? "" : item.getBADWIDdm()); + supExternalDepart.setExternalName(item.getBADWIDmc() == null ? "" : item.getBADWIDmc()); + dms.add(item.getBADWIDdm()); + } + supExternalDepart.setSource("执法办案"); + result.add(supExternalDepart); + } + }); + } + if (dms.isEmpty() && type == 1) { + dms.addAll(result.stream().map(SupExternalDepart::getExternalId).collect(Collectors.toSet())); + } + } +} diff --git a/src/main/java/com/biutag/supervision/service/SupPoliceService.java b/src/main/java/com/biutag/supervision/service/SupPoliceService.java new file mode 100644 index 0000000..7c7d7e7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/SupPoliceService.java @@ -0,0 +1,87 @@ +package com.biutag.supervision.service; + +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; +import com.biutag.supervision.common.UserContextHolder; +import com.biutag.supervision.constants.AppConstants; +import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.mapper.SupPoliceMapper; +import com.biutag.supervision.pojo.entity.SupPolice; +import com.biutag.supervision.pojo.model.PoliceModel; +import com.biutag.supervision.pojo.model.UserAuth; +import com.biutag.supervision.pojo.param.PoliceQueryParam; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@RequiredArgsConstructor +@Service +public class SupPoliceService extends ServiceImpl { + + private final SupDepartService departService; + + public Page page(PoliceQueryParam param) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + UserAuth user = UserContextHolder.getCurrentUser(); + // 权限 + if (!AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) && !user.getRoleCodes().contains(RoleCodeEnum.FIRST_ADMIN.getCode())) { + if (user.getAuthDepartIds().isEmpty() || user.getRoleCodes().isEmpty() || !user.getRoleCodes().contains(RoleCodeEnum.SECOND_ADMIN.getCode()) && !user.getRoleCodes().contains(RoleCodeEnum.THREE_ADMIN.getCode())) { + return new Page().setTotal(0).setRecords(new ArrayList<>()); + } + List orgIds = departService.getAllNodeIds(user.getAuthDepartIds()); + queryWrapper.in("p.org_id", orgIds); + } + queryWrapper.like(StrUtil.isNotBlank(param.getName()), "p.name", StrUtil.trim(param.getName())); + queryWrapper.like(StrUtil.isNotBlank(param.getIdCode()), "p.id_code", StrUtil.trim(param.getIdCode())); + queryWrapper.like(StrUtil.isNotBlank(param.getEmpNo()), "p.emp_no", StrUtil.trim(param.getEmpNo())); + queryWrapper.like(StrUtil.isNotBlank(param.getPhone()), "p.phone", StrUtil.trim(param.getPhone())); + if (StrUtil.isNotBlank(param.getDepartId())) { + if (Objects.nonNull(param.getDepartBranch()) && param.getDepartBranch()) { + List orgIds = departService.getAllNodeIds(param.getDepartId()); + queryWrapper.in("p.org_id", orgIds); + } else { + queryWrapper.eq("p.org_id", param.getDepartId()); + } + } + queryWrapper.apply(StrUtil.isNotBlank(param.getRoleId()), String.format("find_in_set( '%s', u.role_id) > 0", param.getRoleId())); + queryWrapper.orderByAsc("d.level").orderByDesc("p.position").orderByAsc("p.person_status"); + return baseMapper.queryPage(Page.of(param.getCurrent(), param.getSize()), queryWrapper); + } + + public SupPolice getByIdCode(String idCode) { + return getOne(new LambdaQueryWrapper().eq(SupPolice::getIdCode, idCode)); + } + + public List listAllByDepartId(String departId) { + List departIds = departService.getAllNodeIds(List.of(departId)); + return list(new LambdaQueryWrapper().in(SupPolice::getOrgId, departIds).orderByDesc(SupPolice::getPosition)); + } + + public List listLeaderByDepartId(String departId) { + List departIds = departService.getAllNodeIds(List.of(departId)); + return list(new LambdaQueryWrapper().in(SupPolice::getOrgId, departIds).isNotNull(SupPolice::getPhone)); + } + + public Boolean exists(String departId) { + List orgIds = departService.getAllNodeIds(departId); + if (orgIds.isEmpty()) { + return false; + } + return exists(new LambdaQueryWrapper().in(SupPolice::getOrgId, orgIds)); + } + + public Boolean ge(String empNo) { + return exists(new LambdaQueryWrapper().in(SupPolice::getEmpNo, empNo)); + } + + public Boolean existsByIdCode(String idCode) { + return exists(new LambdaQueryWrapper().in(SupPolice::getIdCode, idCode)); + } + +} diff --git a/src/main/java/com/biutag/supervision/service/UserLoginService.java b/src/main/java/com/biutag/supervision/service/UserLoginService.java new file mode 100644 index 0000000..11e10f4 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/UserLoginService.java @@ -0,0 +1,46 @@ +package com.biutag.supervision.service; + +import com.biutag.supervision.pojo.entity.*; +import com.biutag.supervision.pojo.model.UserAuth; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@RequiredArgsConstructor +@Service +public class UserLoginService { + + private final BaseUserService userService; + + private final BaseRoleService roleService; + + private final SupPoliceService policeService; + + private final SupDepartService departService; + + private final NegDepartAuthorityService negDepartAuthorityService; + + private final NegSourceAuthorityService negSourceAuthorityService; + + public UserAuth buildUserAuth(String account) { + BaseUser user = userService.getByUserName(account); + SupDepart depart = Optional.ofNullable(policeService.getByIdCode(account)) + .map(item -> departService.getById(item.getOrgId())).orElse(null); + List roles = roleService.listByUserId(user.getUserId()); + List departAuthorities = negDepartAuthorityService.list(user.getUserName()); + List sourceAuthorities = negSourceAuthorityService.list(user.getUserName()); + UserAuth userAuth = new UserAuth() + .setUserId(user.getUserId()) + .setUserName(user.getUserName()) + .setUserType(user.getUserType()) + .setNickName(user.getNickName()) + .setDepartId(Optional.ofNullable(depart).map(SupDepart::getId).orElse(null)) + .setDepartName(Optional.ofNullable(depart).map(SupDepart::getShortName).orElse(null)) + .setRoleCodes(roles.stream().map(BaseRole::getRoleCode).toList()) + .setAuthSources(sourceAuthorities.stream().map(NegSourceAuthority::getSource).toList()) + .setAuthDepartIds(departAuthorities.stream().map(NegDepartAuthority::getDepartId).toList()); + return userAuth; + } +} diff --git a/src/main/java/com/biutag/supervision/service/UserService.java b/src/main/java/com/biutag/supervision/service/UserService.java new file mode 100644 index 0000000..2bcb196 --- /dev/null +++ b/src/main/java/com/biutag/supervision/service/UserService.java @@ -0,0 +1,11 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.User; +import com.biutag.supervision.mapper.UserMapper; +import org.springframework.stereotype.Service; + +@Service +public class UserService extends ServiceImpl { + +} diff --git a/src/main/java/com/biutag/supervision/support/ModelClueDistributionAware.java b/src/main/java/com/biutag/supervision/support/ModelClueDistributionAware.java new file mode 100644 index 0000000..854487c --- /dev/null +++ b/src/main/java/com/biutag/supervision/support/ModelClueDistributionAware.java @@ -0,0 +1,78 @@ +package com.biutag.supervision.support; + +import cn.hutool.core.util.StrUtil; +import com.biutag.supervision.pojo.entity.Model; +import com.biutag.supervision.service.ModelClueService; +import com.biutag.supervision.service.ModelService; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.config.CronTask; +import org.springframework.scheduling.config.ScheduledTask; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 模型线索数据分发 + * @author wxc + * @date 2024/10/17 + */ +@Slf4j +@RequiredArgsConstructor +@Component +public class ModelClueDistributionAware { + + private final ScheduledTaskRegistrar taskRegistrar; + private final Map taskMap = new ConcurrentHashMap<>(); + + private final ModelService modelService; + + private final ModelClueService modelClueService; + + @PostConstruct + public void init() { + log.info("初始化模型分发任务-------------------------------------------"); + List models = modelService.listByDistributionMethodOfNegative(); + for (Model model : models) { + try { + put(model); + } catch (RuntimeException e) { + log.info("模型分发异常", e); + } + } + } + + public void put(Model model) { + log.info("新增模型【{}】分发任务", model.getModelName()); + String expression = model.getDistributionCycleExpression(); + if (StrUtil.isBlank(expression)) { + throw new RuntimeException("分发周期配置[expression]为空"); + } + if (taskMap.containsKey(model.getId())) { + remove(model.getId()); + } + Runnable task = () -> { + log.info("开始执行任务-------------------------------------------"); + // 线索下发 + modelClueService.distribution(model.getId()); + }; + log.info("expression : {}", expression); + ScheduledTask scheduledTask = taskRegistrar.scheduleTriggerTask(new CronTask(task, expression)); + taskMap.put(model.getId(), scheduledTask); + } + + public void remove(Integer key) { + log.info("移除模型【{}】分发任务", key); + ScheduledTask scheduledTask = taskMap.get(key); + if (Objects.nonNull(scheduledTask)) { + scheduledTask.cancel(); + taskMap.remove(key); + } + + } +} diff --git a/src/main/java/com/biutag/supervision/support/ModelEditAspect.java b/src/main/java/com/biutag/supervision/support/ModelEditAspect.java new file mode 100644 index 0000000..69e270c --- /dev/null +++ b/src/main/java/com/biutag/supervision/support/ModelEditAspect.java @@ -0,0 +1,49 @@ +package com.biutag.supervision.support; + +import com.biutag.supervision.constants.enums.DistributionMethodEnum; +import com.biutag.supervision.pojo.entity.Model; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.*; +import org.springframework.stereotype.Component; + +/** + * @author wxc + * @date 2024/10/17 + */ +@Slf4j +@RequiredArgsConstructor +@Aspect +@Component +public class ModelEditAspect { + + private final ModelClueDistributionAware modelClueDistributionAware; + + @Pointcut("execution(* com.biutag.supervision.service.ModelService.saveModel(..))") + public void saveMethod() {} + + @Pointcut("execution(* com.biutag.supervision.service.ModelService.updateModel(..))") + public void updateMethod() {} + + @Pointcut("execution(* com.biutag.supervision.service.ModelService.remove(Integer))") + public void removeMethod() {} + + @After("saveMethod() || updateMethod()") + public void afterSaveOrUpdateAdvice(JoinPoint joinPoint) { + Model model = (Model) joinPoint.getArgs()[0]; + if (!DistributionMethodEnum.NEGATIVE_DISTRIBUTE.getValue().equals(model.getDistributionMethod())) { + return; + } + modelClueDistributionAware.put(model); + log.info("afterSaveOrUpdateAdvice---------------"); + } + + @After("removeMethod()") + public void afterRemove(JoinPoint joinPoint) { + Integer modelId = (Integer) joinPoint.getArgs()[0]; + modelClueDistributionAware.remove(modelId); + log.info("afterRemove---------------"); + } + +} diff --git a/src/main/java/com/biutag/supervision/util/AES.java b/src/main/java/com/biutag/supervision/util/AES.java new file mode 100644 index 0000000..546225d --- /dev/null +++ b/src/main/java/com/biutag/supervision/util/AES.java @@ -0,0 +1,154 @@ +package com.biutag.supervision.util; + +import cn.hutool.core.codec.Base64Decoder; +import cn.hutool.core.util.StrUtil; +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.spec.SecretKeySpec; +import java.math.BigInteger; + + +/** + * AES的加密和解密 + * @author libo + */ +public class AES { + //密钥 (需要前端和后端保持一致) + private static final String KEY = "abcdefgabcdefg12"; + //算法 + private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding"; + + /** + * aes解密 + * @param encrypt 内容 + * @return + * @throws Exception + */ + public static String aesDecrypt(String encrypt) { + try { + return aesDecrypt(encrypt, KEY); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * aes加密 + * @param content + * @return + * @throws Exception + */ + public static String aesEncrypt(String content) { + try { + return aesEncrypt(content, KEY); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * 将byte[]转为各种进制的字符串 + * @param bytes byte[] + * @param radix 可以转换进制的范围,从Character.MIN_RADIX到Character.MAX_RADIX,超出范围后变为10进制 + * @return 转换后的字符串 + */ + public static String binary(byte[] bytes, int radix){ + return new BigInteger(1, bytes).toString(radix);// 这里的1代表正数 + } + + /** + * base 64 encode + * @param bytes 待编码的byte[] + * @return 编码后的base 64 code + */ + public static String base64Encode(byte[] bytes){ + return Base64.encodeBase64String(bytes); + } + + /** + * base 64 decode + * @param base64Code 待解码的base 64 code + * @return 解码后的byte[] + * @throws Exception + */ + public static byte[] base64Decode(String base64Code) { + return StrUtil.isEmpty(base64Code) ? null : Base64Decoder.decode(base64Code); + } + + + /** + * AES加密 + * @param content 待加密的内容 + * @param encryptKey 加密密钥 + * @return 加密后的byte[] + * @throws Exception + */ + public static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception { + KeyGenerator kgen = KeyGenerator.getInstance("AES"); + kgen.init(128); + Cipher cipher = Cipher.getInstance(ALGORITHMSTR); + cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES")); + + return cipher.doFinal(content.getBytes("utf-8")); + } + + + /** + * AES加密为base 64 code + * @param content 待加密的内容 + * @param encryptKey 加密密钥 + * @return 加密后的base 64 code + * @throws Exception + */ + public static String aesEncrypt(String content, String encryptKey) throws Exception { + return base64Encode(aesEncryptToBytes(content, encryptKey)); + } + + /** + * AES解密 + * @param encryptBytes 待解密的byte[] + * @param decryptKey 解密密钥 + * @return 解密后的String + * @throws Exception + */ + public static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception { + KeyGenerator kgen = KeyGenerator.getInstance("AES"); + kgen.init(128); + + Cipher cipher = Cipher.getInstance(ALGORITHMSTR); + cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES")); + byte[] decryptBytes = cipher.doFinal(encryptBytes); + return new String(decryptBytes); + } + + + /** + * 将base 64 code AES解密 + * @param encryptStr 待解密的base 64 code + * @param decryptKey 解密密钥 + * @return 解密后的string + * @throws Exception + */ + public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception { + return StrUtil.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr), decryptKey); + } + + /** + * 测试 + */ + public static void main(String[] args) throws Exception { + String content = "123"; + System.out.println("加密前:" + content); + System.out.println("加密密钥和解密密钥:" + KEY); + String encrypt = aesEncrypt(content, KEY); + System.out.println("加密后:" + encrypt); + String decrypt = aesDecrypt(encrypt, KEY); + System.out.println("解密后:" + decrypt); + System.out.println(aesDecrypt("Sy93OjPDF5vwNrkTfL9AyA==")); + } + +} diff --git a/src/main/java/com/biutag/supervision/util/ExpressionBuilder.java b/src/main/java/com/biutag/supervision/util/ExpressionBuilder.java new file mode 100644 index 0000000..4519ba7 --- /dev/null +++ b/src/main/java/com/biutag/supervision/util/ExpressionBuilder.java @@ -0,0 +1,22 @@ +package com.biutag.supervision.util; + +import java.util.Optional; + +/** + * @author wxc + * @date 2024/10/17 + */ +public class ExpressionBuilder { + + public static String build(String time) { + return build(time, null); + } + + public static String build(String time, String week) { + String expressionFormat = "%s %s %s * * %s"; + String[] split = time.split(":"); + String weekArg = Optional.ofNullable(week).orElse("*"); + return String.format(expressionFormat, Integer.parseInt(split[2]), Integer.parseInt(split[1]), Integer.parseInt(split[0]), weekArg); + } + +} diff --git a/src/main/java/com/biutag/supervision/util/JSON.java b/src/main/java/com/biutag/supervision/util/JSON.java new file mode 100644 index 0000000..a2de7ef --- /dev/null +++ b/src/main/java/com/biutag/supervision/util/JSON.java @@ -0,0 +1,45 @@ +package com.biutag.supervision.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.util.List; + +public class JSON { + + private static ObjectMapper objectMapper = new ObjectMapper(); + + public static String toJSONString(Object object) { + try { + return objectMapper.writeValueAsString(object); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + public static JsonNode readTree(String jsonString) { + try { + return objectMapper.readTree(jsonString); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + public static T readValue(String jsonString, Class valueType) { + try { + return objectMapper.readValue(jsonString, valueType); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + public static List readValueForList(String jsonString, Class valueType) { + try { + return objectMapper.readerForListOf(valueType).readValue(jsonString); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/com/biutag/supervision/util/SpringUtil.java b/src/main/java/com/biutag/supervision/util/SpringUtil.java new file mode 100644 index 0000000..75fcb1b --- /dev/null +++ b/src/main/java/com/biutag/supervision/util/SpringUtil.java @@ -0,0 +1,28 @@ +package com.biutag.supervision.util; + +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +@Component +public class SpringUtil { + + private static ApplicationContext applicationContext; + + public SpringUtil(ApplicationContext applicationContext) { + SpringUtil.applicationContext = applicationContext; + } + + public static ListableBeanFactory getBeanFactory() { + return applicationContext; + } + + public static T getBean(Class clazz) { + return getBeanFactory().getBean(clazz); + } + + public static T getBean(String name, Class clazz) { + return getBeanFactory().getBean(name, clazz); + } + +} diff --git a/src/main/java/com/biutag/supervision/util/TimeUtil.java b/src/main/java/com/biutag/supervision/util/TimeUtil.java new file mode 100644 index 0000000..d08a03f --- /dev/null +++ b/src/main/java/com/biutag/supervision/util/TimeUtil.java @@ -0,0 +1,105 @@ +package com.biutag.supervision.util; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; +import com.biutag.supervision.constants.enums.FlowNodeEnum; +import com.biutag.supervision.service.HolidayService; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.ChronoUnit; +import java.util.Objects; + +public class TimeUtil { + + // 一天86400秒 + public static final Long SECONDS_OF_A_DAY = 86400L; + + /** + * + * @param beginTime + * @param endTime + * @param maxDuration 最大时长(秒) + * @return + */ + public static long getRemainingDuration(LocalDateTime beginTime, LocalDateTime endTime, Long maxDuration) { + if (Objects.isNull(beginTime)) { + return 0; + } + if (maxDuration < SECONDS_OF_A_DAY) { + return maxDuration - ChronoUnit.SECONDS.between(beginTime, endTime); + } + HolidayService holidayService = SpringUtil.getBean(HolidayService.class); + long duration = 0; + for (LocalDateTime time = beginTime; time.isBefore(endTime.with(LocalTime.MAX)); time = time.plusDays(1)) { + // 判断是否是节假日 + if (holidayService.isHoliday(DatePattern.NORM_DATE_FORMATTER.format(time))) { + continue; + } + // 开始时间是否是当天 + if (beginTime.toLocalDate().equals(endTime.toLocalDate())) { + duration += ChronoUnit.SECONDS.between(beginTime, endTime); + } + // 是否是第一天 + else if (time.equals(beginTime)) { + duration += ChronoUnit.SECONDS.between(time, time.with(LocalTime.MAX)); + } + // 当天(开始时间不是当天) + else if (time.toLocalDate().equals(endTime.toLocalDate())) { + duration += ChronoUnit.SECONDS.between(time.with(LocalTime.MIN), endTime); + } + else { + duration += TimeUtil.SECONDS_OF_A_DAY; + } + } + return maxDuration - duration; + } + + /** + * + * @param beginTime + * @param maxDuration 最大时长(秒) + * @return + */ + public static long getRemainingDuration(LocalDateTime beginTime, Long maxDuration) { + return getRemainingDuration(beginTime, LocalDateTime.now(), maxDuration); + } + + /** + * + * @param beginTime + * @param maxDurationDays 最大时长(天) + * @return + */ + public static long getRemainingDuration(LocalDateTime beginTime, Integer maxDurationDays) { + if (Objects.isNull(maxDurationDays)) { + return 0; + } + return getRemainingDuration(beginTime, NumberUtil.mul(maxDurationDays, SECONDS_OF_A_DAY).longValue()); + } + + /** + * + * @param beginTime + * @param maxDuration + * @param extensionDurationDays 延期天数 + * @return + */ + public static long getRemainingDuration(LocalDateTime beginTime, Integer maxDuration, Integer extensionDurationDays) { + return getRemainingDuration(beginTime, maxDuration) + NumberUtil.mul(extensionDurationDays, SECONDS_OF_A_DAY).longValue(); + } + + public static Long getRemainingDuration(LocalDateTime beginTime, Integer maxSignDuration, Integer maxHandleDuration, Integer extensionDurationDays, String flowKey) { + if (StrUtil.isBlank(flowKey)) { + return null; + } + if (FlowNodeEnum.isSignFlow(flowKey)) { + return getRemainingDuration(beginTime, maxSignDuration); + } + if (Objects.isNull(extensionDurationDays)) { + return getRemainingDuration(beginTime, maxHandleDuration); + } + return getRemainingDuration(beginTime, maxHandleDuration, extensionDurationDays); + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..dc5065e --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,65 @@ +spring: + datasource: + dynamic: + datasource: + master: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://172.31.217.20:31868/negative?serverTimezone=GMT%2B8 + username: root + password: ip12341234 + slave: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://172.31.217.20:31868/open-platform?serverTimezone=GMT%2B8 + username: root + password: ip12341234 + slave2: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://172.31.217.20:31868/negative?serverTimezone=GMT%2B8 + username: root + password: ip12341234 + druid: + min-evictable-idle-time-millis: 300000 + test-on-borrow: false + test-on-return: false + initial-size: 10 + min-idle: 10 + max-wait: 60000 + pool-prepared-statements: true + test-while-idle: true + validation-query: select 1 + time-between-eviction-runs-millis: 60000 + max-pool-prepared-statement-per-connection-size: 20 + max-active: 100 + # druid监控全局配置 + druid: + stat-view-servlet: + enabled: true + url-pattern: /druid/* + data: + redis: + host: 172.31.217.20 + # 端口,默认为6379 + port: 31707 + # 数据库索引 + database: 1 + # 连接超时时间 + timeout: 10s + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +fdfs: + tracker-list: #TrackerList参数,支持多个 + - 172.31.217.20:32060 + preview-url: http://172.31.217.20:31664 + +springdoc: + group-configs: + - group: 'plugin' + paths-to-match: + - '/api/plugin/**' + - '/login' \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..506acbc --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,36 @@ +spring: + datasource: + dynamic: + datasource: + master: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://172.31.217.20:31868/negative?serverTimezone=GMT%2B8 + username: root + password: ip12341234 + slave: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://172.31.217.20:31868/open-platform?serverTimezone=GMT%2B8 + username: root + password: ip12341234 + data: + redis: + host: 127.0.0.1 + # 端口,默认为6379 + port: 6379 + password: 123456 + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +fdfs: + tracker-list: #TrackerList参数,支持多个 + - 172.31.217.20:32060 + preview-url: http://172.31.217.20:31664 + +springdoc: + group-configs: + - group: 'plugin' + paths-to-match: + - '/api/plugin/**' + - '/login' \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..619c861 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,57 @@ +spring: + datasource: + dynamic: + datasource: + master: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://65.47.6.109:3306/negative?serverTimezone=GMT%2B8&useSSL=false + username: root + password: ip12341234 + slave: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://65.47.6.109:3306/open-platform?serverTimezone=GMT%2B8&useSSL=false + username: root + password: ip12341234 + slave2: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.gbase.jdbc.Driver + url: jdbc:gbase://65.47.16.209:5258/csga_dwd + username: csga_wdpc + password: csga_wdpc@123 + druid: + min-evictable-idle-time-millis: 300000 + test-on-borrow: false + test-on-return: false + initial-size: 10 + min-idle: 10 + max-wait: 60000 + pool-prepared-statements: true + test-while-idle: true + validation-query: select 1 + time-between-eviction-runs-millis: 60000 + max-pool-prepared-statement-per-connection-size: 20 + max-active: 100 + + # druid监控全局配置 + druid: + stat-view-servlet: + enabled: true + url-pattern: /druid/* + wall: + multi-statement-allow: true + data: + redis: + host: 65.47.6.109 + # 端口,默认为6379 + port: 6379 + password: ip1234!@#$ + +fdfs: + tracker-list: + - 65.47.6.110:22122 + preview-url: http://65.47.6.110:81 + +negative: + v1-user-url: http://65.47.6.108:8765/admin/current/user \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..64d18db --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,45 @@ +server: + port: 8080 +spring: + profiles: + active: @profiles.active@ + datasource: + dynamic: + primary: master + data: + redis: + # 数据库索引 + database: 1 + # 连接超时时间 + timeout: 10s + + jackson: + time-zone: Asia/Shanghai + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + +mybatis-plus: + # 对应的 XML 文件位置 + mapper-locations: classpath*:mapper/*Mapper.xml + +fdfs: + soTimeout: 1500 # socket连接超时时长 + connectTimeout: 600 # 连接tracker服务器超时时长 + + pool: + #从池中借出的对象的最大数目(配置为-1表示不限制) + max-total: -1 + #获取连接时的最大等待毫秒数(默认配置为5秒) + max-wait-millis: 5000 + #每个key最大连接数 + max-total-per-key: 50 + #每个key对应的连接池最大空闲连接数 + max-idle-per-key: 10 + #每个key对应的连接池最小空闲连接数 + min-idle-per-key: 5 + +knife4j: + setting: + language: zh_cn diff --git a/src/main/resources/lib/gbase-connector-java-8.3.81.53-build52.8-bin.jar b/src/main/resources/lib/gbase-connector-java-8.3.81.53-build52.8-bin.jar new file mode 100644 index 0000000000000000000000000000000000000000..778cd3972244cb7e354ba31af6b0fb693b604a07 GIT binary patch literal 786598 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�rhHu=GieSz)`wQp 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 )XHu&^m@ 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
NLB5_p~Wcx9**}fWufsd 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�&o%vKMs#`0s?3CNY;NYD+tKc}Ry66*c)}cc|tH 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 z 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�DWME)qHsyT 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 literal 0 HcmV?d00001 diff --git a/src/test/java/com/biutag/supervision/PasswordTests.java b/src/test/java/com/biutag/supervision/PasswordTests.java new file mode 100644 index 0000000..7c6b132 --- /dev/null +++ b/src/test/java/com/biutag/supervision/PasswordTests.java @@ -0,0 +1,29 @@ +package com.biutag.supervision; + +import com.biutag.supervision.util.TimeUtil; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.ChronoUnit; + +public class PasswordTests { + + @Test + public void testAes() { + LocalDateTime beginTime = LocalDateTime.of(2024, 8, 26, 11, 0, 0); + LocalDateTime now = LocalDateTime.now(); + long i = 0; + for (LocalDateTime time = beginTime; time.isBefore(now); time = time.plusDays(1)) { + System.out.println(i); + if (time.equals(beginTime)) { + i += ChronoUnit.SECONDS.between(time, time.with(LocalTime.MAX)); + } else if (time.toLocalDate().equals(now.toLocalDate())) { + i += ChronoUnit.SECONDS.between(time, now); + } else { + i += TimeUtil.SECONDS_OF_A_DAY; + } + } + System.out.println(i); + } +} diff --git a/src/test/java/com/biutag/supervision/StrUtil.java b/src/test/java/com/biutag/supervision/StrUtil.java new file mode 100644 index 0000000..9435bfc --- /dev/null +++ b/src/test/java/com/biutag/supervision/StrUtil.java @@ -0,0 +1,22 @@ +package com.biutag.supervision; + +import cn.hutool.core.io.FileTypeUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.resource.ResourceUtil; +import com.biutag.supervision.util.JSON; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +import java.net.URL; +import java.util.List; + +public class StrUtil { + + @Test + public void testSubstr() { + + String type = FileUtil.extName("1.xls"); + System.out.println(type); + } +} diff --git a/src/test/java/com/biutag/supervision/SupervisionApplicationTests.java b/src/test/java/com/biutag/supervision/SupervisionApplicationTests.java new file mode 100644 index 0000000..e056ff1 --- /dev/null +++ b/src/test/java/com/biutag/supervision/SupervisionApplicationTests.java @@ -0,0 +1,40 @@ +package com.biutag.supervision; + +import com.github.tobato.fastdfs.service.FastFileStorageClient; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.support.CronTrigger; + +import java.time.LocalDateTime; + +@SpringBootTest +class SupervisionApplicationTests { + + @Autowired + private FastFileStorageClient fastFileStorageClient; + + @Autowired + private ScheduledTaskRegistrar taskRegistrar; + + @Autowired + private TaskScheduler taskScheduler; + + @Test + void contextLoads() { + ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); + scheduler.setPoolSize(5); + scheduler.setThreadNamePrefix("scheduled-task-"); + scheduler.initialize(); + Runnable runnable = () -> { + System.out.println("Executing task at " + LocalDateTime.now()); + }; + taskRegistrar.setTaskScheduler(scheduler); + taskRegistrar.addTriggerTask(runnable, new CronTrigger("0 2 * * * ?")); + + } + +} diff --git a/src/test/java/com/biutag/supervision/tools/ColumnMapper.java b/src/test/java/com/biutag/supervision/tools/ColumnMapper.java new file mode 100644 index 0000000..eb56511 --- /dev/null +++ b/src/test/java/com/biutag/supervision/tools/ColumnMapper.java @@ -0,0 +1,14 @@ +package com.biutag.supervision.tools; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface ColumnMapper { + + @Select("SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT, COLUMN_KEY, EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = #{tableSchema} AND TABLE_NAME = #{tableName} ORDER BY ORDINAL_POSITION") + List> list(String tableSchema, String tableName); +} diff --git a/src/test/java/com/biutag/supervision/tools/ExcelToDb.java b/src/test/java/com/biutag/supervision/tools/ExcelToDb.java new file mode 100644 index 0000000..337f660 --- /dev/null +++ b/src/test/java/com/biutag/supervision/tools/ExcelToDb.java @@ -0,0 +1,51 @@ +package com.biutag.supervision.tools; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.listener.ReadListener; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.stream.Collectors; + +public class ExcelToDb { + + @Test + public void simpleRead() { + String fileName = "D:\\Workspace\\创客\\公安项目\\数字督察\\文档\\信访投诉数据台账(新)_240731.xlsx"; + + // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 + EasyExcel.read(fileName, new ReadListener() { + int i = 0; + @Override + public void invoke(Object obj, AnalysisContext analysisContext) { + if (i++ == 0) { + System.out.println("("); + ((LinkedHashMap) obj).forEach((key, val) -> { + String zh = val.toString().replace("*", "").replace("\n", "").replace("(", " ").replace(")", ""); + + String en = Translate.zhToEn(zh); + String columnName = Arrays.stream(en.toLowerCase().replace(",", "").replace("'s", "").split(" ")) + .filter(item -> !"and".equals(item) && !"of".equals(item) && !"the".equals(item)) + .collect(Collectors.joining("_")); + + System.out.println(columnName + " varchar(255) COMMENT '" + val.toString().replace("*", "").replace("\n", "") + "',"); + }); + System.out.println(")"); + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + }).sheet().doRead(); + } + + @Test + public void testCamelName() { + System.out.println(StrUtil.toCamelCase("data_case_verification")); + } +} diff --git a/src/test/java/com/biutag/supervision/tools/GenCode.java b/src/test/java/com/biutag/supervision/tools/GenCode.java new file mode 100644 index 0000000..0162317 --- /dev/null +++ b/src/test/java/com/biutag/supervision/tools/GenCode.java @@ -0,0 +1,47 @@ +package com.biutag.supervision.tools; + +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import freemarker.template.Version; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + + +public class GenCode { + + public static File TEMPLATE_DIR = new File(System.getProperty("user.dir") + "\\src\\test\\resources\\templates"); + + public static void genMapper(String entityName) throws IOException, TemplateException { + Map data = new HashMap<>(); + data.put("entityName", entityName); + Configuration configuration = new Configuration(new Version("2.3.32")); + configuration.setDefaultEncoding("UTF-8"); + configuration.setDirectoryForTemplateLoading(TEMPLATE_DIR); + Template template = configuration.getTemplate("Mapper.ftl", "UTF-8"); + String path = String.format(System.getProperty("user.dir") + "\\src\\main\\java\\com\\biutag\\supervision\\mapper\\%sMapper.java", entityName); + Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8)); + template.process(data, out); + out.flush(); + out.close(); + } + + public static void genService(String entityName) throws IOException, TemplateException { + Map data = new HashMap<>(); + data.put("entityName", entityName); + Configuration configuration = new Configuration(new Version("2.3.32")); + configuration.setDefaultEncoding("UTF-8"); + configuration.setDirectoryForTemplateLoading(TEMPLATE_DIR); + Template template = configuration.getTemplate("Service.ftl", "UTF-8"); + String path = String.format(System.getProperty("user.dir") + "\\src\\main\\java\\com\\biutag\\supervision\\service\\%sService.java", entityName); + Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8)); + template.process(data, out); + out.flush(); + out.close(); + } + + +} diff --git a/src/test/java/com/biutag/supervision/tools/GenCodeTests.java b/src/test/java/com/biutag/supervision/tools/GenCodeTests.java new file mode 100644 index 0000000..dd001a2 --- /dev/null +++ b/src/test/java/com/biutag/supervision/tools/GenCodeTests.java @@ -0,0 +1,79 @@ +package com.biutag.supervision.tools; + +import cn.hutool.core.util.StrUtil; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import freemarker.template.Version; +import org.junit.jupiter.api.Test; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@MapperScan(basePackages = "com.biutag.supervision.mapper", basePackageClasses = ColumnMapper.class) +@SpringBootTest +public class GenCodeTests { + + @Autowired + ColumnMapper columnMapper; + + @Test + public void genEntity() throws TemplateException, IOException { + String tableName = "rpc_infringer_result"; + String tableSchema = "negative"; + boolean genMapper = true; + boolean genService = true; + //-------------------------------------------- + Map data = new HashMap<>(); + String entityName = StrUtil.upperFirst(StrUtil.toCamelCase(tableName)); + + data.put("entityName", entityName); + List> list = columnMapper.list(tableSchema, tableName); + List> fields = list.stream().map(item -> { + Map field = new HashMap<>(); + field.put("name", StrUtil.toCamelCase(item.get("COLUMN_NAME").toString())); + field.put("type", getType(item.get("DATA_TYPE").toString())); + field.put("columnName", item.get("COLUMN_NAME")); + field.put("columnComment", item.get("COLUMN_COMMENT")); + field.put("columnKey", item.get("COLUMN_KEY")); + field.put("extra", item.get("EXTRA")); + return field; + }).toList(); + data.put("fields", fields); + Configuration configuration = new Configuration(new Version("2.3.32")); + configuration.setDefaultEncoding("UTF-8"); + + configuration.setDirectoryForTemplateLoading(GenCode.TEMPLATE_DIR); + Template template = configuration.getTemplate("Entity.ftl", "UTF-8"); + String path = String.format(System.getProperty("user.dir") + "\\src\\main\\java\\com\\biutag\\supervision\\pojo\\entity\\%s.java", entityName); + Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8)); + template.process(data, out); + out.flush(); + out.close(); + if (genMapper) { + GenCode.genMapper(entityName); + if (genService) { + GenCode.genService(entityName); + } + } + } + + private String getType(String dataType) { + if ("datetime".equals(dataType)) { + return "LocalDateTime"; + } + if ("tinyint".equals(dataType)) { + return "Boolean"; + } + if ("int".equals(dataType)) { + return "Integer"; + } + return "String"; + } +} diff --git a/src/test/java/com/biutag/supervision/tools/Translate.java b/src/test/java/com/biutag/supervision/tools/Translate.java new file mode 100644 index 0000000..d045115 --- /dev/null +++ b/src/test/java/com/biutag/supervision/tools/Translate.java @@ -0,0 +1,44 @@ +package com.biutag.supervision.tools; + +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class Translate { + + public static String zhToEn(String query) { + HttpResponse httpResponse = HttpUtil.createPost("https://fanyi.baidu.com/ait/text/translate") + .body(String.format("{\"query\":\"%s\",\"from\":\"zh\",\"to\":\"en\",\"reference\":\"\",\"corpusIds\":[],\"qcSettings\":[],\"needPhonetic\":true,\"domain\":\"common\",\"milliTimestamp\":%s}", + query, + System.currentTimeMillis())) + .executeAsync(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.bodyStream())); + String line; + try { + while ((line = bufferedReader.readLine()) != null) { + if (line.startsWith("data")) { + String json = line.substring(5); + JsonNode jsonNode = new ObjectMapper().readTree(json); + JsonNode data = jsonNode.get("data"); + if ("Translating".equals(data.get("event").asText())) { + for (JsonNode item : data.get("list")) { + String val = item.get("dst").asText(); + return val; + } + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + + } + +} diff --git a/src/test/resources/templates/Entity.ftl b/src/test/resources/templates/Entity.ftl new file mode 100644 index 0000000..99ab420 --- /dev/null +++ b/src/test/resources/templates/Entity.ftl @@ -0,0 +1,27 @@ +package com.biutag.supervision.pojo.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Setter +@Getter +public class ${entityName} { + + <#list fields as field> + // ${field.columnComment} + <#if field.columnKey == 'PRI' && field.extra == 'auto_increment'> + @TableId(value = "${field.columnName}", type = IdType.AUTO) + <#elseif field.columnKey == 'PRI'> + @TableId(value = "${field.columnName}") + <#else> + @TableField("${field.columnName}") + + private ${field.type} ${field.name}; + + +} \ No newline at end of file diff --git a/src/test/resources/templates/Mapper.ftl b/src/test/resources/templates/Mapper.ftl new file mode 100644 index 0000000..6bb0763 --- /dev/null +++ b/src/test/resources/templates/Mapper.ftl @@ -0,0 +1,8 @@ +package com.biutag.supervision.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.biutag.supervision.pojo.entity.${entityName}; + +public interface ${entityName}Mapper extends BaseMapper<${entityName}> { + +} \ No newline at end of file diff --git a/src/test/resources/templates/Service.ftl b/src/test/resources/templates/Service.ftl new file mode 100644 index 0000000..e993e6b --- /dev/null +++ b/src/test/resources/templates/Service.ftl @@ -0,0 +1,11 @@ +package com.biutag.supervision.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.biutag.supervision.pojo.entity.${entityName}; +import com.biutag.supervision.mapper.${entityName}Mapper; +import org.springframework.stereotype.Service; + +@Service +public class ${entityName}Service extends ServiceImpl<${entityName}Mapper, ${entityName}> { + +}

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 kfGYbzrNHN10w2~%ez^>+7L#IF + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/BusinessPoliceMapper.xml b/src/main/resources/mapper/BusinessPoliceMapper.xml new file mode 100644 index 0000000..b6d9836 --- /dev/null +++ b/src/main/resources/mapper/BusinessPoliceMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/GBaseCJDMapper.xml b/src/main/resources/mapper/GBaseCJDMapper.xml new file mode 100644 index 0000000..279c474 --- /dev/null +++ b/src/main/resources/mapper/GBaseCJDMapper.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/GBaseJJDMapper.xml b/src/main/resources/mapper/GBaseJJDMapper.xml new file mode 100644 index 0000000..45d98a1 --- /dev/null +++ b/src/main/resources/mapper/GBaseJJDMapper.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/ModelClueMapper.xml b/src/main/resources/mapper/ModelClueMapper.xml new file mode 100644 index 0000000..b1fa0fd --- /dev/null +++ b/src/main/resources/mapper/ModelClueMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/ModelClueTaskMapper.xml b/src/main/resources/mapper/ModelClueTaskMapper.xml new file mode 100644 index 0000000..a6a4817 --- /dev/null +++ b/src/main/resources/mapper/ModelClueTaskMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/NegativeFavMapper.xml b/src/main/resources/mapper/NegativeFavMapper.xml new file mode 100644 index 0000000..77cb878 --- /dev/null +++ b/src/main/resources/mapper/NegativeFavMapper.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/NegativeWorkMapper.xml b/src/main/resources/mapper/NegativeWorkMapper.xml new file mode 100644 index 0000000..99e667f --- /dev/null +++ b/src/main/resources/mapper/NegativeWorkMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/ProfileDepartMapper.xml b/src/main/resources/mapper/ProfileDepartMapper.xml new file mode 100644 index 0000000..de021f6 --- /dev/null +++ b/src/main/resources/mapper/ProfileDepartMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/SupPoliceMapper.xml b/src/main/resources/mapper/SupPoliceMapper.xml new file mode 100644 index 0000000..c2f3e43 --- /dev/null +++ b/src/main/resources/mapper/SupPoliceMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/templates/《处理反馈表》.doc b/src/main/resources/static/templates/《处理反馈表》.doc new file mode 100644 index 0000000000000000000000000000000000000000..221743ac0956c09a2530003c2c85a7326480e9c4 GIT binary patch literal 27136 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 Z?7Tk>;Vu<9I7L5MC~hRUPu;~5_N?2<_(# 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 TkEagd{Z!Dz`+D-A{Q&)cIKn#J literal 0 HcmV?d00001 diff --git a/src/main/resources/static/templates/信访投诉数据台账(模板).xlsx b/src/main/resources/static/templates/信访投诉数据台账(模板).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..56008b106616532bc7ecb7d95e04bac03bff6e2e GIT binary patch literal 10602 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 PgulYzwOo?w*Sr4%j{r^R literal 0 HcmV?d00001 diff --git a/src/main/resources/static/templates/案件核查问题台账(模板).xlsx b/src/main/resources/static/templates/案件核查问题台账(模板).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ea83085cb926148e5b10a0fb5111faef6f8d98ee GIT binary patch literal 14335 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 A0RR91 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/templates/长沙公安数字督察灵敏感知体系问题赋分及风险预警机制.pdf b/src/main/resources/static/templates/长沙公安数字督察灵敏感知体系问题赋分及风险预警机制.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9e3379ea16cb726ce4ae4ef941f6dc59398b9233 GIT binary patch literal 166890 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