|
@@ -1,19 +1,30 @@
|
|
|
package com.txz.mall.controller;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.date.DateField;
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import com.txz.mall.business.PinkServiceBusiness;
|
|
|
import com.txz.mall.core.Result;
|
|
|
import com.txz.mall.core.ResultCode;
|
|
|
+import com.txz.mall.core.ResultGenerator;
|
|
|
+import com.txz.mall.core.ServiceException;
|
|
|
+import com.txz.mall.dao.StorePinkMapper;
|
|
|
+import com.txz.mall.enums.PinkOrderStatusEnum;
|
|
|
+import com.txz.mall.enums.StorePinkStatusEnum;
|
|
|
import com.txz.mall.model.StoreOrder;
|
|
|
import com.txz.mall.model.StorePink;
|
|
|
import com.txz.mall.service.StorePinkService;
|
|
|
+import com.txz.mall.util.I18nUtil;
|
|
|
+import com.txz.mall.web.param.OrderStatisticsParam;
|
|
|
import com.txz.mall.web.param.StorePinkParam;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.util.ObjectUtils;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import tk.mybatis.mapper.entity.Condition;
|
|
|
import tk.mybatis.mapper.entity.Example;
|
|
@@ -21,6 +32,9 @@ import vo.StorePinkDetailVO;
|
|
|
import vo.StorePinkOngoingVO;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
@@ -186,4 +200,120 @@ public class PinkController {
|
|
|
storePinkService.theSelection(orderId,new Date());
|
|
|
return Result.success();
|
|
|
}
|
|
|
+ @Resource
|
|
|
+ private StorePinkMapper storePinkMapper;
|
|
|
+ @ApiOperation(value = "订单统计")
|
|
|
+ @PostMapping(value = "/Order/Statistics")
|
|
|
+ public Result orderStatistics(@RequestBody OrderStatisticsParam orderStatisticsParam) {
|
|
|
+
|
|
|
+ //统计周期1.天 2.周 3.月 4.年
|
|
|
+ Date date = new Date();
|
|
|
+ DateTime offsetDate = null;
|
|
|
+ if(new Integer(1).equals(orderStatisticsParam.getStatisticsPeriod())){
|
|
|
+ offsetDate = DateUtil.offsetDay(date, -1);
|
|
|
+ }else if(new Integer(2).equals(orderStatisticsParam.getStatisticsPeriod())){
|
|
|
+ offsetDate = DateUtil.offsetWeek(date,-1);
|
|
|
+ }else if(new Integer(3).equals(orderStatisticsParam.getStatisticsPeriod())){
|
|
|
+ offsetDate = DateUtil.offsetMonth(date,-1);
|
|
|
+ }else if(new Integer(4).equals(orderStatisticsParam.getStatisticsPeriod())){
|
|
|
+ offsetDate = DateUtil.offset(date, DateField.DAY_OF_YEAR, -1);
|
|
|
+ }
|
|
|
+
|
|
|
+ Condition c = new Condition(StorePink.class);
|
|
|
+ Example.Criteria criteria = c.createCriteria();
|
|
|
+
|
|
|
+ if(!ObjectUtils.isEmpty(offsetDate)) {
|
|
|
+ criteria.andGreaterThanOrEqualTo("createTime", offsetDate);
|
|
|
+ }else if((!ObjectUtils.isEmpty(orderStatisticsParam.getStartTime())) && (!ObjectUtils.isEmpty(orderStatisticsParam.getEndTime()))){
|
|
|
+ criteria.andBetween("createTime", orderStatisticsParam.getStartTime(),orderStatisticsParam.getEndTime());
|
|
|
+ }else{
|
|
|
+ throw new ServiceException(I18nUtil.get("please.input.the.statistical.cycle"));
|
|
|
+ }
|
|
|
+ // 统计类型 1.开团量 2.创建订单量 3.支付订单量 4.成团量 5.订单支付成功率 6.订单平均支付金额
|
|
|
+
|
|
|
+ if(new Integer(1).equals(orderStatisticsParam.getStatisticsType())){
|
|
|
+ // criteria.andEqualTo("orderStatus", 3);
|
|
|
+ criteria.andEqualTo("kId", 0);
|
|
|
+ }else if(new Integer(2).equals(orderStatisticsParam.getStatisticsType())){
|
|
|
+ // 2.创建订单量
|
|
|
+
|
|
|
+ }else if(new Integer(3).equals(orderStatisticsParam.getStatisticsType())){
|
|
|
+ // 3.支付订单量
|
|
|
+// * GROUP_ORDER_TO_PAY(1, "拼团待支付"),
|
|
|
+// * GROUP_ORDER_CANCELLATION(2, "拼团订单取消"),
|
|
|
+// * GROUP_ORDER_PAID(3, "拼团已支付"),
|
|
|
+// * GROUP_ORDER_REFUND(4, "拼团失败已退款"), //拼团超时失败 和 拼团成功后用户主动发起退款都会进到这个状态
|
|
|
+// * GROUP_ORDER_TO_SHIP(5, "拼团待发货"),
|
|
|
+// * GROUP_ORDER_CLOSED(6, "拼团未中奖关闭"),
|
|
|
+// * GROUP_ORDER_TO_RECEIVE(7, "拼团待收货"),
|
|
|
+// * GROUP_ORDER_COMPLETED(8, "拼团订单完成");
|
|
|
+
|
|
|
+
|
|
|
+ List<Integer> orderStatus = new ArrayList<>();
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_REFUND.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_CLOSED.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_TO_RECEIVE.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_COMPLETED.getKey());
|
|
|
+ criteria.andIn("orderStatus", orderStatus);
|
|
|
+
|
|
|
+ }else if(new Integer(4).equals(orderStatisticsParam.getStatisticsType())){
|
|
|
+ // 4.成团量
|
|
|
+ criteria.andEqualTo("lId", 1);
|
|
|
+
|
|
|
+ }else if(new Integer(5).equals(orderStatisticsParam.getStatisticsType())){
|
|
|
+ //5.订单支付成功率
|
|
|
+ //已支付用订单的量
|
|
|
+ List<Integer> orderStatus = new ArrayList<>();
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_REFUND.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_CLOSED.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_TO_RECEIVE.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_COMPLETED.getKey());
|
|
|
+ criteria.andIn("orderStatus", orderStatus);
|
|
|
+ int i = storePinkMapper.selectCountByCondition(c);
|
|
|
+
|
|
|
+
|
|
|
+ //总订单的量
|
|
|
+ Condition c2 = new Condition(StorePink.class);
|
|
|
+ Example.Criteria criteria2 = c2.createCriteria();
|
|
|
+ if(!ObjectUtils.isEmpty(offsetDate)) {
|
|
|
+ criteria2.andGreaterThanOrEqualTo("createTime", offsetDate);
|
|
|
+ }
|
|
|
+ if((!ObjectUtils.isEmpty(orderStatisticsParam.getStartTime())) && (!ObjectUtils.isEmpty(orderStatisticsParam.getEndTime()))){
|
|
|
+ criteria2.andBetween("createTime", orderStatisticsParam.getStartTime(),orderStatisticsParam.getEndTime());
|
|
|
+ }
|
|
|
+ int ii = storePinkMapper.selectCountByCondition(c2);
|
|
|
+ if(ii==0){
|
|
|
+ throw new ServiceException(I18nUtil.get("the.denominator.is.0"));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 转换为BigDecimal,避免整数除法
|
|
|
+ BigDecimal num = BigDecimal.valueOf(i);
|
|
|
+ BigDecimal den = BigDecimal.valueOf(ii);
|
|
|
+ BigDecimal divide = num.divide(den, 2, RoundingMode.HALF_UP);
|
|
|
+ // 计算:(分子 / 分母) * 100,指定舍入模式(四舍五入)
|
|
|
+
|
|
|
+ return Result.success(divide);
|
|
|
+
|
|
|
+ }else if(new Integer(6).equals(orderStatisticsParam.getStatisticsType())){
|
|
|
+ //6.订单平均支付金额
|
|
|
+ List<Integer> orderStatus = new ArrayList<>();
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_REFUND.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_CLOSED.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_TO_RECEIVE.getKey());
|
|
|
+ orderStatus.add(PinkOrderStatusEnum.GROUP_ORDER_COMPLETED.getKey());
|
|
|
+ BigDecimal bigDecimal = storePinkMapper.calculateTheAveragePaymentAmount(offsetDate, date, orderStatus);
|
|
|
+ BigDecimal bigDecimal1 = bigDecimal.setScale(2, RoundingMode.UP);
|
|
|
+ return ResultGenerator.genSuccessResult(bigDecimal1);
|
|
|
+ }
|
|
|
+
|
|
|
+ int i = storePinkMapper.selectCountByCondition(c);
|
|
|
+ return ResultGenerator.genSuccessResult(i);
|
|
|
+ }
|
|
|
+
|
|
|
}
|