package cn.stylefeng.guns.modular.business.controller;
|
|
import cn.stylefeng.guns.modular.business.dto.StatMentalTestDTO;
|
import cn.stylefeng.guns.modular.business.dto.TotalResponseDTO;
|
import cn.stylefeng.guns.modular.business.dto.request.TotalRequest;
|
import cn.stylefeng.guns.modular.business.entity.OrderMentalTest;
|
import cn.stylefeng.guns.modular.business.service.ITotalReportService;
|
import cn.stylefeng.guns.utils.StatDataUtil;
|
import cn.stylefeng.roses.kernel.rule.annotation.BusinessLog;
|
import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum;
|
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
|
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
|
import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
|
import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.math.BigDecimal;
|
import java.util.List;
|
import java.util.Map;
|
|
@RestController
|
@Api(tags = "数据统计")
|
@ApiResource(name = "数据统计", resBizType = ResBizTypeEnum.BUSINESS)
|
@RequestMapping("/business/totalReport")
|
public class TotalReportController {
|
|
|
@Autowired
|
private ITotalReportService totalReportService;
|
|
@ApiOperation("课程数据统计")
|
@PostResource(name = "课程数据统计", path = "/courseTotalData")
|
@BusinessLog
|
public ResponseData<TotalResponseDTO> courseTotalData(@RequestBody TotalRequest totalRequest){
|
// 获取日期格式化SQL
|
String dateFormatSql = StatDataUtil.getDateFormatSql(totalRequest.getType());
|
totalRequest.setDateFormat(dateFormatSql);
|
// 获取开始时间和结束时间(空使用默认)
|
List<String> timeList = StatDataUtil.getStartAndEndTime(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime());
|
totalRequest.setBeginTime(timeList.get(0));
|
totalRequest.setEndTime(timeList.get(1));
|
|
// 时间范围
|
List<String> timeRangeList = StatDataUtil.getBeginEndTimeRangeList(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime());
|
|
// 统计订单数据
|
List<Map<String, Object>> statOrderList = this.totalReportService.courseTotalData(totalRequest);
|
Double moneySum = statOrderList.stream()
|
.mapToDouble(item -> Double.parseDouble(item.get("data").toString()))
|
.sum();
|
Double numberSum = statOrderList.stream()
|
.mapToDouble(item -> Double.parseDouble(item.get("number").toString()))
|
.sum();
|
long userBuyCount = totalReportService.courseBuyTotal(totalRequest);
|
|
// 统计订单金额和订单数量
|
List<Map<String, Object>> moneyList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, null
|
);
|
List<Map<String, Object>> numberList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, "number"
|
);
|
//课程统计
|
List<Map<String,Object>> courseList = this.totalReportService.courseNameTotalData(totalRequest);
|
|
//课程标签
|
List<Map<String,Object>> courseTagList = this.totalReportService.courseTagTotalData(totalRequest);
|
TotalResponseDTO totalResponseDTO = new TotalResponseDTO();
|
totalResponseDTO.setNumberSum(numberSum);
|
totalResponseDTO.setUserBuyCount(userBuyCount);
|
BigDecimal money = new BigDecimal(moneySum);
|
totalResponseDTO.setMoneySum(money.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
totalResponseDTO.setMoneyList(moneyList);
|
totalResponseDTO.setNumberList(numberList);
|
totalResponseDTO.setCourseSaleNumberList(courseList);
|
totalResponseDTO.setCourseTagsList(courseTagList);
|
return new SuccessResponseData<>(totalResponseDTO);
|
}
|
|
@ApiOperation("咨询数据统计")
|
@PostResource(name = "咨询数据统计", path = "/counsellingTotalData")
|
@BusinessLog
|
public ResponseData<TotalResponseDTO> counsellingTotalData(@RequestBody TotalRequest totalRequest){
|
// 获取日期格式化SQL
|
String dateFormatSql = StatDataUtil.getDateFormatSql(totalRequest.getType());
|
totalRequest.setDateFormat(dateFormatSql);
|
// 获取开始时间和结束时间(空使用默认)
|
List<String> timeList = StatDataUtil.getStartAndEndTime(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime());
|
totalRequest.setBeginTime(timeList.get(0));
|
totalRequest.setEndTime(timeList.get(1));
|
|
// 时间范围
|
List<String> timeRangeList = StatDataUtil.getBeginEndTimeRangeList(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime());
|
|
// 统计订单数据
|
List<Map<String, Object>> statOrderList = this.totalReportService.counsellingTotalData(totalRequest);
|
Double moneySum = statOrderList.stream()
|
.mapToDouble(item -> Double.parseDouble(item.get("data").toString()))
|
.sum();
|
Double numberSum = statOrderList.stream()
|
.mapToDouble(item -> Double.parseDouble(item.get("number").toString()))
|
.sum();
|
long userBuyCount = totalReportService.counsellingBuyTotal(totalRequest);
|
|
// 统计订单金额和订单数量
|
List<Map<String, Object>> moneyList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, null
|
);
|
List<Map<String, Object>> numberList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, "number"
|
);
|
//订单类型统计
|
List<Map<String,Object>> counsellingOrderTypeList = this.totalReportService.counsellingOrderTypeTotalData(totalRequest);
|
|
//咨询师类型
|
List<Map<String,Object>> counsellingTypeList = this.totalReportService.counsellingTypeTotalData(totalRequest);
|
TotalResponseDTO totalResponseDTO = new TotalResponseDTO();
|
totalResponseDTO.setNumberSum(numberSum);
|
totalResponseDTO.setUserBuyCount(userBuyCount);
|
BigDecimal money = new BigDecimal(moneySum);
|
totalResponseDTO.setMoneySum(money.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
totalResponseDTO.setMoneyList(moneyList);
|
totalResponseDTO.setNumberList(numberList);
|
totalResponseDTO.setCounsellingInfoTypeList(counsellingTypeList);
|
totalResponseDTO.setCounsellingTypeNumList(counsellingOrderTypeList);
|
return new SuccessResponseData<>(totalResponseDTO);
|
}
|
}
|