From ffc58cb9015c0724569cf822c094e9df27719268 Mon Sep 17 00:00:00 2001 From: xjm Date: Tue, 4 Jun 2024 17:56:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=B8=82=E5=8E=BF=E9=80=9A?= =?UTF-8?q?=E8=AE=AF=E5=BD=95=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AddressBookController.java | 156 ++++++++++++++---- .../whdc/service/impl/AdinfoServiceImpl.java | 2 +- .../service/impl/OrganizationServiceImpl.java | 10 +- .../resources/mapper/AddressBookMapper.xml | 6 +- 4 files changed, 140 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/whdc/controller/AddressBookController.java b/src/main/java/com/whdc/controller/AddressBookController.java index cb5a48d..139be07 100644 --- a/src/main/java/com/whdc/controller/AddressBookController.java +++ b/src/main/java/com/whdc/controller/AddressBookController.java @@ -2,6 +2,7 @@ package com.whdc.controller; import cn.dev33.satoken.stp.StpUtil; +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; @@ -30,15 +31,15 @@ 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.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import static com.whdc.model.MyConstant.REDIS_KEY; @@ -295,7 +296,7 @@ public class AddressBookController { organization = model.getAdcd().replaceFirst("000000", ""); } Integer sort = model.getSort(); - if (0 != sort){ + if (0 != sort) { boolean update = abUdRService.lambdaUpdate() .set(AbUdR::getSort, sort) .set(AbUdR::getDictId, organization) @@ -405,7 +406,6 @@ public class AddressBookController { } - @ApiOperation(value = "设置白名单") @PostMapping(value = "setWhitelists") public ResultJson setWhitelists(@RequestBody @Validated(Update.class) AddressBook model) { @@ -437,7 +437,7 @@ public class AddressBookController { .set(AddressBook::getIsPass, model.getIsPass()) .eq(AddressBook::getId, model.getId()) .update(); - if (!update){ + if (!update) { throw new MyException("操作数据库失败"); } return ResultJson.ok(update); @@ -458,7 +458,7 @@ public class AddressBookController { } User delUser = userService.lambdaQuery() - .eq(User::getAbId,model.getId()) + .eq(User::getAbId, model.getId()) .one(); switch (Objects.requireNonNull(Role.getByName(user.getRole()))) { @@ -474,8 +474,6 @@ public class AddressBookController { } - - // List list = versionsService.lambdaQuery() // .eq(Versions::getAbId, model.getId()) // .list(); @@ -552,7 +550,9 @@ public class AddressBookController { throw new MyException("当前行政区划不存在"); } - List addressBooks = service.lambdaQuery().isNotNull(AddressBook::getAdcd) +// List addressBooks = service.lambdaQuery().isNotNull(AddressBook::getAdcd) +// .list(); + List addressBooks = service.lambdaQuery().likeLeft(AddressBook::getAdcd, "000000000") .list(); if (CollectionUtils.isEmpty(addressBooks)) { @@ -567,21 +567,21 @@ public class AddressBookController { String finalAdnm = adnm; for (int i = 0; i < tree.size(); i++) { AdcdTree t = tree.get(i); - String adcd = t.getAdcd(); +// 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 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)) { @@ -606,7 +606,6 @@ public class AddressBookController { } } - ; if (CollectionUtils.isEmpty(data)) { throw new MyException("当前行政区划责任人为空"); @@ -618,8 +617,8 @@ public class AddressBookController { } @ApiOperation(value = "行政区划联系人导入") - @GetMapping(value = "uploadExcel") - public void uploadExcel(MultipartFile file) { + @PostMapping(value = "uploadExcel") + public ResultJson uploadExcel(MultipartFile file) { List appends = ExcelCommon.importExcel(file, 0, 1, ExcelABVo.class); @@ -627,11 +626,112 @@ public class AddressBookController { 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); - appends.forEach(vo ->{ + 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("用户账号删除失败"); + } + } } diff --git a/src/main/java/com/whdc/service/impl/AdinfoServiceImpl.java b/src/main/java/com/whdc/service/impl/AdinfoServiceImpl.java index d9f1d4d..00f1502 100644 --- a/src/main/java/com/whdc/service/impl/AdinfoServiceImpl.java +++ b/src/main/java/com/whdc/service/impl/AdinfoServiceImpl.java @@ -58,7 +58,7 @@ public class AdinfoServiceImpl extends ServiceImpl impleme * @param adcd * @return */ - @Cacheable(cacheNames = {ADINFO_REDIS_KEY}, key = "getMethodName()", condition = "#adcd + #adnm", unless = "false") +// @Cacheable(cacheNames = {ADINFO_REDIS_KEY}, key = "getMethodName()", condition = "#adcd + #adnm", unless = "false") public List tree(String adcd, String adnm) { if (TREE_ALL.equals(adcd)){ diff --git a/src/main/java/com/whdc/service/impl/OrganizationServiceImpl.java b/src/main/java/com/whdc/service/impl/OrganizationServiceImpl.java index 0d05a69..d632719 100644 --- a/src/main/java/com/whdc/service/impl/OrganizationServiceImpl.java +++ b/src/main/java/com/whdc/service/impl/OrganizationServiceImpl.java @@ -6,11 +6,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.whdc.mapper.OrganizationMapper; import com.whdc.model.entity.Organization; import com.whdc.model.entity.UnitDict; -import com.whdc.model.vo.AdcdTree; import com.whdc.service.IAdinfoService; import com.whdc.service.IOrganizationService; import com.whdc.service.IUnitDictService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -18,6 +18,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import static com.whdc.service.impl.AdinfoServiceImpl.TREE_ALL; + /** *

* 服务实现类 @@ -48,17 +50,21 @@ public class OrganizationServiceImpl extends ServiceImpl findByUserId(String userId,String adcd) { + if (StringUtils.isBlank(adcd)){ + adcd = TREE_ALL; + } List organizations = baseMapper.findByUserId(userId); List list = unitDictService.findByUserId(userId); Map> collect = list.stream().collect(Collectors.groupingBy(UnitDict::getOId)); + String finalAdcd = adcd; organizations.forEach(organization -> { List unitDicts = collect.get(organization.getId()); organization.setUnitDicts(unitDicts); String name = organization.getName(); if (name.contains("市") && name.contains("县")){ - organization.setAdinfoList(adinfoService.tree(adcd, adcd)); + organization.setAdinfoList(adinfoService.tree(finalAdcd, finalAdcd)); } }); diff --git a/src/main/resources/mapper/AddressBookMapper.xml b/src/main/resources/mapper/AddressBookMapper.xml index b62ef67..9286bdf 100644 --- a/src/main/resources/mapper/AddressBookMapper.xml +++ b/src/main/resources/mapper/AddressBookMapper.xml @@ -5,7 +5,7 @@ SELECT - AB.*,IF(O.NAME IS NULL,UD.NAME,O.NAME) ONAME,A.ADNM + AB.*,IF(UD.NAME IS NOT NULL,UD.NAME,O.NAME) ONAME,A.ADNM FROM ADDRESS_BOOK AB LEFT JOIN ORGANIZATION O ON AB.ORGANIZATION = O.ID @@ -81,7 +81,7 @@