diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/config/AppConfiguration.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/config/AppConfiguration.java new file mode 100644 index 0000000..a88de8c --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/config/AppConfiguration.java @@ -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 { +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/config/AppProperties.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/config/AppProperties.java new file mode 100644 index 0000000..305ed33 --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/config/AppProperties.java @@ -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; +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/config/Company.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/config/Company.java new file mode 100644 index 0000000..e9c4a4a --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/config/Company.java @@ -0,0 +1,6 @@ +package com.njzscloud.supervisory.config; + +public enum Company { + SHOU_JU, + TIAN_QING +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/district/service/SysDistrictService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/district/service/SysDistrictService.java index d033931..1149690 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/district/service/SysDistrictService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/district/service/SysDistrictService.java @@ -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 implements IService { - @Value("${app.district.province}") - private String province; - @Value("${app.district.city}") - private String city; - /** * 新增 * @@ -78,7 +72,7 @@ public class SysDistrictService extends ServiceImpl tree() { - List list = baseMapper.selectByTier(province, city); + List list = baseMapper.selectByTier("province", "city"); return Tree.listToTree(list, DistrictTreeResult::getId, DistrictTreeResult::getPid, DistrictTreeResult::setChildren, "0"); } } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/oss/controller/OSSController.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/oss/controller/OSSController.java deleted file mode 100644 index a6a98a4..0000000 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/oss/controller/OSSController.java +++ /dev/null @@ -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>> startMltUpload( - String objectName, - String contentType, - int partNum) { - // Minio.startMltUpload(objectName, contentType, partNum) - return R.success(); - } - - @GetMapping("/obtain_presigned_url") - public R> 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 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 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); - } -} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/controller/StatisticsController.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/controller/StatisticsController.java index c166450..e2b5eaf 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/controller/StatisticsController.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/controller/StatisticsController.java @@ -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, AppProperties appProperties) { + Map 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(); diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/mapper/StatisticsMapper.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/mapper/ShouJuStatisticsMapper.java similarity index 95% rename from njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/mapper/StatisticsMapper.java rename to njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/mapper/ShouJuStatisticsMapper.java index 3ecdb00..e9667b4 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/mapper/StatisticsMapper.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/mapper/ShouJuStatisticsMapper.java @@ -7,8 +7,7 @@ import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper -public interface StatisticsMapper { - +public interface ShouJuStatisticsMapper { List getCarTrends(); UserSummary getUserSummary(); diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/mapper/TianQingStatisticsMapper.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/mapper/TianQingStatisticsMapper.java new file mode 100644 index 0000000..5632ba0 --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/mapper/TianQingStatisticsMapper.java @@ -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 getCarTrends(); + + UserSummary getUserSummary(); + + List getGarbageDisposeSummary(); + + List getCurrentMonthGarbageDisposeSummary(); + + List getOrderSummary(); + + TodayOrderSummary getTodayOrderSummary(); + + List obtainOrder(@Param("userId") Long userId); + + Double disposeWeight(@Param("startTime") Long startTime, @Param("endTime") Long endTime); + + List getOrderAmountSummary(@Param("startTime") Long startTime, @Param("endTime") Long endTime); +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/pojo/UserSummary.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/pojo/UserSummary.java index 70cc0a3..31ce61b 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/pojo/UserSummary.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/pojo/UserSummary.java @@ -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); } } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/ShouJuStatisticsService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/ShouJuStatisticsService.java new file mode 100644 index 0000000..2efc478 --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/ShouJuStatisticsService.java @@ -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 obtainData() throws Exception { + CompletableFuture> carTrends = CompletableFuture.supplyAsync(statisticsMapper::getCarTrends) + .exceptionally(ex -> { + log.error("车辆动态数据获取失败", ex); + return Collections.emptyList(); + }); + CompletableFuture userSummary = CompletableFuture.supplyAsync(statisticsMapper::getUserSummary) + .exceptionally(ex -> { + log.error("用户动态数据获取失败", ex); + return null; + }); + CompletableFuture> 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> 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> summaries = CompletableFuture.supplyAsync(statisticsMapper::getOrderSummary) + .thenApply(orderSummary -> { + List userIds = orderSummary.stream().map(OrderSummary::getUserId).distinct().collect(Collectors.toList()); + Map> map = GroupUtil.k_a(orderSummary, OrderSummary::getUserId); + Map> map_ = new HashMap<>(); + map.forEach((s, orderSummaries) -> map_.put(s, GroupUtil.k_o(orderSummaries, OrderSummary::getFinish))); + return userIds.stream() + .map(it -> { + Map 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 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 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 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 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 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, List>> weekAmount = CompletableFuture.supplyAsync(() -> { + long week_start = DateUtil.beginOfWeek(date).getTime() / 1000; + long week_end = DateUtil.endOfWeek(date).getTime() / 1000; + List week_orderAmountSummary = statisticsMapper.getOrderAmountSummary(week_start, week_end); + Map> 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> 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 weekAmountIn = new ArrayList<>(weeks.length); + for (String week : weeks) { + List 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 weekAmountOut = new ArrayList<>(weeks.length); + for (String week : weeks) { + List 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, List, List>> monthAmount = CompletableFuture.supplyAsync(() -> { + long month_start = DateUtil.beginOfMonth(date).getTime() / 1000; + long month_end = DateUtil.endOfMonth(date).getTime() / 1000; + List month_orderAmountSummary = statisticsMapper.getOrderAmountSummary(month_start, month_end); + + int dayOfMonth = DateUtil.endOfMonth(date).dayOfMonth(); + List days = new ArrayList<>(dayOfMonth); + + for (int i = 0; i < dayOfMonth; i++) { + days.add(i + 1 + "号"); + } + Map> 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> 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 monthAmountIn = new ArrayList<>(dayOfMonth); + List monthAmountOut = new ArrayList<>(dayOfMonth); + for (String day : days) { + List 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 = 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, List>> yearAmount = CompletableFuture.supplyAsync(() -> { + long year_start = DateUtil.beginOfYear(date).getTime() / 1000; + long year_end = DateUtil.endOfYear(date).getTime() / 1000; + List year_orderAmountSummary = statisticsMapper.getOrderAmountSummary(year_start, year_end); + + Map> 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> 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 yearAmountIn = new ArrayList<>(months.length); + List yearAmountOut = new ArrayList<>(months.length); + for (String month : months) { + List 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 = 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 = CompletableFuture.supplyAsync(statisticsMapper::getTodayOrderSummary) + .exceptionally(ex -> { + log.error("订单动态数据获取失败", ex); + return new TodayOrderSummary(); + }); + + Tuple2, List> weekAmount_ = weekAmount.get(); + Tuple3, List, List> monthAmount_ = monthAmount.get(); + Tuple2, List> yearAmount_ = yearAmount.get(); + return MapUtil.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 obtainOrder(Long userId) { + return statisticsMapper.obtainOrder(userId); + } +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/StatisticsService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/StatisticsService.java index 6edde63..f24a721 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/StatisticsService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/StatisticsService.java @@ -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 obtainData() throws Exception { - CompletableFuture> carTrends = CompletableFuture.supplyAsync(statisticsMapper::getCarTrends) - .exceptionally(ex -> { - log.error("车辆动态数据获取失败", ex); - return Collections.emptyList(); - }); - CompletableFuture userSummary = CompletableFuture.supplyAsync(statisticsMapper::getUserSummary) - .exceptionally(ex -> { - log.error("用户动态数据获取失败", ex); - return null; - }); - CompletableFuture> 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 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> 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> summaries = CompletableFuture.supplyAsync(statisticsMapper::getOrderSummary) - .thenApply(orderSummary -> { - List userIds = orderSummary.stream().map(OrderSummary::getUserId).distinct().collect(Collectors.toList()); - Map> map = GroupUtil.k_a(orderSummary, OrderSummary::getUserId); - Map> map_ = new HashMap<>(); - map.forEach((s, orderSummaries) -> map_.put(s, GroupUtil.k_o(orderSummaries, OrderSummary::getFinish))); - return userIds.stream() - .map(it -> { - Map 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 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 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 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 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 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, List>> weekAmount = CompletableFuture.supplyAsync(() -> { - long week_start = DateUtil.beginOfWeek(date).getTime() / 1000; - long week_end = DateUtil.endOfWeek(date).getTime() / 1000; - List week_orderAmountSummary = statisticsMapper.getOrderAmountSummary(week_start, week_end); - Map> 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> 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 weekAmountIn = new ArrayList<>(weeks.length); - for (String week : weeks) { - List 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 weekAmountOut = new ArrayList<>(weeks.length); - for (String week : weeks) { - List 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, List, List>> monthAmount = CompletableFuture.supplyAsync(() -> { - long month_start = DateUtil.beginOfMonth(date).getTime() / 1000; - long month_end = DateUtil.endOfMonth(date).getTime() / 1000; - List month_orderAmountSummary = statisticsMapper.getOrderAmountSummary(month_start, month_end); - - int dayOfMonth = DateUtil.endOfMonth(date).dayOfMonth(); - List days = new ArrayList<>(dayOfMonth); - - for (int i = 0; i < dayOfMonth; i++) { - days.add(i + 1 + "号"); - } - Map> 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> 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 monthAmountIn = new ArrayList<>(dayOfMonth); - List monthAmountOut = new ArrayList<>(dayOfMonth); - for (String day : days) { - List 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 = 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, List>> yearAmount = CompletableFuture.supplyAsync(() -> { - long year_start = DateUtil.beginOfYear(date).getTime() / 1000; - long year_end = DateUtil.endOfYear(date).getTime() / 1000; - List year_orderAmountSummary = statisticsMapper.getOrderAmountSummary(year_start, year_end); - - Map> 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> 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 yearAmountIn = new ArrayList<>(months.length); - List yearAmountOut = new ArrayList<>(months.length); - for (String month : months) { - List 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 = 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 = CompletableFuture.supplyAsync(statisticsMapper::getTodayOrderSummary) - .exceptionally(ex -> { - log.error("订单动态数据获取失败", ex); - return new TodayOrderSummary(); - }); - - Tuple2, List> weekAmount_ = weekAmount.get(); - Tuple3, List, List> monthAmount_ = monthAmount.get(); - Tuple2, List> yearAmount_ = yearAmount.get(); - return MapUtil.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 obtainOrder(Long userId) { - return statisticsMapper.obtainOrder(userId); - } + List obtainOrder(Long userId); } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/TianQingStatisticsService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/TianQingStatisticsService.java new file mode 100644 index 0000000..401d596 --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/statistics/service/TianQingStatisticsService.java @@ -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 obtainData() throws Exception { + CompletableFuture> carTrends = CompletableFuture.supplyAsync(statisticsMapper::getCarTrends) + .exceptionally(ex -> { + log.error("车辆动态数据获取失败", ex); + return Collections.emptyList(); + }); + CompletableFuture userSummary = CompletableFuture.supplyAsync(statisticsMapper::getUserSummary) + .exceptionally(ex -> { + log.error("用户动态数据获取失败", ex); + return null; + }); + CompletableFuture> 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> 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> summaries = CompletableFuture.supplyAsync(statisticsMapper::getOrderSummary) + .thenApply(orderSummary -> { + List userIds = orderSummary.stream().map(OrderSummary::getUserId).distinct().collect(Collectors.toList()); + Map> map = GroupUtil.k_a(orderSummary, OrderSummary::getUserId); + Map> map_ = new HashMap<>(); + map.forEach((s, orderSummaries) -> map_.put(s, GroupUtil.k_o(orderSummaries, OrderSummary::getFinish))); + return userIds.stream() + .map(it -> { + Map 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 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 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 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 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 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, List>> weekAmount = CompletableFuture.supplyAsync(() -> { + long week_start = DateUtil.beginOfWeek(date).getTime() / 1000; + long week_end = DateUtil.endOfWeek(date).getTime() / 1000; + List week_orderAmountSummary = statisticsMapper.getOrderAmountSummary(week_start, week_end); + Map> 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> 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 weekAmountIn = new ArrayList<>(weeks.length); + for (String week : weeks) { + List 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 weekAmountOut = new ArrayList<>(weeks.length); + for (String week : weeks) { + List 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, List, List>> monthAmount = CompletableFuture.supplyAsync(() -> { + long month_start = DateUtil.beginOfMonth(date).getTime() / 1000; + long month_end = DateUtil.endOfMonth(date).getTime() / 1000; + List month_orderAmountSummary = statisticsMapper.getOrderAmountSummary(month_start, month_end); + + int dayOfMonth = DateUtil.endOfMonth(date).dayOfMonth(); + List days = new ArrayList<>(dayOfMonth); + + for (int i = 0; i < dayOfMonth; i++) { + days.add(i + 1 + "号"); + } + Map> 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> 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 monthAmountIn = new ArrayList<>(dayOfMonth); + List monthAmountOut = new ArrayList<>(dayOfMonth); + for (String day : days) { + List 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 = 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, List>> yearAmount = CompletableFuture.supplyAsync(() -> { + long year_start = DateUtil.beginOfYear(date).getTime() / 1000; + long year_end = DateUtil.endOfYear(date).getTime() / 1000; + List year_orderAmountSummary = statisticsMapper.getOrderAmountSummary(year_start, year_end); + + Map> 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> 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 yearAmountIn = new ArrayList<>(months.length); + List yearAmountOut = new ArrayList<>(months.length); + for (String month : months) { + List 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 = 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 = CompletableFuture.supplyAsync(statisticsMapper::getTodayOrderSummary) + .exceptionally(ex -> { + log.error("订单动态数据获取失败", ex); + return new TodayOrderSummary(); + }); + + Tuple2, List> weekAmount_ = weekAmount.get(); + Tuple3, List, List> monthAmount_ = monthAmount.get(); + Tuple2, List> yearAmount_ = yearAmount.get(); + return MapUtil.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 obtainOrder(Long userId) { + return statisticsMapper.obtainOrder(userId); + } +} diff --git a/njzscloud-svr/src/main/resources/application-dev.yml b/njzscloud-svr/src/main/resources/application-dev_shou_ju.yml similarity index 56% rename from njzscloud-svr/src/main/resources/application-dev.yml rename to njzscloud-svr/src/main/resources/application-dev_shou_ju.yml index 0e2c745..c02890e 100644 --- a/njzscloud-svr/src/main/resources/application-dev.yml +++ b/njzscloud-svr/src/main/resources/application-dev_shou_ju.yml @@ -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 diff --git a/njzscloud-svr/src/main/resources/application-dev_tian_qing.yml b/njzscloud-svr/src/main/resources/application-dev_tian_qing.yml new file mode 100644 index 0000000..21ebf4e --- /dev/null +++ b/njzscloud-svr/src/main/resources/application-dev_tian_qing.yml @@ -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 diff --git a/njzscloud-svr/src/main/resources/application-prod.yml b/njzscloud-svr/src/main/resources/application-prod.yml deleted file mode 100644 index 898003d..0000000 --- a/njzscloud-svr/src/main/resources/application-prod.yml +++ /dev/null @@ -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 diff --git a/njzscloud-svr/src/main/resources/application-shou_ju.yml b/njzscloud-svr/src/main/resources/application-shou_ju.yml new file mode 100644 index 0000000..29d958a --- /dev/null +++ b/njzscloud-svr/src/main/resources/application-shou_ju.yml @@ -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 diff --git a/njzscloud-svr/src/main/resources/application-tian_qing.yml b/njzscloud-svr/src/main/resources/application-tian_qing.yml new file mode 100644 index 0000000..6b9a754 --- /dev/null +++ b/njzscloud-svr/src/main/resources/application-tian_qing.yml @@ -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 diff --git a/njzscloud-svr/src/main/resources/mapper/StatisticsMapper.xml b/njzscloud-svr/src/main/resources/mapper/ShouJuStatisticsMapper.xml similarity index 95% rename from njzscloud-svr/src/main/resources/mapper/StatisticsMapper.xml rename to njzscloud-svr/src/main/resources/mapper/ShouJuStatisticsMapper.xml index 2241ca5..ae08721 100644 --- a/njzscloud-svr/src/main/resources/mapper/StatisticsMapper.xml +++ b/njzscloud-svr/src/main/resources/mapper/ShouJuStatisticsMapper.xml @@ -1,7 +1,7 @@ - + + 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 + + + + + + + + + + +