From a3b0db63b3afd2ced41a9a6c6982c180b913e284 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 10 Apr 2025 18:25:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:android=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CanteenCategoryController.java | 2 +- .../api/dto/order/HardChartLatitudeVo.java | 48 +++++++- .../dto/order/HardOrderSumAndCountDto.java | 2 + .../api/vo/order/HardOrderSumAndCountVo.java | 4 + pjcloud-hardware/pjcloud-hardware-biz/pom.xml | 6 + .../controller/hard/HardApiController.java | 7 +- .../hard/mapper/order/HardOrderMapper.java | 3 + .../pjcloud/hard/service/HardApiService.java | 1 + .../hard/service/HardOrderTotalService.java | 6 + .../impl/order/HardOrderTotalServiceImpl.java | 106 ++++++++++++++++++ .../mapper/order/HardOrderMapper.xml | 41 +++++++ 11 files changed, 220 insertions(+), 6 deletions(-) diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenCategoryController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenCategoryController.java index 13108a4dc..a4a35787c 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenCategoryController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenCategoryController.java @@ -138,7 +138,7 @@ public class CanteenCategoryController { */ @Operation(summary = "通过id查询", description = "通过id查询") @GetMapping("/getAllSimple") - @PreAuthorize("@pms.hasPermission('canteen_canteenCategory_view')") + // @PreAuthorize("@pms.hasPermission('canteen_canteenCategory_view')") public R getAllSimple(@RequestParam(value = "categoryType", required = false) String categoryType, @RequestParam(value = "name", required = false) String name) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardChartLatitudeVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardChartLatitudeVo.java index 6904b1433..1762e4c93 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardChartLatitudeVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardChartLatitudeVo.java @@ -1,18 +1,62 @@ package com.bsd.pjcloud.hard.api.dto.order; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class HardChartLatitudeVo { + @Schema(description = "早餐、中餐、晚餐") + private String hourType; + /** * 每天的交易量 */ - private Long dayCount; + private Long dayCount = 0L; /** * 每天的交易金额 */ - private Long dayPrice; + private Long dayPrice = 0L; + + /** + * 每周的交易量 + */ + private Long weekCount = 0L; + + /** + * 每周的交易 + */ + private Long weekPrice = 0L; + + /** + * 每月的交易金额 + */ + private Long monthCount = 0L; + + /** + * 每月的交易金额 + */ + private Long monthPrice = 0L; + + /** + * 每年的交易金额 + */ + private Long yearCount = 0L; + + /** + * 每年的交易金额 + */ + private Long yearPrice = 0L; + + /** + * 全部交易量 + */ + private Long totalCount = 0L; + + /** + * 全部交易金额 + */ + private Long totalPrice = 0L; } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java index 893674189..e6893a34a 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java @@ -16,4 +16,6 @@ public class HardOrderSumAndCountDto { private Long walletTypeId; + private List mchIds; + } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSumAndCountVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSumAndCountVo.java index 1cb18ec48..c18dc543e 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSumAndCountVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSumAndCountVo.java @@ -1,11 +1,15 @@ package com.bsd.pjcloud.hard.api.vo.order; +import com.bsd.pjcloud.hard.api.constant.order.HardHourTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class HardOrderSumAndCountVo { + @Schema(description = "早餐、中餐、晚餐") + private String hourType; + @Schema(description = "部门id") private Long deptId; diff --git a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml index d332df271..240860ee9 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml @@ -154,6 +154,12 @@ 2.0.4 compile + + joda-time + joda-time + 2.12.7 + compile + diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java index ba2c34ff8..1990058f4 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java @@ -8,6 +8,7 @@ import com.bsd.pjcloud.hard.api.dto.async.SyncOfflineReqVo; import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HardBindDto; import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.HardChartLatitudeVo; import com.bsd.pjcloud.hard.api.vo.HardInvoiceVo; import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo; import com.bsd.pjcloud.hard.api.vo.android.HardAdUserVo; @@ -116,9 +117,9 @@ public class HardApiController { } @GetMapping("/chart-latitude") - @Operation(summary = "统计每天、每周、每月、每年") - public R totalChart(@RequestParam String card) { - return R.ok(hardApiService.totalChart(card)); + @Operation(summary = "统计每天、每周、每月、每年的交易人数和次数") + public R> chartLatitude(@RequestParam Long merchantId) { + return R.ok(hardOrderTotalService.chartLatitude(merchantId)); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java index efb85038f..10520482d 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.hard.api.dto.order.HardChartLatitudeVo; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderSumAndCountDto; import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity; @@ -96,5 +97,7 @@ public interface HardOrderMapper extends PjcloudBaseMapper { List sumAndCount(@Param("dto") HardOrderSumAndCountDto dto); + List sumAndCountTotalByHourType(@Param("dto") HardOrderSumAndCountDto dto); + HardZyCardSyncVo totalYearMonthDay(@Param("dto") HardOrderDto hardOrderDto); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardApiService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardApiService.java index cb116e25a..5fb2f5957 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardApiService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardApiService.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.hard.service; import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; +import com.bsd.pjcloud.hard.api.dto.order.HardChartLatitudeVo; import com.bsd.pjcloud.hard.api.vo.android.HardAdUserVo; import jakarta.validation.Valid; diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java index ea7d71ac3..f3f777d5f 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.hard.api.dto.order.HardChartLatitudeVo; import com.bsd.pjcloud.hard.api.dto.order.HardDeptTotalDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.vo.order.*; @@ -39,4 +40,9 @@ public interface HardOrderTotalService { * 正元统计交易数据同步 */ HardZyCardSyncVo totalYearMonthDay(HardOrderDto dto); + + /** + * 统计每天、每周、每月、每年的交易人数和次数 + */ + List chartLatitude(Long merchantId); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java index 44b496d63..1ebacbcf2 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.dto.DeptAllListDto; import com.bsd.pjcloud.admin.api.entity.SysDept; import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; +import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.DataScopeFuncEnum; @@ -16,6 +17,7 @@ import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto; import com.bsd.pjcloud.hard.api.dto.hard.CurrentUserHardTypeInfoDto; +import com.bsd.pjcloud.hard.api.dto.order.HardChartLatitudeVo; import com.bsd.pjcloud.hard.api.dto.order.HardDeptTotalDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderSumAndCountDto; @@ -38,6 +40,13 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.TemporalAdjusters; +import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -474,4 +483,101 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { public HardZyCardSyncVo totalYearMonthDay(HardOrderDto dto) { return hardOrderMapper.totalYearMonthDay(dto); } + + /** + * 统计每天、每周、每月、每年的交易人数和次数 + */ + @Override + public List chartLatitude(Long merchantId) { + List resultList = new LinkedList<>(); + for (int i = 1; i <= 3; i++) { + HardChartLatitudeVo hardChartLatitudeVo = new HardChartLatitudeVo(); + hardChartLatitudeVo.setHourType(String.valueOf(i)); + resultList.add(hardChartLatitudeVo); + } + HardOrderSumAndCountDto dto = new HardOrderSumAndCountDto(); + dto.setMchIds(List.of(merchantId)); + dto.setOrderStatusCodes(HardOrderStatusEnum.getPayPrice()); + LocalDateTime now = LocalDateTime.now(); + // 每天 + LocalDateTime startOfDay = now.with(LocalTime.MIN); + LocalDateTime endOfDay = now.with(LocalTime.MAX); + CompletableFuture> dayTotalListFuture = CompletableFuture.supplyAsync(() -> { + HardOrderSumAndCountDto dayTotalDto = BeanUtil.toBean(dto, HardOrderSumAndCountDto.class); + dayTotalDto.setCreateTimeList(new LocalDateTime[]{startOfDay, endOfDay}); + return hardOrderMapper.sumAndCountTotalByHourType(dayTotalDto); + }); + // 每周 + LocalDateTime startOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + LocalDateTime endOfWeek = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); + CompletableFuture> weekTotalListFuture = CompletableFuture.supplyAsync(() -> { + HardOrderSumAndCountDto weekTotalDto = BeanUtil.toBean(dto, HardOrderSumAndCountDto.class); + weekTotalDto.setCreateTimeList(new LocalDateTime[]{startOfWeek.with(LocalTime.MIN), endOfWeek.with(LocalTime.MAX)}); + return hardOrderMapper.sumAndCountTotalByHourType(weekTotalDto); + }); + // 每月 + LocalDate startOfMonth = now.toLocalDate().withDayOfMonth(1); + LocalDate endOfMonth = now.toLocalDate().withDayOfMonth(now.toLocalDate().lengthOfMonth()); + LocalDateTime startOfMonthTime = startOfMonth.atStartOfDay(); + LocalDateTime endOfMonthTime = endOfMonth.atTime(LocalTime.MAX); + CompletableFuture> monthTotalListFuture = CompletableFuture.supplyAsync(() -> { + HardOrderSumAndCountDto weekTotalDto = BeanUtil.toBean(dto, HardOrderSumAndCountDto.class); + weekTotalDto.setCreateTimeList(new LocalDateTime[]{startOfMonthTime, endOfMonthTime}); + return hardOrderMapper.sumAndCountTotalByHourType(weekTotalDto); + }); + // 每年 + LocalDate startOfYear = now.toLocalDate().minusYears(1).withDayOfYear(1); + LocalDate endOfYear = now.toLocalDate().minusYears(1).withDayOfYear(now.toLocalDate().minusYears(1).lengthOfYear()); + LocalDateTime startOfYearTime = startOfYear.atStartOfDay(); + LocalDateTime endOfYearTime = endOfYear.atTime(LocalTime.MAX); + CompletableFuture> yearTotalListFuture = CompletableFuture.supplyAsync(() -> { + HardOrderSumAndCountDto weekTotalDto = BeanUtil.toBean(dto, HardOrderSumAndCountDto.class); + weekTotalDto.setCreateTimeList(new LocalDateTime[]{startOfYearTime, endOfYearTime}); + return hardOrderMapper.sumAndCountTotalByHourType(weekTotalDto); + }); + // 全部 + CompletableFuture> totalListFuture = CompletableFuture.supplyAsync(() -> { + HardOrderSumAndCountDto weekTotalDto = BeanUtil.toBean(dto, HardOrderSumAndCountDto.class); + return hardOrderMapper.sumAndCountTotalByHourType(weekTotalDto); + }); + CompletableFuture allFutures = CompletableFuture.allOf(dayTotalListFuture, weekTotalListFuture, monthTotalListFuture, yearTotalListFuture, totalListFuture); + allFutures.join(); + List dayTotalList = dayTotalListFuture.join(); + List weekTotalList = weekTotalListFuture.join(); + List monthTotalList = monthTotalListFuture.join(); + List yearTotalList = yearTotalListFuture.join(); + List totalList = totalListFuture.join(); + for (HardChartLatitudeVo v : resultList) { + // 每天 + dayTotalList.stream().filter(i -> ObjectUtil.equals(i.getHourType(), v.getHourType())).findFirst().ifPresent(i -> { + if (ObjectUtil.isNotEmpty(i.getCount())) v.setDayCount(i.getCount()); + if (ObjectUtil.isNotEmpty(i.getSum())) v.setDayPrice(i.getSum()); + }); + // 每周 + weekTotalList.stream().filter(i -> ObjectUtil.equals(i.getHourType(), v.getHourType())).findFirst().ifPresent(i -> { + if (ObjectUtil.isNotEmpty(i.getCount())) v.setWeekCount(i.getCount()); + if (ObjectUtil.isNotEmpty(i.getSum())) v.setWeekPrice(i.getSum()); + }); + // 每月 + monthTotalList.stream().filter(i -> ObjectUtil.equals(i.getHourType(), v.getHourType())).findFirst().ifPresent(i -> { + if (ObjectUtil.isNotEmpty(i.getCount())) v.setMonthCount(i.getCount()); + if (ObjectUtil.isNotEmpty(i.getSum())) v.setMonthPrice(i.getSum()); + }); + // 每年 + yearTotalList.stream().filter(i -> ObjectUtil.equals(i.getHourType(), v.getHourType())).findFirst().ifPresent(i -> { + if (ObjectUtil.isNotEmpty(i.getCount())) v.setYearCount(i.getCount()); + if (ObjectUtil.isNotEmpty(i.getSum())) v.setYearPrice(i.getSum()); + }); + // 全部 + totalList.stream().filter(i -> ObjectUtil.equals(i.getHourType(), v.getHourType())).findFirst().ifPresent(i -> { + if (ObjectUtil.isNotEmpty(i.getCount())) v.setTotalCount(i.getCount()); + if (ObjectUtil.isNotEmpty(i.getSum())) v.setTotalPrice(i.getSum()); + }); + } + // 加入全部统计 + HardChartLatitudeVo total = BeanUtils.toBean(resultList.get(0), HardChartLatitudeVo.class); + total.setHourType("-1"); + resultList.add(total); + return resultList; + } } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml index a54048415..4d0251622 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml @@ -292,10 +292,51 @@ and a.create_time between #{dto.createTimeList[0]} and #{dto.createTimeList[1]} + + and a.merchant_id in + + #{v} + + group by a.user_dept_id + +