package com.whdc.controller; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.whdc.exception.MyException; import com.whdc.model.dto.WarningResponderDto; import com.whdc.model.entity.WarningResponder; import com.whdc.model.vo.ExcelDataVo; import com.whdc.model.vo.ExcelOldDataVo; import com.whdc.service.IWarningResponderService; import com.whdc.utils.ExcelCommon; import com.whdc.utils.ResultJson; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static com.whdc.model.MyConstant.REDIS_KEY; /** * Description: * Created by XuSan on 2024/6/11. * * @author XuSan * @version 1.0 */ @Slf4j @Api(tags = "web通讯录 - Controller") @RestController @RequestMapping({"/addressbookOld", "/warningResponder"}) @Transactional public class WarningResponderController { @Autowired private IWarningResponderService service; public static final String ADDRESS_BOOK_REDIS_KEY = REDIS_KEY + "addressbookOld"; public static final String ADDRESS_BOOK_TEMP_REDIS_KEY = ADDRESS_BOOK_REDIS_KEY + "temp:"; @Autowired private RedisTemplate redisTemplate; @ApiOperation(value = "查询所有联系人") @PostMapping(value = "find") @Cacheable(value = ADDRESS_BOOK_REDIS_KEY, key = "#root.method.name+':'+#dto.toString()") public ResultJson> find(@RequestBody WarningResponderDto dto) { LambdaQueryChainWrapper query = service.lambdaQuery(); String name = dto.getName(); if (StringUtils.isNotBlank(name)){ query.like(WarningResponder::getName, name); } String phone = dto.getPhone(); if (StringUtils.isNotBlank(phone)){ query.like(WarningResponder::getPhone, phone); } List data = query.list(); data = data.stream().map(WarningResponder::decryptPhone).collect(Collectors.toList()); return ResultJson.ok(data); } @ApiOperation(value = "下载excel") @GetMapping(value = "downloadExcel") public void downloadExcel( HttpServletResponse response) { List list = service.lambdaQuery() .list(); for (WarningResponder o : list) { o.decryptPhone(); } list.stream().forEach(vo -> vo.setLevelLabel(dictMappingReverse(vo.getLevel()))); ExcelCommon.exportExcel(list, null, "防汛抗旱通讯录", WarningResponder.class, "湖北省防汛抗旱通信录模版" + LocalDateTime.now() + ".xlsx", response); } @ApiOperation(value = "解析文件数据") @PostMapping(value = "getExcelData") public ResultJson getExcelData(MultipartFile file) { List appends = ExcelCommon.importExcel(file, 0, 1, WarningResponder.class); ExcelOldDataVo excelDataVo = new ExcelOldDataVo(); if (CollectionUtils.isNotEmpty(appends)){ appends = appends.stream().filter(vo -> StringUtils.isNotBlank(vo.getName()) && StringUtils.isNotBlank(vo.getCtnm()) && StringUtils.isNotBlank(vo.getCnnm()) ).collect(Collectors.toList()); String key = UUID.randomUUID().toString().replaceAll("-", ""); redisTemplate.opsForValue().set(ADDRESS_BOOK_TEMP_REDIS_KEY + key, JSON.toJSONString(appends), 30, TimeUnit.MINUTES); excelDataVo.setKey(key); excelDataVo.setList(appends); } return ResultJson.ok(excelDataVo); } @ApiOperation(value = "联系人导入") @PostMapping(value = "uploadExcel") @CacheEvict(value = ADDRESS_BOOK_REDIS_KEY, allEntries = true) public ResultJson uploadExcel(@RequestBody ExcelDataVo data) { String s = redisTemplate.opsForValue().get(ADDRESS_BOOK_TEMP_REDIS_KEY + data.getKey()); if (StringUtils.isBlank(s)){ throw new MyException("文件已过期"); } List appends = JSON.parseArray(s, WarningResponder.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("联系人重复"); // } boolean r1 = service.remove(Wrappers.emptyWrapper()); if (!r1) { throw new MyException("通讯录数据删除失败"); } // 新增创建时间 Date date = new Date(); appends = appends.stream().map(vo -> vo.setCreateTime(date).setLevel(dictMapping(vo.getLevelLabel())).encryptPhone()) .collect(Collectors.toList()); if (!service.saveBatch(appends)) { throw new MyException("表格数据新增失败"); } return ResultJson.ok("数据新增成功"); } private Integer dictMapping(String label) { if (label == null) { return null; } switch (label) { case "分管副市(县)长": return 1; case "常务副市(县)长": return 2; case "市(县)长": return 3; case "书记": return 4; default: return null; } } private String dictMappingReverse(Integer level) { if (level == null) { return null; } switch (level) { case 1: return "分管副市(县)长"; case 2: return "常务副市(县)长"; case 3: return "市(县)长"; case 4: return "书记"; default: return null; } } }