【小西】优化若依导出功能,若依继承导出

前言

现需求是在原有的导出功能基础上,新增两列。
在这里插入图片描述

实现

因为新增两列不是数据库表中字段。因此,需要需要建立一个VO类。
原本想用若依继承导出,如下所示:

@Data
public class ThemeActivityUserVO  extends ThemeActivityUser {private static final long serialVersionUID = 1L;private ThemeActivityUser themeActivityUser;/*** 可以领取的礼品名称*/@Excel(name = "可以领取的礼品名称", type = Excel.Type.EXPORT)private String giftNames;/*** 可以领取的礼品总数量*/@Excel(name = "可以领取的礼品总数量", type = Excel.Type.EXPORT)int  giftNumber;}

但想起来Java中不能继承祖父类的私有属性,所以就把VO改成如所示:

ThemeActivityUserVO

/*** @Description: 活动用户群体对象VO*/
@Data
public class ThemeActivityUserVO  implements Serializable {private static final long serialVersionUID = 1L;@Excel(name = "领取单号", type = Excel.Type.EXPORT)private String id;/*** 活动ID*/@Excel(name = "活动ID", type = Excel.Type.EXPORT)private String activityId;/*** 用户ID*/@Excel(name = "用户ID", type = Excel.Type.EXPORT)private String userId;/*** 工号*/@Excel(name = "工号", type = Excel.Type.EXPORT)private String workNo;/*** 手机号*/@Excel(name = "手机号", type = Excel.Type.EXPORT)private String phone;/*** 用户姓名*/@Excel(name = "用户姓名", type = Excel.Type.EXPORT)private String userName;/*** 公司*/@Excel(name = "公司", type = Excel.Type.EXPORT)private String company;/*** 部门*/@Excel(name = "部门", type = Excel.Type.EXPORT)private String department;/*** 收货人名称*/@Excel(name = "收货人名称", type = Excel.Type.EXPORT)private String receiveName;/*** 收货人手机号*/@Excel(name = "收货人手机号", type = Excel.Type.EXPORT)private String receivePhone;/*** 收货地区*/@Excel(name = "收货地区", type = Excel.Type.EXPORT)private String receiveRegion;/*** 收货地址*/@Excel(name = "收货地址", type = Excel.Type.EXPORT)private String receiveAddress;/*** 快递单号*/@Excel(name = "快递单号", type = Excel.Type.EXPORT)private String logisticsNo;/*** 物流公司*/@Excel(name = "物流公司", type = Excel.Type.EXPORT)private String logisticsCompany;/*** 快递联系方式*/@Excel(name = "快递联系方式", type = Excel.Type.EXPORT)private String logisticsPhone;/*** 发货时间*/@Excel(name = "发货时间", type = Excel.Type.EXPORT, dateFormat = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date deliveryTime;/*** 领取状态:0-待领取 1-已领取 2-已发货 9-补发待领取*/@Excel(name = "领取状态", type = Excel.Type.EXPORT, readConverterExp = "0-待领取,1=已领取,2=已发货,9=补发待领取")private String userStatus;/*** 领取时间*/@Excel(name = "领取时间", type = Excel.Type.EXPORT, dateFormat = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date receiveTime;/*** 领取数*/@Excel(name = "领取数", type = Excel.Type.EXPORT)private Integer receiveNum;/*** 领取的礼品ID*/private String receiveGiftIds;/*** 已经领取的礼品名称*/@Excel(name = "已经领取的礼品名称", type = Excel.Type.EXPORT)private String receiveGiftNames;/*** 可以领取的礼品名称*/@Excel(name = "可以领取的礼品名称", type = Excel.Type.EXPORT)private String giftNames;/*** 可以领取的礼品总数量*/@Excel(name = "可以领取的礼品总数量", type = Excel.Type.EXPORT)int  giftNumber;}

Contorller

    /*** @Description: 导出活动用户列表*/@SysLog("导出活动用户列表")@PostMapping("/export")public void export(HttpServletResponse response, ThemeActivityUser themeActivityUser,ThemeActivityGift themeActivityGift) {List<ThemeActivityUser> list = themeActivityUserService.list(Wrappers.query(themeActivityUser));List<ThemeActivityGift> themeActivityGiftList = themeActivityGiftService.list(Wrappers.query(themeActivityGift));List<ThemeActivityUserVO> themeActivityUserList = themeActivityUserService.wrapReceiveGiftNames(list,themeActivityGiftList);ExcelUtil<ThemeActivityUserVO> util = new ExcelUtil<>(ThemeActivityUserVO.class);util.exportExcel(response, themeActivityUserList, "活动目标用户列表");}

ThemeActivityUserService

  /*** @Description: 增加领取礼品的名称*/List<ThemeActivityUserVO> wrapReceiveGiftNames(List<ThemeActivityUser> list,List<ThemeActivityGift> themeActivityGiftList);

ThemeActivityUserServiceImpl

@Overridepublic List<ThemeActivityUserVO> wrapReceiveGiftNames(List<ThemeActivityUser> list, List<ThemeActivityGift> themeActivityGiftList) {if (CollUtil.isEmpty(list)) {return null;}Map<String, String> themeActivityGiftsMap = new HashMap<String, String>();themeActivityGiftList.stream().forEach(themeActivityGift -> {themeActivityGiftsMap.put(themeActivityGift.getId(), themeActivityGift.getName());});List<ThemeActivityUserVO> themeActivityUserVOList = new ArrayList<>();list.stream().forEach(themeActivityUser -> {ThemeActivityUserVO themeActivityUserVO = new ThemeActivityUserVO();//用一个map存可以领取的礼品名称和总数量Map<String, String> allThemeActivityGiftsMap = new HashMap<String, String>();//获取可以领取的礼品名称和总数量if (ObjectUtil.isNotNull(themeActivityUser.getGiftIds())) {String giftIds = themeActivityUser.getGiftIds();if (giftIds.contains(ThemeActivityConst.COMMA)) {log.info("可以领取多礼品 giftIds={} ", giftIds);String[] giftIdsArr = giftIds.split(ThemeActivityConst.COMMA);StringBuilder giftNames = new StringBuilder();for (String giftId : giftIdsArr) {for (Map.Entry<String, String> entry : themeActivityGiftsMap.entrySet()) {if (giftId.equals(entry.getKey())) {giftNames.append(entry.getValue()).append(ThemeActivityConst.COMMA);//获得可领取礼品的id和NameallThemeActivityGiftsMap.put(entry.getKey(), entry.getValue());}}}themeActivityUserVO.setGiftNames(giftNames.toString());themeActivityUserVO.setGiftNumber(giftIdsArr.length);BeanUtil.copyProperties(themeActivityUser, themeActivityUserVO);} else {log.info("可以领取单礼品 giftIds={} ", giftIds);for (Map.Entry<String, String> entry : themeActivityGiftsMap.entrySet()) {if (giftIds.equals(entry.getKey())) {themeActivityUserVO.setGiftNames(entry.getValue());themeActivityUserVO.setGiftNumber(1);BeanUtil.copyProperties(themeActivityUser, themeActivityUserVO);}//获得可领取礼品的id和NameallThemeActivityGiftsMap.put(entry.getKey(), entry.getValue());}}}//获取已经领取的礼品名称String receiveGiftIds = themeActivityUser.getReceiveGiftIds();List<String> receiveGiftIdsArr = StrUtil.split(receiveGiftIds, ThemeActivityConst.COMMA);//排除用户还没有领取礼品的场景if (ObjectUtil.isNotNull(receiveGiftIds)) {if (receiveGiftIds.contains(ThemeActivityConst.COMMA)) {//取已经领取的礼品名称和可以领取的礼品名称的交集Collection<String> themeActivityGiftsHashKeys = CollUtil.intersection(receiveGiftIdsArr, allThemeActivityGiftsMap.keySet());ArrayList<String> themeActivityGiftsHashValues = new ArrayList<>();for (String key : themeActivityGiftsHashKeys) {themeActivityGiftsHashValues.add(allThemeActivityGiftsMap.get(key));}String receiveGiftNames = CollUtil.join(themeActivityGiftsHashValues, ThemeActivityConst.COMMA);themeActivityUserVO.setReceiveGiftNames(receiveGiftNames);} else {log.info("单礼品 receiveGiftIds={} ", receiveGiftIds);for (Map.Entry<String, String> entry : allThemeActivityGiftsMap.entrySet()) {if (receiveGiftIds.equals(entry.getKey())) {themeActivityUserVO.setReceiveGiftNames(entry.getValue());}}}}themeActivityUserVOList.add(themeActivityUserVO);});return themeActivityUserVOList;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43477.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极光尔沃A6-3d打印机体验

第一次使用3d打印机来打印模件&#xff0c;打印的是机械臂夹爪部位的小零件&#xff0c;设计的效果图如下图1所示。 图1&#xff1a;设计的夹爪部位原图 1、模件的设计 本模件使用的是solidworks软件进行的设计&#xff0c;当然可以使用其他的软件设计。最终保存的时候要以.st…

微信小游戏开发新手教程1-人人都能做游戏

如果你正在阅读这篇文章&#xff0c;那么你就是我所说的“人人”了。在此我默认你符合如下的几个条件&#xff1a; 有一定的阅读理解能力对做游戏有一定的兴趣&#xff08;否则你为什么要看这篇文章呢&#xff09;有一台电脑&#xff08;做游戏至少需要一台电脑&#xff09; …

一起用Go做一个小游戏(下)

打包资源 使用file2byteslice包我们可以将图片和config.json文件打包进二进制程序中&#xff0c;之后编译生成一个二进制程序。然后拷贝这一个文件即可&#xff0c;不用再拷贝图片和其他配置文件了。 golang有很多第三方包可以将打包资源&#xff0c;原理其实很简单——读取资源…

chatgpt赋能python:Python简单小游戏制作教程——让你学会编写游戏代码

Python简单小游戏制作教程——让你学会编写游戏代码 Python是一种高级编程语言&#xff0c;越来越受欢迎&#xff0c;因为它易于学习和使用&#xff0c;而且灵活性非常高。在这篇文章中&#xff0c;我们将教你如何用Python编写一个简单的小游戏。让我们开始吧&#xff01; 需…

ChatGPT-4终究会取代人类嘛?

随着人工智能技术的迅速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;已经成为了一个热门领域。其中&#xff0c;ChatGPT-4是一个备受瞩目的自然语言处理工具。在2022年高考语文中&#xff0c;ChatGPT-4表现出色&#xff0c;说明它在自然语言处理领域有很强的实力。…

宋宝华: 僵尸进程的成因以及僵尸可以被“杀死”吗?

僵尸不可能被杀死&#xff0c;因为它已经死了&#xff0c;不存在再死一次的问题。死的对立面是活&#xff0c;死者已死。只有活的进程才可能被杀死。 什么是僵尸 首先要明确一点&#xff0c;僵尸进程的含义是&#xff1a;子进程已经死了&#xff0c;但是父进程还没有wait它的一…

僵尸进程zombie与孤儿进程orphan

代码已上传至https://github.com/gatieme/AderXCoding/tree/master/system/unix/zombie 问题提出 以前在学习《unix环境高级编程》进程时候&#xff0c;提到孤儿进程和僵尸进程&#xff0c;但是一直对这两个概念比较模糊。于是今天做了一些测试程序,并把这些记录下来. 僵尸进程…

僵尸进程以及如何处理僵尸进程

僵尸进程&#xff1a;就是已经结束了的进程&#xff0c;但是没有从进程表中删除。太多了会导致进程表里面条目满了&#xff0c;进而导致系统崩溃&#xff0c;倒是不占用其他系统资源。最后有defunct的标记&#xff0c;就表明是僵尸进程。 今天配置Redis的时候结束停止Redis服务…

僵尸进程的一点玩法

僵尸进程的一点玩法 前言被忽略的RundownProtectionExAcquireRundownProtection 应用总结 前言 这几天在看WRK的时候&#xff0c;偶然间发现的一个东西&#xff0c;逆向之后&#xff0c;发现了个僵尸进程的玩法。目前菜鸡一枚&#xff0c;有说的不准确的地方&#xff0c;请大家…

PAT——1094 谷歌的招聘

2004 年 7 月&#xff0c;谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌&#xff08;如下图&#xff09;用于招聘。内容超级简单&#xff0c;就是一个以 .com 结尾的网址&#xff0c;而前面的网址是一个 10 位素数&#xff0c;这个素数是自然常数 e 中最早出现的 10 位连续…

PTA—7-5 谷歌的招聘

实际上这题是不难的&#xff0c;甚至说有点简单&#xff0c;连我这样的小菜比都可以顺利的AC。 废话不多说来看题目。 2004 年 7 月&#xff0c;谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌&#xff08;如下图&#xff09;用于招聘。内容超级简单&#xff0c;就是一个以…

AI对话AI才是正解?KAUST研究团队提出基于角色扮演的大模型交互代理框架CAMEL

电影《盗梦空间》中有这样一句非常经典的台词&#xff1a; “世上最具有可塑性的寄生虫是什么&#xff1f;是人类的想法。人类大脑中一个简单的想法&#xff0c;就可以建立一座庞大的城市。有时一个想法也可以改变世界&#xff0c;并改写一切规则&#xff0c;这就是我为什么要…

chatGpt的快捷使用

首页的界面&#xff0c;非常好看&#xff0c;有我经常使用的入口 第一步&#xff1a;打开edge浏览器 第二步&#xff1a;右上角的扩展程序 第三步&#xff1a;点击 扩展 第四步&#xff1a; 第五步&#xff1a; 第六步&#xff1a; 第七步&#xff1a; 新打开Tab页&#xf…

windows下通过远程桌面访问linux图形界面

一、安装epel库 epel库安装之前无法使用yum install xrdp命令安装xrdp 命令&#xff1a;yum install epel-release之后会自动匹配对应版本的rpm包&#xff0c;并解决依赖关系进行安装。 二、安装xrdp xrdp作为linux的图形化界面 1.命令&#xff1a;yum install xrdp2.开启…

如何在Mac上快速显示桌面以便快速访问

macOS 环境中充满了可用于执行有用任务的快捷方式和手势。其中之一被简单地命名为“显示桌面”。当您打开一大堆应用程序窗口时&#xff0c;这个方便的功能可以为您节省宝贵的时间。一起来看看如何在Mac上快速显示桌面的方法吧。 1.使用触控板手势 触控板手势可能很难描述&…

大牛证券解析恒指大跌800点+全球股市大跌

今日两市差异化或许是像上一年白马抱团强化相同&#xff0c;而本年白马被丢掉&#xff0c;接力的科技与锂电&#xff0c;而这两个板块特别是&#xff08;成果爆发工作高成长为特性&#xff09;&#xff0c;锂电有宁德时代&#xff0c;比亚迪、容百科技等&#xff0c;芯片&#…

股票大跌期权对冲

股票期权的出世标示着股票能够及时止损&#xff0c; 股票期权能够很好的与股票做对冲&#xff0c;可以把股票亏损的风险降低&#xff0c;减少投资者面对股票行情下跌产生的亏损。 股票期权的上市让股票多了一种对冲方式&#xff0c;投资者买入股票的时候同时买入一手认沽期权&…

美股历史行情数据之日频率数据

美股历史行情日频率数据 全交易所eod数据&#xff0c;阿里云盘分享全历史行情数据&#xff0c;最早数据记录于1970年。数据字段包含OHLC&#xff0c;除权&#xff0c;股息等全部字段阿里云盘订阅数据&#xff0c;数据每天更新。 全交易所eod数据&#xff0c;阿里云盘分享 交易…

洋姜和生姜的区别

1、科属不同 洋姜和生姜的本质区别就是科属不一类&#xff0c;洋姜是菊科的&#xff0c;而生姜属姜科的&#xff0c;虽然都是多年生草本植物&#xff0c;但是科属不同就代表着这两种食材之间是不一样的了。 洋姜生姜属科不同 2、味道不同 可以通过闻的方式和尝的方式来感受…

洋姜的腌制方法 怎样腌制洋姜好吃

怎样腌制洋姜好吃?提到洋姜很多人都很喜欢吃&#xff0c;洋姜吃法很多&#xff0c;但是最广为人知和受欢迎的就是腌洋姜了&#xff0c;味道佳营养丰富。下面本文来讲解一下洋姜的腌制方法&#xff1a; **洋姜的腌制方法**材料&#xff1a;洋姜、水、花椒、丁香、桂皮、食盐 做…