diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardSelectOrderMerchIdsDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardSelectOrderMerchIdsDto.java new file mode 100644 index 000000000..5e272a74d --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardSelectOrderMerchIdsDto.java @@ -0,0 +1,17 @@ +package com.bsd.pjcloud.hard.api.dto.order; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class HardSelectOrderMerchIdsDto { + + private List merchIds; + + private List merchTypes; + + private LocalDateTime[] createTimeList; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java index c317a079b..f07ec66d7 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java @@ -23,6 +23,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.order.HardDeptTotalDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; +import com.bsd.pjcloud.hard.api.vo.HardDoorFlowVo; import com.bsd.pjcloud.hard.api.vo.order.*; import com.bsd.pjcloud.hard.api.vo.order.excel.HardMchOrderExcelVo; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; @@ -142,6 +143,25 @@ public class HardOrderTotalController { return R.ok(hardOrderTotalService.listCs(dto)); } + @PostMapping("/page-list-cs-by-month") + @Operation(summary = "商户交易记录(按商户、月)查询") + public R> pageListCsByMonth(@ParameterObject Page page, @RequestBody HardOrderDto dto) { + dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); + // 查询商户和下面的子商户 + List mchDtoIds = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(dto.getMerchantId())) { + List mchList = mchService.getByParentId(dto.getMerchantId()).getData(); + if (ObjectUtil.isNotEmpty(mchList)) { + List mchIds = mchList.stream().map(MchManageVo::getId).toList(); + mchDtoIds.add(dto.getMerchantId()); + mchDtoIds.addAll(mchIds); + dto.setMerchantId(null); + dto.setMchIds(mchDtoIds); + } + } + return R.ok(hardOrderTotalService.pageListCsByMonth(page, dto)); + } + @PostMapping("/page-list-payType") @Operation(summary = "支付方式交易记录") public R> pageListPayType(@RequestBody HardOrderDto dto) { 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 2c6d75541..52f05e49b 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 @@ -10,6 +10,7 @@ import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderSumAndCountDto; +import com.bsd.pjcloud.hard.api.dto.order.HardSelectOrderMerchIdsDto; import com.bsd.pjcloud.hard.api.dto.panel.PanelProductDto; import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; @@ -108,6 +109,8 @@ public interface HardOrderMapper extends PjcloudBaseMapper { return selectListByScope(commonWrapper(dto), DataScope.of()); } + List selectOrderMerchIds(@Param("dto") HardSelectOrderMerchIdsDto dto); + Page scopePageList(Page page, @Param("dto") HardOrderDto dto, DataScope dataScope); List scopeList(@Param("dto") HardOrderDto dto, DataScope dataScope); @@ -122,8 +125,12 @@ public interface HardOrderMapper extends PjcloudBaseMapper { List listRefundCs(@Param("dto") HardOrderDto refundDto, DataScope refundDataScope); + List listRefundCsByMonth(@Param("dto") HardOrderDto refundDto, DataScope refundDataScope); + List listCsByDay(@Param("dto") HardOrderDto totalDto); + Page pageCsByMonth(Page page, @Param("dto") HardOrderDto totalDto, DataScope totalDataScope); + HardOrderCsVo listCsTotal(@Param("dto") HardOrderDto totalDto); List listOrerPayType(@Param("dto") HardOrderDto dto); 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 fae9cbf87..977a1ab3a 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 @@ -21,6 +21,11 @@ public interface HardOrderTotalService { */ List listCs(HardOrderDto dto); + /** + * 商户交易记录(按商户、月)查询 + */ + Page pageListCsByMonth(Page page, HardOrderDto dto); + /** * 根据天查询每个商户的流水 */ @@ -50,5 +55,4 @@ public interface HardOrderTotalService { * 统计每天、每周、每月、每年的交易人数和次数 */ HardChartLatitudeVo 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 7359511f0..9c98464fd 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,14 +15,10 @@ 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; -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; +import com.bsd.pjcloud.hard.api.dto.order.*; import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity; import com.bsd.pjcloud.hard.api.utils.HardUtil; import com.bsd.pjcloud.hard.api.vo.order.*; @@ -48,8 +44,6 @@ 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.Map; import java.util.concurrent.CompletableFuture; @@ -169,7 +163,6 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { refundDto.setRefundStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus())); DataScope refundDataScope = DataScope.of(); refundDataScope.setScopeDeptName("merchant_dept_id"); - List refundList = hardOrderMapper.listRefundCs(refundDto, refundDataScope); // 有退款没有流水的情况 if (ObjectUtil.isAllNotEmpty(totalList, refundList)) { @@ -233,6 +226,111 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { return totalList; } + /** + * 商户交易记录(按商户、月)查询 + */ + @Override + public Page pageListCsByMonth(Page page, HardOrderDto dto) { + PjcloudUser user = SecurityUtils.getUser(); + if (ObjectUtil.isEmpty(dto.getMchTypeCodes())) { + CurrentUserHardTypeInfoDto hardTypeInfo = hardManagerService.getCurrentUserHardTypeInfo(user); + dto.setMchTypeCodes(hardTypeInfo.getHardTypeList()); + } else { + dto.setMchTypeCodes(dto.getMchTypeCodes()); + } +// // 查询总流水 +// if (ObjectUtil.isEmpty(dto.getMchIds())) { +// HardSelectOrderMerchIdsDto merchQuery = new HardSelectOrderMerchIdsDto(); +// if (ObjectUtil.isNotEmpty(dto.getMerchantId())) { +// merchQuery.setMerchIds(List.of(dto.getMerchantId())); +// } +// if (ObjectUtil.isNotEmpty(dto.getMchTypeCodes())) { +// merchQuery.setMerchTypes(dto.getMchTypeCodes()); +// } +// if (ObjectUtil.isNotEmpty(dto.getCreateTimeList())) { +// merchQuery.setCreateTimeList(dto.getCreateTimeList()); +// } +// List mechIds = hardOrderMapper.selectOrderMerchIds(merchQuery); +// dto.setMchIds(mechIds); +// } + // 查询总流水 + HardOrderDto totalDto = BeanUtil.toBean(dto, HardOrderDto.class); + totalDto.setOrderStatusCodes(HardOrderStatusEnum.getPayPrice()); + DataScope totalDataScope = DataScope.of(); + totalDataScope.setScopeDeptName("merchant_dept_id"); + Page totalPage = hardOrderMapper.pageCsByMonth(page, totalDto, totalDataScope); + List totalList = totalPage.getRecords(); + // 扣款总流水 + 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.listRefundCsByMonth(refundDto, refundDataScope); + // 有退款没有流水的情况 + if (ObjectUtil.isAllNotEmpty(totalList, refundList)) { + for (HardOrderCsVo refund : refundList) { + HardOrderCsVo target = totalList.stream().filter(v -> ObjectUtil.equals(refund.getMerchantId(), v.getMerchantId()) && ObjectUtil.equals(refund.getDay(), v.getDay())).findFirst().orElse(null); + if (ObjectUtil.isEmpty(target)) { + HardOrderCsVo entity = BeanUtils.toBean(refund, HardOrderCsVo.class); + entity.setTotalPayPrice(BigDecimal.ZERO); + entity.setTotalPayCount(BigDecimal.ZERO); + totalList.add(entity); + } + } + } + for (HardOrderCsVo v : totalList) { + // 退款 + if (ObjectUtil.isNotEmpty(refundList)) { + refundList.stream().filter(i -> ObjectUtil.equals(i.getMerchantId(), v.getMerchantId()) && ObjectUtil.equals(i.getDay(), v.getDay())).findFirst().ifPresent(i -> { + v.setTotalRefundPrice(i.getTotalPayPrice()); + 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(v.getTotalPayCount())) { + BigDecimal refundCount = BigDecimal.ZERO; + if (ObjectUtil.isNotEmpty(v.getTotalRefundCount())) { + refundCount = v.getTotalRefundCount(); + } + v.setTotalProfitCount(v.getTotalPayCount().subtract(refundCount)); + } + } + // 聚合一下数据 + if (ObjectUtil.isNotEmpty(totalList)) { + // 商户 + List mchIds = totalList.stream().map(HardOrderCsVo::getMerchantId).distinct().toList(); + if (ObjectUtil.isNotEmpty(mchIds)) { + List mchList = remoteMchService.getByIds(mchIds).getData(); + if (ObjectUtil.isNotEmpty(mchList)) { + WalletDataUtil.convertMchList(totalList, CollectionUtils.convertMap(mchList, MchManageVo::getId)); + } + } + // 商户部门 + List mchDeptIds = totalList.stream().map(HardOrderCsVo::getMerchantDeptId).distinct().toList(); + if (ObjectUtil.isNotEmpty(mchDeptIds)) { + Map deptMap = remoteDeptService.getDeptByDeptIds(mchDeptIds).getData(); + if (ObjectUtil.isNotEmpty(deptMap)) { + for (HardOrderCsVo v : totalList) { + if (ObjectUtil.isEmpty(v.getMerchantDeptId())) continue; + v.setMerchantDeptName(deptMap.get(v.getMerchantDeptId()).getName()); + } + } + } + } + return totalPage; + } + @Override public List listCsByDay(Page page, HardOrderDto dto, PjcloudUser user) { // 查询总流水 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 150d45bb3..b44b6d5a9 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 @@ -223,6 +223,39 @@ order by a.create_time desc, a.user_id desc + + @@ -367,6 +400,37 @@ ELSE 5 END + + + +