From 776c0279beb1bc7cef593dd788540d9d7938bf74 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 11 Nov 2025 11:23:06 +0800 Subject: [PATCH 01/38] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/config/ThreadPoolConfig.java | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java b/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java index 1c1623d73..612ac7476 100644 --- a/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java +++ b/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java @@ -22,16 +22,32 @@ public class ThreadPoolConfig { Logger log = LoggerFactory.getLogger(ThreadPoolConfig.class); // 核心线程池大小 - private final int corePoolSize = 500; + private final int corePoolSize = 64; // 8 核 × 8,满足高 IO 阻塞场景 // 最大可创建的线程数 - private final int maxPoolSize = 1000; + private final int maxPoolSize = 128; // 突发时翻倍,避免过多上下文切换 // 队列最大长度 - private final int queueCapacity = 1000; + private final int queueCapacity = 2000; // 桩消息短时堆积时提供缓冲,防止直接拒绝 // 线程池维护线程所允许的空闲时间 - private final int keepAliveSeconds = 300; + private final int keepAliveSeconds = 120; // 突发结束后快速回收扩展线程 + + private final String threadNamePrefix = "pile-io-"; + + // 核心线程池大小 + private final int corePoolSize_tp = 24; + + // 最大可创建的线程数 + private final int maxPoolSize_tp = 60; + + // 队列最大长度 + private final int queueCapacity_tp = 1000; + + // 线程池维护线程所允许的空闲时间 + private final int keepAliveSeconds_tp = 180; + + private final String threadNamePrefix_tp = "thirdparty-push-"; /** * 线程池 @@ -45,6 +61,8 @@ public class ThreadPoolConfig { executor.setKeepAliveSeconds(keepAliveSeconds); // 线程池对拒绝任务(无线程可用)的处理策略 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.setThreadNamePrefix(threadNamePrefix); + executor.setWaitForTasksToCompleteOnShutdown(true); // log.info("threadPoolTaskExecutor创建成功"); return executor; } @@ -55,12 +73,14 @@ public class ThreadPoolConfig { @Bean(name = "thirdpartyTaskExecutor") public ThreadPoolTaskExecutor thirdpartyTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setMaxPoolSize(maxPoolSize/10); - executor.setCorePoolSize(corePoolSize/10); - executor.setQueueCapacity(queueCapacity/10); - executor.setKeepAliveSeconds(keepAliveSeconds); + executor.setMaxPoolSize(corePoolSize_tp); + executor.setCorePoolSize(maxPoolSize_tp); + executor.setQueueCapacity(queueCapacity_tp); + executor.setKeepAliveSeconds(keepAliveSeconds_tp); // 线程池对拒绝任务(无线程可用)的处理策略 - executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy()); + executor.setThreadNamePrefix(threadNamePrefix_tp); + executor.setWaitForTasksToCompleteOnShutdown(true); // log.info("threadPoolTaskExecutor创建成功"); return executor; } From a49b659ac4d2c9dc2e47a6a0f6312aed0c0846ca Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Wed, 12 Nov 2025 15:46:18 +0800 Subject: [PATCH 02/38] update --- .../service/impl/XinDiantuPlatfromServiceImpl.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/XinDiantuPlatfromServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/XinDiantuPlatfromServiceImpl.java index 897bcf964..a2d52413f 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/XinDiantuPlatfromServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/XinDiantuPlatfromServiceImpl.java @@ -656,12 +656,10 @@ public class XinDiantuPlatfromServiceImpl implements ThirdPartyPlatformService { */ @Override public String notificationEquipChargeStatus(String orderCode) { - //判断是否是常畅充平台的订单 - boolean flag = isNeedPushToThirdPartyPlatform(orderCode , ThirdPlatformTypeEnum.CHANG_ZHOU_PLATFORM.getOperatorId()); - if (!flag){ - //表示不是常畅充平台的订单 - return null; - } +// boolean flag = isNeedPushToThirdPartyPlatform(orderCode , com.jsowell.common.enums.ThirdPlatformTypeEnum.XIN_DIAN_TU.getOperatorId()); +// if (!flag){ +// return null; +// } // 根据订单号查询订单信息 OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); From 098e14faaf9dc1ac96c2b22b125ccf16817770d7 Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Thu, 13 Nov 2025 09:54:39 +0800 Subject: [PATCH 03/38] =?UTF-8?q?update=20=E4=BF=AE=E5=A4=8D=E5=8D=A0?= =?UTF-8?q?=E6=A1=A9=E8=AE=A2=E5=8D=95=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/pile/vo/web/OccupyOrderVO.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OccupyOrderVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OccupyOrderVO.java index 9a4ea6b54..3a3e46cf2 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OccupyOrderVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OccupyOrderVO.java @@ -1,5 +1,6 @@ package com.jsowell.pile.vo.web; +import com.jsowell.common.annotation.Excel; import lombok.Data; import java.math.BigDecimal; @@ -13,16 +14,36 @@ import java.math.BigDecimal; @Data public class OccupyOrderVO { private String id; + @Excel(name = "占桩订单号") private String occupyCode; + private String status; + + @Excel(name = "会员ID") private String memberId; + private String stationId; + private String plateNumber; + + @Excel(name = "站点名称") private String stationName; + + @Excel(name = "占桩开始时间") private String startTime; + + @Excel(name = "占桩结束时间") private String endTime; + + @Excel(name = "支付状态") private String payStatus; + + @Excel(name = "订单金额") private BigDecimal orderAmount; + + @Excel(name = "充电桩编号") private String pileSn; + + @Excel(name = "充电桩枪口号") private String connectorCode; } From 0edba2c8f60b4b1c8e22ea31cf75c223dee5d6d8 Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Thu, 13 Nov 2025 10:19:01 +0800 Subject: [PATCH 04/38] update --- .../java/com/jsowell/framework/config/ThreadPoolConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java b/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java index 612ac7476..ec59169f6 100644 --- a/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java +++ b/jsowell-framework/src/main/java/com/jsowell/framework/config/ThreadPoolConfig.java @@ -73,8 +73,8 @@ public class ThreadPoolConfig { @Bean(name = "thirdpartyTaskExecutor") public ThreadPoolTaskExecutor thirdpartyTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setMaxPoolSize(corePoolSize_tp); - executor.setCorePoolSize(maxPoolSize_tp); + executor.setMaxPoolSize(maxPoolSize_tp); + executor.setCorePoolSize(corePoolSize_tp); executor.setQueueCapacity(queueCapacity_tp); executor.setKeepAliveSeconds(keepAliveSeconds_tp); // 线程池对拒绝任务(无线程可用)的处理策略 From 88b14f5b69eca361fdafdd9bc02367595220777e Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Thu, 13 Nov 2025 13:40:13 +0800 Subject: [PATCH 05/38] =?UTF-8?q?add=E6=96=B0=E5=A2=9E=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E4=B8=8E=E4=BF=9D=E9=99=A9=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=8C=BA=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pile/OrderBasicInfoController.java | 25 ++++- .../pile/service/OrderBasicInfoService.java | 2 + .../impl/OrderBasicInfoServiceImpl.java | 102 +++++++++++++++++- 3 files changed, 124 insertions(+), 5 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java index caf599418..26d7bea34 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java @@ -22,10 +22,7 @@ import com.jsowell.pile.service.OrderSplitRecordService; import com.jsowell.pile.service.PileMerchantInfoService; import com.jsowell.pile.service.PileStationInfoService; import com.jsowell.pile.util.UserUtils; -import com.jsowell.pile.vo.web.OrderListVO; -import com.jsowell.pile.vo.web.SplitAggregateDataVO; -import com.jsowell.pile.vo.web.SplitConfigOrderVO; -import com.jsowell.pile.vo.web.SplitRecordInfoVO; +import com.jsowell.pile.vo.web.*; import com.jsowell.service.OrderService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -364,4 +361,24 @@ public class OrderBasicInfoController extends BaseController { logger.info("订单保险金额退款 params:{}, result:{}", JSON.toJSONString(orderBasicInfo), response); return response; } + + /** + * 订单数量与保险金额时间区统计 + * @param dto + * @return + */ + @PostMapping("/queryOrderInsuranceAmountByTime") + public RestApiResponse queryOrderInsuranceAmountByTime(@RequestBody QueryOrderDTO dto) { + RestApiResponse response = null; + try { + //stationId ,merchantIdList,stationIdList,merchantId,startTime,endTime + OrderCountByTimeVO result = orderBasicInfoService.queryOrderInsuranceAmountByTime(dto); + response = new RestApiResponse<>(result); + } catch (Exception e) { + logger.error("时间区间查询订单统计 error", e); + } + logger.info("时间区间查询订单统计 result:{}", response); + return response; + } + } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index e97e30425..3c5f083d4 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -631,4 +631,6 @@ public interface OrderBasicInfoService{ * @return */ List getOrderDetailByStationIdsForMonth(List stationIds , String startTime , String endTime); + + OrderCountByTimeVO queryOrderInsuranceAmountByTime(QueryOrderDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index e66c25841..3d672c745 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -77,7 +77,11 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -599,7 +603,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { // 结算时间设置为当前时间 orderInfo.setSettlementTime(new Date()); - + // 启动失败原因 orderInfo.setReason(failedReasonMsg); // 订单退款(结算订单) @@ -5939,5 +5943,101 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { public List getOrderDetailByStationIdsForMonth(List stationIds , String startTime , String endTime) { return orderBasicInfoMapper.getOrderDetailByStationIdsForMonth(stationIds, startTime, endTime); } + + /** + * 订单数量与保险金额时间区统计 + * @param dto + * @return + */ + @Override + public OrderCountByTimeVO queryOrderInsuranceAmountByTime(QueryOrderDTO dto) { + if (dto == null) { + dto = new QueryOrderDTO(); + } + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS); + + // 开始时间默认:本月第一天 + if (StringUtils.isEmpty(dto.getStartTime())) { + LocalDate firstDayOfMonth = LocalDate.now().withDayOfMonth(1); + LocalDateTime monthStart = LocalDateTime.of(firstDayOfMonth, LocalTime.MIN); + dto.setStartTime(monthStart.format(dateTimeFormatter)); + } + + // 结束时间默认:当前时间 + if (StringUtils.isEmpty(dto.getEndTime())) { + dto.setEndTime(LocalDateTime.now().format(dateTimeFormatter)); + } + + // 查询订单数据 + List orderList = orderBasicInfoMapper.selectOrderBasicInfoList(dto); + + List result = new ArrayList<>(); + BigDecimal totalInsuranceAmount = BigDecimal.ZERO; + int totalCount = 0; + + try { + LocalDateTime queryStart = LocalDateTime.parse(dto.getStartTime(), dateTimeFormatter); + LocalDateTime queryEnd = LocalDateTime.parse(dto.getEndTime(), dateTimeFormatter); + + // 按月分组订单 + Map> ordersByMonth = orderList.stream() + .collect(Collectors.groupingBy(order -> { + if (order.getCreateTime() != null) { + LocalDateTime createTime = LocalDateTime.parse(order.getCreateTime(), dateTimeFormatter); + return YearMonth.from(createTime); + } else { + logger.warn("订单创建时间为空,订单号:{}", order.getOrderCode()); + return YearMonth.from(LocalDateTime.now()); + } + })); + + // 循环每个月 + YearMonth currentMonth = YearMonth.from(queryStart); + YearMonth endMonth = YearMonth.from(queryEnd); + + while (!currentMonth.isAfter(endMonth)) { + LocalDateTime monthStartTime = currentMonth.atDay(1).atStartOfDay(); + LocalDateTime monthEndTime = currentMonth.plusMonths(1).atDay(1).atStartOfDay(); + + List ordersInMonth = ordersByMonth.getOrDefault(currentMonth, Collections.emptyList()); + int monthCount = ordersInMonth.size(); + + BigDecimal monthInsuranceAmount = ordersInMonth.stream() + .map(OrderListVO::getInsuranceAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + OrderCountByTimeVO.OrderCountByTimeListVO vo = new OrderCountByTimeVO.OrderCountByTimeListVO(); + vo.setStartTime(monthStartTime.format(dateTimeFormatter)); + vo.setEndTime(monthEndTime.format(dateTimeFormatter)); + vo.setCount(monthCount); + vo.setOrderCount(monthCount); + vo.setInsuranceAmount(monthInsuranceAmount); + + result.add(vo); + + totalCount += monthCount; + totalInsuranceAmount = totalInsuranceAmount.add(monthInsuranceAmount); + + currentMonth = currentMonth.plusMonths(1); + } + + // 排序 + result.sort(Comparator.comparing(OrderCountByTimeVO.OrderCountByTimeListVO::getStartTime)); + + } catch (Exception e) { + logger.error("统计订单数量失败", e); + } + + // 封装返回 + OrderCountByTimeVO orderCountByTimeVO = new OrderCountByTimeVO(); + orderCountByTimeVO.setOrderCountByTimeList(result); + orderCountByTimeVO.setTotalCount(totalCount); + orderCountByTimeVO.setTotalInsuranceAmount(totalInsuranceAmount); + + logger.info("按月查询订单数量结果:{}", JSONObject.toJSONString(orderCountByTimeVO)); + return orderCountByTimeVO; + } } From 38fde97b7b0ad20b613bbece862197caa402d466 Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Thu, 13 Nov 2025 14:25:11 +0800 Subject: [PATCH 06/38] update --- .../pile/mapper/OrderBasicInfoMapper.java | 9 +- .../impl/OrderBasicInfoServiceImpl.java | 128 +++++++----------- .../mapper/pile/OrderBasicInfoMapper.xml | 17 +++ 3 files changed, 75 insertions(+), 79 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index d410460d1..75f496d21 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -1,10 +1,7 @@ package com.jsowell.pile.mapper; -import com.alipay.api.domain.ChargeOrderInfo; import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.OrderDetail; -import com.jsowell.pile.domain.OrderSplitRecord; -import com.jsowell.pile.domain.UserFrequentedStationInfo; import com.jsowell.pile.dto.*; import com.jsowell.pile.dto.nanrui.NRQueryOrderDTO; import com.jsowell.pile.dto.ningxiajiaotou.NXJTQueryOrdersInfoDTO; @@ -431,4 +428,10 @@ public interface OrderBasicInfoMapper { @Param("endTime") String endTime ); + /** + * 按月份统计订单数量和保险金额 + * @param dto 查询条件,startTime/endTime 必须是 yyyy-MM 拼装后的时间段 + * @return List + */ + List selectOrderCountAndInsuranceByMonth(@Param("dto") QueryOrderDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 3d672c745..9351a8f0e 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -5955,89 +5955,65 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { dto = new QueryOrderDTO(); } - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS); - - // 开始时间默认:本月第一天 - if (StringUtils.isEmpty(dto.getStartTime())) { - LocalDate firstDayOfMonth = LocalDate.now().withDayOfMonth(1); - LocalDateTime monthStart = LocalDateTime.of(firstDayOfMonth, LocalTime.MIN); - dto.setStartTime(monthStart.format(dateTimeFormatter)); - } - - // 结束时间默认:当前时间 - if (StringUtils.isEmpty(dto.getEndTime())) { - dto.setEndTime(LocalDateTime.now().format(dateTimeFormatter)); - } - - // 查询订单数据 - List orderList = orderBasicInfoMapper.selectOrderBasicInfoList(dto); - - List result = new ArrayList<>(); - BigDecimal totalInsuranceAmount = BigDecimal.ZERO; - int totalCount = 0; + // 只允许 yyyy-MM 格式 + DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); + DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); try { - LocalDateTime queryStart = LocalDateTime.parse(dto.getStartTime(), dateTimeFormatter); - LocalDateTime queryEnd = LocalDateTime.parse(dto.getEndTime(), dateTimeFormatter); - - // 按月分组订单 - Map> ordersByMonth = orderList.stream() - .collect(Collectors.groupingBy(order -> { - if (order.getCreateTime() != null) { - LocalDateTime createTime = LocalDateTime.parse(order.getCreateTime(), dateTimeFormatter); - return YearMonth.from(createTime); - } else { - logger.warn("订单创建时间为空,订单号:{}", order.getOrderCode()); - return YearMonth.from(LocalDateTime.now()); - } - })); - - // 循环每个月 - YearMonth currentMonth = YearMonth.from(queryStart); - YearMonth endMonth = YearMonth.from(queryEnd); - - while (!currentMonth.isAfter(endMonth)) { - LocalDateTime monthStartTime = currentMonth.atDay(1).atStartOfDay(); - LocalDateTime monthEndTime = currentMonth.plusMonths(1).atDay(1).atStartOfDay(); - - List ordersInMonth = ordersByMonth.getOrDefault(currentMonth, Collections.emptyList()); - int monthCount = ordersInMonth.size(); - - BigDecimal monthInsuranceAmount = ordersInMonth.stream() - .map(OrderListVO::getInsuranceAmount) - .filter(Objects::nonNull) - .reduce(BigDecimal.ZERO, BigDecimal::add); - - OrderCountByTimeVO.OrderCountByTimeListVO vo = new OrderCountByTimeVO.OrderCountByTimeListVO(); - vo.setStartTime(monthStartTime.format(dateTimeFormatter)); - vo.setEndTime(monthEndTime.format(dateTimeFormatter)); - vo.setCount(monthCount); - vo.setOrderCount(monthCount); - vo.setInsuranceAmount(monthInsuranceAmount); - - result.add(vo); - - totalCount += monthCount; - totalInsuranceAmount = totalInsuranceAmount.add(monthInsuranceAmount); - - currentMonth = currentMonth.plusMonths(1); + if (StringUtils.isNotEmpty(dto.getStartTime())) { + YearMonth startMonth = YearMonth.parse(dto.getStartTime(), monthFormatter); + dto.setStartTime(startMonth.atDay(1).atStartOfDay().format(fullFormatter)); + } + if (StringUtils.isNotEmpty(dto.getEndTime())) { + YearMonth endMonth = YearMonth.parse(dto.getEndTime(), monthFormatter).plusMonths(1); + dto.setEndTime(endMonth.atDay(1).atStartOfDay().format(fullFormatter)); } - - // 排序 - result.sort(Comparator.comparing(OrderCountByTimeVO.OrderCountByTimeListVO::getStartTime)); - } catch (Exception e) { - logger.error("统计订单数量失败", e); + throw new IllegalArgumentException("时间格式错误,应为 yyyy-MM"); } - // 封装返回 - OrderCountByTimeVO orderCountByTimeVO = new OrderCountByTimeVO(); - orderCountByTimeVO.setOrderCountByTimeList(result); - orderCountByTimeVO.setTotalCount(totalCount); - orderCountByTimeVO.setTotalInsuranceAmount(totalInsuranceAmount); + // 默认本月 + if (StringUtils.isEmpty(dto.getStartTime()) || StringUtils.isEmpty(dto.getEndTime())) { + YearMonth currentMonth = YearMonth.now(); + dto.setStartTime(currentMonth.atDay(1).atStartOfDay().format(fullFormatter)); + dto.setEndTime(currentMonth.plusMonths(1).atDay(1).atStartOfDay().format(fullFormatter)); + } + + // 查询数据库聚合结果(仅一次) + List stats = orderBasicInfoMapper.selectOrderCountAndInsuranceByMonth(dto); + + // 封装结果 + BigDecimal totalInsuranceAmount = BigDecimal.ZERO; + int totalCount = 0; + List result = new ArrayList<>(); + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + for (OrderMonthStatVO stat : stats) { + YearMonth ym = YearMonth.parse(stat.getMonth(), DateTimeFormatter.ofPattern("yyyy-MM")); + + OrderCountByTimeVO.OrderCountByTimeListVO vo = new OrderCountByTimeVO.OrderCountByTimeListVO(); + vo.setStartTime(ym.atDay(1).atStartOfDay().format(dateTimeFormatter)); + vo.setEndTime(ym.plusMonths(1).atDay(1).atStartOfDay().format(dateTimeFormatter)); + vo.setCount(stat.getOrderCount()); + vo.setOrderCount(stat.getOrderCount()); + vo.setInsuranceAmount(stat.getTotalInsuranceAmount()); + + result.add(vo); + + totalCount += stat.getOrderCount(); + totalInsuranceAmount = totalInsuranceAmount.add(stat.getTotalInsuranceAmount()); + } + + // 汇总 + OrderCountByTimeVO vo = new OrderCountByTimeVO(); + vo.setOrderCountByTimeList(result); + vo.setTotalCount(totalCount); + vo.setTotalInsuranceAmount(totalInsuranceAmount); + + logger.info("按月统计结果: {}", JSONObject.toJSONString(vo)); + return vo; - logger.info("按月查询订单数量结果:{}", JSONObject.toJSONString(orderCountByTimeVO)); - return orderCountByTimeVO; } } diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index 3e6626bd0..897c6fc42 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3451,4 +3451,21 @@ AND DATE_ADD(#{endTime,jdbcType=VARCHAR}, INTERVAL 1 DAY) ORDER BY t1.create_time DESC + + + + + From 80862d5c1dad99c02fe45d98ddfb215e78cbf6f2 Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Thu, 13 Nov 2025 14:25:25 +0800 Subject: [PATCH 07/38] update --- .../jsowell/web/controller/pile/OrderBasicInfoController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java index 26d7bea34..27c259283 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/OrderBasicInfoController.java @@ -371,7 +371,6 @@ public class OrderBasicInfoController extends BaseController { public RestApiResponse queryOrderInsuranceAmountByTime(@RequestBody QueryOrderDTO dto) { RestApiResponse response = null; try { - //stationId ,merchantIdList,stationIdList,merchantId,startTime,endTime OrderCountByTimeVO result = orderBasicInfoService.queryOrderInsuranceAmountByTime(dto); response = new RestApiResponse<>(result); } catch (Exception e) { From 7f433e06c2bfb463545c13f1325b2d72ed7ee388 Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Thu, 13 Nov 2025 14:25:39 +0800 Subject: [PATCH 08/38] update --- .../com/jsowell/pile/vo/web/OrderMonthStatVO.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java new file mode 100644 index 000000000..53e7d172f --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java @@ -0,0 +1,11 @@ +package com.jsowell.pile.vo.web; + +import lombok.Data; +import java.math.BigDecimal; + +@Data +public class OrderMonthStatVO { + private String month; // 2025-10 + private Integer orderCount; + private BigDecimal totalInsuranceAmount; +} From d672eff8c8474b76017f0c5f798a264026682403 Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Thu, 13 Nov 2025 15:07:55 +0800 Subject: [PATCH 09/38] update --- .../impl/OrderBasicInfoServiceImpl.java | 30 +++++++++---------- .../jsowell/pile/vo/web/OrderMonthStatVO.java | 4 +-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 9351a8f0e..c62a59489 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -5955,18 +5955,19 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { dto = new QueryOrderDTO(); } - // 只允许 yyyy-MM 格式 DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); - DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); try { + // 处理 startTime if (StringUtils.isNotEmpty(dto.getStartTime())) { YearMonth startMonth = YearMonth.parse(dto.getStartTime(), monthFormatter); - dto.setStartTime(startMonth.atDay(1).atStartOfDay().format(fullFormatter)); + dto.setStartTime(startMonth.atDay(1).atStartOfDay().format(dateTimeFormatter)); } + // 处理 endTime,取下个月月初,保证 < endTime 不丢数据 if (StringUtils.isNotEmpty(dto.getEndTime())) { - YearMonth endMonth = YearMonth.parse(dto.getEndTime(), monthFormatter).plusMonths(1); - dto.setEndTime(endMonth.atDay(1).atStartOfDay().format(fullFormatter)); + YearMonth endMonth = YearMonth.parse(dto.getEndTime(), monthFormatter); + dto.setEndTime(endMonth.plusMonths(1).atDay(1).atStartOfDay().format(dateTimeFormatter)); } } catch (Exception e) { throw new IllegalArgumentException("时间格式错误,应为 yyyy-MM"); @@ -5975,42 +5976,41 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { // 默认本月 if (StringUtils.isEmpty(dto.getStartTime()) || StringUtils.isEmpty(dto.getEndTime())) { YearMonth currentMonth = YearMonth.now(); - dto.setStartTime(currentMonth.atDay(1).atStartOfDay().format(fullFormatter)); - dto.setEndTime(currentMonth.plusMonths(1).atDay(1).atStartOfDay().format(fullFormatter)); + dto.setStartTime(currentMonth.atDay(1).atStartOfDay().format(dateTimeFormatter)); + dto.setEndTime(currentMonth.plusMonths(1).atDay(1).atStartOfDay().format(dateTimeFormatter)); } - // 查询数据库聚合结果(仅一次) + // 查询数据库聚合结果 List stats = orderBasicInfoMapper.selectOrderCountAndInsuranceByMonth(dto); - // 封装结果 + // 封装返回结果 BigDecimal totalInsuranceAmount = BigDecimal.ZERO; int totalCount = 0; List result = new ArrayList<>(); - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - for (OrderMonthStatVO stat : stats) { - YearMonth ym = YearMonth.parse(stat.getMonth(), DateTimeFormatter.ofPattern("yyyy-MM")); + YearMonth ym = YearMonth.parse(stat.getMonth(), monthFormatter); OrderCountByTimeVO.OrderCountByTimeListVO vo = new OrderCountByTimeVO.OrderCountByTimeListVO(); vo.setStartTime(ym.atDay(1).atStartOfDay().format(dateTimeFormatter)); vo.setEndTime(ym.plusMonths(1).atDay(1).atStartOfDay().format(dateTimeFormatter)); vo.setCount(stat.getOrderCount()); vo.setOrderCount(stat.getOrderCount()); - vo.setInsuranceAmount(stat.getTotalInsuranceAmount()); + BigDecimal insuranceAmount = stat.getInsuranceAmount() == null ? BigDecimal.ZERO : stat.getInsuranceAmount(); + vo.setInsuranceAmount(totalInsuranceAmount); result.add(vo); totalCount += stat.getOrderCount(); - totalInsuranceAmount = totalInsuranceAmount.add(stat.getTotalInsuranceAmount()); + totalInsuranceAmount = totalInsuranceAmount.add(insuranceAmount); } - // 汇总 OrderCountByTimeVO vo = new OrderCountByTimeVO(); vo.setOrderCountByTimeList(result); vo.setTotalCount(totalCount); vo.setTotalInsuranceAmount(totalInsuranceAmount); + logger.info("按月统计结果: {}", JSONObject.toJSONString(vo)); return vo; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java index 53e7d172f..fc96649a1 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderMonthStatVO.java @@ -5,7 +5,7 @@ import java.math.BigDecimal; @Data public class OrderMonthStatVO { - private String month; // 2025-10 + private String month; private Integer orderCount; - private BigDecimal totalInsuranceAmount; + private BigDecimal insuranceAmount; } From a96c374b948f907bb9dd7c0d4ab6b949bf14535f Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 13 Nov 2025 16:15:48 +0800 Subject: [PATCH 10/38] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81=E5=8F=AA=E6=9C=89=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B=EF=BC=8C=E6=8E=92?= =?UTF-8?q?=E9=99=A4=E4=B8=AA=E4=BA=BA=E6=A1=A9=E7=9A=84=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/pile/dto/QueryOrderDTO.java | 5 +++++ .../impl/OrderBasicInfoServiceImpl.java | 19 +++++++++++++++++++ .../mapper/pile/OrderBasicInfoMapper.xml | 6 ++++++ 3 files changed, 30 insertions(+) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java index a0b7afae7..f1710ad94 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java @@ -107,4 +107,9 @@ public class QueryOrderDTO extends BaseEntity { * 车牌号 */ private String plateNumber; + + /** + * 排除的站点Id列表 + */ + private List excludeStationIdList; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index e66c25841..ca934bc53 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -291,6 +291,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { */ @Override public List selectOrderBasicInfoList(QueryOrderDTO dto) { + excludePersonalPileStation(dto); // 筛选个人桩站点 List orderListVOS = orderBasicInfoMapper.selectOrderBasicInfoList(dto); if (CollectionUtils.isEmpty(orderListVOS)) { return orderListVOS; @@ -339,6 +340,24 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return orderListVOS; } + /** + * 如果查询订单状态只有异常的情况下,排除个人桩的异常订单 + */ + private void excludePersonalPileStation(QueryOrderDTO dto) { + // 如果orderStatus不等于异常,直接返回 + if (!OrderStatusEnum.ABNORMAL.getValue().equals(dto.getOrderStatus())) { + return; + } + // 如果dto中除了订单状态还有其他查询条件,则返回 + if (dto.getMerchantId() != null || dto.getStationId() != null || dto.getOrderCode() != null + || dto.getMobileNumber() != null || dto.getTransactionCode() != null || dto.getPileSn() != null + || dto.getPlateNumber() != null) { + return; + } + // 设置个人桩站id, 148-个人桩站点; 684-7KW小直流个人桩站点 + dto.setExcludeStationIdList(Lists.newArrayList(148, 684)); + } + private void batchQueryFeeAmt(List orderListVOS) { // 批量查手续费 List orderCodeList = orderListVOS.stream().map(OrderListVO::getOrderCode).collect(Collectors.toList()); diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index 3e6626bd0..083a3976b 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -1988,6 +1988,12 @@ #{stationDeptId} + + and t1.station_id not in + + #{excludeStationId} + + order by t1.create_time desc From 68c947574d3bee1a620d9de6bb5aad4fb3b5645b Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 14 Nov 2025 10:43:48 +0800 Subject: [PATCH 11/38] =?UTF-8?q?=E7=94=B5=E5=8D=95=E8=BD=A6=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=EF=BC=8C=E6=8C=89=E5=AE=9E=E9=99=85=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DelayMerchantProgramLogic.java | 59 +++++++++++-------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java index ac7a4f5e3..debabc431 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java @@ -609,32 +609,43 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { // 查询订单信息 OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderBasicInfo.getOrderCode()); // 订单消费金额, 除了充满自停是需要计算实际消费, 其他金额都是按次收费 - BigDecimal orderAmount; + BigDecimal orderAmount = BigDecimal.ZERO; // 耗电量 BigDecimal consumedEnergy = message.getConsumedEnergy(); - if (fullOfSelfStopping.compareTo(orderBasicInfo.getPayAmount()) == 0) { - // 计费模板, 只取平时段的价格 - BigDecimal flatElectricityPrice = orderDetail.getFlatElectricityPrice() != null ? orderDetail.getFlatElectricityPrice() : BigDecimal.ZERO; // x元/每度 - // BigDecimal flatServicePrice = orderDetail.getFlatServicePrice() != null ? orderDetail.getFlatServicePrice() : BigDecimal.ZERO; // x元/每度 - BigDecimal flatServicePrice = BigDecimal.ZERO; // x元/每度 服务费默认0 - // 单价 = 电费单价 + 服务费单价 - BigDecimal price = flatElectricityPrice.add(flatServicePrice); - // 如果耗电量或单价为空或者为0,则订单消费为0 - // if (consumedEnergy == null || consumedEnergy.compareTo(BigDecimal.ZERO) == 0 || price.compareTo(BigDecimal.ZERO) == 0) { - // logger.info("计算电单车退款逻辑,耗电量或计费模板为空,不执行退款逻辑, orderCode:{}, 耗电量:{}, 每度电费:{}", orderBasicInfo.getOrderCode(), consumedEnergy, price); - // return; - // } - // 计算实际消费, 保留两位小数 - orderAmount = consumedEnergy.multiply(price).setScale(2, RoundingMode.UP); - } else { - // 2025.07.28如果耗电量为 0,也进行退款 - if (consumedEnergy.compareTo(BigDecimal.ZERO) == 0) { - orderAmount = BigDecimal.ZERO; - }else { - // 其他金额、并且耗电量不为 0 ,都是按次收费, 不退款 - orderAmount = orderBasicInfo.getPayAmount(); - } - } + + // 计算实际消费金额 + // 计费模板, 只取平时段的价格 + BigDecimal flatElectricityPrice = orderDetail.getFlatElectricityPrice() != null ? orderDetail.getFlatElectricityPrice() : BigDecimal.ZERO; // x元/每度 + // BigDecimal flatServicePrice = orderDetail.getFlatServicePrice() != null ? orderDetail.getFlatServicePrice() : BigDecimal.ZERO; // x元/每度 + BigDecimal flatServicePrice = BigDecimal.ZERO; // x元/每度 服务费默认0 + // 单价 = 电费单价 + 服务费单价 + BigDecimal price = flatElectricityPrice.add(flatServicePrice); + // 计算实际消费, 保留两位小数 + orderAmount = consumedEnergy.multiply(price).setScale(2, RoundingMode.UP); + + // if (fullOfSelfStopping.compareTo(orderBasicInfo.getPayAmount()) == 0) { + // // 计费模板, 只取平时段的价格 + // BigDecimal flatElectricityPrice = orderDetail.getFlatElectricityPrice() != null ? orderDetail.getFlatElectricityPrice() : BigDecimal.ZERO; // x元/每度 + // // BigDecimal flatServicePrice = orderDetail.getFlatServicePrice() != null ? orderDetail.getFlatServicePrice() : BigDecimal.ZERO; // x元/每度 + // BigDecimal flatServicePrice = BigDecimal.ZERO; // x元/每度 服务费默认0 + // // 单价 = 电费单价 + 服务费单价 + // BigDecimal price = flatElectricityPrice.add(flatServicePrice); + // // 如果耗电量或单价为空或者为0,则订单消费为0 + // // if (consumedEnergy == null || consumedEnergy.compareTo(BigDecimal.ZERO) == 0 || price.compareTo(BigDecimal.ZERO) == 0) { + // // logger.info("计算电单车退款逻辑,耗电量或计费模板为空,不执行退款逻辑, orderCode:{}, 耗电量:{}, 每度电费:{}", orderBasicInfo.getOrderCode(), consumedEnergy, price); + // // return; + // // } + // // 计算实际消费, 保留两位小数 + // orderAmount = consumedEnergy.multiply(price).setScale(2, RoundingMode.UP); + // } else { + // // 2025.07.28如果耗电量为 0,也进行退款 + // if (consumedEnergy.compareTo(BigDecimal.ZERO) == 0) { + // orderAmount = BigDecimal.ZERO; + // }else { + // // 其他金额、并且耗电量不为 0 ,都是按次收费, 不退款 + // orderAmount = orderBasicInfo.getPayAmount(); + // } + // } // 退款金额 = 支付金额 - 优惠后总消费金额 BigDecimal refundAmount = orderBasicInfo.getPayAmount().subtract(orderAmount); From e5ced1e3c7b1a935ece0530c2cb417761ab2ce99 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 14 Nov 2025 11:08:10 +0800 Subject: [PATCH 12/38] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BD=99=E9=A2=9D=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=BC=80=E5=A7=8B=E6=97=B6=E9=97=B4=E5=92=8C?= =?UTF-8?q?=E7=BB=93=E6=9D=9F=E6=97=B6=E9=97=B4=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/service/MemberService.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java b/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java index 602ac28a1..764a6d83e 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java @@ -33,7 +33,6 @@ import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.enums.ykc.ScenarioEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.AdapayUtil; -import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.JWTUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.id.IdUtils; @@ -62,7 +61,10 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.text.ParseException; -import java.util.*; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; @Service @@ -476,19 +478,20 @@ public class MemberService { // 获取分页信息 long pageNum = dto.getPageNum() == 0 ? 1L : dto.getPageNum(); long pageSize = dto.getPageSize() == 0 ? 10L : dto.getPageSize(); - String tradeDate = dto.getTradeDate(); + String tradeDate = dto.getTradeDate() + " 00:00:00";; + String endDate = dto.getEndDate() + " 23:59:59"; // 获取年、月 - String[] split = StringUtils.split(tradeDate, "-"); - int year = Integer.parseInt(split[0]); - int month = Integer.parseInt(split[1]); + // String[] split = StringUtils.split(tradeDate, "-"); + // int year = Integer.parseInt(split[0]); + // int month = Integer.parseInt(split[1]); // 根据年月获取当月第一天和最后一天 - tradeDate = DateUtils.getFirstDay(year, month, DateUtils.YYYY_MM_DD); - String lastDay = DateUtils.getLastDay(year, month, DateUtils.YYYY_MM_DD); + // tradeDate = DateUtils.getFirstDay(year, month, DateUtils.YYYY_MM_DD); + // String lastDay = DateUtils.getLastDay(year, month, DateUtils.YYYY_MM_DD); // sql语句查询日期需要多加一天 - Date date = DateUtils.addDays(DateUtils.parseDate(lastDay, DateUtils.YYYY_MM_DD), 1); - lastDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date); + // Date date = DateUtils.addDays(DateUtils.parseDate(lastDay, DateUtils.YYYY_MM_DD), 1); + // lastDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date); dto.setTradeDate(tradeDate); - dto.setEndDate(lastDay); + dto.setEndDate(endDate); // PageHelper.startPage(pageNum, pageSize); // List list = memberBasicInfoService.getMemberWalletDetail(dto); List list = memberBasicInfoService.getMemberWalletDetailV2(dto); From e30ffa19affe81fd61878c84e2d485dfa5ad2ad0 Mon Sep 17 00:00:00 2001 From: Lemon Date: Fri, 14 Nov 2025 13:57:46 +0800 Subject: [PATCH 13/38] =?UTF-8?q?add=20=20=E6=96=B0=E5=A2=9E=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E6=9F=A5=E8=AF=A2=E6=8A=BD=E6=88=90=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/index/indexController.java | 18 +++ jsowell-admin/src/test/resources/payment_ids | 129 ++---------------- .../pile/mapper/OrderBasicInfoMapper.java | 6 + .../pile/service/OrderBasicInfoService.java | 7 + .../impl/OrderBasicInfoServiceImpl.java | 10 ++ .../impl/YKCPushCommandServiceImpl.java | 2 +- .../pile/vo/web/IndexPlatformProfitVO.java | 55 ++++++++ .../mapper/pile/OrderBasicInfoMapper.xml | 23 ++++ 8 files changed, 134 insertions(+), 116 deletions(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/vo/web/IndexPlatformProfitVO.java diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/index/indexController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/index/indexController.java index 30f2604f8..1c42349c0 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/index/indexController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/index/indexController.java @@ -8,6 +8,7 @@ import com.jsowell.pile.service.OrderBasicInfoService; import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.pile.vo.web.IndexGeneralSituationVO; import com.jsowell.pile.vo.web.IndexOrderInfoVO; +import com.jsowell.pile.vo.web.IndexPlatformProfitVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -67,5 +68,22 @@ public class indexController extends BaseController { return response; } + /** + * 查询每天的平台抽成金额 + */ + @PostMapping("/getPlatformProfit") + public RestApiResponse getPlatformProfit(@RequestBody IndexQueryDTO dto) { + logger.info("查询每天平台抽成金额"); + RestApiResponse response; + try { + List indexOrderInfo = orderBasicInfoService.getPlatformProfit(dto); + response = new RestApiResponse<>(indexOrderInfo); + } catch (Exception e) { + logger.error("查询每天平台抽成金额 error!{}", e.getMessage()); + response = new RestApiResponse<>("00200003", "查询每天平台抽成金额错误"); + } + logger.info("查询每天平台抽成金额 result:{}", JSON.toJSONString(response)); + return response; + } } diff --git a/jsowell-admin/src/test/resources/payment_ids b/jsowell-admin/src/test/resources/payment_ids index d0b071127..2262d1e96 100644 --- a/jsowell-admin/src/test/resources/payment_ids +++ b/jsowell-admin/src/test/resources/payment_ids @@ -1,115 +1,14 @@ -002212025103006385110829739258861731840 -002212025103006420410829740069440344064 -002212025103006283610829736680488869888 -002212025103006425710829740292191461376 -002212025103006510810829742351670218752 -002212025103007033710829745495183630336 -002212025103007063710829746247075504128 -002212025103006563710829743729515831296 -002212025103007413510829755049850081280 -002212025103007563410829758817803067392 -002212025103008082610829761806802526208 -002212025103008172210829764053775060992 -002212025103008203310829764852630556672 -002212025103008451910829771085018189824 -002212025103008035210829760653620559872 -002212025103008341410829768296875573248 -002212025103008311510829767546581729280 -002212025103009050210829776049593528320 -002212025103009164510829778997153243136 -002212025103009035710829775774065516544 -002212025103010360110829798945569247232 -002212025103010515810829802958759043072 -002212025103011103310829807636007800832 -002212025103010574410829804408784429056 -002212025103010582310829804573683511296 -002212025103011425610829815784164724736 -002212025103011180610829809534907621376 -002212025103011365610829814275146399744 -002212025103011470410829816825962704896 -002212025103011360610829814064143540224 -002212025103012073410829821986152013824 -002212025103012135010829823562962882560 -002212025103012193410829825004519976960 -002212025103012155610829824090044268544 -002212025103011513610829817965404143616 -002212025103012015110829820544775245824 -002212025103012131210829823403176669184 -002212025103012244210829826297279942656 -002212025103012264910829826830690598912 -002212025103012040310829821101330010112 -002212025103012211610829825432771010560 -002212025103013020710829835714712981504 -002212025103013365010829844450793910272 -002212025103013402010829845328393326592 -002212025103013112910829838070657720320 -002212025103013285910829842473821278208 -002212025103013440410829846268496224256 -002212025103014092510829852649815199744 -002212025103013563610829849422885466112 -002212025103013551610829849089442476032 -002212025103014243010829856444506857472 -002212025103015193310829870297995173888 -002212025103014490310829862624188854272 -002212025103015283110829872556300709888 -002212025103015104910829868102130208768 -002212025103015322410829873531522555904 -002212025103015400910829875484096872448 -002212025103015373910829874852334063616 -002212025103015185110829870121872142336 -002212025103015321510829873494927257600 -002212025103015493310829877848140840960 -002212025103015453910829876868414316544 -002212025103016270310829887285895245824 -002212025103015542310829879064275103744 -002212025103016180910829885047130980352 -002212025103015552810829879337345245184 -002212025103015584410829880159063937024 -002212025103016133410829883893890314240 -002212025103015530310829878727686397952 -002212025103016065910829882235839979520 -002212025103016400410829890563055955968 -002212025103016161910829884583828180992 -002212025103016435610829891535513759744 -002212025103016012910829880851891654656 -002212025103016565310829894791719727104 -002212025103016214610829885954153402368 -002212025103016462710829892168778137600 -002212025103016344910829889242361917440 -002212025103017020210829896090116845568 -002212025103016381810829890116043845632 -002212025103017031210829896383655190528 -002212025103017061310829897141163270144 -002212025103016331610829888850093821952 -002212025103016583010829895201998127104 -002212025103016534510829894005275127808 -002212025103017021510829896145112584192 -002212025103018125410829913922095423488 -002212025103017521010829908704511303680 -002212025103018340010829919235288752128 -002212025103018222710829916327029686272 -002212025103018254710829917167106834432 -002212025103018390710829920523313364992 -002212025103018225010829916421820919808 -002212025103018482210829922848148996096 -002212025103018514710829923709067608064 -002212025103019265910829932569425784832 -002212025103018580410829925289510748160 -002212025103018462110829922341158285312 -002212025103019160110829929809535991808 -002212025103019390710829935620681240576 -002212025103019104710829928489152319488 -002212025103019282510829932928399466496 -002212025103019303610829933476599201792 -002212025103018585710829925514170220544 -002212025103018525910829924010419957760 -002212025103019402010829935928731922432 -002212025103019383110829935469262696448 -002212025103019264710829932515713507328 -002212025103020043210829942017250721792 -002212025103020481810829953033279811584 -002212025103021045210829957200211787776 -002212025103021125110829959211212742656 -002212025103021572010829970406447652864 -002212025103022020110829971581943312384 -002212025103021454810829967501485281280 \ No newline at end of file +002212025060310590410775808955660226560 +002212025060209335010775425114719989760 +002212025060119145310775208954038964224 +002212025052308545110771791425828184064 +002212025060408400910776136380814315520 +002212025060113395910775124672697036800 +002212025053010191210774349368864821248 +002212025060809394310777600925872390144 +002212025053022491710774538136450727936 +002212025061217110110779164047563894784 +002212025060123174410775270071608823808 +002212025060312255210775830799009579008 +002212025052016133710770814683822862336 +002212025051612530210769314653202984960 \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index d410460d1..ec631dae9 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -431,4 +431,10 @@ public interface OrderBasicInfoMapper { @Param("endTime") String endTime ); + /** + * 查询平台抽成收入 + * @param dto + * @return + */ + List getPlatformProfit(IndexQueryDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index e97e30425..58a83602e 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -631,4 +631,11 @@ public interface OrderBasicInfoService{ * @return */ List getOrderDetailByStationIdsForMonth(List stationIds , String startTime , String endTime); + + /** + * 获取平台抽成金额 + * @param dto + * @return + */ + List getPlatformProfit(IndexQueryDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index e66c25841..88cfd91d2 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -5939,5 +5939,15 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { public List getOrderDetailByStationIdsForMonth(List stationIds , String startTime , String endTime) { return orderBasicInfoMapper.getOrderDetailByStationIdsForMonth(stationIds, startTime, endTime); } + + /** + * 查询平台抽成金额 + * @param dto + * @return + */ + @Override + public List getPlatformProfit(IndexQueryDTO dto) { + return orderBasicInfoMapper.getPlatformProfit(dto); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java index 682f3f099..e861418c5 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/YKCPushCommandServiceImpl.java @@ -61,7 +61,7 @@ public class YKCPushCommandServiceImpl implements YKCPushCommandService { @DubboReference private JcppService jcppService; - // 引入线程池 + // 引入线程池s private ThreadPoolTaskExecutor executor = SpringUtils.getBean("threadPoolTaskExecutor"); // 需要记录报文的数据帧类型 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/IndexPlatformProfitVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/IndexPlatformProfitVO.java new file mode 100644 index 000000000..784f35a3e --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/IndexPlatformProfitVO.java @@ -0,0 +1,55 @@ +package com.jsowell.pile.vo.web; + +import lombok.Data; + +/** + * 平台抽成信息VO + */ +@Data +public class IndexPlatformProfitVO { + + /** + * 充电次数 + */ + private String chargeTimes; + + /** + * 交易日期 + */ + private String tradeDate; + + /** + * adapay会员ID + */ + private String adapayMemberId; + + /** + * 电量金额 + */ + private String electricityAmount; + + /** + * 服务费金额 + */ + private String serviceAmount; + + /** + * 结算金额 + */ + private String settleAmount; + + /** + * 电费抽成金额 + */ + private String electricitySplitAmount; + + /** + * 服务费抽成金额 + */ + private String serviceSplitAmount; + + /** + * 总抽成金额 + */ + private String totalSplitAmount; +} diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index 3e6626bd0..e0d2fd323 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3451,4 +3451,27 @@ AND DATE_ADD(#{endTime,jdbcType=VARCHAR}, INTERVAL 1 DAY) ORDER BY t1.create_time DESC + + From 82ed8539e56cecc733ec92c368ceb89566085810 Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Fri, 14 Nov 2025 14:15:17 +0800 Subject: [PATCH 14/38] =?UTF-8?q?add=E6=B7=BB=E5=8A=A0=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=89=B9=E9=87=8F=E5=A4=84=E7=90=86=E7=99=BD?= =?UTF-8?q?=E5=90=8D=E5=8D=95=E5=BC=82=E5=B8=B8=E8=AE=A2=E5=8D=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/uniapp/customer/TempController.java | 17 ++++++++++ .../java/com/jsowell/service/TempService.java | 33 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java index 09827f18a..221a4df61 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java @@ -1035,4 +1035,21 @@ public class TempController extends BaseController { util.exportExcel(response, list, "某运营商财务报表"); } + /** + * 批量结算白名单异常订单 + * @param dto + * @return + */ + public RestApiResponse whiteListSettlement(@RequestBody QueryOrderDTO dto) { + RestApiResponse response = null; + try { + tempService.whiteListSettlement(dto); + response = new RestApiResponse<>(); + } catch (Exception e){ + logger.error("白名单异常订单结算 error", e); + response = new RestApiResponse<>("00300002", "白名单异常订单结算异常"); + } + return response; + } + } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java index 0df76f220..b3107fc10 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -139,6 +139,9 @@ public class TempService { @Autowired private MemberWalletInfoService memberWalletInfoService; + @Autowired + private OrderService orderService; + /** * 计算订单耗电量 * 内蒙古站点 @@ -1495,5 +1498,35 @@ public class TempService { return list; } + public void whiteListSettlement(QueryOrderDTO dto) { + if (dto == null || dto.getOrderCodeList() == null || dto.getOrderCodeList().isEmpty()) { + throw new RuntimeException("请添加要结算的白名单订单"); + } + + for (String orderCode : dto.getOrderCodeList()) { + + OrderBasicInfo orderBasicInfo = orderBasicInfoMapper.getOrderInfoByOrderCode(orderCode); + if (orderBasicInfo == null) { + throw new RuntimeException("订单号不存在:" + orderCode); + } + + if (!Objects.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ABNORMAL.getValue())) { + throw new RuntimeException("订单不是异常订单:" + orderCode); + } + + if (!Objects.equals(orderBasicInfo.getPayMode(), PayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { + throw new RuntimeException("订单不是白名单支付方式:" + orderCode); + } + + ManualSettlementDTO build = ManualSettlementDTO.builder() + .chargingDegree("0") + .chargingAmount("0") + .orderCode(orderCode) + .build(); + + orderService.manualSettlementOrder(build); + } + } + } From a2af4d8d557e081710d28b439c7de4b1d193252c Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Fri, 14 Nov 2025 14:21:32 +0800 Subject: [PATCH 15/38] update --- .../java/com/jsowell/api/uniapp/customer/TempController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java index 221a4df61..418282eb4 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/TempController.java @@ -1040,6 +1040,7 @@ public class TempController extends BaseController { * @param dto * @return */ + @PostMapping("/whiteListSettlement") public RestApiResponse whiteListSettlement(@RequestBody QueryOrderDTO dto) { RestApiResponse response = null; try { From 8879e0d2fb413abde469be9a391c0c3b1bccdc01 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 14 Nov 2025 14:48:15 +0800 Subject: [PATCH 16/38] =?UTF-8?q?update=20=E5=A4=84=E7=90=86=E6=9C=AA?= =?UTF-8?q?=E5=88=86=E8=B4=A6=E8=AE=A2=E5=8D=95task?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/quartz/task/JsowellTask.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java index ca1e7cf52..e7fba61ae 100644 --- a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java +++ b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java @@ -412,6 +412,20 @@ public class JsowellTask { * jsowellTask.processUnSettledOrder() */ public void processUnSettledOrder() { + // processUnSettledOrderOld(); // 旧方法 + processUnSettledOrderNew(); // 新方法 + } + + private void processUnSettledOrderNew() { + String startTime = "2025-01-01 00:00:00"; + String endTime = "2025-12-31 23:59:59"; + + // 查询未分帐订单 + PageUtils.startPage(1, 1000); + List list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + } + + private void processUnSettledOrderOld() { String startTime = "2023-01-01 00:00:00"; String endTime = "2024-12-31 23:59:59"; From 2b33a7a845f5dece5a8d7d17c8363e3ece8dd0d8 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 14 Nov 2025 14:49:40 +0800 Subject: [PATCH 17/38] =?UTF-8?q?update=20=E4=BB=A3=E7=A0=81=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pile/domain/AdapayUnsplitRecord.java | 103 +++ .../mapper/AdapayUnsplitRecordMapper.java | 29 + .../service/AdapayUnsplitRecordService.java | 29 + .../pile/AdapayUnsplitRecordServiceImpl.java | 72 ++ .../mapper/pile/AdapayUnsplitRecordMapper.xml | 701 ++++++++++++++++++ 5 files changed, 934 insertions(+) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java create mode 100644 jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java create mode 100644 jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java new file mode 100644 index 000000000..316f7c607 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java @@ -0,0 +1,103 @@ +package com.jsowell.pile.domain; + +import java.math.BigDecimal; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import lombok.experimental.SuperBuilder; + +@Data +@Accessors(chain = true) +@SuperBuilder +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AdapayUnsplitRecord { + /** + * 主键 + */ + private Integer id; + + /** + * 商户号 + */ + private String merchantCode; + + /** + * 支付时间 + */ + private Date payTime; + + /** + * 交易流水号 + */ + private String paymentId; + + /** + * 交易订单号 + */ + private String orderNo; + + /** + * 交易订单金额(也就是支付金额) + */ + private BigDecimal payAmount; + + /** + * 已确认分账金额(已经分账的金额) + */ + private BigDecimal confirmedSplitAmount; + + /** + * 已撤销金额(订单已经退款的金额) + */ + private BigDecimal refundAmount; + + /** + * 支付确认撤销金额(分帐后又撤销的金额) + */ + private BigDecimal paymentRevokeAmount; + + /** + * 剩余未分账金额(现在未分账的金额) + */ + private BigDecimal remainingSplitAmount; + + /** + * 订单编号 + */ + private String orderCode; + + /** + * 桩类型(ev汽车桩;ebike电单车桩) + */ + private String pileType; + + /** + * 查询订单中退款金额(应退金额,可能没有退) + */ + private BigDecimal dueRefundAmount; + + /** + * 查询订单中结算金额(结算金额,也就是应该分账的金额) + */ + private BigDecimal settleAmount; + + /** + * 退款标识 + */ + private String refundFlag; + + /** + * 分账标识 + */ + private String splitFlag; + + /** + * 更新时间 + */ + private Date updateTime; +} \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java new file mode 100644 index 000000000..7e014ea21 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java @@ -0,0 +1,29 @@ +package com.jsowell.pile.mapper; + +import com.jsowell.pile.domain.AdapayUnsplitRecord; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface AdapayUnsplitRecordMapper { + int deleteByPrimaryKey(Integer id); + + int insert(AdapayUnsplitRecord record); + + int insertOrUpdate(AdapayUnsplitRecord record); + + int insertOrUpdateSelective(AdapayUnsplitRecord record); + + int insertSelective(AdapayUnsplitRecord record); + + AdapayUnsplitRecord selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(AdapayUnsplitRecord record); + + int updateByPrimaryKey(AdapayUnsplitRecord record); + + int updateBatch(@Param("list") List list); + + int updateBatchSelective(@Param("list") List list); + + int batchInsert(@Param("list") List list); +} \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java new file mode 100644 index 000000000..8c9a42fcd --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java @@ -0,0 +1,29 @@ +package com.jsowell.pile.service; + +import com.jsowell.pile.domain.AdapayUnsplitRecord; +import java.util.List; +public interface AdapayUnsplitRecordService{ + + int deleteByPrimaryKey(Integer id); + + int insert(AdapayUnsplitRecord record); + + int insertOrUpdate(AdapayUnsplitRecord record); + + int insertOrUpdateSelective(AdapayUnsplitRecord record); + + int insertSelective(AdapayUnsplitRecord record); + + AdapayUnsplitRecord selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(AdapayUnsplitRecord record); + + int updateByPrimaryKey(AdapayUnsplitRecord record); + + int updateBatch(List list); + + int updateBatchSelective(List list); + + int batchInsert(List list); + +} diff --git a/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java new file mode 100644 index 000000000..08cabddd4 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java @@ -0,0 +1,72 @@ +package com.jsowell.web.controller.pile; + +import org.springframework.stereotype.Service; + +import org.springframework.beans.factory.annotation.Autowired; + +import com.jsowell.pile.domain.AdapayUnsplitRecord; +import java.util.List; +import com.jsowell.pile.mapper.AdapayUnsplitRecordMapper; +import com.jsowell.pile.service.AdapayUnsplitRecordService; +@Service +public class AdapayUnsplitRecordServiceImpl implements AdapayUnsplitRecordService{ + + @Autowired + private AdapayUnsplitRecordMapper adapayUnsplitRecordMapper; + + @Override + public int deleteByPrimaryKey(Integer id) { + return adapayUnsplitRecordMapper.deleteByPrimaryKey(id); + } + + @Override + public int insert(AdapayUnsplitRecord record) { + return adapayUnsplitRecordMapper.insert(record); + } + + @Override + public int insertOrUpdate(AdapayUnsplitRecord record) { + return adapayUnsplitRecordMapper.insertOrUpdate(record); + } + + @Override + public int insertOrUpdateSelective(AdapayUnsplitRecord record) { + return adapayUnsplitRecordMapper.insertOrUpdateSelective(record); + } + + @Override + public int insertSelective(AdapayUnsplitRecord record) { + return adapayUnsplitRecordMapper.insertSelective(record); + } + + @Override + public AdapayUnsplitRecord selectByPrimaryKey(Integer id) { + return adapayUnsplitRecordMapper.selectByPrimaryKey(id); + } + + @Override + public int updateByPrimaryKeySelective(AdapayUnsplitRecord record) { + return adapayUnsplitRecordMapper.updateByPrimaryKeySelective(record); + } + + @Override + public int updateByPrimaryKey(AdapayUnsplitRecord record) { + return adapayUnsplitRecordMapper.updateByPrimaryKey(record); + } + + @Override + public int updateBatch(List list) { + return adapayUnsplitRecordMapper.updateBatch(list); + } + + @Override + public int updateBatchSelective(List list) { + return adapayUnsplitRecordMapper.updateBatchSelective(list); + } + + @Override + public int batchInsert(List list) { + return adapayUnsplitRecordMapper.batchInsert(list); + } + +} diff --git a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml new file mode 100644 index 000000000..acd84bb0f --- /dev/null +++ b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml @@ -0,0 +1,701 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + id, merchant_code, pay_time, payment_id, order_no, pay_amount, confirmed_split_amount, + refund_amount, payment_revoke_amount, remaining_split_amount, order_code, pile_type, + due_refund_amount, settle_amount, refund_flag, split_flag, update_time + + + + + delete from adapay_unsplit_record + where id = #{id,jdbcType=INTEGER} + + + + insert into adapay_unsplit_record (merchant_code, pay_time, payment_id, + order_no, pay_amount, confirmed_split_amount, + refund_amount, payment_revoke_amount, remaining_split_amount, + order_code, pile_type, due_refund_amount, + settle_amount, refund_flag, split_flag, + update_time) + values (#{merchantCode,jdbcType=VARCHAR}, #{payTime,jdbcType=TIMESTAMP}, #{paymentId,jdbcType=VARCHAR}, + #{orderNo,jdbcType=VARCHAR}, #{payAmount,jdbcType=DECIMAL}, #{confirmedSplitAmount,jdbcType=DECIMAL}, + #{refundAmount,jdbcType=DECIMAL}, #{paymentRevokeAmount,jdbcType=DECIMAL}, #{remainingSplitAmount,jdbcType=DECIMAL}, + #{orderCode,jdbcType=VARCHAR}, #{pileType,jdbcType=VARCHAR}, #{dueRefundAmount,jdbcType=DECIMAL}, + #{settleAmount,jdbcType=DECIMAL}, #{refundFlag,jdbcType=VARCHAR}, #{splitFlag,jdbcType=VARCHAR}, + #{updateTime,jdbcType=TIMESTAMP}) + + + + insert into adapay_unsplit_record + + + merchant_code, + + + pay_time, + + + payment_id, + + + order_no, + + + pay_amount, + + + confirmed_split_amount, + + + refund_amount, + + + payment_revoke_amount, + + + remaining_split_amount, + + + order_code, + + + pile_type, + + + due_refund_amount, + + + settle_amount, + + + refund_flag, + + + split_flag, + + + update_time, + + + + + #{merchantCode,jdbcType=VARCHAR}, + + + #{payTime,jdbcType=TIMESTAMP}, + + + #{paymentId,jdbcType=VARCHAR}, + + + #{orderNo,jdbcType=VARCHAR}, + + + #{payAmount,jdbcType=DECIMAL}, + + + #{confirmedSplitAmount,jdbcType=DECIMAL}, + + + #{refundAmount,jdbcType=DECIMAL}, + + + #{paymentRevokeAmount,jdbcType=DECIMAL}, + + + #{remainingSplitAmount,jdbcType=DECIMAL}, + + + #{orderCode,jdbcType=VARCHAR}, + + + #{pileType,jdbcType=VARCHAR}, + + + #{dueRefundAmount,jdbcType=DECIMAL}, + + + #{settleAmount,jdbcType=DECIMAL}, + + + #{refundFlag,jdbcType=VARCHAR}, + + + #{splitFlag,jdbcType=VARCHAR}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + + + + update adapay_unsplit_record + + + merchant_code = #{merchantCode,jdbcType=VARCHAR}, + + + pay_time = #{payTime,jdbcType=TIMESTAMP}, + + + payment_id = #{paymentId,jdbcType=VARCHAR}, + + + order_no = #{orderNo,jdbcType=VARCHAR}, + + + pay_amount = #{payAmount,jdbcType=DECIMAL}, + + + confirmed_split_amount = #{confirmedSplitAmount,jdbcType=DECIMAL}, + + + refund_amount = #{refundAmount,jdbcType=DECIMAL}, + + + payment_revoke_amount = #{paymentRevokeAmount,jdbcType=DECIMAL}, + + + remaining_split_amount = #{remainingSplitAmount,jdbcType=DECIMAL}, + + + order_code = #{orderCode,jdbcType=VARCHAR}, + + + pile_type = #{pileType,jdbcType=VARCHAR}, + + + due_refund_amount = #{dueRefundAmount,jdbcType=DECIMAL}, + + + settle_amount = #{settleAmount,jdbcType=DECIMAL}, + + + refund_flag = #{refundFlag,jdbcType=VARCHAR}, + + + split_flag = #{splitFlag,jdbcType=VARCHAR}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=INTEGER} + + + + update adapay_unsplit_record + set merchant_code = #{merchantCode,jdbcType=VARCHAR}, + pay_time = #{payTime,jdbcType=TIMESTAMP}, + payment_id = #{paymentId,jdbcType=VARCHAR}, + order_no = #{orderNo,jdbcType=VARCHAR}, + pay_amount = #{payAmount,jdbcType=DECIMAL}, + confirmed_split_amount = #{confirmedSplitAmount,jdbcType=DECIMAL}, + refund_amount = #{refundAmount,jdbcType=DECIMAL}, + payment_revoke_amount = #{paymentRevokeAmount,jdbcType=DECIMAL}, + remaining_split_amount = #{remainingSplitAmount,jdbcType=DECIMAL}, + order_code = #{orderCode,jdbcType=VARCHAR}, + pile_type = #{pileType,jdbcType=VARCHAR}, + due_refund_amount = #{dueRefundAmount,jdbcType=DECIMAL}, + settle_amount = #{settleAmount,jdbcType=DECIMAL}, + refund_flag = #{refundFlag,jdbcType=VARCHAR}, + split_flag = #{splitFlag,jdbcType=VARCHAR}, + update_time = #{updateTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=INTEGER} + + + + update adapay_unsplit_record + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.merchantCode,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.payTime,jdbcType=TIMESTAMP} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.paymentId,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.orderNo,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.payAmount,jdbcType=DECIMAL} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.confirmedSplitAmount,jdbcType=DECIMAL} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.refundAmount,jdbcType=DECIMAL} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.paymentRevokeAmount,jdbcType=DECIMAL} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.remainingSplitAmount,jdbcType=DECIMAL} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.orderCode,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.pileType,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.dueRefundAmount,jdbcType=DECIMAL} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.settleAmount,jdbcType=DECIMAL} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.refundFlag,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.splitFlag,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.updateTime,jdbcType=TIMESTAMP} + + + + where id in + + #{item.id,jdbcType=INTEGER} + + + + + update adapay_unsplit_record + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.merchantCode,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.payTime,jdbcType=TIMESTAMP} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.paymentId,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.orderNo,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.payAmount,jdbcType=DECIMAL} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.confirmedSplitAmount,jdbcType=DECIMAL} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.refundAmount,jdbcType=DECIMAL} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.paymentRevokeAmount,jdbcType=DECIMAL} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.remainingSplitAmount,jdbcType=DECIMAL} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.orderCode,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.pileType,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.dueRefundAmount,jdbcType=DECIMAL} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.settleAmount,jdbcType=DECIMAL} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.refundFlag,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.splitFlag,jdbcType=VARCHAR} + + + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.updateTime,jdbcType=TIMESTAMP} + + + + + where id in + + #{item.id,jdbcType=INTEGER} + + + + + insert into adapay_unsplit_record + (merchant_code, pay_time, payment_id, order_no, pay_amount, confirmed_split_amount, + refund_amount, payment_revoke_amount, remaining_split_amount, order_code, pile_type, + due_refund_amount, settle_amount, refund_flag, split_flag, update_time) + values + + (#{item.merchantCode,jdbcType=VARCHAR}, #{item.payTime,jdbcType=TIMESTAMP}, #{item.paymentId,jdbcType=VARCHAR}, + #{item.orderNo,jdbcType=VARCHAR}, #{item.payAmount,jdbcType=DECIMAL}, #{item.confirmedSplitAmount,jdbcType=DECIMAL}, + #{item.refundAmount,jdbcType=DECIMAL}, #{item.paymentRevokeAmount,jdbcType=DECIMAL}, + #{item.remainingSplitAmount,jdbcType=DECIMAL}, #{item.orderCode,jdbcType=VARCHAR}, + #{item.pileType,jdbcType=VARCHAR}, #{item.dueRefundAmount,jdbcType=DECIMAL}, #{item.settleAmount,jdbcType=DECIMAL}, + #{item.refundFlag,jdbcType=VARCHAR}, #{item.splitFlag,jdbcType=VARCHAR}, #{item.updateTime,jdbcType=TIMESTAMP} + ) + + + + + insert into adapay_unsplit_record + + + id, + + merchant_code, + pay_time, + payment_id, + order_no, + pay_amount, + confirmed_split_amount, + refund_amount, + payment_revoke_amount, + remaining_split_amount, + order_code, + pile_type, + due_refund_amount, + settle_amount, + refund_flag, + split_flag, + update_time, + + values + + + #{id,jdbcType=INTEGER}, + + #{merchantCode,jdbcType=VARCHAR}, + #{payTime,jdbcType=TIMESTAMP}, + #{paymentId,jdbcType=VARCHAR}, + #{orderNo,jdbcType=VARCHAR}, + #{payAmount,jdbcType=DECIMAL}, + #{confirmedSplitAmount,jdbcType=DECIMAL}, + #{refundAmount,jdbcType=DECIMAL}, + #{paymentRevokeAmount,jdbcType=DECIMAL}, + #{remainingSplitAmount,jdbcType=DECIMAL}, + #{orderCode,jdbcType=VARCHAR}, + #{pileType,jdbcType=VARCHAR}, + #{dueRefundAmount,jdbcType=DECIMAL}, + #{settleAmount,jdbcType=DECIMAL}, + #{refundFlag,jdbcType=VARCHAR}, + #{splitFlag,jdbcType=VARCHAR}, + #{updateTime,jdbcType=TIMESTAMP}, + + on duplicate key update + + + id = #{id,jdbcType=INTEGER}, + + merchant_code = #{merchantCode,jdbcType=VARCHAR}, + pay_time = #{payTime,jdbcType=TIMESTAMP}, + payment_id = #{paymentId,jdbcType=VARCHAR}, + order_no = #{orderNo,jdbcType=VARCHAR}, + pay_amount = #{payAmount,jdbcType=DECIMAL}, + confirmed_split_amount = #{confirmedSplitAmount,jdbcType=DECIMAL}, + refund_amount = #{refundAmount,jdbcType=DECIMAL}, + payment_revoke_amount = #{paymentRevokeAmount,jdbcType=DECIMAL}, + remaining_split_amount = #{remainingSplitAmount,jdbcType=DECIMAL}, + order_code = #{orderCode,jdbcType=VARCHAR}, + pile_type = #{pileType,jdbcType=VARCHAR}, + due_refund_amount = #{dueRefundAmount,jdbcType=DECIMAL}, + settle_amount = #{settleAmount,jdbcType=DECIMAL}, + refund_flag = #{refundFlag,jdbcType=VARCHAR}, + split_flag = #{splitFlag,jdbcType=VARCHAR}, + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + + + insert into adapay_unsplit_record + + + id, + + + merchant_code, + + + pay_time, + + + payment_id, + + + order_no, + + + pay_amount, + + + confirmed_split_amount, + + + refund_amount, + + + payment_revoke_amount, + + + remaining_split_amount, + + + order_code, + + + pile_type, + + + due_refund_amount, + + + settle_amount, + + + refund_flag, + + + split_flag, + + + update_time, + + + values + + + #{id,jdbcType=INTEGER}, + + + #{merchantCode,jdbcType=VARCHAR}, + + + #{payTime,jdbcType=TIMESTAMP}, + + + #{paymentId,jdbcType=VARCHAR}, + + + #{orderNo,jdbcType=VARCHAR}, + + + #{payAmount,jdbcType=DECIMAL}, + + + #{confirmedSplitAmount,jdbcType=DECIMAL}, + + + #{refundAmount,jdbcType=DECIMAL}, + + + #{paymentRevokeAmount,jdbcType=DECIMAL}, + + + #{remainingSplitAmount,jdbcType=DECIMAL}, + + + #{orderCode,jdbcType=VARCHAR}, + + + #{pileType,jdbcType=VARCHAR}, + + + #{dueRefundAmount,jdbcType=DECIMAL}, + + + #{settleAmount,jdbcType=DECIMAL}, + + + #{refundFlag,jdbcType=VARCHAR}, + + + #{splitFlag,jdbcType=VARCHAR}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + on duplicate key update + + + id = #{id,jdbcType=INTEGER}, + + + merchant_code = #{merchantCode,jdbcType=VARCHAR}, + + + pay_time = #{payTime,jdbcType=TIMESTAMP}, + + + payment_id = #{paymentId,jdbcType=VARCHAR}, + + + order_no = #{orderNo,jdbcType=VARCHAR}, + + + pay_amount = #{payAmount,jdbcType=DECIMAL}, + + + confirmed_split_amount = #{confirmedSplitAmount,jdbcType=DECIMAL}, + + + refund_amount = #{refundAmount,jdbcType=DECIMAL}, + + + payment_revoke_amount = #{paymentRevokeAmount,jdbcType=DECIMAL}, + + + remaining_split_amount = #{remainingSplitAmount,jdbcType=DECIMAL}, + + + order_code = #{orderCode,jdbcType=VARCHAR}, + + + pile_type = #{pileType,jdbcType=VARCHAR}, + + + due_refund_amount = #{dueRefundAmount,jdbcType=DECIMAL}, + + + settle_amount = #{settleAmount,jdbcType=DECIMAL}, + + + refund_flag = #{refundFlag,jdbcType=VARCHAR}, + + + split_flag = #{splitFlag,jdbcType=VARCHAR}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + + \ No newline at end of file From c3db9b920176cda3c506ae59c4fb1a3760bbdbbc Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 14 Nov 2025 15:07:50 +0800 Subject: [PATCH 18/38] =?UTF-8?q?update=20=E6=B7=BB=E5=8A=A0=E4=B8=B4?= =?UTF-8?q?=E6=97=B6=E6=96=B9=E6=B3=95=EF=BC=8C=E6=9B=B4=E6=96=B0adapayUns?= =?UTF-8?q?plitRecord=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/AdapayUnsplitRecordMapper.java | 5 +- .../pile/mapper/OrderBasicInfoMapper.java | 3 + .../service/AdapayUnsplitRecordService.java | 1 + .../pile/service/OrderBasicInfoService.java | 4 + .../impl/OrderBasicInfoServiceImpl.java | 7 +- .../pile/AdapayUnsplitRecordServiceImpl.java | 14 +- .../mapper/pile/AdapayUnsplitRecordMapper.xml | 7 + .../mapper/pile/OrderBasicInfoMapper.xml | 9 + .../com/jsowell/quartz/task/JsowellTask.java | 185 ++++++++++-------- 9 files changed, 144 insertions(+), 91 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java index 7e014ea21..50e148b84 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java @@ -1,9 +1,10 @@ package com.jsowell.pile.mapper; import com.jsowell.pile.domain.AdapayUnsplitRecord; -import java.util.List; import org.apache.ibatis.annotations.Param; +import java.util.List; + public interface AdapayUnsplitRecordMapper { int deleteByPrimaryKey(Integer id); @@ -26,4 +27,6 @@ public interface AdapayUnsplitRecordMapper { int updateBatchSelective(@Param("list") List list); int batchInsert(@Param("list") List list); + + List queryUnsplitOrders(@Param("startTime") String startTime, @Param("endTime") String endTime); } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index 81a334f07..6bafa7a82 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -19,6 +19,7 @@ import org.springframework.stereotype.Repository; import java.time.LocalDateTime; import java.util.List; +import java.util.Set; @Repository public interface OrderBasicInfoMapper { @@ -440,4 +441,6 @@ public interface OrderBasicInfoMapper { * @return List */ List selectOrderCountAndInsuranceByMonth(@Param("dto") QueryOrderDTO dto); + + List selectOrderTemp(@Param("orderCodes") Set orderCodes); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java index 8c9a42fcd..af3738bfb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java @@ -26,4 +26,5 @@ public interface AdapayUnsplitRecordService{ int batchInsert(List list); + List queryUnsplitOrders(String startTime, String endTime); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index aa85d1122..566a1d13a 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -32,6 +32,7 @@ import java.text.ParseException; import java.time.LocalDateTime; import java.util.List; import java.util.Map; +import java.util.Set; public interface OrderBasicInfoService{ @@ -641,4 +642,7 @@ public interface OrderBasicInfoService{ OrderCountByTimeVO queryOrderInsuranceAmountByTime(QueryOrderDTO dto); + + // 临时接口, 查询订单信息 + List selectOrderTemp(Set orderCodes); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 54c55dab6..2baa39856 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -77,9 +77,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; -import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.LocalTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.*; @@ -6039,5 +6037,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return vo; } + + @Override + public List selectOrderTemp(Set orderCodes) { + return orderBasicInfoMapper.selectOrderTemp(orderCodes); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java index 08cabddd4..363164f25 100644 --- a/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java @@ -1,13 +1,12 @@ package com.jsowell.web.controller.pile; -import org.springframework.stereotype.Service; - -import org.springframework.beans.factory.annotation.Autowired; - import com.jsowell.pile.domain.AdapayUnsplitRecord; -import java.util.List; import com.jsowell.pile.mapper.AdapayUnsplitRecordMapper; import com.jsowell.pile.service.AdapayUnsplitRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; @Service public class AdapayUnsplitRecordServiceImpl implements AdapayUnsplitRecordService{ @@ -69,4 +68,9 @@ public class AdapayUnsplitRecordServiceImpl implements AdapayUnsplitRecordServic return adapayUnsplitRecordMapper.batchInsert(list); } + @Override + public List queryUnsplitOrders(String startTime, String endTime) { + return adapayUnsplitRecordMapper.queryUnsplitOrders(startTime, endTime); + } + } diff --git a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml index acd84bb0f..767f9fae2 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml @@ -698,4 +698,11 @@ + + \ No newline at end of file diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index ea2b20d2a..1070f9d8d 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3495,4 +3495,13 @@ ORDER BY month ASC + diff --git a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java index e7fba61ae..41af9a519 100644 --- a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java +++ b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java @@ -1,24 +1,18 @@ package com.jsowell.quartz.task; import com.google.common.collect.Lists; -import com.huifu.adapay.core.exception.BaseAdaPayException; -import com.jsowell.adapay.common.DivMember; -import com.jsowell.adapay.dto.PaymentConfirmParam; import com.jsowell.adapay.dto.WithdrawDTO; -import com.jsowell.adapay.response.PaymentConfirmResponse; import com.jsowell.adapay.service.AdapayService; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.redis.RedisCache; -import com.jsowell.common.enums.adapay.AdapayStatusEnum; import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; -import com.jsowell.common.util.AdapayUtil; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.PageUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.spring.SpringUtils; +import com.jsowell.pile.domain.AdapayUnsplitRecord; import com.jsowell.pile.domain.OrderBasicInfo; -import com.jsowell.pile.domain.OrderUnsplitRecord; import com.jsowell.pile.domain.PileMerchantInfo; import com.jsowell.pile.domain.PileStationInfo; import com.jsowell.pile.domain.ykcCommond.PublishPileBillingTemplateCommand; @@ -38,9 +32,7 @@ import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; @Component("jsowellTask") @@ -81,8 +73,11 @@ public class JsowellTask { @Autowired private ThirdPartyStationRelationService thirdPartyStationRelationService; + // @Autowired + // private OrderUnsplitRecordService orderUnsplitRecordService; + @Autowired - private OrderUnsplitRecordService orderUnsplitRecordService; + private AdapayUnsplitRecordService adapayUnsplitRecordService; /** * 设置挡板, PRE环境不执行 @@ -422,84 +417,108 @@ public class JsowellTask { // 查询未分帐订单 PageUtils.startPage(1, 1000); - List list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime); - } - - private void processUnSettledOrderOld() { - String startTime = "2023-01-01 00:00:00"; - String endTime = "2024-12-31 23:59:59"; - - // 使用redis控制请求api - Boolean setnx = redisCache.setnx(CacheConstants.PROCESS_UNSPLIT_ORDERS, Constants.ONE, 65); - if (!setnx) { + List list = adapayUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + if (CollectionUtils.isEmpty(list)) { return; } + // 转为map, key:orderCode, value:AdapayUnsplitRecord + Map map = list.stream().collect(Collectors.toMap(AdapayUnsplitRecord::getOrderCode, v -> v)); - // 查询未分帐订单 - PageUtils.startPage(1, 10); - List list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + // 取keySet + Set orderCodes = map.keySet(); - log.info("处理未分帐订单start, 当前时间:{}, 查询出[{}]条未分账订单, 下面进行处理", DateUtils.getDateTime(), list.size()); - int count = 0; - for (OrderUnsplitRecord orderUnsplitRecord : list) { - String paymentId = orderUnsplitRecord.getPaymentId(); - String orderCode = orderUnsplitRecord.getOrderCode(); - BigDecimal confirmAmt = orderUnsplitRecord.getSettleAmount(); + // 查询订单的退款金额与结算金额 + List orderList = orderBasicInfoService.selectOrderTemp(orderCodes); + // 转为map, key:orderCode, value:OrderBasicInfo + Map orderMap = orderList.stream().collect(Collectors.toMap(OrderBasicInfo::getOrderCode, v -> v)); - DivMember divMember = new DivMember(); - divMember.setMemberId(Constants.ZERO); // 若是商户本身时,传入0 - divMember.setAmount(AdapayUtil.formatAmount(confirmAmt)); - divMember.setFeeFlag(Constants.Y); - - PaymentConfirmParam param = PaymentConfirmParam.builder() - .paymentId(paymentId) - .divMemberList(Lists.newArrayList(divMember)) - .confirmAmt(confirmAmt) - .orderCode(orderCode) - .wechatAppId(Constants.DEFAULT_APP_ID) // 默认使用万车充的appId - .build(); - // 延时分账,使用确认交易API - PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(param); - - // 如果确认交易成功,则更新订单状态为已分账 - if (paymentConfirmResponse.isSuccess()) { - count++; - orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue()); - orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord); - log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId); - } else { - // error_type:api_error, error_code:confirm_amt_over_limit, error_msg当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额 - if (paymentConfirmResponse.getError_code().equals("confirm_amt_over_limit")) { - // 查询paymentId的总分账金额 - BigDecimal totalSplitAmount; - try { - totalSplitAmount = adapayService.getTotalSplitAmountByPaymentId(paymentId); - } catch (BaseAdaPayException e) { - throw new RuntimeException(e); - } - if (totalSplitAmount.compareTo(confirmAmt) == 0) { - // 如果总分账金额等于当前分账金额,则更新订单状态为已分账 - orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue()); - orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord); - log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId); - } else { - log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); - } - } - - // error_type:invalid_request_error, error_code:payment_over_time_doing, error_msg:数据正在处理中,请稍后再试 - if (paymentConfirmResponse.getError_code().equals("payment_over_time_doing")) { - log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); - break; - } - // error_type:invalid_request_error, error_code:refund_repeate_request, error_msg:请求过于频繁 - if (paymentConfirmResponse.getError_code().equals("refund_repeate_request")) { - log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); - break; - } - } + List updateList = new ArrayList<>(); + //更新map + for (String orderCode : orderCodes) { + OrderBasicInfo orderBasicInfo = orderMap.get(orderCode); + AdapayUnsplitRecord adapayUnsplitRecord = map.get(orderCode); + adapayUnsplitRecord.setDueRefundAmount(orderBasicInfo.getRefundAmount()); + adapayUnsplitRecord.setSettleAmount(orderBasicInfo.getSettleAmount()); + updateList.add(adapayUnsplitRecord); } - log.info("处理未分帐订单end, 当前时间:[{}], 成功分账[{}]条订单", DateUtils.getDateTime(), count); + adapayUnsplitRecordService.updateBatchSelective(updateList); } + // private void processUnSettledOrderOld() { + // String startTime = "2023-01-01 00:00:00"; + // String endTime = "2024-12-31 23:59:59"; + // + // // 使用redis控制请求api + // Boolean setnx = redisCache.setnx(CacheConstants.PROCESS_UNSPLIT_ORDERS, Constants.ONE, 65); + // if (!setnx) { + // return; + // } + // + // // 查询未分帐订单 + // PageUtils.startPage(1, 10); + // List list = orderUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + // + // log.info("处理未分帐订单start, 当前时间:{}, 查询出[{}]条未分账订单, 下面进行处理", DateUtils.getDateTime(), list.size()); + // int count = 0; + // for (OrderUnsplitRecord orderUnsplitRecord : list) { + // String paymentId = orderUnsplitRecord.getPaymentId(); + // String orderCode = orderUnsplitRecord.getOrderCode(); + // BigDecimal confirmAmt = orderUnsplitRecord.getSettleAmount(); + // + // DivMember divMember = new DivMember(); + // divMember.setMemberId(Constants.ZERO); // 若是商户本身时,传入0 + // divMember.setAmount(AdapayUtil.formatAmount(confirmAmt)); + // divMember.setFeeFlag(Constants.Y); + // + // PaymentConfirmParam param = PaymentConfirmParam.builder() + // .paymentId(paymentId) + // .divMemberList(Lists.newArrayList(divMember)) + // .confirmAmt(confirmAmt) + // .orderCode(orderCode) + // .wechatAppId(Constants.DEFAULT_APP_ID) // 默认使用万车充的appId + // .build(); + // // 延时分账,使用确认交易API + // PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(param); + // + // // 如果确认交易成功,则更新订单状态为已分账 + // if (paymentConfirmResponse.isSuccess()) { + // count++; + // orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue()); + // orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord); + // log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId); + // } else { + // // error_type:api_error, error_code:confirm_amt_over_limit, error_msg当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额 + // if (paymentConfirmResponse.getError_code().equals("confirm_amt_over_limit")) { + // // 查询paymentId的总分账金额 + // BigDecimal totalSplitAmount; + // try { + // totalSplitAmount = adapayService.getTotalSplitAmountByPaymentId(paymentId); + // } catch (BaseAdaPayException e) { + // throw new RuntimeException(e); + // } + // if (totalSplitAmount.compareTo(confirmAmt) == 0) { + // // 如果总分账金额等于当前分账金额,则更新订单状态为已分账 + // orderUnsplitRecord.setStatus(AdapayStatusEnum.SUCCEEDED.getValue()); + // orderUnsplitRecordService.updateOrderUnsplitRecord(orderUnsplitRecord); + // log.info("processUnsplitOrders, 分账成功, paymentId:{}", paymentId); + // } else { + // log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); + // } + // } + // + // // error_type:invalid_request_error, error_code:payment_over_time_doing, error_msg:数据正在处理中,请稍后再试 + // if (paymentConfirmResponse.getError_code().equals("payment_over_time_doing")) { + // log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); + // break; + // } + // // error_type:invalid_request_error, error_code:refund_repeate_request, error_msg:请求过于频繁 + // if (paymentConfirmResponse.getError_code().equals("refund_repeate_request")) { + // log.info("processUnsplitOrders, 分账失败, paymentId:{}, 错误信息:{}", paymentId, paymentConfirmResponse.getError_msg()); + // break; + // } + // } + // } + // log.info("处理未分帐订单end, 当前时间:[{}], 成功分账[{}]条订单", DateUtils.getDateTime(), count); + // } + } From 333521bbcb856a1c14c237bd2ad752a0d8ce6717 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 14 Nov 2025 15:44:24 +0800 Subject: [PATCH 19/38] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0adapayUnsplitR?= =?UTF-8?q?ecord=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/pile/OrderBasicInfoMapper.xml | 2 +- .../src/main/java/com/jsowell/quartz/task/JsowellTask.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index 1070f9d8d..f28b85ba8 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3497,7 +3497,7 @@ \ No newline at end of file diff --git a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java index 99803d2d4..0e8a5d1cd 100644 --- a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java +++ b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java @@ -410,17 +410,19 @@ public class JsowellTask { public void processUnSettledOrder() { // processUnSettledOrderOld(); // 旧方法 for (int i = 0; i < 35; i++) { - processUnSettledOrderNew(); // 新方法 + int batchNum = i + 1; + processUnSettledOrderNew(batchNum); // 新方法 } } - private void processUnSettledOrderNew() { + private void processUnSettledOrderNew(int batchNum) { String startTime = "2025-01-01 00:00:00"; String endTime = "2025-12-31 23:59:59"; // 查询未分帐订单 PageUtils.startPage(1, 1000); List list = adapayUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + log.info("第{}批次,共查询到{}条数据", batchNum, list.size()); if (CollectionUtils.isEmpty(list)) { return; } @@ -451,6 +453,7 @@ public class JsowellTask { updateList.add(adapayUnsplitRecord); } adapayUnsplitRecordService.updateBatchSelective(updateList); + log.info("第{}批次,共更新{}条数据", batchNum, updateList.size()); } // private void processUnSettledOrderOld() { From 277fad89184ef124710372871497fa624b776530 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 14 Nov 2025 16:20:05 +0800 Subject: [PATCH 23/38] update ISE --- .../src/main/java/com/jsowell/quartz/task/JsowellTask.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java index 0e8a5d1cd..711c73643 100644 --- a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java +++ b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java @@ -427,7 +427,7 @@ public class JsowellTask { return; } // 转为map, key:orderCode, value:AdapayUnsplitRecord - Map map = list.stream().collect(Collectors.toMap(AdapayUnsplitRecord::getOrderCode, v -> v)); + Map map = list.stream().collect(Collectors.toMap(AdapayUnsplitRecord::getOrderCode, v -> v, (k1, k2) -> k1)); // 取keySet Set orderCodes = map.keySet(); @@ -435,7 +435,7 @@ public class JsowellTask { // 查询订单的退款金额与结算金额 List orderList = orderBasicInfoService.selectOrderTemp(orderCodes); // 转为map, key:orderCode, value:OrderBasicInfo - Map orderMap = orderList.stream().collect(Collectors.toMap(OrderBasicInfo::getOrderCode, v -> v)); + Map orderMap = orderList.stream().collect(Collectors.toMap(OrderBasicInfo::getOrderCode, v -> v, (k1, k2) -> k1)); List updateList = new ArrayList<>(); //更新map From 04bce01583779be0cadb008c450eee59d947062c Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Tue, 18 Nov 2025 11:21:25 +0800 Subject: [PATCH 24/38] update --- .../java/com/jsowell/service/TempService.java | 2 +- .../impl/MemberBasicInfoServiceImpl.java | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java index b3107fc10..0975d0a22 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -1514,7 +1514,7 @@ public class TempService { throw new RuntimeException("订单不是异常订单:" + orderCode); } - if (!Objects.equals(orderBasicInfo.getPayMode(), PayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { + if (!Objects.equals(orderBasicInfo.getPayMode(), "3")) { throw new RuntimeException("订单不是白名单支付方式:" + orderCode); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java index 17391761e..4a364c152 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberBasicInfoServiceImpl.java @@ -642,11 +642,26 @@ public class MemberBasicInfoServiceImpl implements MemberBasicInfoService { List merchantIdList = merchantInfoVOList.stream() .map(MerchantInfoVO::getMerchantId).collect(Collectors.toList()); + List queryMerchantIds; + + // 权限校验一下 + if (StringUtils.isNotBlank(dto.getMerchantId())) { + if (!merchantIdList.contains(dto.getMerchantId())) { + throw new BusinessException("403", "没有权限查询该运营商数据"); + } + // 只查当前筛选的运营商 + queryMerchantIds = Collections.singletonList(dto.getMerchantId()); + } else { + // 查全部权限内的运营商 + queryMerchantIds = merchantIdList; + } + // 分页 int pageNum = dto.getPageNum() == null ? 1 : dto.getPageNum(); int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize(); PageHelper.startPage(pageNum, pageSize); - List resultList = memberBasicInfoMapper.queryMerchantVipList(merchantIdList, dto); + List resultList = memberBasicInfoMapper.queryMerchantVipList(queryMerchantIds, dto); + if (CollectionUtils.isNotEmpty(resultList)) { for (MerchantVipVO merchantVipVO : resultList) { BigDecimal principalBalance = merchantVipVO.getPrincipalBalance() == null ? BigDecimal.ZERO : merchantVipVO.getPrincipalBalance(); From e778d349412eedc6b62b39f1da9cf42943077c11 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 18 Nov 2025 13:33:26 +0800 Subject: [PATCH 25/38] =?UTF-8?q?update=20=E5=8F=AF=E6=8F=90=E7=8E=B0?= =?UTF-8?q?=E9=87=91=E9=A2=9D=EF=BC=8C=E5=87=8F=E5=8E=BB=E5=BD=93=E5=A4=A9?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/test/java/PaymentTestController.java | 36 +- jsowell-admin/src/test/resources/payment_ids | 1883 ++++++++++++++++- .../com/jsowell/common/util/DateUtils.java | 72 +- .../jsowell/adapay/service/AdapayService.java | 11 +- .../adapay/vo/AdapayAccountBalanceVO.java | 2 +- .../mapper/AdapayUnsplitRecordMapper.java | 3 + .../service/AdapayUnsplitRecordService.java | 4 + .../service/ClearingWithdrawInfoService.java | 3 + .../impl/ClearingWithdrawInfoServiceImpl.java | 35 +- .../pile/vo/AdapayUnsplitRecordVO.java | 30 + .../pile/AdapayUnsplitRecordServiceImpl.java | 6 + .../mapper/pile/AdapayUnsplitRecordMapper.xml | 16 + .../com/jsowell/quartz/task/JsowellTask.java | 12 +- 13 files changed, 2077 insertions(+), 36 deletions(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java diff --git a/jsowell-admin/src/test/java/PaymentTestController.java b/jsowell-admin/src/test/java/PaymentTestController.java index db1febebf..3a68245d3 100644 --- a/jsowell-admin/src/test/java/PaymentTestController.java +++ b/jsowell-admin/src/test/java/PaymentTestController.java @@ -1,6 +1,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.github.pagehelper.PageHelper; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.huifu.adapay.core.exception.BaseAdaPayException; @@ -28,8 +29,10 @@ import com.jsowell.pile.domain.OrderDetail; import com.jsowell.pile.domain.OrderUnsplitRecord; import com.jsowell.pile.dto.AfterSettleOrderDTO; import com.jsowell.pile.dto.DebugOrderDTO; +import com.jsowell.pile.service.AdapayUnsplitRecordService; import com.jsowell.pile.service.OrderBasicInfoService; import com.jsowell.pile.service.OrderUnsplitRecordService; +import com.jsowell.pile.vo.AdapayUnsplitRecordVO; import org.apache.commons.collections4.CollectionUtils; import org.junit.Test; import org.junit.runner.RunWith; @@ -75,6 +78,9 @@ public class PaymentTestController { @Autowired private OrderBasicInfoService orderBasicInfoService; + @Autowired + private AdapayUnsplitRecordService adapayUnsplitRecordService; + /** * 从payment_ids文件中获取支付id, 并批量查询分账信息 * 如需撤销分账, 请使用 {@link PaymentTestController#testCreateConfirmReverse()} 可以本地运行 @@ -412,10 +418,10 @@ public class PaymentTestController { */ @Test public void createPaymentReverseRequestTest() { - String paymentId = "002212025100513581210820790129447211008"; - BigDecimal refundAmount = new BigDecimal("0.5"); - String memberId = "84488845"; - String orderCode = "C82180436213"; + String paymentId = "002212025010720373310722683516795273216"; + BigDecimal refundAmount = new BigDecimal("1.08"); + String memberId = "48781184"; + String orderCode = "C67335843091"; // 延迟分账未确认调撤销调撤销接口退款 PaymentReverseOperation operation = new PaymentReverseOperation(); @@ -787,4 +793,26 @@ public class PaymentTestController { orderBasicInfoService.splittingMethodTemp(afterSettleOrderDTO); } + + @Test + public void processUnSettledOrder() { + // 现查询需要分账或者退款的数据 + int pageNum = 1; + int pageSize = 3; + PageHelper.startPage(pageNum, pageSize); + List adapayUnsplitRecordVOS = adapayUnsplitRecordService.queryList(); + for (AdapayUnsplitRecordVO adapayUnsplitRecordVO : adapayUnsplitRecordVOS) { + System.out.println(adapayUnsplitRecordVO); + // 获取待分账金额 + String waitSplitAmount = adapayUnsplitRecordVO.getWaitSplitAmount(); + // 如果waitSplitAmount > 0, 调用分账接口 + if (waitSplitAmount != null && !"".equals(waitSplitAmount)) { + // 调用分账接口 + } + + // 获取待退款金额 + String refundPayAmount = adapayUnsplitRecordVO.getRefundPayAmount(); + } + PageHelper.clearPage(); + } } diff --git a/jsowell-admin/src/test/resources/payment_ids b/jsowell-admin/src/test/resources/payment_ids index 2262d1e96..2cc6200cb 100644 --- a/jsowell-admin/src/test/resources/payment_ids +++ b/jsowell-admin/src/test/resources/payment_ids @@ -1,14 +1,1869 @@ -002212025060310590410775808955660226560 -002212025060209335010775425114719989760 -002212025060119145310775208954038964224 -002212025052308545110771791425828184064 -002212025060408400910776136380814315520 -002212025060113395910775124672697036800 -002212025053010191210774349368864821248 -002212025060809394310777600925872390144 -002212025053022491710774538136450727936 -002212025061217110110779164047563894784 -002212025060123174410775270071608823808 -002212025060312255210775830799009579008 -002212025052016133710770814683822862336 -002212025051612530210769314653202984960 \ No newline at end of file +002212025110300325910831096740062662656 +002212025110303023610831134392589676544 +002212025110306072710831180907773403136 +002212025110306350710831187872687800320 +002212025110306394210831189025974587392 +002212025110306483710831191271235883008 +002212025110307130710831197437093421056 +002212025110307265310831200900263137280 +002212025110307325410831202412632690688 +002212025110307284210831201358553776128 +002212025110307373410831203589256593408 +002212025110308102810831211866648428544 +002212025110308240910831215312785055744 +002212025110308194310831214194248052736 +002212025110308242910831215396155244544 +002212025110307422310831204798826786816 +002212025110307515310831207190234378240 +002212025110308390510831219068167725056 +002212025110308445610831220540662022144 +002212025110308452610831220668680605696 +002212025110307565210831208446633947136 +002212025110309404410831234582826909696 +002212025110309171010831228652869595136 +002212025110309523010831237545314185216 +002212025110309303410831232024444071936 +002212025110309285310831231602182549504 +002212025110309203110831229494934843392 +002212025110310014510831239873027080192 +002212025110310062710831241056751915008 +002212025110310404110831249673261613056 +002212025110310142810831243071951417344 +002212025110311035610831255523464261632 +002212025110310264610831246170946465792 +002212025110310450010831250757891895296 +002212025110310524210831252695404490752 +002212025110311000110831254536875876352 +002212025110311302210831262176444108800 +002212025110311320810831262620306333696 +002212025110311313510831262482003333120 +002212025110311191810831259388284731392 +002212025110311341810831263163892330496 +002212025110311335510831263067926626304 +002212025110311424310831265281952952320 +002212025110311502210831267205557235712 +002212025110311065110831256254963470336 +002212025110311514310831267546751262720 +002212025110311365310831263813669711872 +002212025110311285510831261811464138752 +002212025110311535410831268095160721408 +002212025110311410410831264867631198208 +002212025110312101810831272224549441536 +002212025110312154810831273608619462656 +002212025110312243810831275829608271872 +002212025110312230410831275435289165824 +002212025110311482610831266719231860736 +002212025110312163510831273806380888064 +002212025110311430310831265368204582912 +002212025110312394610831279638870978560 +002212025110313032610831285596896579585 +002212025110313151310831288559291527168 +002212025110313145110831288466584875008 +002212025110312455810831281199827353600 +002212025110313022810831285354293821440 +002212025110312371910831279022182469632 +002212025110313230210831290526919241728 +002212025110313050110831285993413521408 +002212025110313182110831289347317379072 +002212025110313471910831296637076463616 +002212025110313211210831290067143839744 +002212025110313295110831292243530448896 +002212025110312515810831282708145188864 +002212025110313522110831297905694056448 +002212025110314032910831300708344758272 +002212025110313541610831298388634587136 +002212025110313491410831297122365837312 +002212025110313525610831298051437694976 +002212025110314140610831303379172675584 +002212025110314374410831309326368567296 +002212025110314194710831304808230793216 +002212025110314331810831308213221289984 +002212025110314550210831313678692982784 +002212025110314585510831314659522621440 +002212025110315183710831319615797415936 +002212025110315383210831324628213018624 +002212025110315081010831316984857337856 +002212025110314515110831312879317389312 +002212025110315331410831323293623209984 +002212025110315500710831327541685620736 +002212025110315424810831325701094993920 +002212025110316101210831332596031619072 +002212025110315581810831329601948704768 +002212025110315364110831324162393571328 +002212025110316194810831335013104177152 +002212025110316275310831337046414675968 +002212025110316101510831332610065780736 +002212025110316142510831333656754323456 +002212025110316203110831335191924158464 +002212025110315520410831328032347848704 +002212025110316360810831339121223643136 +002212025110316474010831342024072044544 +002212025110316282710831337189503340544 +002212025110316421310831340654795395072 +002212025110316352210831338930345062400 +002212025110316345110831338798874595328 +002212025110316472110831341943918923776 +002212025110317193010831350038346797056 +002212025110317043310831346273799565312 +002212025110317045810831346380519485440 +002212025110317072010831346973761835008 +002212025110317135710831348638032261120 +002212025110317183910831349824483446784 +002212025110317160310831349168708214784 +002212025110317272010831352009002782720 +002212025110317475110831357169649250304 +002212025110317315210831353148742000640 +002212025110318230510831366036261126144 +002212025110317281310831352229145063424 +002212025110318261210831366822642810880 +002212025110318010710831360509724565504 +002212025110317572210831359568040386560 +002212025110318131310831363553216376832 +002212025110318475710831372295265796096 +002212025110318360810831369322259247104 +002212025110318344910831368991089561600 +002212025110318400510831370317441753088 +002212025110318502610831372918937817088 +002212025110318490510831372580109389825 +002212025110318583010831374952147668992 +002212025110319002110831375417677680640 +002212025110318590510831375096268161024 +002212025110319051510831376650266169344 +002212025110319313910831383292701515776 +002212025110319054110831376757657137152 +002212025110319232210831381208002437120 +002212025110319424310831386079107715072 +002212025110319273210831382259036303360 +002212025110319591410831390233452580864 +002212025110319514410831388347831894016 +002212025110320322110831398568247635968 +002212025110321012110831405868073070592 +002212025110320183710831395112791240704 +002212025110321074210831407466937532416 +002212025110321442410831416700441919488 +002212025110321215110831411027138260992 +002212025110401242310831472062742331392 +002212025110406414710831551939407474688 +002212025110406512710831554369813671936 +002212025110406534210831554937877667840 +002212025110406582510831556123343163392 +002212025110406503510831554151898632192 +002212025110406550610831555290954145792 +002212025110407295810831564061650673664 +002212025110407394610831566528379555840 +002212025110407511110831569402270539776 +002212025110408014610831572067167719424 +002212025110408190010831576403453087744 +002212025110407573510831571011746615296 +002212025110407511510831569420863860736 +002212025110408124910831574848955985920 +002212025110408065110831573347449630720 +002212025110408055210831573099813736448 +002212025110408224610831577351067992064 +002212025110407355810831565573030383616 +002212025110408143910831575306864930816 +002212025110409024610831587416122535936 +002212025110408464410831583380770070528 +002212025110408192210831576493773221888 +002212025110408365310831580902418767872 +002212025110409121810831589818758307840 +002212025110409123010831589868192333824 +002212025110409403010831596915105411072 +002212025110410111410831604646990278656 +002212025110410365210831611097175506944 +002212025110410553410831615802731601920 +002212025110410555710831615900844789760 +002212025110410451010831613186865860608 +002212025110410524910831615114513424384 +002212025110410231410831607668025815040 +002212025110411052910831618300821323776 +002212025110411202610831622063657250816 +002212025110411271210831623764548206592 +002212025110411285410831624193302568960 +002212025110411390110831626740599853056 +002212025110411191010831621742281314304 +002212025110411281210831624018014208000 +002212025110411261410831623520720715776 +002212025110411371110831626275837399040 +002212025110411455510831628477276581888 +002212025110411305410831624695859838976 +002212025110411530910831630295163400192 +002212025110411235810831622952623206400 +002212025110412074810831633983630168064 +002212025110411385310831626704520441856 +002212025110411483410831629142975512576 +002212025110412074610831633973370904576 +002212025110412452810831643461582798848 +002212025110412315110831640033670443008 +002212025110412165410831636274118631424 +002212025110412283210831639198643208192 +002212025110411421610831627557973237760 +002212025110412420110831642594951532544 +002212025110412141910831635623682744320 +002212025110413054710831648575517319168 +002212025110412513710831645010174386176 +002212025110413072310831648978749296640 +002212025110413341210831655727480901632 +002212025110413315110831655133672308736 +002212025110413414310831657618491248640 +002212025110413150310831650907407740928 +002212025110413341310831655729712287744 +002212025110414361410831671335434039296 +002212025110414354610831671221281845248 +002212025110414572910831676684056596480 +002212025110414524510831675495315361792 +002212025110414393110831672165595807744 +002212025110415163610831681496630370304 +002212025110415285410831684591682789376 +002212025110414382110831671869578620928 +002212025110415114110831680259864371200 +002212025110415345510831686105742655488 +002212025110415062610831678938742489088 +002212025110415261510831683925191094272 +002212025110415323410831685511988604928 +002212025110415455010831688850969157632 +002212025110415580210831691924764856320 +002212025110415391210831687184047906816 +002212025110415344510831686063908687872 +002212025110415251710831683682387042304 +002212025110415483110831689527598460928 +002212025110415581110831691960647106560 +002212025110416182710831697059284979712 +002212025110416061010831693969710333952 +002212025110416094510831694870143496192 +002212025110416275110831699424574681088 +002212025110416320510831700492444450816 +002212025110416535710831705993425149952 +002212025110417042310831708621185957888 +002212025110417155210831711508255404032 +002212025110417345110831716285504745472 +002212025110416590610831707291331547136 +002212025110417134710831710987947806720 +002212025110417502010831720185406390272 +002212025110417234310831713486637326336 +002212025110417525310831720825964699648 +002212025110416561110831706558485987328 +002212025110417240410831713572658315264 +002212025110417171410831711854256136192 +002212025110417532010831720940787965952 +002212025110417422610831718198006718464 +002212025110417520810831720635513892864 +002212025110417561510831721674904387584 +002212025110418003610831722766937563136 +002212025110417580410831722130531659776 +002212025110418060910831724166052556800 +002212025110418402810831732802204139520 +002212025110418331110831730965879132160 +002212025110418044810831723826452328448 +002212025110417575910831722110839377920 +002212025110418222010831728236880408576 +002212025110419020610831738243843821568 +002212025110418581210831737261797867520 +002212025110418044610831723815169630208 +002212025110418491110831734995518984192 +002212025110418581710831737286317813760 +002212025110418590810831737497199017984 +002212025110419142410831741342222319616 +002212025110419214810831743203658653696 +002212025110419000710831737747439546368 +002212025110419162010831741824940584960 +002212025110419222410831743353185611776 +002212025110419103610831740382934691840 +002212025110419193810831742659242184704 +002212025110419372910831747150947491840 +002212025110419331410831746081441947648 +002212025110419381210831747329071202304 +002212025110419300010831745266786451456 +002212025110419251010831744048387284992 +002212025110420062510831754430644432896 +002212025110419080310831739742925815808 +002212025110419581210831752362215010304 +002212025110419435210831748754874523648 +002212025110419580910831752349841838080 +002212025110419261010831744299722543104 +002212025110420165210831757059927773184 +002212025110420113110831755714525102080 +002212025110420252510831759211073048576 +002212025110421074810831769877175570432 +002212025110420465210831764609968603136 +002212025110423032210831798959623868416 +002212025110504570410831887971646644224 +002212025110506175110831908304814579712 +002212025110506535010831917359008268288 +002212025110506573010831918280048087040 +002212025110507131410831922242482577408 +002212025110506552110831917741201649664 +002212025110507453610831930385946058752 +002212025110507564710831933201053888512 +002212025110507264210831925631513731072 +002212025110507300310831926472220028928 +002212025110507292510831926312366698496 +002212025110507333210831927348749885440 +002212025110507455410831930459530915840 +002212025110508144710831937729526431744 +002212025110508010210831934269854781440 +002212025110508282310831941150967050240 +002212025110507541010831932543105986560 +002212025110508192810831938908675317760 +002212025110508285810831941299743195136 +002212025110508343910831942731565318144 +002212025110508412310831944424373817344 +002212025110508380310831943585580158976 +002212025110508372710831943435176595456 +002212025110508584010831948772885610496 +002212025110508143410831937675805806592 +002212025110508491910831946420044660736 +002212025110509093410831951516316942336 +002212025110508505310831946813210337280 +002212025110509204210831954317289947136 +002212025110509302610831956766952189952 +002212025110509223010831954771306545152 +002212025110510155110831968198112514048 +002212025110509572910831963574479560704 +002212025110511124710831982523481042944 +002212025110511083610831981471771860992 +002212025110511170210831983596849545216 +002212025110511015110831979774219587584 +002212025110511392410831989222069735424 +002212025110510550110831978052935970816 +002212025110511325810831987605341708288 +002212025110511453710831990786264072192 +002212025110511293710831986763154825216 +002212025110511273910831986267027341312 +002212025110511351010831988158352261120 +002212025110511374210831988796565950464 +002212025110512104610831997116634832896 +002212025110511301310831986913877110784 +002212025110511513210831992275741143040 +002212025110512054810831995868573528064 +002212025110512072110831996257649795072 +002212025110512145010831998138828656640 +002212025110512025410831995136122261504 +002212025110511311210831987160141484032 +002212025110512283010832001578623496192 +002212025110512263110832001079883042816 +002212025110511571710831993723015114752 +002212025110511453810831990792836591616 +002212025110512014810831994861462466560 +002212025110512320110832002466398277632 +002212025110512560310832008514110693376 +002212025110512111010831997218397028352 +002212025110512361510832003531780870144 +002212025110512091110831996720130510848 +002212025110513192510832014391635050496 +002212025110512201210831999492288614400 +002212025110513221610832015109842472960 +002212025110512470810832006268870430720 +002212025110512540210832008004666335232 +002212025110513291710832016874809827328 +002212025110513064310832011196410077184 +002212025110513245110832015759536001024 +002212025110513432610832020438609227776 +002212025110513343110832018194585284608 +002212025110513411410832019883262451712 +002212025110514071410832026424975785984 +002212025110513541310832023152810475520 +002212025110514143210832028264912056320 +002212025110514564310832038881567916032 +002212025110514175310832029107233173504 +002212025110515522010832052876270075904 +002212025110516030810832055595185684480 +002212025110515545410832053523396620288 +002212025110516141810832058403549044736 +002212025110516034110832055731248889856 +002212025110516064010832056481349824512 +002212025110515591310832054608144314368 +002212025110516371710832064186785423360 +002212025110516383310832064507720970240 +002212025110516425310832065595811491840 +002212025110516385110832064580617969664 +002212025110517322010832078040227622912 +002212025110517313610832077857121079296 +002212025110516475410832066859974762496 +002212025110517124410832073107638022144 +002212025110517135110832073389382012928 +002212025110517143510832073574266896384 +002212025110518215510832090520530141184 +002212025110517521410832083048692142080 +002212025110518072210832086857770307584 +002212025110517461010832081523815186432 +002212025110518312210832092899187060736 +002212025110518361310832094119880495104 +002212025110518195610832090019147259904 +002212025110518233010832090917525192704 +002212025110518302110832092644450201600 +002212025110518505510832097818669428736 +002212025110518441710832096148006875136 +002212025110518352310832093910605692928 +002212025110518572010832099433027686400 +002212025110519054910832101568930848768 +002212025110519274610832107089947721728 +002212025110519334910832108613029543936 +002212025110519185410832104862306729984 +002212025110519001310832100159506280448 +002212025110519234810832106095629250560 +002212025110519535810832113686396768256 +002212025110519222810832105758780514304 +002212025110518385810832094810711756800 +002212025110519534410832113625759682560 +002212025110519480710832112211465531392 +002212025110519411810832110497232539648 +002212025110520203610832120386453442560 +002212025110520100210832117727164063744 +002212025110520391510832125081448288256 +002212025110607232710832287201112588288 +002212025110608432910832307339887046656 +002212025110523570810832174881451503616 +002212025110523135010832163982804234240 +002212025110609114210832314442588573696 +002212025110613094710832374358107979776 +002212025110612141410832360375628021760 +002212025110611521510832354843991158784 +002212025110611534710832355231817465856 +002212025110613433410832382859635011584 +002212025110613553510832385884525137920 +002212025110613462910832383592723881984 +002212025110614062610832388614031388672 +002212025110604385110832245776064950272 +002212025110608020010832296900545429504 +002212025110608254310832302868171796480 +002212025110608581810832311071265755136 +002212025110609164310832315704570740736 +002212025110609385910832321307305275392 +002212025110612060010832358304010924032 +002212025110612371910832366187993821184 +002212025110612385210832366575274930176 +002212025110613540610832385509487239168 +002212025110614132510832390369095954432 +002212025110612301310832364400142405632 +002212025110612194510832361764341129216 +002212025110610542510832340291882799104 +002212025110614304610832394735718735872 +002212025110614392710832396920858849280 +002212025110614454510832398508251914240 +002212025110615241710832408204685807616 +002212025110615492210832414518430375936 +002212025110615593610832417092608925696 +002212025110615521510832415241528385536 +002212025110616000810832417228907044864 +002212025110615554710832416130913730560 +002212025110616241710832423305983774720 +002212025110616130410832420479979159552 +002212025110615465210832413889364463616 +002212025110616214310832422660459413504 +002212025110616180010832421723061854208 +002212025110607055110832282770946060288 +002212025110616343810832425910076149760 +002212025110616425310832427983815553024 +002212025110608142310832300018813333504 +002212025110616102510832419816729677824 +002212025110616242310832423330692427776 +002212025110616215210832422695058231296 +002212025110616505810832430019588096000 +002212025110617024810832432996692480000 +002212025110617041510832433362796511232 +002212025110617330210832440607923970048 +002212025110617214810832437781218959360 +002212025110616534010832430699358916608 +002212025110616542010832430866459983872 +002212025110617472210832444214115241984 +002212025110617480010832444371271651328 +002212025110617404710832442558531198976 +002212025110618270810832454219715506176 +002212025110617520710832445408510451712 +002212025110617474910832444324496764928 +002212025110612350410832365621091696640 +002212025110618393710832457362285199360 +002212025110618532110832460819675156480 +002212025110619125110832465727312842752 +002212025110619020110832463000323190784 +002212025110619150810832466301169143808 +002212025110611572910832356160507678720 +002212025110619004510832462680637546496 +002212025110618280410832454455070507008 +002212025110619421910832473141768560640 +002212025110619221410832468089297395712 +002212025110619124910832465718513184768 +002212025110619313610832470445783228416 +002212025110619355910832471549317181440 +002212025110619212110832467864956633088 +002212025110618444010832458631804592128 +002212025110620044410832478781291339776 +002212025110619595510832477570672562176 +002212025110620321510832485707995652096 +002212025110620280010832484636678103040 +002212025110620313110832485523148476416 +002212025110620265810832484376555773952 +002212025110620435110832488626996322304 +002212025110620560210832491691497439232 +002212025110620353610832486550853603328 +002212025110621355610832501734032773120 +002212025110621543410832506425185628160 +002212025110622244610832514024396267520 +002212025110706373010832638024241876992 +002212025110706544110832642348938395648 +002212025110707201910832648797034835968 +002212025110707365910832652992551030784 +002212025110707041910832644770523987968 +002212025110706544110832642346837041152 +002212025110707415110832654217526841344 +002212025110707290610832651007261118464 +002212025110707423010832654380416831488 +002212025110707591310832658588784332800 +002212025110612272510832363694383632384 +002212025110707490110832656020918194176 +002212025110521161010832134371517116416 +002212025110708413310832669243407048704 +002212025110708340710832667370461560832 +002212025110708095310832661273944199168 +002212025110708082510832660904426024960 +002212025110708383310832668487958327296 +002212025110709033810832674799731580928 +002212025110708501210832671419437109248 +002212025110709001110832673931846184960 +002212025110709363510832683089454661632 +002212025110709030810832674672128233472 +002212025110709523210832687104154365952 +002212025110709310710832681716352782336 +002212025110710044810832690190721691648 +002212025110709312210832681777891606528 +002212025110709361310832683000828985344 +002212025110709304310832681614938685440 +002212025110709301010832681476845400064 +002212025110710164210832693185328926720 +002212025110710160110832693017053470720 +002212025110710203810832694175360847872 +002212025110710464610832700752159547392 +002212025110710595010832704041315971072 +002212025110711160410832708128312860672 +002212025110711063510832705742420811776 +002212025110711554310832718104804696064 +002212025110711411310832714454678044672 +002212025110711540810832717708631699456 +002212025110711302210832711725004058624 +002212025110711344110832712812847140864 +002212025110711222810832709735859585024 +002212025110711505710832716905908998144 +002212025110711364910832713348363259904 +002212025110711532210832717512560541696 +002212025110712014910832719640435830784 +002212025110712181010832723757128417280 +002212025110712213910832724632043487232 +002212025110712260810832725758633553920 +002212025110712280110832726232480821248 +002212025110712504710832731962323714048 +002212025110713070510832736063405105152 +002212025110713022610832734897220841472 +002212025110713090410832736565387825152 +002212025110713020810832734819106091008 +002212025110713105010832737009254211584 +002212025110713070110832736048729251840 +002212025110713324410832742518761930752 +002212025110713195410832739289642790912 +002212025110713015810832734777351811072 +002212025110713200210832739324023480320 +002212025110713394510832744287646756864 +002212025110713250310832740585452027904 +002212025110713120410832737321486610432 +002212025110713291910832741661186174976 +002212025110714250410832755692152221696 +002212025110713580310832748893302923264 +002212025110714050210832750647457329152 +002212025110714321510832757500048281600 +002212025110714280710832756456429957120 +002212025110714280310832756441733091328 +002212025110714290610832756704653058048 +002212025110714332110832757774921957376 +002212025110714245610832755658929184768 +002212025110715011210832764785780830208 +002212025110714483610832761613339291648 +002212025110715020310832764998935359488 +002212025110714353010832758317069320192 +002212025110715020610832765009119121408 +002212025110715240210832770528043024384 +002212025110715264310832771205179850752 +002212025110715593310832779467749007360 +002212025110715360910832773578556129280 +002212025110715241510832770585903435776 +002212025110715513710832777473185509376 +002212025110715575710832779065251041280 +002212025110716205610832784848726454272 +002212025110716470410832791424342396928 +002212025110716402810832789766870892544 +002212025110716470410832791425848123392 +002212025110716553110832793554251890688 +002212025110716362610832788749957701632 +002212025110716564210832793850352984064 +002212025110716374910832789098726649856 +002212025110716081510832781657079242752 +002212025110716412710832790011231055872 +002212025110717121610832797769477103616 +002212025110717041810832795764209688576 +002212025110717413910832805161753354240 +002212025110717342910832803357107912704 +002212025110717275210832801694573887488 +002212025110717185510832799442907918336 +002212025110717443010832805877884624896 +002212025110718105410832812522056384512 +002212025110718040310832810798516207616 +002212025110718195910832814810414125056 +002212025110718115010832812756459253760 +002212025110718245110832816033540296704 +002212025110718204510832815003054333952 +002212025110718571810832824198583496704 +002212025110718471010832821649365200896 +002212025110719224510832830604531408896 +002212025110719455610832836439118684160 +002212025110719161010832828949605859328 +002212025110719144910832828607879143424 +002212025110719191610832829729448611840 +002212025110719204710832830111281278976 +002212025110719364410832834123619569664 +002212025110719472210832836801925951488 +002212025110719192310832829759505002496 +002212025110719084010832827061770620928 +002212025110720033110832840865384452096 +002212025110719395610832834930586902528 +002212025110719334310832833363599101952 +002212025110720185110832844722424459264 +002212025110720050310832841248215347200 +002212025110720111410832842808349634560 +002212025110720593710832854980840628224 +002212025110720542210832853662184976384 +002212025110720450510832851324514803712 +002212025110721560110832869176940670976 +002212025110723171010832889599849857024 +002212025110722491710832882579599982592 +002212025110800253410832906809704165376 +002212025110801410610832925818059165696 +002212025110801420210832926055465189376 +002212025110804314610832968768650711040 +002212025110805540710832989493780525056 +002212025110806070810832992767476736000 +002212025110806463410833002691648782336 +002212025110807332910833014500468404224 +002212025110807023810833006737252122624 +002212025110806374310833000464200728576 +002212025110807072010833007919743844352 +002212025110807370210833015391900639232 +002212025110807220210833011617748422656 +002212025110807440310833017158994472960 +002212025110807352110833014968846344192 +002212025110807415110833016606243917824 +002212025110807232810833011979746246656 +002212025110807444810833017348753170432 +002212025110808354510833030171273179136 +002212025110807575810833020662072950784 +002212025110807444210833017323021107200 +002212025110807582610833020779987431424 +002212025110808404410833031426213109760 +002212025110808323410833029370123325440 +002212025110808370310833030496918904832 +002212025110809064810833037984191938560 +002212025110809211610833041626529771520 +002212025110809143510833039940864135168 +002212025110809333410833044719992512512 +002212025110809094810833038738902458368 +002212025110809352410833045181080756224 +002212025110809505410833049082811101184 +002212025110810484310833063633778618368 +002212025110810465210833063168185667584 +002212025110811113210833069373973045248 +002212025110810505010833064164832006144 +002212025110811240810833072544774598656 +002212025110810422310833062037204217856 +002212025110811090710833068766637813760 +002212025110810475210833063416828227584 +002212025110811030610833067250904424448 +002212025110810450110833062700931854336 +002212025110811332010833074862492413952 +002212025110811564810833080764192735232 +002212025110811511710833079376343699456 +002212025110811272710833073380812599296 +002212025110811563410833080706525233152 +002212025110812202710833086719412338688 +002212025110812271510833088427085471744 +002212025110812434210833092570776821760 +002212025110812160110833085603861704704 +002212025110812433810833092552334446592 +002212025110812390810833091418794438656 +002212025110812465410833093373981863936 +002212025110812530310833094919951974400 +002212025110813121610833099759067283456 +002212025110813181610833101267984912384 +002212025110812421210833092193209749504 +002212025110813215110833102169630269440 +002212025110813040410833097695071277056 +002212025110813283310833103854234710016 +002212025110813410010833106989229502464 +002212025110814162210833115888888274944 +002212025110813364710833105926015393792 +002212025110814072710833113645606719488 +002212025110814174610833116241817956352 +002212025110814162810833115915828264960 +002212025110814200310833116814625685504 +002212025110814264310833118493609783296 +002212025110814582610833126474309107712 +002212025110814490410833124118163030016 +002212025110814575510833126344004673536 +002212025110815050510833128149644144640 +002212025110815210310833132167485403136 +002212025110815391310833136737934598144 +002212025110815370810833136214879703040 +002212025110815401610833137001412395008 +002212025110816015410833142448580132864 +002212025110816130810833145275067088896 +002212025110816342410833150627338739712 +002212025110816142210833145584925487104 +002212025110816522910833155177445548032 +002212025110816551610833155876040437760 +002212025110816295410833149495363211264 +002212025110816242010833148094138511360 +002212025110817073610833158982472007680 +002212025110816561710833156133306429440 +002212025110816563610833156212549414912 +002212025110817143810833160752162119680 +002212025110817203410833162245757947904 +002212025110817535610833170640779042816 +002212025110817551610833170977946562560 +002212025110817531310833170459832594432 +002212025110817591910833171995254005760 +002212025110817404810833167337307463680 +002212025110817461610833168710312878080 +002212025110817495810833169644002701312 +002212025110818244910833178413650612224 +002212025110818185910833176947225473024 +002212025110818350710833181005508177920 +002212025110818390110833181985536704512 +002212025110818403010833182359383404544 +002212025110818443210833183374094577664 +002212025110818360810833181263365611520 +002212025110818492510833184604145541120 +002212025110818491910833184579495600128 +002212025110818034210833173100448952320 +002212025110819291810833194643002425344 +002212025110819130310833190553912557568 +002212025110819100510833189804193300480 +002212025110819411810833197661554970624 +002212025110819473110833199225833213952 +002212025110819421910833197917256523776 +002212025110820093810833204789984337920 +002212025110820375510833211907810496512 +002212025110821124810833220689101787136 +002212025110821350010833226274945855488 +002212025110821512410833230400203235328 +002212025110821592510833232421119528960 +002212025110822071410833234388231331840 +002212025110823521410833260810526236672 +002212025110823292510833255066821152768 +002212025110900134910833266242296684544 +002212025110901432010833288768670343168 +002212025110901570910833292247530946560 +002212025110905235610833344285828657152 +002212025110906555910833367449623261184 +002212025110907064210833370146787254272 +002212025110906563610833367606037295104 +002212025110907262210833375098548981760 +002212025110907230010833374251081478144 +002212025110907420610833379055749009408 +002212025110907315010833376473915781120 +002212025110908052110833384906324922368 +002212025110908470810833395421646368768 +002212025110908492310833395990612127744 +002212025110908423510833394278350417920 +002212025110909101310833401231059419136 +002212025110908134810833387032526647296 +002212025110909300610833406237468717056 +002212025110911205310833434114977406976 +002212025110911183610833433540672327680 +002212025110911194510833433829571801088 +002212025110911392910833438795409600512 +002212025110912001310833444014986039296 +002212025110912151410833447792342700032 +002212025110912381410833453580339572736 +002212025110911435810833439924788883456 +002212025110912144210833447657961365504 +002212025110912191410833448800443666432 +002212025110912283210833451138524872704 +002212025110912190810833448775927951360 +002212025110912183710833448644436508672 +002212025110912351610833452832667172864 +002212025110912511310833456847144550400 +002212025110912573110833458435443597312 +002212025110912584110833458726188564480 +002212025110912501310833456597415710720 +002212025110913080210833461078937251840 +002212025110913295110833466571692937216 +002212025110913272910833465975883649024 +002212025110913363310833468256783888384 +002212025110913570910833473442457821184 +002212025110913414110833469546637234176 +002212025110913371210833468418793099264 +002212025110913504010833471809405550592 +002212025110913480410833471153328328704 +002212025110914415810833484718139465728 +002212025110914351610833483031853068288 +002212025110914081410833476228490682368 +002212025110914510410833487010683105280 +002212025110914530510833487516444852224 +002212025110915072210833491112062332928 +002212025110914393010833484099055972352 +002212025110915424110833500000526479360 +002212025110915483410833501481325502464 +002212025110915541710833502917920784384 +002212025110915415210833499795794120704 +002212025110915264510833495988863442944 +002212025110916204910833509595030450176 +002212025110915440510833500350625038336 +002212025110916332610833512769896280064 +002212025110916362810833513535063175168 +002212025110916333610833512812275535872 +002212025110916175410833508861442502656 +002212025110916363610833513568156217344 +002212025110916263710833511055524868096 +002212025110917055710833520952740122625 +002212025110916390010833514173658492928 +002212025110916242310833510491546124288 +002212025110916405710833514660533350400 +002212025110916522710833517556217913344 +002212025110916393310833514312158646272 +002212025110917125110833522691845328896 +002212025110916574210833518879139147776 +002212025110916391710833514241048395776 +002212025110916442010833515514569113600 +002212025110917005610833519691093442560 +002212025110917234810833525446009876480 +002212025110917324510833527700108566528 +002212025110917122310833522573847011328 +002212025110917181810833524062455824384 +002212025110918025310833535281950593024 +002212025110917180610833524013223051264 +002212025110917460610833531058676506624 +002212025110917503110833532168736837632 +002212025110918113110833537455409524736 +002212025110917461110833531077261479936 +002212025110917472010833531369759682560 +002212025110918174210833539011219501056 +002212025110918390310833544382097084416 +002212025110918173310833538971998597120 +002212025110917550910833533336825323520 +002212025110918132510833537933686038528 +002212025110918521710833547711783067648 +002212025110918332610833542971623931904 +002212025110919003410833549799778910208 +002212025110918560610833548673968992256 +002212025110919231810833555518129414144 +002212025110918521010833547682217398272 +002212025110919290510833556976304324608 +002212025110919355910833558713002045440 +002212025110919040910833550699222237184 +002212025110919425110833560440430325760 +002212025110919373210833559100195016704 +002212025110919483210833561867479375872 +002212025110919593110833564633073397760 +002212025110919525210833562961894916096 +002212025110919374310833559145841618944 +002212025110920143110833568409024921600 +002212025110921074510833581803463454720 +002212025110921135110833583339442761728 +002212025110922050010833596212365725696 +002212025110922360910833604050332893184 +002212025110922280810833602033946394624 +002212025110923115210833613038235656192 +002212025111006341110833724353553829888 +002212025111006581810833730423559008256 +002212025111007061510833732423822557184 +002212025111007000110833730853915533312 +002212025111007311610833738719011516416 +002212025111006414710833726266005463040 +002212025111007532110833744273456975872 +002212025111007270010833737643029901312 +002212025111008114610833748911702913024 +002212025111008063510833747606099922944 +002212025111007282010833737981145317376 +002212025111007555810833744932545708032 +002212025111008062010833747544410140672 +002212025111007412610833741277503361024 +002212025111008144510833749661665411072 +002212025111008273510833752890268659712 +002212025111008292110833753334969729024 +002212025111008113810833748877032767488 +002212025111008053310833747346644475904 +002212025111008171210833750277494083584 +002212025111008064510833747647048908800 +002212025111008380610833755537927254016 +002212025111008412110833756355321638912 +002212025111009032310833761901814718464 +002212025111008535110833759500793782272 +002212025111009050210833762314538422272 +002212025111009014510833761489720160256 +002212025111009304410833768781060448256 +002212025111010151810833779996902010880 +002212025111010171310833780481021157376 +002212025111010101210833778715940573184 +002212025111010104810833778866469924864 +002212025111010321010833784241151758336 +002212025111010425510833786950235947008 +002212025111011200410833796299322748928 +002212025111010580810833790776598786048 +002212025111011012210833791590490935296 +002212025111011030710833792032948047872 +002212025111011065110833792973118070784 +002212025111011301310833798853767180288 +002212025111010473810833788135533666304 +002212025111011460210833802833129828352 +002212025111011533410833804727277522944 +002212025111011352010833800137584881664 +002212025111011343110833799932651184129 +002212025111011431310833802121629085696 +002212025111011485610833803563001671680 +002212025111011300810833798831407329280 +002212025111012221410833811943137161216 +002212025111011301910833798878496796672 +002212025111012231710833812205331513344 +002212025111012115410833809343771770880 +002212025111011582510833805946968555520 +002212025111012284910833813598872240128 +002212025111012265410833813115927486464 +002212025111013121710833824536258101248 +002212025111012394010833816330731491328 +002212025111011553910833805253130031104 +002212025111013242310833827582094569472 +002212025111013095710833823948954857472 +002212025111012362210833815499051347968 +002212025110608050310832297670229557248 +002212025110607490410832293646084296704 +002212025110611524610832354976027856896 +002212025111013251510833827801347584000 +002212025111013434810833832468320309248 +002212025111013235110833827446484299776 +002212025111013533910833834948122857472 +002212025111013325010833829709487480832 +002212025111013483310833833663948591104 +002212025111013435010833832478155935744 +002212025111014255410833843063337721856 +002212025111014033310833837440923566080 +002212025111014304910833844300565155840 +002212025111014085510833838788154974208 +002212025111014112710833839426238631936 +002212025111014242710833842700320735232 +002212025111014291310833843898553667584 +002212025111015002210833851736546045952 +002212025111015022210833852240311300096 +002212025111014531810833849958014337024 +002212025111015120710833854692729225216 +002212025111015401610833861779932794880 +002212025111015023710833852303901155328 +002212025111015353110833860583998296064 +002212025111016022910833867370436730880 +002212025111016232510833872636712538112 +002212025111016002410833866847587377152 +002212025111016082710833868871880105984 +002212025111016492410833879175678615552 +002212025111016330110833875054561030144 +002212025111016290310833874057658855424 +002212025111016422210833877407741718528 +002212025111016315810833874791343296512 +002212025111017173610833886273271468032 +002212025111016591610833881660992491520 +002212025111017141410833885428047908864 +002212025111017333010833890276692672512 +002212025111017540910833895473259188224 +002212025111017592010833896776605560832 +002212025111017523310833895069897138176 +002212025111018035110833897912959967232 +002212025111017415810833892405595578368 +002212025111018001410833897002959601664 +002212025111018123210833900098154622976 +002212025111017502410833894526663483392 +002212025111018241410833903043185188864 +002212025111018142610833900574883414016 +002212025111018595910833912037341618176 +002212025111018480610833909048719654912 +002212025111018383610833906656796155904 +002212025111018175910833901467716513792 +002212025111018392510833906863244021760 +002212025111019264610833918780213776384 +002212025111018573510833911435534471168 +002212025111019255410833918563368280064 +002212025111019183510833916721452232704 +002212025111019474810833924074172018688 +002212025111019295110833919557506412544 +002212025111019443510833923263228518400 +002212025111020282510833934295443374080 +002212025111019293610833919491806814209 +002212025111020463410833938861274669056 +002212025111020303610833934843877990400 +002212025111020480510833939244940218368 +002212025111020434610833938155486547968 +002212025111021020210833942755295854592 +002212025111023073410833974347129135104 +002212025111023250210833978739433615360 +002212025111023172210833976810464829440 +002212025111100223110833993207471345664 +002212025111100205710833992814599311360 +002212025111104002810834048054908391424 +002212025111106560110834092235588608000 +002212025111106592010834093067881082880 +002212025111107030110834093995803762688 +002212025111107233810834099186666008576 +002212025111107451510834104623905845248 +002212025111107144310834096939668271104 +002212025111108034710834109290962460672 +002212025111107553110834107207597096960 +002212025111107330410834101557026562048 +002212025111107384510834102990585135104 +002212025111107433810834104218467643392 +002212025111107342310834101890167562240 +002212025111107462610834104924239007744 +002212025111107414810834103758365073408 +002212025111108025810834109084321656832 +002212025111108080710834110379514372096 +002212025111109043010834124570925133824 +002212025111108333210834116777711198208 +002212025111109213910834128883336548352 +002212025111109204410834128653576790016 +002212025111108092110834110691759329280 +002212025111109244610834129670791958528 +002212025111109141110834127006297440256 +002212025111109133510834126855474466816 +002212025111110225510834144303598759936 +002212025111109453610834134911532892160 +002212025111110082910834140672292007936 +002212025111110295610834146067341328384 +002212025111110132310834141902959476736 +002212025111110592610834153492748398592 +002212025111110253310834144965887754240 +002212025111111304710834161383953862656 +002212025111111320510834161707758333952 +002212025111111232710834159536627232768 +002212025111110565910834152877045510144 +002212025111111350710834162471989911552 +002212025111111322410834161790969163776 +002212025111111152510834157515811561472 +002212025111112045110834169954691149824 +002212025111112100610834171276811276288 +002212025111111502010834166302802935808 +002212025111112133110834172137432125440 +002212025111111380010834163199357714432 +002212025111112140610834172281284132864 +002212025111112285710834176020774617088 +002212025111113034010834184758118014976 +002212025111112305410834176512552558592 +002212025111112445510834180039513444352 +002212025111112571810834183152983011328 +002212025111113350510834192662682378240 +002212025111113114510834186792359645184 +002212025111113434910834194861915324416 +002212025111114045210834200156808876032 +002212025111113583210834198564441382912 +002212025111114235910834204967616851968 +002212025111114265510834205708205109248 +002212025111114391310834208801210703872 +002212025111115084010834216216303984640 +002212025111115010010834214284067803136 +002212025111115351510834222902418796544 +002212025111114553910834212937729810432 +002212025111115280910834221116089921536 +002212025111115534910834227575263531008 +002212025111115445910834225355197456384 +002212025111116115410834232126880296960 +002212025111115415310834224575459569664 +002212025111116393910834239109939306496 +002212025111116075010834231104246050816 +002212025111116330310834237450718777344 +002212025111114335810834207483393949696 +002212025111116335410834237662682116096 +002212025111116334710834237634915815424 +002212025111116302910834236804863053824 +002212025111116295310834236652718845952 +002212025111117011210834244535669952512 +002212025111116444710834240403726860288 +002212025111116575110834243690068905984 +002212025111116351110834237989124808704 +002212025111117033610834245137644843008 +002212025111116480410834241228960407552 +002212025111117335610834252771236192256 +002212025111117002010834244316593102848 +002212025111116570810834243511127343104 +002212025111117511310834257122092593152 +002212025111117484110834256485762134016 +002212025111116591810834244056743362560 +002212025111117500010834256817250603008 +002212025111118001710834259401210261504 +002212025111117373610834253696713576448 +002212025111118155410834263333701648384 +002212025111118242710834265486486876160 +002212025111118144010834263021569937408 +002212025111118325010834267593021521920 +002212025111118410310834269661610323968 +002212025111119130310834277717081567232 +002212025111118444510834270593890869248 +002212025111119100010834276947841978368 +002212025111119111310834277253996822528 +002212025111118550910834273209609818112 +002212025111119113410834277343234842624 +002212025111119005210834274647882792960 +002212025111118442210834270495966449664 +002212025111119164510834278644861591552 +002212025111119375110834283956326842368 +002212025111119170010834278709256753152 +002212025111119000210834274438347993088 +002212025111118464910834271114991202304 +002212025111120202510834294667182575616 +002212025111120045510834290768577007616 +002212025111120013910834289947525206016 +002212025111120255810834296066180079616 +002212025111120411210834299900373741568 +002212025111120534210834303045569048576 +002212025111120273010834296449765965824 +002212025111121253910834311085273870336 +002212025111121472810834316574271442944 +002212025111121215810834310157690970112 +002212025111120222710834295182570246144 +002212025111122123510834322896119369728 +002212025111200064710834351635947520000 +002212025111200183610834354611349073920 +002212025111202540210834393727658840064 +002212025111205351510834434295214583808 +002212025111206040010834441530422562816 +002212025111206415710834451084292104192 +002212025111206580010834455121313898496 +002212025111206182010834445138815848448 +002212025111207100910834458180953767936 +002212025111207551810834469540466982912 +002212025111207122410834458743858769920 +002212025111207243210834461799014948864 +002212025111207083910834457802505953280 +002212025111207565010834469927215398912 +002212025111207324710834463875535171584 +002212025111207492010834468041032708096 +002212025111208282410834477869796888576 +002212025111208495110834483271963963392 +002212025111208354510834479722366468096 +002212025111209512210834498753165234176 +002212025111209170810834490136710025216 +002212025111209205210834491076599042048 +002212025111209231610834491679018549248 +002212025111210152610834504807445901312 +002212025111210235110834506926420856832 +002212025111210553110834514896395403264 +002212025111211073910834517948485529600 +002212025111211030710834516809635545088 +002212025111211465010834527807335530496 +002212025111211465110834527815065604096 +002212025111211551010834529906798600192 +002212025111211273410834522960561414144 +002212025111211210110834521312329928704 +002212025111212092410834533489375948800 +002212025111211444510834527284410654720 +002212025111212145910834534894954291200 +002212025111211414010834526509492039680 +002212025111212192410834536006197383168 +002212025111211322610834524184404770816 +002212025111212161910834535226908282880 +002212025111211534910834529568007892992 +002212025111211295810834523566265044992 +002212025111212423110834541820597456896 +002212025111212391010834540979027161088 +002212025111212492510834543557785911296 +002212025111213062810834547849322254336 +002212025111213000010834546222515326976 +002212025111213061510834547793735143424 +002212025111212495710834543692964114432 +002212025111213075810834548227719778304 +002212025111213104810834548941099593728 +002212025111213432010834557126241873920 +002212025111212444510834542384429371392 +002212025111213321210834554324987908096 +002212025111213280610834553295164620800 +002212025111214044410834562514441928704 +002212025111213434510834557230533292032 +002212025111213370710834555564354404352 +002212025111214135810834564837423665152 +002212025111214073910834563246037622784 +002212025111214121610834564408333758464 +002212025111213500110834558807302156288 +002212025111214223710834567011956375552 +002212025111214072710834563196599377920 +002212025111214440810834572427868209152 +002212025111215235010834582417559486464 +002212025111215042410834577529517596672 +002212025111215145910834580191139004416 +002212025111214572210834575759089266688 +002212025111215040110834577432692076544 +002212025111215272710834583328189030400 +002212025111215471110834588297248063488 +002212025111215570710834590794662477824 +002212025111215352710834585343908577280 +002212025111216044310834592709374861312 +002212025111216194910834596509003214848 +002212025111216273210834598451783868416 +002212025111216150210834595304797577216 +002212025111216041810834592601493164032 +002212025111216150610834595319167262720 +002212025111216250910834597848231903232 +002212025111216301210834599119093428224 +002212025111216371310834600887693053952 +002212025111216433110834602471504171008 +002212025111216424510834602277773451264 +002212025111216383110834601212302794752 +002212025111216311210834599372609753088 +002212025111217153410834610536995573760 +002212025111216380310834601096145739776 +002212025111217064410834608315671207936 +002212025111217054510834608067733315584 +002212025111217093510834609031123017728 +002212025111217101710834609206965002240 +002212025111217041210834607678308962304 +002212025111217054110834608050133995520 +002212025111217300910834614209242935296 +002212025111217235710834612645925175296 +002212025111217341210834615225879302144 +002212025111216040310834592540596051968 +002212025111217502510834619309235564544 +002212025111217410410834616954683355136 +002212025111218323210834629907553931264 +002212025111218102310834624331944005632 +002212025111217352410834615527512666112 +002212025111218420410834632308029616128 +002212025111218392910834631655735644160 +002212025111218385010834631493567078400 +002212025111218264310834628444115124224 +002212025111218493010834634177913225216 +002212025111218114810834624689332240384 +002212025111218204510834626941929332736 +002212025111218273410834628658821545984 +002212025111219162710834640960551600128 +002212025111219065910834638577918472192 +002212025111218585110834636528539611136 +002212025111219113210834639719696130048 +002212025111219071210834638631911755776 +002212025111219205010834642060478443520 +002212025111219534310834650337459257344 +002212025111219261210834643414232006656 +002212025111219480810834648930932989952 +002212025111220271610834658781494988800 +002212025111220061610834653493975027712 +002212025111220381010834661521948364800 +002212025111220355610834660959538327552 +002212025111220552510834665863409524736 +002212025111220500410834664518547873792 +002212025111222004310834682299498565632 +002212025111221364510834676267246354432 +002212025111221574510834681551696142336 +002212025111222202710834687265013448704 +002212025111222462410834693796647858176 +002212025111222111310834684940681146368 +002212025111222102110834684722317307904 +002212025111223083210834699363332333568 +002212025111223352110834706115197087744 +002212025111223263310834703897194639360 +002212025111306095510834805407660310528 +002212025111307003110834818143312117760 +002212025111307243110834824184829517824 +002212025111307361010834827116387999744 +002212025111307362210834827163133513728 +002212025111307313610834825965831651328 +002212025111308174010834837559051497472 +002212025111308145510834836867838578688 +002212025111307302310834825661165801472 +002212025111308085410834835352138780672 +002212025111307583210834832744175046656 +002212025111308224710834838846623137792 +002212025111308555110834847167442825216 +002212025111309100510834850750041128960 +002212025111308450310834844448946601984 +002212025111309360910834857309244690432 +002212025111309463710834859944383307776 +002212025111310224510834869035704975360 +002212025111310392410834873227538567168 +002212025111310505110834876108568244224 +002212025111311103910834881090570887168 +002212025111311054010834879835345739776 +002212025111310562710834877515639771136 +002212025111310421510834873942893899776 +002212025111310344010834872037853597696 +002212025111311140210834881942014590976 +002212025111311012610834878769984114688 +002212025111311340410834886983987437568 +002212025111311320410834886481455316992 +002212025111311422710834889092111769600 +002212025111311304010834886127493791744 +002212025111311344010834887137318612992 +002212025111311440010834889485420003328 +002212025111312155310834897508171493376 +002212025111312190710834898320478130176 +002212025111312142710834897145682923520 +002212025111312144010834897200489926656 +002212025111311562510834892609002110976 +002212025111311592010834893342703325184 +002212025111312471510834905400207413248 +002212025111312184910834898247560146944 +002212025111312561610834907669535588352 +002212025111312284210834900734044246016 +002212025111312050410834894785590018048 +002212025111312445310834904806604345344 +002212025111313162510834912743192215552 +002212025111313040010834909617672351744 +002212025111313262710834915264665186304 +002212025111313103110834911258094055424 +002212025111313310310834916422964154368 +002212025111313390310834918437702307840 +002212025111313525210834921915388502016 +002212025111314085810834925965714628608 +002212025111314103710834926382011875328 +002212025111315143210834942465129263104 +002212025111315005310834939030225006592 +002212025111315240110834944851088449536 +002212025111315293510834946255567917056 +002212025111315181710834943408935776256 +002212025111315303410834946501152796672 +002212025111315295510834946339294609408 +002212025111314565210834938021968826368 +002212025111315551310834952706348752896 +002212025111316263010834960576700162048 +002212025111315581410834953465643634688 +002212025111316082510834956028640186368 +002212025111316124310834957109734600704 +002212025111316291910834961287089422336 +002212025111316303610834961607609782272 +002212025111316234410834959881292935168 +002212025111316460410834965502289444864 +002212025111316535210834967465894834176 +002212025111316424610834964671393628160 +002212025111316400010834963974308732928 +002212025111316522510834967099534950400 +002212025111316562710834968116188090368 +002212025111316454010834965402934808576 +002212025111316454610834965425957302272 +002212025111316574710834968448691544064 +002212025111317141910834972612737822720 +002212025111317500710834981619561078784 +002212025111317283910834976217943457792 +002212025111317031710834969836280545280 +002212025111317253210834975433231151104 +002212025111317194710834973985046990848 +002212025111317340610834977589241794560 +002212025111317483610834981239578136576 +002212025110612252010832363170791923712 +002212025110612234910832362788720148480 +002212025110612094610832359255186812928 +002212025111317485410834981312206692352 +002212025111317391510834978885625643008 +002212025111317593010834983981285597184 +002212025111318141110834987674902941696 +002212025111318195410834989116279709696 +002212025111318164210834988311170461696 +002212025111318153210834988018370306048 +002212025111318222310834989740056616960 +002212025111318055810834985607706640384 +002212025111318473510834996080883769344 +002212025111318542210834997791216046080 +002212025111319181710835003810268770304 +002212025111318543910834997859826507776 +002212025111319263710835005903566225408 +002212025111318533410834997589662990336 +002212025111319102510835001828103634944 +002212025111319072110835001058348208128 +002212025111319051610835000533556895744 +002212025111319242510835005351474212864 +002212025111319285210835006472351625216 +002212025111319421310835009831225737216 +002212025111319575610835013786651521024 +002212025111320081610835016388961349632 +002212025111319502710835011902540845056 +002212025111319262510835005855147171840 +002212025111320013310835014698191269888 +002212025111320280510835021375447711744 +002212025111320183510835018981150244864 +002212025111321171210835033735575052288 +002212025111321002110835029495859331072 +002212025111321110310835032188195631104 +002212025111320583510835029050319384576 +002212025111321565210835043717066452992 +002212025111322120210835047535225311232 +002212025111322444810835055778030903296 +002212025111322401810835054647858913280 +002212025111323130810835062908700037120 +002212025111322481510835056646633488384 +002212025111323432110835070513619095552 +002212025111405235610835156223550255104 +002212025111406012210835165646293278720 +002212025111406172110835169667317985280 +002212025111406385110835175076992856064 +002212025111407255410835186919568261120 +002212025110611533510832355180395294720 +002212025111407411910835190799026847744 +002212025111407385110835190176193675264 +002212025111408104810835198216804454400 +002212025111407383110835190093976911872 +002212025111408220210835201046235803648 +002212025111408020610835196030296985600 +002212025111408481510835207643775303680 +002212025111408150710835199305004044288 +002212025111408523010835208710839816192 +002212025111408214410835200968465027072 +002212025111408495410835208058071883776 +002212025111408372110835204899828084736 +002212025111408422710835206183050248193 +002212025111409292010835217980423643136 +002212025111409314110835218572642545664 +002212025111409173110835215009115774976 +002212025111409391310835220468870615040 +002212025111409415210835221134292770816 +002212025111409494710835223127908392960 +002212025111409340310835219168867074048 +002212025111409434710835221620362244096 +002212025111409310110835218406980141056 +002212025111410295110835233210612559872 +002212025111411121710835243889243426816 +002212025111410422110835236355421999104 +002212025111411350010835249606474031104 +002212025111411231010835246630405640192 +002212025111410504410835238465756667904 +002212025111411315210835248819664531456 +002212025111412014010835256317058437120 +002212025111411445110835252086343675904 +002212025111412082410835258013696339968 +002212025111411510410835253648793243648 +002212025111412040710835256933818236928 +002212025111412275710835262932989976576 +002212025111412140810835259456239120384 +002212025111412131310835259224369639424 +002212025111412362510835265061469229056 +002212025111412053010835257281807089664 +002212025111412131010835259209962192896 +002212025111412521510835269046875926528 +002212025111412401810835266042391105536 +002212025111412475210835267946345066496 +002212025111412404910835266172116725760 +002212025111412513410835268876230696960 +002212025111413191610835275847344291840 +002212025111413501310835283637081145344 +002212025111413542310835284684579225600 +002212025111413433910835281984122716160 +002212025111413504010835283749329104896 +002212025111413575510835285573494853632 +002212025111413592410835285946301378560 +002212025111413513010835283958889140224 +002212025061713093110780915214891429888 +002212025111414141210835289670495195136 +002212025111414311110835293943408832512 +002212025111414220510835291656078725120 +002212025111415152910835305094804901888 +002212025111415032610835302059735187456 +002212025111415090010835303462843154432 +002212025111415312310835309093935337472 +002212025110522493210832157869425790976 +002212025110522242510832151549242966017 +002212025111415540710835314814320054272 +002212025110521302610832137960809541632 +002212025111416012510835316651731431424 +002212025111416015410835316773471096832 +002212025111416212510835321685231730688 +002212025111416224610835322026505506816 +002212025111416101210835318863035564032 +002212025111416452810835327738598080512 +002212025111416055610835317790438797312 +002212025111416355210835325324436369408 +002212025111416274910835323296633028608 +002212025111416102910835318935446052864 +002212025111417133410835334809263489024 +002212025111417080810835333440913731584 +002212025111416493410835328771474817024 +002212025111416574210835330818693636096 +002212025111417172910835335796573310976 +002212025111417395510835341439598292992 +002212025111416580710835330920644567040 +002212025111417240910835337474764673024 +002212025111417030910835332190302351360 +002212025111417453110835342851300335616 +002212025111417391210835341258949623808 +002212025111417091510835333725316927488 +002212025111417454110835342890475155456 +002212025111417364910835340660871221248 +002212025111418023210835347131176554496 +002212025111418085110835348724517126144 +002212025111417501510835344041538957312 +002212025111417553710835345392180350976 +002212025111418214310835351959374090240 +002212025111418200310835351541130670080 +002212025111418202910835351650023194624 +002212025111419021510835362159783026688 +002212025111419044910835362807106732032 +002212025111419101210835364160491184128 +002212025111418574310835361021235007488 +002212025111419471710835373495267028992 +002212025111419220110835367136530202624 +002212025111419261910835368216789983232 +002212025111419273410835368530393919488 +002212025111419163010835365746386857984 +002212025111419215410835367107451109376 +002212025111419315710835369637459480576 +002212025111419373710835371061606064128 +002212025111419355010835370611720814592 +002212025111419490610835373950382579712 +002212025111419343610835370304395735040 +002212025111420241310835382790540955648 +002212025111420333510835385147806920704 +002212025111421023110835392428632121344 +002212025111421091810835394134816264192 +002212025111421370610835401130600787968 +002212025111421544210835405559114739712 +002212025111422340210835415456988459008 +002212025111422522110835420067627499520 +002212025111422310210835414701669814272 +002212025111423481310835434125080633344 +002212025111506364110835536919917686784 +002212025111507043910835543960472207360 +002212025111507163710835546970258604032 +002212025111507323910835551004751253504 +002212025111507373110835552230096195584 +002212025111507302310835550433956798464 +002212025111507263210835549466146328576 +002212025111507342510835551452031819776 +002212025111507465010835554574116519936 +002212025111507444910835554068950368256 +002212025111508024310835558574136193024 +002212025111507532110835556215238647808 +002212025072016563210792931144879456256 +002212025071610003410791376908670558208 +002212025111508345610835566678248763392 +002212025071414194710790717369093795840 +002212025111509161210835577064771530752 +002212025111508401310835568010917539840 +002212025111509085410835575226542301184 +002212025111509161310835577067074203648 +002212025070717202210788226097939062784 +002212025111508542310835571574905696256 +002212025111509040410835574011670499328 +002212025111509161510835577077668978688 +002212025111509463110835584694667665408 +002212025111510053010835589471002624000 +002212025111509295510835580516604022784 +002212025111509092510835575357073231872 +002212025111509340010835581544439156736 +002212025111509510410835585838651469824 +002212025111510023510835588739079802880 +002212025111510575010835602642664890368 +002212025111510135910835591608117968896 +002212025111511092310835605547778281472 +002212025111511311010835611031000256512 +002212025111511402610835613363918299136 +002212025111511410210835613513411682304 +002212025111512022410835618890995920896 +002212025111511371210835612548067422208 +002212025111512260610835624853945671680 +002212025111512273510835625226366324736 +002212025111512123810835621463769432064 +002212025110611444110832352939441586176 +002212025110611430710832352545311264768 +002212025110611274210832348665760415744 +002212025110611233910832347649421832192 +002212025111512400110835628357846233088 +002212025111512564610835632573507645440 +002212025110611080910832343747175596032 +002212025110611005010832341907524497408 +002212025110610564510832340876833026048 +002212025110521104310832132999807700992 +002212025110610372210832336000090578944 +002212025110610190210832331386565918720 +002212025110610082010832328691817852928 +002212025110610034210832327528674426880 +002212025110610010310832326859678789632 +002212025111513104610835636094474878976 +002212025110609113910832314426989957120 +002212025110609092610832313872884645888 +002212025110609070610832313283173875712 +002212025110608492910832308852470517760 +002212025111513471510835645278306107392 +002212025110608261610832303006617403392 +002212025110608250110832302694431154176 +002212025111514044010835649660657573888 +002212025111514151310835652315022831616 +002212025110607593910832296307642830848 +002212025110607435010832292328582131712 +002212025110607430510832292141948186624 +002212025110607253710832287743574478848 +002212025110607232510832287189783736320 +002212025111514045810835649736557694976 +002212025110607174710832285773660909568 +002212025110607033110832282185127641088 +002212025110600105910832178363705282560 +002212025110606495910832278775640838144 +002212025110606490910832278568605782016 +002212025110606371310832275566209736704 +002212025110606312110832274088527101952 +002212025110602275410832212823293247488 +002212025111515010510835663859009933312 +002212025111514462510835660167158394880 +002212025111515112410835666454533320704 +002212025111515002110835663671855894528 +002212025111515363010835672769376776192 +002212025111515304110835671307309486080 +002212025111515140010835667109675200512 +002212025111515041610835664657978703872 +002212025111516141610835682275599007744 +002212025111516072910835680567653261312 +002212025111515575710835678168100302848 +002212025111516300210835686242835951616 +002212025111516241810835684797847920640 +002212025111516294010835686151769231360 +002212025111516342410835687341592612864 +002212025111516422610835689363540774912 +002212025111516551210835692574389510144 +002212025111517015510835694264069103616 +002212025111516442310835689852487528448 +002212025111517143910835697470148943872 +002212025111517190910835698603495981056 +002212025111517200810835698848611135488 +002212025111517101010835696341251997696 +002212025111517375210835703315322589184 +002212025111517465010835705571837153280 +002212025111517284810835701030492241920 +002212025111518161610835712976914452480 +002212025111517491010835706157060014080 +002212025111517025310835694509632978944 +002212025111517380410835703361891926016 +002212025111517464510835705550156812288 +002212025111517552210835707716166725632 +002212025111518002710835708996360531968 +002212025111518163510835713056648142848 +002212025111518521510835722033528242176 +002212025111518302910835716553254858752 +002212025111518380210835718452817391616 +002212025111518225310835714642652901376 +002212025111518475810835720955508236288 +002212025111519465110835735772503699456 +002212025111519091510835726311835807744 +002212025111519223010835729646320070656 +002212025111519373710835733447533887488 +002212025111520110510835741872200286208 +002212025111519450710835735338791661568 +002212025111520153310835742995426545664 +002212025111520333310835747524196933632 +002212025111522003710835769434389557248 +002212025111523042410835785488830517248 +002212025111523044110835785558330155008 +002212025111523245410835790647446949888 +002212025111601470210835826415758446592 +002212025111602381110835839288622661632 +002212025111605414110835885469092503552 +002212025111605523510835888210758033408 +002212025111606023110835890712664555520 +002212025111606194610835895052884180992 +002212025111606530810835903448714788864 +002212025111607154510835909142427951104 +002212025111607353010835914109620535296 +002212025111607142310835908794913062912 +002212025111607340510835913753217966080 +002212025111607460710835916781736108032 +002212025111608012010835920610040979456 +002212025111607415210835915712561901568 +002212025111608104110835922966379995136 +002212025111607512010835918095434100736 +002212025111608242210835926407957426176 +002212025111608432210835931189573021696 +002212025111608233310835926203342499840 +002212025111609011510835935688320569344 +002212025111609173710835939808892882944 +002212025111608591510835935186010705920 +002212025111609081610835937456618147840 +002212025111609163010835939527715147776 +002212025111610195310835955480280633344 +002212025111610023110835951106791788544 +002212025111611001410835965633960833024 +002212025111611514910835978616346730496 +002212025111611403910835975803126358016 +002212025111612031110835981475960266752 +002212025111611200010835970605838479360 +002212025111611340510835974150037893120 +002212025111612051410835981989703811072 +002212025111612284710835987917991796736 +002212025111612005910835980920915443712 +002212025111612523010835993885588824064 +002212025111612524810835993960771690496 +002212025111612455510835992229480435712 +002212025111613040110835996782661685248 +002212025111613392710836005700142043136 +002212025111613344410836004514290663424 +002212025111613334610836004272916881408 +002212025111613364110836005003531063296 +002212025111613403810836005999380480000 +002212025111614114110836013811921780736 +002212025111613441110836006891009830912 +002212025111614323910836019090151419904 +002212025111614530210836024221345492992 +002212025111615091110836028283323392000 +002212025111615083710836028142231166976 +002212025111615270310836032780678414336 +002212025111614594710836025917748490240 +002212025111615262910836032638126608384 +002212025111615293410836033414534217728 +002212025111615340110836034535000600576 +002212025111615493210836038438517673984 +002212025111615035410836026954295214080 +002212025111615551710836039886487920640 +002212025111616080710836043114491346944 +002212025111615392810836035904398893056 +002212025111616120610836044117882114048 +002212025111615570810836040350575067136 +002212025111615553510836039961633050624 +002212025111616190810836045887257636864 +002212025111616145410836044820302200832 +002212025111617033310836057063240732672 +002212025111617051810836057505928548352 +002212025111616512210836054000136290304 +002212025111616284210836048293299200000 +002212025111617121210836059240138993664 +002212025111617194210836061130511806464 +002212025111617010310836056437601542144 +002212025111617395010836066196736135168 +002212025111618030910836072062210252800 +002212025111617354410836065166061445120 +002212025111617161410836060256360144896 +002212025111618150610836075069857542144 +002212025111618090710836073563372609536 +002212025111618164610836075489095032832 +002212025111618141810836074871462776832 +002212025111618065110836072994247499776 +002212025111619032010836087208831844352 +002212025111618350510836080098102419456 +002212025111619104510836089077624950784 +002212025111619130010836089641410719744 +002212025111619050310836087642329939968 +002212025111619311510836094235138281472 +002212025111619361710836095503575482368 +002212025111619104510836089074609229824 +002212025111619190010836091152815583232 +002212025111619290910836093707889090560 +002212025111619550010836100212285710336 +002212025111620023910836102138154905601 +002212025111620101110836104031832838144 +002212025111620524210836114731695292416 +002212025111620013410836101865902649344 +002212025111621054110836117999704043520 +002212025111620303010836109144307728384 +002212025111620570710836115843550777344 +002212025111621032110836117412740534272 +002212025111621344210836125302431899648 +002212025111621400010836126636992319488 +002212025111621095310836119057377484800 +002212025111622012010836132004233453568 +002212025111621474210836128572307099648 +002212025111700103710836164539566989312 +002212025111703491710836219569414311936 +002212025111706230810836258287529451520 +002212025111707154310836271521401638912 +002212025111707215110836273064431562752 +002212025111708004510836282853190504448 +002212025111707390210836277387756523520 +002212025111707444710836278832824262656 +002212025111707473510836279539207962624 +002212025111707491010836279938077880320 +002212025111708104310836285360486674432 +002212025111708061310836284226485305344 +002212025111707382710836277240557412352 +002212025111708292910836290084728442880 +002212025111708554910836296711980417024 +002212025111708294810836290164365676544 +002212025111708502910836295366909079552 +002212025111709384010836307494105726976 +002212025111709174110836302215746138112 +002212025111709173010836302167138308096 +002212025111710093810836315287105785856 +002212025111710271610836319725769949184 +002212025111710221910836318479101132800 +002212025111710504610836325639319142401 +002212025111710345310836321642134863872 +002212025111711234810836333950412210176 +002212025111711110810836330763546472448 +002212025111711283410836335151686057984 +002212025111711334610836336461294579712 +002212025111711504410836340732039741440 +002212025111711431210836338832472997888 +002212025111711211410836333307823853568 +002212025111711392410836337879149678592 +002212025111711325110836336228883996672 +002212025111712034610836344008944582656 +002212025111711441210836339083976044544 +002212025111712140110836346589683101696 +002212025111711363110836337151911866368 +002212025111711535210836341519906209792 +002212025111712081710836345145575800832 +002212025111711565110836342270116200448 +002212025111712373210836352509016244224 +002212025111712262010836349688590077952 +002212025111712521710836356220060889088 +002212025111713163710836362344977862656 +002212025111713272810836365075700469760 +002212025111713400310836368238490918912 +002212025111713582810836372874123751424 +002212025111713472510836370092935294976 +002212025111714215310836378768546951168 +002212025111714355210836382285995134976 +002212025111714124910836376485562105856 +002212025111714484210836385516578115584 +002212025111715003810836388518001094656 +002212025111714554810836387303842344960 +002212025111715251010836394695019667456 +002212025111714350010836382069187362816 +002212025111715373810836397830123503616 +002212025111715463610836400088785567744 +002212025111716101910836406054318964736 +002212025111716063310836405108956434432 +002212025111715525310836401670239510528 +002212025111715304010836396079433588736 +002212025111716134610836406925698240512 +002212025111716212010836408829979373568 +002212025111716374810836412972462731264 +002212025111716194610836408435706388480 +002212025111715565910836402700318621696 +002212025111716573510836417951286108160 +002212025111716365110836412733760704512 +002212025111717082110836420658856161280 +002212025111717203210836423728415567872 +002212025111717120910836421618974298112 +002212025111717165410836422813403009024 +002212025111716590010836418308116529152 +002212025111717315910836426608660901888 +002212025111717160710836422613858992128 +002212025111717380710836428153913831424 +002212025111718101710836436247418966016 +002212025111718054710836435113476292608 +002212025111718060710836435196859056128 +002212025111718032010836434496049586176 +002212025111717380710836428153204973568 +002212025111718031110836434459479461888 +002212025111718144310836437361283510272 +002212025111718141010836437224494673920 +002212025111718031010836434455947837440 +002212025111718291210836441007362609152 +002212025111718200910836438728190439424 +002212025111718231110836439491448872960 +002212025111718235410836439675633332224 +002212025111719004010836448924962865152 +002212025111718504110836446414109872128 +002212025111719222910836454417613684736 +002212025111718405110836443937587286016 +002212025111718480610836445762310840320 +002212025111718572910836448126270898176 +002212025111718504710836446437904171008 +002212025111719333310836457200052027392 +002212025111719153510836452678902689792 +002212025111719092710836451136992673792 +002212025111719281510836455865818742784 +002212025111720093310836466262613356544 +002212025111719140210836452291466432512 +002212025111719195310836453762840854528 +002212025111719514210836461767804272640 +002212025111719272510836455656632029184 +002212025111719484110836461009910308864 +002212025111720265110836470615214624768 +002212025111720150910836467672729985024 +002212025111720370710836473200340307968 +002212025111721474610836490979583934464 +002212025111722400010836504121613422592 +002212025111721491210836491337081253888 +002212025111722465810836505877932122112 \ No newline at end of file diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java index dc8562b02..0629b9fef 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java @@ -15,6 +15,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.time.temporal.ChronoUnit; import java.util.*; @@ -53,6 +54,9 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = + DateTimeFormatter.ofPattern(YYYY_MM_DD_HH_MM_SS); + /** * 获取当前Date型日期 * @@ -251,10 +255,10 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { */ public static long minutesSince(String dateString) { // 定义日期时间格式 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 解析给定的日期字符串 - LocalDateTime givenDateTime = LocalDateTime.parse(dateString, formatter); + LocalDateTime givenDateTime = LocalDateTime.parse(dateString, DEFAULT_DATE_TIME_FORMATTER); // 获取当前时间 LocalDateTime now = LocalDateTime.now(); @@ -283,6 +287,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return Date.from(instant); } + /** + * LocalDate转Date + * + * @param localDate + * @return + */ public static Date localDate2Date(LocalDate localDate) { if (localDate == null) { return null; @@ -393,8 +403,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { // 判断是否包含时间部分 if (trimmed.contains(":")) { // 包含时间部分,按完整日期时间格式解析 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - return DateUtils.formatDateTime(LocalDateTime.parse(trimmed, formatter).toLocalDate().atStartOfDay()); + // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + return DateUtils.formatDateTime(LocalDateTime.parse(trimmed, DEFAULT_DATE_TIME_FORMATTER).toLocalDate().atStartOfDay()); } else { // 不包含时间部分,按日期格式解析 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -416,8 +426,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { // 判断是否包含时间部分 if (trimmed.contains(":")) { // 包含时间部分,按完整日期时间格式解析 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - return DateUtils.formatDateTime(LocalDateTime.parse(trimmed, formatter).toLocalDate().atTime(LocalTime.MAX)); + // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + return DateUtils.formatDateTime(LocalDateTime.parse(trimmed, DEFAULT_DATE_TIME_FORMATTER).toLocalDate().atTime(LocalTime.MAX)); } else { // 不包含时间部分,按日期格式解析 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -425,6 +435,32 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { } } + /** + * 判断时间是否是今天 + * + * @param dateTimeStr 日期时间字符串,格式为 "yyyy-MM-dd HH:mm:ss" + * @return + */ + public static boolean isToday(String dateTimeStr) { + // 判断入参 时间是否在 今天 + if (dateTimeStr == null || dateTimeStr.trim().isEmpty()) { + return false; + } + + try { + // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, DEFAULT_DATE_TIME_FORMATTER); + LocalDate date = dateTime.toLocalDate(); + LocalDate today = LocalDate.now(); + + return date.isEqual(today); + } catch (DateTimeParseException e) { + // 如果解析失败,说明格式不正确 + return false; + } + } + + public enum IntervalType { DAY, HOUR, @@ -632,6 +668,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return c.getTime(); } + /** + * 时间格式化 + * + * @param date + * @return + */ public static String formatDateTime(Date date) { if (date == null) { return ""; @@ -640,6 +682,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return simpleDateFormat.format(date); } + /** + * 时间格式化 + * @param localDateTime + * @return + */ public static String formatDateTime(LocalDateTime localDateTime) { if (localDateTime == null) { return ""; @@ -648,6 +695,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return formatDateTime(date); } + /** + * 时间格式化 + * @param localTime + * @return + */ public static String formatDateTime(LocalTime localTime) { if (localTime == null) { return ""; @@ -1239,7 +1291,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return LocalDateTime.of( LocalDate.now(), LocalTime.parse(timeStr, DateTimeFormatter.ofPattern("HH:mm")).withSecond(0) - ).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + ).format(DEFAULT_DATE_TIME_FORMATTER); } @@ -1251,15 +1303,15 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public static String convertDateToDateTime(String dateStr) { LocalDate endLocalDate = LocalDate.parse(dateStr); LocalDateTime endLocalDateTime = endLocalDate.atStartOfDay(); - return endLocalDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + return endLocalDateTime.format(DEFAULT_DATE_TIME_FORMATTER); } public static String getEndTime(String dateStr) { DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date = LocalDate.parse(dateStr, inputFormatter); LocalDateTime endTime = date.atTime(23, 59, 59); - DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - return endTime.format(outputFormatter); + // DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + return endTime.format(DEFAULT_DATE_TIME_FORMATTER); } } diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java index 57449d21b..550ba462c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java @@ -678,8 +678,8 @@ public class AdapayService { // if (CollectionUtils.isNotEmpty(withdrawInfoVOS)) { // totalWithdraw = withdrawInfoVOS.stream().map(WithdrawInfoVO::getCashAmt).reduce(BigDecimal.ZERO, BigDecimal::add); // } - BigDecimal totalWithdraw = clearingWithdrawInfoService.queryTotalWithdraw(merchantId); - vo.setTotalWithdraw(totalWithdraw); + // BigDecimal totalWithdraw = clearingWithdrawInfoService.queryTotalWithdraw(merchantId); + vo.setTotalWithdraw(clearingWithdrawInfoService.queryTotalWithdraw(merchantId)); // 在途金额 BigDecimal pendingAmount = BigDecimal.ZERO; @@ -692,6 +692,13 @@ public class AdapayService { .reduce(BigDecimal.ZERO, BigDecimal::add); } vo.setPendingAmount(pendingAmount); + + // 查询今天的提现金额 + BigDecimal todayWithdrawalAmount = clearingWithdrawInfoService.queryTodayWithdrawalAmount(merchantId); + // 如果大于0,则重新更新LastAvlBalance + if (todayWithdrawalAmount.compareTo(BigDecimal.ZERO) > 0) { + vo.setLastAvlBalance(BigDecimal.ZERO.max(vo.getLastAvlBalance().subtract(todayWithdrawalAmount))); + } return vo; } diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayAccountBalanceVO.java b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayAccountBalanceVO.java index 67561da07..5d1583479 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayAccountBalanceVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayAccountBalanceVO.java @@ -22,7 +22,7 @@ public class AdapayAccountBalanceVO { // 冻结余额,当配置了自动结算功能,在每日发起结算时会将可用余额转为冻结金额。该部分金额不允许取现。 private BigDecimal frzBalance; - // 昨日日终余额。 + // 昨日日终余额。(页面显示为可提现金额) private BigDecimal lastAvlBalance; // 汇付会员id diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java index 50e148b84..2ee39d954 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java @@ -1,6 +1,7 @@ package com.jsowell.pile.mapper; import com.jsowell.pile.domain.AdapayUnsplitRecord; +import com.jsowell.pile.vo.AdapayUnsplitRecordVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -29,4 +30,6 @@ public interface AdapayUnsplitRecordMapper { int batchInsert(@Param("list") List list); List queryUnsplitOrders(@Param("startTime") String startTime, @Param("endTime") String endTime); + + List queryList(); } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java index af3738bfb..ba7d84052 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayUnsplitRecordService.java @@ -1,6 +1,8 @@ package com.jsowell.pile.service; import com.jsowell.pile.domain.AdapayUnsplitRecord; +import com.jsowell.pile.vo.AdapayUnsplitRecordVO; + import java.util.List; public interface AdapayUnsplitRecordService{ @@ -27,4 +29,6 @@ public interface AdapayUnsplitRecordService{ int batchInsert(List list); List queryUnsplitOrders(String startTime, String endTime); + + List queryList(); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/ClearingWithdrawInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/ClearingWithdrawInfoService.java index aaf5c8d1c..4ae1855c1 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/ClearingWithdrawInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/ClearingWithdrawInfoService.java @@ -43,4 +43,7 @@ public interface ClearingWithdrawInfoService{ PageResponse queryWithdrawList(QueryWithdrawListDTO dto) throws BaseAdaPayException; BigDecimal queryTotalWithdraw(String merchantId); + + // 获取今日提现总额 + BigDecimal queryTodayWithdrawalAmount(String merchantId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ClearingWithdrawInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ClearingWithdrawInfoServiceImpl.java index c827c1966..1cb4c9327 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ClearingWithdrawInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ClearingWithdrawInfoServiceImpl.java @@ -5,7 +5,6 @@ import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; import com.huifu.adapay.core.exception.BaseAdaPayException; import com.jsowell.adapay.dto.QueryWithdrawListDTO; -import com.jsowell.adapay.service.AdapayService; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.util.DateUtils; @@ -13,11 +12,9 @@ import com.jsowell.common.util.StringUtils; import com.jsowell.pile.domain.ClearingWithdrawInfo; import com.jsowell.pile.mapper.ClearingWithdrawInfoMapper; import com.jsowell.pile.service.ClearingWithdrawInfoService; -import com.jsowell.pile.service.PileMerchantInfoService; import com.jsowell.pile.vo.web.ClearingBillVO; import com.jsowell.pile.vo.web.WithdrawInfoVO; import org.apache.commons.collections4.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -164,4 +161,36 @@ public class ClearingWithdrawInfoServiceImpl implements ClearingWithdrawInfoServ return clearingWithdrawInfoMapper.queryTotalWithdraw(merchantId); } + /** + * 查询今日提现总额 + * @param merchantId + * @return + */ + @Override + public BigDecimal queryTodayWithdrawalAmount(String merchantId) { + BigDecimal todayWithdrawalAmount = BigDecimal.ZERO; + QueryWithdrawListDTO dto = QueryWithdrawListDTO.builder() + .merchantId(merchantId) + .pageNum(1) + .pageSize(10) + .build(); + PageResponse pageResponse = null; + try { + pageResponse = queryWithdrawList(dto); + } catch (BaseAdaPayException e) { + throw new RuntimeException(e); + } + + if (pageResponse != null && pageResponse.getList() != null && !pageResponse.getList().isEmpty()) { + List list = (List) pageResponse.getList(); + for (WithdrawInfoVO vo : list) { + // 如果applicationTime在当天,则加到todayWithdrawalAmount中 + if (DateUtils.isToday(vo.getApplicationTime())) { + todayWithdrawalAmount = todayWithdrawalAmount.add(vo.getCashAmt()); + } + } + } + return todayWithdrawalAmount; + } + } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java new file mode 100644 index 000000000..2a1c9c56d --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java @@ -0,0 +1,30 @@ +package com.jsowell.pile.vo; + +import lombok.Data; + +@Data +public class AdapayUnsplitRecordVO { + // 订单号 + private String orderCode; + + // 支付金额 + private String payAmount; + + // 结算金额 + private String settleAmount; + + // 确认分账金额 + private String confirmedSplitAmount; + + // 待分账金额 + private String waitSplitAmount; + + // 应退款金额 + private String refundAmount; + + // 已退款金额 + private String paidAmount; + + // 待退款金额 + private String refundPayAmount; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java index 363164f25..b3b26b4d6 100644 --- a/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/web/controller/pile/AdapayUnsplitRecordServiceImpl.java @@ -3,6 +3,7 @@ package com.jsowell.web.controller.pile; import com.jsowell.pile.domain.AdapayUnsplitRecord; import com.jsowell.pile.mapper.AdapayUnsplitRecordMapper; import com.jsowell.pile.service.AdapayUnsplitRecordService; +import com.jsowell.pile.vo.AdapayUnsplitRecordVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -73,4 +74,9 @@ public class AdapayUnsplitRecordServiceImpl implements AdapayUnsplitRecordServic return adapayUnsplitRecordMapper.queryUnsplitOrders(startTime, endTime); } + @Override + public List queryList() { + return adapayUnsplitRecordMapper.queryList(); + } + } diff --git a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml index bb03de5fa..5d9201e49 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml @@ -706,4 +706,20 @@ and settle_amount is null and order_code like 'C%' + + \ No newline at end of file diff --git a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java index 711c73643..58994ffa8 100644 --- a/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java +++ b/jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java @@ -411,11 +411,15 @@ public class JsowellTask { // processUnSettledOrderOld(); // 旧方法 for (int i = 0; i < 35; i++) { int batchNum = i + 1; - processUnSettledOrderNew(batchNum); // 新方法 + processUnSettledOrderV1(batchNum); // 新方法 } } - private void processUnSettledOrderNew(int batchNum) { + /** + * V1方法,获取退款金额与结算金额 + * @param batchNum + */ + private void processUnSettledOrderV1(int batchNum) { String startTime = "2025-01-01 00:00:00"; String endTime = "2025-12-31 23:59:59"; @@ -456,6 +460,10 @@ public class JsowellTask { log.info("第{}批次,共更新{}条数据", batchNum, updateList.size()); } + private void processUnSettledOrderV2(int batchNum) { + + } + // private void processUnSettledOrderOld() { // String startTime = "2023-01-01 00:00:00"; // String endTime = "2024-12-31 23:59:59"; From 392b3e74a52ee77ac9019df28df52e240513463d Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 18 Nov 2025 14:05:26 +0800 Subject: [PATCH 26/38] =?UTF-8?q?update=20=E5=8F=AF=E6=8F=90=E7=8E=B0?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E5=87=8F=E5=8E=BB=E5=BD=93=E5=A4=A9=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/adapay/service/AdapayService.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java index 550ba462c..ed1f2b6ae 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java @@ -683,18 +683,26 @@ public class AdapayService { // 在途金额 BigDecimal pendingAmount = BigDecimal.ZERO; + BigDecimal todayWithdrawalAmount = BigDecimal.ZERO; List withdrawInfoVOS = clearingWithdrawInfoService.selectByMerchantId(merchantId); - log.info("==查询提现在途金额param:{}, result:{}", JSON.toJSONString(withdrawInfoVOS), JSON.toJSONString(pendingAmount)); + // log.info("==查询提现在途金额param:{}, result:{}", JSON.toJSONString(withdrawInfoVOS), JSON.toJSONString(pendingAmount)); if (CollectionUtils.isNotEmpty(withdrawInfoVOS)) { pendingAmount = withdrawInfoVOS.stream() .filter(item -> Constants.ZERO.equals(item.getStatusDesc())) .map(WithdrawInfoVO::getCashAmt) .reduce(BigDecimal.ZERO, BigDecimal::add); + + // 查询今天的提现金额 + for (WithdrawInfoVO withdrawInfoVO : withdrawInfoVOS) { + // 如果applicationTime在当天,则加到todayWithdrawalAmount中 + if (DateUtils.isToday(withdrawInfoVO.getApplicationTime())) { + todayWithdrawalAmount = todayWithdrawalAmount.add(withdrawInfoVO.getCashAmt()); + } + } } vo.setPendingAmount(pendingAmount); - // 查询今天的提现金额 - BigDecimal todayWithdrawalAmount = clearingWithdrawInfoService.queryTodayWithdrawalAmount(merchantId); + // BigDecimal todayWithdrawalAmount = clearingWithdrawInfoService.queryTodayWithdrawalAmount(merchantId); // 如果大于0,则重新更新LastAvlBalance if (todayWithdrawalAmount.compareTo(BigDecimal.ZERO) > 0) { vo.setLastAvlBalance(BigDecimal.ZERO.max(vo.getLastAvlBalance().subtract(todayWithdrawalAmount))); From 80498404da07f8ea6a91c95c99135a9bcc4d82cb Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 18 Nov 2025 14:09:46 +0800 Subject: [PATCH 27/38] =?UTF-8?q?del=20=E6=9F=A5=E8=AF=A2=E4=BB=8A?= =?UTF-8?q?=E6=97=A5=E6=8F=90=E7=8E=B0=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ClearingWithdrawInfoService.java | 2 -- .../impl/ClearingWithdrawInfoServiceImpl.java | 32 ------------------- 2 files changed, 34 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/ClearingWithdrawInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/ClearingWithdrawInfoService.java index 4ae1855c1..2717c7560 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/ClearingWithdrawInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/ClearingWithdrawInfoService.java @@ -44,6 +44,4 @@ public interface ClearingWithdrawInfoService{ BigDecimal queryTotalWithdraw(String merchantId); - // 获取今日提现总额 - BigDecimal queryTodayWithdrawalAmount(String merchantId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ClearingWithdrawInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ClearingWithdrawInfoServiceImpl.java index 1cb4c9327..15c82f981 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ClearingWithdrawInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ClearingWithdrawInfoServiceImpl.java @@ -161,36 +161,4 @@ public class ClearingWithdrawInfoServiceImpl implements ClearingWithdrawInfoServ return clearingWithdrawInfoMapper.queryTotalWithdraw(merchantId); } - /** - * 查询今日提现总额 - * @param merchantId - * @return - */ - @Override - public BigDecimal queryTodayWithdrawalAmount(String merchantId) { - BigDecimal todayWithdrawalAmount = BigDecimal.ZERO; - QueryWithdrawListDTO dto = QueryWithdrawListDTO.builder() - .merchantId(merchantId) - .pageNum(1) - .pageSize(10) - .build(); - PageResponse pageResponse = null; - try { - pageResponse = queryWithdrawList(dto); - } catch (BaseAdaPayException e) { - throw new RuntimeException(e); - } - - if (pageResponse != null && pageResponse.getList() != null && !pageResponse.getList().isEmpty()) { - List list = (List) pageResponse.getList(); - for (WithdrawInfoVO vo : list) { - // 如果applicationTime在当天,则加到todayWithdrawalAmount中 - if (DateUtils.isToday(vo.getApplicationTime())) { - todayWithdrawalAmount = todayWithdrawalAmount.add(vo.getCashAmt()); - } - } - } - return todayWithdrawalAmount; - } - } From d1c8827b4fe99ae95b89866d21c5e7472af1a741 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 19 Nov 2025 11:55:05 +0800 Subject: [PATCH 28/38] =?UTF-8?q?update=20=E5=A4=84=E7=90=86=E6=9C=AA?= =?UTF-8?q?=E5=88=86=E8=B4=A6=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/test/java/PaymentTestController.java | 134 +++++++++++++++++- .../pile/domain/AdapayUnsplitRecord.java | 30 +++- .../mapper/AdapayUnsplitRecordMapper.java | 2 + .../pile/vo/AdapayUnsplitRecordVO.java | 5 +- .../mapper/pile/AdapayUnsplitRecordMapper.xml | 9 +- .../com/jsowell/quartz/task/JsowellTask.java | 25 +++- 6 files changed, 191 insertions(+), 14 deletions(-) diff --git a/jsowell-admin/src/test/java/PaymentTestController.java b/jsowell-admin/src/test/java/PaymentTestController.java index 3a68245d3..58a5c7d1d 100644 --- a/jsowell-admin/src/test/java/PaymentTestController.java +++ b/jsowell-admin/src/test/java/PaymentTestController.java @@ -9,6 +9,7 @@ import com.huifu.adapay.model.Payment; import com.huifu.adapay.model.PaymentReverse; import com.huifu.adapay.model.Refund; import com.jsowell.JsowellApplication; +import com.jsowell.adapay.common.DivMember; import com.jsowell.adapay.common.PaymentConfirmInfo; import com.jsowell.adapay.dto.PaymentConfirmParam; import com.jsowell.adapay.dto.QueryPaymentConfirmDTO; @@ -21,9 +22,13 @@ import com.jsowell.adapay.vo.AdapayCorpMemberVO; import com.jsowell.adapay.vo.OrderSplitResult; import com.jsowell.api.uniapp.customer.TempController; import com.jsowell.common.constant.CacheConstants; +import com.jsowell.common.constant.Constants; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.ykc.ScenarioEnum; +import com.jsowell.common.util.AdapayUtil; import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.PageUtils; +import com.jsowell.pile.domain.AdapayUnsplitRecord; import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.OrderDetail; import com.jsowell.pile.domain.OrderUnsplitRecord; @@ -801,18 +806,135 @@ public class PaymentTestController { int pageSize = 3; PageHelper.startPage(pageNum, pageSize); List adapayUnsplitRecordVOS = adapayUnsplitRecordService.queryList(); + + // 分账账户 + List divMemberList = Lists.newArrayList(); for (AdapayUnsplitRecordVO adapayUnsplitRecordVO : adapayUnsplitRecordVOS) { - System.out.println(adapayUnsplitRecordVO); + String orderCode = adapayUnsplitRecordVO.getOrderCode(); + String paymentId = adapayUnsplitRecordVO.getPaymentId(); // 获取待分账金额 - String waitSplitAmount = adapayUnsplitRecordVO.getWaitSplitAmount(); + BigDecimal waitSplitAmount = adapayUnsplitRecordVO.getWaitSplitAmount() != null ? new BigDecimal(adapayUnsplitRecordVO.getWaitSplitAmount()) : BigDecimal.ZERO; // 如果waitSplitAmount > 0, 调用分账接口 - if (waitSplitAmount != null && !"".equals(waitSplitAmount)) { + if (waitSplitAmount.compareTo(BigDecimal.ZERO) > 0) { + logger.info("订单{}, 待分账金额{}", orderCode, waitSplitAmount); + DivMember divMember = new DivMember(); + divMember.setMemberId(Constants.ZERO); // 若是商户本身时,传入0 + divMember.setAmount(AdapayUtil.formatAmount(waitSplitAmount)); + divMember.setFeeFlag(Constants.Y); + divMemberList.add(divMember); // 调用分账接口 + PaymentConfirmParam param = PaymentConfirmParam.builder() + .paymentId(paymentId) + .divMemberList(divMemberList) + .confirmAmt(waitSplitAmount) // 订单结算金额 + 保险金额 + .orderCode(orderCode) + .wechatAppId(wechatAppId1) + .build(); + PaymentConfirmResponse paymentConfirmRequest = adapayService.createPaymentConfirmRequest(param); + if (paymentConfirmRequest.isSuccess()) { + logger.info("分账成功, 订单号:{}, 分账信息:{}", orderCode, JSON.toJSONString(paymentConfirmRequest)); + } else { + logger.info("分账失败, 订单号:{}, 分账信息:{}", orderCode, JSON.toJSONString(paymentConfirmRequest)); + } + divMemberList.clear(); } - // 获取待退款金额 - String refundPayAmount = adapayUnsplitRecordVO.getRefundPayAmount(); + // 获取待退款金额 (sql已经计算过了,refundPayAmount = 订单表中应退款金额 - 汇付查询的已退款金额) + // BigDecimal refundPayAmount = adapayUnsplitRecordVO.getRefundPayAmount() != null ? new BigDecimal(adapayUnsplitRecordVO.getRefundPayAmount()) : BigDecimal.ZERO; + // if (refundPayAmount.compareTo(BigDecimal.ZERO) > 0) { + // // 调用退款接口 + // logger.info("订单号:{}, 退款金额:{}", orderCode, refundPayAmount); + // PaymentReverseResponse response = adapayService.createPaymentReverseRequest(paymentId, refundPayAmount, + // wechatAppId1, "", ScenarioEnum.ORDER.getValue(), orderCode); + // } } - PageHelper.clearPage(); + + } + + @Test + public void queryAdapayData() { + String startTime = "2025-01-01 00:00:00"; + String endTime = "2025-12-31 23:59:59"; + + // 查询未分帐订单 + PageUtils.startPage(1, 99999); + List list = adapayUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + + // 需要更新的数据 + List updateList = Lists.newArrayList(); + + List listA = Lists.newArrayList(); + List listB = Lists.newArrayList(); + + // 实用并行流处理list + list.parallelStream().forEach(adapayUnsplitRecord -> { + QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO(); + dto.setWechatAppId(Constants.DEFAULT_APP_ID); + dto.setPaymentId(adapayUnsplitRecord.getPaymentId()); + QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(dto); + List paymentConfirms = response.getPaymentConfirms(); + if (CollectionUtils.isEmpty(paymentConfirms)) { + return; + } + PaymentConfirmInfo paymentConfirmInfo = paymentConfirms.get(0); + String orderCode = adapayUnsplitRecord.getOrderCode(); + BigDecimal confirmedAmt = new BigDecimal(paymentConfirmInfo.getConfirmedAmt()); // 汇付返回分账金额 + BigDecimal confirmedSplitAmount = adapayUnsplitRecord.getConfirmedSplitAmount(); // 表中记录分账金额 + BigDecimal reservedAmt = new BigDecimal(paymentConfirmInfo.getReservedAmt()); // 汇付返回退款金额 + BigDecimal refundAmount = adapayUnsplitRecord.getRefundAmount(); // 表中记录退款金额 + logger.info("订单号:{}, 汇付返回分账金额:{}, 表中记录分账金额:{}, 汇付返回退款金额:{}, 表中记录退款金额:{}", + orderCode, confirmedAmt, confirmedSplitAmount, reservedAmt, refundAmount); + + boolean updateFlag = false; + + // 如果汇付返回分账金额与表中记录分账金额不一致,则更新表 + if (confirmedAmt.compareTo(confirmedSplitAmount) > 0) { + adapayUnsplitRecord.setConfirmedSplitAmount(confirmedAmt); + updateFlag = true; + } else if (confirmedAmt.compareTo(confirmedSplitAmount) < 0) { + listA.add(JSONObject.of("orderCode", orderCode, "confirmedAmt", confirmedAmt, "confirmedSplitAmount", confirmedSplitAmount)); + } + + // 如果汇付返回退款金额与表中记录退款金额不一致,则更新表 + if (reservedAmt.compareTo(refundAmount) > 0) { + adapayUnsplitRecord.setRefundAmount(reservedAmt); + updateFlag = true; + } else if (reservedAmt.compareTo(refundAmount) < 0) { + listB.add(JSONObject.of("orderCode", orderCode, "reservedAmt", reservedAmt, "refundAmount", refundAmount)); + } + + if (updateFlag) { + updateList.add(adapayUnsplitRecord); + } + }); + + + // if (CollectionUtils.isNotEmpty(updateList)) { + // // 分批处理updateList, 每批处理1000条数据 + // List> partition = Lists.partition(updateList, 1000); + // partition.parallelStream().forEach(list2 -> { + // adapayUnsplitRecordService.updateBatchSelective(list2); + // }); + // } + logger.info("第{}批处理数据,更新表成功, 共更新{}条数据", 1, updateList.size()); + logger.info("listA共更新{}条数据, {}", listA.size(), listA); + logger.info("listB共更新{}条数据, {}", listB.size(), listB); + } + + @Test + public void queryAdapayV2() { + String paymentId = "002212025070321462910786843519524786176"; + + QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO(); + dto.setWechatAppId(Constants.DEFAULT_APP_ID); + dto.setPaymentId(paymentId); + QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(dto); + List paymentConfirms = response.getPaymentConfirms(); + if (CollectionUtils.isEmpty(paymentConfirms)) { + return; + } + PaymentConfirmInfo paymentConfirmInfo = paymentConfirms.get(0); + logger.info("{}", JSON.toJSONString(paymentConfirmInfo)); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java index 316f7c607..b816a3150 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java @@ -1,13 +1,16 @@ package com.jsowell.pile.domain; -import java.math.BigDecimal; -import java.util.Date; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; +import java.util.Date; @Data @Accessors(chain = true) @@ -100,4 +103,27 @@ public class AdapayUnsplitRecord { * 更新时间 */ private Date updateTime; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) + .append("id", id) + .append("merchantCode", merchantCode) + .append("payTime", payTime) + .append("paymentId", paymentId) + .append("orderNo", orderNo) + .append("payAmount", payAmount) + .append("confirmedSplitAmount", confirmedSplitAmount) + .append("refundAmount", refundAmount) + .append("paymentRevokeAmount", paymentRevokeAmount) + .append("remainingSplitAmount", remainingSplitAmount) + .append("orderCode", orderCode) + .append("pileType", pileType) + .append("dueRefundAmount", dueRefundAmount) + .append("settleAmount", settleAmount) + .append("refundFlag", refundFlag) + .append("splitFlag", splitFlag) + .append("updateTime", updateTime) + .toString(); + } } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java index 2ee39d954..60e7f9218 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java @@ -3,9 +3,11 @@ package com.jsowell.pile.mapper; import com.jsowell.pile.domain.AdapayUnsplitRecord; import com.jsowell.pile.vo.AdapayUnsplitRecordVO; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; import java.util.List; +@Repository public interface AdapayUnsplitRecordMapper { int deleteByPrimaryKey(Integer id); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java index 2a1c9c56d..c4c72d4e8 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java @@ -7,6 +7,9 @@ public class AdapayUnsplitRecordVO { // 订单号 private String orderCode; + // 支付ID + private String paymentId; + // 支付金额 private String payAmount; @@ -23,7 +26,7 @@ public class AdapayUnsplitRecordVO { private String refundAmount; // 已退款金额 - private String paidAmount; + private String paidAmount; // 待退款金额 private String refundPayAmount; diff --git a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml index 5d9201e49..eeb45595b 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml @@ -702,14 +702,15 @@ + + + + @@ -179,4 +180,99 @@ where order_code = #{orderCode,jdbcType=VARCHAR} + + + insert into charge_algorithm_record + + id, + order_code, + task_id, + web_url, + pdf_url, + score, + capacity_metrics, + energy_indicator, + consistency, + temp_consistency, + volt_consistency, + capacity_consistency, + sot, + thermal_runaway, + cooling, + seal, + current_soc, + soc_alarm, + temp_diff_alarm, + temp_rise_alarm, + max_allowable_voltage_alarm, + max_allowable_electricity_alarm, + security_system_level, + failure_metrics, + performance_metrics, + create_time, + + values + + #{id}, + #{orderCode}, + #{taskId}, + #{webUrl}, + #{pdfUrl}, + #{score}, + #{capacityMetrics} + #{energyIndicator}, + #{consistency}, + #{tempConsistency}, + #{voltConsistency}, + #{capacityConsistency}, + #{sot}, + #{thermalRunaway}, + #{cooling}, + #{seal}, + #{currentSoc}, + #{socAlarm}, + #{tempDiffAlarm}, + #{tempRiseAlarm}, + #{maxAllowableVoltageAlarm}, + #{maxAllowableElectricityAlarm}, + #{securitySystemLevel}, + #{failureMetrics}, + #{performanceMetrics}, + #{createTime}, + + on duplicate key update + + id = #{id}, + order_code = #{orderCode}, + task_id = #{taskId}, + web_url = #{webUrl}, + pdf_url = #{pdfUrl}, + score = #{score}, + capacity_metrics = #{capacityMetrics}, + energy_indicator = #{energyIndicator}, + consistency = #{consistency}, + temp_consistency = #{tempConsistency}, + volt_consistency = #{voltConsistency}, + capacity_consistency = #{capacityConsistency}, + sot = #{sot}, + thermal_runaway = #{thermalRunaway}, + cooling = #{cooling}, + seal = #{seal}, + current_soc = #{currentSoc}, + soc_alarm = #{socAlarm}, + temp_diff_alarm = #{tempDiffAlarm}, + temp_rise_alarm = #{tempRiseAlarm}, + max_allowable_voltage_alarm = #{maxAllowableVoltageAlarm}, + max_allowable_electricity_alarm = #{maxAllowableElectricityAlarm}, + security_system_level = #{securitySystemLevel}, + failure_metrics = #{failureMetrics}, + performance_metrics = #{performanceMetrics}, + create_time = #{createTime}, + + + + \ No newline at end of file diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java index eb2c9bf4e..d9e70ae69 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java @@ -9,10 +9,8 @@ import com.jsowell.common.core.domain.ykc.*; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; -import com.jsowell.pile.service.OrderBasicInfoService; -import com.jsowell.pile.service.PileBasicInfoService; -import com.jsowell.pile.service.PileConnectorInfoService; -import com.jsowell.pile.service.PileStationInfoService; +import com.jsowell.pile.domain.ChargeAlgorithmRecord; +import com.jsowell.pile.service.*; import com.jsowell.pile.thirdparty.ParameterConfigData; import com.jsowell.pile.vo.uniapp.customer.OrderVO; import com.jsowell.pile.vo.web.PileConnectorInfoVO; @@ -70,6 +68,8 @@ public class BatteryChargeReportService { @Autowired private PileStationInfoService pileStationInfoService; + private ChargeAlgorithmRecordService chargeAlgorithmRecordService; + /** * 通过订单号统一发送充电电池数据获取 taskId * @@ -96,6 +96,16 @@ public class BatteryChargeReportService { Map map = getDatasByOrderVO(orderVO); String taskId = pushInfoGetTaskId(map, stationVO, orderVO); + if (StringUtils.isBlank(taskId)) { + log.error("订单:{} 获取到 taskId 为空", orderCode); + return null; + } + // 存入数据库 + ChargeAlgorithmRecord record = new ChargeAlgorithmRecord(); + record.setOrderCode(orderCode); + record.setTaskId(taskId); + chargeAlgorithmRecordService.insertOrUpdateSelective(record); + return taskId; } @@ -106,11 +116,18 @@ public class BatteryChargeReportService { * @return */ public String getUrlByTaskId(String taskId, String reportType) { - // 根据 taskId 获取链接· - // 默认 web 端 url + String resultUrl = ""; + // 根据 taskId 获取链接 + // 通过 taskId 获取充电算法记录 + ChargeAlgorithmRecord record = chargeAlgorithmRecordService.queryRecordByTaskId(taskId); + if (record == null) { + log.error("taskId:{} 获取充电算法记录为空", taskId); + return null; + } + // 默认 1-web 端 url String apiUrl = webDomainPrefix + apiPrefix + "web/" + taskId; if (StringUtils.equals(Constants.TWO, reportType)) { - // 2- pdf 端 + // 2-pdf 端 apiUrl = webDomainPrefix + apiPrefix + "pdf/" + taskId; } // 发送请求 @@ -127,17 +144,23 @@ public class BatteryChargeReportService { // 将 result 部分转换成 BatteryReportResult 对象 // BatteryReportResult batteryReportResult = (BatteryReportResult) resultMap.get("result"); BatteryReportResult batteryReportResult = JSONObject.parseObject(resultMap.get("result").toString(), BatteryReportResult.class);; - String pdfUrl = batteryReportResult.getPdfUrl(); - if (StringUtils.isBlank(pdfUrl)) { - String webUrl = batteryReportResult.getWebUrl(); - return webUrl; + if (StringUtils.equals(Constants.ONE, reportType)) { + // 1-web 端 + resultUrl = batteryReportResult.getWebUrl(); + record.setWebUrl(resultUrl); + }else { + // pdf 端 + resultUrl = batteryReportResult.getPdfUrl(); + record.setPdfUrl(resultUrl); } - return pdfUrl; + // 保存到数据库 + chargeAlgorithmRecordService.updateChargeAlgorithmRecord(record); + return resultUrl; } public static void main(String[] args) { - String taskId = "8b8c2fed952f41d39eb583d0021c9908"; + String taskId = "1e6e42aa613947bf863bc455c2f3357e"; String url = "https://wx.btiger.net/jeecg-boot" + "/api/docking/report/" + "web/" + taskId; String result = HttpRequest.get(url).execute().body(); From 661b4180bcfd57c77dac5f85d09d93dfb0e36f33 Mon Sep 17 00:00:00 2001 From: Lemon Date: Thu, 20 Nov 2025 11:12:56 +0800 Subject: [PATCH 31/38] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=88=97=E8=A1=A8=E9=A1=B5=E6=96=B0=E5=A2=9E=E8=BD=A6?= =?UTF-8?q?=E7=89=8C=E5=8F=B7=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/pile/OrderBasicInfoMapper.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index f28b85ba8..b8da37300 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -2701,6 +2701,7 @@ t1.connector_code as connectorCode, t1.pay_status as payStatus, t1.start_mode as startMode, + t1.plate_number as licensePlateNumber, t1.order_amount as orderAmount, t1.virtual_amount as virtualAmount, t1.settle_amount as settleAmount, From fde1247452900cc917f62396e4c5fe5cd365f5be Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 21 Nov 2025 16:57:57 +0800 Subject: [PATCH 32/38] =?UTF-8?q?update=20=E6=9F=A5=E8=AF=A2sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml index eeb45595b..9cc93db45 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml @@ -714,13 +714,13 @@ pay_amount as payAmount, settle_amount as settleAmount, confirmed_split_amount as confirmedSplitAmount, - GREATEST(0, settle_amount - confirmed_split_amount) AS waitSplitAmount, + GREATEST(0, settle_amount - confirmed_split_amount - payment_revoke_amount) AS waitSplitAmount, due_refund_amount as refundAmount, refund_amount as paidAmount, GREATEST(0, due_refund_amount - refund_amount) AS refundPayAmount FROM adapay_unsplit_record WHERE - (due_refund_amount > confirmed_split_amount) + (settle_amount > confirmed_split_amount - payment_revoke_amount) OR (due_refund_amount > refund_amount) \ No newline at end of file From 92e3d4c8d5786be3183bccc9ba5c1b4e14e2e69d Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Mon, 24 Nov 2025 08:25:59 +0800 Subject: [PATCH 33/38] update --- .../web/controller/pile/MemberBasicInfoController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/MemberBasicInfoController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/MemberBasicInfoController.java index b96106dbb..927265f66 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/MemberBasicInfoController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/MemberBasicInfoController.java @@ -170,8 +170,8 @@ public class MemberBasicInfoController extends BaseController { @PreAuthorize("@ss.hasPermi('member:info:remove')") @Log(title = "会员基础信息", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Integer[] ids) { - return toAjax(memberBasicInfoService.deleteMemberBasicInfoByIds(Lists.newArrayList(ids))); + public AjaxResult remove(@PathVariable("ids") List ids) { + return toAjax(memberBasicInfoService.deleteMemberBasicInfoByIds(ids)); } /** From 0472df17c9add6485758451197a06991f8cb6369 Mon Sep 17 00:00:00 2001 From: Lemon Date: Mon, 24 Nov 2025 09:29:09 +0800 Subject: [PATCH 34/38] =?UTF-8?q?update=20=20=E6=8E=A8=E9=80=81=E5=85=85?= =?UTF-8?q?=E7=94=B5=E6=8A=A5=E5=91=8A=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/SpringBootTestController.java | 2 +- .../TransactionRecordsRequestHandler.java | 51 ++++++++++++------- .../impl/BatteryChargeReportService.java | 16 +++--- 3 files changed, 44 insertions(+), 25 deletions(-) diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 85a6002f5..4fd3a2ef6 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -122,7 +122,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; import java.util.stream.Collectors; -@ActiveProfiles("pre") +@ActiveProfiles("dev") @SpringBootTest(classes = JsowellApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @RunWith(SpringRunner.class) public class SpringBootTestController { diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java index 2267485ee..fee486785 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java @@ -19,6 +19,7 @@ import com.jsowell.common.util.YKCUtils; import com.jsowell.common.util.id.IdUtils; import com.jsowell.common.util.spring.SpringUtils; import com.jsowell.netty.factory.YKCOperateFactory; +import com.jsowell.pile.domain.ChargeAlgorithmRecord; import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.PileBasicInfo; import com.jsowell.pile.dto.SavePileMsgDTO; @@ -86,7 +87,7 @@ public class TransactionRecordsRequestHandler extends AbstractYkcHandler { private PileBasicInfoService pileBasicInfoService; @Autowired - private ChargeAlgorithmService chargeAlgorithmService; + private ChargeAlgorithmRecordService chargeAlgorithmRecordService; @Autowired private PersonalChargingRecordService personalChargingRecordService; @@ -705,14 +706,15 @@ public class TransactionRecordsRequestHandler extends AbstractYkcHandler { } }, thirdpartyTaskExecutor); - // 异步推送充电订单算法平台 + // TODO 异步推送充电订单算法平台 // CompletableFuture.runAsync(() -> { // try { - // String taskId = batteryChargeReportService.getTaskIdByOrderCode(finalOrderBasicInfo.getOrderCode()); - // // String result = chargeAlgorithmService.pushOrderInfo(finalOrderBasicInfo.getOrderCode()); - // log.info("异步推送充电订单算法平台 result taskId:{}", taskId); - // } catch (Exception e) { - // log.error("异步推送充电订单算法平台 error, ", e); + // // 1-web端 + // getReportUrlByOrderCode(finalOrderBasicInfo.getOrderCode(), Constants.ONE); + // // 2-pdf端 + // getReportUrlByOrderCode(finalOrderBasicInfo.getOrderCode(), Constants.TWO); + // }catch (Exception e) { + // log.error("异步推送充电订单算法平台 error", e); // } // }, thirdpartyTaskExecutor); // @@ -737,17 +739,6 @@ public class TransactionRecordsRequestHandler extends AbstractYkcHandler { // } // }, thirdpartyTaskExecutor); - // 异步推送充电订单算法平台 - CompletableFuture.runAsync(() -> { - try { - String result = chargeAlgorithmService.pushOrderInfo(finalOrderBasicInfo.getOrderCode()); - log.info("异步推送充电订单算法平台 result:{}", result); - } catch (Exception e) { - log.error("异步推送充电订单算法平台 error, ", e); - } - }, thirdpartyTaskExecutor); - - CompletableFuture.runAsync(() -> { try { rabbitTemplate.convertAndSend(ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME,ThirdPartyRabbitConstants.ROUTING_KEY_CHARGE_ORDER_PUSH, finalOrderBasicInfo); @@ -764,4 +755,28 @@ public class TransactionRecordsRequestHandler extends AbstractYkcHandler { } + private String getReportUrlByOrderCode(String orderCode, String reportType) { + // 先根据订单号查询报告信息, 对比 taskId + ChargeAlgorithmRecord record = chargeAlgorithmRecordService.queryRecordByOrderCode(orderCode); + String taskId = ""; + if (record == null) { + // 获取新的 taskId + taskId = batteryChargeReportService.getTaskIdByOrderCode(orderCode); + }else { + if (StringUtils.isNotBlank(record.getTaskId())) { + // 如果信息不为空,说明之前推送过该订单的数据,可直接使用该taskId taskId + taskId = record.getTaskId(); + } + } + if (StringUtils.isBlank(taskId)) { + log.info("推送充电订单算法平台 taskId 为空"); + } + log.info("推送充电订单算法平台 taskId:{}", taskId); + // 再根据 tasKId 获取链接 + String url = batteryChargeReportService.getUrlByTaskId(taskId, reportType); + log.info("推送充电订单算法平台 result:{}", url); + + return url; + } + } diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java index d9e70ae69..fa45a3249 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java @@ -145,13 +145,17 @@ public class BatteryChargeReportService { // BatteryReportResult batteryReportResult = (BatteryReportResult) resultMap.get("result"); BatteryReportResult batteryReportResult = JSONObject.parseObject(resultMap.get("result").toString(), BatteryReportResult.class);; if (StringUtils.equals(Constants.ONE, reportType)) { - // 1-web 端 - resultUrl = batteryReportResult.getWebUrl(); - record.setWebUrl(resultUrl); + if (StringUtils.isNotBlank(batteryReportResult.getWebUrl())) { + // 1-web 端 + resultUrl = batteryReportResult.getWebUrl(); + record.setWebUrl(resultUrl); + } }else { - // pdf 端 - resultUrl = batteryReportResult.getPdfUrl(); - record.setPdfUrl(resultUrl); + if (StringUtils.isNotBlank(batteryReportResult.getPdfUrl())) { + // pdf 端 + resultUrl = batteryReportResult.getPdfUrl(); + record.setPdfUrl(resultUrl); + } } // 保存到数据库 chargeAlgorithmRecordService.updateChargeAlgorithmRecord(record); From 91efa36e04782669bb6505165f1ededaec693da4 Mon Sep 17 00:00:00 2001 From: Lemon Date: Mon, 24 Nov 2025 10:05:20 +0800 Subject: [PATCH 35/38] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=85=85=E7=94=B5=E6=8A=A5=E5=91=8A=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/ChargeAlgorithmController.java | 2 +- .../api/uniapp/customer/OrderController.java | 23 +++++++++++++++++++ .../pile}/dto/BatteryChargeReportDTO.java | 2 +- .../mapper/ChargeAlgorithmRecordMapper.java | 2 ++ .../service/ChargeAlgorithmRecordService.java | 8 +++++++ .../ChargeAlgorithmRecordServiceImpl.java | 22 ++++++++++++++++++ 6 files changed, 57 insertions(+), 2 deletions(-) rename {jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform => jsowell-pile/src/main/java/com/jsowell/pile}/dto/BatteryChargeReportDTO.java (89%) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/thirdparty/ChargeAlgorithmController.java b/jsowell-admin/src/main/java/com/jsowell/api/thirdparty/ChargeAlgorithmController.java index a1cc8c279..632b79522 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/thirdparty/ChargeAlgorithmController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/thirdparty/ChargeAlgorithmController.java @@ -4,7 +4,7 @@ import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.response.RestApiResponse; import com.jsowell.common.util.StringUtils; -import com.jsowell.thirdparty.platform.dto.BatteryChargeReportDTO; +import com.jsowell.pile.dto.BatteryChargeReportDTO; import com.jsowell.thirdparty.platform.service.impl.BatteryChargeReportService; import com.jsowell.thirdparty.platform.service.impl.ChargeAlgorithmService; import org.springframework.beans.factory.annotation.Autowired; diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java index 449756f25..a511a9066 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/customer/OrderController.java @@ -21,6 +21,8 @@ import com.jsowell.pile.vo.uniapp.customer.OrderVO; import com.jsowell.pile.vo.uniapp.customer.ParkingOrderVO; import com.jsowell.pile.vo.uniapp.customer.UniAppOrderVO; import com.jsowell.service.OrderService; +import com.jsowell.pile.dto.BatteryChargeReportDTO; +import com.jsowell.thirdparty.platform.service.impl.BatteryChargeReportService; import com.jsowell.wxpay.dto.WechatSendMsgDTO; import com.jsowell.wxpay.service.WxAppletRemoteService; import org.springframework.beans.factory.annotation.Autowired; @@ -53,6 +55,8 @@ public class OrderController extends BaseController { @Autowired private OrderBasicInfoService orderBasicInfoService; + @Autowired + private BatteryChargeReportService batteryChargeReportService; /** * 生成订单/创建订单 @@ -459,4 +463,23 @@ public class OrderController extends BaseController { logger.info("关闭订单:{}", orderCode); return response; } + + /** + * 查询充电报告 + * @param dto + * @return + */ + @PostMapping("/getBatteryReport") + public RestApiResponse getBatteryReport(@RequestBody BatteryChargeReportDTO dto) { + RestApiResponse response = null; + try { + String url = chargeAlgorithmRecordService.getUrlByParams(dto); + response = new RestApiResponse<>(ImmutableMap.of("url", url)); + } catch (Exception e) { + logger.error("查询订单号:{} 的充电报告 error:", dto.getOrderCode(), e); + response = new RestApiResponse<>(e); + } + logger.info("查询订单号:{} 的充电报告 params:{}, result:{}", dto.getOrderCode(), JSON.toJSONString(dto), response); + return response; + } } diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/BatteryChargeReportDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/BatteryChargeReportDTO.java similarity index 89% rename from jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/BatteryChargeReportDTO.java rename to jsowell-pile/src/main/java/com/jsowell/pile/dto/BatteryChargeReportDTO.java index 0aaec2143..71cf5676a 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/BatteryChargeReportDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/BatteryChargeReportDTO.java @@ -1,4 +1,4 @@ -package com.jsowell.thirdparty.platform.dto; +package com.jsowell.pile.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/ChargeAlgorithmRecordMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/ChargeAlgorithmRecordMapper.java index 307d9d53f..12707a678 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/ChargeAlgorithmRecordMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/ChargeAlgorithmRecordMapper.java @@ -3,6 +3,8 @@ package com.jsowell.pile.mapper; import java.util.List; import com.jsowell.pile.domain.ChargeAlgorithmRecord; +import com.jsowell.pile.dto.BatteryChargeReportDTO; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; import org.springframework.stereotype.Repository; diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/ChargeAlgorithmRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/ChargeAlgorithmRecordService.java index 28b2b38be..36fa3c262 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/ChargeAlgorithmRecordService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/ChargeAlgorithmRecordService.java @@ -3,6 +3,7 @@ package com.jsowell.pile.service; import java.util.List; import com.jsowell.pile.domain.ChargeAlgorithmRecord; +import com.jsowell.pile.dto.BatteryChargeReportDTO; import com.jsowell.pile.vo.uniapp.customer.ChargeAlgorithmRecordVO; /** @@ -83,4 +84,11 @@ public interface ChargeAlgorithmRecordService { * @return */ ChargeAlgorithmRecord queryRecordByTaskId(String taskId); + + /** + * 通过参数获取报告地址 + * @param dto + * @return + */ + String getUrlByParams(BatteryChargeReportDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ChargeAlgorithmRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ChargeAlgorithmRecordServiceImpl.java index e8e86cbd9..46076aa1b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ChargeAlgorithmRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/ChargeAlgorithmRecordServiceImpl.java @@ -3,7 +3,10 @@ package com.jsowell.pile.service.impl; import java.util.List; import com.alibaba.fastjson2.JSON; +import com.jsowell.common.constant.Constants; import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.StringUtils; +import com.jsowell.pile.dto.BatteryChargeReportDTO; import com.jsowell.pile.service.ChargeAlgorithmRecordService; import com.jsowell.pile.vo.uniapp.customer.ChargeAlgorithmRecordVO; import org.springframework.beans.factory.annotation.Autowired; @@ -115,6 +118,25 @@ public class ChargeAlgorithmRecordServiceImpl implements ChargeAlgorithmRecordSe return chargeAlgorithmRecordMapper.queryRecordByTaskId(taskId); } + /** + * 通过参数获取报告URL + * @param dto + * @return + */ + @Override + public String getUrlByParams(BatteryChargeReportDTO dto) { + ChargeAlgorithmRecord record = queryRecordByOrderCode(dto.getOrderCode()); + String reportType = dto.getReportType(); + if (StringUtils.equals(Constants.ONE, reportType)) { + // 1-web 端 + return record.getWebUrl(); + }else if (StringUtils.equals(Constants.TWO, reportType)) { + // 2-pdf 端 + return record.getPdfUrl(); + } + return null; + } + /** * 通过订单号查询充电电池算法报告 * @param orderCode From f55f6ec006d5d0cd3836c0102b05c159840f37e5 Mon Sep 17 00:00:00 2001 From: Lemon Date: Wed, 26 Nov 2025 10:45:19 +0800 Subject: [PATCH 36/38] =?UTF-8?q?update=20=20=E7=94=B5=E6=B1=A0=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E7=AE=97=E6=B3=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/test/java/PaymentTestController.java | 8 ++++---- .../impl/BatteryChargeReportService.java | 17 +++++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/jsowell-admin/src/test/java/PaymentTestController.java b/jsowell-admin/src/test/java/PaymentTestController.java index 58a5c7d1d..b39220367 100644 --- a/jsowell-admin/src/test/java/PaymentTestController.java +++ b/jsowell-admin/src/test/java/PaymentTestController.java @@ -423,10 +423,10 @@ public class PaymentTestController { */ @Test public void createPaymentReverseRequestTest() { - String paymentId = "002212025010720373310722683516795273216"; - BigDecimal refundAmount = new BigDecimal("1.08"); - String memberId = "48781184"; - String orderCode = "C67335843091"; + String paymentId = "002212025112213314210838178078469394432"; + BigDecimal refundAmount = new BigDecimal("49.5"); + String memberId = "67717378"; + String orderCode = "C088649732085"; // 延迟分账未确认调撤销调撤销接口退款 PaymentReverseOperation operation = new PaymentReverseOperation(); diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java index fa45a3249..8af781be1 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java @@ -68,6 +68,7 @@ public class BatteryChargeReportService { @Autowired private PileStationInfoService pileStationInfoService; + @Autowired private ChargeAlgorithmRecordService chargeAlgorithmRecordService; /** @@ -100,12 +101,16 @@ public class BatteryChargeReportService { log.error("订单:{} 获取到 taskId 为空", orderCode); return null; } - // 存入数据库 - ChargeAlgorithmRecord record = new ChargeAlgorithmRecord(); - record.setOrderCode(orderCode); - record.setTaskId(taskId); - chargeAlgorithmRecordService.insertOrUpdateSelective(record); - + ChargeAlgorithmRecord record = chargeAlgorithmRecordService.queryRecordByOrderCode(orderCode); + if (record != null) { + record.setTaskId(taskId); + chargeAlgorithmRecordService.updateChargeAlgorithmRecord(record); + }else { + record = new ChargeAlgorithmRecord(); + record.setTaskId(taskId); + record.setOrderCode(orderCode); + chargeAlgorithmRecordService.insertOrUpdateSelective(record); + } return taskId; } From 23ce26a44153ca15aa226fa9d5fc6662d897438c Mon Sep 17 00:00:00 2001 From: Lemon Date: Wed, 26 Nov 2025 14:52:07 +0800 Subject: [PATCH 37/38] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=20=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E6=9F=A5=E8=AF=A2=E6=AF=8F=E5=A4=A9=E7=9A=84=E4=BF=9D?= =?UTF-8?q?=E9=99=A9=E6=94=B6=E5=85=A5=E9=87=91=E9=A2=9D=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/index/indexController.java | 21 ++++++++++++++++++- .../pile/mapper/OrderBasicInfoMapper.java | 7 +++++++ .../pile/service/OrderBasicInfoService.java | 7 +++++++ .../impl/OrderBasicInfoServiceImpl.java | 10 +++++++++ .../pile/vo/web/IndexPlatformProfitVO.java | 5 +++++ .../mapper/pile/OrderBasicInfoMapper.xml | 13 ++++++++++++ 6 files changed, 62 insertions(+), 1 deletion(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/index/indexController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/index/indexController.java index 1c42349c0..aff5493b6 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/index/indexController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/index/indexController.java @@ -73,7 +73,7 @@ public class indexController extends BaseController { */ @PostMapping("/getPlatformProfit") public RestApiResponse getPlatformProfit(@RequestBody IndexQueryDTO dto) { - logger.info("查询每天平台抽成金额"); + logger.info("查询每天平台抽成金额 param:{}", JSON.toJSONString(dto)); RestApiResponse response; try { List indexOrderInfo = orderBasicInfoService.getPlatformProfit(dto); @@ -86,4 +86,23 @@ public class indexController extends BaseController { return response; } + /** + * 查询每天的保险费用 + * @return + */ + @PostMapping("/getInsuranceAmount") + public RestApiResponse getInsuranceAmount(@RequestBody IndexQueryDTO dto) { + logger.info("查询每天的保险费用 param:{}", JSON.toJSONString(dto)); + RestApiResponse response = null; + try { + List indexOrderInfo = orderBasicInfoService.getInsuranceAmount(dto); + response = new RestApiResponse<>(indexOrderInfo); + } catch (Exception e) { + logger.error("查询每天的保险费用 error!{}", e.getMessage()); + response = new RestApiResponse<>("00200004", "查询每天的保险费用错误"); + } + logger.info("查询每天的保险费用 result:{}", JSON.toJSONString(response)); + return response; + } + } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index 6bafa7a82..a76301982 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -443,4 +443,11 @@ public interface OrderBasicInfoMapper { List selectOrderCountAndInsuranceByMonth(@Param("dto") QueryOrderDTO dto); List selectOrderTemp(@Param("orderCodes") Set orderCodes); + + /** + * 获取保险收入 + * @param dto + * @return + */ + List getInsuranceAmount(@Param("dto") IndexQueryDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index 566a1d13a..480adba37 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -645,4 +645,11 @@ public interface OrderBasicInfoService{ // 临时接口, 查询订单信息 List selectOrderTemp(Set orderCodes); + + /** + * 获取保险金额 + * @param dto + * @return + */ + List getInsuranceAmount(IndexQueryDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 2baa39856..30617e53b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -6042,5 +6042,15 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { public List selectOrderTemp(Set orderCodes) { return orderBasicInfoMapper.selectOrderTemp(orderCodes); } + + /** + * 查询每天的保险金额 + * @param dto + * @return + */ + @Override + public List getInsuranceAmount(IndexQueryDTO dto) { + return orderBasicInfoMapper.getInsuranceAmount(dto); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/IndexPlatformProfitVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/IndexPlatformProfitVO.java index 784f35a3e..dc638e8e0 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/IndexPlatformProfitVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/IndexPlatformProfitVO.java @@ -52,4 +52,9 @@ public class IndexPlatformProfitVO { * 总抽成金额 */ private String totalSplitAmount; + + /** + * 保险金额 + */ + private String insuranceAmount; } diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index b8da37300..034883622 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -3505,4 +3505,17 @@ #{item} + + From f704cffe3598b291019039dc4d664e42861f5a1e Mon Sep 17 00:00:00 2001 From: Lemon Date: Thu, 27 Nov 2025 08:47:40 +0800 Subject: [PATCH 38/38] =?UTF-8?q?update=20=20=E5=90=8E=E7=AE=A1=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=20payMode=E7=AD=9B=E9=80=89=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java | 5 +++++ .../src/main/resources/mapper/pile/OrderBasicInfoMapper.xml | 3 +++ 2 files changed, 8 insertions(+) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java index f1710ad94..7ea34f89d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryOrderDTO.java @@ -78,6 +78,11 @@ public class QueryOrderDTO extends BaseEntity { */ private String endTime; + /** + * 支付方式 + */ + private String payMode; + /** * 订单编号列表 */ diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index 034883622..090eadf1d 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -1982,6 +1982,9 @@ and t1.plate_number = #{plateNumber,jdbcType=VARCHAR} + + and t1.pay_mode = #{payMode,jdbcType=VARCHAR} + and t3.dept_id in