新增生效类型字段返回

This commit is contained in:
liaozetao
2023-10-25 14:51:36 +08:00
parent 4ce6548f2c
commit a49bda34fe
11 changed files with 305 additions and 48 deletions

View File

@@ -0,0 +1,109 @@
package com.accompany.admin.dto.redenvelope;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* @author: liaozetao
* @date: 2023/10/25 14:03
* @description:
*/
@Data
public class RedEnvelopeAdminDto {
/**
* 昵称
*/
@ExcelProperty("昵称")
private String nick;
/**
* 平台号
*/
@ExcelProperty("平台号")
private Long erbanNo;
/**
* UID
*/
@ExcelProperty("UID")
private Long userId;
/**
* 标题
*/
@ExcelProperty("标题")
private String message;
/**
* 互动
*/
@ExcelProperty("互动")
private String redEnvelopeKindStr;
/**
* 状态
*/
@ExcelProperty("状态")
private String redEnvelopeStatusStr;
/**
* 钻石
*/
@ExcelProperty("钻石")
private Double originalAmount;
/**
* 手续费
*/
@ExcelProperty("手续费")
public Double commissionAmount;
/**
* 领取钻石
*/
@ExcelProperty("领取钻石")
private Double getAmount;
/**
* 领取数量
*/
@ExcelProperty("领取数量")
private String getNumDesc;
/**
* 退还钻石
*/
@ExcelProperty("退还钻石")
private Integer backAmount;
/**
* 房间标题
*/
@ExcelProperty("房间标题")
private String roomTitle;
/**
* 房间平台号
*/
@ExcelProperty("房间平台号")
private Long roomErbanNo;
/**
* 创建时间
*/
@ExcelProperty("创建时间")
private String createTimeStr;
/**
* 开始时间
*/
@ExcelProperty("开始时间")
private String beginTimeStr;
/**
* 结束时间
*/
@ExcelProperty("结束时间")
private String endTimeStr;
}

View File

@@ -1,28 +1,15 @@
package com.accompany.admin.vo.redenvelope;
import com.accompany.business.model.redenvelope.RedEnvelope;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class RedEnvelopeAdminVo implements Serializable {
private Long id; // 主键ID
private Long userId; // uid
private Long roomUid; // roomUid
private String message; // 标题
private Double originalAmount; // 钻石数
private Double commissionAmount; // 手续费
private Integer num; // 红包个数
private String type; // 类型
private String position; // 位置
private Date beginTime; // 开始时间
private Date endTime; // 结束时间
private Date createTime; // 创建时间
private Date updateTime; // 更新时间
public class RedEnvelopeAdminVo extends RedEnvelope {
private Integer redEnvelopeType; // 红包类型
private Integer redEnvelopeStatus; // 红包状态
private Integer getNum; // 领取数量
@@ -33,5 +20,11 @@ public class RedEnvelopeAdminVo implements Serializable {
private Long erbanNo; // 平台号
private String nick; // 昵称
private Long roomErbanNo; // 房间平台号
/**
* 红包种类
*/
@ApiModelProperty("红包种类")
private Integer redEnvelopeKind;
}

View File

@@ -12,7 +12,7 @@ import java.util.List;
public interface RedEnvelopeAdminMapper extends BaseMapper<RedEnvelope> {
List<RedEnvelopeAdminVo> getList(@Param("limit") String limit, @Param("erbanNo") Long erbanNo, @Param("nick") String nick, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("redEnvelopeType") Integer redEnvelopeType, @Param("redEnvelopeStatus") Integer redEnvelopeStatus, @Param("minAmount") Double minAmount, @Param("maxAmount") Double maxAmount);
List<RedEnvelopeAdminVo> getList(@Param("limit") String limit, @Param("erbanNo") Long erbanNo, @Param("nick") String nick, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("redEnvelopeType") Integer redEnvelopeType, @Param("redEnvelopeStatus") Integer redEnvelopeStatus, @Param("redEnvelopeKind") Integer redEnvelopeKind, @Param("minAmount") Double minAmount, @Param("maxAmount") Double maxAmount);
Integer getCount(@Param("erbanNo") Long erbanNo, @Param("nick") String nick, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("redEnvelopeType") Integer redEnvelopeType, @Param("redEnvelopeStatus") Integer redEnvelopeStatus, @Param("minAmount") Double minAmount, @Param("maxAmount") Double maxAmount);

View File

@@ -1,13 +1,27 @@
package com.accompany.admin.service.redenvelope;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.StrUtil;
import com.accompany.admin.dto.redenvelope.RedEnvelopeAdminDto;
import com.accompany.admin.mapper.RedEnvelopeAdminMapper;
import com.accompany.admin.vo.redenvelope.RedEnvelopeAdminVo;
import com.accompany.admin.vo.redenvelope.RedEnvelopeItemAdminVo;
import com.accompany.business.enums.redenvelope.RedEnvelopeKindEnum;
import com.accompany.business.model.redenvelope.RedEnvelope;
import com.accompany.common.utils.DateTimeUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.ServletWebRequest;
import java.util.*;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@Service
@@ -16,14 +30,14 @@ public class RedEnvelopeAdminService extends ServiceImpl<RedEnvelopeAdminMapper,
@Autowired
RedEnvelopeAdminMapper redEnvelopeAdminMapper;
public Object getList(Integer page, Integer pageSize, Long erbanNo, String nick, Date startTime, Date endTime,
Integer type, Integer status, Double minAmount, Double maxAmount) {
public HashMap<String, Object> getList(Integer page, Integer pageSize, Long erbanNo, String nick, Date startTime, Date endTime,
Integer type, Integer status, Integer kind, Double minAmount, Double maxAmount) {
HashMap<String, Object> data = new HashMap<>();
String limit = String.format("%d,%d", (page - 1) * pageSize, pageSize);
List<RedEnvelopeAdminVo> result= redEnvelopeAdminMapper.getList(limit, erbanNo, nick, startTime, endTime, type,
status, minAmount, maxAmount);
List<RedEnvelopeAdminVo> result = redEnvelopeAdminMapper.getList(limit, erbanNo, nick, startTime, endTime, type,
status, kind, minAmount, maxAmount);
// 为空返回
if(null == result || result.isEmpty()) {
if (null == result || result.isEmpty()) {
data.put("rows", new ArrayList<>());
data.put("total", 0);
return data;
@@ -33,16 +47,16 @@ public class RedEnvelopeAdminService extends ServiceImpl<RedEnvelopeAdminMapper,
List<HashMap<String, Object>> getMap = redEnvelopeAdminMapper.getDiamondRedEnvelopeGetNum(redEnvelopeIds);
HashMap<Long, Integer> getNumMap = new HashMap<>();
HashMap<Long, Double> getAmountMap = new HashMap<>();
getMap.stream().forEach(it -> getNumMap.put(Long.parseLong(it.get("red_envelope_id").toString()),
getMap.forEach(it -> getNumMap.put(Long.parseLong(it.get("red_envelope_id").toString()),
Integer.parseInt(it.get("num").toString())));
getMap.stream().forEach(it -> getAmountMap.put(Long.parseLong(it.get("red_envelope_id").toString()),
getMap.forEach(it -> getAmountMap.put(Long.parseLong(it.get("red_envelope_id").toString()),
Double.parseDouble(it.get("amount").toString())));
// 退还
List<HashMap<String, Object>> backMap = redEnvelopeAdminMapper.getRedEnvelopeBackAmount(redEnvelopeIds);
HashMap<Long, Integer> backAmountMap = new HashMap<>();
backMap.stream().forEach(it -> backAmountMap.put(Long.parseLong(it.get("red_envelope_id").toString()),
backMap.forEach(it -> backAmountMap.put(Long.parseLong(it.get("red_envelope_id").toString()),
Integer.parseInt(it.get("num").toString())));
result.stream().forEach(it -> {
result.forEach(it -> {
it.setGetNum(getNumMap.getOrDefault(it.getId(), 0));
it.setGetAmount(getAmountMap.getOrDefault(it.getId(), 0.0));
it.setGetNumDesc(String.format("%d/%d", it.getGetNum(), it.getNum()));
@@ -54,8 +68,75 @@ public class RedEnvelopeAdminService extends ServiceImpl<RedEnvelopeAdminMapper,
return data;
}
public Object getItemList(Long redEnvelopeId) {
public List<RedEnvelopeItemAdminVo> getItemList(Long redEnvelopeId) {
return redEnvelopeAdminMapper.getItemList(redEnvelopeId);
}
public void export(Long erbanNo, String nick, Date startTime, Date endTime, Integer redEnvelopeType, Integer redEnvelopeStatus, Integer redEnvelopeKind, Double minAmount, Double maxAmount, ServletWebRequest servletWebRequest) {
HashMap<String, Object> map = getList(1, 100000, erbanNo, nick, startTime, endTime, redEnvelopeType, redEnvelopeStatus, redEnvelopeKind, minAmount, maxAmount);
List<RedEnvelopeAdminDto> datas = new ArrayList<>();
List<RedEnvelopeAdminVo> records = (List<RedEnvelopeAdminVo>) map.get("rows");
if (CollectionUtil.isNotEmpty(records)) {
for (RedEnvelopeAdminVo record : records) {
RedEnvelopeAdminDto admin = new RedEnvelopeAdminDto();
BeanUtils.copyProperties(record, admin);
Integer type = record.getRedEnvelopeType();
Integer kind = record.getRedEnvelopeKind();
Integer status = record.getRedEnvelopeStatus();
String redEnvelopeKindStr = StrUtil.EMPTY;
if (kind == RedEnvelopeKindEnum.NONE.ordinal()) {
if (type == 0) {
redEnvelopeKindStr = "房间手气红包";
} else if (type == 1) {
redEnvelopeKindStr = "全服手气红包";
} else if (type == 2) {
redEnvelopeKindStr = "房间礼物红包";
} else if (type == 3) {
redEnvelopeKindStr = "全服礼物红包";
}
} else if (kind == RedEnvelopeKindEnum.NO_THRESHOLD.ordinal()) {
redEnvelopeKindStr = "无门槛红包";
} else if (kind == RedEnvelopeKindEnum.FOLLOW.ordinal()) {
redEnvelopeKindStr = "关注红包";
} else if (kind == RedEnvelopeKindEnum.SHARE.ordinal()) {
redEnvelopeKindStr = "分享红包";
} else if (kind == RedEnvelopeKindEnum.BARRAGE.ordinal()) {
redEnvelopeKindStr = "弹幕红包";
}
String redEnvelopeStatusStr = StrUtil.EMPTY;
if (status == 0) {
redEnvelopeStatusStr = "未开始";
} else if (status == 1) {
redEnvelopeStatusStr = "进行中";
} else if (status == 2) {
redEnvelopeStatusStr = "已结束";
}
admin.setRedEnvelopeKindStr(redEnvelopeKindStr);
admin.setRedEnvelopeStatusStr(redEnvelopeStatusStr);
if (record.getBeginTime() != null) {
admin.setBeginTimeStr(DateTimeUtil.convertDate(record.getBeginTime(), DatePattern.NORM_DATETIME_PATTERN));
}
if (record.getEndTime() != null) {
admin.setEndTimeStr(DateTimeUtil.convertDate(record.getEndTime(), DatePattern.NORM_DATETIME_PATTERN));
}
if (record.getCreateTime() != null) {
admin.setCreateTimeStr(DateTimeUtil.convertDate(record.getCreateTime(), DatePattern.NORM_DATETIME_PATTERN));
}
datas.add(admin);
}
}
if (servletWebRequest.getResponse() != null) {
try {
//这里注意 有同学反应使用swagger 会导致各种问题请直接用浏览器或者用postman
servletWebRequest.getResponse().setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
servletWebRequest.getResponse().setCharacterEncoding("utf-8");
//这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("红包发放统计", "UTF-8").replaceAll("\\+", "%20");
servletWebRequest.getResponse().setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(servletWebRequest.getResponse().getOutputStream(), RedEnvelopeAdminDto.class).sheet("红包发放统计").doWrite(datas);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
}

View File

@@ -1,17 +1,23 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.accompany.admin.mapper.RedEnvelopeAdminMapper" >
<resultMap id="BaseResultMap" type="com.accompany.admin.vo.redenvelope.RedEnvelopeAdminVo" >
<id column="id" property="id" jdbcType="BIGINT" />
<mapper namespace="com.accompany.admin.mapper.RedEnvelopeAdminMapper">
<resultMap id="BaseResultMap" type="com.accompany.admin.vo.redenvelope.RedEnvelopeAdminVo">
<id column="id" property="id" jdbcType="BIGINT"/>
</resultMap>
<resultMap id="BaseResultMap2" type="com.accompany.admin.vo.redenvelope.RedEnvelopeItemAdminVo" >
<id column="id" property="id" jdbcType="BIGINT" />
<resultMap id="BaseResultMap2" type="com.accompany.admin.vo.redenvelope.RedEnvelopeItemAdminVo">
<id column="id" property="id" jdbcType="BIGINT"/>
</resultMap>
<select id="getList" resultMap="BaseResultMap">
<select id="getList" resultType="com.accompany.admin.vo.redenvelope.RedEnvelopeAdminVo">
select * from (
SELECT a.*,b.erban_no,b.nick,c.erban_no AS room_erban_no,d.title AS room_title,
SELECT
a.*,
b.erban_no,
b.nick,
c.erban_no AS room_erban_no,
d.title AS room_title,
IF (a.begin_time &gt; now(), 0, IF(a.end_time &lt; now(), 2, 1)) AS red_envelope_status,
IF(a.type='DIAMOND',IF(position='IN_ROOM', 0, 1), IF(position='IN_ROOM', 2, 3)) AS red_envelope_type
IF(a.type='DIAMOND',IF(position='IN_ROOM', 0, 1), IF(position='IN_ROOM', 2, 3)) AS red_envelope_type,
a.kind as red_envelope_kind
FROM red_envelope AS a
JOIN users AS b
JOIN users AS c
@@ -31,11 +37,14 @@
and original_amount &lt;= #{maxAmount}
</if>
<if test="startTime != null">
and a.create_time &gt;= #{startTime}
and a.create_time &gt;= #{startTime}
</if>
<if test="endTime != null">
and a.create_time &lt;= #{endTime}
</if>
<if test="redEnvelopeKind != null">
and a.kind = #{redEnvelopeKind}
</if>
ORDER BY a.create_time DESC
) as tmp
where 1=1
@@ -91,7 +100,7 @@
SELECT red_envelope_id,count(1) num,sum(amount) amount FROM red_envelope_item
WHERE red_envelope_id IN
<foreach collection="redEnvelopeIds" item="item" index="index" open="(" close=")" separator=",">
#{item}
#{item}
</foreach>
GROUP BY red_envelope_id
</select>

View File

@@ -2,15 +2,20 @@ package com.accompany.admin.controller.redenvelope;
import com.accompany.admin.controller.BaseController;
import com.accompany.admin.service.redenvelope.RedEnvelopeAdminService;
import com.accompany.admin.vo.redenvelope.RedEnvelopeItemAdminVo;
import com.accompany.common.annotation.Authorization;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.ServiceException;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.ServletWebRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@RestController
@@ -24,22 +29,61 @@ public class RedEnvelopeAdminController extends BaseController {
@Authorization
@RequestMapping("/list")
public BusiResult getList(Integer page, Integer pageSize, Long erbanNo, String nick, Date startTime, Date endTime,
Integer redEnvelopeType, Integer redEnvelopeStatus, Double minAmount, Double maxAmount) {
if (null == page || null == pageSize || page <1 || pageSize < 1) {
return new BusiResult(BusiStatus.PARAMETERILLEGAL);
public BusiResult<HashMap<String, Object>> getList(Integer page,
Integer pageSize,
Long erbanNo,
String nick,
Date startTime,
Date endTime,
Integer redEnvelopeType,
Integer redEnvelopeStatus,
Integer redEnvelopeKind,
Double minAmount,
Double maxAmount) {
if (null == page || null == pageSize || page < 1 || pageSize < 1) {
return BusiResult.fail(BusiStatus.PARAMETERILLEGAL);
}
return new BusiResult(BusiStatus.SUCCESS, redEnvelopeAdminService.getList(page, pageSize, erbanNo, nick,
startTime, endTime, redEnvelopeType, redEnvelopeStatus, minAmount, maxAmount));
return BusiResult.success(redEnvelopeAdminService.getList(page, pageSize, erbanNo, nick, startTime, endTime, redEnvelopeType, redEnvelopeStatus, redEnvelopeKind, minAmount, maxAmount));
}
@Authorization
@RequestMapping("/itemList")
public BusiResult itemList(Long redEnvelopeId) {
public BusiResult<List<RedEnvelopeItemAdminVo>> itemList(Long redEnvelopeId) {
if (null == redEnvelopeId) {
throw new ServiceException("红包ID不能为空");
}
return new BusiResult(BusiStatus.SUCCESS, redEnvelopeAdminService.getItemList(redEnvelopeId));
return BusiResult.success(redEnvelopeAdminService.getItemList(redEnvelopeId));
}
/**
* 导出
*
* @param erbanNo
* @param nick
* @param startTime
* @param endTime
* @param redEnvelopeType
* @param redEnvelopeStatus
* @param redEnvelopeKind
* @param minAmount
* @param maxAmount
* @param request
* @param response
*/
@ApiOperation("导出")
@GetMapping("export")
public void export(Long erbanNo,
String nick,
Date startTime,
Date endTime,
Integer redEnvelopeType,
Integer redEnvelopeStatus,
Integer redEnvelopeKind,
Double minAmount,
Double maxAmount,
HttpServletRequest request,
HttpServletResponse response) {
redEnvelopeAdminService.export(erbanNo, nick, startTime, endTime, redEnvelopeType, redEnvelopeStatus, redEnvelopeKind, minAmount, maxAmount, new ServletWebRequest(request, response));
}
}

View File

@@ -30,4 +30,9 @@ class RedEnvelopeDTO {
var updateTime: Date? = null
var kind: Int = 0
/**
* 生效类型 0 立即生效 1 限时生效
*/
var validityType: Int = 0
}

View File

@@ -119,4 +119,10 @@ public class RedEnvelope implements Serializable {
*/
@ApiModelProperty("红包状态 1 开抢中 2 过时 3 抢光了 4 抢到了 5 将要开始 6 超时已退还")
private Integer state;
/**
* 生效类型 0 立即生效 1 限时生效
*/
@ApiModelProperty("生效类型 0 立即生效 1 限时生效")
private Integer validityType;
}

View File

@@ -67,4 +67,11 @@ class RedEnvelopeResponseVo {
*/
@ApiModelProperty("红包状态 1 开抢中 2 过时 3 抢光了 4 抢到了 5 将要开始 6 超时已退还")
var state: Int = 0
/**
* 生效类型 0 立即生效 1 限时生效
*/
@ApiModelProperty("生效类型 0 立即生效 1 限时生效")
var validityType: Int = 0
}

View File

@@ -99,6 +99,7 @@ public class RedEnvelopeService extends ServiceImpl<RedEnvelopeMapper, RedEnvelo
redEnvelope.setBeginTime(redEnvelopeDTO.getBeginTime());
redEnvelope.setEndTime(redEnvelopeDTO.getEndTime());
redEnvelope.setKind(redEnvelopeDTO.getKind());
redEnvelope.setValidityType(redEnvelopeDTO.getValidityType());
save(redEnvelope);
redEnvelopeDTO.setId(redEnvelope.getId());
return redEnvelope.getId();
@@ -198,6 +199,7 @@ public class RedEnvelopeService extends ServiceImpl<RedEnvelopeMapper, RedEnvelo
response.setCreateTime(v.getCreateTime());
response.setUpdateTime(v.getUpdateTime());
response.setKind(v.getKind());
response.setValidityType(v.getValidityType());
//倒计时
Date now = new Date();
Date beginTime = v.getBeginTime();

View File

@@ -173,6 +173,7 @@ abstract class IRedEnvelopeStrategy {
redEnvelope.beginTime = context.beginTime!!
redEnvelope.endTime = context.endTime!!
redEnvelope.kind = context.kind
redEnvelope.validityType = context.validityType
return redEnvelope
}