|
@@ -10,6 +10,7 @@ import com.zanxiang.game.gs.data.serve.pojo.vo.RolePayVO;
|
|
|
import com.zanxiang.game.gs.data.serve.service.ISysUserService;
|
|
|
import com.zanxiang.module.util.DateUtil;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.zanxiang.game.gs.data.serve.service.IAdsRoleAmountRateParentService;
|
|
|
import com.zanxiang.game.gs.data.serve.pojo.entity.game.parent.AdsRoleAmountRateParent;
|
|
@@ -23,6 +24,7 @@ import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import static com.mybatisflex.core.query.QueryMethods.*;
|
|
|
import static com.zanxiang.game.gs.data.serve.pojo.entity.game.parent.table.AdsRoleAmountDataParentTableDef.ADS_ROLE_AMOUNT_DATA_PARENT;
|
|
|
import static com.zanxiang.game.gs.data.serve.pojo.entity.game.parent.table.AdsRoleAmountRateParentTableDef.ADS_ROLE_AMOUNT_RATE_PARENT;
|
|
|
|
|
@@ -55,8 +57,64 @@ public class AdsRoleAmountRateParentServiceImpl extends ServiceImpl<AdsRoleAmoun
|
|
|
return new PageVO<>(paginate);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public RolePayVO rolePayTotal(RolePayDTO dto) {
|
|
|
+ QueryWrapper rolePayWrapper = getRolePayTotalWrapper(dto);
|
|
|
+ return getMapper().selectOneByQueryAs(rolePayWrapper, RolePayVO.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ private QueryWrapper getRolePayTotalWrapper(RolePayDTO dto) {
|
|
|
+ return QueryWrapper.create()
|
|
|
+ .from(ADS_ROLE_AMOUNT_RATE_PARENT)
|
|
|
+ .select(getDayN())
|
|
|
+ .select(sum(ADS_ROLE_AMOUNT_RATE_PARENT.ROLE_AMOUNT_NUM).as(ADS_ROLE_AMOUNT_RATE_PARENT.ROLE_AMOUNT_NUM.getName()))
|
|
|
+ .select(sum(ADS_ROLE_AMOUNT_RATE_PARENT.ORDER_COUNT).as(ADS_ROLE_AMOUNT_RATE_PARENT.ORDER_COUNT.getName()))
|
|
|
+ .select(sum(ADS_ROLE_AMOUNT_RATE_PARENT.TOTAL_AMOUNT).as(ADS_ROLE_AMOUNT_RATE_PARENT.TOTAL_AMOUNT.getName()))
|
|
|
+ .select(sum(ADS_ROLE_AMOUNT_RATE_PARENT.ROLE_NUM).as(ADS_ROLE_AMOUNT_RATE_PARENT.ROLE_NUM.getName()))
|
|
|
+ .select("ROUND(IF(SUM(role_amount_num) > 0 , SUM(total_amount) / SUM(role_amount_num), 0), 4) AS gs_arppu")
|
|
|
+ .select("ROUND(IF(SUM(order_count) > 0 , SUM(total_amount) / SUM(order_count), 0), 4) AS gs_avg")
|
|
|
+ .select("ROUND(IF(SUM(role_num) > 0 , SUM(role_amount_num) / SUM(role_num), 0), 4) AS gs_rate")
|
|
|
+ .ge(AdsRoleAmountRateParent::getDt, dto.getDtBegin(), null != dto.getDtBegin())
|
|
|
+ .le(AdsRoleAmountRateParent::getDt, dto.getDtEnd(), null != dto.getDtEnd())
|
|
|
+ .in(AdsRoleAmountRateParent::getGsId, dto.getGsIdList(), CollectionUtils.isNotEmpty(dto.getGsIdList()));
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getDayN() {
|
|
|
+ StringBuilder currDayN = new StringBuilder(StringUtils.EMPTY);
|
|
|
+ for (int day = 1; day <= 90; day++) {
|
|
|
+ String dayN = "da" + day;
|
|
|
+ daySplit(currDayN, dayN);
|
|
|
+ }
|
|
|
+ for (int month = 4; month <= 12; month++) {
|
|
|
+ String mN = "m" + month;
|
|
|
+ daySplit(currDayN, mN);
|
|
|
+ }
|
|
|
+ String total = "total";
|
|
|
+ daySplit(currDayN, total);
|
|
|
+ // 移除最后一个逗号和空格
|
|
|
+ if (currDayN.length() > 0) {
|
|
|
+ currDayN.setLength(currDayN.length() - 2);
|
|
|
+ }
|
|
|
+ //返回结果
|
|
|
+ return currDayN.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void daySplit(StringBuilder totalDayN, String dayN) {
|
|
|
+ totalDayN.append(" CONCAT_WS('/', ")
|
|
|
+ .append("SUM(SPLIT_PART(").append(dayN).append(", '/', 1)), ")
|
|
|
+ .append("SUM(SPLIT_PART(").append(dayN).append(", '/', 2)), ")
|
|
|
+ .append("SUM(SPLIT_PART(").append(dayN).append(", '/', 3)), ")
|
|
|
+ .append("SUM(SPLIT_PART(").append(dayN).append(", '/', 4)), ")
|
|
|
+ .append("ROUND(IF(SUM(SPLIT_PART(").append(dayN).append(", '/', 1)) > 0, ")
|
|
|
+ .append("SUM(SPLIT_PART(").append(dayN).append(", '/', 2)) / SUM(SPLIT_PART(").append(dayN).append(", '/', 1)), 0), 4), ")
|
|
|
+ .append("ROUND(IF(SUM(role_num) > 0, SUM(SPLIT_PART(").append(dayN).append(", '/', 1)) / SUM(role_num), 0), 4), ")
|
|
|
+ .append("ROUND(IF(SUM(role_num) > 0, SUM(SPLIT_PART(").append(dayN).append(", '/', 2)) / SUM(role_num), 0), 4)) ")
|
|
|
+ .append("as ").append(dayN).append(", ");
|
|
|
+ }
|
|
|
+
|
|
|
private QueryWrapper getRolePayWrapper(RolePayDTO dto) {
|
|
|
return QueryWrapper.create()
|
|
|
+ .from(ADS_ROLE_AMOUNT_RATE_PARENT)
|
|
|
.select(ADS_ROLE_AMOUNT_RATE_PARENT.ALL_COLUMNS)
|
|
|
.ge(AdsRoleAmountRateParent::getDt, dto.getDtBegin(), null != dto.getDtBegin())
|
|
|
.le(AdsRoleAmountRateParent::getDt, dto.getDtEnd(), null != dto.getDtEnd())
|