From f01abe0aabbfd94fc6e626bc524fb31ef8978c5c Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 10 Jun 2025 18:24:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B6=88=E8=B4=B9=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hard/api/dto/order/HardOrderDto.java | 4 + .../dto/order/HardOrderSumAndCountDto.java | 2 + .../hard/mapper/order/HardOrderMapper.java | 6 ++ .../impl/order/HardOrderTotalServiceImpl.java | 95 ++++++++++++------- .../mapper/order/HardOrderMapper.xml | 92 ++++++++++++++++++ 5 files changed, 163 insertions(+), 36 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java index e2c5a251a..23b780b6e 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java @@ -37,12 +37,16 @@ public class HardOrderDto extends HardOrderEntity implements BaseIsIncludeTreeIn private LocalDateTime[] payTimeList; + private LocalDateTime[] refundTimeList; + private List orderTypeCodes; private List orderPayTypeCodes; private List hardTypeCodes; + private List refundStatusCodes; + /** * 是否查询购物车列表 */ 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 678ae5f95..5b435e8db 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 @@ -17,6 +17,8 @@ public class HardOrderSumAndCountDto { private List orderStatusCodes; + private List refundStatusCodes; + private LocalDateTime[] createTimeList; private LocalDateTime[] refundTimeList; 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 a6e3655b7..30dc645af 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 @@ -112,14 +112,20 @@ public interface HardOrderMapper extends PjcloudBaseMapper { List listSb(@Param("dto") HardOrderDto dto, DataScope dataScope); + List listRefundSb(@Param("dto") HardOrderDto refundDto, @Param("refundDataScope") DataScope refundDataScope); + List listCs(@Param("dto") HardOrderDto dto, DataScope dataScope); + List listRefundCs(@Param("dto") HardOrderDto refundDto, DataScope refundDataScope); + List listCsByDay(@Param("dto") HardOrderDto totalDto); HardOrderCsVo listCsTotal(@Param("dto") HardOrderDto totalDto); List listOrerPayType(@Param("dto") HardOrderDto dto); + List listOrerRefundPayType(@Param("dto") HardOrderDto refundDto); + List sumAndCount(@Param("dto") HardOrderSumAndCountDto dto); List refundSumAndCount(@Param("dto") HardOrderSumAndCountDto refundDto); 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 e0b8e0abd..30afc74e6 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 @@ -15,6 +15,8 @@ import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; +import com.bsd.pjcloud.hard.api.constant.refund.HardRefundStatusEnum; +import com.bsd.pjcloud.hard.api.constant.refund.HardSaleStatusEnum; 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; @@ -40,6 +42,7 @@ 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; @@ -83,16 +86,13 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { List totalList = hardOrderMapper.listSb(totalDto, totalDataScope); // 扣款总流水 HardOrderDto refundDto = BeanUtil.toBean(dto, HardOrderDto.class); + refundDto.setPayTimeList(null); + refundDto.setRefundTimeList(dto.getPayTimeList()); + refundDto.setRefundStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus())); refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes()); DataScope refundDataScope = DataScope.of().func(DataScopeFuncEnum.ALL); refundDataScope.setScopeDeptName("merchant_dept_id"); - List refundList = hardOrderMapper.listSb(refundDto, refundDataScope); - // 消费净次数 - HardOrderDto profitDto = BeanUtil.toBean(dto, HardOrderDto.class); - profitDto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); - DataScope profitDataScope = DataScope.of().func(DataScopeFuncEnum.ALL); - profitDataScope.setScopeDeptName("merchant_dept_id"); - List profitList = hardOrderMapper.listSb(profitDto, profitDataScope); + List refundList = hardOrderMapper.listRefundSb(refundDto, refundDataScope); // 聚合一下数据 for (HardOrderSbVo v : totalList) { // 退款 @@ -102,12 +102,21 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { v.setTotalRefundCount(i.getTotalPayCount()); }); } + // 消费净金额 + if (ObjectUtil.isNotEmpty(v.getTotalPayPrice())) { + BigDecimal refundPrice = BigDecimal.ZERO; + if (ObjectUtil.isNotEmpty(v.getTotalRefundPrice())) { + refundPrice = v.getTotalRefundPrice(); + } + v.setTotalProfitPrice(v.getTotalPayPrice().subtract(refundPrice)); + } // 消费净次数 - if (ObjectUtil.isNotEmpty(profitList)) { - profitList.stream().filter(i -> ObjectUtil.equals(i.getHardId(), v.getHardId())).findFirst().ifPresent(i -> { - v.setTotalProfitPrice(i.getTotalPayPrice()); - v.setTotalProfitCount(i.getTotalPayCount()); - }); + if (ObjectUtil.isNotEmpty(v.getTotalPayCount())) { + BigDecimal refundCount = BigDecimal.ZERO; + if (ObjectUtil.isNotEmpty(v.getTotalRefundCount())) { + refundCount = v.getTotalRefundCount(); + } + v.setTotalProfitCount(v.getTotalPayCount().subtract(refundCount)); } } if (ObjectUtil.isNotEmpty(totalList)) { @@ -149,16 +158,13 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { List totalList = hardOrderMapper.listCs(totalDto, totalDataScope); // 扣款总流水 HardOrderDto refundDto = BeanUtil.toBean(dto, HardOrderDto.class); + refundDto.setPayTimeList(null); + refundDto.setRefundTimeList(dto.getPayTimeList()); refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes()); + refundDto.setRefundStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus())); DataScope refundDataScope = DataScope.of(); refundDataScope.setScopeDeptName("merchant_dept_id"); - List refundList = hardOrderMapper.listCs(refundDto, refundDataScope); - // 消费净次数 - HardOrderDto profitDto = BeanUtil.toBean(dto, HardOrderDto.class); - profitDto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); - DataScope profitDataScope = DataScope.of(); - profitDataScope.setScopeDeptName("merchant_dept_id"); - List profitList = hardOrderMapper.listCs(profitDto, profitDataScope); + List refundList = hardOrderMapper.listRefundCs(refundDto, refundDataScope); for (HardOrderCsVo v : totalList) { // 退款 if (ObjectUtil.isNotEmpty(refundList)) { @@ -167,12 +173,21 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { v.setTotalRefundCount(i.getTotalPayCount()); }); } + // 消费净金额 + if (ObjectUtil.isNotEmpty(v.getTotalPayPrice())) { + BigDecimal refundPrice = BigDecimal.ZERO; + if (ObjectUtil.isNotEmpty(v.getTotalRefundPrice())) { + refundPrice = v.getTotalRefundPrice(); + } + v.setTotalProfitPrice(v.getTotalPayPrice().subtract(refundPrice)); + } // 消费净次数 - if (ObjectUtil.isNotEmpty(profitList)) { - profitList.stream().filter(i -> ObjectUtil.equals(i.getMerchantId(), v.getMerchantId())).findFirst().ifPresent(i -> { - v.setTotalProfitPrice(i.getTotalPayPrice()); - v.setTotalProfitCount(i.getTotalPayCount()); - }); + if (ObjectUtil.isNotEmpty(v.getTotalPayCount())) { + BigDecimal refundCount = BigDecimal.ZERO; + if (ObjectUtil.isNotEmpty(v.getTotalRefundCount())) { + refundCount = v.getTotalRefundCount(); + } + v.setTotalProfitCount(v.getTotalPayCount().subtract(refundCount)); } } // 聚合一下数据 @@ -396,6 +411,7 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { HardOrderSumAndCountDto refundDto = new HardOrderSumAndCountDto(); refundDto.setUserDeptIds(deptIds); refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes()); + refundDto.setRefundStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus())); if (ObjectUtil.isNotEmpty(dto.getCreateTimeList())) { refundDto.setRefundTimeList(dto.getCreateTimeList()); } @@ -490,14 +506,12 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { List totalList = hardOrderMapper.listOrerPayType(totalDto); // 扣款总流水 HardOrderDto refundDto = BeanUtil.toBean(dto, HardOrderDto.class); + refundDto.setPayTimeList(null); + refundDto.setRefundTimeList(dto.getPayTimeList()); refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes()); + refundDto.setRefundStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus())); refundDto.setOrderPayTypeCodes(payTypeList); - List refundList = hardOrderMapper.listOrerPayType(refundDto); - // 盈利 - HardOrderDto profitDto = BeanUtil.toBean(dto, HardOrderDto.class); - profitDto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); - profitDto.setOrderPayTypeCodes(payTypeList); - List profitList = hardOrderMapper.listOrerPayType(profitDto); + List refundList = hardOrderMapper.listOrerRefundPayType(refundDto); for (HardOrderPayTypeVo v : totalList) { // 退款 if (ObjectUtil.isNotEmpty(refundList)) { @@ -506,12 +520,21 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { v.setTotalRefundCount(i.getTotalPayCount()); }); } - // 盈利 - if (ObjectUtil.isNotEmpty(profitList)) { - profitList.stream().filter(i -> ObjectUtil.equals(i.getPayType(), v.getPayType())).findFirst().ifPresent(i -> { - v.setTotalProfitPrice(i.getTotalPayPrice()); - v.setTotalProfitCount(i.getTotalPayCount()); - }); + // 消费净金额 + if (ObjectUtil.isNotEmpty(v.getTotalPayPrice())) { + BigDecimal refundPrice = BigDecimal.ZERO; + if (ObjectUtil.isNotEmpty(v.getTotalRefundPrice())) { + refundPrice = v.getTotalRefundPrice(); + } + v.setTotalProfitPrice(v.getTotalPayPrice().subtract(refundPrice)); + } + // 消费净次数 + if (ObjectUtil.isNotEmpty(v.getTotalPayCount())) { + BigDecimal refundCount = BigDecimal.ZERO; + if (ObjectUtil.isNotEmpty(v.getTotalRefundCount())) { + refundCount = v.getTotalRefundCount(); + } + v.setTotalProfitCount(v.getTotalPayCount().subtract(refundCount)); } } return totalList; 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 39a9e0925..26e8c6527 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 @@ -242,6 +242,38 @@ group by a.hard_id + + + + + +