牌照房数据统计-停留明细

This commit is contained in:
2023-01-06 19:01:01 +08:00
parent ccdb07d2e3
commit 105f7f25ad
6 changed files with 134 additions and 9 deletions

View File

@@ -2,12 +2,16 @@ package com.accompany.admin.service.statistic;
import com.accompany.admin.mapper.PermitRoomStatsMapper;
import com.accompany.admin.service.base.BaseService;
import com.accompany.admin.vo.stats.PermitRoomRemainRecordVo;
import com.accompany.admin.vo.stats.PermitRoomStatsVo;
import com.accompany.business.service.user.UsersService;
import com.accompany.common.redis.RedisKey;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.common.utils.StringUtils;
import com.accompany.core.model.Users;
import com.accompany.core.service.common.JedisService;
import com.accompany.sharding.mapper.UserInOutRoomRecordMapper;
import com.accompany.sharding.model.UserInOutRoomRecord;
import com.google.common.reflect.TypeToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -26,6 +30,8 @@ public class PermitRoomStatsAdminService extends BaseService {
private JedisService jedisService;
@Autowired
private UserInOutRoomRecordMapper userInOutRoomRecordMapper;
@Autowired
private UsersService usersService;
public List<PermitRoomStatsVo> permitRoomStats(Date startTime, Date endTime, Long erbanNo) {
List<PermitRoomStatsVo> dataList = permitRoomgStatsMapper.permitRoomStatsByDate(startTime, endTime, erbanNo);
@@ -73,5 +79,27 @@ public class PermitRoomStatsAdminService extends BaseService {
return data;
}
public List<PermitRoomRemainRecordVo> permitRoomRemainRecord(Date startTime, Date endTime, Long roomUid) {
List<PermitRoomRemainRecordVo> data = new ArrayList<>();
List<UserInOutRoomRecord> records = userInOutRoomRecordMapper.listPermitRoomRemainRecord(startTime, endTime, roomUid);
if (!CollectionUtils.isEmpty(records)){
List<Long> uids = records.stream().map(UserInOutRoomRecord::getUid).distinct().collect(Collectors.toList());
Map<Long, Users> usersMap = usersService.getUsersMapByUids(uids);
for (UserInOutRoomRecord record: records){
Users u = usersMap.get(record.getUid());
if (null != u){
PermitRoomRemainRecordVo vo = new PermitRoomRemainRecordVo();
vo.setUid(record.getUid());
vo.setErbanNo(u.getErbanNo());
vo.setNick(u.getNick());
vo.setInTimeStr(DateTimeUtil.convertDate(record.getInTime()));
vo.setOutTimeStr(DateTimeUtil.convertDate(record.getOutTime()));
vo.setRemainTimeStr(DateTimeUtil.millisToStr(record.getRemainTime()));
data.add(vo);
}
}
}
return data;
}
}

View File

@@ -0,0 +1,20 @@
package com.accompany.admin.vo.stats;
import lombok.Data;
@Data
public class PermitRoomRemainRecordVo {
private Long uid;
private Long erbanNo;
private String nick;
private String inTimeStr;
private String outTimeStr;
private String remainTimeStr;
}

View File

@@ -5,10 +5,7 @@ import com.accompany.admin.service.statistic.LaborStatsAdminService;
import com.accompany.admin.service.statistic.NewUserStatsAdminService;
import com.accompany.admin.service.statistic.PermitRoomStatsAdminService;
import com.accompany.admin.service.statistic.PermitRoomTimeAdminService;
import com.accompany.admin.vo.stats.LaborStatsVo;
import com.accompany.admin.vo.stats.NewUserStatsVo;
import com.accompany.admin.vo.stats.PermitRoomStatsVo;
import com.accompany.admin.vo.stats.PermitRoomTimeRecordVo;
import com.accompany.admin.vo.stats.*;
import com.accompany.common.redis.RedisKey;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
@@ -120,13 +117,24 @@ public class StatsAdminController extends BaseController {
return permitRoomStatsAdminService.permitRoomStats(startTime, endTime, erbanNo);
}
@RequestMapping("/permitRoomRemain")
public List<PermitRoomRemainRecordVo> permitRoomRemainRecord(String startDate, String endDate, Long roomUid) {
if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
return null;
}
Date startTime = DateTimeUtil.convertStrToDate(startDate, DateTimeUtil.DEFAULT_DATE_PATTERN);
Date endTime = DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN);
endTime = DateTimeUtil.addDays(endTime, 1);
return permitRoomStatsAdminService.permitRoomRemainRecord(startTime, endTime, roomUid);
}
@RequestMapping(value = "/permitRoomExport", method = RequestMethod.POST)
public void permitRoomExport(String startDate, String endDate, Long erbanNo, HttpServletResponse response) throws Exception {
List<PermitRoomStatsVo> dataList = permitRoomStats(startDate, endDate, erbanNo);
String filename = "permitRoomExport.xls";
List<String> fields = Arrays.asList("erbanNo", "roomTitle", "roomDau", "giftUv", "giftAmount", "normalGiftUv",
"normalGiftAmount", "backpackGiftUv", "backpackGiftAmount");
ExcelUtils.exportExcel("牌照房流水统计", filename, fields, dataList, response);
"normalGiftAmount", "backpackGiftUv", "backpackGiftAmount", "remainInRoomNum", "remainInRoomSecond", "hallMemberRoomChatUv", "hallMemberRoomChatNewUv");
ExcelUtils.exportExcel("牌照房数据统计", filename, fields, dataList, response);
}
@RequestMapping(value = "/permitRoomExportByDate", method = RequestMethod.POST)

View File

@@ -25,10 +25,25 @@
<!-- .content -->
<div id="table"></div>
</div>
</section>
<!-- 详情弹窗列表 -->
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="editModalLabel">有效观看明细</h4>
</div>
<div class="modal-body">
<div id="table2"></div>
</div>
</div>
</div>
</div>
<script>
$(function () {
@@ -52,6 +67,11 @@
{field: 'remainInRoomSecond', title: '有效观看秒数', align: 'center', width: '5%'},
{field: 'hallMemberRoomChatUv', title: '陪陪房内私聊人数', align: 'center', width: '5%'},
{field: 'hallMemberRoomChatNewUv', title: '陪陪房内私聊新用户人数', align: 'center', width: '5%'},
{field: 'id', title: '操作', align: 'center', width: '10%', formatter: function (val, row, index) {
return '<button class="btn btn-sm opt-edit" data-id=' + row.uid
+ ' data-startDate=' + $('#qStartDate').val() +' data-endDate=' + $('#qEndDate').val() +'>观看明细</button>'
}
}
],
undefinedText: "-",
cache: false,
@@ -85,6 +105,45 @@
});
// 详情列表信息
$("#table").on("click", '.opt-edit', function () {
const roomUid = $(this).attr("data-id");
const startDate = $(this).attr("data-startDate");
const endDate = $(this).attr("data-endDate");
$('#table2').bootstrapTable('destroy');
$('#table2').bootstrapTable({
columns: [
{field: 'erbanNo', title: '用户ID', align: 'center', width: '5%'},
{field: 'nick', title: '昵称', align: 'center', width: '5%'},
{field: 'inTimeStr', title: '进入时间', align: 'center', width: '10%'},
{field: 'outTimeStr', title: '退出时间', align: 'center', width: '10%'},
{field: 'remainTimeStr', title: '停留时间', align: 'center', width: '5%'},
],
cache: false,
striped: true,
pagination: false,
//search: false,
sidePagination: "none", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
const param = {
roomUid: roomUid,
startDate: startDate,
endDate: endDate
};
return param;
},
url: '/admin/stats/permitRoomRemain.action',
onLoadSuccess: function (res) { //加载成功时执行
console.log("加载成功!");
$("#editModal").modal('show');
},
onLoadError: function (res) { //加载失败时执行
console.log("load fail");
}
});
})
function formatTime(val) {
if (val) {
var date = new Date(val);

View File

@@ -12,4 +12,6 @@ public interface UserInOutRoomRecordMapper extends BaseMapper<UserInOutRoomRecor
List<Map<String, Long>> permitRoomStatsByDate(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("roomUids")List<Long> roomUids);
List<UserInOutRoomRecord> listPermitRoomRemainRecord(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("roomUid")Long roomUid);
}

View File

@@ -5,10 +5,18 @@
<select id="permitRoomStatsByDate" resultType="java.util.Map">
select room_uid `roomUid`, count(distinct uid) `remainInRoomNum`, cast(sum(remain_time) as signed) `remainInRoomTime`
from user_in_out_room_record
where in_time between #{startTime} and #{endTime}
where in_time >= #{startTime} and in_time &lt; #{endTime}
and room_uid in <foreach collection="roomUids" item="roomUid" separator="," open="(" close=")">#{roomUid}</foreach>
and timestampdiff(DAY, in_time, out_time) &lt; 2
and timestampdiff(DAY, in_time, out_time) &lt; 1
group by room_uid having sum(remain_time) >= 3 * 60 * 1000
</select>
<select id="listPermitRoomRemainRecord" resultType="com.accompany.sharding.model.UserInOutRoomRecord">
select uid, room_uid, in_time, out_time, remain_time
from user_in_out_room_record
where in_time >= #{startTime} and in_time &lt; #{endTime}
and room_uid = #{roomUid}
and timestampdiff(DAY, in_time, out_time) &lt; 1
</select>
</mapper>