package com.whdc.controller; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.whdc.exception.MyException; import com.whdc.model.dto.AddressBootDto; import com.whdc.model.entity.*; import com.whdc.model.enums.Role; import com.whdc.model.enums.VersionsType; import com.whdc.model.group.Insert; import com.whdc.model.group.Update; import com.whdc.model.vo.AdcdTree; import com.whdc.model.vo.AddressBookVo; import com.whdc.model.vo.ExcelABVo; import com.whdc.service.*; import com.whdc.utils.ExcelCommon; import com.whdc.utils.ResultJson; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; import static com.whdc.model.MyConstant.REDIS_KEY; /** * @author xusan * @date 2024-05-11 */ @Slf4j @Api(tags = "通讯录 - Controller") @RestController @RequestMapping("/addressbook") @Transactional public class AddressBookController { public static final String ADDRESS_BOOK_REDIS_KEY = REDIS_KEY + "addressbook:"; @Autowired private IAddressBookService service; @Autowired private IUserService userService; @Autowired private IAdinfoService adinfoService; @Autowired private IVersionsService versionsService; @Autowired private IOrganizationService organizationsService; @Autowired private IAbUdRService abUdRService; // @ApiOperation(value = "查询所有") // @PostMapping(value = "find") // public ResultJson find(@RequestBody AddressBook dto) { // // return ResultJson.ok(service.find(dto)); // // } @ApiOperation(value = "分页查询") @PostMapping(value = "page") public ResultJson page(@RequestBody AddressBootDto dto) { dto.setUserId(String.valueOf(StpUtil.getLoginId())); IPage page = service.page(dto); // return ResultJson.ok(JSON.parseObject(JSON.toJSONString(page).replaceAll("null",""))); return ResultJson.ok(page); } @ApiOperation(value = "添加") @PostMapping(value = "save") @CacheEvict(value = ADDRESS_BOOK_REDIS_KEY, allEntries = true) public ResultJson insert(@RequestBody @Validated(Insert.class) AddressBook model) { User user = userService.getRole(Integer.valueOf(String.valueOf(StpUtil.getLoginId()))); switch (Objects.requireNonNull(Role.getByName(user.getRole()))) { case R000: return ResultJson.error("权限不足"); case R001: case R099: break; default: return ResultJson.error("权限不足!!"); } if (StringUtils.isNotBlank(model.getRole())) { switch (Objects.requireNonNull(Role.getByName(user.getRole()))) { case R000: case R001: case R099: break; default: return ResultJson.error("权限不匹配"); } if (Integer.parseInt(user.getRole()) < Integer.parseInt(model.getRole())) { return ResultJson.error("权限不足!"); } } if (CollectionUtils.isNotEmpty( service.lambdaQuery() .eq(AddressBook::getName, String.valueOf(model.getName()).trim()) .list()) ) { return ResultJson.error("该名称重复"); } if (StringUtils.isNotBlank(model.getPhone()) && CollectionUtils.isNotEmpty( service.lambdaQuery() .eq(AddressBook::getPhone, model.getPhone().trim()) .list()) ) { return ResultJson.error("该手机号已存在"); } // 添加日志 versionsService.saveInfo(model, VersionsType.ADD); model.setId(null); boolean save = service.save(model); if (save) { // 没有手机号用名字注册 //"省防指".equals(organizationsService.getById(model.getOrganization()).getName()) // && if (StringUtils.isBlank(model.getPhone())) { if (StringUtils.isNotBlank(model.getTel())) { userService.register(model.getTel(), model.getId(), model.getRole()); } else { userService.register(model.getName(), model.getId(), model.getRole()); } } else { userService.register(model.getPhone(), model.getId(), model.getRole()); } if (StringUtils.isNotBlank(model.getAdcd())) { abUdRService.save(new AbUdR(model.getId(), Integer.valueOf(model.getAdcd().replaceFirst("000000", "")), model.getSort(), model.getType())); } else { // 添加关联关系` abUdRService.save(new AbUdR(model.getId(), Integer.valueOf(model.getOrganization()), model.getSort(), model.getType())); } } return ResultJson.ok(save); } @ApiOperation(value = "修改") @PostMapping(value = "edit") @CacheEvict(value = ADDRESS_BOOK_REDIS_KEY, allEntries = true) public ResultJson update(@RequestBody @Validated(Update.class) AddressBook model) { Integer loginId = Integer.valueOf(String.valueOf(StpUtil.getLoginId())); User user = userService.getRole(loginId); switch (Objects.requireNonNull(Role.getByName(user.getRole()))) { case R000: { // 不是修改自己 if (!model.getId().equals(user.getAbId())) { return ResultJson.error("权限不足"); } } ; case R001: case R099: break; default: return ResultJson.error("权限不足!!"); } if (StringUtils.isNotBlank(model.getRole())) { switch (Objects.requireNonNull(Role.getByName(user.getRole()))) { case R000: case R001: case R099: break; default: return ResultJson.error("权限不匹配"); } if (Integer.parseInt(user.getRole()) < Integer.parseInt(model.getRole())) { return ResultJson.error("权限不足!"); } } AddressBook byId = service.getById(model.getId()); if (Objects.isNull(byId)) { return ResultJson.error("当前数据不存在"); } if (CollectionUtils.isNotEmpty( service.lambdaQuery() .eq(AddressBook::getName, String.valueOf(model.getName()).trim()) .ne(AddressBook::getId, model.getId()) .list()) ) { return ResultJson.error("该名称重复"); } if (StringUtils.isNotBlank(model.getPhone()) && CollectionUtils.isNotEmpty( service.lambdaQuery() .eq(AddressBook::getPhone, model.getPhone().trim()) .ne(AddressBook::getId, model.getId()) .list()) ) { return ResultJson.error("该手机号已存在"); } // List list = versionsService.lambdaQuery() // .eq(Versions::getAbId, model.getId()) // .list(); // Integer version = 0; // if (CollectionUtils.isNotEmpty(list)){ // version = list // .stream().map(Versions::getVersion) // .max(Comparator.comparing(Integer::intValue)) // .get(); // }else{ // log.info("当前数据在进行修改但无相关记录;" + model.getId()); // } // // 添加日志 // versionsService.save(new Versions(null, JSON.toJSONString(model),model.getId(),++version,model.getCreateId(),new Date(), VersionsType.UPDATE.getName())); versionsService.saveInfo(model, VersionsType.UPDATE); boolean data = service.updateById(model); if (data) { String organization = model.getOrganization(); if (StringUtils.isNotBlank(model.getAdcd())) { organization = model.getAdcd().replaceFirst("000000", ""); } boolean update = abUdRService.lambdaUpdate() .set(AbUdR::getSort, model.getSort()) .set(AbUdR::getDictId, organization) .eq(AbUdR::getAdId, model.getId()) .update(); log.info("修改abUdR: " + update); User one = userService.lambdaQuery().eq(User::getAbId, model.getId()).one(); if (Objects.nonNull(one)) { // 没有就创建账号 if (StringUtils.isBlank(model.getPhone())) { if (StringUtils.isNotBlank(model.getTel())) { if (!one.getUsername().equals(model.getTel())) { one.setUsername(model.getTel()) .updateById(); } } else { if (!one.getUsername().equals(model.getName())) { one.setUsername(model.getName()) .updateById(); } } } else { if (!one.getUsername().equals(model.getPhone())) { one.setUsername(model.getPhone()) .updateById(); } } } else { // 没有就创建账号 if (StringUtils.isBlank(model.getPhone())) { if (StringUtils.isNotBlank(model.getTel())) { userService.register(model.getTel(), model.getId(), model.getRole()); } else { userService.register(model.getName(), model.getId(), model.getRole()); } } else { userService.register(model.getPhone(), model.getId(), model.getRole()); } } } return ResultJson.ok(data); } @ApiOperation(value = "修改权限") @PostMapping(value = "updateRole") public ResultJson updateRole(@RequestBody @Validated(Update.class) User model) { Integer loginId = Integer.valueOf(String.valueOf(StpUtil.getLoginId())); User user = userService.getRole(loginId); switch (Objects.requireNonNull(Role.getByName(user.getRole()))) { case R000: case R001: return ResultJson.error("权限不足"); case R099: break; default: return ResultJson.error("权限不足!!"); } AddressBook byId = service.getById(model.getAbId()); if (Objects.isNull(byId)) { return ResultJson.error("当前数据不存在"); } // List list = versionsService.lambdaQuery() // .eq(Versions::getAbId, model.getId()) // .list(); // Integer version = 0; // if (CollectionUtils.isNotEmpty(list)){ // version = list // .stream().map(Versions::getVersion) // .max(Comparator.comparing(Integer::intValue)) // .get(); // }else{ // log.info("当前数据在进行修改但无相关记录;" + model.getId()); // } // // 添加日志 // versionsService.save(new Versions(null, JSON.toJSONString(model),model.getId(),++version,model.getCreateId(),new Date(), VersionsType.UPDATE_ROLE.getName())); versionsService.saveInfo(byId, VersionsType.UPDATE_ROLE); // 只修改角色 boolean update = userService.lambdaUpdate().set(User::getRole, model.getRole()) .eq(User::getAbId, model.getAbId()) .update(); return ResultJson.ok(update); } @ApiOperation(value = "删除") @GetMapping(value = "del/{id}") @CacheEvict(value = ADDRESS_BOOK_REDIS_KEY, allEntries = true) public ResultJson delete(@PathVariable("id") Integer id) { Integer loginId = Integer.valueOf(String.valueOf(StpUtil.getLoginId())); User user = userService.getRole(loginId); switch (Objects.requireNonNull(Role.getByName(user.getRole()))) { case R000: case R001: return ResultJson.error("权限不足"); case R099: break; default: return ResultJson.error("权限不足!!"); } AddressBook model = service.getById(id); if (Objects.isNull(model)) { return ResultJson.error("当前数据不存在"); } // List list = versionsService.lambdaQuery() // .eq(Versions::getAbId, model.getId()) // .list(); // Integer version = 0; // if (CollectionUtils.isNotEmpty(list)){ // version = list // .stream().map(Versions::getVersion) // .max(Comparator.comparing(Integer::intValue)) // .get(); // }else{ // log.info("当前数据在进行修改但无相关记录;" + model.getId()); // } // // 添加日志 // versionsService.save(new Versions(null, JSON.toJSONString(model),model.getId(),++version,model.getCreateId(),new Date(), VersionsType.DEL.getName())); versionsService.saveInfo(model, VersionsType.DEL); return ResultJson.ok(service.removeById(id)); } @ApiOperation(value = "查询详情") @GetMapping(value = "get/{id}") public ResultJson get(@PathVariable("id") Integer id) { AddressBook byId = service.getById(id); if (byId != null) { if (StringUtils.isNotBlank(byId.getOrganization())) { Organization byId2 = organizationsService.getById(byId.getOrganization()); if (byId2 != null) { byId.setOname(byId2.getName()); } } } return ResultJson.ok(byId); } @ApiOperation(value = "查询用户详情") @GetMapping(value = "getByUser/{userId}") public ResultJson getByUser(@PathVariable("userId") Integer userId) { User byId = userService.getById(userId); if (Objects.isNull(byId)) { return ResultJson.error("该用户不存在"); } // return ResultJson.ok(JSON.parseObject(JSON.toJSONString(service.getById(byId.getAbId())).replaceAll("null",""))); AddressBook byId1 = service.getById(byId.getAbId()); if (byId1 != null) { if (StringUtils.isNotBlank(byId1.getOrganization())) { Organization byId2 = organizationsService.getById(byId1.getOrganization()); if (byId2 != null) { byId1.setOname(byId2.getName()); } } byId1.setRole(byId.getRole()); } return ResultJson.ok(byId1); } @ApiOperation(value = "通过行政区划下载excel") @GetMapping(value = "getExcel/{adnm}") public void getExcel(@PathVariable("adnm") @ApiParam(value = "名称,all: 查询全部") String adnm, HttpServletResponse response) { // 查询全部标识 if ("all".equals(adnm)) { adnm = ""; } List tree = adinfoService.tree(null, null); if (CollectionUtils.isEmpty(tree)) { throw new MyException("当前行政区划不存在"); } List addressBooks = service.lambdaQuery().isNotNull(AddressBook::getAdcd) .list(); if (CollectionUtils.isEmpty(addressBooks)) { throw new MyException("行政区划责任人为空"); } Map> abMap = addressBooks.stream().collect(Collectors.groupingBy(AddressBook::getAdcd, Collectors.toList())); // 行政区划责任人数据 List data = Lists.newArrayList(); String finalAdnm = adnm; for (int i = 0; i < tree.size(); i++) { AdcdTree t = tree.get(i); String adcd = t.getAdcd(); String cityAdnm = t.getAdnm(); List books = abMap.get(adcd); if (CollectionUtils.isEmpty(books)) { continue; } books.forEach(b -> { if (StringUtils.isNotBlank(finalAdnm)) { if (cityAdnm.equals(finalAdnm)) { data.add(new ExcelABVo(cityAdnm, cityAdnm, b.getName(), b.getPosition(), b.getPhone())); } } else { data.add(new ExcelABVo(cityAdnm, cityAdnm, b.getName(), b.getPosition(), b.getPhone())); } }); List children = t.getChildren(); if (CollectionUtils.isNotEmpty(children)) { for (int i1 = 1; i1 < children.size(); i1++) { AdcdTree tc = children.get(i1); String tcAdcd = tc.getAdcd(); String tcCityAdnm = tc.getAdnm(); List tcBooks = abMap.get(tcAdcd); if (CollectionUtils.isEmpty(tcBooks)) { continue; } tcBooks.forEach(b -> { if (StringUtils.isNotBlank(finalAdnm)) { if (cityAdnm.equals(finalAdnm) || tcCityAdnm.equals(finalAdnm)) { data.add(new ExcelABVo(cityAdnm, tcCityAdnm, b.getName(), b.getPosition(), b.getPhone())); } } else { data.add(new ExcelABVo(cityAdnm, tcCityAdnm, b.getName(), b.getPosition(), b.getPhone())); } }); } } }; if (CollectionUtils.isEmpty(data)) { throw new MyException("当前行政区划责任人为空"); } ExcelCommon.exportExcel(data, null, "防汛抗旱通讯录", ExcelABVo.class, "防汛抗旱通讯录_" + adnm + "_" + LocalDateTime.now() + ".xlsx", response); } }