package com.xiaopeng.operation.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.hutool.json.JSONObject; import com.xiaopeng.api.model.account.SysUser; import com.xiaopeng.api.model.operation.XpWhitelist; import com.xiaopeng.api.model.operation.XpWhitelistOperlog; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.utils.WebUtils; import com.xiaopeng.common.core.utils.bean.BeanUtils; import com.xiaopeng.common.core.utils.ip.IpUtils; import com.xiaopeng.common.core.web.domain.AjaxResult; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.log.annotation.Log; import com.xiaopeng.common.log.enums.BusinessType; import com.xiaopeng.common.security.service.TokenService; import com.xiaopeng.operation.dto.WhitelistAddDto; import com.xiaopeng.operation.dto.WhitelistEditDto; import com.xiaopeng.operation.exportExcle.XpWhitelistExportExcel; import com.xiaopeng.operation.importExcel.WhitelistImportExcel; import com.xiaopeng.operation.query.WhitelistPageListQuery; import com.xiaopeng.operation.service.IXpWhitelistOperlogService; import com.xiaopeng.operation.service.IXpWhitelistService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 白名单管理 前端控制器 *

* * @author mitao * @since 2026-02-03 */ @RequestMapping("") @RestController @Api(tags = "白名单管理") @Slf4j public class XpWhitelistController { @Resource private IXpWhitelistService xpWhitelistService; @Resource private IXpWhitelistOperlogService xpWhitelistOperlogService; @Resource private TokenService tokenService; /** * 获取所有白名单手机号 * @return */ @PostMapping("/api/v1/whitelist/inner/getAllWhiteList") public R> getAllWhiteList(){ return R.ok(xpWhitelistService.getAllWhiteList()); } @ApiOperation(value = "白名单管理分页列表", response = XpWhitelist.class) @PostMapping("/api/v1/whitelist/pageList") public R> pageList(@RequestBody WhitelistPageListQuery query) { PageInfo pageList = xpWhitelistService.pageList(query); return R.ok(pageList); } /** * 新增白名单 */ @PostMapping("/api/v1/whitelist/add") @ResponseBody @ApiOperation(value = "新增白名单") @Transactional public R add(@Validated @RequestBody WhitelistAddDto dto) { if (!StringUtils.hasLength(dto.getAccount())) { return R.fail("请输入账号"); } SysUser sysUser = tokenService.getLoginUser().getSysUser(); return xpWhitelistService.addWhitelist(dto, sysUser); } /** * 编辑白名单 */ @PostMapping("/api/v1/whitelist/edit") @ResponseBody @ApiOperation(value = "编辑白名单") @Transactional public R edit(@Validated @RequestBody WhitelistEditDto dto) { if (!StringUtils.hasLength(dto.getAccount())) { return R.fail("请输入账号"); } SysUser sysUser = tokenService.getLoginUser().getSysUser(); XpWhitelist xpWhitelist = new XpWhitelist(); BeanUtils.copyProperties(dto, xpWhitelist); xpWhitelist.setUpdateBy(tokenService.getLoginUser().getSysUser().getNickName()); return xpWhitelistService.editWhitelist(xpWhitelist, sysUser); } /** * 冻结解冻 */ @GetMapping("/api/v1/whitelist/freezeUnfreeze") @ResponseBody @ApiOperation(value = "冻结解冻") @Transactional public R freezeUnfreeze(@RequestParam("id") Long id) { SysUser sysUser = tokenService.getLoginUser().getSysUser(); return xpWhitelistService.freezeUnfreeze(id, sysUser); } /** * 批量删除 */ @GetMapping("/api/v1/whitelist/deleteByIds") @ResponseBody @ApiOperation(value = "批量删除") public R deleteByIds(String ids) { SysUser sysUser = tokenService.getLoginUser().getSysUser(); List whiteIds = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList()); return xpWhitelistService.deleteByIds(whiteIds, sysUser); } /** * 批量冻结 */ @GetMapping("/api/v1/whitelist/freezeByIds") @ResponseBody @ApiOperation(value = "批量冻结") public R freezeByIds(String ids) { SysUser sysUser = tokenService.getLoginUser().getSysUser(); List whiteIds = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList()); return xpWhitelistService.freezeByIds(whiteIds, sysUser); } @ApiOperation(value = "白名单导入模板下载") @GetMapping("/api/v1/whitelist/import-template") public void importTemplate() { List whitelistImportExcels = new ArrayList<>(); WhitelistImportExcel whitelistImportExcel = new WhitelistImportExcel(); whitelistImportExcels.add(whitelistImportExcel); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), WhitelistImportExcel.class, whitelistImportExcels); HttpServletResponse response = WebUtils.response(); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("白名单导入模板.xls", "utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setHeader("content-Type", "application/vnd.ms-excel"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } @Log(title = "白名单导入", businessType = BusinessType.IMPORT) @ApiOperation(value = "白名单导入") @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) @PostMapping("/base/v1/whitelist/importExcel") public AjaxResult importExcel(@RequestPart("file") MultipartFile file) { ImportParams params = new ImportParams(); // params.setTitleRows(1); // 标题行数 params.setHeadRows(1); //表头行数 InputStream inputStream = null; // List failedData = new ArrayList<>(); List whitelistImportExcels; try { inputStream = file.getInputStream(); whitelistImportExcels = ExcelImportUtil.importExcel(inputStream, WhitelistImportExcel.class, params); } catch (Exception e) { e.printStackTrace(); log.error("白名单导入失败:{}", e.getMessage()); throw new ServiceException("白名单导入失败!"); } finally { try { inputStream.close(); } catch (IOException e) { throw new ServiceException(e.getMessage()); } } if (CollectionUtils.isEmpty(whitelistImportExcels)) { throw new ServiceException("白名单数据为空!"); } // 校验手机号白名单是否有重复的 long count = whitelistImportExcels.stream().map(WhitelistImportExcel::getAccount) .distinct().count(); if (count != whitelistImportExcels.size()) { return AjaxResult.error("白名单手机号存在重复!"); } Map codeMap = xpWhitelistService.list().stream() .collect(Collectors.toMap(XpWhitelist::getAccount, XpWhitelist::getId)); JSONObject result = new JSONObject(); List addList = new ArrayList<>(); for (WhitelistImportExcel whitelistImportExcel : whitelistImportExcels) { Long id = codeMap.get(whitelistImportExcel.getAccount()); if (id != null) { result.append("白名单:[", whitelistImportExcel.getAccount() + "]已存在"); } XpWhitelist xpWhitelist = new XpWhitelist(); xpWhitelist.setNickName(whitelistImportExcel.getNickName()); xpWhitelist.setAccount(whitelistImportExcel.getAccount()); xpWhitelist.setStatus(true); xpWhitelist.setIsPriorityDispatch(true); xpWhitelist.setWhitelistSource(1); xpWhitelist.setCreateBy(tokenService.getLoginUser().getSysUser().getNickName()); addList.add(xpWhitelist); } if (!result.isEmpty()) { return AjaxResult.success(result.toString()); } xpWhitelistService.saveBatch(addList); SysUser sysUser = tokenService.getLoginUser().getSysUser(); StringBuilder operationContent = new StringBuilder("共计导入"+addList.size()+"条数据"); XpWhitelistOperlog xpWhitelistOperlog = new XpWhitelistOperlog(); xpWhitelistOperlog.setOperationName(sysUser.getNickName()); xpWhitelistOperlog.setOperationAccount(sysUser.getPhoneNumber()); xpWhitelistOperlog.setOperationType(4); xpWhitelistOperlog.setOperationIp(IpUtils.getIpAddr()); xpWhitelistOperlog.setOperationAccountId(sysUser.getId()); xpWhitelistOperlog.setOperationContent(operationContent.toString()); xpWhitelistOperlog.setCreateBy(tokenService.getLoginUser().getSysUser().getNickName()); xpWhitelistOperlogService.save(xpWhitelistOperlog); return AjaxResult.success(); } @ApiOperation(value = "白名单导出") @PostMapping(value = "/api/v1/whitelist/exportExcel") public void exportExcel(@RequestBody WhitelistPageListQuery query) { List exportList = xpWhitelistService.exportList(query); List xpWhitelistExportExcels = new ArrayList<>(); for (XpWhitelist xpWhitelist : exportList) { XpWhitelistExportExcel xpWhitelistExportExcel = new XpWhitelistExportExcel(); xpWhitelistExportExcel.setId(xpWhitelist.getId()); xpWhitelistExportExcel.setAccount(xpWhitelist.getAccount()); xpWhitelistExportExcel.setNickName(xpWhitelist.getNickName()); xpWhitelistExportExcel.setStatus(xpWhitelist.getStatus()); xpWhitelistExportExcel.setIsPriorityDispatch(xpWhitelist.getIsPriorityDispatch()); xpWhitelistExportExcel.setCreateBy(xpWhitelist.getCreateBy()); LocalDateTime createTime = xpWhitelist.getCreateTime(); // 将LocalDateTime转化为yyyy-MM-dd HH:mm:ss格式字符串 xpWhitelistExportExcel.setCreateTime(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); xpWhitelistExportExcels.add(xpWhitelistExportExcel); } SysUser sysUser = tokenService.getLoginUser().getSysUser(); StringBuilder operationContent = new StringBuilder("共计导出"+exportList.size()+"条数据"); XpWhitelistOperlog xpWhitelistOperlog = new XpWhitelistOperlog(); xpWhitelistOperlog.setOperationName(sysUser.getNickName()); xpWhitelistOperlog.setOperationAccount(sysUser.getPhoneNumber()); xpWhitelistOperlog.setOperationType(5); xpWhitelistOperlog.setOperationIp(IpUtils.getIpAddr()); xpWhitelistOperlog.setOperationAccountId(sysUser.getId()); xpWhitelistOperlog.setOperationContent(operationContent.toString()); xpWhitelistOperlogService.save(xpWhitelistOperlog); //1.获取excel模板 Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), XpWhitelistExportExcel.class, xpWhitelistExportExcels); HttpServletResponse response = WebUtils.response(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("白名单列表.xls", "utf-8"); response.setHeader("Content-dispodition", "attachment;filename=" + fileName); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }