v1.1: 房间流水分成相关统计根据账单计算

This commit is contained in:
lzm
2022-09-30 10:49:20 +08:00
parent 03f624fc43
commit ac01346faf
9 changed files with 112 additions and 15 deletions

View File

@@ -9,6 +9,7 @@ import com.accompany.business.mybatismapper.RadishGiftSendRecordMapperMgr;
import com.accompany.business.service.room.RoomRevenueExcelService;
import com.accompany.business.service.room.RoomService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.util.DoubleUtil;
import com.accompany.business.vo.RoomRadishVo;
import com.accompany.business.vo.RoomVo;
import com.accompany.business.vo.room.RoomRevenueExcelVo;
@@ -328,6 +329,7 @@ public class RoomGiftSerialService {
adminVO.setRoomTitle(room.getTitle());
// 房间提成
Integer totalDiamonds = 0;
Double totalPerNum = 0.0; // 房间反额收益
Double roomCommision = roomService.getRoomCommission(room);
PageHelper.startPage(page, pageSize);
List<RoomRevenueExcelVo> excelVoList = roomRevenueExcelService.roomRevenueQuery(roomVo, start, end);
@@ -338,14 +340,17 @@ public class RoomGiftSerialService {
RoomRevenueAdminVo revenueAdminVo = new RoomRevenueAdminVo();
BeanUtils.copyProperties(vo, revenueAdminVo);
revenueAdminVo.setNum(num);
List<Long> giftRecordIds = roomRevenueExcelService.roomPerNumGiftRecordList(roomVo.getUid(),vo.getUid(),start,end);
Double perNum = roomRevenueExcelService.roomPerNumBySendGiftRecordIds(roomVo.getUid(),vo.getUid(),giftRecordIds);
revenueAdminVo.setCutDiamonds(vo.getAmount() * roomCommision);
num += 1;
totalDiamonds += vo.getAmount();
totalPerNum = DoubleUtil.add(totalPerNum,perNum);
roomRevenueAdminVoList.add(revenueAdminVo);
}
}
adminVO.setTotalDiamonds(totalDiamonds);
adminVO.setCutDiamonds(totalDiamonds * roomCommision);
adminVO.setCutDiamonds(totalPerNum);
PageInfo<RoomRevenueExcelVo> pageInfo = new PageInfo<>(excelVoList);
adminVO.setRows(roomRevenueAdminVoList);
adminVO.setTotal(pageInfo.getTotal());

View File

@@ -71,4 +71,5 @@ public interface GiftSendRecordMapperExpand {
RoomSerialVo getSingleRoomAnchorSerials(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("uid") Long uid);
List<Long> roomPerNumGiftRecordList(@Param("roomUid") Long roomUid, @Param("recvUid") Long recvUid, @Param("startTime") String startTime, @Param("endTime") String endTime);
}

View File

@@ -557,4 +557,17 @@ public class BillRecordService extends ServiceImpl<BillRecordMapper,BillRecord>
}
/**
* 根据礼物记录获取对应用户的反额总数
* @param uid 反额收益方(房主)
* @param targetUid 反额方(即接收到礼物方)
* @param giftRecordIds
* @return
*/
public Double roomPerNumBySendGiftRecordIds(Long uid, Long targetUid, List<Long> giftRecordIds) {
if (CollectionUtils.isEmpty(giftRecordIds)) {
return 0.0;
}
return billRecordMapper.roomPerNumBySendGiftRecordIds(uid,targetUid,giftRecordIds.stream().map(it -> it.toString()).collect(Collectors.toList()));
}
}

View File

@@ -2,15 +2,17 @@ package com.accompany.business.service.room;
import com.accompany.business.mybatismapper.*;
import com.accompany.business.service.api.QinniuService;
import com.accompany.business.service.record.BillRecordService;
import com.accompany.business.util.DoubleUtil;
import com.accompany.business.vo.*;
import com.accompany.business.vo.room.RoomRevenueExcelVo;
import com.accompany.common.config.SystemConfig;
import com.accompany.common.constant.Constant;
import com.accompany.common.utils.*;
import com.accompany.core.model.Room;
import com.accompany.core.service.base.BaseService;
import com.accompany.core.service.user.UsersBaseService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -23,6 +25,7 @@ import org.springframework.stereotype.Service;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
@@ -38,6 +41,8 @@ public class RoomRevenueExcelService extends BaseService {
UsersBaseService usersBaseService;
@Autowired
QinniuService qinniuService;
@Autowired
private BillRecordService billRecordService;
public List<RoomRevenueExcelVo> roomRevenueQuery(RoomVo roomVo, String startDate, String endDate) {
return giftSendRecordMapperExpand.roomRevenueQuery(roomVo.getUid(), startDate, endDate);
@@ -61,7 +66,7 @@ public class RoomRevenueExcelService extends BaseService {
String startDay = DateTimeUtil.convertDate(start, DateTimeUtil.DEFAULT_DATE_PATTERN);
String endDay = DateTimeUtil.convertDate(end, DateTimeUtil.DEFAULT_DATE_PATTERN);
String title = String.format("%s——%s房间营收数据",startDay,endDay);
createSheet(workbook, roomVo, index, "综合数据", title, roomRevenueQuery(roomVo, start, end));
createSheet(workbook, roomVo, index, "综合数据", title, roomRevenueQuery(roomVo, start, end),start,end);
Date endTime = DateTimeUtil.convertStrToDate(end, DateTimeUtil.DEFAULT_DATE_PATTERN);
// 按天遍历
@@ -77,11 +82,11 @@ public class RoomRevenueExcelService extends BaseService {
// 第一天则用传入的开始,最后一天用传入的结束时间
String nextDayTime = DateTimeUtil.convertDate(nextDay, DateTimeUtil.DEFAULT_DATE_PATTERN);
if(nextDayTime.equals(startDay)){
createSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, start, endDate));
createSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, start, endDate), start, endDate);
}else if(nextDayTime.equals(endDay)){
createSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, startDate, end));
createSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, startDate, end), startDate, end);
}else{
createSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, startDate, endDate));
createSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, startDate, endDate), startDate, endDate);
}
nextDay = DateTimeUtil.addDays(nextDay, 1);
}
@@ -94,7 +99,7 @@ public class RoomRevenueExcelService extends BaseService {
return workbook;
}
public void createSheet(XSSFWorkbook workbook, RoomVo roomVo, Integer sheetIndex, String sheetName, String title, List<RoomRevenueExcelVo> roomData) {
public void createSheet(XSSFWorkbook workbook, RoomVo roomVo, Integer sheetIndex, String sheetName, String title, List<RoomRevenueExcelVo> roomData, String start, String end) {
Room room = roomService.getRoomByUid(roomVo.getUid());
// 房间提成
Double roomCommision = roomService.getRoomCommission(room);
@@ -105,6 +110,7 @@ public class RoomRevenueExcelService extends BaseService {
setCellValue(sheet, 0, 0, title);
// 用户数据
Integer totalDiamonds = 0;
Double totalPerNum = 0.0;
for (int i = 0; i < roomData.size(); i++) {
RoomRevenueExcelVo item = roomData.get(i);
totalDiamonds += item.getAmount();
@@ -118,8 +124,13 @@ public class RoomRevenueExcelService extends BaseService {
row.createCell(2).setCellValue(item.getNick());
// 收礼钻石数
row.createCell(3).setCellValue(item.getAmount());
// 房间抽成钻石数
row.createCell(4).setCellValue(item.getAmount() * roomCommision);
List<Long> giftRecordIds = this.roomPerNumGiftRecordList(roomVo.getUid(),item.getUid(),start,end);
Double perNum = this.roomPerNumBySendGiftRecordIds(roomVo.getUid(),item.getUid(),giftRecordIds);
totalPerNum = DoubleUtil.add(totalPerNum, perNum);
row.createCell(4).setCellValue(perNum);
// 大光礼物数量
row.createCell(5).setCellValue(item.getBigNum());
// 大光礼物价值
@@ -133,7 +144,7 @@ public class RoomRevenueExcelService extends BaseService {
// 收礼总钻石数
setCellValue(sheet, 2, 2, totalDiamonds);
// 主播收礼钻石数
setCellValue(sheet, 2, 3, totalDiamonds * roomCommision);
setCellValue(sheet, 2, 3, totalPerNum);
}
public void setCellValue(XSSFSheet sheet, Integer row, Integer col, Object value) {
@@ -181,7 +192,7 @@ public class RoomRevenueExcelService extends BaseService {
String startDay = DateTimeUtil.convertDate(start, DateTimeUtil.DEFAULT_DATE_PATTERN);
String endDay = DateTimeUtil.convertDate(end, DateTimeUtil.DEFAULT_DATE_PATTERN);
String title = String.format("%s——%s房间营收数据",startDay,endDay);
createSingleRoomSheet(workbook, roomVo, index, "综合数据", title, roomRevenueQuery(roomVo, start, end));
createSingleRoomSheet(workbook, roomVo, index, "综合数据", title, roomRevenueQuery(roomVo, start, end),start,end);
Date endTime = DateTimeUtil.convertStrToDate(end, DateTimeUtil.DEFAULT_DATE_PATTERN);
// 按天遍历
@@ -197,11 +208,11 @@ public class RoomRevenueExcelService extends BaseService {
// 第一天则用传入的开始,最后一天用传入的结束时间
String nextDayTime = DateTimeUtil.convertDate(nextDay, DateTimeUtil.DEFAULT_DATE_PATTERN);
if(nextDayTime.equals(startDay)){
createSingleRoomSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, start, endDate));
createSingleRoomSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, start, endDate), start, endDate);
}else if(nextDayTime.equals(endDay)){
createSingleRoomSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, startDate, end));
createSingleRoomSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, startDate, end), startDate, end);
}else{
createSingleRoomSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, startDate, endDate));
createSingleRoomSheet(workbook, roomVo, index, DateTimeUtil.convertDate(nextDay, DateTimeUtil.SIMPLE_MONTH_DATE_PATTERN), title, roomRevenueQuery(roomVo, startDate, endDate), startDate, endDate);
}
nextDay = DateTimeUtil.addDays(nextDay, 1);
}
@@ -215,7 +226,7 @@ public class RoomRevenueExcelService extends BaseService {
}
public void createSingleRoomSheet(XSSFWorkbook workbook, RoomVo roomVo, Integer sheetIndex, String sheetName, String title, List<RoomRevenueExcelVo> roomData) {
public void createSingleRoomSheet(XSSFWorkbook workbook, RoomVo roomVo, Integer sheetIndex, String sheetName, String title, List<RoomRevenueExcelVo> roomData, String start, String end) {
Room room = roomService.getRoomByUid(roomVo.getUid());
// 房间提成
Double roomCommision = roomService.getRoomCommission(room);
@@ -227,6 +238,7 @@ public class RoomRevenueExcelService extends BaseService {
// 用户数据
Integer totalDiamonds = 0;
Long anchorDiamond = 0L;
Double totalPerNum = 0.0;
for (int i = 0; i < roomData.size(); i++) {
RoomRevenueExcelVo item = roomData.get(i);
totalDiamonds += item.getAmount();
@@ -241,7 +253,11 @@ public class RoomRevenueExcelService extends BaseService {
// 收礼钻石数
row.createCell(3).setCellValue(item.getAmount());
// 房间抽成钻石数
row.createCell(4).setCellValue(item.getAmount() * roomCommision);
List<Long> giftRecordIds = this.roomPerNumGiftRecordList(roomVo.getUid(),item.getUid(),start,end);
Double perNum = this.roomPerNumBySendGiftRecordIds(roomVo.getUid(),item.getUid(),giftRecordIds);
totalPerNum = DoubleUtil.add(totalPerNum, perNum);
row.createCell(4).setCellValue(perNum);
// 大光礼物数量
row.createCell(5).setCellValue(item.getBigNum());
// 大光礼物价值
@@ -262,5 +278,29 @@ public class RoomRevenueExcelService extends BaseService {
}
/**
* 获取指定房间,规定时间内赠送的礼物记录
* @param roomUid 房间uid
* @param recvUid 收到礼物的uid
* @param start
* @param end
* @return
*/
public List<Long> roomPerNumGiftRecordList(Long roomUid, Long recvUid, String start, String end) {
return giftSendRecordMapperExpand.roomPerNumGiftRecordList(roomUid,recvUid,start,end);
}
/**
* 根据礼物记录获取对应用户的反额总数
* @param uid 反额收益方(房主)
* @param targetUid 反额方(即接收到礼物方)
* @param giftRecordIds
* @return
*/
public Double roomPerNumBySendGiftRecordIds(Long uid, Long targetUid, List<Long> giftRecordIds) {
if (CollectionUtils.isEmpty(giftRecordIds)) {
return 0.0;
}
return billRecordService.roomPerNumBySendGiftRecordIds(uid,targetUid,giftRecordIds);
}
}

View File

@@ -1,5 +1,6 @@
package com.accompany.business.util;
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
@@ -7,4 +8,17 @@ import java.text.DecimalFormat;
*/
public class DoubleUtil {
private static DecimalFormat doubleFormat = new DecimalFormat("0.00");
/**
* * 两个Double数相加 *
*
* @param v1 *
* @param v2 *
* @return Double
*/
public static Double add(Double v1, Double v2) {
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.add(b2).doubleValue());
}
}

View File

@@ -13,4 +13,6 @@ public class RoomRevenueExcelVo {
private Integer bigAmount;
// 大光礼物数量
private Integer bigNum;
// 房间抽成钻石数
private Double perNum;
}

View File

@@ -260,4 +260,11 @@
and re.room_uid = #{uid}
AND re.recive_uid = #{uid}
</select>
<select id="roomPerNumGiftRecordList" resultType="java.lang.Long">
SELECT send_record_id FROM gift_send_record
WHERE create_time >= #{startTime} AND create_time &lt;= #{endTime}
AND room_uid= #{roomUid}
AND recive_uid = #{recvUid}
</select>
</mapper>

View File

@@ -51,4 +51,7 @@ public interface BillRecordMapper extends BaseMapper<BillRecord> {
List<BillRecord> listByTypeAndDate(@Param("byteList") List<Byte> byteList,@Param("beginDate") Date beginDate, @Param("endDate") Date endDate);
int batchInsert(@Param("billRecordList") List<BillRecord> billRecordList);
/** 获取指定送礼记录的 房间流水反额总收益 */
Double roomPerNumBySendGiftRecordIds(@Param("uid") Long uid, @Param("targetUid") Long targetUid, @Param("giftRecordIds") List<String> giftRecordIds);
}

View File

@@ -97,6 +97,18 @@
group by obj_type
</select>
<select id="roomPerNumBySendGiftRecordIds" resultType="java.lang.Double">
select IFNULL(sum(amount),0.0) from bill_record
where 1=1
<if test="giftRecordIds != null and giftRecordIds.size >0">
and obj_id in
<foreach collection="giftRecordIds" item="objId" open="(" close=")" separator=",">
#{objId}
</foreach>
</if>
and uid = #{uid} and target_uid = #{targetUid} and obj_type = 11
</select>
<insert id="batchInsert">
insert into bill_record
(