|
@@ -2422,7 +2422,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
|
TopOrderStatisticsBo topOrderStatisticsBo = new TopOrderStatisticsBo();
|
|
|
topOrderStatisticsBo.setStartTime(startTime - time);
|
|
|
topOrderStatisticsBo.setEndTime(startTime);
|
|
|
- topOrderStatisticsBo.setCustomerId(item.getCustomerId());
|
|
|
+ topOrderStatisticsBo.setTenantId(item.getTenantId());
|
|
|
Long num = baseMapper.getSingleTenantStatisticsOrderNum(topOrderStatisticsBo);
|
|
|
if (num > 0){
|
|
|
Long subtract = item.getOrderNum() - num;
|
|
@@ -2607,7 +2607,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
|
if (num > 0){
|
|
|
Long subtract = item.getOrderNum() - num;
|
|
|
BigDecimal divide = new BigDecimal(subtract).divide(new BigDecimal(num),2, RoundingMode.HALF_UP);
|
|
|
- item.setWeekRate(divide.multiply(new BigDecimal("100")));
|
|
|
+ item.setYearRate(divide.multiply(new BigDecimal("100")));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -3194,6 +3194,224 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
|
|
|
return resultVo;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<TopOrderStatisticsDetailVo> getTenantDetailList(TopOrderStatisticsBo bo) {
|
|
|
+ //筛选时间处理
|
|
|
+ if (ObjectUtils.isNull(bo.getTimeSign()) && ObjectUtils.isNull(bo.getStartTime()) && ObjectUtils.isNull(bo.getEndTime())){
|
|
|
+ //没有选择时间范围,默认为当前时间向前推30天
|
|
|
+ Long nowTime = DateUtils.getNowTime();
|
|
|
+ Long dayBefore = DateUtils.getDayBefore(nowTime, 30);
|
|
|
+ bo.setStartTime(dayBefore);
|
|
|
+ bo.setEndTime(nowTime);
|
|
|
+ }else if (ObjectUtils.isNotNull(bo.getTimeSign())){
|
|
|
+ switch (bo.getTimeSign()){
|
|
|
+ case 1://本周
|
|
|
+ Map<String, Long> timeInterval = DateUtils.getTimeInterval(new Date());
|
|
|
+ bo.setStartTime(timeInterval.get("start"));
|
|
|
+ bo.setEndTime(timeInterval.get("end"));
|
|
|
+ break;
|
|
|
+ case 2://本月
|
|
|
+ Long toMonthZeroTime = DateUtils.getToMonthZeroTime();
|
|
|
+ bo.setStartTime(toMonthZeroTime);
|
|
|
+ bo.setEndTime(DateUtils.getNowTime());
|
|
|
+ break;
|
|
|
+ case 3://本年
|
|
|
+ Long toYearZeroTime = DateUtils.getToYearZeroTime();
|
|
|
+ bo.setStartTime(toYearZeroTime);
|
|
|
+ bo.setEndTime(DateUtils.getNowTime());
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<TopOrderStatisticsDetailVo> detailVos = baseMapper.getTenantDetailList(bo);
|
|
|
+ if (CollectionUtils.isEmpty(detailVos)){
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ //订单总额
|
|
|
+ BigDecimal moneyTotal = baseMapper.getMoneyStatisticsWithBo(bo);
|
|
|
+ //订单总数量
|
|
|
+ Long numTotal = baseMapper.getNumStatisticsTotalWithBo(bo);
|
|
|
+ detailVos.forEach(item -> {
|
|
|
+ //订单客户机构ID
|
|
|
+
|
|
|
+ if (item.getMoney().compareTo(BigDecimal.ZERO) == 0){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //订单金额
|
|
|
+ //环比
|
|
|
+ Long startTime = bo.getStartTime();
|
|
|
+ Long endTime = bo.getEndTime();
|
|
|
+ Long time = endTime - startTime;
|
|
|
+ TopOrderStatisticsBo topOrderStatisticsBo = new TopOrderStatisticsBo();
|
|
|
+ topOrderStatisticsBo.setStartTime(startTime - time);
|
|
|
+ topOrderStatisticsBo.setEndTime(startTime);
|
|
|
+ topOrderStatisticsBo.setCreateNo(item.getCreateNo());
|
|
|
+ topOrderStatisticsBo.setTenantId(item.getTenantId().toString());
|
|
|
+ BigDecimal money = baseMapper.getSingleTenantStatistics(topOrderStatisticsBo);
|
|
|
+ if (money.compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ BigDecimal subtract = item.getMoney().subtract(money);
|
|
|
+ BigDecimal divide = subtract.divide(money,2, RoundingMode.HALF_UP);
|
|
|
+ item.setMoneyWeekRate(divide.multiply(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+ Long num = baseMapper.getSingleTenantStatisticsOrderNum(topOrderStatisticsBo);
|
|
|
+ if (num > 0){
|
|
|
+ Long subtract = item.getOrderNum() - num;
|
|
|
+ BigDecimal divide = new BigDecimal(subtract).divide(new BigDecimal(num),2, RoundingMode.HALF_UP);
|
|
|
+ item.setWeekRate(divide.multiply(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //同比
|
|
|
+ Long startBefore = DateUtils.getDayBefore(bo.getStartTime(), 365);
|
|
|
+ Long endBefore = DateUtils.getDayBefore(bo.getEndTime(), 365);
|
|
|
+ topOrderStatisticsBo.setStartTime(startBefore);
|
|
|
+ topOrderStatisticsBo.setEndTime(endBefore);
|
|
|
+ BigDecimal money2 = baseMapper.getSingleTenantStatistics(topOrderStatisticsBo);
|
|
|
+ if (money2.compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ BigDecimal subtract = item.getMoney().subtract(money2);
|
|
|
+ BigDecimal divide = subtract.divide(money2,2, RoundingMode.HALF_UP);
|
|
|
+ item.setMoneyYearRate(divide.multiply(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //同比
|
|
|
+ Long num2 = baseMapper.getSingleTenantStatisticsOrderNum(topOrderStatisticsBo);
|
|
|
+ if (num2 > 0){
|
|
|
+ Long subtract = item.getOrderNum() - num2;
|
|
|
+ BigDecimal divide = new BigDecimal(subtract).divide(new BigDecimal(num2),2, RoundingMode.HALF_UP);
|
|
|
+ item.setWeekRate(divide.multiply(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+
|
|
|
+ //金额占比
|
|
|
+ BigDecimal divide = item.getMoney().divide(moneyTotal, 2, RoundingMode.HALF_UP);
|
|
|
+ String s = divide.multiply(new BigDecimal("100")).toString();
|
|
|
+ item.setMoneyOccupationRate(s+"%");
|
|
|
+ //数量占比
|
|
|
+ BigDecimal divide2 = new BigDecimal(item.getOrderNum()).divide(new BigDecimal(numTotal), 2, RoundingMode.HALF_UP);
|
|
|
+ String s2 = divide2.multiply(new BigDecimal("100")).toString();
|
|
|
+ item.setOccupationRate(s2+"%");
|
|
|
+ });
|
|
|
+ return detailVos;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<TopOrderStatisticsDetailVo> getBusinessDetailList(TopOrderStatisticsBo bo) {
|
|
|
+ //筛选时间处理
|
|
|
+ if (ObjectUtils.isNull(bo.getTimeSign()) && ObjectUtils.isNull(bo.getStartTime()) && ObjectUtils.isNull(bo.getEndTime())){
|
|
|
+ //没有选择时间范围,默认为当前时间向前推30天
|
|
|
+ Long nowTime = DateUtils.getNowTime();
|
|
|
+ Long dayBefore = DateUtils.getDayBefore(nowTime, 30);
|
|
|
+ bo.setStartTime(dayBefore);
|
|
|
+ bo.setEndTime(nowTime);
|
|
|
+ }else if (ObjectUtils.isNotNull(bo.getTimeSign())){
|
|
|
+ switch (bo.getTimeSign()){
|
|
|
+ case 1://本周
|
|
|
+ Map<String, Long> timeInterval = DateUtils.getTimeInterval(new Date());
|
|
|
+ bo.setStartTime(timeInterval.get("start"));
|
|
|
+ bo.setEndTime(timeInterval.get("end"));
|
|
|
+ break;
|
|
|
+ case 2://本月
|
|
|
+ Long toMonthZeroTime = DateUtils.getToMonthZeroTime();
|
|
|
+ bo.setStartTime(toMonthZeroTime);
|
|
|
+ bo.setEndTime(DateUtils.getNowTime());
|
|
|
+ break;
|
|
|
+ case 3://本年
|
|
|
+ Long toYearZeroTime = DateUtils.getToYearZeroTime();
|
|
|
+ bo.setStartTime(toYearZeroTime);
|
|
|
+ bo.setEndTime(DateUtils.getNowTime());
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<TopOrderStatisticsDetailVo> detailVos = baseMapper.getBusinessDetailList(bo);
|
|
|
+ if (CollectionUtils.isEmpty(detailVos)){
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ //订单总额
|
|
|
+ BigDecimal moneyTotal = baseMapper.getMoneyStatisticsWithBo(bo);
|
|
|
+ //订单总数量
|
|
|
+ Long numTotal = baseMapper.getOrderGoodsNumStatisticsTotalWithBo(bo);
|
|
|
+ detailVos.forEach(item -> {
|
|
|
+ //订单客户机构ID
|
|
|
+
|
|
|
+ if (item.getMoney().compareTo(BigDecimal.ZERO) == 0){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //订单金额
|
|
|
+ //环比
|
|
|
+ Long startTime = bo.getStartTime();
|
|
|
+ Long endTime = bo.getEndTime();
|
|
|
+ Long time = endTime - startTime;
|
|
|
+ TopOrderStatisticsBo topOrderStatisticsBo = new TopOrderStatisticsBo();
|
|
|
+ topOrderStatisticsBo.setStartTime(startTime - time);
|
|
|
+ topOrderStatisticsBo.setEndTime(startTime);
|
|
|
+ topOrderStatisticsBo.setCreateNo(item.getCreateNo());
|
|
|
+ topOrderStatisticsBo.setBusinessName(item.getBusinessName());
|
|
|
+ List<TopOrderStatisticsMoneyVo> moneyList1 = baseMapper.getBusinessOrderMoney(topOrderStatisticsBo);
|
|
|
+ if(moneyList1.size()>0){
|
|
|
+ BigDecimal money = moneyList1.get(0).getMoney();
|
|
|
+ if (money.compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ BigDecimal subtract = item.getMoney().subtract(money);
|
|
|
+ BigDecimal divide = subtract.divide(money,2, RoundingMode.HALF_UP);
|
|
|
+ item.setMoneyWeekRate(divide.multiply(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<TopOrderStatisticsNumVo> numStatistics = baseMapper.getBusinessOrderNum(topOrderStatisticsBo);
|
|
|
+ if (CollectionUtils.isNotEmpty(numStatistics)&&numStatistics.size()>0){
|
|
|
+ Long num = numStatistics.stream().findFirst().get().getOrderNum();
|
|
|
+ if (num > 0){
|
|
|
+ Long subtract = item.getOrderNum() - num;
|
|
|
+ BigDecimal divide = new BigDecimal(subtract).divide(new BigDecimal(num),2, RoundingMode.HALF_UP);
|
|
|
+ item.setWeekRate(divide.multiply(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //同比
|
|
|
+ Long startBefore = DateUtils.getDayBefore(bo.getStartTime(), 365);
|
|
|
+ Long endBefore = DateUtils.getDayBefore(bo.getEndTime(), 365);
|
|
|
+ topOrderStatisticsBo.setStartTime(startBefore);
|
|
|
+ topOrderStatisticsBo.setEndTime(endBefore);
|
|
|
+ List<TopOrderStatisticsMoneyVo> moneyList2 = baseMapper.getBusinessOrderMoney(topOrderStatisticsBo);
|
|
|
+ if(moneyList2.size()>0){
|
|
|
+ BigDecimal money2 = moneyList2.get(0).getMoney();
|
|
|
+ if (money2.compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ BigDecimal subtract = item.getMoney().subtract(money2);
|
|
|
+ BigDecimal divide = subtract.divide(money2,2, RoundingMode.HALF_UP);
|
|
|
+ item.setMoneyYearRate(divide.multiply(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<TopOrderStatisticsNumVo> numStatistics2 = baseMapper.getBusinessOrderNum(topOrderStatisticsBo);
|
|
|
+ if (CollectionUtils.isNotEmpty(numStatistics2)&&numStatistics2.size()>0){
|
|
|
+ Long num = numStatistics2.stream().findFirst().get().getOrderNum();
|
|
|
+ if (num > 0){
|
|
|
+ Long subtract = item.getOrderNum() - num;
|
|
|
+ BigDecimal divide = new BigDecimal(subtract).divide(new BigDecimal(num),2, RoundingMode.HALF_UP);
|
|
|
+ item.setYearRate(divide.multiply(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //金额占比
|
|
|
+ BigDecimal divide = item.getMoney().divide(moneyTotal, 2, RoundingMode.HALF_UP);
|
|
|
+ String s = divide.multiply(new BigDecimal("100")).toString();
|
|
|
+ item.setMoneyOccupationRate(s+"%");
|
|
|
+ //数量占比
|
|
|
+ BigDecimal divide2 = new BigDecimal(item.getOrderNum()).divide(new BigDecimal(numTotal), 2, RoundingMode.HALF_UP);
|
|
|
+ String s2 = divide2.multiply(new BigDecimal("100")).toString();
|
|
|
+ item.setOccupationRate(s2+"%");
|
|
|
+ });
|
|
|
+ return detailVos;
|
|
|
+ }
|
|
|
+
|
|
|
private List<Long> getDayTime(Long startTime,Long endTime){
|
|
|
List<Long> tiemList = new ArrayList<>();
|
|
|
Long zeroTime = DateUtils.getScheduleTimeZeroTime(startTime);
|