package cn.stylefeng.guns.modular.business.controller;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.stylefeng.guns.modular.business.dto.StatMentalTestDTO;
|
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.utils.StatDataUtil;
|
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.GetResource;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 统计-心理测试
|
*/
|
@RestController
|
@Api(tags = "统计-心理测试")
|
@ApiResource(name = "统计-心理测试", resBizType = ResBizTypeEnum.BUSINESS)
|
@RequestMapping("/business/statMentalTest")
|
public class StatMentalTestController {
|
|
@Resource
|
private IOrderMentalTestService orderMentalTestService;
|
|
@Resource
|
private IOrderConsultOneService orderConsultOneService;
|
|
@ApiOperation(value = "心理测试订单数据", notes = "类型时间格式:" +
|
"\n1日(yyyy-MM-dd)" +
|
"\n2周(yyyy-ww)eg:2024年第1周 -> 2024-01" +
|
"\n3月(yyyy-MM)" +
|
"\n4年(yyyy)")
|
@GetResource(name = "心理测试订单数据", path = "/mentalTestData", requiredPermission = false)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "type", value = "类型:1日,2周,3月,4年", dataTypeClass = Integer.class, required = true),
|
@ApiImplicitParam(name = "beginTime", value = "开始时间", dataTypeClass = String.class),
|
@ApiImplicitParam(name = "endTime", value = "结束时间", dataTypeClass = String.class),
|
@ApiImplicitParam(name = "workerId", value = "咨询师ID", dataTypeClass = Long.class),
|
})
|
public ResponseData<StatMentalTestDTO> mentalTestData(Integer type, String beginTime, String endTime, Long workerId) {
|
List<String> orderNoList = null;
|
if (workerId != null) {
|
orderNoList = orderConsultOneService.listObjs(
|
Wrappers.<OrderConsultOne>lambdaQuery()
|
.select(OrderConsultOne::getMentalTestOrderNo)
|
.eq(OrderConsultOne::getGoodsId, workerId)
|
.eq(OrderConsultOne::getStatusFlag, OrderStatusFlagEnum.PAY_SUCCESS.getCode())
|
.eq(OrderConsultOne::getStatusFlag, OrderStatusFlagEnum.PAY_SUCCESS.getCode()),
|
o -> StrUtil.toString(o)
|
);
|
if (CollUtil.isEmpty(orderNoList)) {
|
orderNoList = Arrays.asList("0");
|
}
|
}
|
|
// 获取日期格式化SQL
|
String dateFormatSql = StatDataUtil.getDateFormatSql(type);
|
|
// 获取开始时间和结束时间(空使用默认)
|
List<String> timeList = StatDataUtil.getStartAndEndTime(type, beginTime, endTime);
|
beginTime = timeList.get(0);
|
endTime = timeList.get(1);
|
|
// 时间范围
|
List<String> timeRangeList = StatDataUtil.getBeginEndTimeRangeList(type, beginTime, endTime);
|
|
// 待查询订单状态
|
List<Integer> statusFlagList = Arrays.asList(OrderStatusFlagEnum.PAY_SUCCESS.getCode());
|
|
// 统计订单数据
|
List<Map<String, Object>> statOrderList = orderMentalTestService.getStatOrderList(
|
dateFormatSql, beginTime, endTime, null, statusFlagList, orderNoList
|
);
|
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)
|
.in(OrderMentalTest::getStatusFlag, statusFlagList)
|
.in(CollUtil.isNotEmpty(orderNoList), OrderMentalTest::getOrderNo, orderNoList)
|
.ge(StrUtil.isNotBlank(beginTime), OrderMentalTest::getCreateTime, beginTime)
|
.le(StrUtil.isNotBlank(endTime), OrderMentalTest::getCreateTime, endTime)
|
.groupBy(OrderMentalTest::getUserId)
|
).size();
|
|
// 统计订单金额和订单数量
|
List<Map<String, Object>> moneyList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, null
|
);
|
List<Map<String, Object>> numberList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, "number"
|
);
|
|
// 返回数据
|
StatMentalTestDTO dto = StatMentalTestDTO.builder()
|
.moneyList(moneyList)
|
.moneySum(new BigDecimal(moneySum).setScale(2, BigDecimal.ROUND_HALF_UP))
|
.numberList(numberList)
|
.numberSum(numberSum)
|
.userBuyCount(userBuyCount)
|
.build();
|
return new SuccessResponseData(dto);
|
}
|
|
@ApiOperation(value = "1v1咨询订单数据", notes = "类型时间格式:" +
|
"\n1日(yyyy-MM-dd)" +
|
"\n2周(yyyy-ww)eg:2024年第1周 -> 2024-01" +
|
"\n3月(yyyy-MM)" +
|
"\n4年(yyyy)")
|
@GetResource(name = "1v1咨询订单数据", path = "/orderConsultData", requiredPermission = false)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "type", value = "类型:1日,2周,3月,4年", dataTypeClass = Integer.class, required = true),
|
@ApiImplicitParam(name = "beginTime", value = "开始时间", dataTypeClass = String.class),
|
@ApiImplicitParam(name = "endTime", value = "结束时间", dataTypeClass = String.class),
|
@ApiImplicitParam(name = "workerId", value = "咨询师ID", dataTypeClass = Long.class),
|
})
|
public ResponseData<StatMentalTestDTO> orderConsultData(Integer type, String beginTime, String endTime, Long workerId) {
|
// 获取日期格式化SQL
|
String dateFormatSql = StatDataUtil.getDateFormatSql(type);
|
|
// 获取开始时间和结束时间(空使用默认)
|
List<String> timeList = StatDataUtil.getStartAndEndTime(type, beginTime, endTime);
|
beginTime = timeList.get(0);
|
endTime = timeList.get(1);
|
|
// 时间范围
|
List<String> timeRangeList = StatDataUtil.getBeginEndTimeRangeList(type, beginTime, endTime);
|
|
// 待查询订单状态
|
List<Integer> statusFlagList = Arrays.asList(OrderStatusFlagEnum.PAY_SUCCESS.getCode());
|
|
// 统计订单数据
|
List<Map<String, Object>> statOrderList = orderConsultOneService.getStatOrderList(
|
dateFormatSql, beginTime, endTime, workerId, statusFlagList
|
);
|
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(workerId != null, OrderConsultOne::getGoodsId, workerId)
|
.in(OrderConsultOne::getStatusFlag, statusFlagList)
|
.ge(StrUtil.isNotBlank(beginTime), OrderConsultOne::getCreateTime, beginTime)
|
.le(StrUtil.isNotBlank(endTime), OrderConsultOne::getCreateTime, endTime)
|
.groupBy(OrderConsultOne::getUserId)
|
).size();
|
|
// 统计订单金额和订单数量
|
List<Map<String, Object>> moneyList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, null
|
);
|
List<Map<String, Object>> numberList = StatDataUtil.wrapperTimeLIst(
|
timeRangeList, statOrderList, "number"
|
);
|
|
// 返回数据
|
StatMentalTestDTO dto = StatMentalTestDTO.builder()
|
.moneyList(moneyList)
|
.moneySum(new BigDecimal(moneySum).setScale(2, BigDecimal.ROUND_HALF_UP))
|
.numberList(numberList)
|
.numberSum(numberSum)
|
.userBuyCount(userBuyCount)
|
.build();
|
return new SuccessResponseData(dto);
|
}
|
|
}
|