新增市县通讯录导入导出接口

master
徐杰盟 2024-06-04 17:56:05 +08:00
parent 31e95b7582
commit ffc58cb901
4 changed files with 140 additions and 34 deletions

View File

@ -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<Versions> list = versionsService.lambdaQuery()
// .eq(Versions::getAbId, model.getId())
// .list();
@ -552,7 +550,9 @@ public class AddressBookController {
throw new MyException("当前行政区划不存在");
}
List<AddressBook> addressBooks = service.lambdaQuery().isNotNull(AddressBook::getAdcd)
// List<AddressBook> addressBooks = service.lambdaQuery().isNotNull(AddressBook::getAdcd)
// .list();
List<AddressBook> 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<AddressBook> 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<AddressBook> 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<AdcdTree> 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<ExcelABVo> appends = ExcelCommon.importExcel(file, 0, 1, ExcelABVo.class);
@ -627,11 +626,112 @@ public class AddressBookController {
throw new MyException("文件为空");
}
Set<String> set = appends.stream().map(vo -> vo.getName() + "_" + vo.getPhone()).collect(Collectors.toSet());
if (set.size() != appends.size()){
throw new MyException("联系人重复");
}
List<AdcdTree> tree = adinfoService.tree(TREE_ALL, TREE_ALL);
appends.forEach(vo ->{
List<AddressBook> 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<User> users = Lists.newArrayList();
List<AbUdR> abUdRs = Lists.newArrayList();
AtomicReference<Integer> 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<AdcdTree> tree, String city, String county) {
for (AdcdTree a : tree) {
if (a.getAdnm().equals(city)) {
List<AdcdTree> 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<AddressBook> addressBooks = service.lambdaQuery().likeLeft(AddressBook::getAdcd, "000000000")
.list();
boolean r1 = service.removeBatchByIds(addressBooks);
if (!r1) {
throw new MyException("通讯录数据删除失败");
}
List<Integer> abIds = addressBooks.stream().map(AddressBook::getId).collect(Collectors.toList());
LambdaQueryWrapper<AbUdR> aurQueryWrapper = new LambdaQueryWrapper<>();
aurQueryWrapper.in(AbUdR::getAdId, abIds);
boolean remove1 = abUdRService.remove(aurQueryWrapper);
if (!remove1) {
throw new MyException("关联数据删除失败");
}
LambdaQueryWrapper<User> userQueryWrapper = new LambdaQueryWrapper<>();
userQueryWrapper.in(User::getAbId, abIds);
boolean remove2 = userService.remove(userQueryWrapper);
if (!remove2) {
throw new MyException("用户账号删除失败");
}
}
}

View File

@ -58,7 +58,7 @@ public class AdinfoServiceImpl extends ServiceImpl<AdinfoMapper, Adinfo> 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<AdcdTree> tree(String adcd, String adnm) {
if (TREE_ALL.equals(adcd)){

View File

@ -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;
/**
* <p>
*
@ -48,17 +50,21 @@ public class OrganizationServiceImpl extends ServiceImpl<OrganizationMapper, Org
@Override
public List<Organization> findByUserId(String userId,String adcd) {
if (StringUtils.isBlank(adcd)){
adcd = TREE_ALL;
}
List<Organization> organizations = baseMapper.findByUserId(userId);
List<UnitDict> list = unitDictService.findByUserId(userId);
Map<Integer, List<UnitDict>> collect = list.stream().collect(Collectors.groupingBy(UnitDict::getOId));
String finalAdcd = adcd;
organizations.forEach(organization -> {
List<UnitDict> 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));
}
});

View File

@ -5,7 +5,7 @@
<!-- AND AB.ADCD ${dto.v} #{dto.adcd}-->
<select id="page" resultType="com.whdc.model.vo.AddressBookVo">
SELECT
AB.*,F.SORT FSORT,F.ID FCID,U.ROLE,F.TYPE FTYPE,IF(O.NAME IS NULL,UD.NAME,O.NAME) ONAME,A.ADNM
AB.*,F.SORT FSORT,F.ID FCID,U.ROLE,F.TYPE FTYPE,IF(UD.NAME IS NOT NULL,UD.NAME,O.NAME) ONAME,A.ADNM
FROM
ADDRESS_BOOK AB
LEFT JOIN FC F ON F.AB_ID = AB.ID AND F.USER_ID = #{dto.userId}
@ -68,7 +68,7 @@
<select id="getVoById" resultType="com.whdc.model.vo.AddressBookVo">
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 @@
<select id="getVoByOpenid" resultType="com.whdc.model.vo.AddressBookVo">
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