From 75033aa225bb22e1ec04630b895d077caf9dc03e Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 13 Aug 2025 11:47:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:app=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feign/RemoteCanteenCategoryService.java | 7 +- .../controller/CanteenCategoryController.java | 2 +- .../api/constant/total/DateRangeTypeEnum.java | 31 ++++ .../order/app/HardAppProductByCanteenDto.java | 26 ++++ .../app/HardAppProductByClassifyDto.java | 27 ++++ .../order/app/HardAppProductByCanteenVo.java | 45 ++++++ .../order/app/HardAppProductByClassifyVo.java | 32 +++++ .../order/HardCanteenTotalController.java | 27 ++++ .../hard/mapper/order/HardCarMapper.java | 14 ++ .../hard/service/HardCanteenTotalService.java | 15 +- .../order/HardCanteenTotalServiceImpl.java | 133 ++++++++++++++++++ .../impl/order/HardOrderServiceImpl.java | 2 +- .../resources/mapper/order/HardCarMapper.xml | 63 +++++++++ 13 files changed, 418 insertions(+), 6 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/total/DateRangeTypeEnum.java create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppProductByCanteenDto.java create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppProductByClassifyDto.java create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppProductByCanteenVo.java create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppProductByClassifyVo.java diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenCategoryService.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenCategoryService.java index 76c4c7a31..3f3cb4421 100644 --- a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenCategoryService.java +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenCategoryService.java @@ -20,11 +20,14 @@ package com.bsd.pjcloud.canteen.api.feign; +import com.bsd.pjcloud.canteen.entity.CanteenCategoryEntity; import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; import com.bsd.pjcloud.common.core.util.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * @author zjf * @date 2018/6/22 @@ -35,10 +38,8 @@ public interface RemoteCanteenCategoryService { /** * 查询所有的菜品分类 - * @param categoryType 餐段类型,1早餐 2中 3晚餐 不传默认所有 - * @return R */ @GetMapping("/canteenCategory/getAllSimple") - R getAllSimple(@RequestParam(value = "categoryType",required = false) String categoryType); + R> getAllSimple(@RequestParam(value = "categoryType", required = false) String categoryType, @RequestParam(value = "name", required = false) String name); } 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 a4a35787c..fe9b76cb8 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 @@ -139,7 +139,7 @@ public class CanteenCategoryController { @Operation(summary = "通过id查询", description = "通过id查询") @GetMapping("/getAllSimple") // @PreAuthorize("@pms.hasPermission('canteen_canteenCategory_view')") - public R getAllSimple(@RequestParam(value = "categoryType", required = false) String categoryType, + public R> getAllSimple(@RequestParam(value = "categoryType", required = false) String categoryType, @RequestParam(value = "name", required = false) String name) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.like(StringUtils.isNotBlank(name), CanteenCategoryEntity::getName, name); diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/total/DateRangeTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/total/DateRangeTypeEnum.java new file mode 100644 index 000000000..7357c4b06 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/total/DateRangeTypeEnum.java @@ -0,0 +1,31 @@ +package com.bsd.pjcloud.hard.api.constant.total; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 日期范围类型 + */ +@AllArgsConstructor +@Getter +public enum DateRangeTypeEnum { + + TODAY("1", "本天"), + THIS_WEEK("2", "本周"), + THIS_MONTH("3", "本月"), + CURRENT_SEASON("4", "本季度"), + THIS_YEAR("5", "本年"), + ; + + private final String type; + private final String description; + + public static DateRangeTypeEnum valueOfByType(String type) { + if (ObjectUtil.isEmpty(type)) return null; + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); + } + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppProductByCanteenDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppProductByCanteenDto.java new file mode 100644 index 000000000..8e228b3eb --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppProductByCanteenDto.java @@ -0,0 +1,26 @@ +package com.bsd.pjcloud.hard.api.dto.order.app; + +import com.bsd.pjcloud.hard.api.constant.total.DateRangeTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 各个食堂菜品购买统计 + */ +@Data +public class HardAppProductByCanteenDto { + + @Schema(description = "食堂id") + private List canteenIdList; + + @Schema(description = "用餐时间段") + private String hourType; + + @Schema(description = "购买时间根据dateType运算") + private LocalDate[] payTimeList; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppProductByClassifyDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppProductByClassifyDto.java new file mode 100644 index 000000000..3f7bdf37f --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppProductByClassifyDto.java @@ -0,0 +1,27 @@ +package com.bsd.pjcloud.hard.api.dto.order.app; + +import com.bsd.pjcloud.hard.api.constant.total.DateRangeTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 菜品销量按照分类查询 + */ +@Data +public class HardAppProductByClassifyDto { + + @Schema(description = "食堂id") + private List canteenIdList; + + @Schema(description = "日期类型") + private DateRangeTypeEnum dateType; + + @Schema(description = "用餐时间段") + private String hourType; + + @Schema(description = "购买时间根据dateType运算") + private LocalDateTime[] payTimeList; +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppProductByCanteenVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppProductByCanteenVo.java new file mode 100644 index 000000000..e2cf74ce9 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppProductByCanteenVo.java @@ -0,0 +1,45 @@ +package com.bsd.pjcloud.hard.api.vo.order.app; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 菜品销量按照分类查询 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class HardAppProductByCanteenVo { + + @Schema(description = "商户id") + private Long canteenId; + + @Schema(description = "商户名") + private String canteenName; + + @Schema(description = "购买总数") + private Long payCount; + + @Schema(description = "购买总金额") + private BigDecimal totalPrice; + + @Schema(description = "购买总数量") + private Long timeCount; + + @Schema(description = "购买总人数") + private Long payUserCount; + + @Schema(description = "时间") + private LocalDate time; + + @Schema(description = "周几") + private String weekStr; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppProductByClassifyVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppProductByClassifyVo.java new file mode 100644 index 000000000..0dddec1f7 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/app/HardAppProductByClassifyVo.java @@ -0,0 +1,32 @@ +package com.bsd.pjcloud.hard.api.vo.order.app; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 菜品销量按照分类查询 + */ +@Data +public class HardAppProductByClassifyVo { + + @Schema(description = "分类id") + private Long classifyId; + + @Schema(description = "分类名") + private String classifyName; + + @Schema(description = "购买总数") + private Long payCount; + + @Schema(description = "购买总金额") + private BigDecimal totalPrice; + + @Schema(description = "购买总数量") + private Long timeCount; + + @Schema(description = "购买总人数") + private Long payUserCount; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java index ca428fc8d..8fa6f4d99 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java @@ -3,10 +3,15 @@ package com.bsd.pjcloud.hard.controller.order; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.hard.api.dto.order.HardCarDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByCanteenDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByClassifyDto; import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByCanteenVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByClassifyVo; import com.bsd.pjcloud.hard.service.HardCanteenTotalService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -30,6 +35,28 @@ public class HardCanteenTotalController { private final HardCanteenTotalService canteenTotalService; + /* ************************************* start app start ************************************* */ + + /** + * 菜品销量按照分类查询 + */ + @Operation(summary = "菜品销量按照分类查询", description = "菜品销量按照分类查询") + @PostMapping("/app/product-by-classify") + public R> productByClassify(@RequestBody HardAppProductByClassifyDto dto) { + return R.ok(canteenTotalService.productByClassify(dto)); + } + + /** + * 近一周各个食堂菜品购买统计 + */ + @Inner(value = false) + @Operation(summary = "近一周各个食堂菜品购买统计", description = "近一周各个食堂菜品购买统计") + @PostMapping("/app/product-by-canteen") + public R> productByCanteen(@RequestBody HardAppProductByCanteenDto dto) { + return R.ok(canteenTotalService.productByCanteen(dto)); + } + + /* ************************************* start app start ************************************* */ @Operation(summary = "根据部门 食堂菜品购买统计", description = "根据部门 食堂菜品购买统计") @PostMapping("/proudct-total-by-dept") public R> productTotalByDept(@ParameterObject Page page, @RequestBody HardOrderDto dto) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardCarMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardCarMapper.java index e91c553c6..27c926595 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardCarMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardCarMapper.java @@ -3,11 +3,15 @@ package com.bsd.pjcloud.hard.mapper.order; 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.app.HardAppProductByCanteenDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByClassifyDto; import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo; import com.bsd.pjcloud.hard.api.dto.order.HardCarDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByCanteenVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByClassifyVo; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -33,4 +37,14 @@ public interface HardCarMapper extends PjcloudBaseMapper { List listByDept(@Param("dto") HardOrderDto dto, DataScope dataScope); List listByHourType(@Param("dto") HardOrderDto dto); + + /** + * 菜品销量按照分类查询 + */ + List productByClassify(@Param("dto") HardAppProductByClassifyDto dto); + + /** + * 各个食堂菜品购买统计 + */ + List productByCanteen(@Param("dto") HardAppProductByCanteenDto dto); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCanteenTotalService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCanteenTotalService.java index 2ccc58d4c..26d280a1d 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCanteenTotalService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCanteenTotalService.java @@ -4,14 +4,28 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.hard.api.dto.order.HardCarDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByCanteenDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByClassifyDto; import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByCanteenVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByClassifyVo; import java.util.List; public interface HardCanteenTotalService { + /** + * 菜品销量按照分类查询 + */ + List productByClassify(HardAppProductByClassifyDto dto); + + /** + * 近一周各个食堂菜品购买统计 + */ + List productByCanteen(HardAppProductByCanteenDto dto); + /** * 根据部门 食堂菜品购买统计 */ @@ -31,5 +45,4 @@ public interface HardCanteenTotalService { * 食堂菜品购买部门统计 */ List listByDept(HardOrderDto dto, DataScope dataScope); - } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java index 8ab5a494f..c92b12600 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java @@ -1,17 +1,25 @@ package com.bsd.pjcloud.hard.service.impl.order; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.entity.SysDept; import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; +import com.bsd.pjcloud.canteen.api.feign.RemoteCanteenCategoryService; +import com.bsd.pjcloud.canteen.entity.CanteenCategoryEntity; import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; +import com.bsd.pjcloud.hard.api.constant.total.DateRangeTypeEnum; import com.bsd.pjcloud.hard.api.dto.order.HardCarDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByCanteenDto; +import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByClassifyDto; import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByCanteenVo; +import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByClassifyVo; import com.bsd.pjcloud.hard.mapper.order.HardCarMapper; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.service.HardCanteenTotalService; @@ -22,13 +30,19 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; +import java.time.DayOfWeek; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.stream.Collectors; /** @@ -48,6 +62,57 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService { private final RemoteDeptService remoteDeptService; private final RemoteMchService remoteMchService; + private final RemoteCanteenCategoryService canteenCategoryService; + + /** + * 菜品销量按照分类查询 + */ + @Override + public List productByClassify(HardAppProductByClassifyDto dto) { + if (ObjectUtil.isNotEmpty(dto.getDateType())) { + LocalDateTime[] payTimeList = transitionDateTypeToTimeList(dto.getDateType()); + if (ObjectUtil.isNotEmpty(payTimeList)) dto.setPayTimeList(payTimeList); + } + List totalList = hardCarMapper.productByClassify(dto); + // 处理一下 + disposeProductByClassify(totalList); + return totalList; + } + + /** + * 近一周各个食堂菜品购买统计 + */ + @Override + public List productByCanteen(HardAppProductByCanteenDto dto) { + dto.setPayTimeList(new LocalDate[]{LocalDate.now().minusWeeks(1), LocalDate.now()}); + // 查询近一周的时间 + List dateList = new LinkedList<>(); + LocalDate startTime = dto.getPayTimeList()[0]; + LocalDate endTime = dto.getPayTimeList()[1]; + LocalDate currentDate = startTime; + while (!currentDate.isAfter(endTime)) { + HardAppProductByCanteenVo entity = HardAppProductByCanteenVo.builder().payCount(0L).totalPrice(BigDecimal.ZERO).timeCount(0L).payUserCount(0L).time(currentDate).weekStr(LocalDateTimeUtil.dayOfWeek(currentDate).toChinese()).build(); + dateList.add(entity); + currentDate = currentDate.plusDays(1); + } + List totalList = hardCarMapper.productByCanteen(dto); + if (ObjectUtil.isNotEmpty(totalList)) { + for (HardAppProductByCanteenVo vo : totalList) { + if (ObjectUtil.isEmpty(vo.getTime())) continue; + dateList.stream().filter(item -> ObjectUtil.equals(item.getTime(), vo.getTime())).findFirst().ifPresent(target -> { + target.setCanteenId(vo.getCanteenId()); + target.setPayCount(vo.getPayCount()); + target.setTotalPrice(vo.getTotalPrice()); + target.setTimeCount(vo.getTimeCount()); + target.setPayUserCount(vo.getPayUserCount()); + }); + } + } + // 处理一下 + disposeProductByCanteen(dateList); + return dateList; + } + /** * 根据部门 食堂菜品购买统计 */ @@ -172,4 +237,72 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService { } } } + + private LocalDateTime[] transitionDateTypeToTimeList(DateRangeTypeEnum dateType) { + LocalDateTime now = LocalDateTime.now(); + switch (dateType) { + case TODAY: + return new LocalDateTime[]{ + LocalDateTime.now().withHour(0).withMinute(0).withSecond(0), + LocalDateTime.now().withHour(23).withMinute(59).withSecond(59) + }; + case THIS_WEEK: + LocalDateTime weekStart = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).withHour(0).withMinute(0).withSecond(0); + LocalDateTime weekEnd = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)).withHour(23).withMinute(59).withSecond(59); + return new LocalDateTime[]{weekStart, weekEnd}; + case THIS_MONTH: + LocalDateTime monthStart = now.with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0); + LocalDateTime monthEnd = now.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59); + return new LocalDateTime[]{monthStart, monthEnd}; + case CURRENT_SEASON: + LocalDateTime quarterStart = now.with(now.getMonth().firstMonthOfQuarter()).with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0); + LocalDateTime quarterEnd = quarterStart.plusMonths(2).with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59); + return new LocalDateTime[]{quarterStart, quarterEnd}; + case THIS_YEAR: + LocalDateTime yearStart = now.with(TemporalAdjusters.firstDayOfYear()); + LocalDateTime yearEnd = now.with(TemporalAdjusters.lastDayOfYear()); + return new LocalDateTime[]{yearStart, yearEnd}; + default: + return null; + } + } + + private void disposeProductByClassify(List list) { + if (ObjectUtil.isEmpty(list)) return; + // 处理分类 + List classifyIdList = list.stream().map(HardAppProductByClassifyVo::getClassifyId).filter(ObjectUtil::isNotEmpty).distinct().toList(); + if (ObjectUtil.isNotEmpty(classifyIdList)) { + List categoryList = canteenCategoryService.getAllSimple(null, null).getData(); + if (ObjectUtil.isNotEmpty(categoryList)) { + Map categoryMap = categoryList.stream().collect(Collectors.toMap(CanteenCategoryEntity::getId, v -> v)); + if (ObjectUtil.isNotEmpty(categoryMap)) { + for (HardAppProductByClassifyVo i : list) { + CanteenCategoryEntity category = categoryMap.get(i.getClassifyId()); + if (ObjectUtil.isNotEmpty(category)) { + i.setClassifyName(category.getName()); + } + } + } + } + } + } + + private void disposeProductByCanteen(List list) { + if (ObjectUtil.isEmpty(list)) return; + // 处理商户 + List canteenIdList = list.stream().map(HardAppProductByCanteenVo::getCanteenId).toList(); + if (ObjectUtil.isNotEmpty(canteenIdList)) { + List mchList = remoteMchService.getByIds(canteenIdList).getData(); + if (ObjectUtil.isNotEmpty(mchList)) { + Map categoryMap = mchList.stream().collect(Collectors.toMap(MchManageVo::getId, v -> v)); + for (HardAppProductByCanteenVo i : list) { + MchManageVo category = categoryMap.get(i.getCanteenId()); + if (ObjectUtil.isNotEmpty(category)) { + i.setCanteenName(category.getName()); + } + } + } + } + } + } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index df9b829c8..624265337 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -1078,7 +1078,7 @@ public class HardOrderServiceImpl extends ServiceImpl deptIds = list.stream().map(HardOrderVo::getDeptId).filter(ObjectUtil::isNotEmpty).distinct().toList(); + List deptIds = list.stream().map(HardOrderVo::getUserDeptId).filter(ObjectUtil::isNotEmpty).distinct().toList(); if (ObjectUtil.isNotEmpty(deptIds)) { R> deptList = deptService.getDeptByDeptIds(deptIds); if (ObjectUtil.isNotEmpty(deptList.getData())) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml index 3956cd160..1a34a9df6 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml @@ -286,4 +286,67 @@ order by o.user_dept_id, o.hour_type + + + + \ No newline at end of file