增加公司切换
parent
0b694d8f20
commit
c368688860
|
|
@ -0,0 +1,9 @@
|
|||
package com.njzscloud.supervisory.config;
|
||||
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
@EnableConfigurationProperties({AppProperties.class})
|
||||
public class AppConfiguration {
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package com.njzscloud.supervisory.config;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ConfigurationProperties(prefix = "app")
|
||||
public class AppProperties {
|
||||
private Company company;
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
package com.njzscloud.supervisory.config;
|
||||
|
||||
public enum Company {
|
||||
SHOU_JU,
|
||||
TIAN_QING
|
||||
}
|
||||
|
|
@ -10,7 +10,6 @@ import com.njzscloud.supervisory.district.mapper.SysDistrictMapper;
|
|||
import com.njzscloud.supervisory.district.pojo.DistrictTreeResult;
|
||||
import com.njzscloud.supervisory.district.pojo.SysDistrictEntity;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
|
|
@ -23,11 +22,6 @@ import java.util.List;
|
|||
@Service
|
||||
public class SysDistrictService extends ServiceImpl<SysDistrictMapper, SysDistrictEntity> implements IService<SysDistrictEntity> {
|
||||
|
||||
@Value("${app.district.province}")
|
||||
private String province;
|
||||
@Value("${app.district.city}")
|
||||
private String city;
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*
|
||||
|
|
@ -78,7 +72,7 @@ public class SysDistrictService extends ServiceImpl<SysDistrictMapper, SysDistri
|
|||
}
|
||||
|
||||
public List<DistrictTreeResult> tree() {
|
||||
List<DistrictTreeResult> list = baseMapper.selectByTier(province, city);
|
||||
List<DistrictTreeResult> list = baseMapper.selectByTier("province", "city");
|
||||
return Tree.listToTree(list, DistrictTreeResult::getId, DistrictTreeResult::getPid, DistrictTreeResult::setChildren, "0");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,86 +0,0 @@
|
|||
package com.njzscloud.supervisory.oss.controller;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.njzscloud.common.core.http.constant.Mime;
|
||||
import com.njzscloud.common.core.tuple.Tuple2;
|
||||
import com.njzscloud.common.core.utils.R;
|
||||
import com.njzscloud.common.mvc.util.FileResponseUtil;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
// @RestController
|
||||
// @RequestMapping("/oss")
|
||||
public class OSSController {
|
||||
|
||||
@Value("${oss.path}")
|
||||
private String path;
|
||||
|
||||
@GetMapping("/end_mlt_upload")
|
||||
public R<?> endMltUpload(String objectName, String uploadId, int partNum) {
|
||||
// Minio.endMltUpload(objectName, uploadId, partNum);
|
||||
return R.success();
|
||||
}
|
||||
|
||||
@GetMapping("/start_mlt_upload")
|
||||
public R<Tuple2<String, List<String>>> startMltUpload(
|
||||
String objectName,
|
||||
String contentType,
|
||||
int partNum) {
|
||||
// Minio.startMltUpload(objectName, contentType, partNum)
|
||||
return R.success();
|
||||
}
|
||||
|
||||
@GetMapping("/obtain_presigned_url")
|
||||
public R<Map<String, String>> obtainPresignedUrl(
|
||||
@RequestParam(value = "bucketName") String bucketName,
|
||||
@RequestParam(value = "filename") String filename) {
|
||||
String objectName = IdUtil.fastSimpleUUID();
|
||||
if (StrUtil.isNotBlank(filename)) {
|
||||
objectName = objectName + "." + FileUtil.extName(filename);
|
||||
}
|
||||
// Map<String, String> data = Minio.obtainPresignedUrl(bucketName, objectName);
|
||||
return R.success();
|
||||
}
|
||||
|
||||
@GetMapping("/download/{bucketName}/{objectName}")
|
||||
public void obtainFile(
|
||||
@PathVariable("bucketName") String bucketName,
|
||||
@PathVariable("objectName") String objectName,
|
||||
HttpServletResponse response) throws Exception {
|
||||
// Tuple2<InputStream, String> tuple2 = Minio.obtainFile(bucketName, objectName);
|
||||
File file = new File(path + "/" + bucketName + "/" + objectName);
|
||||
if (!file.exists()) {
|
||||
response.sendError(404);
|
||||
return;
|
||||
}
|
||||
FileInputStream inputStream = new FileInputStream(file);
|
||||
FileResponseUtil.download(response, inputStream, Mime.BINARY, objectName);
|
||||
}
|
||||
|
||||
@PostMapping("/upload")
|
||||
public R<?> upload(@RequestPart("file") MultipartFile file) throws Exception {
|
||||
String filename = file.getOriginalFilename();
|
||||
String objectName = IdUtil.fastSimpleUUID();
|
||||
if (StrUtil.isNotBlank(filename)) {
|
||||
objectName = objectName + "." + FileUtil.extName(filename);
|
||||
}
|
||||
InputStream inputStream = file.getInputStream();
|
||||
IoUtil.copy(inputStream, Files.newOutputStream(Paths.get(path + "/test/" + objectName)));
|
||||
inputStream.close();
|
||||
|
||||
return R.success("download/test/" + objectName);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,12 @@
|
|||
package com.njzscloud.supervisory.statistics.controller;
|
||||
|
||||
import com.njzscloud.common.core.utils.GroupUtil;
|
||||
import com.njzscloud.common.core.utils.R;
|
||||
import com.njzscloud.supervisory.config.AppProperties;
|
||||
import com.njzscloud.supervisory.config.Company;
|
||||
import com.njzscloud.supervisory.statistics.service.StatisticsService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
|
@ -10,13 +14,23 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@CrossOrigin
|
||||
@RestController
|
||||
@RequestMapping("/statistics")
|
||||
@CrossOrigin
|
||||
@RequiredArgsConstructor
|
||||
public class StatisticsController {
|
||||
private final StatisticsService statisticsService;
|
||||
|
||||
public StatisticsController(ObjectProvider<StatisticsService> statisticsService, AppProperties appProperties) {
|
||||
Map<Company, StatisticsService> map = GroupUtil.k_o(statisticsService.stream(), StatisticsService::getCompany);
|
||||
Company company = appProperties.getCompany();
|
||||
log.info("当前公司: {}", company);
|
||||
this.statisticsService = map.get(company);
|
||||
if (this.statisticsService == null) {
|
||||
throw new IllegalArgumentException("未配置统计服务");
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/obtain_data")
|
||||
public R<?> obtainData() throws Exception {
|
||||
long l = System.currentTimeMillis();
|
||||
|
|
|
|||
|
|
@ -7,8 +7,7 @@ import org.apache.ibatis.annotations.Param;
|
|||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface StatisticsMapper {
|
||||
|
||||
public interface ShouJuStatisticsMapper {
|
||||
List<CarTrends> getCarTrends();
|
||||
|
||||
UserSummary getUserSummary();
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.njzscloud.supervisory.statistics.mapper;
|
||||
|
||||
import com.njzscloud.supervisory.statistics.pojo.*;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface TianQingStatisticsMapper {
|
||||
List<CarTrends> getCarTrends();
|
||||
|
||||
UserSummary getUserSummary();
|
||||
|
||||
List<GarbageDisposeSummary> getGarbageDisposeSummary();
|
||||
|
||||
List<GarbageDisposeSummary> getCurrentMonthGarbageDisposeSummary();
|
||||
|
||||
List<OrderSummary> getOrderSummary();
|
||||
|
||||
TodayOrderSummary getTodayOrderSummary();
|
||||
|
||||
List<OrderInfo> obtainOrder(@Param("userId") Long userId);
|
||||
|
||||
Double disposeWeight(@Param("startTime") Long startTime, @Param("endTime") Long endTime);
|
||||
|
||||
List<OrderAmountSummary> getOrderAmountSummary(@Param("startTime") Long startTime, @Param("endTime") Long endTime);
|
||||
}
|
||||
|
|
@ -15,6 +15,6 @@ public class UserSummary {
|
|||
private Integer wuYe;
|
||||
|
||||
public Integer getDaKeHu() {
|
||||
return qingYun + wuYe;
|
||||
return (qingYun == null ? 0 : qingYun) + (wuYe == null ? 0 : wuYe);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,311 @@
|
|||
package com.njzscloud.supervisory.statistics.service;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.Week;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import com.njzscloud.common.core.tuple.Tuple2;
|
||||
import com.njzscloud.common.core.tuple.Tuple3;
|
||||
import com.njzscloud.common.core.utils.GroupUtil;
|
||||
import com.njzscloud.supervisory.config.Company;
|
||||
import com.njzscloud.supervisory.statistics.mapper.ShouJuStatisticsMapper;
|
||||
import com.njzscloud.supervisory.statistics.pojo.*;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ShouJuStatisticsService implements StatisticsService {
|
||||
private final ShouJuStatisticsMapper statisticsMapper;
|
||||
|
||||
private final String[] weeks = {"周一", "周二", "周三", "周四", "周五", "周六", "周日"};
|
||||
private final String[] weeks_ = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
|
||||
private final String[] months = {"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"};
|
||||
|
||||
@Override
|
||||
public Company getCompany() {
|
||||
return Company.SHOU_JU;
|
||||
}
|
||||
|
||||
public Map<String, Object> obtainData() throws Exception {
|
||||
CompletableFuture<List<CarTrends>> carTrends = CompletableFuture.supplyAsync(statisticsMapper::getCarTrends)
|
||||
.exceptionally(ex -> {
|
||||
log.error("车辆动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
CompletableFuture<UserSummary> userSummary = CompletableFuture.supplyAsync(statisticsMapper::getUserSummary)
|
||||
.exceptionally(ex -> {
|
||||
log.error("用户动态数据获取失败", ex);
|
||||
return null;
|
||||
});
|
||||
CompletableFuture<List<GarbageDisposeSummary>> garbageDisposeSummary = CompletableFuture.supplyAsync(statisticsMapper::getGarbageDisposeSummary)
|
||||
.thenApply(list -> {
|
||||
Double garbageDisposeSummary_totalWeight = list.stream()
|
||||
.filter(it -> it.getDepotType() == 1)
|
||||
.map(GarbageDisposeSummary::getWeight)
|
||||
.reduce(Double::sum).orElse(0D);
|
||||
|
||||
for (GarbageDisposeSummary disposeSummary : list) {
|
||||
disposeSummary.setPercentage(garbageDisposeSummary_totalWeight == 0 ? 0 : disposeSummary.getWeight() / garbageDisposeSummary_totalWeight * 100);
|
||||
}
|
||||
return list;
|
||||
})
|
||||
.exceptionally(ex -> {
|
||||
log.error("垃圾处置动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
|
||||
CompletableFuture<List<GarbageDisposeSummary>> currentMonthGarbageDisposeSummary = CompletableFuture.supplyAsync(statisticsMapper::getCurrentMonthGarbageDisposeSummary)
|
||||
.thenApply(list -> {
|
||||
Double currentMonthGarbageDisposeSummary_totalWeight = list.stream()
|
||||
.map(GarbageDisposeSummary::getWeight)
|
||||
.reduce(Double::sum).orElse(0D);
|
||||
|
||||
for (GarbageDisposeSummary disposeSummary : list) {
|
||||
disposeSummary.setPercentage(disposeSummary.getWeight() / currentMonthGarbageDisposeSummary_totalWeight * 100);
|
||||
}
|
||||
return list;
|
||||
})
|
||||
.exceptionally(ex -> {
|
||||
log.error("当前月垃圾处置动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
|
||||
CompletableFuture<List<OrderSummary>> summaries = CompletableFuture.supplyAsync(statisticsMapper::getOrderSummary)
|
||||
.thenApply(orderSummary -> {
|
||||
List<Long> userIds = orderSummary.stream().map(OrderSummary::getUserId).distinct().collect(Collectors.toList());
|
||||
Map<Long, List<OrderSummary>> map = GroupUtil.k_a(orderSummary, OrderSummary::getUserId);
|
||||
Map<Long, Map<Boolean, OrderSummary>> map_ = new HashMap<>();
|
||||
map.forEach((s, orderSummaries) -> map_.put(s, GroupUtil.k_o(orderSummaries, OrderSummary::getFinish)));
|
||||
return userIds.stream()
|
||||
.map(it -> {
|
||||
Map<Boolean, OrderSummary> map1 = map_.get(it);
|
||||
OrderSummary finish = map1.get(Boolean.TRUE);
|
||||
OrderSummary unFinish = map1.get(Boolean.FALSE);
|
||||
if (finish == null && unFinish == null) return null;
|
||||
|
||||
Long finishCount = 0L;
|
||||
Long unFinishCount = 0L;
|
||||
String company = null;
|
||||
String groupName = null;
|
||||
|
||||
if (finish != null) {
|
||||
company = finish.getCompany();
|
||||
groupName = finish.getGroupName();
|
||||
finishCount = finish.getQuantity();
|
||||
}
|
||||
|
||||
if (unFinish != null) {
|
||||
company = unFinish.getCompany();
|
||||
groupName = unFinish.getGroupName();
|
||||
unFinishCount = unFinish.getQuantity();
|
||||
}
|
||||
|
||||
return new OrderSummary()
|
||||
.setUserId(it)
|
||||
.setFinishCount(finishCount)
|
||||
.setUnFinishCount(unFinishCount)
|
||||
.setCompany(company)
|
||||
.setGroupName(groupName);
|
||||
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
})
|
||||
.exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
|
||||
DateTime date = DateUtil.date();
|
||||
|
||||
CompletableFuture<Double> today_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long today_start = DateUtil.beginOfDay(date).getTime() / 1000;
|
||||
long today_end = DateUtil.endOfDay(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(today_start, today_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> yesterday_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
DateTime yesterday = DateUtil.offsetDay(date, -1);
|
||||
long yesterday_start = DateUtil.beginOfDay(yesterday).getTime() / 1000;
|
||||
long yesterday_end = DateUtil.endOfDay(yesterday).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(yesterday_start, yesterday_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> week_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long week_start = DateUtil.beginOfWeek(date).getTime() / 1000;
|
||||
long week_end = DateUtil.endOfWeek(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(week_start, week_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> month_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long month_start = DateUtil.beginOfMonth(date).getTime() / 1000;
|
||||
long month_end = DateUtil.endOfMonth(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(month_start, month_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> year_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long year_start = DateUtil.beginOfYear(date).getTime() / 1000;
|
||||
long year_end = DateUtil.endOfYear(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(year_start, year_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
|
||||
CompletableFuture<Tuple2<List<Double>, List<Double>>> weekAmount = CompletableFuture.supplyAsync(() -> {
|
||||
long week_start = DateUtil.beginOfWeek(date).getTime() / 1000;
|
||||
long week_end = DateUtil.endOfWeek(date).getTime() / 1000;
|
||||
List<OrderAmountSummary> week_orderAmountSummary = statisticsMapper.getOrderAmountSummary(week_start, week_end);
|
||||
Map<String, List<OrderAmountSummary>> week_temp_1 = GroupUtil.k_a(week_orderAmountSummary.stream().filter(it -> it.getCd() == 1), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
Week week = DateUtil.dayOfWeekEnum(outTime);
|
||||
return weeks_[week.getValue() - 1];
|
||||
});
|
||||
|
||||
Map<String, List<OrderAmountSummary>> week_temp_2 = GroupUtil.k_a(week_orderAmountSummary.stream().filter(it -> it.getCd() == 2), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
Week week = DateUtil.dayOfWeekEnum(outTime);
|
||||
return weeks_[week.getValue() - 1];
|
||||
});
|
||||
|
||||
List<Double> weekAmountIn = new ArrayList<>(weeks.length);
|
||||
for (String week : weeks) {
|
||||
List<OrderAmountSummary> orderAmountSummary = week_temp_1.getOrDefault(week, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
weekAmountIn.add(amount);
|
||||
}
|
||||
|
||||
List<Double> weekAmountOut = new ArrayList<>(weeks.length);
|
||||
for (String week : weeks) {
|
||||
List<OrderAmountSummary> orderAmountSummary = week_temp_2.getOrDefault(week, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
weekAmountOut.add(amount);
|
||||
}
|
||||
return Tuple2.create(weekAmountIn, weekAmountOut);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Tuple2.create(Collections.emptyList(), Collections.emptyList());
|
||||
});
|
||||
CompletableFuture<Tuple3<List<Double>, List<Double>, List<String>>> monthAmount = CompletableFuture.supplyAsync(() -> {
|
||||
long month_start = DateUtil.beginOfMonth(date).getTime() / 1000;
|
||||
long month_end = DateUtil.endOfMonth(date).getTime() / 1000;
|
||||
List<OrderAmountSummary> month_orderAmountSummary = statisticsMapper.getOrderAmountSummary(month_start, month_end);
|
||||
|
||||
int dayOfMonth = DateUtil.endOfMonth(date).dayOfMonth();
|
||||
List<String> days = new ArrayList<>(dayOfMonth);
|
||||
|
||||
for (int i = 0; i < dayOfMonth; i++) {
|
||||
days.add(i + 1 + "号");
|
||||
}
|
||||
Map<String, List<OrderAmountSummary>> month_temp_1 = GroupUtil.k_a(month_orderAmountSummary.stream().filter(it -> it.getCd() == 1), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int day = DateUtil.dayOfMonth(outTime);
|
||||
return days.get(day - 1);
|
||||
});
|
||||
|
||||
Map<String, List<OrderAmountSummary>> month_temp_2 = GroupUtil.k_a(month_orderAmountSummary.stream().filter(it -> it.getCd() == 2), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int day = DateUtil.dayOfMonth(outTime);
|
||||
return days.get(day - 1);
|
||||
});
|
||||
List<Double> monthAmountIn = new ArrayList<>(dayOfMonth);
|
||||
List<Double> monthAmountOut = new ArrayList<>(dayOfMonth);
|
||||
for (String day : days) {
|
||||
List<OrderAmountSummary> orderAmountSummary = month_temp_1.getOrDefault(day, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
monthAmountIn.add(amount);
|
||||
}
|
||||
for (String day : days) {
|
||||
List<OrderAmountSummary> orderAmountSummary = month_temp_2.getOrDefault(day, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
monthAmountOut.add(amount);
|
||||
}
|
||||
return Tuple3.create(monthAmountIn, monthAmountOut, days);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Tuple3.create(Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
||||
});
|
||||
CompletableFuture<Tuple2<List<Double>, List<Double>>> yearAmount = CompletableFuture.supplyAsync(() -> {
|
||||
long year_start = DateUtil.beginOfYear(date).getTime() / 1000;
|
||||
long year_end = DateUtil.endOfYear(date).getTime() / 1000;
|
||||
List<OrderAmountSummary> year_orderAmountSummary = statisticsMapper.getOrderAmountSummary(year_start, year_end);
|
||||
|
||||
Map<String, List<OrderAmountSummary>> year_temp_1 = GroupUtil.k_a(year_orderAmountSummary.stream().filter(it -> it.getCd() == 1), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int month = DateUtil.month(outTime);
|
||||
return months[month];
|
||||
});
|
||||
|
||||
Map<String, List<OrderAmountSummary>> year_temp_2 = GroupUtil.k_a(year_orderAmountSummary.stream().filter(it -> it.getCd() == 2), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int month = DateUtil.month(outTime);
|
||||
return months[month];
|
||||
});
|
||||
List<Double> yearAmountIn = new ArrayList<>(months.length);
|
||||
List<Double> yearAmountOut = new ArrayList<>(months.length);
|
||||
for (String month : months) {
|
||||
List<OrderAmountSummary> orderAmountSummary = year_temp_1.getOrDefault(month, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
yearAmountIn.add(amount);
|
||||
}
|
||||
for (String month : months) {
|
||||
List<OrderAmountSummary> orderAmountSummary = year_temp_2.getOrDefault(month, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
yearAmountOut.add(amount);
|
||||
}
|
||||
return Tuple2.create(yearAmountIn, yearAmountOut);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Tuple2.create(Collections.emptyList(), Collections.emptyList());
|
||||
});
|
||||
|
||||
CompletableFuture<TodayOrderSummary> todayOrderSummary = CompletableFuture.supplyAsync(statisticsMapper::getTodayOrderSummary)
|
||||
.exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return new TodayOrderSummary();
|
||||
});
|
||||
|
||||
Tuple2<List<Double>, List<Double>> weekAmount_ = weekAmount.get();
|
||||
Tuple3<List<Double>, List<Double>, List<String>> monthAmount_ = monthAmount.get();
|
||||
Tuple2<List<Double>, List<Double>> yearAmount_ = yearAmount.get();
|
||||
return MapUtil.<String, Object>builder()
|
||||
.put("carTrends", carTrends.get())
|
||||
.put("userSummary", userSummary.get())
|
||||
.put("garbageDisposeSummary", garbageDisposeSummary.get())
|
||||
.put("currentMonthGarbageDisposeSummary", currentMonthGarbageDisposeSummary.get())
|
||||
.put("orderSummary", summaries.get())
|
||||
.put("todayDisposeWeight", today_disposeWeight.get())
|
||||
.put("yesterdayDisposeWeight", yesterday_disposeWeight.get())
|
||||
.put("weekDisposeWeight", week_disposeWeight.get())
|
||||
.put("monthDisposeWeight", month_disposeWeight.get())
|
||||
.put("yearDisposeWeight", year_disposeWeight.get())
|
||||
.put("todayOrderSummary", todayOrderSummary.get())
|
||||
.put("weekAmountIn", weekAmount_.get_0())
|
||||
.put("weekAmountOut", weekAmount_.get_1())
|
||||
.put("monthAmountIn", monthAmount_.get_0())
|
||||
.put("monthAmountOut", monthAmount_.get_1())
|
||||
.put("days", monthAmount_.get_2())
|
||||
.put("yearAmountIn", yearAmount_.get_0())
|
||||
.put("yearAmountOut", yearAmount_.get_1())
|
||||
.build();
|
||||
}
|
||||
|
||||
public List<OrderInfo> obtainOrder(Long userId) {
|
||||
return statisticsMapper.obtainOrder(userId);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,305 +1,16 @@
|
|||
package com.njzscloud.supervisory.statistics.service;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.Week;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import com.njzscloud.common.core.tuple.Tuple2;
|
||||
import com.njzscloud.common.core.tuple.Tuple3;
|
||||
import com.njzscloud.common.core.utils.GroupUtil;
|
||||
import com.njzscloud.supervisory.statistics.mapper.StatisticsMapper;
|
||||
import com.njzscloud.supervisory.statistics.pojo.*;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.njzscloud.supervisory.config.Company;
|
||||
import com.njzscloud.supervisory.statistics.pojo.OrderInfo;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class StatisticsService {
|
||||
private final StatisticsMapper statisticsMapper;
|
||||
|
||||
private final String[] weeks = {"周一", "周二", "周三", "周四", "周五", "周六", "周日"};
|
||||
private final String[] weeks_ = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
|
||||
private final String[] months = {"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"};
|
||||
public interface StatisticsService {
|
||||
Company getCompany();
|
||||
|
||||
public Map<String, Object> obtainData() throws Exception {
|
||||
CompletableFuture<List<CarTrends>> carTrends = CompletableFuture.supplyAsync(statisticsMapper::getCarTrends)
|
||||
.exceptionally(ex -> {
|
||||
log.error("车辆动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
CompletableFuture<UserSummary> userSummary = CompletableFuture.supplyAsync(statisticsMapper::getUserSummary)
|
||||
.exceptionally(ex -> {
|
||||
log.error("用户动态数据获取失败", ex);
|
||||
return null;
|
||||
});
|
||||
CompletableFuture<List<GarbageDisposeSummary>> garbageDisposeSummary = CompletableFuture.supplyAsync(statisticsMapper::getGarbageDisposeSummary)
|
||||
.thenApply(list -> {
|
||||
Double garbageDisposeSummary_totalWeight = list.stream()
|
||||
.filter(it -> it.getDepotType() == 1)
|
||||
.map(GarbageDisposeSummary::getWeight)
|
||||
.reduce(Double::sum).orElse(0D);
|
||||
Map<String, Object> obtainData() throws Exception;
|
||||
|
||||
for (GarbageDisposeSummary disposeSummary : list) {
|
||||
disposeSummary.setPercentage(garbageDisposeSummary_totalWeight == 0 ? 0 : disposeSummary.getWeight() / garbageDisposeSummary_totalWeight * 100);
|
||||
}
|
||||
return list;
|
||||
})
|
||||
.exceptionally(ex -> {
|
||||
log.error("垃圾处置动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
|
||||
CompletableFuture<List<GarbageDisposeSummary>> currentMonthGarbageDisposeSummary = CompletableFuture.supplyAsync(statisticsMapper::getCurrentMonthGarbageDisposeSummary)
|
||||
.thenApply(list -> {
|
||||
Double currentMonthGarbageDisposeSummary_totalWeight = list.stream()
|
||||
.map(GarbageDisposeSummary::getWeight)
|
||||
.reduce(Double::sum).orElse(0D);
|
||||
|
||||
for (GarbageDisposeSummary disposeSummary : list) {
|
||||
disposeSummary.setPercentage(disposeSummary.getWeight() / currentMonthGarbageDisposeSummary_totalWeight * 100);
|
||||
}
|
||||
return list;
|
||||
})
|
||||
.exceptionally(ex -> {
|
||||
log.error("当前月垃圾处置动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
|
||||
CompletableFuture<List<OrderSummary>> summaries = CompletableFuture.supplyAsync(statisticsMapper::getOrderSummary)
|
||||
.thenApply(orderSummary -> {
|
||||
List<Long> userIds = orderSummary.stream().map(OrderSummary::getUserId).distinct().collect(Collectors.toList());
|
||||
Map<Long, List<OrderSummary>> map = GroupUtil.k_a(orderSummary, OrderSummary::getUserId);
|
||||
Map<Long, Map<Boolean, OrderSummary>> map_ = new HashMap<>();
|
||||
map.forEach((s, orderSummaries) -> map_.put(s, GroupUtil.k_o(orderSummaries, OrderSummary::getFinish)));
|
||||
return userIds.stream()
|
||||
.map(it -> {
|
||||
Map<Boolean, OrderSummary> map1 = map_.get(it);
|
||||
OrderSummary finish = map1.get(Boolean.TRUE);
|
||||
OrderSummary unFinish = map1.get(Boolean.FALSE);
|
||||
if (finish == null && unFinish == null) return null;
|
||||
|
||||
Long finishCount = 0L;
|
||||
Long unFinishCount = 0L;
|
||||
String company = null;
|
||||
String groupName = null;
|
||||
|
||||
if (finish != null) {
|
||||
company = finish.getCompany();
|
||||
groupName = finish.getGroupName();
|
||||
finishCount = finish.getQuantity();
|
||||
}
|
||||
|
||||
if (unFinish != null) {
|
||||
company = unFinish.getCompany();
|
||||
groupName = unFinish.getGroupName();
|
||||
unFinishCount = unFinish.getQuantity();
|
||||
}
|
||||
|
||||
return new OrderSummary()
|
||||
.setUserId(it)
|
||||
.setFinishCount(finishCount)
|
||||
.setUnFinishCount(unFinishCount)
|
||||
.setCompany(company)
|
||||
.setGroupName(groupName);
|
||||
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
})
|
||||
.exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
|
||||
DateTime date = DateUtil.date();
|
||||
|
||||
CompletableFuture<Double> today_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long today_start = DateUtil.beginOfDay(date).getTime() / 1000;
|
||||
long today_end = DateUtil.endOfDay(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(today_start, today_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> yesterday_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
DateTime yesterday = DateUtil.offsetDay(date, -1);
|
||||
long yesterday_start = DateUtil.beginOfDay(yesterday).getTime() / 1000;
|
||||
long yesterday_end = DateUtil.endOfDay(yesterday).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(yesterday_start, yesterday_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> week_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long week_start = DateUtil.beginOfWeek(date).getTime() / 1000;
|
||||
long week_end = DateUtil.endOfWeek(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(week_start, week_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> month_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long month_start = DateUtil.beginOfMonth(date).getTime() / 1000;
|
||||
long month_end = DateUtil.endOfMonth(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(month_start, month_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> year_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long year_start = DateUtil.beginOfYear(date).getTime() / 1000;
|
||||
long year_end = DateUtil.endOfYear(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(year_start, year_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
|
||||
CompletableFuture<Tuple2<List<Double>, List<Double>>> weekAmount = CompletableFuture.supplyAsync(() -> {
|
||||
long week_start = DateUtil.beginOfWeek(date).getTime() / 1000;
|
||||
long week_end = DateUtil.endOfWeek(date).getTime() / 1000;
|
||||
List<OrderAmountSummary> week_orderAmountSummary = statisticsMapper.getOrderAmountSummary(week_start, week_end);
|
||||
Map<String, List<OrderAmountSummary>> week_temp_1 = GroupUtil.k_a(week_orderAmountSummary.stream().filter(it -> it.getCd() == 1), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
Week week = DateUtil.dayOfWeekEnum(outTime);
|
||||
return weeks_[week.getValue() - 1];
|
||||
});
|
||||
|
||||
Map<String, List<OrderAmountSummary>> week_temp_2 = GroupUtil.k_a(week_orderAmountSummary.stream().filter(it -> it.getCd() == 2), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
Week week = DateUtil.dayOfWeekEnum(outTime);
|
||||
return weeks_[week.getValue() - 1];
|
||||
});
|
||||
|
||||
List<Double> weekAmountIn = new ArrayList<>(weeks.length);
|
||||
for (String week : weeks) {
|
||||
List<OrderAmountSummary> orderAmountSummary = week_temp_1.getOrDefault(week, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
weekAmountIn.add(amount);
|
||||
}
|
||||
|
||||
List<Double> weekAmountOut = new ArrayList<>(weeks.length);
|
||||
for (String week : weeks) {
|
||||
List<OrderAmountSummary> orderAmountSummary = week_temp_2.getOrDefault(week, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
weekAmountOut.add(amount);
|
||||
}
|
||||
return Tuple2.create(weekAmountIn, weekAmountOut);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Tuple2.create(Collections.emptyList(), Collections.emptyList());
|
||||
});
|
||||
CompletableFuture<Tuple3<List<Double>, List<Double>, List<String>>> monthAmount = CompletableFuture.supplyAsync(() -> {
|
||||
long month_start = DateUtil.beginOfMonth(date).getTime() / 1000;
|
||||
long month_end = DateUtil.endOfMonth(date).getTime() / 1000;
|
||||
List<OrderAmountSummary> month_orderAmountSummary = statisticsMapper.getOrderAmountSummary(month_start, month_end);
|
||||
|
||||
int dayOfMonth = DateUtil.endOfMonth(date).dayOfMonth();
|
||||
List<String> days = new ArrayList<>(dayOfMonth);
|
||||
|
||||
for (int i = 0; i < dayOfMonth; i++) {
|
||||
days.add(i + 1 + "号");
|
||||
}
|
||||
Map<String, List<OrderAmountSummary>> month_temp_1 = GroupUtil.k_a(month_orderAmountSummary.stream().filter(it -> it.getCd() == 1), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int day = DateUtil.dayOfMonth(outTime);
|
||||
return days.get(day - 1);
|
||||
});
|
||||
|
||||
Map<String, List<OrderAmountSummary>> month_temp_2 = GroupUtil.k_a(month_orderAmountSummary.stream().filter(it -> it.getCd() == 2), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int day = DateUtil.dayOfMonth(outTime);
|
||||
return days.get(day - 1);
|
||||
});
|
||||
List<Double> monthAmountIn = new ArrayList<>(dayOfMonth);
|
||||
List<Double> monthAmountOut = new ArrayList<>(dayOfMonth);
|
||||
for (String day : days) {
|
||||
List<OrderAmountSummary> orderAmountSummary = month_temp_1.getOrDefault(day, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
monthAmountIn.add(amount);
|
||||
}
|
||||
for (String day : days) {
|
||||
List<OrderAmountSummary> orderAmountSummary = month_temp_2.getOrDefault(day, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
monthAmountOut.add(amount);
|
||||
}
|
||||
return Tuple3.create(monthAmountIn, monthAmountOut, days);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Tuple3.create(Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
||||
});
|
||||
CompletableFuture<Tuple2<List<Double>, List<Double>>> yearAmount = CompletableFuture.supplyAsync(() -> {
|
||||
long year_start = DateUtil.beginOfYear(date).getTime() / 1000;
|
||||
long year_end = DateUtil.endOfYear(date).getTime() / 1000;
|
||||
List<OrderAmountSummary> year_orderAmountSummary = statisticsMapper.getOrderAmountSummary(year_start, year_end);
|
||||
|
||||
Map<String, List<OrderAmountSummary>> year_temp_1 = GroupUtil.k_a(year_orderAmountSummary.stream().filter(it -> it.getCd() == 1), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int month = DateUtil.month(outTime);
|
||||
return months[month];
|
||||
});
|
||||
|
||||
Map<String, List<OrderAmountSummary>> year_temp_2 = GroupUtil.k_a(year_orderAmountSummary.stream().filter(it -> it.getCd() == 2), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int month = DateUtil.month(outTime);
|
||||
return months[month];
|
||||
});
|
||||
List<Double> yearAmountIn = new ArrayList<>(months.length);
|
||||
List<Double> yearAmountOut = new ArrayList<>(months.length);
|
||||
for (String month : months) {
|
||||
List<OrderAmountSummary> orderAmountSummary = year_temp_1.getOrDefault(month, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
yearAmountIn.add(amount);
|
||||
}
|
||||
for (String month : months) {
|
||||
List<OrderAmountSummary> orderAmountSummary = year_temp_2.getOrDefault(month, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
yearAmountOut.add(amount);
|
||||
}
|
||||
return Tuple2.create(yearAmountIn, yearAmountOut);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Tuple2.create(Collections.emptyList(), Collections.emptyList());
|
||||
});
|
||||
|
||||
CompletableFuture<TodayOrderSummary> todayOrderSummary = CompletableFuture.supplyAsync(statisticsMapper::getTodayOrderSummary)
|
||||
.exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return new TodayOrderSummary();
|
||||
});
|
||||
|
||||
Tuple2<List<Double>, List<Double>> weekAmount_ = weekAmount.get();
|
||||
Tuple3<List<Double>, List<Double>, List<String>> monthAmount_ = monthAmount.get();
|
||||
Tuple2<List<Double>, List<Double>> yearAmount_ = yearAmount.get();
|
||||
return MapUtil.<String, Object>builder()
|
||||
.put("carTrends", carTrends.get())
|
||||
.put("userSummary", userSummary.get())
|
||||
.put("garbageDisposeSummary", garbageDisposeSummary.get())
|
||||
.put("currentMonthGarbageDisposeSummary", currentMonthGarbageDisposeSummary.get())
|
||||
.put("orderSummary", summaries.get())
|
||||
.put("todayDisposeWeight", today_disposeWeight.get())
|
||||
.put("yesterdayDisposeWeight", yesterday_disposeWeight.get())
|
||||
.put("weekDisposeWeight", week_disposeWeight.get())
|
||||
.put("monthDisposeWeight", month_disposeWeight.get())
|
||||
.put("yearDisposeWeight", year_disposeWeight.get())
|
||||
.put("todayOrderSummary", todayOrderSummary.get())
|
||||
.put("weekAmountIn", weekAmount_.get_0())
|
||||
.put("weekAmountOut", weekAmount_.get_1())
|
||||
.put("monthAmountIn", monthAmount_.get_0())
|
||||
.put("monthAmountOut", monthAmount_.get_1())
|
||||
.put("days", monthAmount_.get_2())
|
||||
.put("yearAmountIn", yearAmount_.get_0())
|
||||
.put("yearAmountOut", yearAmount_.get_1())
|
||||
.build();
|
||||
}
|
||||
|
||||
public List<OrderInfo> obtainOrder(Long userId) {
|
||||
return statisticsMapper.obtainOrder(userId);
|
||||
}
|
||||
List<OrderInfo> obtainOrder(Long userId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,310 @@
|
|||
package com.njzscloud.supervisory.statistics.service;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.Week;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import com.njzscloud.common.core.tuple.Tuple2;
|
||||
import com.njzscloud.common.core.tuple.Tuple3;
|
||||
import com.njzscloud.common.core.utils.GroupUtil;
|
||||
import com.njzscloud.supervisory.config.Company;
|
||||
import com.njzscloud.supervisory.statistics.mapper.TianQingStatisticsMapper;
|
||||
import com.njzscloud.supervisory.statistics.pojo.*;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class TianQingStatisticsService implements StatisticsService {
|
||||
private final TianQingStatisticsMapper statisticsMapper;
|
||||
private final String[] weeks = {"周一", "周二", "周三", "周四", "周五", "周六", "周日"};
|
||||
private final String[] weeks_ = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
|
||||
private final String[] months = {"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"};
|
||||
|
||||
@Override
|
||||
public Company getCompany() {
|
||||
return Company.TIAN_QING;
|
||||
}
|
||||
|
||||
public Map<String, Object> obtainData() throws Exception {
|
||||
CompletableFuture<List<CarTrends>> carTrends = CompletableFuture.supplyAsync(statisticsMapper::getCarTrends)
|
||||
.exceptionally(ex -> {
|
||||
log.error("车辆动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
CompletableFuture<UserSummary> userSummary = CompletableFuture.supplyAsync(statisticsMapper::getUserSummary)
|
||||
.exceptionally(ex -> {
|
||||
log.error("用户动态数据获取失败", ex);
|
||||
return null;
|
||||
});
|
||||
CompletableFuture<List<GarbageDisposeSummary>> garbageDisposeSummary = CompletableFuture.supplyAsync(statisticsMapper::getGarbageDisposeSummary)
|
||||
.thenApply(list -> {
|
||||
Double garbageDisposeSummary_totalWeight = list.stream()
|
||||
.filter(it -> it.getDepotType() == 1)
|
||||
.map(GarbageDisposeSummary::getWeight)
|
||||
.reduce(Double::sum).orElse(0D);
|
||||
|
||||
for (GarbageDisposeSummary disposeSummary : list) {
|
||||
disposeSummary.setPercentage(garbageDisposeSummary_totalWeight == 0 ? 0 : disposeSummary.getWeight() / garbageDisposeSummary_totalWeight * 100);
|
||||
}
|
||||
return list;
|
||||
})
|
||||
.exceptionally(ex -> {
|
||||
log.error("垃圾处置动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
|
||||
CompletableFuture<List<GarbageDisposeSummary>> currentMonthGarbageDisposeSummary = CompletableFuture.supplyAsync(statisticsMapper::getCurrentMonthGarbageDisposeSummary)
|
||||
.thenApply(list -> {
|
||||
Double currentMonthGarbageDisposeSummary_totalWeight = list.stream()
|
||||
.map(GarbageDisposeSummary::getWeight)
|
||||
.reduce(Double::sum).orElse(0D);
|
||||
|
||||
for (GarbageDisposeSummary disposeSummary : list) {
|
||||
disposeSummary.setPercentage(disposeSummary.getWeight() / currentMonthGarbageDisposeSummary_totalWeight * 100);
|
||||
}
|
||||
return list;
|
||||
})
|
||||
.exceptionally(ex -> {
|
||||
log.error("当前月垃圾处置动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
|
||||
CompletableFuture<List<OrderSummary>> summaries = CompletableFuture.supplyAsync(statisticsMapper::getOrderSummary)
|
||||
.thenApply(orderSummary -> {
|
||||
List<Long> userIds = orderSummary.stream().map(OrderSummary::getUserId).distinct().collect(Collectors.toList());
|
||||
Map<Long, List<OrderSummary>> map = GroupUtil.k_a(orderSummary, OrderSummary::getUserId);
|
||||
Map<Long, Map<Boolean, OrderSummary>> map_ = new HashMap<>();
|
||||
map.forEach((s, orderSummaries) -> map_.put(s, GroupUtil.k_o(orderSummaries, OrderSummary::getFinish)));
|
||||
return userIds.stream()
|
||||
.map(it -> {
|
||||
Map<Boolean, OrderSummary> map1 = map_.get(it);
|
||||
OrderSummary finish = map1.get(Boolean.TRUE);
|
||||
OrderSummary unFinish = map1.get(Boolean.FALSE);
|
||||
if (finish == null && unFinish == null) return null;
|
||||
|
||||
Long finishCount = 0L;
|
||||
Long unFinishCount = 0L;
|
||||
String company = null;
|
||||
String groupName = null;
|
||||
|
||||
if (finish != null) {
|
||||
company = finish.getCompany();
|
||||
groupName = finish.getGroupName();
|
||||
finishCount = finish.getQuantity();
|
||||
}
|
||||
|
||||
if (unFinish != null) {
|
||||
company = unFinish.getCompany();
|
||||
groupName = unFinish.getGroupName();
|
||||
unFinishCount = unFinish.getQuantity();
|
||||
}
|
||||
|
||||
return new OrderSummary()
|
||||
.setUserId(it)
|
||||
.setFinishCount(finishCount)
|
||||
.setUnFinishCount(unFinishCount)
|
||||
.setCompany(company)
|
||||
.setGroupName(groupName);
|
||||
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
})
|
||||
.exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Collections.emptyList();
|
||||
});
|
||||
|
||||
DateTime date = DateUtil.date();
|
||||
|
||||
CompletableFuture<Double> today_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long today_start = DateUtil.beginOfDay(date).getTime() / 1000;
|
||||
long today_end = DateUtil.endOfDay(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(today_start, today_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> yesterday_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
DateTime yesterday = DateUtil.offsetDay(date, -1);
|
||||
long yesterday_start = DateUtil.beginOfDay(yesterday).getTime() / 1000;
|
||||
long yesterday_end = DateUtil.endOfDay(yesterday).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(yesterday_start, yesterday_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> week_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long week_start = DateUtil.beginOfWeek(date).getTime() / 1000;
|
||||
long week_end = DateUtil.endOfWeek(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(week_start, week_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> month_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long month_start = DateUtil.beginOfMonth(date).getTime() / 1000;
|
||||
long month_end = DateUtil.endOfMonth(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(month_start, month_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
CompletableFuture<Double> year_disposeWeight = CompletableFuture.supplyAsync(() -> {
|
||||
long year_start = DateUtil.beginOfYear(date).getTime() / 1000;
|
||||
long year_end = DateUtil.endOfYear(date).getTime() / 1000;
|
||||
return statisticsMapper.disposeWeight(year_start, year_end);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return 0D;
|
||||
});
|
||||
|
||||
CompletableFuture<Tuple2<List<Double>, List<Double>>> weekAmount = CompletableFuture.supplyAsync(() -> {
|
||||
long week_start = DateUtil.beginOfWeek(date).getTime() / 1000;
|
||||
long week_end = DateUtil.endOfWeek(date).getTime() / 1000;
|
||||
List<OrderAmountSummary> week_orderAmountSummary = statisticsMapper.getOrderAmountSummary(week_start, week_end);
|
||||
Map<String, List<OrderAmountSummary>> week_temp_1 = GroupUtil.k_a(week_orderAmountSummary.stream().filter(it -> it.getCd() == 1), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
Week week = DateUtil.dayOfWeekEnum(outTime);
|
||||
return weeks_[week.getValue() - 1];
|
||||
});
|
||||
|
||||
Map<String, List<OrderAmountSummary>> week_temp_2 = GroupUtil.k_a(week_orderAmountSummary.stream().filter(it -> it.getCd() == 2), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
Week week = DateUtil.dayOfWeekEnum(outTime);
|
||||
return weeks_[week.getValue() - 1];
|
||||
});
|
||||
|
||||
List<Double> weekAmountIn = new ArrayList<>(weeks.length);
|
||||
for (String week : weeks) {
|
||||
List<OrderAmountSummary> orderAmountSummary = week_temp_1.getOrDefault(week, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
weekAmountIn.add(amount);
|
||||
}
|
||||
|
||||
List<Double> weekAmountOut = new ArrayList<>(weeks.length);
|
||||
for (String week : weeks) {
|
||||
List<OrderAmountSummary> orderAmountSummary = week_temp_2.getOrDefault(week, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
weekAmountOut.add(amount);
|
||||
}
|
||||
return Tuple2.create(weekAmountIn, weekAmountOut);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Tuple2.create(Collections.emptyList(), Collections.emptyList());
|
||||
});
|
||||
CompletableFuture<Tuple3<List<Double>, List<Double>, List<String>>> monthAmount = CompletableFuture.supplyAsync(() -> {
|
||||
long month_start = DateUtil.beginOfMonth(date).getTime() / 1000;
|
||||
long month_end = DateUtil.endOfMonth(date).getTime() / 1000;
|
||||
List<OrderAmountSummary> month_orderAmountSummary = statisticsMapper.getOrderAmountSummary(month_start, month_end);
|
||||
|
||||
int dayOfMonth = DateUtil.endOfMonth(date).dayOfMonth();
|
||||
List<String> days = new ArrayList<>(dayOfMonth);
|
||||
|
||||
for (int i = 0; i < dayOfMonth; i++) {
|
||||
days.add(i + 1 + "号");
|
||||
}
|
||||
Map<String, List<OrderAmountSummary>> month_temp_1 = GroupUtil.k_a(month_orderAmountSummary.stream().filter(it -> it.getCd() == 1), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int day = DateUtil.dayOfMonth(outTime);
|
||||
return days.get(day - 1);
|
||||
});
|
||||
|
||||
Map<String, List<OrderAmountSummary>> month_temp_2 = GroupUtil.k_a(month_orderAmountSummary.stream().filter(it -> it.getCd() == 2), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int day = DateUtil.dayOfMonth(outTime);
|
||||
return days.get(day - 1);
|
||||
});
|
||||
List<Double> monthAmountIn = new ArrayList<>(dayOfMonth);
|
||||
List<Double> monthAmountOut = new ArrayList<>(dayOfMonth);
|
||||
for (String day : days) {
|
||||
List<OrderAmountSummary> orderAmountSummary = month_temp_1.getOrDefault(day, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
monthAmountIn.add(amount);
|
||||
}
|
||||
for (String day : days) {
|
||||
List<OrderAmountSummary> orderAmountSummary = month_temp_2.getOrDefault(day, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
monthAmountOut.add(amount);
|
||||
}
|
||||
return Tuple3.create(monthAmountIn, monthAmountOut, days);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Tuple3.create(Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
||||
});
|
||||
CompletableFuture<Tuple2<List<Double>, List<Double>>> yearAmount = CompletableFuture.supplyAsync(() -> {
|
||||
long year_start = DateUtil.beginOfYear(date).getTime() / 1000;
|
||||
long year_end = DateUtil.endOfYear(date).getTime() / 1000;
|
||||
List<OrderAmountSummary> year_orderAmountSummary = statisticsMapper.getOrderAmountSummary(year_start, year_end);
|
||||
|
||||
Map<String, List<OrderAmountSummary>> year_temp_1 = GroupUtil.k_a(year_orderAmountSummary.stream().filter(it -> it.getCd() == 1), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int month = DateUtil.month(outTime);
|
||||
return months[month];
|
||||
});
|
||||
|
||||
Map<String, List<OrderAmountSummary>> year_temp_2 = GroupUtil.k_a(year_orderAmountSummary.stream().filter(it -> it.getCd() == 2), it -> {
|
||||
Date outTime = it.getOutTime();
|
||||
int month = DateUtil.month(outTime);
|
||||
return months[month];
|
||||
});
|
||||
List<Double> yearAmountIn = new ArrayList<>(months.length);
|
||||
List<Double> yearAmountOut = new ArrayList<>(months.length);
|
||||
for (String month : months) {
|
||||
List<OrderAmountSummary> orderAmountSummary = year_temp_1.getOrDefault(month, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
yearAmountIn.add(amount);
|
||||
}
|
||||
for (String month : months) {
|
||||
List<OrderAmountSummary> orderAmountSummary = year_temp_2.getOrDefault(month, Collections.emptyList());
|
||||
Double amount = orderAmountSummary.stream().map(OrderAmountSummary::getAmount).reduce(Integer::sum).orElse(0) / 100.0;
|
||||
yearAmountOut.add(amount);
|
||||
}
|
||||
return Tuple2.create(yearAmountIn, yearAmountOut);
|
||||
}).exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return Tuple2.create(Collections.emptyList(), Collections.emptyList());
|
||||
});
|
||||
|
||||
CompletableFuture<TodayOrderSummary> todayOrderSummary = CompletableFuture.supplyAsync(statisticsMapper::getTodayOrderSummary)
|
||||
.exceptionally(ex -> {
|
||||
log.error("订单动态数据获取失败", ex);
|
||||
return new TodayOrderSummary();
|
||||
});
|
||||
|
||||
Tuple2<List<Double>, List<Double>> weekAmount_ = weekAmount.get();
|
||||
Tuple3<List<Double>, List<Double>, List<String>> monthAmount_ = monthAmount.get();
|
||||
Tuple2<List<Double>, List<Double>> yearAmount_ = yearAmount.get();
|
||||
return MapUtil.<String, Object>builder()
|
||||
.put("carTrends", carTrends.get())
|
||||
.put("userSummary", userSummary.get())
|
||||
.put("garbageDisposeSummary", garbageDisposeSummary.get())
|
||||
.put("currentMonthGarbageDisposeSummary", currentMonthGarbageDisposeSummary.get())
|
||||
.put("orderSummary", summaries.get())
|
||||
.put("todayDisposeWeight", today_disposeWeight.get())
|
||||
.put("yesterdayDisposeWeight", yesterday_disposeWeight.get())
|
||||
.put("weekDisposeWeight", week_disposeWeight.get())
|
||||
.put("monthDisposeWeight", month_disposeWeight.get())
|
||||
.put("yearDisposeWeight", year_disposeWeight.get())
|
||||
.put("todayOrderSummary", todayOrderSummary.get())
|
||||
.put("weekAmountIn", weekAmount_.get_0())
|
||||
.put("weekAmountOut", weekAmount_.get_1())
|
||||
.put("monthAmountIn", monthAmount_.get_0())
|
||||
.put("monthAmountOut", monthAmount_.get_1())
|
||||
.put("days", monthAmount_.get_2())
|
||||
.put("yearAmountIn", yearAmount_.get_0())
|
||||
.put("yearAmountOut", yearAmount_.get_1())
|
||||
.build();
|
||||
}
|
||||
|
||||
public List<OrderInfo> obtainOrder(Long userId) {
|
||||
return statisticsMapper.obtainOrder(userId);
|
||||
}
|
||||
}
|
||||
|
|
@ -6,36 +6,8 @@ spring:
|
|||
url: jdbc:mysql://localhost:33061/green_frog?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true
|
||||
username: dbard01
|
||||
password: mik9uvNZ
|
||||
redis:
|
||||
enable: false
|
||||
pubsub: false
|
||||
host: localhost
|
||||
#password: redis
|
||||
database: 0
|
||||
port: 6379
|
||||
|
||||
mail:
|
||||
# 邮件服务器
|
||||
host: smtp.qq.com
|
||||
# 发送邮件的账户
|
||||
username: lzq@qq.com
|
||||
# 授权码
|
||||
password: lzq
|
||||
security:
|
||||
auth-ignores: /statistics/**
|
||||
oss:
|
||||
path: D:/ProJects/gov_manage/njzscloud-supervisory-svr/logs
|
||||
minio:
|
||||
endpoint: oss-cn-shanghai.aliyuncs.com
|
||||
access-key: LTAI5tJJu2WayYchExrT5W1E
|
||||
secret-key: zllX0ZJ1EwsZXT6dE6swCLgTF4ImGg
|
||||
region: cn-shanghai
|
||||
bucket-name: cdn-zsy
|
||||
|
||||
app:
|
||||
district:
|
||||
province: 320000
|
||||
city: 320100
|
||||
|
||||
mybatis-plus:
|
||||
tunnel:
|
||||
|
|
@ -49,3 +21,6 @@ mybatis-plus:
|
|||
db:
|
||||
host: rm-bp1w3397b718u1882.mysql.rds.aliyuncs.com
|
||||
port: 3306
|
||||
|
||||
app:
|
||||
company: SHOU_JU
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
spring:
|
||||
servlet:
|
||||
multipart:
|
||||
location: D:\ProJects\gov_manage\njzscloud-supervisory-svr\logs\temp
|
||||
datasource:
|
||||
url: jdbc:mysql://localhost:33061/green_frog?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true
|
||||
username: dbard01
|
||||
password: mik9uvNZ
|
||||
security:
|
||||
auth-ignores: /statistics/**
|
||||
|
||||
mybatis-plus:
|
||||
tunnel:
|
||||
enable: true
|
||||
ssh:
|
||||
host: 121.43.155.83
|
||||
port: 22
|
||||
user: root
|
||||
credentials: D:/我的/再昇云/客户信息归档/达州首炬/dzsj.pem
|
||||
localPort: 33061
|
||||
db:
|
||||
host: rm-bp1w3397b718u1882.mysql.rds.aliyuncs.com
|
||||
port: 3306
|
||||
|
||||
app:
|
||||
company: TIAN_QING
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
spring:
|
||||
servlet:
|
||||
multipart:
|
||||
location: /home/zsy/recycling_supervision/server/temp
|
||||
datasource:
|
||||
url: jdbc:mysql://127.0.0.1:3306/zsy_recycling_supervision?characterEncoding=UTF-8&allowMultiQueries=true&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
|
||||
username: root
|
||||
password: Ch3nTx2BBJ28AiCZ
|
||||
security:
|
||||
auth-ignores:
|
||||
- /dispose_record/report
|
||||
- /project_clearance_detail/report
|
||||
redis:
|
||||
enable: false
|
||||
pubsub: false
|
||||
host: localhost
|
||||
#password: redis
|
||||
database: 0
|
||||
port: 6379
|
||||
|
||||
mail:
|
||||
# 邮件服务器
|
||||
host: smtp.qq.com
|
||||
# 发送邮件的账户
|
||||
username: lzq@qq.com
|
||||
# 授权码
|
||||
password: lzq
|
||||
oss:
|
||||
path: D:/ProJects/gov_manage/njzscloud-supervisory-svr/logs
|
||||
minio:
|
||||
endpoint: http://localhost:9090
|
||||
access-key: minioadmin
|
||||
secret-key: sdawi5nEH44wycoxOONSg
|
||||
bucket-name: zsy
|
||||
|
||||
|
||||
app:
|
||||
district:
|
||||
province: 320000
|
||||
city: 320100
|
||||
|
||||
mybatis-plus:
|
||||
tunnel:
|
||||
enable: false
|
||||
ssh:
|
||||
host: 139.224.54.144
|
||||
port: 22
|
||||
user: root
|
||||
credentials: D:/我的/再昇云/服务器秘钥/139.224.54.144_YZS_S1.pem
|
||||
localPort: 33061
|
||||
db:
|
||||
host: localhost
|
||||
port: 33061
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
spring:
|
||||
servlet:
|
||||
multipart:
|
||||
location: /home/big_screen/temp
|
||||
datasource:
|
||||
url: jdbc:mysql://rm-bp1w3397b718u1882.mysql.rds.aliyuncs.com:3306/green_frog?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true
|
||||
username: dbard01
|
||||
password: mik9uvNZ
|
||||
security:
|
||||
auth-ignores: /statistics/**
|
||||
|
||||
mybatis-plus:
|
||||
tunnel:
|
||||
enable: false
|
||||
|
||||
app:
|
||||
company: SHOU_JU
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
spring:
|
||||
servlet:
|
||||
multipart:
|
||||
location: /home/big_screen/temp
|
||||
datasource:
|
||||
url: jdbc:mysql://127.0.0.1:3306/greenfrog?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&allowMultiQueries=true
|
||||
username: greenfrog
|
||||
password: admin999
|
||||
security:
|
||||
auth-ignores: /statistics/**
|
||||
|
||||
mybatis-plus:
|
||||
tunnel:
|
||||
enable: false
|
||||
|
||||
app:
|
||||
company: TIAN_QING
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="com.njzscloud.supervisory.statistics.mapper.StatisticsMapper">
|
||||
<mapper namespace="com.njzscloud.supervisory.statistics.mapper.ShouJuStatisticsMapper">
|
||||
|
||||
<select id="getCarTrends" resultType="com.njzscloud.supervisory.statistics.pojo.CarTrends">
|
||||
SELECT a.car_number, a.weight, a.order_status, a.station_id, b.name station_name
|
||||
|
|
@ -139,9 +139,9 @@
|
|||
AND a.type != 4
|
||||
</select>
|
||||
<select id="getTodayOrderSummary" resultType="com.njzscloud.supervisory.statistics.pojo.TodayOrderSummary">
|
||||
SELECT MAX(IF(order_status = '已完成', order_count, 0)) completed,
|
||||
MAX(IF(order_status = '已取消', order_count, 0)) cancelled,
|
||||
MAX(IF(order_status = '已预约', order_count, 0)) waiting,
|
||||
SELECT MAX(IF(order_status = '已完成', order_count, 0)) completed,
|
||||
MAX(IF(order_status = '已取消', order_count, 0)) cancelled,
|
||||
MAX(IF(order_status = '已预约', order_count, 0)) waiting,
|
||||
MAX(IF(order_status = '已完成', order_count, 0)) + MAX(IF(order_status = '已取消', order_count, 0)) + MAX(IF(order_status = '已预约', order_count, 0)) + MAX(IF(order_status = '待看料', order_count, 0)) + MAX(IF(order_status = '待出场', order_count, 0)) total
|
||||
FROM (SELECT order_status, COUNT(*) order_count
|
||||
FROM (SELECT IF(a.status = 1, '已完成', IF(a.status = 4, '已取消', IF(a.car_status = 0, '已预约', IF(a.car_status = 1 AND a.admin_status = 0, '待看料', '待出场')))) order_status
|
||||
|
|
@ -150,7 +150,7 @@
|
|||
WHERE a.create_time >= UNIX_TIMESTAMP(CURDATE())
|
||||
AND a.type != 4
|
||||
AND a.create_time <![CDATA[ < ]]> UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL 24 HOUR))) t
|
||||
GROUP BY order_status) tt
|
||||
GROUP BY order_status) tt
|
||||
</select>
|
||||
<select id="getOrderAmountSummary"
|
||||
resultType="com.njzscloud.supervisory.statistics.pojo.OrderAmountSummary">
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="com.njzscloud.supervisory.statistics.mapper.TianQingStatisticsMapper">
|
||||
|
||||
<select id="getCarTrends" resultType="com.njzscloud.supervisory.statistics.pojo.CarTrends">
|
||||
SELECT a.car_number, a.weight, a.order_status, a.station_id, b.name station_name
|
||||
FROM (SELECT car_number, weight, order_status, station_id
|
||||
FROM (SELECT a.car_number,
|
||||
a.weight,
|
||||
IF(a.status = 1, '已完成', IF(a.status = 4, '已取消', IF(a.car_status = 0, '已预约', IF(a.car_status = 1 AND a.admin_status = 0, '待看料', '待出场')))) order_status,
|
||||
a.station_id
|
||||
FROM ba_order a
|
||||
INNER JOIN ba_goods b ON b.id = a.goods_id
|
||||
WHERE a.status IN (0, 1, 2, 3)
|
||||
ORDER BY a.create_time DESC
|
||||
LIMIT 10) t1) a
|
||||
INNER JOIN ba_station b ON b.id = a.station_id
|
||||
</select>
|
||||
<select id="getUserSummary" resultType="com.njzscloud.supervisory.statistics.pojo.UserSummary">
|
||||
SELECT MAX(IF(group_id = 1, c, 0)) san_hu,
|
||||
MAX(IF(group_id = 2, c, 0)) qing_yun
|
||||
FROM (SELECT group_id, FLOOR(COUNT(*) / 2) c
|
||||
FROM ba_user
|
||||
WHERE group_id IN (1, 2)
|
||||
GROUP BY group_id) t
|
||||
</select>
|
||||
<select id="getGarbageDisposeSummary"
|
||||
resultType="com.njzscloud.supervisory.statistics.pojo.GarbageDisposeSummary">
|
||||
SELECT garbage_name, weight, 1 depot_type, '入库' depot_name
|
||||
FROM (SELECT garbage_name, weight
|
||||
FROM (SELECT b.name garbage_name, SUM(a.weight) weight
|
||||
FROM ba_order a
|
||||
INNER JOIN ba_goods b ON b.id = a.goods_id AND b.depot_type = 1
|
||||
INNER JOIN ba_goods_category c ON c.id = b.category_id
|
||||
GROUP BY b.name) t
|
||||
ORDER BY weight DESC
|
||||
LIMIT 3) t1
|
||||
UNION ALL
|
||||
SELECT garbage_name, weight, 2 depot_type, '出库' depot_name
|
||||
FROM (SELECT garbage_name, weight
|
||||
FROM (SELECT b.name garbage_name, SUM(a.weight) weight
|
||||
FROM ba_order a
|
||||
INNER JOIN ba_goods b ON b.id = a.goods_id AND b.depot_type = 2
|
||||
INNER JOIN ba_goods_category c ON c.id = b.category_id
|
||||
GROUP BY b.name) t
|
||||
ORDER BY weight DESC
|
||||
LIMIT 3) t2
|
||||
</select>
|
||||
|
||||
<select id="getCurrentMonthGarbageDisposeSummary"
|
||||
resultType="com.njzscloud.supervisory.statistics.pojo.GarbageDisposeSummary">
|
||||
SELECT goods_name garbage_name, weight
|
||||
FROM (SELECT a.goods_name, SUM(a.weight) weight
|
||||
FROM ba_order a
|
||||
INNER JOIN ba_goods b ON b.id = a.goods_id AND b.depot_type = 2
|
||||
WHERE a.out_time >= UNIX_TIMESTAMP(DATE_FORMAT(CURDATE(), '%Y-%m-01 00:00:00'))
|
||||
AND a.out_time <![CDATA[ < ]]> UNIX_TIMESTAMP(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 1 MONTH))
|
||||
GROUP BY a.goods_name) t
|
||||
ORDER BY weight DESC
|
||||
LIMIT 6
|
||||
</select>
|
||||
<select id="getOrderSummary" resultType="com.njzscloud.supervisory.statistics.pojo.OrderSummary">
|
||||
SELECT *
|
||||
FROM (SELECT t1.id user_id, finish, c quantity, t2.group_id, t2.company, '清运公司' group_name
|
||||
FROM (SELECT b.id,
|
||||
IF(a.status = 1, 1, 0) AS finish,
|
||||
COUNT(*) AS c
|
||||
FROM ba_order a
|
||||
INNER JOIN ba_user b ON b.id = a.vip_user AND b.group_id = 2
|
||||
INNER JOIN ba_goods c ON c.id = a.goods_id AND c.id
|
||||
WHERE a.status IN (0, 1, 2, 3)
|
||||
GROUP BY b.id, IF(a.status = 1, 1, 0)) t1
|
||||
INNER JOIN ba_user t2 ON t2.id = t1.id
|
||||
ORDER BY c DESC
|
||||
LIMIT 47) tt1
|
||||
</select>
|
||||
<select id="obtainOrder" resultType="com.njzscloud.supervisory.statistics.pojo.OrderInfo">
|
||||
SELECT a.car_number,
|
||||
a.goods_name,
|
||||
IF(a.status = 1, '已完成', IF(a.status = 4, '已取消', IF(a.car_status = 0, '已预约', IF(a.car_status = 1 AND a.admin_status = 0, '待看料', '待出场')))) order_status,
|
||||
a.weight,
|
||||
IF(a.in_time = 0, NULL, FROM_UNIXTIME(a.in_time)) in_time,
|
||||
IF(a.out_time = 0, NULL, FROM_UNIXTIME(a.out_time)) out_time
|
||||
FROM ba_order a
|
||||
INNER JOIN ba_goods b ON b.id = a.goods_id
|
||||
WHERE a.vip_user = #{userId}
|
||||
ORDER BY a.create_time DESC
|
||||
LIMIT 10
|
||||
</select>
|
||||
<select id="disposeWeight" resultType="java.lang.Double">
|
||||
SELECT SUM(a.weight) weight
|
||||
FROM ba_order a
|
||||
INNER JOIN ba_goods b ON b.id = a.goods_id AND b.depot_type = 1
|
||||
WHERE a.out_time >= #{startTime}
|
||||
AND a.out_time <![CDATA[ <= ]]> #{endTime}
|
||||
</select>
|
||||
<select id="getTodayOrderSummary" resultType="com.njzscloud.supervisory.statistics.pojo.TodayOrderSummary">
|
||||
SELECT MAX(IF(order_status = '已完成', order_count, 0)) completed,
|
||||
MAX(IF(order_status = '已取消', order_count, 0)) cancelled,
|
||||
MAX(IF(order_status = '已预约', order_count, 0)) waiting,
|
||||
MAX(IF(order_status = '已完成', order_count, 0)) + MAX(IF(order_status = '已取消', order_count, 0)) + MAX(IF(order_status = '已预约', order_count, 0)) + MAX(IF(order_status = '待看料', order_count, 0)) + MAX(IF(order_status = '待出场', order_count, 0)) total
|
||||
FROM (SELECT order_status, COUNT(*) order_count
|
||||
FROM (SELECT IF(a.status = 1, '已完成', IF(a.status = 4, '已取消', IF(a.car_status = 0, '已预约', IF(a.car_status = 1 AND a.admin_status = 0, '待看料', '待出场')))) order_status
|
||||
FROM ba_order a
|
||||
INNER JOIN ba_goods b ON b.id = a.goods_id
|
||||
WHERE a.create_time >= UNIX_TIMESTAMP(CURDATE())
|
||||
AND a.create_time <![CDATA[ < ]]> UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL 24 HOUR))) t
|
||||
GROUP BY order_status) tt
|
||||
</select>
|
||||
<select id="getOrderAmountSummary"
|
||||
resultType="com.njzscloud.supervisory.statistics.pojo.OrderAmountSummary">
|
||||
SELECT a.price amount, FROM_UNIXTIME(a.out_time) out_time, a.who_pay cd
|
||||
FROM ba_order a
|
||||
INNER JOIN ba_goods b ON b.id = a.goods_id
|
||||
WHERE a.status = 1
|
||||
AND a.out_time >= #{startTime}
|
||||
AND a.out_time <![CDATA[ <= ]]> #{endTime}
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue