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 courseTotalData(@RequestBody TotalRequest totalRequest){ totalRequest.setUserId(LoginContext.me().getLoginUser().getUserId()); // 获取日期格式化SQL String dateFormatSql = StatDataUtil.getDateFormatSql(totalRequest.getType()); totalRequest.setDateFormat(dateFormatSql); // 获取开始时间和结束时间(空使用默认) List timeList = StatDataUtil.getStartAndEndTime(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime()); totalRequest.setBeginTime(timeList.get(0)); totalRequest.setEndTime(timeList.get(1)); // 时间范围 List timeRangeList = StatDataUtil.getBeginEndTimeRangeList(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime()); // 统计订单数据 List> 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> moneyList = StatDataUtil.wrapperTimeLIst( timeRangeList, statOrderList, null ); List> numberList = StatDataUtil.wrapperTimeLIst( timeRangeList, statOrderList, "number" ); //课程统计 List> courseList = this.totalReportService.courseNameTotalData(totalRequest); //课程标签 List> 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 counsellingTotalData(@RequestBody TotalRequest totalRequest){ totalRequest.setUserId(LoginContext.me().getLoginUser().getUserId()); // 获取日期格式化SQL String dateFormatSql = StatDataUtil.getDateFormatSql(totalRequest.getType()); totalRequest.setDateFormat(dateFormatSql); // 获取开始时间和结束时间(空使用默认) List timeList = StatDataUtil.getStartAndEndTime(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime()); totalRequest.setBeginTime(timeList.get(0)); totalRequest.setEndTime(timeList.get(1)); // 时间范围 List timeRangeList = StatDataUtil.getBeginEndTimeRangeList(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime()); // 统计订单数据 List> 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> moneyList = StatDataUtil.wrapperTimeLIst( timeRangeList, statOrderList, null ); List> numberList = StatDataUtil.wrapperTimeLIst( timeRangeList, statOrderList, "number" ); //订单类型统计 List> counsellingOrderTypeList = this.totalReportService.counsellingOrderTypeTotalData(totalRequest); //咨询师类型 List> 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 mentalTestTotalData(@RequestBody TotalRequest totalRequest){ totalRequest.setUserId(LoginContext.me().getLoginUser().getUserId()); // 获取日期格式化SQL String dateFormatSql = StatDataUtil.getDateFormatSql(totalRequest.getType()); totalRequest.setDateFormat(dateFormatSql); // 获取开始时间和结束时间(空使用默认) List timeList = StatDataUtil.getStartAndEndTime(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime()); totalRequest.setBeginTime(timeList.get(0)); totalRequest.setEndTime(timeList.get(1)); // 时间范围 List timeRangeList = StatDataUtil.getBeginEndTimeRangeList(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime()); // 统计订单数据 List> 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.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> moneyList = StatDataUtil.wrapperTimeLIst( timeRangeList, statOrderList, null ); List> 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 orderConsultOneTotalData(@RequestBody TotalRequest totalRequest){ totalRequest.setUserId(LoginContext.me().getLoginUser().getUserId()); // 获取日期格式化SQL String dateFormatSql = StatDataUtil.getDateFormatSql(totalRequest.getType()); totalRequest.setDateFormat(dateFormatSql); // 获取开始时间和结束时间(空使用默认) List timeList = StatDataUtil.getStartAndEndTime(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime()); totalRequest.setBeginTime(timeList.get(0)); totalRequest.setEndTime(timeList.get(1)); // 时间范围 List timeRangeList = StatDataUtil.getBeginEndTimeRangeList(totalRequest.getType(), totalRequest.getBeginTime(), totalRequest.getEndTime()); // 统计订单数据 List> 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.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> moneyList = StatDataUtil.wrapperTimeLIst( timeRangeList, statOrderList, null ); List> 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); } }