增加公司切换

master
lzq 2025-08-30 10:36:03 +08:00
parent 0b694d8f20
commit c368688860
19 changed files with 892 additions and 482 deletions

View File

@ -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 {
}

View File

@ -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;
}

View File

@ -0,0 +1,6 @@
package com.njzscloud.supervisory.config;
public enum Company {
SHOU_JU,
TIAN_QING
}

View File

@ -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");
}
}

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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();

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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">

View File

@ -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>