From ac01346faf25910b08fd316e19383da5b7fbfe58 Mon Sep 17 00:00:00 2001 From: lzm <17817447469@163.com> Date: Fri, 30 Sep 2022 10:49:20 +0800 Subject: [PATCH] =?UTF-8?q?v1.1:=20=E6=88=BF=E9=97=B4=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E5=88=86=E6=88=90=E7=9B=B8=E5=85=B3=E7=BB=9F=E8=AE=A1=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E8=B4=A6=E5=8D=95=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/gift/RoomGiftSerialService.java | 7 +- .../GiftSendRecordMapperExpand.java | 1 + .../service/record/BillRecordService.java | 13 ++++ .../service/room/RoomRevenueExcelService.java | 68 +++++++++++++++---- .../accompany/business/util/DoubleUtil.java | 14 ++++ .../business/vo/room/RoomRevenueExcelVo.java | 2 + .../sqlmappers/GiftSendRecordMapperExpand.xml | 7 ++ .../sharding/mapper/BillRecordMapper.java | 3 + .../sharding/sqlmappers/BillRecordMapper.xml | 12 ++++ 9 files changed, 112 insertions(+), 15 deletions(-) diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/gift/RoomGiftSerialService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/gift/RoomGiftSerialService.java index 461d754fb..a76205c1c 100644 --- a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/gift/RoomGiftSerialService.java +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/gift/RoomGiftSerialService.java @@ -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 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 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 pageInfo = new PageInfo<>(excelVoList); adminVO.setRows(roomRevenueAdminVoList); adminVO.setTotal(pageInfo.getTotal()); diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/GiftSendRecordMapperExpand.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/GiftSendRecordMapperExpand.java index 0dfe4bd9f..acad2cf81 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/GiftSendRecordMapperExpand.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/GiftSendRecordMapperExpand.java @@ -71,4 +71,5 @@ public interface GiftSendRecordMapperExpand { RoomSerialVo getSingleRoomAnchorSerials(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("uid") Long uid); + List roomPerNumGiftRecordList(@Param("roomUid") Long roomUid, @Param("recvUid") Long recvUid, @Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/record/BillRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/record/BillRecordService.java index 27ff961b6..96bce3603 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/record/BillRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/record/BillRecordService.java @@ -557,4 +557,17 @@ public class BillRecordService extends ServiceImpl } + /** + * 根据礼物记录获取对应用户的反额总数 + * @param uid 反额收益方(房主) + * @param targetUid 反额方(即接收到礼物方) + * @param giftRecordIds + * @return + */ + public Double roomPerNumBySendGiftRecordIds(Long uid, Long targetUid, List giftRecordIds) { + if (CollectionUtils.isEmpty(giftRecordIds)) { + return 0.0; + } + return billRecordMapper.roomPerNumBySendGiftRecordIds(uid,targetUid,giftRecordIds.stream().map(it -> it.toString()).collect(Collectors.toList())); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomRevenueExcelService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomRevenueExcelService.java index 1a0f052dd..c608e1381 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomRevenueExcelService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/RoomRevenueExcelService.java @@ -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 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 roomData) { + public void createSheet(XSSFWorkbook workbook, RoomVo roomVo, Integer sheetIndex, String sheetName, String title, List 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 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 roomData) { + public void createSingleRoomSheet(XSSFWorkbook workbook, RoomVo roomVo, Integer sheetIndex, String sheetName, String title, List 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 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 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 giftRecordIds) { + if (CollectionUtils.isEmpty(giftRecordIds)) { + return 0.0; + } + return billRecordService.roomPerNumBySendGiftRecordIds(uid,targetUid,giftRecordIds); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/util/DoubleUtil.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/util/DoubleUtil.java index f35eb784d..6aa33aad3 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/util/DoubleUtil.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/util/DoubleUtil.java @@ -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()); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/vo/room/RoomRevenueExcelVo.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/vo/room/RoomRevenueExcelVo.java index aad0b96d2..f0741c2a5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/vo/room/RoomRevenueExcelVo.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/vo/room/RoomRevenueExcelVo.java @@ -13,4 +13,6 @@ public class RoomRevenueExcelVo { private Integer bigAmount; // 大光礼物数量 private Integer bigNum; + // 房间抽成钻石数 + private Double perNum; } diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GiftSendRecordMapperExpand.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GiftSendRecordMapperExpand.xml index f8bea2013..d38ade410 100644 --- a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GiftSendRecordMapperExpand.xml +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GiftSendRecordMapperExpand.xml @@ -260,4 +260,11 @@ and re.room_uid = #{uid} AND re.recive_uid = #{uid} + + \ No newline at end of file diff --git a/accompany-business/accompany-business-sharding/src/main/java/com/accompany/sharding/mapper/BillRecordMapper.java b/accompany-business/accompany-business-sharding/src/main/java/com/accompany/sharding/mapper/BillRecordMapper.java index d60f15b46..1125a7d5c 100644 --- a/accompany-business/accompany-business-sharding/src/main/java/com/accompany/sharding/mapper/BillRecordMapper.java +++ b/accompany-business/accompany-business-sharding/src/main/java/com/accompany/sharding/mapper/BillRecordMapper.java @@ -51,4 +51,7 @@ public interface BillRecordMapper extends BaseMapper { List listByTypeAndDate(@Param("byteList") List byteList,@Param("beginDate") Date beginDate, @Param("endDate") Date endDate); int batchInsert(@Param("billRecordList") List billRecordList); + + /** 获取指定送礼记录的 房间流水反额总收益 */ + Double roomPerNumBySendGiftRecordIds(@Param("uid") Long uid, @Param("targetUid") Long targetUid, @Param("giftRecordIds") List giftRecordIds); } \ No newline at end of file diff --git a/accompany-business/accompany-business-sharding/src/main/resources/sharding/sqlmappers/BillRecordMapper.xml b/accompany-business/accompany-business-sharding/src/main/resources/sharding/sqlmappers/BillRecordMapper.xml index 79861cf6e..fc77d171a 100644 --- a/accompany-business/accompany-business-sharding/src/main/resources/sharding/sqlmappers/BillRecordMapper.xml +++ b/accompany-business/accompany-business-sharding/src/main/resources/sharding/sqlmappers/BillRecordMapper.xml @@ -97,6 +97,18 @@ group by obj_type + + insert into bill_record (