diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java index 226c8fa8b..f5ce06ec4 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java @@ -63,6 +63,11 @@ public class OrderController extends BaseController { if (StringUtils.isEmpty(memberId)) { throw new BusinessException(ReturnCodeEnum.CODE_TOKEN_ERROR); } + String appId = request.getHeader("appId"); + if (StringUtils.isBlank(appId)) { + throw new BusinessException(ReturnCodeEnum.CODE_QUERY_WECHAT_APP_ID_IS_NULL); + } + dto.setAppId(appId); dto.setMemberId(memberId); // 生成订单 dto.setStartMode(Constants.ONE); // 启动方式 1-app启动 diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java index 0fff346f5..1e35c5435 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java @@ -247,7 +247,7 @@ public class PayController extends BaseController { */ @PostMapping("/rechargeBalance") public RestApiResponse rechargeBalance(HttpServletRequest request, @RequestBody WeixinPayDTO dto) { - logger.info("adapay会员充值余额 param:{}", dto.toString()); + logger.info("adapay会员充值余额 param:{}", JSONObject.toJSONString(dto)); RestApiResponse response; try { if (StringUtils.isBlank(dto.getCode()) || StringUtils.isBlank(dto.getAmount())) { diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index 40eb3c82d..1afd51289 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -20,6 +20,7 @@ import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.AcquirerEnum; +import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.InvoiceRecordEnum; import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.adapay.AdapayEventEnum; @@ -371,6 +372,7 @@ public class OrderService { order.setStopReasonMsg(orderBasicInfo.getReason()); order.setStartSOC(orderBasicInfo.getStartSOC()); order.setEndSOC(orderBasicInfo.getEndSOC()); + order.setSettleAmount(String.valueOf(orderBasicInfo.getSettleAmount())); order.setSettlementTime(DateUtils.formatDateTime(orderBasicInfo.getSettlementTime())); vo.setOrderInfo(order); @@ -401,6 +403,7 @@ public class OrderService { realTimeInfo.setOrderAmount(realTimeMonitorData.getChargingAmount()); realTimeInfo.setChargedDegree(realTimeMonitorData.getChargingDegree()); realTimeInfo.setChargingTime(realTimeMonitorData.getSumChargingTime()); + realTimeInfo.setTime(realTimeMonitorData.getDateTime()); vo.setOrderRealTimeInfo(realTimeInfo); // 根据时间进行正序排序 @@ -753,12 +756,12 @@ public class OrderService { .build() ); // 余额支付 - result.add( - PayModeVO.builder() - .payModeCode(OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue()) - .payModeName(OrderPayModeEnum.PAYMENT_OF_BALANCE.getLabel()) - .build() - ); + // result.add( + // PayModeVO.builder() + // .payModeCode(OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue()) + // .payModeName(OrderPayModeEnum.PAYMENT_OF_BALANCE.getLabel()) + // .build() + // ); } return result; } @@ -1053,6 +1056,7 @@ public class OrderService { .acquirer(AcquirerEnum.ADAPAY.getValue()) .deductionRecord(json.toJSONString()) .createBy(null) + .delFlag(DelFlagEnum.NORMAL.getValue()) .build(); orderPayRecordService.batchInsert(Lists.newArrayList(orderPayRecord)); diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index fd18bf2f0..b020923e7 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -296,6 +296,7 @@ public class SpringBootTestController { .acquirer(AcquirerEnum.ADAPAY.getValue()) .deductionRecord(json.toJSONString()) .createBy(null) + .delFlag(DelFlagEnum.NORMAL.getValue()) .build(); orderPayRecordService.batchInsert(Lists.newArrayList(orderPayRecord)); @@ -441,14 +442,14 @@ public class SpringBootTestController { @Test public void createSettleAccountRequestTest() throws BaseAdaPayException { SettleAccountDTO dto = new SettleAccountDTO(); - dto.setCardId("10534201040009200"); - dto.setCardName("苏州远慧物联智能科技有限公司"); - dto.setTelNo("13915742562"); - dto.setBankCode("01030000"); + dto.setCardId("408060100100034609"); + dto.setCardName("江苏敦顺建设工程有限公司"); + dto.setTelNo("18021373333"); + dto.setBankCode("03090000"); dto.setBankAcctType("1"); dto.setProvCode("0032"); - dto.setAreaCode("3206"); - String adapayMemberId = "ACM48720983"; + dto.setAreaCode("3210"); + String adapayMemberId = "ACM40991242"; String wechatAppId = "wxbb3e0d474569481d"; adapayService.createSettleAccountRequest(dto, adapayMemberId, wechatAppId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/GenerateOrderDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/GenerateOrderDTO.java index f52b51753..9abf0d9ca 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/GenerateOrderDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/GenerateOrderDTO.java @@ -83,4 +83,9 @@ public class GenerateOrderDTO extends BasicPileDTO{ * 站点id */ private String stationId; + + /** + * 微信小程序appId + */ + private String appId; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java index 0152193c8..ace40cf95 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileMerchantInfoService.java @@ -114,4 +114,6 @@ public interface IPileMerchantInfoService { * 通过merchantId获取一级运营商信息 */ PileMerchantInfo getFirstLevelMerchantByMerchantId(String merchantId); + + String getFirstLevelMerchantIdByMerchantId(String merchantId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberAdapayRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberAdapayRecordServiceImpl.java index 701d891cc..69e46cbc0 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberAdapayRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberAdapayRecordServiceImpl.java @@ -142,12 +142,12 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService * 更新交易记录的消费金额和退款金额 * * @param paymentId 支付id - * @param SpendAmount 消费金额 - * @param RefundAmount 退款金额 + * @param spendAmount 消费金额 + * @param refundAmount 退款金额 * @param freezeAmount 冻结金额 */ @Override - public void commonUpdateAmountMethod(String paymentId, BigDecimal SpendAmount, BigDecimal RefundAmount, BigDecimal freezeAmount) { + public void commonUpdateAmountMethod(String paymentId, BigDecimal spendAmount, BigDecimal refundAmount, BigDecimal freezeAmount) { MemberAdapayRecord record = selectByPaymentId(paymentId); if (record == null) { log.info("更新交易记录的消费金额和退款金额paymentId:{}, 查询为空", paymentId); @@ -159,41 +159,46 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService BigDecimal freezeAmt = record.getFreezeAmt(); BigDecimal balanceAmt = record.getBalanceAmt(); - if (freezeAmount != null) { - if (BigDecimal.ZERO.compareTo(freezeAmount) > 0) { - // 如果冻结金额传过来是负数,说明是解冻 - if (freezeAmount.negate().compareTo(freezeAmt) > 0) { - throw new BusinessException("", "解冻金额大于冻结金额"); + try { + if (freezeAmount != null) { + if (BigDecimal.ZERO.compareTo(freezeAmount) > 0) { + // 如果冻结金额传过来是负数,说明是解冻 + if (freezeAmount.negate().compareTo(freezeAmt) > 0) { + throw new BusinessException("", "解冻金额大于冻结金额"); + } + balanceAmt = balanceAmt.add(freezeAmount.negate()); // 剩余金额增加 + } else { + if (freezeAmount.compareTo(balanceAmt) > 0) { + throw new BusinessException("", "冻结金额大于剩余金额"); + } } - balanceAmt = balanceAmt.add(freezeAmount.negate()); // 剩余金额增加 - } else { - if (freezeAmount.compareTo(balanceAmt) > 0) { - throw new BusinessException("", "冻结金额大于剩余金额"); + freezeAmt = freezeAmt.add(freezeAmount); // 冻结金额减少 + // 设置冻结金额 = 历史冻结金额 + 本次冻结金额 + record.setFreezeAmt(freezeAmt); + } + if (refundAmount != null) { + if (refundAmount.compareTo(balanceAmt) > 0) { + throw new BusinessException("", "退款金额大于剩余金额"); } + // 设置退款金额 = 历史退款金额 + 本次退款金额 + refundAmt = refundAmt.add(refundAmount); + record.setRefundAmt(refundAmt); } - freezeAmt = freezeAmt.add(freezeAmount); // 冻结金额减少 - // 设置冻结金额 = 历史冻结金额 + 本次冻结金额 - record.setFreezeAmt(freezeAmt); - } - if (RefundAmount != null) { - if (RefundAmount.compareTo(balanceAmt) > 0) { - throw new BusinessException("", "退款金额大于剩余金额"); + if (spendAmount != null) { + if (spendAmount.compareTo(balanceAmt) > 0) { + throw new BusinessException("", "消费金额大于剩余金额"); + } + // 设置消费金额 = 历史消费金额 + 本次消费金额 + spendAmt = spendAmt.add(spendAmount); + record.setSpendAmt(spendAmt); } - // 设置退款金额 = 历史退款金额 + 本次退款金额 - refundAmt = refundAmt.add(RefundAmount); - record.setRefundAmt(refundAmt); + // 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额 - 累计冻结金额 + balanceAmt = record.getPayAmt().subtract(refundAmt).subtract(spendAmt).subtract(freezeAmt); + record.setBalanceAmt(balanceAmt); + updateByPrimaryKeySelective(record); + } catch (Exception e) { + log.error("更新MemberAdapayRecord金额paymentId:{}, spendAmount:{}, refundAmount:{}, freezeAmount:{}", paymentId, spendAmount, refundAmount, freezeAmount); + log.error("更新MemberAdapayRecord金额error", e); } - if (SpendAmount != null) { - if (SpendAmount.compareTo(balanceAmt) > 0) { - throw new BusinessException("", "消费金额大于剩余金额"); - } - // 设置消费金额 = 历史消费金额 + 本次消费金额 - spendAmt = spendAmt.add(SpendAmount); - record.setSpendAmt(spendAmt); - } - // 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额 - 累计冻结金额 - balanceAmt = record.getPayAmt().subtract(refundAmt).subtract(spendAmt).subtract(freezeAmt); - record.setBalanceAmt(balanceAmt); - updateByPrimaryKeySelective(record); } } 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 e2447676c..0e5e9d663 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 @@ -756,7 +756,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { delay商户, 如果存在退款金额, 支付的钱部分解冻(也就是只解冻需要退款的部分), 剩下的钱继续冻结等待第二天凌晨分账 */ // 执行退款逻辑 - delayMerchantOrderRefundLogic(orderBasicInfo, adapayMemberAccount, merchantInfo.getAppId()); } else { /* @@ -1187,8 +1186,8 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { List> list = calculateUnfreezeAmount(orderAmount, payRecordList); for (Map map : list) { String paymentId = (String) map.get("paymentId"); - String unfreezeAmount = (String) map.get("unfreezeAmount"); - memberAdapayRecordService.unfreezeAmount(paymentId, new BigDecimal(unfreezeAmount)); + BigDecimal unfreezeAmount = (BigDecimal) map.get("unfreezeAmount"); + memberAdapayRecordService.unfreezeAmount(paymentId, unfreezeAmount); } } @@ -2973,16 +2972,23 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { // paymentId, refundAmount, wechatAppId, memberId, ScenarioEnum.ORDER.getValue(), // orderCode); - PaymentReverseOperation operation = new PaymentReverseOperation(); - operation.setPaymentId(paymentId); - operation.setReverseAmt(refundAmount); - operation.setMerchantKey(wechatAppId); - operation.setMemberId(memberId); - operation.setScenarioType(ScenarioEnum.ORDER.getValue()); - operation.setOrderCode(orderCode); - PaymentReverseResponse response = adapayService.createPaymentReverseRequest(operation); + // PaymentReverseOperation operation = new PaymentReverseOperation(); + // operation.setPaymentId(paymentId); + // operation.setReverseAmt(refundAmount); + // operation.setMerchantKey(wechatAppId); + // operation.setMemberId(memberId); + // operation.setScenarioType(ScenarioEnum.ORDER.getValue()); + // operation.setOrderCode(orderCode); + // PaymentReverseResponse response = adapayService.createPaymentReverseRequest(operation); - logger.info("重试订单退款response:{}", JSON.toJSONString(response)); + ApplyRefundDTO applyRefundDTO = new ApplyRefundDTO(); + applyRefundDTO.setOrderCode(orderCode); + applyRefundDTO.setRefundType(Constants.ONE); + applyRefundDTO.setRefundAmount(refundAmount); + applyRefundDTO.setWechatAppId(wechatAppId); + applyRefundDTO.setMemberId(memberId); + refundOrderWithAdapay(applyRefundDTO); + // logger.info("重试订单退款response:{}", JSON.toJSONString(response)); } else { BigDecimal reversedAmt = BigDecimal.ZERO; for (PaymentReverseResponse paymentRevers : paymentReverses) { @@ -3168,6 +3174,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { .acquirer(AcquirerEnum.LOCAL.getValue()) .deductionRecord(json.toJSONString()) .createBy(dto.getMemberId()) + .delFlag(DelFlagEnum.NORMAL.getValue()) .build()); } // 订单支付流水入库 @@ -3225,6 +3232,13 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { throw new BusinessException(ReturnCodeEnum.CODE_STATION_IS_NOT_OPEN); } + // 校验启动桩使用的小程序,和充电桩所属一级运营商是否一致 + String merchantIdByAppId = pileMerchantInfoService.getFirstLevelMerchantIdByAppId(dto.getAppId()); + String merchantIdByMerchantId = pileMerchantInfoService.getFirstLevelMerchantIdByMerchantId(stationInfo.getMerchantId()); + if (!StringUtils.equals(merchantIdByAppId, merchantIdByMerchantId)) { + throw new BusinessException("", "当前桩运营商与小程序所属运营商不一致"); + } + // 如果是鉴权卡或者vin启动,不判断枪口状态 if (!(StringUtils.equals(dto.getStartMode(), StartModeEnum.AUTH_CARD.getValue()) || StringUtils.equals(dto.getStartMode(), StartModeEnum.VIN_CODE.getValue()))) { diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java index eecb5812b..1d04232ff 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileMerchantInfoServiceImpl.java @@ -430,4 +430,13 @@ public class PileMerchantInfoServiceImpl implements IPileMerchantInfoService { return pileMerchantInfo; } + @Override + public String getFirstLevelMerchantIdByMerchantId(String merchantId) { + PileMerchantInfo merchantInfo = getFirstLevelMerchantByMerchantId(merchantId); + if (merchantInfo != null) { + return String.valueOf(merchantInfo.getId()); + } + return null; + } + } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java index 2d11a5ec7..bf6b83113 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java @@ -9,6 +9,7 @@ import com.jsowell.adapay.vo.OrderSettleResult; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.enums.AcquirerEnum; +import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; @@ -83,6 +84,7 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic { .acquirer(AcquirerEnum.LOCAL.getValue()) .deductionRecord(json.toJSONString()) .createBy(dto.getMemberId()) + .delFlag(DelFlagEnum.NORMAL.getValue()) .build()); } // 订单支付流水入库 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/NotDelayMerchantOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/NotDelayMerchantOrderLogic.java index 3c907afd1..a711e2f7d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/NotDelayMerchantOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/NotDelayMerchantOrderLogic.java @@ -8,6 +8,7 @@ import com.jsowell.adapay.vo.OrderSettleResult; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.enums.AcquirerEnum; +import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; @@ -85,6 +86,7 @@ public class NotDelayMerchantOrderLogic extends AbstractOrderLogic{ .acquirer(AcquirerEnum.LOCAL.getValue()) .deductionRecord(json.toJSONString()) .createBy(dto.getMemberId()) + .delFlag(DelFlagEnum.NORMAL.getValue()) .build()); } // 订单支付流水入库 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderDetailInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderDetailInfoVO.java index 46321da75..55b97fa89 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderDetailInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/OrderDetailInfoVO.java @@ -58,6 +58,7 @@ public class OrderDetailInfoVO { private String createTime; // 订单创建时间 private String startSOC; // 开始SOC private String endSOC; // 结束SOC + private String settleAmount;// 结算金额 private String settlementTime; // 结算时间 } @@ -84,6 +85,7 @@ public class OrderDetailInfoVO { @Data public static class OrderRealTimeInfo{ + private String time; private String orderAmount; // 订单金额 private String totalElectricityAmount; // 总电费 private String totalServiceAmount; // 总服务费 diff --git a/jsowell-pile/src/main/resources/mapper/pile/ClearingBillInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/ClearingBillInfoMapper.xml index 9d78946c5..40090e19c 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/ClearingBillInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/ClearingBillInfoMapper.xml @@ -286,7 +286,7 @@ from clearing_bill_info t1 join pile_merchant_info t2 on t1.merchant_id = t2.id and t1.del_flag = '0' where t1.merchant_id = #{merchantId,jdbcType=VARCHAR} - and t1.create_time between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR} + and t1.trade_date between #{startTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR} order by t1.trade_date desc diff --git a/jsowell-ui/src/views/order/order/orderDetail.vue b/jsowell-ui/src/views/order/order/orderDetail.vue index aa204ef76..3c6658d2f 100644 --- a/jsowell-ui/src/views/order/order/orderDetail.vue +++ b/jsowell-ui/src/views/order/order/orderDetail.vue @@ -194,33 +194,35 @@

实时订单数据

- - {{ - orderRealTimeInfo.time - }} - {{ - orderRealTimeInfo.orderAmount === "0.0000" - ? "0" - : orderRealTimeInfo.orderAmount - }} - {{ - orderRealTimeInfo.chargedDegree === "0.0000" - ? "0" - : orderRealTimeInfo.chargedDegree - }} - {{ - orderRealTimeInfo.chargingTime - }} - {{ - orderRealTimeInfo.soc - }} - + + + + + + + + + + + +