From 5b64f31f1d35b38b51935b5fa7f4b8cf46fbf4cf Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期四, 08 五月 2025 14:08:57 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile into 1.1 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 301 +++++++++++++++++++++++++++++--------------------- 1 files changed, 174 insertions(+), 127 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index 13328ff..a205fb2 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -697,15 +697,15 @@ log.info(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString()); sendMessageClient.platformStartCharging(platformStartCharging); - //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 - Long id = chargingOrder.getId(); - //执行5分钟的定时任务检测 - ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - scheduler.scheduleAtFixedRate(()->{ - if(timingDetection(id)){ - scheduler.shutdown(); - } - }, 5, 1, TimeUnit.SECONDS); +// //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 +// Long id = chargingOrder.getId(); +// //执行5分钟的定时任务检测 +// ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); +// scheduler.scheduleAtFixedRate(()->{ +// if(timingDetection(id)){ +// scheduler.shutdown(); +// } +// }, 5, 1, TimeUnit.SECONDS); return AjaxResult.success(); } @@ -731,7 +731,7 @@ Integer counter = counter_map.get(code); PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); //5分钟内还未插枪则取消充电,退回金额。 - if(failure_cause == 5 && (null == counter || counter < 300)){ + if(failure_cause == 5 && (null == counter || counter < 1800)){ counter = (null == counter ? 0 : counter) + 1; counter_map.put(code, counter); //启动失败 @@ -772,7 +772,7 @@ log.info(code + ":-------------------未上传开启充电结果-------------------" + counter); PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); //5分钟内未启动成功,退回金额。 - if(null == counter || counter < 300){ + if(null == counter || counter < 1800){ counter = (null == counter ? 0 : counter) + 1; boot_failed_map.put(code, counter); //启动失败 @@ -970,6 +970,73 @@ } } + } + } + + + + public void refund1(String code, BigDecimal money){ + log.info(code + ":-------------------充电成功,执行手动退款-------------------"); + TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); + if(chargingOrder.getOrderSource() == 1){ + BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); + Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); + //构建退款明细 + TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); + chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue()); + chargingOrderRefund.setRefundAmount(money); + chargingOrderRefund.setRefundStatus(1); + chargingOrderRefund.setPayType(rechargePaymentType); + chargingOrderRefund.setRefundStatus(1); + chargingOrderRefund.setCode(code); + chargingOrderRefund.setRefundTitle("充电完成退款"); + chargingOrderRefund.setRefundContent("充电完成退款"); + chargingOrderRefund.setRefundReason("充电完成退款"); + chargingOrderRefund.setRefundRemark("充电完成退款,手动退款"); + chargingOrderRefund.setRefundTotalAmount(money); + chargingOrderRefund.setPayAmount(money); + if(1 == rechargePaymentType){ + WxPaymentRefundModel model = new WxPaymentRefundModel(); + model.setOut_trade_no(chargingOrder.getCode()); + model.setOut_refund_no(chargingOrderRefund.getRefundCode()); + model.setReason("充电完成退款"); + model.setNotify_url("/payment/wx/refund/notify"); + WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); + amount.setRefund(money.multiply(new BigDecimal(100)).intValue()); + amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); + amount.setCurrency("CNY"); + model.setAmount(amount); + R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); + if(200 == orderR.getCode()){ + chargingOrderRefundService.save(chargingOrderRefund); + //手续费 + Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount"); + Object refund_fee1 = amount1.get("refund_fee"); + BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); + chargingOrderRefund.setRefundFee(refund_fee); + chargingOrderRefundService.updateById(chargingOrderRefund); + } + } + if(2 == rechargePaymentType){ + RefundReq dto = new RefundReq(); + dto.setOutTradeNo(chargingOrder.getCode()); + dto.setOutRequestNo(chargingOrderRefund.getCode()); + dto.setRefundAmount(money.toString()); + dto.setRefundReason("充电完成退款"); + RefundResp resp = aliPaymentClient.refund(dto).getData(); + if(null != resp){ + chargingOrderRefundService.save(chargingOrderRefund); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); + } + } + } } @@ -1332,13 +1399,12 @@ if (siteIds.isEmpty())siteIds.add(-1); dto.setSiteIds(siteIds); List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo,dto,startTime1,startTime2,endTime1,endTime2); - List<ChargingOrderVO> list1 = this.baseMapper.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2); BigDecimal total = new BigDecimal("0"); long time = 0L; BigDecimal electronicMoney = new BigDecimal("0"); BigDecimal serviceMoney = new BigDecimal("0"); BigDecimal commissionMoney = new BigDecimal("0"); - BigDecimal refundMoney = new BigDecimal("0"); +// BigDecimal refundMoney = new BigDecimal("0"); BigDecimal paymentMoney = new BigDecimal("0"); List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list(); @@ -1406,15 +1472,11 @@ } } - List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery() - .eq(TChargingOrderRefund::getRefundStatus,2).list(); - -// BigDecimal total = new BigDecimal("0"); -// long time = 0L; -// BigDecimal electronicMoney = new BigDecimal("0"); -// BigDecimal serviceMoney = new BigDecimal("0"); -// BigDecimal refundMoney = new BigDecimal("0"); -// BigDecimal paymentMoney = new BigDecimal("0"); +// List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery() +// .eq(TChargingOrderRefund::getRefundStatus,2).list(); + + + List<ChargingOrderVO> list1 = this.baseMapper.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2); for (ChargingOrderVO chargingOrderVO : list1) { if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){ continue; @@ -1439,11 +1501,11 @@ long between = ChronoUnit.SECONDS.between(startTime, endTime); time+=between; } - List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId())) - .collect(Collectors.toList()); - for (TChargingOrderRefund tChargingOrderRefund : list2) { - refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount()); - } +// List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId())) +// .collect(Collectors.toList()); +// for (TChargingOrderRefund tChargingOrderRefund : list2) { +// refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount()); +// } } tCharingOrderVO.setTotal(total); tCharingOrderVO.setTime(time); @@ -1819,48 +1881,24 @@ for (TChargingOrderAccountingStrategy temp : list2) { switch (temp.getType()){ case 1: - if (temp.getChargingCapacity()!=null){ - jian = jian.add(temp.getChargingCapacity()); - } - if (temp.getElectrovalence()!=null){ - jianElectronic = jianElectronic.add(temp.getElectrovalence()); - } - if (temp.getServiceCharge()!=null){ - jianService = jianService.add(temp.getServiceCharge()); - } + jian = jian.add(temp.getChargingCapacity()); + jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice()); + jianService = jianService.add(temp.getPeriodServicePrice()); break; case 2: - if (temp.getChargingCapacity()!=null){ - feng = feng.add(temp.getChargingCapacity()); - } - if (temp.getElectrovalence()!=null){ - fengElectronic = fengElectronic.add(temp.getElectrovalence()); - } - if (temp.getServiceCharge()!=null){ - fengService = fengService.add(temp.getServiceCharge()); - } + feng = feng.add(temp.getChargingCapacity()); + fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice()); + fengService = fengService.add(temp.getPeriodServicePrice()); break; case 3: - if (temp.getChargingCapacity()!=null){ - ping = ping.add(temp.getChargingCapacity()); - } - if (temp.getElectrovalence()!=null){ - pingElectronic = pingElectronic.add(temp.getElectrovalence()); - } - if (temp.getServiceCharge()!=null){ - pingService = pingService.add(temp.getServiceCharge()); - } + ping = ping.add(temp.getChargingCapacity()); + pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice()); + pingService = pingService.add(temp.getPeriodServicePrice()); break; case 4: - if (temp.getChargingCapacity()!=null){ - gu = gu.add(temp.getChargingCapacity()); - } - if (temp.getElectrovalence()!=null){ - guElectronic = guElectronic.add(temp.getElectrovalence()); - } - if (temp.getServiceCharge()!=null){ - guService = guService.add(temp.getServiceCharge()); - } + gu = gu.add(temp.getChargingCapacity()); + guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(temp.getPeriodServicePrice()); + guService = guService.add(temp.getPeriodServicePrice()); break; } } @@ -1868,50 +1906,27 @@ List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId())) .collect(Collectors.toList()); for (TChargingOrderAccountingStrategy temp : list2) { + BigDecimal multiply = temp.getPeriodServicePrice().multiply(new BigDecimal("0.8")); switch (temp.getType()){ case 1: - if (temp.getChargingCapacity()!=null){ - jian = jian.add(temp.getChargingCapacity()); - } - if (temp.getElectrovalence()!=null){ - jianElectronic = jianElectronic.add(temp.getElectrovalence()); - } - if (temp.getServiceCharge()!=null){ - jianService = jianService.add(temp.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP))); - } + jian = jian.add(temp.getChargingCapacity()); + jianElectronic = jianElectronic.add(temp.getPeriodElectricPrice()).add(multiply); + jianService = jianService.add(multiply); break; case 2: - if (temp.getChargingCapacity()!=null){ - feng = feng.add(temp.getChargingCapacity()); - } - if (temp.getElectrovalence()!=null){ - fengElectronic = fengElectronic.add(temp.getElectrovalence()); - } - if (temp.getServiceCharge()!=null){ - fengService = fengService.add(temp.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP))); - } + feng = feng.add(temp.getChargingCapacity()); + fengElectronic = fengElectronic.add(temp.getPeriodElectricPrice()).add(multiply); + fengService = fengService.add(multiply); break; case 3: - if (temp.getChargingCapacity()!=null){ - ping = ping.add(temp.getChargingCapacity()); - } - if (temp.getElectrovalence()!=null){ - pingElectronic = pingElectronic.add(temp.getElectrovalence()); - } - if (temp.getServiceCharge()!=null){ - pingService = pingService.add(temp.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP))); - } + ping = ping.add(temp.getChargingCapacity()); + pingElectronic = pingElectronic.add(temp.getPeriodElectricPrice()).add(multiply); + pingService = pingService.add(multiply); break; case 4: - if (temp.getChargingCapacity()!=null){ - gu = gu.add(temp.getChargingCapacity()); - } - if (temp.getElectrovalence()!=null){ - guElectronic = guElectronic.add(temp.getElectrovalence()); - } - if (temp.getServiceCharge()!=null){ - guService = guService.add(temp.getServiceCharge().multiply(new BigDecimal("0.2").setScale(2,BigDecimal.ROUND_HALF_UP))); - } + gu = gu.add(temp.getChargingCapacity()); + guElectronic = guElectronic.add(temp.getPeriodElectricPrice()).add(multiply); + guService = guService.add(multiply); break; } } @@ -1923,7 +1938,6 @@ chargingOrderTimeVO.setElectrovalence(electrovalence.setScale(2, BigDecimal.ROUND_HALF_EVEN)); chargingOrderTimeVO.setServiceCharge(serviceCharge.setScale(2, BigDecimal.ROUND_HALF_EVEN)); // 计算尖峰平谷充电到账占比 - BigDecimal add = jianElectronic.add(fengElectronic).add(pingElectronic).add(guElectronic); // 计算尖峰平谷服务费占比 BigDecimal add1 = jianService.add(fengService).add(pingService).add(guService); @@ -2469,10 +2483,16 @@ //推送三方平台 if(2 == chargingOrder.getOrderSource()){ - tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); - tcecClient.notificationStopChargeResult(chargingOrder.getStartChargeSeq(), chargingOrder.getChargingGunId().toString(), - chargingOrder.getOperatorId()); - tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); + TChargingOrder finalChargingOrder = chargingOrder; + new Thread(new Runnable() { + @Override + public void run() { + tcecClient.notificationEquipChargeStatus(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId()); + tcecClient.notificationStopChargeResult(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getChargingGunId().toString(), + finalChargingOrder.getOperatorId()); + tcecClient.notificationChargeOrderInfo(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId()); + } + }).start(); } //开始将优惠券优惠的金额添加到明细中 @@ -2915,6 +2935,8 @@ @Override public TSettlementConfirm settlementAdd(SettlementConfirmAdd dto) { List<Site> data = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData(); + List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list(); + TSettlementConfirm tSettlementConfirm = new TSettlementConfirm(); if (!data.isEmpty()){ tSettlementConfirm.setSiteName(data.get(0).getName()); @@ -2970,25 +2992,37 @@ // 支付订单金额 需要减去退款金额 BigDecimal paymentAmount = new BigDecimal("0"); for (TChargingOrder tChargingOrder : tChargingOrders) { - // 累加充电总度数 - if (tChargingOrder.getChargingCapacity()!=null){ - chargingElectronic = chargingElectronic.add(tChargingOrder.getChargingCapacity()); - + if(null == tChargingOrder.getStatus() || 5 != tChargingOrder.getStatus()){ + continue; } + List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.getId())).collect(Collectors.toList()); + BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add); + // 累加充电总度数 + chargingElectronic = chargingElectronic.add(chargingCapacity); // 累加分佣 if (tChargingOrder.getOrderSource()==2) { - sharingAmount = sharingAmount.add(tChargingOrder.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN)); + sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN)); } // 累加电费 - if (tChargingOrder.getElectrovalence()!=null) { - electrovalence = electrovalence.add(tChargingOrder.getElectrovalence()); + electrovalence = electrovalence.add(electronic_reduce); + if (tChargingOrder.getPaymentAmount()!=null && tChargingOrder.getOrderSource()!=2){ + paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount()); + } + if (tChargingOrder.getRechargeAmount()!=null){ + orderCommission = orderCommission.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")) + .setScale(2,BigDecimal.ROUND_DOWN)); + } + // 累加服务费 if (tChargingOrder.getServiceCharge()!=null){ if (tChargingOrder.getOrderSource()==2) { - serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge().multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN)); + serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)); + paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8"))); }else{ - serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge()); + serviceCharge = serviceCharge.add(service_reduce); } } // 累加会员折扣 @@ -2999,11 +3033,7 @@ if (tChargingOrder.getCouponDiscountAmount()!=null){ couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount()); } - if (tChargingOrder.getPaymentAmount()!=null){ - paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount()); - orderCommission = orderCommission.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")) - .setScale(2,BigDecimal.ROUND_DOWN)); - } + } @@ -3855,15 +3885,15 @@ platformStartCharging.setAccount_balance(rechargeAmount); log.info(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString()); sendMessageClient.platformStartCharging(platformStartCharging); - //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 - Long id = chargingOrder.getId(); - //执行5分钟的定时任务检测 - ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - scheduler.scheduleAtFixedRate(()->{ - if(timingDetection(id)){ - scheduler.shutdown(); - } - }, 5, 1, TimeUnit.SECONDS); +// //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 +// Long id = chargingOrder.getId(); +// //执行5分钟的定时任务检测 +// ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); +// scheduler.scheduleAtFixedRate(()->{ +// if(timingDetection(id)){ +// scheduler.shutdown(); +// } +// }, 5, 1, TimeUnit.SECONDS); //推送三方平台订单状态 tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); @@ -3932,4 +3962,21 @@ } return R.ok(mapList); } + + + /** + * + * 手动推送订单给第三方平台 + * @param code + * @return + */ + @Override + public R pushOrderInfo(String code) { + TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); + tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); + tcecClient.notificationStopChargeResult(chargingOrder.getStartChargeSeq(), chargingOrder.getChargingGunId().toString(), + chargingOrder.getOperatorId()); + tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); + return R.ok(); + } } -- Gitblit v1.7.1