牌照房数据统计-停留明细
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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">×</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);
|
||||
|
@@ -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);
|
||||
|
||||
}
|
@@ -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 < #{endTime}
|
||||
and room_uid in <foreach collection="roomUids" item="roomUid" separator="," open="(" close=")">#{roomUid}</foreach>
|
||||
and timestampdiff(DAY, in_time, out_time) < 2
|
||||
and timestampdiff(DAY, in_time, out_time) < 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 < #{endTime}
|
||||
and room_uid = #{roomUid}
|
||||
and timestampdiff(DAY, in_time, out_time) < 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
Reference in New Issue
Block a user