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

前言

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

实现

因为新增两列不是数据库表中字段。因此,需要需要建立一个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

@Override
	public 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和Name
								allThemeActivityGiftsMap.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和Name
						allThemeActivityGiftsMap.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;
	}

猜你喜欢

转载自blog.csdn.net/someday____/article/details/128835925