package com.whdc.controller; import cn.dev33.satoken.stp.StpUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.whdc.exception.MyException; import com.whdc.model.dto.AddressBootDto; import com.whdc.model.entity.AbUdR; import com.whdc.model.entity.AddressBook; import com.whdc.model.entity.Organization; import com.whdc.model.entity.User; 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.model.vo.ExcelDataVo; 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.data.redis.core.RedisTemplate; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.DigestUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import static com.whdc.model.MyConstant.REDIS_KEY; import static com.whdc.service.impl.AdinfoServiceImpl.TREE_ALL; /** * @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"; public static final String ADDRESS_BOOK_TEMP_REDIS_KEY = ADDRESS_BOOK_REDIS_KEY + "temp:"; @Autowired private IAddressBookService service; @Autowired private IUserService userService; @Autowired private IAdinfoService adinfoService; @Autowired private IVersionsService versionsService; @Autowired private IOrganizationService organizationsService; @Autowired private IAbUdRService abUdRService; @Autowired private RedisTemplate redisTemplate; // @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: if (Integer.parseInt(model.getRole()) > Integer.parseInt(user.getRole())) { return ResultJson.error("权限不足!"); } 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("该手机号已存在"); } model.setId(null); boolean save = service.save(model); // 添加日志 String adcd = model.getAdcd(); versionsService.saveInfo(model, VersionsType.ADD, adcd); if (save) { redisTemplate.delete(ADDRESS_BOOK_REDIS_KEY + "*"); // 没有手机号用名字注册 //"省防指".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(adcd)) { List list = abUdRService.lambdaQuery().eq(AbUdR::getDictId, model.getAdcd()) .select(AbUdR::getSort) .orderByDesc(AbUdR::getSort) .list(); Integer sort = 0; if (CollectionUtils.isNotEmpty(list)) { AbUdR abUdR = list.get(0); sort = abUdR.getSort() + 1; } abUdRService.save(new AbUdR(model.getId(), adcd.replaceFirst("000000", ""), ++sort, model.getType())); } else { List list = abUdRService.lambdaQuery().eq(AbUdR::getDictId, model.getOrganization()) .select(AbUdR::getSort) .orderByDesc(AbUdR::getSort) .list(); Integer sort = 0; if (CollectionUtils.isNotEmpty(list)) { AbUdR abUdR = list.get(0); sort = abUdR.getSort() + 1; } // 添加关联关系` abUdRService.save(new AbUdR(model.getId(), model.getOrganization(), sort, 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: if (Integer.parseInt(model.getRole()) > Integer.parseInt(user.getRole())) { return ResultJson.error("权限不足!"); } 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())); String adcd = model.getAdcd(); if (StringUtils.isBlank(adcd)) { adcd = byId.getAdcd(); } model.setRole(user.getRole()); versionsService.saveInfo(model, VersionsType.UPDATE, adcd); boolean data = service.updateById(model); if (data) { redisTemplate.delete(ADDRESS_BOOK_REDIS_KEY + "*"); String organization = model.getOrganization(); if (StringUtils.isNotBlank(model.getAdcd())) { organization = model.getAdcd().replaceFirst("000000", ""); } Integer sort = model.getSort(); if (0 != sort) { boolean update = abUdRService.lambdaUpdate() .set(AbUdR::getSort, sort) .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) AddressBook 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: case R099: { if (Integer.parseInt(model.getRole()) > Integer.parseInt(user.getRole())) { return ResultJson.error("权限不足"); } break; } default: return ResultJson.error("权限不足!!"); } AddressBook byId = service.getById(model.getId()); 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())); byId.setOname(model.getOname()); byId.setRole(model.getRole()); try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } versionsService.saveInfo(byId, VersionsType.UPDATE_ROLE, byId.getAdcd()); // 只修改角色 boolean update = userService.lambdaUpdate() .set(User::getRole, model.getRole()) .eq(User::getAbId, model.getId()) .update(); return ResultJson.ok(update); } @ApiOperation(value = "设置白名单") @PostMapping(value = "setWhitelists") public ResultJson setWhitelists(@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: case R001: return ResultJson.error("权限不足"); case R099: { break; } default: return ResultJson.error("权限不足!!"); } AddressBook byId = service.getById(model.getId()); if (Objects.isNull(byId)) { return ResultJson.error("当前数据不存在"); } byId.setIsPass(model.getIsPass()); versionsService.saveInfo(model, VersionsType.WHITE, byId.getAdcd()); boolean update = service.lambdaUpdate() .set(AddressBook::getIsPass, model.getIsPass()) .eq(AddressBook::getId, model.getId()) .update(); if (!update) { throw new MyException("操作数据库失败"); } 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); AddressBook model = service.getById(id); if (Objects.isNull(model)) { return ResultJson.error("当前数据不存在"); } User delUser = userService.lambdaQuery() .eq(User::getAbId, model.getId()) .one(); switch (Objects.requireNonNull(Role.getByName(user.getRole()))) { case R000: case R001: case R099: if (Integer.parseInt(delUser.getRole()) > Integer.parseInt(user.getRole())) { return ResultJson.error("权限不足"); } break; default: 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, model.getAdcd()); 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 = "查询行政区划联系人") @GetMapping(value = "getAdcdUser") public ResultJson> getAdcdUser() { List tree = adinfoService.tree(TREE_ALL, TREE_ALL); if (CollectionUtils.isEmpty(tree)) { throw new MyException("当前行政区划不存在"); } // List addressBooks = service.lambdaQuery().isNotNull(AddressBook::getAdcd) // .list(); List addressBooks = service.lambdaQuery().likeLeft(AddressBook::getAdcd, "000000000") .list(); if (CollectionUtils.isEmpty(addressBooks)) { throw new MyException("行政区划责任人为空"); } Map> abMap = addressBooks.stream().collect(Collectors.groupingBy(AddressBook::getAdcd, Collectors.toList())); // 行政区划责任人数据 List data = Lists.newArrayList(); 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 -> { data.add(new ExcelABVo(cityAdnm, tcCityAdnm, b.getName(), b.getPosition(), b.getPhone())); }); } } } if (CollectionUtils.isEmpty(data)) { throw new MyException("当前行政区划责任人为空"); } return ResultJson.ok(data); } @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(TREE_ALL, TREE_ALL); if (CollectionUtils.isEmpty(tree)) { throw new MyException("当前行政区划不存在"); } // List addressBooks = service.lambdaQuery().isNotNull(AddressBook::getAdcd) // .list(); List addressBooks = service.lambdaQuery().likeLeft(AddressBook::getAdcd, "000000000") .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, "防汛抗旱通讯录_" + LocalDateTime.now() + ".xlsx", response); } @ApiOperation(value = "解析文件数据") @PostMapping(value = "getExcelData") public ResultJson getExcelData(MultipartFile file) { List appends = ExcelCommon.importExcel(file, 0, 1, ExcelABVo.class); ExcelDataVo excelDataVo = new ExcelDataVo(); excelDataVo.setList(appends); if (CollectionUtils.isNotEmpty(appends)){ String key = UUID.randomUUID().toString().replaceAll("-", ""); redisTemplate.opsForValue().set(ADDRESS_BOOK_TEMP_REDIS_KEY + key, JSON.toJSONString(appends), 30, TimeUnit.MINUTES); excelDataVo.setKey(key); } return ResultJson.ok(excelDataVo); } @ApiOperation(value = "行政区划联系人导入") @PostMapping(value = "uploadExcel") public ResultJson uploadExcel(@RequestBody ExcelDataVo data) { // List appends = ExcelCommon.importExcel(file, 0, 1, ExcelABVo.class); String s = redisTemplate.opsForValue().get(ADDRESS_BOOK_TEMP_REDIS_KEY + data.getKey()); if (StringUtils.isBlank(s)){ throw new MyException("文件已过期"); } List appends = JSON.parseArray(s, ExcelABVo.class); if (CollectionUtils.isEmpty(appends)) { throw new MyException("文件为空"); } Set set = appends.stream().map(vo -> vo.getName() + "_" + vo.getPhone()).collect(Collectors.toSet()); if (set.size() != appends.size()){ throw new MyException("联系人重复"); } List tree = adinfoService.tree(TREE_ALL, TREE_ALL); List abs = Lists.newArrayList(); appends.forEach(vo -> { String phone = vo.getPhone(); String name = vo.getName(); String position = vo.getPosition(); String city = vo.getCity(); String county = vo.getCounty(); AddressBook e = new AddressBook(); e.setName(name) .setPhone(phone) .setAdcd(getAdcd(tree, city, county)) .setPosition(position); abs.add(e); }); // 原数据删除 removeAdcd(); if (!service.saveBatch(abs)) { throw new MyException("表格数据新增失败"); } List users = Lists.newArrayList(); List abUdRs = Lists.newArrayList(); AtomicReference sort = new AtomicReference<>(0); // 新增关联数据 abs.forEach(a -> { String phone = a.getPhone(); if (StringUtils.isNotBlank(phone)){ User user = new User(); String salt = UUID.randomUUID().toString().replaceAll("-", ""); user .setUsername(phone) .setAbId(a.getId()) .setRole("1") .setSalt(salt) .setPassword(DigestUtils.md5DigestAsHex((salt + "Fxkh@123456").getBytes())); users.add(user); } AbUdR au = new AbUdR(); Integer i = sort.get() + 1; au.setType("1") .setAdId(a.getId()) .setDictId(a.getAdcd().replaceFirst("000000", "")) .setSort(i); abUdRs.add(au); sort.set(i); }); if (!userService.saveBatch(users)) { throw new MyException("用户数据新增失败"); } if (!abUdRService.saveBatch(abUdRs)) { throw new MyException("关联数据新增失败"); } return ResultJson.ok("数据新增成功"); } private String getAdcd(List tree, String city, String county) { for (AdcdTree a : tree) { if (a.getAdnm().equals(city)) { List children = a.getChildren(); if (a.getAdnm().equals(county)) { county = "市本级"; } for (AdcdTree b : children) { if (b.getAdnm().equals(county)) { return b.getAdcd(); } } } } throw new MyException("当前市行政区划匹配失败"); } private void removeAdcd() { List addressBooks = service.lambdaQuery().likeLeft(AddressBook::getAdcd, "000000000") .list(); boolean r1 = service.removeBatchByIds(addressBooks); if (!r1) { throw new MyException("通讯录数据删除失败"); } List abIds = addressBooks.stream().map(AddressBook::getId).collect(Collectors.toList()); LambdaQueryWrapper aurQueryWrapper = new LambdaQueryWrapper<>(); aurQueryWrapper.in(AbUdR::getAdId, abIds); boolean remove1 = abUdRService.remove(aurQueryWrapper); if (!remove1) { throw new MyException("关联数据删除失败"); } LambdaQueryWrapper userQueryWrapper = new LambdaQueryWrapper<>(); userQueryWrapper.in(User::getAbId, abIds); boolean remove2 = userService.remove(userQueryWrapper); if (!remove2) { throw new MyException("用户账号删除失败"); } } }