v1.1: 房间流水分成相关统计根据账单计算
This commit is contained in:
@@ -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());
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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());
|
||||
}
|
||||
}
|
||||
|
@@ -13,4 +13,6 @@ public class RoomRevenueExcelVo {
|
||||
private Integer bigAmount;
|
||||
// 大光礼物数量
|
||||
private Integer bigNum;
|
||||
// 房间抽成钻石数
|
||||
private Double perNum;
|
||||
}
|
||||
|
@@ -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 <= #{endTime}
|
||||
AND room_uid= #{roomUid}
|
||||
AND recive_uid = #{recvUid}
|
||||
</select>
|
||||
</mapper>
|
@@ -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);
|
||||
}
|
@@ -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
|
||||
(
|
||||
|
Reference in New Issue
Block a user