公会-运营统计-后台

This commit is contained in:
khalil
2025-07-16 18:07:06 +08:00
parent ccf5293f81
commit 541a543891
3 changed files with 275 additions and 0 deletions

View File

@@ -0,0 +1,111 @@
package com.accompany.admin.vo.guild;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@ApiModel
@Data
public class WeekGuildPartitionStatAdminVo {
@TableId
@ApiModelProperty("日期")
private String date;
@ApiModelProperty("周日")
private String endDate;
@ApiModelProperty("分区id")
private Integer partitionId;
@ApiModelProperty("分区描述")
private String partitionDesc;
@ApiModelProperty("新增公会数")
private Integer newGuildCount;
@ApiModelProperty("新增活跃公会数")
private Integer newActiveGuildCount;
@ApiModelProperty("新增公会总金币流水")
private BigDecimal newGuildTotalDiamondFlow;
@ApiModelProperty("新增公会总钻石流水")
private BigDecimal newGuildTotalGoldFlow;
@ApiModelProperty("公会数")
private Integer guildCount;
@ApiModelProperty("活跃公会数")
private Integer activeGuildCount;
@ApiModelProperty("公会总金币流水")
private BigDecimal guildTotalDiamondFlow;
@ApiModelProperty("公会总钻石流水")
private BigDecimal guildTotalGoldFlow;
@ApiModelProperty("公会新增主播数")
private Integer newGuildMemberCount;
@ApiModelProperty("公会新增活跃主播数")
private Integer newGuildMemberActiveCount;
@ApiModelProperty("公会主播数")
private Integer guildMemberCount;
@ApiModelProperty("活跃公会主播数")
private Integer activeGuildMemberCount;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("后台操作人id")
private Integer adminId;
@ApiModelProperty("后台操作人名称")
private String adminName;
@ApiModelProperty("上周新增公会数")
private Integer lastWeekNewGuildCount;
@ApiModelProperty("上周新增公会数环比")
private BigDecimal lastWeekNewGuildCountWow;
@ApiModelProperty("上周新增活跃公会数")
private Integer lastWeekNewActiveGuildCount;
@ApiModelProperty("上周新增活跃公会数环比")
private BigDecimal lastWeekNewActiveGuildCountWow;
@ApiModelProperty("上周新增公会金币流水")
private BigDecimal lastWeekNewGuildTotalDiamondFlow;
@ApiModelProperty("上周新增公会金币流水环比")
private BigDecimal lastWeekNewGuildTotalDiamondFlowWow;
@ApiModelProperty("上周新增公会钻石流水")
private BigDecimal lastWeekNewGuildTotalGoldFlow;
@ApiModelProperty("上周新增公会钻石流水环比")
private BigDecimal lastWeekNewGuildTotalGoldFlowWow;
@ApiModelProperty("上周公会数")
private Integer lastWeekGuildCount;
@ApiModelProperty("上周公会数环比")
private BigDecimal lastWeekGuildCountWow;
@ApiModelProperty("上周活跃公会数")
private Integer lastWeekActiveGuildCount;
@ApiModelProperty("上周活跃公会数环比")
private BigDecimal lastWeekActiveGuildCountWow;
@ApiModelProperty("上周公会总金币流水")
private BigDecimal lastWeekGuildTotalDiamondFlow;
@ApiModelProperty("上周公会总金币流水环比")
private BigDecimal lastWeekGuildTotalDiamondFlowWow;
@ApiModelProperty("上周公会总钻石流水")
private BigDecimal lastWeekGuildTotalGoldFlow;
@ApiModelProperty("上周公会总钻石流水环比")
private BigDecimal lastWeekGuildTotalGoldFlowWow;
@ApiModelProperty("上周新增公会主播数")
private Integer lastWeekNewGuildMemberCount;
@ApiModelProperty("上周新增公会主播数环比")
private BigDecimal lastWeekNewGuildMemberCountWow;
@ApiModelProperty("上周新增公会主播活跃数")
private Integer lastWeekNewGuildMemberActiveCount;
@ApiModelProperty("上周新增公会主播活跃数环比")
private BigDecimal lastWeekNewGuildMemberActiveCountWow;
@ApiModelProperty("上周公会主播数")
private Integer lastWeekGuildMemberCount;
@ApiModelProperty("上周公会主播数环比")
private BigDecimal lastWeekGuildMemberCountWow;
@ApiModelProperty("上周公会主播活跃数")
private Integer lastWeekActiveGuildMemberCount;
@ApiModelProperty("上周公会主播活跃数环比")
private BigDecimal lastWeekActiveGuildMemberCountWow;
}

View File

@@ -0,0 +1,74 @@
package com.accompany.admin.service.guild;
import com.accompany.admin.service.system.AdminUserService;
import com.accompany.admin.vo.guild.WeekGuildPartitionStatAdminVo;
import com.accompany.business.model.WeekGuildPartitionStat;
import com.accompany.business.mybatismapper.WeekGuildPartitionStatMapper;
import com.accompany.business.param.BasePageParams;
import com.accompany.core.enumeration.PartitionEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
@Service
public class WeekGuildPartitionStatAdminService {
@Autowired
private WeekGuildPartitionStatMapper mapper;
@Autowired
private AdminUserService adminUserService;
public Page<WeekGuildPartitionStatAdminVo> page(Integer partitionId, String date,
BasePageParams pageParam) {
Page<WeekGuildPartitionStatAdminVo> voPage = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
Page<WeekGuildPartitionStat> poPage = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
LambdaQueryWrapper<WeekGuildPartitionStat> queryWrapper = Wrappers.<WeekGuildPartitionStat>lambdaQuery()
.eq(StringUtils.isNotBlank(date), WeekGuildPartitionStat::getDate, date)
.eq(null != partitionId, WeekGuildPartitionStat::getPartitionId, partitionId)
.orderByDesc(WeekGuildPartitionStat::getDate, WeekGuildPartitionStat::getGuildTotalDiamondFlow);
mapper.selectPage(poPage, queryWrapper);
if (CollectionUtils.isEmpty(poPage.getRecords())){
return voPage;
}
Map<Integer, String> adminNameMap = adminUserService.adminUserMap();
List<WeekGuildPartitionStatAdminVo> voList = poPage.getRecords().stream()
.map(po -> {
WeekGuildPartitionStatAdminVo vo = new WeekGuildPartitionStatAdminVo();
vo.setDate(po.getDate());
vo.setEndDate(po.getEndDate());
vo.setPartitionId(po.getPartitionId());
vo.setPartitionDesc(PartitionEnum.getByPartitionId(po.getPartitionId()).getDesc());
BeanUtils.copyProperties(po, vo);
if (null != po.getAdminId()){
vo.setAdminName(adminNameMap.get(po.getAdminId()));
}
return vo;
})
.toList();
voPage.setRecords(voList);
voPage.setTotal(poPage.getTotal());
return voPage;
}
public void mark(Integer partitionId, String date, String remark, int adminId) {
mapper.update(Wrappers.<WeekGuildPartitionStat>lambdaUpdate()
.eq(WeekGuildPartitionStat::getDate, date)
.eq(WeekGuildPartitionStat::getPartitionId, partitionId)
.set(WeekGuildPartitionStat::getRemark, remark)
.set(WeekGuildPartitionStat::getAdminId, adminId));
}
}

View File

@@ -0,0 +1,90 @@
package com.accompany.admin.controller.guild;
import com.accompany.admin.controller.BaseController;
import com.accompany.admin.service.guild.WeekGuildPartitionStatAdminService;
import com.accompany.admin.vo.guild.WeekGuildPartitionStatAdminVo;
import com.accompany.business.param.BasePageParams;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.util.StringUtils;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@Api(tags = "公会运营")
@RequestMapping("/admin/guildPartition")
@RestController
public class GuildPartitionAdminController extends BaseController {
@Autowired
private WeekGuildPartitionStatAdminService statService;
@ApiOperation("分页查询周统计")
@ApiImplicitParams({
@ApiImplicitParam(name = "partitionId", value = "分区id"),
@ApiImplicitParam(name = "date", value = "周期开始日期"),
@ApiImplicitParam(name = "pageNo", value = "页码", required = true),
@ApiImplicitParam(name = "pageSize", value = "页长", required = true),
})
@GetMapping("/pageWeekStat")
public BusiResult<Page<WeekGuildPartitionStatAdminVo>> page(Integer partitionId,
String date,
BasePageParams pageParam) {
Page<WeekGuildPartitionStatAdminVo> page = statService.page(partitionId, date, pageParam);
return BusiResult.success(page);
}
@SneakyThrows
@ApiOperation("导出周统计")
@ApiImplicitParams({
@ApiImplicitParam(name = "partitionId", value = "分区id"),
@ApiImplicitParam(name = "date", value = "周期开始日期"),
})
@GetMapping("/exportWeekStat")
public void export(HttpServletResponse response,
Integer partitionId,
String date){
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码
String excelName = URLEncoder.encode("运营公会/主播分析", StandardCharsets.UTF_8);
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
BasePageParams pageParam = new BasePageParams();
pageParam.setPageNo(1);
pageParam.setPageSize(-1);
Page<WeekGuildPartitionStatAdminVo> page = statService.page(partitionId, date, pageParam);
EasyExcel.write(response.getOutputStream(), WeekGuildPartitionStatAdminVo.class).sheet("运营公会/主播分析").doWrite(page.getRecords());
}
@ApiOperation("备注周统计")
@ApiImplicitParams({
@ApiImplicitParam(name = "date", value = "周期开始日期", required = true),
@ApiImplicitParam(name = "partitionId", value = "分区id", required = true),
@ApiImplicitParam(name = "remark", value = "备注", required = true),
})
@PostMapping("/mark")
public BusiResult<Void> markDetail(String date,
Integer partitionId,
String remark) {
if (StringUtils.isAnyBlank(date, remark) || null == partitionId){
throw new AdminServiceException(BusiStatus.PARAMERROR);
}
int adminId = getAdminId();
statService.mark(partitionId, date, remark, adminId);
return BusiResult.success();
}
}