diff --git a/src/main/java/com/biutag/supervision/controller/system/PoliceController.java b/src/main/java/com/biutag/supervision/controller/system/PoliceController.java index 6886f37..4d224e9 100644 --- a/src/main/java/com/biutag/supervision/controller/system/PoliceController.java +++ b/src/main/java/com/biutag/supervision/controller/system/PoliceController.java @@ -2,27 +2,35 @@ 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.entity.NegDepartAuthority; -import com.biutag.supervision.pojo.entity.NegSourceAuthority; -import com.biutag.supervision.pojo.entity.SupDepart; -import com.biutag.supervision.pojo.entity.SupPolice; +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.NegDepartAuthorityService; -import com.biutag.supervision.service.NegSourceAuthorityService; -import com.biutag.supervision.service.SupDepartService; -import com.biutag.supervision.service.SupPoliceService; +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.util.Date; -import java.util.List; -import java.util.Objects; +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; @RequestMapping("police") @RequiredArgsConstructor @@ -37,6 +45,8 @@ public class PoliceController { private final NegSourceAuthorityService negSourceAuthorityService; + private final Validator validator; + @GetMapping public Result> list(PoliceQueryParam param) { return Result.success(policeService.page(param)); @@ -105,4 +115,136 @@ public class PoliceController { 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; + if (StrUtil.isBlank(police.getThirdDepartName())) { + depart = departService.getOne(new LambdaQueryWrapper().eq(SupDepart::getShortName, police.getSecondDepartName()).eq(SupDepart::getLevel, 2)); + } else { + SupDepart secondDepart = departService.getOne(new LambdaQueryWrapper().eq(SupDepart::getShortName, police.getSecondDepartName()).eq(SupDepart::getLevel, 2)); + depart = departService.getOne(new LambdaQueryWrapper().eq(SupDepart::getPid, secondDepart.getId()) + .eq(SupDepart::getShortName, police.getThirdDepartName()).eq(SupDepart::getLevel, 3)); + } + 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()); + if (police.getEmpNo().contains("A")) { + supPolice.setPersonType("3"); + } else { + supPolice.setPersonType("1"); + } + policeService.save(supPolice); + + } 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); + } + 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/mapper/ModelClueTaskMapper.java b/src/main/java/com/biutag/supervision/mapper/ModelClueTaskMapper.java index 3274a9f..5574098 100644 --- a/src/main/java/com/biutag/supervision/mapper/ModelClueTaskMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/ModelClueTaskMapper.java @@ -1,8 +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.ModelClueTask; +import com.biutag.supervision.pojo.model.ModelClueTaskModel; +import com.biutag.supervision.pojo.model.NegativeWorkModel; +import org.apache.ibatis.annotations.Param; public interface ModelClueTaskMapper 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/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/entity/ModelClue.java b/src/main/java/com/biutag/supervision/pojo/entity/ModelClue.java index 946803d..35e6f3a 100644 --- a/src/main/java/com/biutag/supervision/pojo/entity/ModelClue.java +++ b/src/main/java/com/biutag/supervision/pojo/entity/ModelClue.java @@ -68,6 +68,10 @@ public class ModelClue { @TableField("unique_key") private String uniqueKey; + // 任务ID + private Integer taskId; + + // 总警情数 @TableField(exist = false) private Long zjjs; diff --git a/src/main/java/com/biutag/supervision/service/HolidayService.java b/src/main/java/com/biutag/supervision/service/HolidayService.java index 9b9a970..ce9062e 100644 --- a/src/main/java/com/biutag/supervision/service/HolidayService.java +++ b/src/main/java/com/biutag/supervision/service/HolidayService.java @@ -28,16 +28,14 @@ public class HolidayService extends ServiceImpl { long l = System.currentTimeMillis(); Boolean result = (Boolean) redisTemplate.opsForValue().get(String.format("holiday:%s", date)); if (Objects.nonNull(result)) { - System.out.println(String.format("查询节假日耗时:%sms", System.currentTimeMillis() - l)); return result; } Holiday holiday = getOne(new LambdaUpdateWrapper().eq(Holiday::getDate, date)); if (Objects.isNull(holiday)) { - log.error("节假日 {} 数据未找到", date); + // log.error("节假日 {} 数据未找到", date); return false; } redisTemplate.opsForValue().set(String.format("holiday:%s", date), holiday.getFlag()); - System.out.println(String.format("查询节假日耗时(sql):%sms", System.currentTimeMillis() - l)); return holiday.getFlag(); } diff --git a/src/main/resources/mapper/ModelClueTaskMapper.xml b/src/main/resources/mapper/ModelClueTaskMapper.xml new file mode 100644 index 0000000..94100b7 --- /dev/null +++ b/src/main/resources/mapper/ModelClueTaskMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/templates/数字督察警员权限导入模板.xlsx b/src/main/resources/static/templates/数字督察警员权限导入模板.xlsx new file mode 100644 index 0000000..fadc15d Binary files /dev/null and b/src/main/resources/static/templates/数字督察警员权限导入模板.xlsx differ