package cn.stylefeng.rest.modular.worker.controller;
|
|
import cn.hutool.core.util.StrUtil;
|
import cn.stylefeng.guns.modular.business.dto.TotalResponseDTO;
|
import cn.stylefeng.guns.modular.business.dto.request.TotalRequest;
|
import cn.stylefeng.guns.modular.business.entity.OrderConsultOne;
|
import cn.stylefeng.guns.modular.business.entity.OrderMentalTest;
|
import cn.stylefeng.guns.modular.business.service.IOrderConsultOneService;
|
import cn.stylefeng.guns.modular.business.service.IOrderMentalTestService;
|
import cn.stylefeng.guns.modular.business.service.ITotalReportService;
|
import cn.stylefeng.guns.utils.StatDataUtil;
|
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
|
import cn.stylefeng.roses.kernel.rule.annotation.BusinessLog;
|
import cn.stylefeng.roses.kernel.rule.enums.OrderStatusFlagEnum;
|
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.util.Arrays;
|
import java.util.List;
|
import java.util.Map;
|
|
@RestController
|
@Api(tags = "工作人员-数据统计")
|
@ApiResource(name = "工作人员-数据统计", resBizType = ResBizTypeEnum.BUSINESS)
|
@RequestMapping("/worker/totalReport")
|
public class TotalReportController {
|
|
@Autowired
|
private ITotalReportService totalReportService;
|
|
@Autowired
|
private IOrderMentalTestService orderMentalTestService;
|
|
@Autowired
|
private IOrderConsultOneService orderConsultOneService;
|
|
@ApiOperation("课程数据统计")
|
@PostResource(name = "课程数据统计", path = "/courseTotalData")
|
@BusinessLog
|
public ResponseData<TotalResponseDTO> courseTotalData(@RequestBody TotalRequest totalRequest){
|
totalRequest.setUserId(LoginContext.me().getLoginUser().getUserId());
|
// 获取日期格式化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);
|
totalResponseDTO.setMoneySum(moneySum);
|
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){
|
totalRequest.setUserId(LoginContext.me().getLoginUser().getUserId());
|
// 获取日期格式化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);
|
totalResponseDTO.setMoneySum(moneySum);
|
totalResponseDTO.setMoneyList(moneyList);
|
totalResponseDTO.setNumberList(numberList);
|
totalResponseDTO.setCounsellingInfoTypeList(counsellingTypeList);
|
totalResponseDTO.setCounsellingTypeNumList(counsellingOrderTypeList);
|
return new SuccessResponseData<>(totalResponseDTO);
|
}
|
|
@ApiOperation("心理测试数据统计")
|
@PostResource(name = "心理测试数据统计", path = "/mentalTestTotalData")
|
@BusinessLog
|
public ResponseData<TotalResponseDTO> mentalTestTotalData(@RequestBody TotalRequest totalRequest){
|
totalRequest.setUserId(LoginContext.me().getLoginUser().getUserId());
|
// 获取日期格式化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.mentalTestTotalData(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 = orderMentalTestService.list(
|
Wrappers.<OrderMentalTest>lambdaQuery()
|
.select(OrderMentalTest::getUserId)
|
.eq(OrderMentalTest::getStatusFlag, OrderStatusFlagEnum.PAY_SUCCESS.getCode())
|
.ge(StrUtil.isNotBlank(totalRequest.getBeginTime()), OrderMentalTest::getCreateTime, totalRequest.getBeginTime())
|
.le(StrUtil.isNotBlank(totalRequest.getEndTime()), OrderMentalTest::getCreateTime, totalRequest.getEndTime())
|
.groupBy(OrderMentalTest::getUserId)
|
).size();
|
|
// 统计订单金额和订单数量
|
List<Map<String, Object>> moneyList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, null
|
);
|
List<Map<String, Object>> numberList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, "number"
|
);
|
|
TotalResponseDTO totalResponseDTO = new TotalResponseDTO();
|
totalResponseDTO.setNumberSum(numberSum);
|
totalResponseDTO.setUserBuyCount(userBuyCount);
|
totalResponseDTO.setMoneySum(moneySum);
|
totalResponseDTO.setMoneyList(moneyList);
|
totalResponseDTO.setNumberList(numberList);
|
return new SuccessResponseData<>(totalResponseDTO);
|
}
|
|
@ApiOperation("心理测试咨询数据统计")
|
@PostResource(name = "心理测试咨询数据统计", path = "/orderConsultOneTotalData")
|
@BusinessLog
|
public ResponseData<TotalResponseDTO> orderConsultOneTotalData(@RequestBody TotalRequest totalRequest){
|
totalRequest.setUserId(LoginContext.me().getLoginUser().getUserId());
|
// 获取日期格式化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.orderConsultOneTotalData(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 = orderConsultOneService.list(
|
Wrappers.<OrderConsultOne>lambdaQuery()
|
.select(OrderConsultOne::getUserId)
|
.eq(OrderConsultOne::getStatusFlag, OrderStatusFlagEnum.PAY_SUCCESS.getCode())
|
.ge(StrUtil.isNotBlank(totalRequest.getBeginTime()), OrderConsultOne::getCreateTime, totalRequest.getBeginTime())
|
.le(StrUtil.isNotBlank(totalRequest.getEndTime()), OrderConsultOne::getCreateTime, totalRequest.getEndTime())
|
.groupBy(OrderConsultOne::getUserId)
|
).size();
|
|
// 统计订单金额和订单数量
|
List<Map<String, Object>> moneyList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, null
|
);
|
List<Map<String, Object>> numberList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, "number"
|
);
|
|
TotalResponseDTO totalResponseDTO = new TotalResponseDTO();
|
totalResponseDTO.setNumberSum(numberSum);
|
totalResponseDTO.setUserBuyCount(userBuyCount);
|
totalResponseDTO.setMoneySum(moneySum);
|
totalResponseDTO.setMoneyList(moneyList);
|
totalResponseDTO.setNumberList(numberList);
|
return new SuccessResponseData<>(totalResponseDTO);
|
}
|
|
}
|