From 23c190b11e9f1c504410d4082f99a99cbd003caf Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 27 Jan 2026 19:50:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/1002pjcloudx_integrated.sql | 22 ++ .../hard/api/dto/order/HardOrderDto.java | 4 + .../dto/order/HardSelectOrderMerchIdsDto.java | 2 + .../hard/api/vo/order/HardOrderCsVo.java | 12 + .../order/HardOrderTotalController.java | 21 ++ .../hard/service/HardOrderTotalService.java | 6 + .../impl/order/HardOrderTotalServiceImpl.java | 223 ++++++++++++++++-- .../file/商户交易金额汇总(按月).xlsx | Bin 0 -> 10691 bytes .../mapper/order/HardOrderMapper.xml | 24 +- 9 files changed, 289 insertions(+), 25 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/商户交易金额汇总(按月).xlsx diff --git a/db/1002pjcloudx_integrated.sql b/db/1002pjcloudx_integrated.sql index 632a599de..4cef6fdc2 100644 --- a/db/1002pjcloudx_integrated.sql +++ b/db/1002pjcloudx_integrated.sql @@ -13,3 +13,25 @@ CREATE TABLE `hard_panel_setting` ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='大屏配置表'; + +-- app版本控制表 +CREATE TABLE `app_version` +( + `id` bigint NOT NULL COMMENT '主键ID', + `platform` varchar(32) NOT NULL COMMENT '平台类型(android、ios)', + `version_code` int NOT NULL COMMENT '内部版本号(用于比较大小)', + `version_name` varchar(32) NOT NULL COMMENT '展示版本号(字符串)', + `update_content` text COMMENT '更新内容/更新日志', + `download_url` varchar(512) NOT NULL COMMENT '安装包下载地址(wgt、apk)', + `is_force` varchar(32) NOT NULL COMMENT '是否强制更新', + `is_silent` varchar(32) NOT NULL COMMENT '是否静默更新(WGT用)', + `status` varchar(32) NOT NULL COMMENT '状态(已发布、未发布、已下架)', + `create_by` varchar(50) DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) DEFAULT NULL COMMENT '更新者', + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` char(1) DEFAULT '0' COMMENT '是否删除(0=正常 1=删除)', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户编号', + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='app版本控制表'; \ No newline at end of file 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 c58531eab..25e791773 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 @@ -38,6 +38,10 @@ public class HardOrderDto extends HardOrderEntity implements BaseIsIncludeTreeIn private String createTimeYearStr; + private String payTimeYearStr; + + private String auditTimeYearStr; + private LocalDateTime[] createTimeList; private LocalDateTime[] payTimeList; 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 index 5e272a74d..c0be63ff8 100644 --- 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 @@ -12,6 +12,8 @@ public class HardSelectOrderMerchIdsDto { private List merchTypes; + private String payTimeYearStr; + private LocalDateTime[] createTimeList; } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderCsVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderCsVo.java index 7f58a1192..5802e4793 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderCsVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderCsVo.java @@ -67,4 +67,16 @@ public class HardOrderCsVo implements BaseMchInterface, BaseHardInterface { @Schema(description = "列号") private Long lineNumber; + @Data + static public class Month { + + @Schema(description = "日期") + private String day; + + @Schema(description = "总盈利金额(元)") + private double totalProfitPrice; + + @Schema(description = "总盈利次数") + private long totalProfitCount; + } } 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 f07ec66d7..d762284c5 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 @@ -423,6 +423,27 @@ public class HardOrderTotalController { } } + @Operation(summary = "商户交易记录导出(按月)", description = "商户交易记录导出(按月)") + @PostMapping("/export-cs-by-month") + @SysLog("商户交易记录导出(按月)") + @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_cs')") + public void exportCsByMonth(HttpServletResponse response, @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); + } + } + hardOrderTotalService.exportCsByMonth(response, dto); + } + @Operation(summary = "支付方式交易记录", description = "支付方式交易记录") @PostMapping("/export-payType") @SysLog("支付方式交易记录") 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 977a1ab3a..c0653c1b1 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 @@ -6,6 +6,7 @@ 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.*; +import jakarta.servlet.http.HttpServletResponse; import java.util.List; @@ -55,4 +56,9 @@ public interface HardOrderTotalService { * 统计每天、每周、每月、每年的交易人数和次数 */ HardChartLatitudeVo chartLatitude(Long merchantId); + + /** + * 商户交易记录导出(按月) + */ + void exportCsByMonth(HttpServletResponse response, HardOrderDto dto); } 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 9c98464fd..644264777 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 @@ -2,7 +2,17 @@ package com.bsd.pjcloud.hard.service.impl.order; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.enums.WriteDirectionEnum; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.dto.DeptAllListDto; import com.bsd.pjcloud.admin.api.entity.SysDept; @@ -13,6 +23,7 @@ import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.DataScopeFuncEnum; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; 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.HardSaleStatusEnum; @@ -33,19 +44,22 @@ import com.bsd.pjcloud.wallet.api.feign.RemoteWalletTransactionService; import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import com.bsd.pjcloud.wallet.api.vo.WalletTransactionSumAndCountVo; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; + +import com.alibaba.excel.write.metadata.fill.FillWrapper; + import java.math.BigDecimal; -import java.time.DayOfWeek; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; +import java.math.RoundingMode; +import java.time.*; import java.time.temporal.TemporalAdjusters; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.CompletableFuture; @Validated @@ -238,24 +252,10 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { } 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()); + totalDto.setPayTimeYearStr(dto.getPayTimeYearStr()); DataScope totalDataScope = DataScope.of(); totalDataScope.setScopeDeptName("merchant_dept_id"); Page totalPage = hardOrderMapper.pageCsByMonth(page, totalDto, totalDataScope); @@ -264,8 +264,13 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { HardOrderDto refundDto = BeanUtil.toBean(dto, HardOrderDto.class); refundDto.setPayTimeList(null); refundDto.setRefundTimeList(dto.getPayTimeList()); + refundDto.setAuditTimeYearStr(dto.getPayTimeYearStr()); + refundDto.setPayTimeYearStr(null); refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes()); refundDto.setRefundStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus())); + if (ObjectUtil.isNotEmpty(dto.getMchIds())) { + refundDto.setMchIds(dto.getMchIds()); + } DataScope refundDataScope = DataScope.of(); refundDataScope.setScopeDeptName("merchant_dept_id"); List refundList = hardOrderMapper.listRefundCsByMonth(refundDto, refundDataScope); @@ -773,4 +778,180 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { result.setAllTotal(totalList); return result; } + + /** + * 商户交易记录导出(按月) + */ + @Override + public void exportCsByMonth(HttpServletResponse response, HardOrderDto dto) { + // 查询所有有订单或者退款的店铺记录 + List mchIds = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(mchIds)) { + mchIds = new ArrayList<>(dto.getMchIds()); + } + // 查询总流水 + if (ObjectUtil.isEmpty(mchIds)) { + 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()); + } + if (ObjectUtil.isNotEmpty(dto.getPayTimeYearStr())) { + merchQuery.setPayTimeYearStr(dto.getPayTimeYearStr()); + } + mchIds = hardOrderMapper.selectOrderMerchIds(merchQuery); + } + List> chuckMchIds = ListUtil.split(mchIds, 5); + + List mchList = remoteMchService.getByIds(mchIds).getData(); + + Map map = new HashMap(); + + // 查询食堂 + String mchName = "所有"; + if (ObjectUtil.isNotEmpty(dto.getMerchantId())) { + MchManageVo mch = remoteMchService.getById(dto.getMerchantId()).getData(); + if (ObjectUtil.isNotEmpty(mch)) { + mchName = mch.getName(); + } + } + // 标题 + // 格式-2025年浦江大饭店合作商家流水情况统计表 + String title = dto.getPayTimeYearStr() + "年" + mchName + "合作商家流水情况统计表"; + map.put("title", title); + + // 年份 + int payTimeYearint = Integer.parseInt(dto.getPayTimeYearStr()); + + ByteArrayOutputStream tempExcel = new ByteArrayOutputStream(); + try { + ExcelWriter excelWriter = EasyExcel.write(tempExcel).withTemplate(ResourceUtil.getStream("file/商户交易金额汇总(按月).xlsx")).build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + List> excelTempMapList = new ArrayList<>(); + for (int i = 0; i < mchIds.size(); i++) { + Long currentMchId = mchIds.get(i); + Map excelMap = new LinkedHashMap<>(); + for (int j = 0; j <= 26; j++) { + String key = String.format("col%d", j); + String value = ""; + if (j == 0) { + value = String.format("{col_%d.col}", currentMchId); + } + excelMap.put(key, value); + } + excelTempMapList.add(excelMap); + } + excelWriter.fill(Map.of("total", "{total.total}", "title", "{title}"), writeSheet); + excelWriter.fill(excelTempMapList, fillConfig, writeSheet); + excelWriter.finish(); + } catch (Exception e) { + e.printStackTrace(); + } + + // 导出tempExcel用于调试 + // FileUtil.writeBytes(tempExcel.toByteArray(), "/Users/dengzhangchen/Downloads/debug_hard_order_" + System.currentTimeMillis() + ".xlsx"); + + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(new ByteArrayInputStream(tempExcel.toByteArray())).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).forceNewRow(Boolean.TRUE).build(); + // 按月份总计 + List monthTotalList = new LinkedList<>(); + for (Month month : Month.values()) { + HardOrderCsVo.Month defaulMonthTotal = new HardOrderCsVo.Month(); + LocalDate monthDate = LocalDate.of(payTimeYearint, month.getValue(), 1); + String monthStr = LocalDateTimeUtil.format(monthDate, DatePattern.NORM_MONTH_PATTERN); + defaulMonthTotal.setDay(monthStr); + defaulMonthTotal.setTotalProfitPrice(0); + defaulMonthTotal.setTotalProfitCount(0); + monthTotalList.add(defaulMonthTotal); + } + for (List ids : chuckMchIds) { + dto.setMchIds(ids); + Page page = pageListCsByMonth(new Page(1L, 999L), dto); + List records = page.getRecords(); + if (ObjectUtil.isEmpty(records)) break; + for (Long id : ids) { + List> excelMapList = new LinkedList>(); + // 先查询商户名 + String currentMchName = "未知商户"; + MchManageVo mchDetail = mchList.stream().filter(m -> ObjectUtil.equals(m.getId(), id)).findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(mchDetail) && ObjectUtil.isNotEmpty(mchDetail.getName())) { + currentMchName = mchDetail.getName(); + } + excelMapList.add(Map.of("col", currentMchName)); + excelMapList.addAll(disposeCsByMonth(id, records, monthTotalList, payTimeYearint)); + excelWriter.fill(new FillWrapper("col_" + id, excelMapList), fillConfig, writeSheet); + } + } + // 统计 + double sumTotalPrice = 0; + long sumTimeCount = 0; + List> excelTotalMapList = new LinkedList>(); + for (HardOrderCsVo.Month total : monthTotalList) { + excelTotalMapList.add(Map.of("total", total.getTotalProfitPrice())); + excelTotalMapList.add(Map.of("total", total.getTotalProfitCount())); + sumTotalPrice += total.getTotalProfitPrice(); + sumTimeCount += total.getTotalProfitCount(); + } + excelTotalMapList.add(Map.of("total", sumTotalPrice)); + excelTotalMapList.add(Map.of("total", sumTimeCount)); + excelWriter.fill(new FillWrapper("total", excelTotalMapList), fillConfig, writeSheet); + excelWriter.fill(map, writeSheet); + } catch (Exception e) { + e.printStackTrace(); + log.error("|商户交易记录导出(按月)|以外的错误,error:{}", e.getMessage()); + } + } + + public List> disposeCsByMonth(Long mchId, List list, List monthTotalList, Integer yearStr) { + List monthlyRanges = new LinkedList<>(); + for (Month month : Month.values()) { + LocalDate localDate = LocalDate.of(yearStr, month.getValue(), 1); + monthlyRanges.add(localDate); + } + List> listMap = new LinkedList<>(); + List sqlList = new LinkedList<>(); + for (LocalDate i : monthlyRanges) { + String monthStr = LocalDateTimeUtil.format(i, DatePattern.NORM_MONTH_PATTERN); + HardOrderCsVo target = list.stream().filter(v -> ObjectUtil.equals(v.getDay(), monthStr) && ObjectUtil.equals(v.getMerchantId(), mchId)).findFirst().orElse(null); + if (ObjectUtil.isEmpty(target)) { + HardOrderCsVo defaultVo = new HardOrderCsVo(); + defaultVo.setTotalProfitPrice(BigDecimal.ZERO); + defaultVo.setTotalProfitCount(BigDecimal.ZERO); + sqlList.add(defaultVo); + } else { + sqlList.add(target); + } + } + double sumTotalPrice = 0; + long sumTimeCount = 0; + for (HardOrderCsVo v : sqlList) { + BigDecimal totalProfitPrice = Optional.of(v.getTotalProfitPrice()).orElse(BigDecimal.ZERO); + BigDecimal totalProfitCount = Optional.of(v.getTotalProfitCount()).orElse(BigDecimal.ZERO); + + totalProfitPrice = v.getTotalProfitPrice().divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP); + + listMap.add(Map.of("col", totalProfitPrice.toString())); + listMap.add(Map.of("col", totalProfitCount.intValue())); + + sumTotalPrice += totalProfitPrice.doubleValue(); + sumTimeCount += totalProfitCount.longValue(); + + HardOrderCsVo.Month month = monthTotalList.stream().filter(item -> ObjectUtil.equals(item.getDay(), v.getDay())).findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(month)) { + month.setTotalProfitPrice(month.getTotalProfitPrice() + totalProfitPrice.doubleValue()); + month.setTotalProfitCount(month.getTotalProfitCount() + totalProfitCount.longValue()); + } + } + listMap.add(Map.of("col", sumTotalPrice)); + listMap.add(Map.of("col", sumTimeCount)); + + return listMap; + } } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/商户交易金额汇总(按月).xlsx b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/商户交易金额汇总(按月).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2e13ca8b38db6b03cffe02cbf0050c9c552d674b GIT binary patch literal 10691 zcma)i1ymhN@;B}T_u%gC?iyTzyUWEj*u^!tLr8FU0t6>Wg1ZC_?(PA;OR{hCUUvU` zzCNdCTB^Ewel=Y)U0urZkWdI<&nZmtyU6qXuLKV&m;p?codJ$6%*r4#Oi%;dPqI(k z^HnV1U|<{&U|^_!Co^_*Wb(AP%Z~4ogJi{&yaqm@)&kfW$yC{Bf#LkHI&OsQfQ3#4 z^n~rPJ4Pl~(i>QZ3xN6$BzBCkk|t*l!=ugibGUbajEwr#phl{qL?|x(U_%FH2j68uuBxDGZn1Y_Y<~gz;`_tx z>ER_4(;CCwZbfR(j`BVv>n^0q0n8`hXS5jo?t(u2ZZ8d)xBg&Cp`C)_-LH6}IKc|D z#oHghH|=V1-`_f%LjMz8X^rrP+%itG=vi9bLZNF_qkA*r&*!b z*EAaA64V4nW_I!>VazsEHn~Y>uZKoa=Rm%IPhUr1NL_SZ1b?ug_#mhni8e2=UkfV} z_&yjRi8Bob^U0HO=j#vNF?tM3jXC{wzQc9Jc~zwEJIfg+9F6t_^>sp_gG#48dv}dh zdpM=vlEIStR9W5!e$y#JSAT3-qw}D`T925pui5CUTZe&^Vj(b#42(t39m_4 z5!%g~tyUm;X@~LzyY}!<}cB);jmad#sm=Ye;5*tQm zJ4<;D-2(fA9U^&XON(_R7)+d+sBDRXN25q2SN3UJtbVA`G{G$iEjH&2GuW|u_|_#) zq6kNdBapv?5<10@@=F#iGR-zj_Xm51_P^T~ND#E1c0Vo4edQeKSyGFVC4 zU35pA^#N(6eg_r7HWS9HQnN~vAj6WkJ;R)(`*;J+oxdOZu+#54nAlQQY)yxCSa^Xy zOvd7V(T{$Gt3KAX(pe~kwy}=9=uJb^#1Db~7eO?0y;%Gw^>#L!b*hdvkVW-0t^-d1bst7G|Wz#CV-j?cpEf)X&QjBikC+Eh~ z_L61wJ@3m>Cvstp5``dBEgryqn#D}9@+{18&HjxEjZm;WZ04RhTP0x=2b?cmP9jHZ zsppKPJKH?ir48k%L0gL|7JtRk>`g-zg|_DdeXHUEYgCmlxxt`Cd`3l)F3N_BdNcj-DKD}yLX z&;<#60hET)hZ2PHg@S|Kr2TrM{6aSBVp;N+;sDH zQRdI`26`Vz3yKO|1{>@|;9p2s=xqoF=Ekgoi^6u11DSwCKp`MFkQ9gpWCc<~VL*+- z6~bA-ZNXu~rNC*z&A=I;+M%XdNYz5u&0)B@`A=bNs40z=I_psHjbWsZ)8O7Uk0(gg zhEvhY>H-CJd%XsNILu_EfdU(60vjs$Z29z}L=!wHyRzb;7nB3yl_TOX6LF;C@Mm%R z=W+2IW&^K5q+0?TviNLfWTHf>L6>*hbZi!MqNFfK+v)0NLwZ0lB)#JhP)QY3a_y7@ z^)iBbbyg)oC2~;7yOX0pTvVs#klAnUYNN=W8MY%emxaewElMTVXCWFwn+O-W))kZm z*bvNipED~cvm=<{v4AqDjt8paf$Cl+m;-Fam;+}+G;!u%LAeiZkVILtDdub)G!{M;5I{mAe3y+!k@Ez`fY7kuRnR*%8#Q zBS0+}pcWxe#p5fD@)BO2h}(8F#I!yOsNoB!K|{MaV6PGny7ayqR6_=Jze;pEJIh(x zx$wNrBglT^Y1bA|<~&N{sG*}8uLN!ng#yP1M}+2zc7b|CP11-;wi-< z$s*1oT`f{AQ7u+2bpkXBBAK`56U;HUPq0TY=O@d7TbUTnlc@>vc$adg6XedL*i>zr zeDq~Ckk8({;2V+SssZT&P9Zy!o+5k)yNZ=XT-=3zdMQ4Cpsk>*OW#6G5& zoR?i6bV((pd9!sB|2>jWztCngQZtz4TjZeM=PuHv0&irKg%E{~BWvo{W4dMyVrNWn zCbvNrNre0Paeg*M6~}lJct3w<|4sIj z_^0VU)E<6Iz=_#GekvTjwR}V|-0wbZ*KoTh=J8D#k?djpVGFK399SWA@U8LX?oGEQx zTQ(tUurUQwEmF~m{g5Y+qV?>{NO&ImSms!^Gv>5Ay2J#Fj0%L!an42eL&(Sr=-v`c z8zUJnCF{@ho#XZSLQ&0DDnwai3vi;>;n|m`ka#ed@bJX=#`*qhBag|1^{I#|&7w02 z`+J5=sff{q=7QAkkRoO2lWhvzm3L;r=w_X=y^Cf_uRoQoq3vjj3kq@T)V(88a_^%( z*2=_GC}i;myh8h};Ogy3P@fwQzMB6cnay9csv@I{u z$!y|Ie>e|14a^eJG$9^;CxMHEZxfY!kVlyK(+POh@DYFGm5ET|XZG_;9;bl*=y9s` zWiUN07j3ko(TNCuXQ4W$kEnc?!%Jc%i3=kPL6x#^=yX}#hXmf!BwGR17$7fWUa?+z zdb~xYuIx7(NH;RYTO=37Km*9!nXRH))4Ix_4-76^lH@N$44-D_ekmT^=Mr*@S4Iu@ zjy^Ws3qHlqkWIQ#zfuu93?L@OyN^B?z8&jx3l3ILVlfxB3=TQ@vbeEYm3*;3CiKHv zxbXb5q_b?HP_}e9E5W?Qq-J!&P}pHSM`I0fIIS`!G_}IrYX49L>g5YBk=;Jm71BA` z>nkZo0=^>qi3F0p!Dt_6FJ$(xjy7IG^72neu5Lw!)D%k#t;0yi3-06stDkiR!sv&+ zF^>G_K76xE$uTO9yrkUI5A&OS-}A9u98kLH-_Fde%j#;~fXDI8zU@}=htDzV`+Dka zOk()92kh#*=oXgZ;0sX<9M~F$P-%_6+@-EpJalGMWV0M-qJ2;=QF>xZr(pTy9b)^p zJhe-;@~l_`g%Y}hy;~xLN|@ABh9X?@3`{>HfXgEW8IhxQUcE<4*_R?xgbn{5&&HZs z{ZReRaI(lV6!9HXQkf&>)7z#3tC|GIjD_7IYeyIlOgb@R771DW)u- z$Kmx%ktn&nd@@zRm%7#;80B&jR8CnYw-3Y%P9Kg~qk9EWO`R6Z-AULgl@ezS>r%>GE$4Rqrs+moV<8 zVGXXCur77G50*-X8()5`V9SD9==6-1;<*;(bXe(kH9Q~?X2NYK?2)IT?55O0i=bwL}lK`1b=XD0;c zL*Zg&>}+nP=IU(iVCnMwlkYYqsMy1T8?Z(g!7s5~VtP%@C^rEffzb(GK2;x&{^>Il zga!kNL@EOAYh^qmsbYGp#X?%w?+8#Wxf}OV!i{0GjRzh|lb?Cx(<2%X;L4gm$J0%; zy}pEW_N?xhq>8N(yOj8lj5LtWkx$?Nxb1sgG*_k|0yFc%gO+n#q_BJHLb=prOUAOK zx|d~NjeRJ8Cp|EU>lKa1680;}@^FmZ_*(E&Tqh|yA)+sB$Q%ObcT_KY31aQ-Fuab` z2<|RYxw4dwQ;8>!ufu-q)v|GC`Wv(+Cs$Y`);e|W1#p7dLd-x6L6#%GhGp3jgG*+i zq3pz5BT$>yel}jd#c`jev#Q*rDs7YcaGLlD&s5 zUNJP7EkB901j*W5hC$p0FJUmwAojvJKb5@gHO&xAhF}f<5m}v!$;LJ?b z0esu_uNbN^6iv!lq%9U!M=e^#eMvomq)BQ#65114`D6gw?n@Ce_@0IOD!K(4+$#C6 z15RmhtA)+|4ZHV4Bu1}y?L|3h$(mRycLr=b!$cZiO{iKp1cmU2(fHw=iQ@Mw`sC-U zRXObgW6#7~iQxq`7G!pO8FBDVWlLpCR zk$aN-)lr-qnC?bviRTD?S)(g+PAZ|bIup9ajFb?557$>P7-R580AqI zR;Ez6j5)Q;82RU2ED?A&Ya~eJuwHM6v+NoBl6wo-df^4~ z?gTfpe(7@3GRdeg!@828zwLo1AnD=BDiW}iB$qsfIa4;YcNy|{-D~;;o*CgAQqk9b zVYmUIk_nCWx=k{G!)aRE6 zS>_;u7)$9UYj}~R6eG7sMpq=aVxtf?Vf#PpFzGrQQ0eS;+3syHr+&$5->B81&e%>D z9Km;6>Mkd(gi0QO4r2;Q=4>nECU8L{_^P8k5Ye^p!xNpm7{KXKilZ~YTMCD?x3MDG z!a?a5HMo?%@G(nLfYNk~I*FOfj<&C!s~!qR2SGK4bMJgq8?_RVvYkc^M;>v(2~U)J zu=cRnLqCs@*|V3-5G7kwf?${rd4KwlF`PT zW~%Gc)wlXO9CeHQ+>hTr9~qp4aPDM;QC&O|)CXya2Al)s>!%%T7l3xOd_NfbW;C-w zSIti~Wgk6oOcB$@^|C6K?CqBYkmUF_FJJBwrN;|IMOT!iW@Z#NY)F+&PfTUBdfvNL zS552ah=b!!d#Q2eJmIGSX7(#u%4tglj_F9MJ96!2(;7=%rJ`?bWqoVSov>o!9U6F4?T$WRrW|rbw|XqVOMysP;QGn*%*|Yk2v$ZV z|JP7ecouvE!N!L<>+Z%8uMkpVHeirwA3QSm8|TlBNOpDZVK@9o@e+&+*1f7}8k(0I zqJ1rm=1yM2Q+7W^P?QgMu`Nn{;SVsccPyO3^--)QQz4DuIZQ_nSVaQ4-pyR|#H|iyFzm*{~B#IXq5g?1G z+p5`*Hdd1P+)t7q^FB9aI4NSAT}>ixQX#$7E2LHujS^F~hEP9j+OZ|gZN!AFENM0}HZy+JVNGXK=PqU3n{EXTo-s z1dR>CJDHGk1;#Bo)1*EEd?(|s){?$+nJQ%y`YhVsl%_oOZ(XaED(>HbLEP8Bx(_)x z*9;G8YuVzD&5a&hDP8Eh#;{nOB^zj>wu=xUrZ=FKQkF8c#Q!MA~Mqh6eC$^Pb%cEbKGdp`6Mz zC1WzjUR3dVEhJWJDhW5pR;6`DE$*Szk8E^0Cj*h1fg}mo3LBEZHW~+oZcps+D0^tL zi3J#k5FxTCfdgDcm;J0;nU*qeIxB57x`0gd1KvEb7=gDoCGBF!yaHr~ff%XVW%-4u zjgtBACvdd)DLMVvZdiL=5PQQj_#J7Z9K4fj1)rSo!QfzptEb87Dpw~>fa-9oxr*RL z*q9VHqMaqs&=Ctr6L*zha*np5Djxz88$F?wotJ{iG{h0MC}%}*uqkJaa1bcB%#8_% zpz|0U27|n`7YkuQrEfuGiaHnHXH$dopd};76!%83M6?$hVb5!u>`|otS(0x3t4*?1 z6GW2-)q!2FDUDVI{(bX9`D(A1e+f~=L=Ucq1ur3xc*HlZ-$>Iq1wE|ooN1Q)VL&O% z&y#rXdb{+8xsT^7%gP_Tr6-f_EQFYTQs?<>A0 zYpqBRF}&i11V(a}9?s|{J3i&OCOct6cuv*qTL+4vCy0n1fuz)@CJ}K3-zr&KjfuJ| z$^2I|?R->Yze3&xN}9_i48B+6u^iA&hP9u~r4;`(dedg9@`*Y=%A89s(Q;HVr!~s) zIEIm6MDqq2?_e?tUZCmz>^A5Nv!CDHBS4(h$~-R3UsAT|ma*F9?3g;yQWzP!Gf*ZV zCo{X@eD5uD=fK5rJQ^Fi+1w84n07jR_f^o|TQOT@aWYx&N=MC!urQFHF+w{pY|4b~ zsoCT1r1xU>tvJ8gMz`4yTY$wP%k4#C;ySY;F=2=I(^8_g7h9px*#*sT`S5PXqqp}{ z+Zf62GCTNA1KfAFvkT_Ll~(SDhlgEQf5c6hFoG|)I3YtM*?yi+7kR?L=&m!w5pYZX zXB(zq+->KWQ zli{t1+1+XO?mHqSq8|><$43`EqvYB-IF4m$A~QvA6jBt2YdmSY*#sZ9A9k~!LbrAV z@X*nmZO(4Il5(mzF-a+@-VsUfdU4T+ab+#v&JS8Dk)!1xM#do~jtcYN_Uo_SZ0zPu zz7^uR-K36gbaa8mF*7FBEHzC0s#=PlL(g)BDIqqj*>he*wV_0=i#$q;+Xg=dSBsG> zA3}}2m_eo-x05V`ObBG}zL^ag#%__QV&Qz_tB!HTG)}L8Eb!htkE+l#i(aJ{(qR=7 z?lye~t1xui?$yBjGogTst=JZocSy-vdKp4G{i>XL-Hhi*w??w%8iHDn3-%Q*;uOWt zZp2S}&^G98=q2FXtIB2F3o5Hv;Snp#aRmHm^XjCQ7|q>NCs`UHS+6cYjOZou>MBWvbag!}mFCv6nP6O=VD_F1>3y;>z#UMF(?}Nvw)koE=3NQIv z_JYOu`Sc)F70+Df(y=;)aoK|(BDDKG``X4p_RWM^38uh@lUUdni93}wxV4H2b>gsb zkdE_~%~1UtP2>qLt8Z?bHtK=mCSM|Y$W840I0?Pf5umqk=@sDlOy53uj5tb4ZL41N zRNq#5#vFvT4@vLM=AWeYQAhN`V}#A@3D7S^aPG4)say&6PGb+Dl9Gi~!Ek3g?D}8TWl} zjoG9HewGxY^u>lXOUTvEX6dS$Hs94bs)iToCt-%J7ime4V180Pt{v-(u?dr`wyMsf zfs|HR886}!Rj(O5HW~2GXgaV^JR{#Y|h4)*3)dKf-HOsn}a(~=2%wF1@gLeq!zK}gK&(L z=<9HtHCSt0HLIb-H#-EF@)NSr6kYFY0DCFc9#!~0g@Tbo<0Xj-?~n1WaQ$9VGqAcY z6n5titg@E&=C%hxFP4$xqV+sY%r)eq&o4RH@PBGib^JtO};* ziI1|=Z>Yy-yV=EIMF+jfo9jTml!Srd9d&jS8a(!p3oEa%U__SG3rSOpT-?;_aAHXB z*Ha{pq|6<@6`7pe?(T{o*R3Cv;R~kxu>VBC*8h1U#Y>3OP{#R;vCQND#`0f>5C09$ z0lRtU0}zZYAUN?scaTr%7uoZ1^Iy)4f1&%zriTSJ=X?MgWi1Nb104yoCE{ekW_cCG8iUmz-FnA4ape@>N_?N)lBvgN~lj zRVgfhowCd^0bu2~`GSoruu?xA6D~Az-=Gg|hvzU$$b7dRfDD%^dZFF*j){$YVDR+1 ztdBo?tlj17H+@xx!C50N+ipica)Any6lb9_Tcqg>q!m)a0n)RG_19#)9 z|Ma^RpX#_+f?PewphKGH0~%d%fP<^KgR7ysm!r9h{nxLNqWsQ;pJ;^ zMel;8atq?b)UzC{v|zPvPgqV}$lCFfI~x{l*iK+6;Y_(Kt$<@}EjWGk8TiX#1>btI zah4HJRA(lOPJmAvKU16hs%p9pGS^FiE_DV4x*V+wpLGhLsHT7ec4K))1Zs2&S-e`i z>t2AW13Z?-7U$ef0JmAtXdfs(z%Jl=IE zbbUebU-k5Bfd3w6@oaH^rRP{K57OWE=bu9Vv_Q{1zl3J~o9E|>`Cr1Gm*lVXEbKY` zEynDh^8So6dnW!RkNWRy|B5;L6QVz(sD5*YfL`f;3;ipm>QDARgMfasLxUWjzuEsC z67;_w`Z?6)S9*SEBaj;#WN!W!!#`2#A^V$s`g5Xx8nS0OzfjuyJKKMlwLi!C)5-pO zoD|TcLG%3&m;0Y1{OK$FJpvlYq4+$)zdeWl|IaQ3dS^kbf1Mxy^9}j)1o^i_`@ggO zK2QF0%6~eue-A*8{!{MXVf$Z`evVc8m7X;m_)Ek8h+O*T%>RsCdglG5wTl1X{T<1q VED!y2v7&+E0%1XPg_O^H{}1?*q`m+E literal 0 HcmV?d00001 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 b44b6d5a9..50f0d4bfd 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 @@ -192,6 +192,9 @@ and a.pay_time between #{dto.payTimeList[0]} and #{dto.payTimeList[1]} + + and DATE_FORMAT(a.pay_time, '%Y') = #{dto.payTimeYearStr} + @@ -230,13 +233,26 @@ where a.del_flag = '0' and a.merchant_id is not null and a.merchant_type is not null + + and a.create_time between #{dto.createTimeList[0]} and #{dto.createTimeList[1]} + + + and DATE_FORMAT(a.pay_time, '%Y') = #{dto.payTimeYearStr} + union all select o.merchant_id as merchantId, o.merchant_type as merchantType, a.create_time from hard_after_sale a left join hard_order o on o.id = a.order_id where a.del_flag = '0' and o.merchant_id is not null - and o.merchant_type is not null) total + and o.merchant_type is not null + + and a.create_time between #{dto.createTimeList[0]} and #{dto.createTimeList[1]} + + + and DATE_FORMAT(a.refund_time, '%Y') = #{dto.payTimeYearStr} + + ) total and total.merchantId in @@ -250,9 +266,6 @@ #{v} - - and a.createTime between #{dto.createTimeList[0]} and #{dto.createTimeList[1]} - @@ -414,6 +427,9 @@ and r.audit_time between #{dto.refundTimeList[0]} and #{dto.refundTimeList[1]} + + and DATE_FORMAT(r.audit_time, '%Y') = #{dto.auditTimeYearStr} + and r.status in