From 8e1fcd008d9d06e557cf6a06807ff2a6a9844e92 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 25 Mar 2025 14:57:25 +0800 Subject: [PATCH 01/30] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/quartz/task/JsowellTask.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 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 7661416ad..6a4aefaa2 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 @@ -74,7 +74,7 @@ public class JsowellTask { public void setBarrier() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } } @@ -86,7 +86,7 @@ public class JsowellTask { public void close15MinutesOfUnpaidOrders() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } // log.info("关闭15分钟未支付的订单"); @@ -100,7 +100,7 @@ public class JsowellTask { public void closeStartFailedOrder() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } // 查询出最近2天支付成功,并且订单状态为未启动的订单 @@ -115,7 +115,7 @@ public class JsowellTask { public void appointmentOrderStart() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } // 查询出 已支付 设置预约充电 未启动 的订单 @@ -164,7 +164,7 @@ public class JsowellTask { public void calculateTheSiteOrdersReport() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } // 查询出所有站点 @@ -193,7 +193,7 @@ public class JsowellTask { public void pushToAMap() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } Set stationIds = redisCache.getCacheSet(CacheConstants.PUSH_STATION_CONNECTOR); @@ -218,7 +218,7 @@ public class JsowellTask { public void pushStationRealTimePowerInfo() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } // 查询出要推送的站点(贵州、) @@ -240,7 +240,7 @@ public class JsowellTask { public void processOrderSplitting() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } // 查询运营商列表 @@ -279,7 +279,7 @@ public class JsowellTask { public void generateMerchantBill() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } // 查询运营商列表 @@ -308,7 +308,7 @@ public class JsowellTask { public void automaticPayouts() { String env = SpringUtils.getActiveProfile(); if (StringUtils.equalsIgnoreCase(env, "pre")) { - log.info("PRE环境不执行"); + log.debug("PRE环境不执行"); return; } // 查询开启自动提现运营商列表 From a180c1d8307cbd08fb82f08b9fcf5e012171a804 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 25 Mar 2025 15:16:51 +0800 Subject: [PATCH 02/30] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=8A=98=E6=89=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/uniapp/customer/TempController.java | 30 ++-- .../java/com/jsowell/service/TempService.java | 149 +++++++++++++++++- .../pile/service/OrderBasicInfoService.java | 7 + .../impl/OrderBasicInfoServiceImpl.java | 10 +- 4 files changed, 180 insertions(+), 16 deletions(-) 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 84cc65300..c7deb2030 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 @@ -4,22 +4,14 @@ import com.alibaba.fastjson2.JSON; import com.google.common.collect.ImmutableMap; import com.jsowell.adapay.dto.BalancePaymentRequestDTO; import com.jsowell.adapay.service.AdapayService; -import com.jsowell.common.YouDianUtils; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.domain.AjaxResult; -import com.jsowell.common.core.domain.ykc.TransactionRecordsData; -import com.jsowell.common.enums.ebike.EBikeStopReasonEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.response.RestApiResponse; import com.jsowell.common.util.DateUtils; -import com.jsowell.common.util.SecurityUtils; -import com.jsowell.pile.domain.AdapayMemberAccount; -import com.jsowell.pile.domain.MemberPlateNumberRelation; -import com.jsowell.pile.domain.OrderBasicInfo; -import com.jsowell.pile.domain.PileMerchantInfo; -import com.jsowell.pile.domain.ebike.deviceupload.EBikeMessageCmd03; +import com.jsowell.pile.domain.*; import com.jsowell.pile.domain.ykcCommond.EBikeStartChargingCommand; import com.jsowell.pile.domain.ykcCommond.ReservationChargingCommand; import com.jsowell.pile.domain.ykcCommond.StopChargingCommand; @@ -733,6 +725,26 @@ public class TempController extends BaseController { return response; } + /** + * 查询订单折扣接口 + * http://localhost:8080/order/queryOrderDiscount + */ + @PostMapping("/queryOrderDiscount") + public RestApiResponse queryOrderDiscount(@RequestBody QueryOrderDTO dto) { + RestApiResponse response; + try { + OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); + OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderBasicInfo.getOrderCode()); + // 计算订单折扣 + tempService.calculateOrderDiscountsV2(orderBasicInfo, orderDetail); + response = new RestApiResponse<>(); + } catch (Exception e) { + logger.error("查询订单折扣接口 error,", e); + response = new RestApiResponse<>(); + } + 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 459ce9651..28090ef5c 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -29,9 +29,7 @@ import com.jsowell.pile.dto.SettleOrderReportDTO; import com.jsowell.pile.mapper.OrderBasicInfoMapper; import com.jsowell.pile.mapper.PileMsgRecordMapper; import com.jsowell.pile.service.*; -import com.jsowell.pile.vo.web.ClearingBillVO; -import com.jsowell.pile.vo.web.OrderListVO; -import com.jsowell.pile.vo.web.OrderPaymentDetailVO; +import com.jsowell.pile.vo.web.*; import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,6 +38,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; import java.util.Map; import java.util.Set; @@ -67,6 +66,9 @@ public class TempService { @Autowired private AdapayCallbackRecordService adapayCallbackRecordService; + @Autowired + protected MemberGroupService memberGroupService; + @Autowired private WxpayRefundCallbackService wxpayRefundCallbackService; @@ -724,5 +726,146 @@ public class TempService { // 关闭未支付订单 orderBasicInfoService.closeUnpaidOrders(unpaidOrderList); } + + public void calculateOrderDiscountsV2(OrderBasicInfo orderBasicInfo, OrderDetail orderDetail) { + String memberId = orderBasicInfo.getMemberId(); // 会员id + String stationId = orderBasicInfo.getStationId(); // 站点id + String merchantId = orderBasicInfo.getMerchantId(); // 运营商id + + if (orderDetail == null) { + logger.info("计算订单折扣V2, OrderDetail为空(orderCode:{}, transactionCode:{}), 直接返回!", + orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode()); + return; + } + + // 原始电费金额 + BigDecimal originalTotalElectricityAmount = orderDetail.getTotalElectricityAmount(); + // 原始服务费金额 + BigDecimal originalTotalServiceAmount = orderDetail.getTotalServiceAmount(); + // 电费折扣金额 初始值为0 + BigDecimal electricityAmountDiscount = BigDecimal.ZERO; + // 服务费折扣金额 初始值为0 + BigDecimal serviceAmountDiscount = BigDecimal.ZERO; + // 优惠后电费金额 初始值为优惠前金额 + BigDecimal afterDiscountElectricityAmount = BigDecimal.ZERO; + // 优惠后服务费金额 初始值为优惠前金额 + BigDecimal afterDiscountServiceAmount = BigDecimal.ZERO; + + // 查询会员在该站点享受的优惠 + MemberDiscountVO memberDiscountVO = memberGroupService.queryMemberDiscountV2(merchantId, stationId, memberId); + if (memberDiscountVO == null) { + // 如果没有优惠,则优惠后金额 等于优惠前金额 + afterDiscountServiceAmount = orderDetail.getTotalServiceAmount(); + afterDiscountElectricityAmount = orderDetail.getTotalElectricityAmount(); + } else { + // 集团会员的订单,记录集团编号 + orderBasicInfo.setGroupCode(memberDiscountVO.getGroupCode()); + + // 集团会员的优惠计费模板 + BillingTemplateVO billingTemplateVO = memberDiscountVO.getBillingTemplateVO(); + + // 尖时段用电量 + BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity(); + if (sharpUsedElectricity != null) { + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal sharpElectricityAmount = billingTemplateVO.getSharpElectricityPrice() + .multiply(sharpUsedElectricity) + .setScale(2, RoundingMode.DOWN); + // 计算该时段服务费 + BigDecimal sharpServiceAmount = billingTemplateVO.getSharpServicePrice() + .multiply(sharpUsedElectricity) + .setScale(2, RoundingMode.DOWN); + + // 汇总 + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(sharpElectricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(sharpServiceAmount); + } + + // 峰时段用电量 + BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity(); + if (peakUsedElectricity != null) { + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal peakElectricityAmount = billingTemplateVO.getPeakElectricityPrice() + .multiply(peakUsedElectricity) + .setScale(2, RoundingMode.DOWN); + // 计算该时段服务费 + BigDecimal peakServiceAmount = billingTemplateVO.getPeakServicePrice() + .multiply(peakUsedElectricity) + .setScale(2, RoundingMode.DOWN); + + // 汇总 + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(peakElectricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(peakServiceAmount); + } + + // 平时段用电量 + BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity(); + if (flatUsedElectricity != null) { + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal flatElectricityAmount = billingTemplateVO.getFlatElectricityPrice() + .multiply(flatUsedElectricity) + .setScale(2, RoundingMode.DOWN); + // 计算该时段服务费 + BigDecimal flatServiceAmount = billingTemplateVO.getFlatServicePrice() + .multiply(flatUsedElectricity) + .setScale(2, RoundingMode.DOWN); + + // 汇总 + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(flatElectricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(flatServiceAmount); + } + + // 谷时段用电量 + BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity(); + if (valleyUsedElectricity != null) { + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal valleyElectricityAmount = billingTemplateVO.getValleyElectricityPrice() + .multiply(valleyUsedElectricity) + .setScale(2, RoundingMode.DOWN); + // 计算该时段服务费 + BigDecimal valleyServiceAmount = billingTemplateVO.getValleyServicePrice() + .multiply(valleyUsedElectricity) + .setScale(2, RoundingMode.DOWN); + + // 汇总 + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(valleyElectricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(valleyServiceAmount); + } + + // 计算优惠了多少钱 + // 电费折扣金额 = 优惠前电费 - 优惠后电费 + electricityAmountDiscount = originalTotalElectricityAmount.subtract(afterDiscountElectricityAmount); + // 服务费折扣金额 = 优惠前服务费 - 优惠后服务费 + serviceAmountDiscount = originalTotalServiceAmount.subtract(afterDiscountServiceAmount); + } + + /* + 更新 数据 + */ + // 订单折扣金额 = 电费折扣金额 + 服务费折扣金额 + BigDecimal discountAmount = electricityAmountDiscount.add(serviceAmountDiscount); + orderBasicInfo.setDiscountAmount(discountAmount); + + // 更新结算金额 结算金额 = 消费金额 - 虚拟金额 - 优惠金额 + BigDecimal newSettleAmount = orderBasicInfo.getSettleAmount().subtract(discountAmount); + if (newSettleAmount.compareTo(BigDecimal.ZERO) < 0) { + // 如果结算金额为0,减去优惠金额后为负数,还设置为0 + newSettleAmount = BigDecimal.ZERO; + } + orderBasicInfo.setSettleAmount(newSettleAmount); + + // 优惠后总消费金额 = 折扣后电费 + 折扣后服务费 + BigDecimal totalConsumeAmount = afterDiscountServiceAmount.add(afterDiscountElectricityAmount); + + // 更新退款金额 = 支付金额 - 优惠后总消费金额 + BigDecimal refundAmount = orderBasicInfo.getPayAmount().subtract(totalConsumeAmount).setScale(2, RoundingMode.DOWN); + orderBasicInfo.setRefundAmount(refundAmount); + // 电费折扣金额(电费便宜了多少钱) + orderDetail.setDiscountElectricityAmount(electricityAmountDiscount); + // 服务费折扣金额(服务费便宜了多少钱) + orderDetail.setDiscountServiceAmount(serviceAmountDiscount); + logger.info("计算订单折扣, orderCode:{}, memberId:{}, 订单折扣金额:{}, 电费折扣金额:{}, 服务费折扣金额:{}, 优惠后总消费金额:{}", + orderBasicInfo.getOrderCode(), memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount); + } } 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 0f45f4876..88ed10cbe 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 @@ -550,4 +550,11 @@ public interface OrderBasicInfoService{ * @return */ List queryUserFrequentedStation(String memberId); + + /** + * 通过订单编号列表查询订单信息 + * @param orderCodeList + * @return + */ + List queryAfterSettleOrderDTOList(List orderCodeList); } 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 f511ec2c3..ea94bcac4 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 @@ -7,8 +7,8 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.huifu.adapay.core.exception.BaseAdaPayException; import com.jsowell.adapay.common.DivMember; -import com.jsowell.adapay.dto.PaymentConfirmParam; import com.jsowell.adapay.common.PaymentConfirmInfo; +import com.jsowell.adapay.dto.PaymentConfirmParam; import com.jsowell.adapay.dto.QueryConfirmReverseDTO; import com.jsowell.adapay.dto.QueryPaymentConfirmDTO; import com.jsowell.adapay.dto.SplitData; @@ -17,7 +17,6 @@ import com.jsowell.adapay.response.*; import com.jsowell.adapay.service.AdapayService; import com.jsowell.adapay.vo.OrderSplitResult; import com.jsowell.adapay.vo.PaymentInfo; -import com.jsowell.common.YouDianUtils; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.vo.AuthorizedDeptVO; @@ -30,7 +29,6 @@ import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.adapay.AdapayPayChannelEnum; import com.jsowell.common.enums.adapay.AdapayStatusEnum; import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; -import com.jsowell.common.enums.ebike.EBikeStopReasonEnum; import com.jsowell.common.enums.thirdparty.ThirdPartyOperatorIdEnum; import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; import com.jsowell.common.enums.ykc.*; @@ -41,7 +39,6 @@ import com.jsowell.common.util.id.IdUtils; import com.jsowell.common.util.id.SnowflakeIdWorker; import com.jsowell.common.util.spring.SpringUtils; import com.jsowell.pile.domain.*; -import com.jsowell.pile.domain.ebike.deviceupload.EBikeMessageCmd03; import com.jsowell.pile.dto.*; import com.jsowell.pile.dto.nanrui.NRQueryOrderDTO; import com.jsowell.pile.dto.ningxiajiaotou.NXJTQueryOrdersInfoDTO; @@ -4968,5 +4965,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return orderBasicInfoMapper.queryUserFrequentedStation(memberId, startTime, endTime); } + @Override + public List queryAfterSettleOrderDTOList(List orderCodeList) { + return null; + } + } From 9286aa0e66acc4c13173b9fb79d815c43a99c717 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 25 Mar 2025 15:44:30 +0800 Subject: [PATCH 03/30] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/uniapp/customer/TempController.java | 2 +- .../java/com/jsowell/service/TempService.java | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) 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 c7deb2030..a07dcf5bd 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 @@ -727,7 +727,7 @@ public class TempController extends BaseController { /** * 查询订单折扣接口 - * http://localhost:8080/order/queryOrderDiscount + * http://localhost:8080/temp/queryOrderDiscount */ @PostMapping("/queryOrderDiscount") public RestApiResponse queryOrderDiscount(@RequestBody QueryOrderDTO dto) { 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 28090ef5c..db8e459a0 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -728,13 +728,14 @@ public class TempService { } public void calculateOrderDiscountsV2(OrderBasicInfo orderBasicInfo, OrderDetail orderDetail) { + String orderCode = orderBasicInfo.getOrderCode(); + String transactionCode = orderBasicInfo.getTransactionCode(); String memberId = orderBasicInfo.getMemberId(); // 会员id String stationId = orderBasicInfo.getStationId(); // 站点id String merchantId = orderBasicInfo.getMerchantId(); // 运营商id if (orderDetail == null) { - logger.info("计算订单折扣V2, OrderDetail为空(orderCode:{}, transactionCode:{}), 直接返回!", - orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode()); + logger.info("计算订单折扣V2, OrderDetail为空(orderCode:{}, transactionCode:{}), 直接返回!", orderCode, transactionCode); return; } @@ -742,6 +743,7 @@ public class TempService { BigDecimal originalTotalElectricityAmount = orderDetail.getTotalElectricityAmount(); // 原始服务费金额 BigDecimal originalTotalServiceAmount = orderDetail.getTotalServiceAmount(); + logger.info("计算订单折扣V2, orderCode:{}, 原始电费金额:{}, 原始服务费金额:{}", orderCode, originalTotalElectricityAmount, originalTotalServiceAmount); // 电费折扣金额 初始值为0 BigDecimal electricityAmountDiscount = BigDecimal.ZERO; // 服务费折扣金额 初始值为0 @@ -779,6 +781,8 @@ public class TempService { // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(sharpElectricityAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(sharpServiceAmount); + logger.info("计算订单折扣V2, orderCode:{}, 尖时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", sharpUsedElectricity, orderCode, + billingTemplateVO.getSharpElectricityPrice(), sharpElectricityAmount, billingTemplateVO.getSharpServicePrice(), sharpServiceAmount); } // 峰时段用电量 @@ -796,6 +800,8 @@ public class TempService { // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(peakElectricityAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(peakServiceAmount); + logger.info("计算订单折扣V2, orderCode:{}, 峰时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", peakUsedElectricity, orderCode, + billingTemplateVO.getPeakElectricityPrice(), peakElectricityAmount, billingTemplateVO.getPeakServicePrice(), peakServiceAmount); } // 平时段用电量 @@ -813,6 +819,8 @@ public class TempService { // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(flatElectricityAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(flatServiceAmount); + logger.info("计算订单折扣V2, orderCode:{}, 平时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", flatUsedElectricity, orderCode, + billingTemplateVO.getFlatElectricityPrice(), flatElectricityAmount, billingTemplateVO.getFlatServicePrice(), flatServiceAmount); } // 谷时段用电量 @@ -830,6 +838,8 @@ public class TempService { // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(valleyElectricityAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(valleyServiceAmount); + logger.info("计算订单折扣V2, orderCode:{}, 谷时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", valleyUsedElectricity, orderCode, + billingTemplateVO.getValleyElectricityPrice(), valleyElectricityAmount, billingTemplateVO.getValleyServicePrice(), valleyServiceAmount); } // 计算优惠了多少钱 @@ -865,7 +875,7 @@ public class TempService { // 服务费折扣金额(服务费便宜了多少钱) orderDetail.setDiscountServiceAmount(serviceAmountDiscount); logger.info("计算订单折扣, orderCode:{}, memberId:{}, 订单折扣金额:{}, 电费折扣金额:{}, 服务费折扣金额:{}, 优惠后总消费金额:{}", - orderBasicInfo.getOrderCode(), memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount); + orderCode, memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount); } } From 240ea6bcd1f67ac045d4c005b63034b7029b0e14 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 25 Mar 2025 15:52:56 +0800 Subject: [PATCH 04/30] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/service/TempService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 db8e459a0..e9cc89247 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -781,7 +781,7 @@ public class TempService { // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(sharpElectricityAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(sharpServiceAmount); - logger.info("计算订单折扣V2, orderCode:{}, 尖时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", sharpUsedElectricity, orderCode, + logger.info("计算订单折扣V2, orderCode:{}, 尖时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", orderCode, sharpUsedElectricity, billingTemplateVO.getSharpElectricityPrice(), sharpElectricityAmount, billingTemplateVO.getSharpServicePrice(), sharpServiceAmount); } @@ -800,7 +800,7 @@ public class TempService { // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(peakElectricityAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(peakServiceAmount); - logger.info("计算订单折扣V2, orderCode:{}, 峰时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", peakUsedElectricity, orderCode, + logger.info("计算订单折扣V2, orderCode:{}, 峰时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", orderCode, peakUsedElectricity, billingTemplateVO.getPeakElectricityPrice(), peakElectricityAmount, billingTemplateVO.getPeakServicePrice(), peakServiceAmount); } @@ -819,7 +819,7 @@ public class TempService { // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(flatElectricityAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(flatServiceAmount); - logger.info("计算订单折扣V2, orderCode:{}, 平时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", flatUsedElectricity, orderCode, + logger.info("计算订单折扣V2, orderCode:{}, 平时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", orderCode, flatUsedElectricity, billingTemplateVO.getFlatElectricityPrice(), flatElectricityAmount, billingTemplateVO.getFlatServicePrice(), flatServiceAmount); } @@ -838,7 +838,7 @@ public class TempService { // 汇总 afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(valleyElectricityAmount); afterDiscountServiceAmount = afterDiscountServiceAmount.add(valleyServiceAmount); - logger.info("计算订单折扣V2, orderCode:{}, 谷时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", valleyUsedElectricity, orderCode, + logger.info("计算订单折扣V2, orderCode:{}, 谷时段用电量:{}, 电费单价:{}, 电费金额:{}, 服务费单价:{}, 服务费金额:{}", orderCode, valleyUsedElectricity, billingTemplateVO.getValleyElectricityPrice(), valleyElectricityAmount, billingTemplateVO.getValleyServicePrice(), valleyServiceAmount); } From 070946a4546836930c2ddd3329b85a4c9cd1e1e5 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 25 Mar 2025 16:25:15 +0800 Subject: [PATCH 05/30] =?UTF-8?q?=E4=BC=9A=E5=91=98=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E8=AE=A1=E8=B4=B9=E6=A8=A1=E6=9D=BF=E4=B8=8D=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/pile/service/PileRemoteService.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java index 7a48c79a5..16b035a1a 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileRemoteService.java @@ -285,6 +285,14 @@ public class PileRemoteService { log.warn("获取计费模板信息, 通过模板id:{}查询计费模板为null", dto.getTemplateId()); return false; } + // 会员优惠计费模板不发布 + if (Constants.ONE.equals(billingTemplateVO.getMemberFlag())) { + return false; + } + // 电单车计费模板不发布 + if (Constants.TWO.equals(billingTemplateVO.getDeviceType())) { + return false; + } // 更新计费模板的发布时间 PileBillingTemplate pileBillingTemplate = new PileBillingTemplate(); pileBillingTemplate.setId(Long.valueOf(billingTemplateVO.getTemplateId())); From 74c5828ed11f3bf8d9851c00d3c8be18c16da9ae Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 25 Mar 2025 16:41:42 +0800 Subject: [PATCH 06/30] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pile/service/programlogic/AbstractProgramLogic.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 7dd07766d..1b0c6492c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -229,6 +229,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { || OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) { // 白名单支付所消费的金额,都属于虚拟金额,不参与结算对账 virtualAmount = new BigDecimal(orderAmount.toString()); + // logger.info("结算订单:【{}】, 虚拟金额为:{}, 白名单支付所消费的金额,都属于虚拟金额,不参与结算对账", orderCode, virtualAmount); } // 退款金额 = 支付金额 - 订单消费金额 剩余需要退回的金额 residue @@ -236,6 +237,8 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 结算金额 = 消费金额 - 虚拟金额 - 优惠金额 BigDecimal settleAmount = orderAmount.subtract(virtualAmount); + logger.info("结算订单:【{}】, 支付金额:{}, 消费金额:{}, 虚拟金额:{}, 结算金额:{}, 退款金额:{}", + orderCode, payAmount, orderAmount, virtualAmount, settleAmount, residue); // 把交易记录中的用电量,金额等信息 更新到orderBasicInfo和orderDetail orderBasicInfo.setVirtualAmount(virtualAmount); // 虚拟金额 From 8459098231658e178724537498aadb7f4f290091 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 25 Mar 2025 16:43:08 +0800 Subject: [PATCH 07/30] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/pile/service/programlogic/AbstractProgramLogic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 1b0c6492c..9a6bfccfb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -214,7 +214,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { BigDecimal orderAmount = new BigDecimal(data.getConsumptionAmount()).setScale(2, RoundingMode.HALF_UP); // 付款金额 - 实际消费金额,如果有剩余,需要走退款操作 当使用余额支付时payAmount = principalPay + giftPay BigDecimal payAmount = orderBasicInfo.getPayAmount(); - logger.info("结算订单:【{}】, 支付金额:{}, 消费金额:{}", orderCode, payAmount, orderAmount); + // logger.info("结算订单:【{}】, 支付金额:{}, 消费金额:{}", orderCode, payAmount, orderAmount); // 有时候充电桩到达金额停止充电会多出一点金额,比如实际需要充50元的电,充电桩传来的消费金额为50.01元,在后台记录的时候需要舍去 if (orderAmount.compareTo(payAmount) > 0) { From 0e0f6d6823490fe17640e317073e9bf6c8080976 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 25 Mar 2025 17:05:25 +0800 Subject: [PATCH 08/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 50 +++++++------------ 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 9a6bfccfb..356e3046b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -303,14 +303,12 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setSharpAmount(new BigDecimal(data.getSharpAmount())); } // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal sharpElectricityAmount = orderDetail.getSharpElectricityPrice() - .multiply(sharpUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal electricityPrice = orderDetail.getSharpElectricityPrice(); // 该时段电费单价 + BigDecimal sharpElectricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); totalElectricityAmount = totalElectricityAmount.add(sharpElectricityAmount); // 计算该时段服务费 - BigDecimal sharpServiceAmount = orderDetail.getSharpServicePrice() - .multiply(sharpUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal servicePrice = orderDetail.getSharpServicePrice(); // 该时段服务费单价 + BigDecimal sharpServiceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); totalServiceAmount = totalServiceAmount.add(sharpServiceAmount); } @@ -327,14 +325,12 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setPeakAmount(new BigDecimal(data.getPeakAmount())); } // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal peakElectricityAmount = orderDetail.getPeakElectricityPrice() - .multiply(peakUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal electricityPrice = orderDetail.getPeakElectricityPrice(); // 该时段电费单价 + BigDecimal peakElectricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); totalElectricityAmount = totalElectricityAmount.add(peakElectricityAmount); // 计算该时段服务费 - BigDecimal peakServiceAmount = orderDetail.getPeakServicePrice() - .multiply(peakUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal servicePrice = orderDetail.getPeakServicePrice(); // 该时段服务费单价 + BigDecimal peakServiceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); totalServiceAmount = totalServiceAmount.add(peakServiceAmount); } @@ -351,14 +347,12 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setFlatAmount(new BigDecimal(data.getFlatAmount())); } // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal flatElectricityAmount = orderDetail.getFlatElectricityPrice() - .multiply(flatUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal electricityPrice = orderDetail.getFlatElectricityPrice(); // 该时段电费单价 + BigDecimal flatElectricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); totalElectricityAmount = totalElectricityAmount.add(flatElectricityAmount); // 计算该时段服务费 - BigDecimal flatServiceAmount = orderDetail.getFlatServicePrice() - .multiply(flatUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal servicePrice = orderDetail.getFlatServicePrice(); // 该时段服务费单价 + BigDecimal flatServiceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); totalServiceAmount = totalServiceAmount.add(flatServiceAmount); } @@ -375,14 +369,12 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setValleyAmount(new BigDecimal(data.getValleyAmount())); } // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal valleyElectricityAmount = orderDetail.getValleyElectricityPrice() - .multiply(valleyUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal electricityPrice = orderDetail.getValleyElectricityPrice(); // 该时段电费单价 + BigDecimal valleyElectricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); totalElectricityAmount = totalElectricityAmount.add(valleyElectricityAmount); // 计算该时段服务费 - BigDecimal valleyServiceAmount = orderDetail.getValleyServicePrice() - .multiply(valleyUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal servicePrice = orderDetail.getValleyServicePrice(); + BigDecimal valleyServiceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); totalServiceAmount = totalServiceAmount.add(valleyServiceAmount); } @@ -396,16 +388,10 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 服务费总金额 orderDetail.setTotalServiceAmount(totalServiceAmount); // 尖峰平谷用电量汇总 - BigDecimal sumUsedElectricity = sharpUsedElectricity.add(peakUsedElectricity) - .add(flatUsedElectricity).add(valleyUsedElectricity); + BigDecimal sumUsedElectricity = sharpUsedElectricity.add(peakUsedElectricity).add(flatUsedElectricity).add(valleyUsedElectricity); // data中的总用电量 BigDecimal totalElectricity = new BigDecimal(StringUtils.isBlank(data.getTotalElectricity()) ? Constants.ZERO : data.getTotalElectricity()); - // if (sumUsedElectricity.compareTo(totalElectricity) != 0) { - // // 汇总数据和data中数据不相等,取汇总的数据 - // totalElectricity = sumUsedElectricity; - // } - // totalElectricity = sumUsedElectricity与totalElectricity, 取最大的值 - orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity)); + orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity)); // sumUsedElectricity与totalElectricity对比, 取最大的值 // 订单总金额 orderDetail.setTotalOrderAmount(orderAmount); } catch (Exception e) { From c5bc4d194f555cb43d513fa5bb24401bdf140023 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Tue, 25 Mar 2025 17:06:10 +0800 Subject: [PATCH 09/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pile/service/programlogic/AbstractProgramLogic.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 356e3046b..6943e55b4 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -391,7 +391,8 @@ public abstract class AbstractProgramLogic implements InitializingBean { BigDecimal sumUsedElectricity = sharpUsedElectricity.add(peakUsedElectricity).add(flatUsedElectricity).add(valleyUsedElectricity); // data中的总用电量 BigDecimal totalElectricity = new BigDecimal(StringUtils.isBlank(data.getTotalElectricity()) ? Constants.ZERO : data.getTotalElectricity()); - orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity)); // sumUsedElectricity与totalElectricity对比, 取最大的值 + // sumUsedElectricity与totalElectricity对比, 取最大的值 + orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity)); // 订单总金额 orderDetail.setTotalOrderAmount(orderAmount); } catch (Exception e) { From 8c8cb42ba881bcb89ef46d2867ae4cd11a1f9575 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 11:49:33 +0800 Subject: [PATCH 10/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 140 ++++++++++++++---- 1 file changed, 108 insertions(+), 32 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 6943e55b4..1f5c94d99 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -296,20 +296,39 @@ public abstract class AbstractProgramLogic implements InitializingBean { : BigDecimal.ZERO; orderDetail.setSharpUsedElectricity(sharpUsedElectricity); if (sharpUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { - if (data.getSharpPrice() != null) { - orderDetail.setSharpPrice(new BigDecimal(data.getSharpPrice())); - } - if (data.getSharpAmount() != null) { - orderDetail.setSharpAmount(new BigDecimal(data.getSharpAmount())); - } + // 该时段电费单价 + BigDecimal electricityPrice = orderDetail.getSharpElectricityPrice(); + // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal electricityPrice = orderDetail.getSharpElectricityPrice(); // 该时段电费单价 BigDecimal sharpElectricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + totalElectricityAmount = totalElectricityAmount.add(sharpElectricityAmount); + + // 该时段服务费单价 + BigDecimal servicePrice = orderDetail.getSharpServicePrice(); + // 计算该时段服务费 - BigDecimal servicePrice = orderDetail.getSharpServicePrice(); // 该时段服务费单价 BigDecimal sharpServiceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + totalServiceAmount = totalServiceAmount.add(sharpServiceAmount); + + // 该时段单价 = 电费单价 + 服务费单价 + BigDecimal price = electricityPrice.add(servicePrice); + + // 该时段金额 = 该时段电费 + 该时段服务费 + BigDecimal amount = sharpElectricityAmount.add(sharpServiceAmount); + + // if (data.getSharpPrice() != null) { + // orderDetail.setSharpPrice(new BigDecimal(data.getSharpPrice())); + // } + // if (data.getSharpAmount() != null) { + // orderDetail.setSharpAmount(new BigDecimal(data.getSharpAmount())); + // } + + orderDetail.setSharpPrice(price); + orderDetail.setSharpAmount(amount); + logger.info("更新订单详情:【{}】, 当前为尖时段, 电费单价:{}, 服务费单价:{}, 时段单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}", + orderCode, electricityPrice, servicePrice, price, sharpUsedElectricity, amount, data.getSharpPrice(), data.getSharpAmount()); } // 峰时段用电量 @@ -318,20 +337,39 @@ public abstract class AbstractProgramLogic implements InitializingBean { : BigDecimal.ZERO; orderDetail.setPeakUsedElectricity(peakUsedElectricity); if (peakUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { - if (data.getPeakPrice() != null) { - orderDetail.setPeakPrice(new BigDecimal(data.getPeakPrice())); - } - if (data.getPeakAmount() != null) { - orderDetail.setPeakAmount(new BigDecimal(data.getPeakAmount())); - } + // 该时段电费单价 + BigDecimal electricityPrice = orderDetail.getPeakElectricityPrice(); + // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal electricityPrice = orderDetail.getPeakElectricityPrice(); // 该时段电费单价 BigDecimal peakElectricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + totalElectricityAmount = totalElectricityAmount.add(peakElectricityAmount); + + // 该时段服务费单价 + BigDecimal servicePrice = orderDetail.getPeakServicePrice(); + // 计算该时段服务费 - BigDecimal servicePrice = orderDetail.getPeakServicePrice(); // 该时段服务费单价 BigDecimal peakServiceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + totalServiceAmount = totalServiceAmount.add(peakServiceAmount); + + // 该时段单价 = 电费单价 + 服务费单价 + BigDecimal price = electricityPrice.add(servicePrice); + + // 该时段金额 = 该时段电费 + 该时段服务费 + BigDecimal amount = peakElectricityAmount.add(peakServiceAmount); + + // if (data.getPeakPrice() != null) { + // orderDetail.setPeakPrice(new BigDecimal(data.getPeakPrice())); + // } + // if (data.getPeakAmount() != null) { + // orderDetail.setPeakAmount(new BigDecimal(data.getPeakAmount())); + // } + + orderDetail.setPeakPrice(price); + orderDetail.setPeakAmount(amount); + logger.info("更新订单详情:【{}】, 当前为峰时段, 电费单价:{}, 服务费单价:{}, 时段单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}", + orderCode, electricityPrice, servicePrice, price, peakUsedElectricity, amount, data.getPeakPrice(), data.getPeakAmount()); } // 平时段用电量 @@ -340,20 +378,39 @@ public abstract class AbstractProgramLogic implements InitializingBean { : BigDecimal.ZERO; orderDetail.setFlatUsedElectricity(flatUsedElectricity); if (flatUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { - if (data.getFlatPrice() != null) { - orderDetail.setFlatPrice(new BigDecimal(data.getFlatPrice())); - } - if (data.getFlatAmount() != null) { - orderDetail.setFlatAmount(new BigDecimal(data.getFlatAmount())); - } + // 该时段电费单价 + BigDecimal electricityPrice = orderDetail.getFlatElectricityPrice(); + // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal electricityPrice = orderDetail.getFlatElectricityPrice(); // 该时段电费单价 BigDecimal flatElectricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + totalElectricityAmount = totalElectricityAmount.add(flatElectricityAmount); + + // 该时段服务费单价 + BigDecimal servicePrice = orderDetail.getFlatServicePrice(); + // 计算该时段服务费 - BigDecimal servicePrice = orderDetail.getFlatServicePrice(); // 该时段服务费单价 BigDecimal flatServiceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + totalServiceAmount = totalServiceAmount.add(flatServiceAmount); + + // 该时段单价 = 电费单价 + 服务费单价 + BigDecimal price = electricityPrice.add(servicePrice); + + // 该时段金额 = 该时段电费 + 该时段服务费 + BigDecimal amount = flatElectricityAmount.add(flatServiceAmount); + + // if (data.getFlatPrice() != null) { + // orderDetail.setFlatPrice(new BigDecimal(data.getFlatPrice())); + // } + // if (data.getFlatAmount() != null) { + // orderDetail.setFlatAmount(new BigDecimal(data.getFlatAmount())); + // } + + orderDetail.setFlatPrice(price); + orderDetail.setFlatAmount(amount); + logger.info("更新订单详情:【{}】, 当前为平时段, 电费单价:{}, 服务费单价:{}, 时段单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}", + orderCode, electricityPrice, servicePrice, price, flatUsedElectricity, amount, data.getFlatPrice(), data.getFlatAmount()); } // 谷时段用电量 @@ -362,20 +419,39 @@ public abstract class AbstractProgramLogic implements InitializingBean { : BigDecimal.ZERO; orderDetail.setValleyUsedElectricity(valleyUsedElectricity); if (valleyUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { - if (data.getValleyPrice() != null) { - orderDetail.setValleyPrice(new BigDecimal(data.getValleyPrice())); - } - if (data.getValleyAmount() != null) { - orderDetail.setValleyAmount(new BigDecimal(data.getValleyAmount())); - } + // 该时段电费单价 + BigDecimal electricityPrice = orderDetail.getValleyElectricityPrice(); + // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal electricityPrice = orderDetail.getValleyElectricityPrice(); // 该时段电费单价 BigDecimal valleyElectricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + totalElectricityAmount = totalElectricityAmount.add(valleyElectricityAmount); - // 计算该时段服务费 + + // 该时段服务费单价 BigDecimal servicePrice = orderDetail.getValleyServicePrice(); + + // 计算该时段服务费 BigDecimal valleyServiceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + totalServiceAmount = totalServiceAmount.add(valleyServiceAmount); + + // 该时段单价 = 电费单价 + 服务费单价 + BigDecimal price = electricityPrice.add(servicePrice); + + // 该时段金额 = 该时段电费 + 该时段服务费 + BigDecimal amount = valleyElectricityAmount.add(valleyServiceAmount); + + // if (data.getValleyPrice() != null) { + // orderDetail.setValleyPrice(new BigDecimal(data.getValleyPrice())); + // } + // if (data.getValleyAmount() != null) { + // orderDetail.setValleyAmount(new BigDecimal(data.getValleyAmount())); + // } + + orderDetail.setValleyPrice(price); + orderDetail.setValleyAmount(amount); + logger.info("更新订单详情:【{}】, 当前为谷时段, 电费单价:{}, 服务费单价:{}, 时段单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}", + orderCode, electricityPrice, servicePrice, price, valleyUsedElectricity, amount, data.getValleyPrice(), data.getValleyAmount()); } // 如果算出来的 电费金额 + 服务费金额 != 总消费金额,则电费金额等于总消费金额 - 服务费金额 From 06cac74a1817b68e98b4d788a2cececce557988f Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 13:49:31 +0800 Subject: [PATCH 11/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/uniapp/customer/TempController.java | 29 +++++++++++++++++++ .../java/com/jsowell/service/TempService.java | 16 ++++++++++ .../programlogic/AbstractProgramLogic.java | 6 ++-- 3 files changed, 48 insertions(+), 3 deletions(-) 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 a07dcf5bd..1ed25f3da 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 @@ -7,6 +7,7 @@ import com.jsowell.adapay.service.AdapayService; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.domain.AjaxResult; +import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.response.RestApiResponse; @@ -745,6 +746,34 @@ public class TempController extends BaseController { return response; } + /** + * 调试结算订单逻辑 + */ + @PostMapping("/testSettleOrderLogic") + public RestApiResponse testSettleOrderLogic(@RequestBody ApplyRefundDTO dto) { + RestApiResponse response; + try { + TransactionRecordsData data = TransactionRecordsData.builder() + .transactionCode(dto.getTransactionCode()) + .pileSn(dto.getPileSn()) + .connectorCode(dto.getConnectorCode()) + .startTime(dto.getStartTime()) + .endTime(dto.getEndTime()) + .sharpPrice(dto.getSharpPrice()) + .sharpUsedElectricity(dto.getSharpUsedElectricity()) + .sharpPlanLossElectricity() + .build(); + OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); + // 调试结算订单逻辑 + tempService.testSettleOrderLogic(data, orderBasicInfo); + response = new RestApiResponse<>(); + } catch (Exception e) { + logger.error("调试结算订单逻辑error,", e); + response = new RestApiResponse<>(); + } + 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 e9cc89247..2515bc432 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -16,6 +16,7 @@ import com.jsowell.adapay.service.AdapayService; import com.jsowell.adapay.vo.OrderSplitResult; import com.jsowell.adapay.vo.PaymentInfo; import com.jsowell.common.annotation.CostTime; +import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.adapay.AdapayStatusEnum; import com.jsowell.common.enums.ykc.*; @@ -29,6 +30,8 @@ import com.jsowell.pile.dto.SettleOrderReportDTO; import com.jsowell.pile.mapper.OrderBasicInfoMapper; import com.jsowell.pile.mapper.PileMsgRecordMapper; import com.jsowell.pile.service.*; +import com.jsowell.pile.service.programlogic.AbstractProgramLogic; +import com.jsowell.pile.service.programlogic.DelayMerchantProgramLogic; import com.jsowell.pile.vo.web.*; import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; @@ -877,5 +880,18 @@ public class TempService { logger.info("计算订单折扣, orderCode:{}, memberId:{}, 订单折扣金额:{}, 电费折扣金额:{}, 服务费折扣金额:{}, 优惠后总消费金额:{}", orderCode, memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount); } + + public void testSettleOrderLogic(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { + AbstractProgramLogic programLogic = new DelayMerchantProgramLogic(); + + // 获取更新数据后的orderBasicInfo对象 + programLogic.returnUpdateOrderBasicInfo(orderBasicInfo, data); + + // 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据 + OrderDetail orderDetail = programLogic.returnUpdateOrderDetail(orderBasicInfo, data); + + // 计算订单折扣 + programLogic.calculateOrderDiscountsV2(orderBasicInfo, orderDetail); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 1f5c94d99..addd2b834 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -207,7 +207,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { * 专用方法,其他地方如果要用请仔细检查 * 【公共方法】 */ - protected void returnUpdateOrderBasicInfo(OrderBasicInfo orderBasicInfo, TransactionRecordsData data) { + public void returnUpdateOrderBasicInfo(OrderBasicInfo orderBasicInfo, TransactionRecordsData data) { // 订单编号 String orderCode = orderBasicInfo.getOrderCode(); // 消费金额就是订单总金额/交易记录传过来的消费金额, 四舍五入保留两位小数 @@ -276,7 +276,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { * * @return 查询并更新过数据的orderDetail */ - protected OrderDetail returnUpdateOrderDetail(OrderBasicInfo orderBasicInfo, TransactionRecordsData data) { + public OrderDetail returnUpdateOrderDetail(OrderBasicInfo orderBasicInfo, TransactionRecordsData data) { String orderCode = orderBasicInfo.getOrderCode(); BigDecimal orderAmount = orderBasicInfo.getOrderAmount(); // 更新订单详情 查询订单详情 修改订单数据 @@ -719,7 +719,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { * @param orderBasicInfo 订单主表 * @param orderDetail 订单详情 */ - protected void calculateOrderDiscountsV2(OrderBasicInfo orderBasicInfo, OrderDetail orderDetail) { + public void calculateOrderDiscountsV2(OrderBasicInfo orderBasicInfo, OrderDetail orderDetail) { String memberId = orderBasicInfo.getMemberId(); // 会员id String stationId = orderBasicInfo.getStationId(); // 站点id String merchantId = orderBasicInfo.getMerchantId(); // 运营商id From 041135db046a8536157de22ec888ff968f2dfc96 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 14:04:57 +0800 Subject: [PATCH 12/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/uniapp/customer/TempController.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) 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 1ed25f3da..5a6d229ae 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 @@ -748,22 +748,14 @@ public class TempController extends BaseController { /** * 调试结算订单逻辑 + * http://localhost:8080/temp/testSettleOrderLogic */ @PostMapping("/testSettleOrderLogic") - public RestApiResponse testSettleOrderLogic(@RequestBody ApplyRefundDTO dto) { + public RestApiResponse testSettleOrderLogic(@RequestBody TransactionRecordsData data) { RestApiResponse response; try { - TransactionRecordsData data = TransactionRecordsData.builder() - .transactionCode(dto.getTransactionCode()) - .pileSn(dto.getPileSn()) - .connectorCode(dto.getConnectorCode()) - .startTime(dto.getStartTime()) - .endTime(dto.getEndTime()) - .sharpPrice(dto.getSharpPrice()) - .sharpUsedElectricity(dto.getSharpUsedElectricity()) - .sharpPlanLossElectricity() - .build(); - OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); + String transactionCode = data.getTransactionCode(); + OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode); // 调试结算订单逻辑 tempService.testSettleOrderLogic(data, orderBasicInfo); response = new RestApiResponse<>(); From 2121e540aa68037a854bea9ebad08b5924c82d75 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 14:19:34 +0800 Subject: [PATCH 13/30] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/pile/service/programlogic/AbstractProgramLogic.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index addd2b834..8b1f53733 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -277,6 +277,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { * @return 查询并更新过数据的orderDetail */ public OrderDetail returnUpdateOrderDetail(OrderBasicInfo orderBasicInfo, TransactionRecordsData data) { + logger.info("获取更新数据后的orderDetail对象, orderBasicInfo:{}, TransactionRecordsData:{}", orderBasicInfo, data); String orderCode = orderBasicInfo.getOrderCode(); BigDecimal orderAmount = orderBasicInfo.getOrderAmount(); // 更新订单详情 查询订单详情 修改订单数据 From c5be09a3e3a92d7af23517191955b94e55fc672e Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 14:32:28 +0800 Subject: [PATCH 14/30] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/pile/service/programlogic/AbstractProgramLogic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 8b1f53733..c4c2a11b0 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -277,7 +277,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { * @return 查询并更新过数据的orderDetail */ public OrderDetail returnUpdateOrderDetail(OrderBasicInfo orderBasicInfo, TransactionRecordsData data) { - logger.info("获取更新数据后的orderDetail对象, orderBasicInfo:{}, TransactionRecordsData:{}", orderBasicInfo, data); + logger.info("获取更新数据后的orderDetail对象, orderBasicInfo:{}, TransactionRecordsData:{}", JSON.toJSONString(orderBasicInfo), JSON.toJSONString(data)); String orderCode = orderBasicInfo.getOrderCode(); BigDecimal orderAmount = orderBasicInfo.getOrderAmount(); // 更新订单详情 查询订单详情 修改订单数据 From e4a8602f74af0ef9e0638e5e9303127fc337f529 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 14:42:57 +0800 Subject: [PATCH 15/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/service/TempService.java | 4 ++-- 1 file changed, 2 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 2515bc432..c671c5182 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -31,7 +31,7 @@ import com.jsowell.pile.mapper.OrderBasicInfoMapper; import com.jsowell.pile.mapper.PileMsgRecordMapper; import com.jsowell.pile.service.*; import com.jsowell.pile.service.programlogic.AbstractProgramLogic; -import com.jsowell.pile.service.programlogic.DelayMerchantProgramLogic; +import com.jsowell.pile.service.programlogic.ProgramLogicFactory; import com.jsowell.pile.vo.web.*; import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; @@ -882,7 +882,7 @@ public class TempService { } public void testSettleOrderLogic(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { - AbstractProgramLogic programLogic = new DelayMerchantProgramLogic(); + AbstractProgramLogic programLogic = ProgramLogicFactory.getProgramLogic("1"); // 获取更新数据后的orderBasicInfo对象 programLogic.returnUpdateOrderBasicInfo(orderBasicInfo, data); From 94c3f33b5ed1e4d01ca2e45d8a0c918a7a7aee91 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 15:30:39 +0800 Subject: [PATCH 16/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 77 ++++++++++--------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index c4c2a11b0..da12b619f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -277,7 +277,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { * @return 查询并更新过数据的orderDetail */ public OrderDetail returnUpdateOrderDetail(OrderBasicInfo orderBasicInfo, TransactionRecordsData data) { - logger.info("获取更新数据后的orderDetail对象, orderBasicInfo:{}, TransactionRecordsData:{}", JSON.toJSONString(orderBasicInfo), JSON.toJSONString(data)); + logger.info("start更新订单详情:【{}】, orderBasicInfo:{}, TransactionRecordsData:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(orderBasicInfo), JSON.toJSONString(data)); String orderCode = orderBasicInfo.getOrderCode(); BigDecimal orderAmount = orderBasicInfo.getOrderAmount(); // 更新订单详情 查询订单详情 修改订单数据 @@ -472,6 +472,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity)); // 订单总金额 orderDetail.setTotalOrderAmount(orderAmount); + logger.info("end更新订单详情:【{}】, 电费总金额:{}, 服务费总金额:{}, 总用电量:{}, 订单总金额:{}", orderCode, totalElectricityAmount, totalServiceAmount, orderDetail.getTotalUsedElectricity(), orderAmount); } catch (Exception e) { logger.error("orderCode:{}, 设置订单详情参数发生异常", orderCode, e); } @@ -724,10 +725,10 @@ public abstract class AbstractProgramLogic implements InitializingBean { String memberId = orderBasicInfo.getMemberId(); // 会员id String stationId = orderBasicInfo.getStationId(); // 站点id String merchantId = orderBasicInfo.getMerchantId(); // 运营商id + String orderCode = orderBasicInfo.getOrderCode(); // 订单号 if (orderDetail == null) { - logger.info("计算订单折扣V2, OrderDetail为空(orderCode:{}, transactionCode:{}), 直接返回!", - orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode()); + logger.info("计算订单折扣V2, OrderDetail为空(orderCode:{}, transactionCode:{}), 直接返回!", orderCode, orderBasicInfo.getTransactionCode()); return; } @@ -760,69 +761,70 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 尖时段用电量 BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity(); if (sharpUsedElectricity != null) { + // 计算该时段电费单价 + BigDecimal electricityPrice = billingTemplateVO.getSharpElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal sharpElectricityAmount = billingTemplateVO.getSharpElectricityPrice() - .multiply(sharpUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + // 计算该时段服务费单价 + BigDecimal servicePrice = billingTemplateVO.getSharpServicePrice(); // 计算该时段服务费 - BigDecimal sharpServiceAmount = billingTemplateVO.getSharpServicePrice() - .multiply(sharpUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); // 汇总 - afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(sharpElectricityAmount); - afterDiscountServiceAmount = afterDiscountServiceAmount.add(sharpServiceAmount); + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(serviceAmount); + // logger.info("计算订单折扣V2:【{}】, 当前为尖时段, 电费单价:{}, 服务费单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}"); } // 峰时段用电量 BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity(); if (peakUsedElectricity != null) { + // 计算该时段电费单价 + BigDecimal electricityPrice = billingTemplateVO.getPeakElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal peakElectricityAmount = billingTemplateVO.getPeakElectricityPrice() - .multiply(peakUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); // 计算该时段服务费 - BigDecimal peakServiceAmount = billingTemplateVO.getPeakServicePrice() - .multiply(peakUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal servicePrice = billingTemplateVO.getPeakServicePrice(); + // 计算该时段服务费 = 服务费单价 x 用电量 + BigDecimal serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); // 汇总 - afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(peakElectricityAmount); - afterDiscountServiceAmount = afterDiscountServiceAmount.add(peakServiceAmount); + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(serviceAmount); } // 平时段用电量 BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity(); if (flatUsedElectricity != null) { + // 计算该时段电费单价 + BigDecimal electricityPrice = billingTemplateVO.getFlatElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal flatElectricityAmount = billingTemplateVO.getFlatElectricityPrice() - .multiply(flatUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + // 计算该时段服务费单价 + BigDecimal servicePrice = billingTemplateVO.getFlatServicePrice(); // 计算该时段服务费 - BigDecimal flatServiceAmount = billingTemplateVO.getFlatServicePrice() - .multiply(flatUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); // 汇总 - afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(flatElectricityAmount); - afterDiscountServiceAmount = afterDiscountServiceAmount.add(flatServiceAmount); + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(serviceAmount); } // 谷时段用电量 BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity(); if (valleyUsedElectricity != null) { + // 计算该时段电费单价 + BigDecimal electricityPrice = billingTemplateVO.getValleyElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal valleyElectricityAmount = billingTemplateVO.getValleyElectricityPrice() - .multiply(valleyUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + // 计算该时段服务费单价 + BigDecimal servicePrice = billingTemplateVO.getValleyServicePrice(); // 计算该时段服务费 - BigDecimal valleyServiceAmount = billingTemplateVO.getValleyServicePrice() - .multiply(valleyUsedElectricity) - .setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); // 汇总 - afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(valleyElectricityAmount); - afterDiscountServiceAmount = afterDiscountServiceAmount.add(valleyServiceAmount); + afterDiscountElectricityAmount = afterDiscountElectricityAmount.add(electricityAmount); + afterDiscountServiceAmount = afterDiscountServiceAmount.add(serviceAmount); } // 计算优惠了多少钱 @@ -830,6 +832,9 @@ public abstract class AbstractProgramLogic implements InitializingBean { electricityAmountDiscount = originalTotalElectricityAmount.subtract(afterDiscountElectricityAmount); // 服务费折扣金额 = 优惠前服务费 - 优惠后服务费 serviceAmountDiscount = originalTotalServiceAmount.subtract(afterDiscountServiceAmount); + + logger.info("计算订单折扣, orderCode:{}, 原始电费金额:{}, 折扣后电费金额:{}, 电费折扣金额:{}, 原始服务费金额:{}, 折扣后服务费金额:{}, 服务费折扣金额:{}", + orderCode, originalTotalElectricityAmount, afterDiscountElectricityAmount, electricityAmountDiscount, originalTotalServiceAmount, afterDiscountServiceAmount, serviceAmountDiscount); } /* @@ -858,7 +863,7 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 服务费折扣金额(服务费便宜了多少钱) orderDetail.setDiscountServiceAmount(serviceAmountDiscount); logger.info("计算订单折扣, orderCode:{}, memberId:{}, 订单折扣金额:{}, 电费折扣金额:{}, 服务费折扣金额:{}, 优惠后总消费金额:{}", - orderBasicInfo.getOrderCode(), memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount); + orderCode, memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount); } /** From 72b99da831fe3bc7060d0e62bf742947173713b8 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 15:52:08 +0800 Subject: [PATCH 17/30] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 63 ++++++++++--------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index da12b619f..f9847efc5 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -301,23 +301,23 @@ public abstract class AbstractProgramLogic implements InitializingBean { BigDecimal electricityPrice = orderDetail.getSharpElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal sharpElectricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); - totalElectricityAmount = totalElectricityAmount.add(sharpElectricityAmount); + totalElectricityAmount = totalElectricityAmount.add(electricityAmount); // 该时段服务费单价 BigDecimal servicePrice = orderDetail.getSharpServicePrice(); // 计算该时段服务费 - BigDecimal sharpServiceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); - totalServiceAmount = totalServiceAmount.add(sharpServiceAmount); + totalServiceAmount = totalServiceAmount.add(serviceAmount); // 该时段单价 = 电费单价 + 服务费单价 BigDecimal price = electricityPrice.add(servicePrice); // 该时段金额 = 该时段电费 + 该时段服务费 - BigDecimal amount = sharpElectricityAmount.add(sharpServiceAmount); + BigDecimal amount = electricityAmount.add(serviceAmount); // if (data.getSharpPrice() != null) { // orderDetail.setSharpPrice(new BigDecimal(data.getSharpPrice())); @@ -328,8 +328,8 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setSharpPrice(price); orderDetail.setSharpAmount(amount); - logger.info("更新订单详情:【{}】, 当前为尖时段, 电费单价:{}, 服务费单价:{}, 时段单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}", - orderCode, electricityPrice, servicePrice, price, sharpUsedElectricity, amount, data.getSharpPrice(), data.getSharpAmount()); + logger.info("更新订单详情:【{}】, 当前为尖时段, 时段单价:{}(电费单价:{}+服务费单价:{}), 耗电量:{}, 平台计算该时段消费金额:{}(电费:{}+服务费:{}), 桩传的单价:{}, 桩传的金额:{}", + orderCode, price, electricityPrice, servicePrice, sharpUsedElectricity, amount, electricityAmount, serviceAmount, data.getSharpPrice(), data.getSharpAmount()); } // 峰时段用电量 @@ -342,23 +342,23 @@ public abstract class AbstractProgramLogic implements InitializingBean { BigDecimal electricityPrice = orderDetail.getPeakElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal peakElectricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); - totalElectricityAmount = totalElectricityAmount.add(peakElectricityAmount); + totalElectricityAmount = totalElectricityAmount.add(electricityAmount); // 该时段服务费单价 BigDecimal servicePrice = orderDetail.getPeakServicePrice(); // 计算该时段服务费 - BigDecimal peakServiceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); - totalServiceAmount = totalServiceAmount.add(peakServiceAmount); + totalServiceAmount = totalServiceAmount.add(serviceAmount); // 该时段单价 = 电费单价 + 服务费单价 BigDecimal price = electricityPrice.add(servicePrice); // 该时段金额 = 该时段电费 + 该时段服务费 - BigDecimal amount = peakElectricityAmount.add(peakServiceAmount); + BigDecimal amount = electricityAmount.add(serviceAmount); // if (data.getPeakPrice() != null) { // orderDetail.setPeakPrice(new BigDecimal(data.getPeakPrice())); @@ -369,8 +369,9 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setPeakPrice(price); orderDetail.setPeakAmount(amount); - logger.info("更新订单详情:【{}】, 当前为峰时段, 电费单价:{}, 服务费单价:{}, 时段单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}", - orderCode, electricityPrice, servicePrice, price, peakUsedElectricity, amount, data.getPeakPrice(), data.getPeakAmount()); + + logger.info("更新订单详情:【{}】, 当前为峰时段, 时段单价:{}(电费单价:{}+服务费单价:{}), 耗电量:{}, 平台计算该时段消费金额:{}(电费:{}+服务费:{}), 桩传的单价:{}, 桩传的金额:{}", + orderCode, price, electricityPrice, servicePrice, peakUsedElectricity, amount, electricityAmount, serviceAmount, data.getPeakPrice(), data.getPeakAmount()); } // 平时段用电量 @@ -383,23 +384,23 @@ public abstract class AbstractProgramLogic implements InitializingBean { BigDecimal electricityPrice = orderDetail.getFlatElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal flatElectricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); - totalElectricityAmount = totalElectricityAmount.add(flatElectricityAmount); + totalElectricityAmount = totalElectricityAmount.add(electricityAmount); // 该时段服务费单价 BigDecimal servicePrice = orderDetail.getFlatServicePrice(); // 计算该时段服务费 - BigDecimal flatServiceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); - totalServiceAmount = totalServiceAmount.add(flatServiceAmount); + totalServiceAmount = totalServiceAmount.add(serviceAmount); // 该时段单价 = 电费单价 + 服务费单价 BigDecimal price = electricityPrice.add(servicePrice); // 该时段金额 = 该时段电费 + 该时段服务费 - BigDecimal amount = flatElectricityAmount.add(flatServiceAmount); + BigDecimal amount = electricityAmount.add(serviceAmount); // if (data.getFlatPrice() != null) { // orderDetail.setFlatPrice(new BigDecimal(data.getFlatPrice())); @@ -410,8 +411,9 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setFlatPrice(price); orderDetail.setFlatAmount(amount); - logger.info("更新订单详情:【{}】, 当前为平时段, 电费单价:{}, 服务费单价:{}, 时段单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}", - orderCode, electricityPrice, servicePrice, price, flatUsedElectricity, amount, data.getFlatPrice(), data.getFlatAmount()); + + logger.info("更新订单详情:【{}】, 当前为平时段, 时段单价:{}(电费单价:{}+服务费单价:{}), 耗电量:{}, 平台计算该时段消费金额:{}(电费:{}+服务费:{}), 桩传的单价:{}, 桩传的金额:{}", + orderCode, price, electricityPrice, servicePrice, flatUsedElectricity, amount, electricityAmount, serviceAmount, data.getFlatPrice(), data.getFlatAmount()); } // 谷时段用电量 @@ -424,23 +426,23 @@ public abstract class AbstractProgramLogic implements InitializingBean { BigDecimal electricityPrice = orderDetail.getValleyElectricityPrice(); // 计算该时段电费 = 电费单价 x 用电量 - BigDecimal valleyElectricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); - totalElectricityAmount = totalElectricityAmount.add(valleyElectricityAmount); + totalElectricityAmount = totalElectricityAmount.add(electricityAmount); // 该时段服务费单价 BigDecimal servicePrice = orderDetail.getValleyServicePrice(); // 计算该时段服务费 - BigDecimal valleyServiceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + BigDecimal serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); - totalServiceAmount = totalServiceAmount.add(valleyServiceAmount); + totalServiceAmount = totalServiceAmount.add(serviceAmount); // 该时段单价 = 电费单价 + 服务费单价 BigDecimal price = electricityPrice.add(servicePrice); // 该时段金额 = 该时段电费 + 该时段服务费 - BigDecimal amount = valleyElectricityAmount.add(valleyServiceAmount); + BigDecimal amount = electricityAmount.add(serviceAmount); // if (data.getValleyPrice() != null) { // orderDetail.setValleyPrice(new BigDecimal(data.getValleyPrice())); @@ -451,13 +453,16 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setValleyPrice(price); orderDetail.setValleyAmount(amount); - logger.info("更新订单详情:【{}】, 当前为谷时段, 电费单价:{}, 服务费单价:{}, 时段单价:{}, 耗电量:{}, 平台计算该时段消费金额:{}, 桩传的单价:{}, 桩传的金额:{}", - orderCode, electricityPrice, servicePrice, price, valleyUsedElectricity, amount, data.getValleyPrice(), data.getValleyAmount()); + + logger.info("更新订单详情:【{}】, 当前为谷时段, 时段单价:{}(电费单价:{}+服务费单价:{}), 耗电量:{}, 平台计算该时段消费金额:{}(电费:{}+服务费:{}), 桩传的单价:{}, 桩传的金额:{}", + orderCode, price, electricityPrice, servicePrice, valleyUsedElectricity, amount, electricityAmount, serviceAmount, data.getValleyPrice(), data.getValleyAmount()); } // 如果算出来的 电费金额 + 服务费金额 != 总消费金额,则电费金额等于总消费金额 - 服务费金额 if (totalElectricityAmount.add(totalServiceAmount).compareTo(orderAmount) != 0) { - totalElectricityAmount = orderAmount.subtract(totalServiceAmount); + // 2025年3月26日15点50分, 订单金额以平台计算为主,所以注释掉, 并打印日志说明 + // totalElectricityAmount = orderAmount.subtract(totalServiceAmount); + logger.info("平台计算出电费金额:{}, 服务费金额:{}, 汇总:{}, 交易记录传来的金额:{}", totalElectricityAmount, totalServiceAmount, totalElectricityAmount.add(totalServiceAmount), orderAmount); } // 电费总金额 From 738854e2a6666c9f6363ac2b07bb2b64cfa2596d Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 16:10:50 +0800 Subject: [PATCH 18/30] =?UTF-8?q?=E4=B8=8D=E4=BD=BF=E7=94=A8=E4=BA=A4?= =?UTF-8?q?=E6=98=93=E8=AE=B0=E5=BD=95=E4=B8=AD=E7=9A=84=E6=97=B6=E6=AE=B5?= =?UTF-8?q?=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 28 ------------------- 1 file changed, 28 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index f9847efc5..6cb094405 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -319,13 +319,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 该时段金额 = 该时段电费 + 该时段服务费 BigDecimal amount = electricityAmount.add(serviceAmount); - // if (data.getSharpPrice() != null) { - // orderDetail.setSharpPrice(new BigDecimal(data.getSharpPrice())); - // } - // if (data.getSharpAmount() != null) { - // orderDetail.setSharpAmount(new BigDecimal(data.getSharpAmount())); - // } - orderDetail.setSharpPrice(price); orderDetail.setSharpAmount(amount); logger.info("更新订单详情:【{}】, 当前为尖时段, 时段单价:{}(电费单价:{}+服务费单价:{}), 耗电量:{}, 平台计算该时段消费金额:{}(电费:{}+服务费:{}), 桩传的单价:{}, 桩传的金额:{}", @@ -360,13 +353,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 该时段金额 = 该时段电费 + 该时段服务费 BigDecimal amount = electricityAmount.add(serviceAmount); - // if (data.getPeakPrice() != null) { - // orderDetail.setPeakPrice(new BigDecimal(data.getPeakPrice())); - // } - // if (data.getPeakAmount() != null) { - // orderDetail.setPeakAmount(new BigDecimal(data.getPeakAmount())); - // } - orderDetail.setPeakPrice(price); orderDetail.setPeakAmount(amount); @@ -402,13 +388,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 该时段金额 = 该时段电费 + 该时段服务费 BigDecimal amount = electricityAmount.add(serviceAmount); - // if (data.getFlatPrice() != null) { - // orderDetail.setFlatPrice(new BigDecimal(data.getFlatPrice())); - // } - // if (data.getFlatAmount() != null) { - // orderDetail.setFlatAmount(new BigDecimal(data.getFlatAmount())); - // } - orderDetail.setFlatPrice(price); orderDetail.setFlatAmount(amount); @@ -444,13 +423,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { // 该时段金额 = 该时段电费 + 该时段服务费 BigDecimal amount = electricityAmount.add(serviceAmount); - // if (data.getValleyPrice() != null) { - // orderDetail.setValleyPrice(new BigDecimal(data.getValleyPrice())); - // } - // if (data.getValleyAmount() != null) { - // orderDetail.setValleyAmount(new BigDecimal(data.getValleyAmount())); - // } - orderDetail.setValleyPrice(price); orderDetail.setValleyAmount(amount); From 99a39bce5f1052553e1b609376fcbbeb6d616753 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 16:25:52 +0800 Subject: [PATCH 19/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/AbstractProgramLogic.java | 11 +++++++++-- .../programlogic/DelayMerchantProgramLogic.java | 16 ++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 6cb094405..d895308c6 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -430,11 +430,15 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderCode, price, electricityPrice, servicePrice, valleyUsedElectricity, amount, electricityAmount, serviceAmount, data.getValleyPrice(), data.getValleyAmount()); } + // 平台计算的总消费金额 平台计算总电费金额 + 平台计算总服务费金额 + BigDecimal computeTotalAmount = totalElectricityAmount.add(totalServiceAmount); + // 如果算出来的 电费金额 + 服务费金额 != 总消费金额,则电费金额等于总消费金额 - 服务费金额 - if (totalElectricityAmount.add(totalServiceAmount).compareTo(orderAmount) != 0) { + if (computeTotalAmount.compareTo(orderAmount) != 0) { // 2025年3月26日15点50分, 订单金额以平台计算为主,所以注释掉, 并打印日志说明 // totalElectricityAmount = orderAmount.subtract(totalServiceAmount); - logger.info("平台计算出电费金额:{}, 服务费金额:{}, 汇总:{}, 交易记录传来的金额:{}", totalElectricityAmount, totalServiceAmount, totalElectricityAmount.add(totalServiceAmount), orderAmount); + logger.info("平台计算出电费金额:{}, 服务费金额:{}, 汇总:{}, 交易记录传来的金额:{}", totalElectricityAmount, totalServiceAmount, computeTotalAmount, orderAmount); + orderAmount = computeTotalAmount; } // 电费总金额 @@ -449,6 +453,9 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity)); // 订单总金额 orderDetail.setTotalOrderAmount(orderAmount); + // 更新订单主表中的总消费金额和退款金额 + orderBasicInfo.setOrderAmount(orderAmount); + orderBasicInfo.setRefundAmount(orderBasicInfo.getPayAmount().subtract(orderAmount)); logger.info("end更新订单详情:【{}】, 电费总金额:{}, 服务费总金额:{}, 总用电量:{}, 订单总金额:{}", orderCode, totalElectricityAmount, totalServiceAmount, orderDetail.getTotalUsedElectricity(), orderAmount); } catch (Exception e) { logger.error("orderCode:{}, 设置订单详情参数发生异常", orderCode, e); 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 cbd87489f..ab94214b7 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 @@ -493,14 +493,14 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { .orderCode(orderBasicInfo.getOrderCode()) .merchantId(orderBasicInfo.getMerchantId()) .stationId(orderBasicInfo.getStationId()) - .orderPayAmount(orderBasicInfo.getPayAmount()) - .orderConsumeAmount(orderBasicInfo.getOrderAmount()) - .orderSettleAmount(orderBasicInfo.getSettleAmount()) - .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) - .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) - .orderServiceAmount(orderDetail.getTotalServiceAmount()) - .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) - .orderRefundAmount(orderBasicInfo.getRefundAmount()) + .orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额 + .orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额 + .orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额 + .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额 + .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额 + .orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额 + .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额 + .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 .build(); rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); From 87a84c020a32e8197e6b82025cc3c364f72e7b72 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 17:15:54 +0800 Subject: [PATCH 20/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/service/TempService.java | 8 +- .../programlogic/AbstractProgramLogic.java | 194 ++++++++++++++++++ .../DelayMerchantProgramLogic.java | 69 +++++++ 3 files changed, 269 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 c671c5182..6bd0ff59a 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -885,10 +885,14 @@ public class TempService { AbstractProgramLogic programLogic = ProgramLogicFactory.getProgramLogic("1"); // 获取更新数据后的orderBasicInfo对象 - programLogic.returnUpdateOrderBasicInfo(orderBasicInfo, data); + // programLogic.returnUpdateOrderBasicInfo(orderBasicInfo, data); // 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据 - OrderDetail orderDetail = programLogic.returnUpdateOrderDetail(orderBasicInfo, data); + // OrderDetail orderDetail = programLogic.returnUpdateOrderDetail(orderBasicInfo, data); + + // 查询订单详情 + OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderBasicInfo.getOrderCode()); + programLogic.updateOrderBasicInfoAndOrderDetail(data, orderBasicInfo, orderDetail); // 计算订单折扣 programLogic.calculateOrderDiscountsV2(orderBasicInfo, orderDetail); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index d895308c6..d3a0d424d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -149,6 +149,8 @@ public abstract class AbstractProgramLogic implements InitializingBean { */ public abstract void settleOrder(TransactionRecordsData data, OrderBasicInfo orderBasicInfo); + public abstract void settleOrderV2(TransactionRecordsData data, OrderBasicInfo orderBasicInfo); + /** * 电单车结算逻辑 * @param message @@ -463,6 +465,198 @@ public abstract class AbstractProgramLogic implements InitializingBean { return orderDetail; } + /** + * 更新订单主表和订单详情中的各种金额 + * 只交易记录中的耗电量, 其他金额都以平台计算为主 + * @param data 交易记录数据 + * @param orderBasicInfo 订单基础信息 + * @param orderDetail 订单详情 + */ + public void updateOrderBasicInfoAndOrderDetail(TransactionRecordsData data, OrderBasicInfo orderBasicInfo, OrderDetail orderDetail) { + // 订单编号 + String orderCode = orderBasicInfo.getOrderCode(); + // 订单支付金额 + BigDecimal payAmount = orderBasicInfo.getPayAmount(); + // data中的消费金额 精确到小数点后四位,包含电费、 服务费 + BigDecimal dataOrderAmount = new BigDecimal(data.getConsumptionAmount()).setScale(2, RoundingMode.HALF_UP); + // data中的总用电量 + BigDecimal totalElectricity = new BigDecimal(StringUtils.isBlank(data.getTotalElectricity()) ? Constants.ZERO : data.getTotalElectricity()); + // 总电费金额 + BigDecimal totalElectricityAmount = BigDecimal.ZERO; + // 总服务费金额 + BigDecimal totalServiceAmount = BigDecimal.ZERO; + + // 尖时段用电量 + BigDecimal sharpUsedElectricity = StringUtils.isNotBlank(data.getSharpUsedElectricity()) ? new BigDecimal(data.getSharpUsedElectricity()) : BigDecimal.ZERO; + if (sharpUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { + // 该时段电费单价 + BigDecimal electricityPrice = orderDetail.getSharpElectricityPrice(); + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal electricityAmount = electricityPrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + // 该时段服务费单价 + BigDecimal servicePrice = orderDetail.getSharpServicePrice(); + // 计算该时段服务费 = 服务费单价 x 用电量 + BigDecimal serviceAmount = servicePrice.multiply(sharpUsedElectricity).setScale(2, RoundingMode.DOWN); + // 汇总 + totalElectricityAmount = totalElectricityAmount.add(electricityAmount); + totalServiceAmount = totalServiceAmount.add(serviceAmount); + // 该时段单价 = 电费单价 + 服务费单价 + BigDecimal price = electricityPrice.add(servicePrice); + // 该时段金额 = 该时段电费 + 该时段服务费 + BigDecimal amount = electricityAmount.add(serviceAmount); + orderDetail.setSharpPrice(price); + orderDetail.setSharpAmount(amount); + logger.info("updateOrderBasicInfoAndOrderDetail:【{}】, 当前为尖时段, 时段单价:{}(电费单价:{}+服务费单价:{}), 耗电量:{}, 平台计算该时段消费金额:{}(电费:{}+服务费:{}), 桩传的单价:{}, 桩传的金额:{}", + orderCode, price, electricityPrice, servicePrice, sharpUsedElectricity, amount, electricityAmount, serviceAmount, data.getSharpPrice(), data.getSharpAmount()); + } + + // 峰时段用电量 + BigDecimal peakUsedElectricity = StringUtils.isNotBlank(data.getPeakUsedElectricity()) ? new BigDecimal(data.getPeakUsedElectricity()) : BigDecimal.ZERO; + if (peakUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { + // 该时段电费单价 + BigDecimal electricityPrice = orderDetail.getPeakElectricityPrice(); + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal electricityAmount = electricityPrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + // 该时段服务费单价 + BigDecimal servicePrice = orderDetail.getPeakServicePrice(); + // 计算该时段服务费 = 服务费单价 x 用电量 + BigDecimal serviceAmount = servicePrice.multiply(peakUsedElectricity).setScale(2, RoundingMode.DOWN); + // 汇总 + totalElectricityAmount = totalElectricityAmount.add(electricityAmount); + totalServiceAmount = totalServiceAmount.add(serviceAmount); + // 该时段单价 = 电费单价 + 服务费单价 + BigDecimal price = electricityPrice.add(servicePrice); + // 该时段金额 = 该时段电费 + 该时段服务费 + BigDecimal amount = electricityAmount.add(serviceAmount); + orderDetail.setPeakPrice(price); + orderDetail.setPeakAmount(amount); + logger.info("updateOrderBasicInfoAndOrderDetail:【{}】, 当前为峰时段, 时段单价:{}(电费单价:{}+服务费单价:{}), 耗电量:{}, 平台计算该时段消费金额:{}(电费:{}+服务费:{}), 桩传的单价:{}, 桩传的金额:{}", + orderCode, price, electricityPrice, servicePrice, peakUsedElectricity, amount, electricityAmount, serviceAmount, data.getPeakPrice(), data.getPeakAmount()); + } + + // 平时段用电量 + BigDecimal flatUsedElectricity = StringUtils.isNotBlank(data.getFlatUsedElectricity()) ? new BigDecimal(data.getFlatUsedElectricity()) : BigDecimal.ZERO; + if (flatUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { + // 该时段电费单价 + BigDecimal electricityPrice = orderDetail.getFlatElectricityPrice(); + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal electricityAmount = electricityPrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + // 该时段服务费单价 + BigDecimal servicePrice = orderDetail.getFlatServicePrice(); + // 计算该时段服务费 = 服务费单价 x 用电量 + BigDecimal serviceAmount = servicePrice.multiply(flatUsedElectricity).setScale(2, RoundingMode.DOWN); + // 汇总 + totalElectricityAmount = totalElectricityAmount.add(electricityAmount); + totalServiceAmount = totalServiceAmount.add(serviceAmount); + // 该时段单价 = 电费单价 + 服务费单价 + BigDecimal price = electricityPrice.add(servicePrice); + // 该时段金额 = 该时段电费 + 该时段服务费 + BigDecimal amount = electricityAmount.add(serviceAmount); + orderDetail.setFlatPrice(price); + orderDetail.setFlatAmount(amount); + logger.info("updateOrderBasicInfoAndOrderDetail:【{}】, 当前为平时段, 时段单价:{}(电费单价:{}+服务费单价:{}), 耗电量:{}, 平台计算该时段消费金额:{}(电费:{}+服务费:{}), 桩传的单价:{}, 桩传的金额:{}", + orderCode, price, electricityPrice, servicePrice, flatUsedElectricity, amount, electricityAmount, serviceAmount, data.getFlatPrice(), data.getFlatAmount()); + } + + // 谷时段用电量 + BigDecimal valleyUsedElectricity = StringUtils.isNotBlank(data.getValleyUsedElectricity()) ? new BigDecimal(data.getValleyUsedElectricity()) : BigDecimal.ZERO; + if (valleyUsedElectricity.compareTo(BigDecimal.ZERO) > 0) { + // 该时段电费单价 + BigDecimal electricityPrice = orderDetail.getValleyElectricityPrice(); + // 计算该时段电费 = 电费单价 x 用电量 + BigDecimal electricityAmount = electricityPrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + // 该时段服务费单价 + BigDecimal servicePrice = orderDetail.getValleyServicePrice(); + // 计算该时段服务费 = 服务费单价 x 用电量 + BigDecimal serviceAmount = servicePrice.multiply(valleyUsedElectricity).setScale(2, RoundingMode.DOWN); + // 汇总 + totalElectricityAmount = totalElectricityAmount.add(electricityAmount); + totalServiceAmount = totalServiceAmount.add(serviceAmount); + // 该时段单价 = 电费单价 + 服务费单价 + BigDecimal price = electricityPrice.add(servicePrice); + // 该时段金额 = 该时段电费 + 该时段服务费 + BigDecimal amount = electricityAmount.add(serviceAmount); + orderDetail.setValleyPrice(price); + orderDetail.setValleyAmount(amount); + logger.info("updateOrderBasicInfoAndOrderDetail:【{}】, 当前为谷时段, 时段单价:{}(电费单价:{}+服务费单价:{}), 耗电量:{}, 平台计算该时段消费金额:{}(电费:{}+服务费:{}), 桩传的单价:{}, 桩传的金额:{}", + orderCode, price, electricityPrice, servicePrice, valleyUsedElectricity, amount, electricityAmount, serviceAmount, data.getValleyPrice(), data.getValleyAmount()); + } + // 尖峰平谷用电量汇总 + BigDecimal sumUsedElectricity = sharpUsedElectricity.add(peakUsedElectricity).add(flatUsedElectricity).add(valleyUsedElectricity); + // 平台计算的总消费金额 平台计算总电费金额 + 平台计算总服务费金额 + BigDecimal computeTotalAmount = totalElectricityAmount.add(totalServiceAmount); + + // 如果算出来的 电费金额 + 服务费金额 != 总消费金额,则电费金额等于总消费金额 - 服务费金额 + if (computeTotalAmount.compareTo(dataOrderAmount) != 0) { + // 2025年3月26日15点50分, 订单金额以平台计算为主,所以注释掉, 并打印日志说明 + // totalElectricityAmount = dataOrderAmount.subtract(totalServiceAmount); + logger.info("updateOrderBasicInfoAndOrderDetail平台计算出电费金额:{}, 服务费金额:{}, 汇总:{}, 交易记录传来的金额:{}", totalElectricityAmount, totalServiceAmount, computeTotalAmount, dataOrderAmount); + dataOrderAmount = computeTotalAmount; + } + + // 虚拟金额 指订单消费中不参与结算的部分 + BigDecimal virtualAmount = BigDecimal.ZERO; + if (OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue().equals(orderBasicInfo.getPayMode()) + || OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) { + // 白名单支付所消费的金额,都属于虚拟金额,不参与结算对账 + virtualAmount = new BigDecimal(dataOrderAmount.toString()); + logger.info("updateOrderBasicInfoAndOrderDetail结算订单:【{}】, 虚拟金额为:{}, 白名单支付所消费的金额,都属于虚拟金额,不参与结算对账", orderCode, virtualAmount); + } + + // 有时候充电桩到达金额停止充电会多出一点金额,比如实际需要充50元的电,充电桩传来的消费金额为50.01元,在后台记录的时候需要舍去 + if (dataOrderAmount.compareTo(payAmount) > 0) { + logger.info("updateOrderBasicInfoAndOrderDetail结算订单:【{}】充电桩传来的消费金额:【{}】大于付款金额:【{}】, 消费金额设置为付款金额相等数据", orderCode, dataOrderAmount, payAmount); + dataOrderAmount = payAmount; + } + + // 退款金额 = 支付金额 - 订单消费金额 剩余需要退回的金额 residue + BigDecimal refundAmount = payAmount.subtract(dataOrderAmount); + + /* + orderBasicInfo需要更新的字段 + */ + orderBasicInfo.setOrderStatus(OrderStatusEnum.ORDER_COMPLETE.getValue()); + orderBasicInfo.setOrderAmount(dataOrderAmount); // 订单消费金额 + orderBasicInfo.setRefundAmount(refundAmount); // 订单退款金额 + orderBasicInfo.setVirtualAmount(virtualAmount); // 虚拟金额 + orderBasicInfo.setSettleAmount(dataOrderAmount.subtract(virtualAmount)); // 结算金额 = 消费金额 - 虚拟金额 + orderBasicInfo.setReason(data.getStopReasonMsg()); // 充电停止原因 + orderBasicInfo.setSettlementTime(DateUtils.getNowDate()); // 结算时间 + updateSOC(orderBasicInfo); + + /* + orderDetail需要更新的字段 + */ + orderDetail.setSharpUsedElectricity(sharpUsedElectricity); // 尖时段用电量 + orderDetail.setPeakUsedElectricity(peakUsedElectricity); // 峰时段用电量 + orderDetail.setFlatUsedElectricity(flatUsedElectricity); // 平时段用电量 + orderDetail.setValleyUsedElectricity(valleyUsedElectricity); // 谷时段用电量 + orderDetail.setTotalElectricityAmount(totalElectricityAmount); // 电费总金额 + orderDetail.setTotalServiceAmount(totalServiceAmount); // 服务费总金额 + // sumUsedElectricity与totalElectricity对比, 取最大的值 + orderDetail.setTotalUsedElectricity(totalElectricity.max(sumUsedElectricity)); + orderDetail.setTotalOrderAmount(dataOrderAmount); // 订单总金额 + logger.info("end updateOrderBasicInfoAndOrderDetail:【{}】, 电费总金额:{}, 服务费总金额:{}, 总用电量:{}, 订单总金额:{}", orderCode, totalElectricityAmount, totalServiceAmount, orderDetail.getTotalUsedElectricity(), dataOrderAmount); + } + + private void updateSOC(OrderBasicInfo orderBasicInfo) { + if (StringUtils.isBlank(orderBasicInfo.getStartSoc()) || StringUtils.isBlank(orderBasicInfo.getEndSoc())) { + try { + Map socMap = YKCUtils.getSOCMap(orderBasicInfo.getTransactionCode()); + if (Objects.nonNull(socMap)) { + if (StringUtils.isBlank(orderBasicInfo.getStartSoc())) { + orderBasicInfo.setStartSoc(socMap.get("startSoc")); + } + if (StringUtils.isBlank(orderBasicInfo.getEndSoc())) { + orderBasicInfo.setEndSoc(socMap.get("endSoc")); + } + } + } catch (Exception e) { + logger.error("获取订单充电开始结束SOC失败:{}", e.getMessage()); + } + } + } + /** * 获取更新数据后的orderDetail对象(给第三方平台结算订单用) 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 ab94214b7..650c12d66 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 @@ -524,6 +524,75 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode(), JSON.toJSONString(dto)); } + /** + * 订单结算/结算订单逻辑/订单结算逻辑 + */ + @Override + public void settleOrderV2(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { + logger.info("【{}】-结算订单V2start data:{}, orderBasicInfo:{}", this.getClass().getSimpleName(), data.toString(), JSON.toJSONString(orderBasicInfo)); + // 判断订单状态 + if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) { + logger.info("结算订单V2:{}, 是订单完成状态", orderBasicInfo.getOrderCode()); + return; + } + + // 获取更新数据后的orderBasicInfo对象 + // returnUpdateOrderBasicInfo(orderBasicInfo, data); + + // 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据 + // OrderDetail orderDetail = returnUpdateOrderDetail(orderBasicInfo, data); + + // 查询订单详情 + OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderBasicInfo.getOrderCode()); + + // 计算订单各种金额 + updateOrderBasicInfoAndOrderDetail(data, orderBasicInfo, orderDetail); + + // 计算订单折扣 + calculateOrderDiscountsV2(orderBasicInfo, orderDetail); + + // 更新数据库 + OrderTransactionDTO dto = new OrderTransactionDTO(); + dto.setOrderBasicInfo(orderBasicInfo); + dto.setOrderDetail(orderDetail); + transactionService.doUpdateOrder(dto); + + // 组装after参数 + AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder() + .orderCode(orderBasicInfo.getOrderCode()) + .merchantId(orderBasicInfo.getMerchantId()) + .stationId(orderBasicInfo.getStationId()) + .orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额 + .orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额 + .orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额 + .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额 + .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额 + .orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额 + .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额 + .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 + .build(); + rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); + + // 将卡/vin状态解锁 + if (!StringUtils.equals("0000000000000000", data.getLogicCard())) { + cardStatusUnlocked(orderBasicInfo.getLogicCard()); + } + + // 如果是vin启动,将启动锁定状态改为正常 + if (StringUtils.equals(data.getTransactionIdentifier(), "05")) { + vinStatusUnlocked(data.getVinCode()); + } + + // 发送停止充电订阅消息 + sendMsg(orderBasicInfo); + + // 从redis中取出实时记录保存到表中 + realTimeMonitorDataRedis2DB(orderBasicInfo.getTransactionCode(), orderBasicInfo.getOrderCode()); + + logger.info("结算订单V2end! orderCode:{}, transactionCode:{}, OrderTransactionDTO:{}", + orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode(), JSON.toJSONString(dto)); + } + @Override public void settleOrderForEBike(EBikeMessageCmd03 message, OrderBasicInfo orderBasicInfo) { // 判断订单状态 From 03ed70e58adc018dbd501beb7a89946181bcf55a Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 19:12:22 +0800 Subject: [PATCH 21/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/programlogic/NotDelayMerchantProgramLogic.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java index 11c3eb876..97da9813a 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java @@ -421,6 +421,11 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic { logger.info("结算订单end:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(dto)); } + @Override + public void settleOrderV2(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { + + } + @Override public void settleOrderForEBike(EBikeMessageCmd03 message, OrderBasicInfo orderBasicInfo) { From 5fc11ac45dc778cd7f178e96ab0c46dcf331760f Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 19:26:06 +0800 Subject: [PATCH 22/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/service/TempService.java | 5 +++++ .../pile/service/programlogic/AbstractProgramLogic.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) 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 6bd0ff59a..ca8b1ee25 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -892,10 +892,15 @@ public class TempService { // 查询订单详情 OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderBasicInfo.getOrderCode()); + programLogic.updateOrderBasicInfoAndOrderDetail(data, orderBasicInfo, orderDetail); // 计算订单折扣 programLogic.calculateOrderDiscountsV2(orderBasicInfo, orderDetail); + + logger.info("testSettleOrderLogic, orderCode:{}, 支付金额:{}, 消费金额:{}, 折扣金额:{}, 退款金额:{}, 结算金额:{}", + orderBasicInfo.getOrderCode(), orderBasicInfo.getPayAmount(), orderBasicInfo.getOrderAmount(), + orderBasicInfo.getDiscountAmount(), orderBasicInfo.getRefundAmount(), orderBasicInfo.getSettleAmount()); } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index d3a0d424d..77cefdf19 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -927,8 +927,8 @@ public abstract class AbstractProgramLogic implements InitializingBean { MemberDiscountVO memberDiscountVO = memberGroupService.queryMemberDiscountV2(merchantId, stationId, memberId); if (memberDiscountVO == null) { // 如果没有优惠,则优惠后金额 等于优惠前金额 - afterDiscountServiceAmount = orderDetail.getTotalServiceAmount(); afterDiscountElectricityAmount = orderDetail.getTotalElectricityAmount(); + afterDiscountServiceAmount = orderDetail.getTotalServiceAmount(); } else { // 集团会员的订单,记录集团编号 orderBasicInfo.setGroupCode(memberDiscountVO.getGroupCode()); From 063c4f494f67ddcb1b5450c41d3ef4182a98c823 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 19:37:05 +0800 Subject: [PATCH 23/30] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pile/service/programlogic/AbstractProgramLogic.java | 2 -- .../pile/service/programlogic/DelayMerchantProgramLogic.java | 5 ++--- .../service/programlogic/NotDelayMerchantProgramLogic.java | 4 ---- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 77cefdf19..03e1f47d2 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -149,8 +149,6 @@ public abstract class AbstractProgramLogic implements InitializingBean { */ public abstract void settleOrder(TransactionRecordsData data, OrderBasicInfo orderBasicInfo); - public abstract void settleOrderV2(TransactionRecordsData data, OrderBasicInfo orderBasicInfo); - /** * 电单车结算逻辑 * @param message 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 650c12d66..70d465261 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 @@ -454,8 +454,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { /** * 订单结算/结算订单逻辑/订单结算逻辑 */ - @Override - public void settleOrder(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { + public void settleOrderOld(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { logger.info("【{}】-结算订单start data:{}, orderBasicInfo:{}", this.getClass().getSimpleName(), data.toString(), JSON.toJSONString(orderBasicInfo)); // 判断订单状态 if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) { @@ -528,7 +527,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { * 订单结算/结算订单逻辑/订单结算逻辑 */ @Override - public void settleOrderV2(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { + public void settleOrder(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { logger.info("【{}】-结算订单V2start data:{}, orderBasicInfo:{}", this.getClass().getSimpleName(), data.toString(), JSON.toJSONString(orderBasicInfo)); // 判断订单状态 if (StringUtils.equals(orderBasicInfo.getOrderStatus(), OrderStatusEnum.ORDER_COMPLETE.getValue())) { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java index 97da9813a..11cd35d7d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/NotDelayMerchantProgramLogic.java @@ -421,10 +421,6 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic { logger.info("结算订单end:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSON.toJSONString(dto)); } - @Override - public void settleOrderV2(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { - - } @Override public void settleOrderForEBike(EBikeMessageCmd03 message, OrderBasicInfo orderBasicInfo) { From 670a35c9a14679376144d73e01d0bd604ed787a4 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 19:58:42 +0800 Subject: [PATCH 24/30] =?UTF-8?q?=E4=BD=99=E9=A2=9D=E6=94=AF=E4=BB=98,=20?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E6=B6=88=E8=B4=B9=E9=87=91=E9=A2=9D=20-=20?= =?UTF-8?q?=E6=8A=98=E6=89=A3=E9=87=91=E9=A2=9D=20+=20=E9=80=80=E6=AC=BE?= =?UTF-8?q?=E9=87=91=E9=A2=9D=20=3D=20=E6=94=AF=E4=BB=98=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/service/TempService.java | 34 +++++++++++++++++++ .../impl/OrderBasicInfoServiceImpl.java | 8 +++-- 2 files changed, 39 insertions(+), 3 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 ca8b1ee25..f1f1c1200 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -16,6 +16,7 @@ import com.jsowell.adapay.service.AdapayService; import com.jsowell.adapay.vo.OrderSplitResult; import com.jsowell.adapay.vo.PaymentInfo; import com.jsowell.common.annotation.CostTime; +import com.jsowell.common.constant.RabbitConstants; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.adapay.AdapayStatusEnum; @@ -24,6 +25,7 @@ import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.pile.domain.*; +import com.jsowell.pile.dto.AfterSettleOrderDTO; import com.jsowell.pile.dto.ApplyRefundDTO; import com.jsowell.pile.dto.QueryOrderDTO; import com.jsowell.pile.dto.SettleOrderReportDTO; @@ -32,10 +34,13 @@ import com.jsowell.pile.mapper.PileMsgRecordMapper; import com.jsowell.pile.service.*; import com.jsowell.pile.service.programlogic.AbstractProgramLogic; import com.jsowell.pile.service.programlogic.ProgramLogicFactory; +import com.jsowell.pile.transaction.dto.OrderTransactionDTO; +import com.jsowell.pile.transaction.service.TransactionService; import com.jsowell.pile.vo.web.*; import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -69,6 +74,12 @@ public class TempService { @Autowired private AdapayCallbackRecordService adapayCallbackRecordService; + @Autowired + protected TransactionService transactionService; + + @Autowired + protected RabbitTemplate rabbitTemplate; + @Autowired protected MemberGroupService memberGroupService; @@ -901,6 +912,29 @@ public class TempService { logger.info("testSettleOrderLogic, orderCode:{}, 支付金额:{}, 消费金额:{}, 折扣金额:{}, 退款金额:{}, 结算金额:{}", orderBasicInfo.getOrderCode(), orderBasicInfo.getPayAmount(), orderBasicInfo.getOrderAmount(), orderBasicInfo.getDiscountAmount(), orderBasicInfo.getRefundAmount(), orderBasicInfo.getSettleAmount()); + + // 更新数据库 + OrderTransactionDTO dto = new OrderTransactionDTO(); + dto.setOrderBasicInfo(orderBasicInfo); + dto.setOrderDetail(orderDetail); + transactionService.doUpdateOrder(dto); + + // 组装after参数 + AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder() + .orderCode(orderBasicInfo.getOrderCode()) + .merchantId(orderBasicInfo.getMerchantId()) + .stationId(orderBasicInfo.getStationId()) + .orderPayAmount(orderBasicInfo.getPayAmount()) // 支付金额 + .orderConsumeAmount(orderBasicInfo.getOrderAmount()) // 消费金额 + .orderSettleAmount(orderBasicInfo.getSettleAmount()) // 结算金额 + .orderElectricityAmount(orderDetail.getTotalElectricityAmount()) // 电费金额 + .orderElectricityDiscountAmount(orderDetail.getDiscountElectricityAmount()) // 电费折扣金额 + .orderServiceAmount(orderDetail.getTotalServiceAmount()) // 服务费金额 + .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额 + .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 + .build(); + rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); } + } 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 ea94bcac4..d97d81857 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 @@ -1911,10 +1911,12 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return null; } - // 如果是余额支付, 校验消费金额+ 退款金额 = 支付金额 + // 如果是余额支付, 校验消费金额 - 折扣金额 + 退款金额 = 支付金额 if (StringUtils.equals(orderBasicInfo.getPayMode(), "1")) { - if (orderConsumeAmount.add(orderRefundAmount).compareTo(orderPayAmount) != 0) { - logger.info("realTimeOrderSplit-订单:{}, payMode:{}, 支付金额与消费金额+退款金额不相等", afterSettleOrderDTO.getOrderCode(), orderBasicInfo.getPayMode()); + // 订单折扣金额 = 电费折扣金额 + 服务费折扣金额 + BigDecimal orderDiscountAmount = afterSettleOrderDTO.getOrderElectricityDiscountAmount().add(afterSettleOrderDTO.getOrderServiceDiscountAmount()); + if (orderConsumeAmount.subtract(orderDiscountAmount).add(orderRefundAmount).compareTo(orderPayAmount) != 0) { + logger.info("realTimeOrderSplit-订单:{}, payMode:{}, 支付金额与消费金额-折扣金额+退款金额不相等", afterSettleOrderDTO.getOrderCode(), orderBasicInfo.getPayMode()); return null; } } From fdee4a7d8c4538c3b557ce00cb7c97621e347a09 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 20:32:12 +0800 Subject: [PATCH 25/30] testSettleOrderLogicV2 --- .../api/uniapp/customer/TempController.java | 18 ++++++++++++ .../java/com/jsowell/service/TempService.java | 28 +++++++++++++------ .../pile/service/PileMsgRecordService.java | 3 ++ .../impl/PileMsgRecordServiceImpl.java | 7 +++++ .../programlogic/AbstractProgramLogic.java | 5 +++- 5 files changed, 51 insertions(+), 10 deletions(-) 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 5a6d229ae..e0969f4ce 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 @@ -766,6 +766,24 @@ public class TempController extends BaseController { return response; } + /** + * 调试结算订单逻辑 + * http://localhost:8080/temp/testSettleOrderLogic + */ + @PostMapping("/testSettleOrderLogicV2") + public RestApiResponse testSettleOrderLogicV2(@RequestBody QueryOrderDTO dto) { + RestApiResponse response; + try { + // 调试结算订单逻辑 + tempService.testSettleOrderLogicV2(dto.getOrderCode()); + response = new RestApiResponse<>(); + } catch (Exception e) { + logger.error("调试结算订单逻辑V2error,", e); + response = new RestApiResponse<>(); + } + 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 f1f1c1200..9d1417a28 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -30,7 +30,6 @@ import com.jsowell.pile.dto.ApplyRefundDTO; import com.jsowell.pile.dto.QueryOrderDTO; import com.jsowell.pile.dto.SettleOrderReportDTO; import com.jsowell.pile.mapper.OrderBasicInfoMapper; -import com.jsowell.pile.mapper.PileMsgRecordMapper; import com.jsowell.pile.service.*; import com.jsowell.pile.service.programlogic.AbstractProgramLogic; import com.jsowell.pile.service.programlogic.ProgramLogicFactory; @@ -47,6 +46,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Set; @@ -102,7 +102,7 @@ public class TempService { private MemberAdapayRecordService memberAdapayRecordService; @Autowired - private PileMsgRecordMapper pileMsgRecordMapper; + private PileMsgRecordService pileMsgRecordService; @Autowired private OrderDetailService orderDetailService; @@ -126,7 +126,7 @@ public class TempService { // 根据充电桩编号,查询报文 for (OrderListVO orderVO : orderListVOS) { String pileSn = orderVO.getPileSn(); - List pileFeedList = pileMsgRecordMapper.getPileFeedList(pileSn); + // List pileFeedList = pileMsgRecordMapper.getPileFeedList(pileSn); } // @@ -892,15 +892,25 @@ public class TempService { orderCode, memberId, discountAmount, electricityAmountDiscount, serviceAmountDiscount, totalConsumeAmount); } + public void testSettleOrderLogicV2(String orderCode) { + // 查询订单主表 + OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); + + LocalDateTime localDateTime = DateUtils.date2LocalDateTime(orderBasicInfo.getSettlementTime()); + // 开始时间为localDateTime减30秒 + LocalDateTime startTime = localDateTime.minusSeconds(30); + // 结束时间为localDateTime加30秒 + LocalDateTime endTime = localDateTime.plusSeconds(30); + // 查询这笔订单的交易记录原始数据 + List pileFeedListV2 = pileMsgRecordService.getPileFeedListV2(orderBasicInfo.getPileSn(), "0x3B", startTime, endTime); + logger.info("testSettleOrderLogicV2, orderCode:{}, pileSn:{}, startTime:{}, endTime:{}, pileFeedListV2:{}", + orderCode, orderBasicInfo.getPileSn(), startTime, endTime, JSON.toJSONString(pileFeedListV2)); + + } + public void testSettleOrderLogic(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { AbstractProgramLogic programLogic = ProgramLogicFactory.getProgramLogic("1"); - // 获取更新数据后的orderBasicInfo对象 - // programLogic.returnUpdateOrderBasicInfo(orderBasicInfo, data); - - // 获取更新数据后的orderDetail对象/更新订单详情 查询订单详情 修改订单数据 - // OrderDetail orderDetail = programLogic.returnUpdateOrderDetail(orderBasicInfo, data); - // 查询订单详情 OrderDetail orderDetail = orderBasicInfoService.getOrderDetailByOrderCode(orderBasicInfo.getOrderCode()); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileMsgRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileMsgRecordService.java index c1c12e15a..465122a93 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/PileMsgRecordService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/PileMsgRecordService.java @@ -4,6 +4,7 @@ import com.jsowell.common.core.page.PageResponse; import com.jsowell.pile.domain.PileMsgRecord; import com.jsowell.pile.dto.QueryPileDTO; +import java.time.LocalDateTime; import java.util.Date; import java.util.List; @@ -29,4 +30,6 @@ public interface PileMsgRecordService { String generateDescription(PileMsgRecord pileMsgRecord); List getPileFeedListV2(String pileSn, String frameType, Date startTime, Date endTime); + + List getPileFeedListV2(String pileSn, String frameType, LocalDateTime startTime, LocalDateTime endTime); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMsgRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMsgRecordServiceImpl.java index b654ffb78..33889375e 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMsgRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMsgRecordServiceImpl.java @@ -6,6 +6,7 @@ import com.github.pagehelper.PageInfo; import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.util.BytesUtil; +import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.YKCUtils; import com.jsowell.pile.domain.OrderBasicInfo; @@ -18,6 +19,7 @@ import com.jsowell.pile.vo.web.PileCommunicationLogVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -126,6 +128,11 @@ public class PileMsgRecordServiceImpl implements PileMsgRecordService { return pileMsgRecordMapper.getPileFeedListV2(pileSn, frameType, createTime, updateTime); } + @Override + public List getPileFeedListV2(String pileSn, String frameType, LocalDateTime startTime, LocalDateTime endTime) { + return this.getPileFeedListV2(pileSn, frameType, DateUtils.localDateTime2Date(startTime), DateUtils.localDateTime2Date(endTime)); + } + /** * 解析登录报文 * @param jsonMsg diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java index 03e1f47d2..7b4cd965d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/AbstractProgramLogic.java @@ -619,7 +619,10 @@ public abstract class AbstractProgramLogic implements InitializingBean { orderBasicInfo.setVirtualAmount(virtualAmount); // 虚拟金额 orderBasicInfo.setSettleAmount(dataOrderAmount.subtract(virtualAmount)); // 结算金额 = 消费金额 - 虚拟金额 orderBasicInfo.setReason(data.getStopReasonMsg()); // 充电停止原因 - orderBasicInfo.setSettlementTime(DateUtils.getNowDate()); // 结算时间 + if (Objects.isNull(orderBasicInfo.getSettlementTime())) { + // 如果结算时间为空,设置当前时间为结算时间 + orderBasicInfo.setSettlementTime(DateUtils.getNowDate()); // 结算时间 + } updateSOC(orderBasicInfo); /* From 737d64e98d53411be35cf10437bb26ce93589bc9 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 20:51:07 +0800 Subject: [PATCH 26/30] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/service/TempService.java | 2 ++ 1 file changed, 2 insertions(+) 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 9d1417a28..d4fb78abf 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -901,6 +901,8 @@ public class TempService { LocalDateTime startTime = localDateTime.minusSeconds(30); // 结束时间为localDateTime加30秒 LocalDateTime endTime = localDateTime.plusSeconds(30); + logger.info("testSettleOrderLogicV2, orderCode:{}, settlementTime:{}, startTime:{}, endTime:{}", orderCode, orderBasicInfo.getSettlementTime(), startTime, endTime); + logger.info("转换为Date类型, settlementTime:{}, startTime:{}, endTime:{}", orderBasicInfo.getSettlementTime(), DateUtils.localDateTime2Date(startTime), DateUtils.localDateTime2Date(endTime)); // 查询这笔订单的交易记录原始数据 List pileFeedListV2 = pileMsgRecordService.getPileFeedListV2(orderBasicInfo.getPileSn(), "0x3B", startTime, endTime); logger.info("testSettleOrderLogicV2, orderCode:{}, pileSn:{}, startTime:{}, endTime:{}, pileFeedListV2:{}", From 3b4c90d818eff4a7c0da4b08ff0f44c112577d7d Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 21:00:13 +0800 Subject: [PATCH 27/30] =?UTF-8?q?=E4=BF=AE=E6=94=B9getPileFeedListV2?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/pile/PileMsgRecordMapper.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jsowell-pile/src/main/resources/mapper/pile/PileMsgRecordMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/PileMsgRecordMapper.xml index 35a29192a..0d7231796 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/PileMsgRecordMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/PileMsgRecordMapper.xml @@ -137,12 +137,12 @@ and frame_type = #{frameType,jdbcType=VARCHAR} - + and create_time >= #{startTime,jdbcType=TIMESTAMP} - + and create_time <= #{endTime,jdbcType=TIMESTAMP} order by create_time desc - \ No newline at end of file + From fc47ccf1c41c475c39021fcb49fd949f38b8721e Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 21:11:13 +0800 Subject: [PATCH 28/30] =?UTF-8?q?=E4=BF=AE=E6=94=B9testSettleOrderLogicV2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/service/TempService.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 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 d4fb78abf..4ae028d53 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -901,13 +901,21 @@ public class TempService { LocalDateTime startTime = localDateTime.minusSeconds(30); // 结束时间为localDateTime加30秒 LocalDateTime endTime = localDateTime.plusSeconds(30); - logger.info("testSettleOrderLogicV2, orderCode:{}, settlementTime:{}, startTime:{}, endTime:{}", orderCode, orderBasicInfo.getSettlementTime(), startTime, endTime); - logger.info("转换为Date类型, settlementTime:{}, startTime:{}, endTime:{}", orderBasicInfo.getSettlementTime(), DateUtils.localDateTime2Date(startTime), DateUtils.localDateTime2Date(endTime)); + // logger.info("testSettleOrderLogicV2, orderCode:{}, settlementTime:{}, startTime:{}, endTime:{}", orderCode, orderBasicInfo.getSettlementTime(), startTime, endTime); + // logger.info("转换为Date类型, settlementTime:{}, startTime:{}, endTime:{}", orderBasicInfo.getSettlementTime(), DateUtils.localDateTime2Date(startTime), DateUtils.localDateTime2Date(endTime)); // 查询这笔订单的交易记录原始数据 List pileFeedListV2 = pileMsgRecordService.getPileFeedListV2(orderBasicInfo.getPileSn(), "0x3B", startTime, endTime); - logger.info("testSettleOrderLogicV2, orderCode:{}, pileSn:{}, startTime:{}, endTime:{}, pileFeedListV2:{}", - orderCode, orderBasicInfo.getPileSn(), startTime, endTime, JSON.toJSONString(pileFeedListV2)); + // logger.info("testSettleOrderLogicV2, orderCode:{}, pileSn:{}, startTime:{}, endTime:{}, pileFeedListV2:{}", + // orderCode, orderBasicInfo.getPileSn(), startTime, endTime, JSON.toJSONString(pileFeedListV2)); + TransactionRecordsData data = null; + for (PileMsgRecord pileMsgRecord : pileFeedListV2) { + TransactionRecordsData parse = JSONObject.parseObject(pileMsgRecord.getJsonMsg(), TransactionRecordsData.class); + if (StringUtils.equals(parse.getTransactionCode(), orderBasicInfo.getTransactionCode())) { + data = parse; + } + } + logger.info("testSettleOrderLogicV2, orderCode:{}, data:{}", orderCode, JSON.toJSONString(data)); } public void testSettleOrderLogic(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { From 74a820b3fe89a8eb962b4befba23abdc6e302d15 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 21:23:47 +0800 Subject: [PATCH 29/30] =?UTF-8?q?update=20=E8=B0=83=E8=AF=95=E7=BB=93?= =?UTF-8?q?=E7=AE=97=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/service/TempService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 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 4ae028d53..2fdaee54f 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -16,7 +16,6 @@ import com.jsowell.adapay.service.AdapayService; import com.jsowell.adapay.vo.OrderSplitResult; import com.jsowell.adapay.vo.PaymentInfo; import com.jsowell.common.annotation.CostTime; -import com.jsowell.common.constant.RabbitConstants; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.adapay.AdapayStatusEnum; @@ -916,6 +915,9 @@ public class TempService { } logger.info("testSettleOrderLogicV2, orderCode:{}, data:{}", orderCode, JSON.toJSONString(data)); + if (data != null) { + testSettleOrderLogic(data, orderBasicInfo); + } } public void testSettleOrderLogic(TransactionRecordsData data, OrderBasicInfo orderBasicInfo) { @@ -937,7 +939,7 @@ public class TempService { OrderTransactionDTO dto = new OrderTransactionDTO(); dto.setOrderBasicInfo(orderBasicInfo); dto.setOrderDetail(orderDetail); - transactionService.doUpdateOrder(dto); + // transactionService.doUpdateOrder(dto); // 组装after参数 AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder() @@ -953,7 +955,8 @@ public class TempService { .orderServiceDiscountAmount(orderDetail.getDiscountServiceAmount()) // 服务费折扣金额 .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 .build(); - rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); + logger.info("testSettleOrderLogic, afterSettleOrderDTO:{}", JSON.toJSONString(afterSettleOrderDTO)); + // rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); } } From 399d119d927a6f8d586a0d9d9bbcc61955757b0e Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 26 Mar 2025 21:37:12 +0800 Subject: [PATCH 30/30] =?UTF-8?q?update=20=E8=B0=83=E8=AF=95=E7=BB=93?= =?UTF-8?q?=E7=AE=97=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/jsowell/service/TempService.java | 5 +++-- 1 file changed, 3 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 2fdaee54f..bdec7122d 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -16,6 +16,7 @@ import com.jsowell.adapay.service.AdapayService; import com.jsowell.adapay.vo.OrderSplitResult; import com.jsowell.adapay.vo.PaymentInfo; import com.jsowell.common.annotation.CostTime; +import com.jsowell.common.constant.RabbitConstants; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.adapay.AdapayStatusEnum; @@ -939,7 +940,7 @@ public class TempService { OrderTransactionDTO dto = new OrderTransactionDTO(); dto.setOrderBasicInfo(orderBasicInfo); dto.setOrderDetail(orderDetail); - // transactionService.doUpdateOrder(dto); + transactionService.doUpdateOrder(dto); // 组装after参数 AfterSettleOrderDTO afterSettleOrderDTO = AfterSettleOrderDTO.builder() @@ -956,7 +957,7 @@ public class TempService { .orderRefundAmount(orderBasicInfo.getRefundAmount()) // 退款金额 .build(); logger.info("testSettleOrderLogic, afterSettleOrderDTO:{}", JSON.toJSONString(afterSettleOrderDTO)); - // rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); + rabbitTemplate.convertAndSend(RabbitConstants.YKC_EXCHANGE_NAME, RabbitConstants.QUEUE_CHARGE_ORDER_DATA, afterSettleOrderDTO); } }