| | |
| | | import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; |
| | | import com.ruoyi.chargingPile.api.feignClient.*; |
| | | import com.ruoyi.chargingPile.api.model.*; |
| | | import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo; |
| | | import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.dto.ChargingOrderGroup; |
| | |
| | | Integer payMethod = addChargingOrder.getPayMethod() == null ? 3 : addChargingOrder.getPayMethod(); |
| | | BigDecimal rechargeAmount = money(addChargingOrder.getPaymentAmount()); |
| | | TChargingGun tChargingGun = chargingGunClient.getChargingGunById(addChargingOrder.getId()).getData(); |
| | | if(tChargingGun == null){ |
| | | return AjaxResult.error("发起支付失败,请联系管理员!"); |
| | | } |
| | | if(tChargingGun.getStatus() == 1){ |
| | | return AjaxResult.error("充电枪已离线,请更换其他设备!"); |
| | | } |
| | | if(tChargingGun.getStatus() == 2){ |
| | | return AjaxResult.error("请先将充电枪连接车辆充电口!"); |
| | | } |
| | | if(Arrays.asList(4, 5, 6).contains(tChargingGun.getStatus())){ |
| | | return AjaxResult.error("设备正在充电中,请更换其他设备!"); |
| | | } |
| | | if(tChargingGun.getStatus() == 7){ |
| | | return AjaxResult.error("设备发生故障,请更换其他设备!"); |
| | | } |
| | | TChargingPile chargingPile = chargingPileClient.getChargingPileById(tChargingGun.getChargingPileId()).getData(); |
| | | AppUserWhitelistMatchVO whitelist = appUserWhitelistClient.matchWhitelist(userId, tChargingGun.getSiteId()).getData(); |
| | | boolean whitelistMatched = whitelist != null && Boolean.TRUE.equals(whitelist.getMatched()); |
| | |
| | | list.addAll(list); |
| | | boolean sta = false; |
| | | for (AccountingStrategyDetailOrder accountingStrategyDetailOrder : list) { |
| | | Integer start = Integer.valueOf(accountingStrategyDetailOrder.getStartTime().replaceAll(":", "")); |
| | | Integer end = Integer.valueOf(accountingStrategyDetailOrder.getEndTime().replaceAll(":", "")); |
| | | int start = Integer.parseInt(accountingStrategyDetailOrder.getStartTime().replaceAll(":", "")); |
| | | int end = Integer.parseInt(accountingStrategyDetailOrder.getEndTime().replaceAll(":", "")); |
| | | String[] split = accountingStrategyDetailOrder.getEndTime().split(":"); |
| | | if (sta || (now >= start && now < end)) { |
| | | sta = true; |
| | |
| | | BigDecimal thirdRefundAmount = channelRefundAmount.min(getRefundableThirdPayAmount(chargingOrder)).setScale(2, RoundingMode.HALF_UP); |
| | | BigDecimal balanceRefundAmount = channelRefundAmount.subtract(thirdRefundAmount).min(money(chargingOrder.getBalancePayAmount())).setScale(2, RoundingMode.HALF_UP); |
| | | //构建退款明细 |
| | | String refundCode = "CDF" + chargingOrder.getCode().substring(2); |
| | | 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.setRefundCode(refundCode); |
| | | chargingOrderRefund.setRefundAmount(recordedRefundAmount); |
| | | chargingOrderRefund.setBalanceRefundAmount(balanceRefundAmount); |
| | | chargingOrderRefund.setThirdRefundAmount(thirdRefundAmount); |
| | |
| | | .eq(TChargingOrder::getId, chargingOrder.getId()) |
| | | .eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())); |
| | | if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 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(thirdRefundAmount.multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(getRefundableThirdPayAmount(chargingOrder).multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | 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(thirdRefundAmount.multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(getRefundableThirdPayAmount(chargingOrder).multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if(200 == orderR.getCode()){ |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | 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); |
| | |
| | | Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); |
| | | Integer payMethod = chargingOrder.getPayMethod(); |
| | | //构建退款明细 |
| | | String refundCode = "CDF" + chargingOrder.getCode().substring(2); |
| | | 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.setRefundCode(refundCode); |
| | | chargingOrderRefund.setRefundAmount(money); |
| | | BigDecimal thirdRefundAmount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP); |
| | | BigDecimal balanceRefundAmount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP); |
| | |
| | | return; |
| | | } |
| | | 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(thirdRefundAmount.multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(getRefundableThirdPayAmount(chargingOrder).multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | 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(thirdRefundAmount.multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(getRefundableThirdPayAmount(chargingOrder).multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if(200 == orderR.getCode()){ |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | 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); |
| | |
| | | @Override |
| | | public TCharingOrderVO chargingOrder(ChargingOrderQuery dto) { |
| | | TCharingOrderVO tCharingOrderVO = new TCharingOrderVO(); |
| | | List<TChargingGun> allGun = chargingGunClient.getAllGun().getData(); |
| | | List<TChargingPile> allPile = chargingGunClient.getAllPile().getData(); |
| | | List<Site> data9 = siteClient.getSiteAll().getData(); |
| | | List<TAppUser> data6 = appUserClient.getAllUser().getData(); |
| | | List<TAppUserCar> data4 = appUserCarClient.getAllCar().getData(); |
| | | String startTime1 = null; |
| | | String startTime2 = null; |
| | | String endTime1 = null; |
| | |
| | | List<Integer> siteIds = dto.getSiteIds(); |
| | | List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2); |
| | | fillChargingOrderBalanceIncome(list); |
| | | List<TChargingOrderAccountingStrategy> list3 = null; |
| | | if (null != startTime1) { |
| | | List<Long> collect = list.stream().map(ChargingOrderVO::getId).collect(Collectors.toList()); |
| | | List<TChargingOrderAccountingStrategy> list3 = new ArrayList<>(); |
| | | if (!collect.isEmpty()) { |
| | | list3 = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() |
| | | .between(null != startTime1, TChargingOrderAccountingStrategy::getCreateTime, startTime1, startTime2)); |
| | | .in(TChargingOrderAccountingStrategy::getChargingOrderId, collect)); |
| | | } |
| | | if (null != endTime1) { |
| | | list3 = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() |
| | | .between(null != startTime1, TChargingOrderAccountingStrategy::getCreateTime, endTime1, endTime2)); |
| | | |
| | | if(list.isEmpty()){ |
| | | return tCharingOrderVO; |
| | | } |
| | | |
| | | List<Integer> chargingPileId = list.stream().map(ChargingOrderVO::getChargingPileId).collect(Collectors.toList()); |
| | | GetChargingGunByChargingPileIdsVo getChargingGunByChargingPileIdsVo = new GetChargingGunByChargingPileIdsVo(); |
| | | getChargingGunByChargingPileIdsVo.setChargingPileIds(chargingPileId); |
| | | List<TChargingGun> allGun = chargingGunClient.getChargingGunByChargingPileIds(getChargingGunByChargingPileIdsVo).getData(); |
| | | List<Integer> siteIdss = list.stream().map(ChargingOrderVO::getSiteId).collect(Collectors.toList()); |
| | | List<TChargingPile> allPile = chargingPileClient.getChargingPileBySiteIds(siteIdss).getData(); |
| | | List<Site> data9 = siteClient.getSiteByIds(siteIdss).getData(); |
| | | List<Long> appUserIds = list.stream().map(ChargingOrderVO::getAppUserId).collect(Collectors.toList()); |
| | | List<TAppUser> data6 = appUserClient.getUserByIds(appUserIds).getData(); |
| | | List<Long> appUserCarIds = list.stream().map(ChargingOrderVO::getAppUserCarId).collect(Collectors.toList()); |
| | | List<TAppUserCar> data4 = appUserCarClient.getCarByIds(appUserCarIds).getData(); |
| | | |
| | | for (ChargingOrderVO chargingOrderVO : list) { |
| | | if (roleType == 2) { |
| | | for (Integer siteId : siteIds) { |
| | |
| | | |
| | | //获取订单的计费策略 |
| | | List<AccountingStrategyDetailOrder> accountingStrategyDetailOrderList = accountingStrategyDetailOrderClient.getAllAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); |
| | | if (accountingStrategyDetailOrderList.isEmpty()) { |
| | | if (null == accountingStrategyDetailOrderList || accountingStrategyDetailOrderList.isEmpty()) { |
| | | return R.fail("计费策略为空,无法计算费用"); |
| | | } |
| | | accountingStrategyDetailOrderList.get(accountingStrategyDetailOrderList.size() - 1).setEndTime("23:59"); |
| | |
| | | Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); |
| | | if (channelRefundAmount.compareTo(BigDecimal.ZERO) > 0) { |
| | | //构建退款明细 |
| | | String refundCode = "CDF" + chargingOrder.getCode().substring(2); |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); |
| | | SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | chargingOrderRefund.setRefundCode("CDF" + sdf1.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); |
| | | chargingOrderRefund.setRefundCode(refundCode); |
| | | chargingOrderRefund.setRefundAmount(refundAmount); |
| | | chargingOrderRefund.setBalanceRefundAmount(balanceRefundAmount); |
| | | chargingOrderRefund.setThirdRefundAmount(thirdRefundAmount); |
| | |
| | | .eq(TChargingOrder::getId, chargingOrder.getId()) |
| | | .eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())); |
| | | } else 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(thirdRefundAmount.multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(getRefundableThirdPayAmount(chargingOrder).multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model); |
| | | if (200 == result.getCode()) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | 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(thirdRefundAmount.multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(getRefundableThirdPayAmount(chargingOrder).multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model); |
| | | if (200 == result.getCode()) { |
| | | amount1 = (Map<String, Object>) result.getData().get("amount"); |
| | | } |
| | | } |
| | | |
| | | if (null != amount1) { |
| | | //手续费 |
| | | Map<String, Object> amount1 = (Map<String, Object>) result.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); |
| | |
| | | if ((tChargingOrder.getRechargeAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) { |
| | | tChargingOrder.setStatus(5); |
| | | } |
| | | |
| | | String refundCode = "CDF" + tChargingOrder.getCode().substring(2); |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(tChargingOrder.getId()); |
| | | chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | |
| | | chargingOrderRefund.setPayType(tChargingOrder.getRechargePaymentType()); |
| | | chargingOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | chargingOrderRefund.setCode(tChargingOrder.getCode()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); |
| | | chargingOrderRefund.setRefundCode(refundCode); |
| | | chargingOrderRefund.setRefundTitle("后台退款"); |
| | | chargingOrderRefund.setRefundContent("后台退款"); |
| | | chargingOrderRefund.setRefundReason("后台退款"); |
| | |
| | | chargingOrderRefund.setRefundSerialNumber("BALANCE"); |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | } else if (1 == tChargingOrder.getRechargePaymentType()) { |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(tChargingOrder.getCode()); |
| | | model.setOut_refund_no(chargingOrderRefund.getRefundCode()); |
| | | model.setTransaction_id(tChargingOrder.getRechargeSerialNumber()); |
| | | model.setReason("取消订单"); |
| | | model.setNotify_url("/payment/wx/refund/notify"); |
| | | WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); |
| | | amount.setRefund(thirdRefundAmount.multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(getRefundableThirdPayAmount(tChargingOrder).multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(tChargingOrder.getCode()); |
| | | model.setOut_refund_no(chargingOrderRefund.getRefundCode()); |
| | | model.setTransaction_id(tChargingOrder.getRechargeSerialNumber()); |
| | | model.setReason("取消订单"); |
| | | model.setNotify_url("/payment/wx/refund/notify"); |
| | | WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); |
| | | amount.setRefund(thirdRefundAmount.multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(getRefundableThirdPayAmount(tChargingOrder).multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | //手续费 |
| | | 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); |
| | |
| | | if ((shoppingOrder.getPaymentAmount().subtract(shoppingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) { |
| | | shoppingOrder.setStatus(5); |
| | | } |
| | | |
| | | String refundCode = "GWF" + shoppingOrder.getCode().substring(2); |
| | | TShoppingOrderRefund shoppingOrderRefund = new TShoppingOrderRefund(); |
| | | shoppingOrderRefund.setShoppingOrderId(shoppingOrder.getId()); |
| | | shoppingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | |
| | | shoppingOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | shoppingOrderRefund.setCode(shoppingOrder.getCode()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | shoppingOrderRefund.setRefundCode("GWF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); |
| | | shoppingOrderRefund.setRefundCode(refundCode); |
| | | shoppingOrderRefund.setRefundTitle("后台退款"); |
| | | shoppingOrderRefund.setRefundContent("后台退款"); |
| | | shoppingOrderRefund.setRefundReason("后台退款"); |
| | |
| | | shoppingOrderRefund.setPayAmount(shoppingOrder.getPaymentAmount()); |
| | | |
| | | if (1 == shoppingOrder.getPaymentType()) { |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(shoppingOrder.getCode()); |
| | | model.setOut_refund_no(shoppingOrderRefund.getRefundCode()); |
| | | model.setTransaction_id(shoppingOrder.getSerialNumber()); |
| | | model.setReason("取消订单"); |
| | | model.setNotify_url("/payment/wx/refund/notify"); |
| | | WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); |
| | | amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(shoppingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(shoppingOrder.getCode()); |
| | | model.setOut_refund_no(shoppingOrderRefund.getRefundCode()); |
| | | model.setTransaction_id(shoppingOrder.getSerialNumber()); |
| | | model.setReason("取消订单"); |
| | | model.setNotify_url("/payment/wx/refund/notify"); |
| | | WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); |
| | | amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(shoppingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | shoppingOrder.setRefundStatus(2); |
| | | shoppingOrder.setRefundAmount((shoppingOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); |
| | | shoppingOrderService.updateById(shoppingOrder); |
| | | shoppingOrderRefundService.save(shoppingOrderRefund); |
| | | //手续费 |
| | | 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)); |
| | | shoppingOrderRefund.setRefundFee(refund_fee); |
| | |
| | | if (vipOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) { |
| | | return R.fail("退款金额需小于支付金额"); |
| | | } |
| | | String refundCode = "HYF" + vipOrder.getCode().substring(2); |
| | | TVipOrderRefund vipOrderRefund = new TVipOrderRefund(); |
| | | vipOrderRefund.setVipOrderId(vipOrder.getId()); |
| | | vipOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | |
| | | vipOrderRefund.setPayType(vipOrder.getPaymentType()); |
| | | vipOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | vipOrderRefund.setCode(vipOrder.getCode()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | vipOrderRefund.setRefundCode("HYF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); |
| | | vipOrderRefund.setRefundCode(refundCode); |
| | | vipOrderRefund.setRefundTitle("后台退款"); |
| | | vipOrderRefund.setRefundContent("后台退款"); |
| | | vipOrderRefund.setRefundReason("后台退款"); |
| | |
| | | vipOrderRefund.setPayAmount(vipOrder.getPaymentAmount()); |
| | | |
| | | if (1 == vipOrder.getPaymentType()) { |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(vipOrder.getCode()); |
| | | model.setOut_refund_no(vipOrderRefund.getRefundCode()); |
| | | model.setTransaction_id(vipOrder.getSerialNumber()); |
| | | model.setReason("取消订单"); |
| | | model.setNotify_url("/payment/wx/refund/notify"); |
| | | WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); |
| | | amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(vipOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | Map<String, Object> objectMap = wxPaymentClient.queryRefund(refundCode).getData(); |
| | | Map<String, Object> amount1 = null; |
| | | if(null != objectMap && null != objectMap.get("refund_id")){ |
| | | amount1 = (Map<String, Object>) objectMap.get("amount"); |
| | | }else{ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(vipOrder.getCode()); |
| | | model.setOut_refund_no(vipOrderRefund.getRefundCode()); |
| | | model.setTransaction_id(vipOrder.getSerialNumber()); |
| | | model.setReason("取消订单"); |
| | | model.setNotify_url("/payment/wx/refund/notify"); |
| | | WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); |
| | | amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(vipOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | } |
| | | } |
| | | if (null != amount1) { |
| | | vipOrder.setRefundStatus(2); |
| | | vipOrder.setRefundAmount((vipOrder.getRefundAmount() == null ? BigDecimal.valueOf(0) : vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); |
| | | vipOrderService.updateById(vipOrder); |
| | | vipOrderRefundService.save(vipOrderRefund); |
| | | //手续费 |
| | | 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)); |
| | | vipOrderRefund.setRefundFee(refund_fee); |
| | |
| | | throw new ServiceException("退款查询失败"); |
| | | } |
| | | log.info("退款查询结果:{}", JSON.toJSONString(data)); |
| | | Object status = data.get("status"); |
| | | if(null == status){ |
| | | throw new ServiceException("无退款数据"); |
| | | } |
| | | |
| | | Map<String, Object> amount = (Map<String, Object>) data.get("amount"); |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); |
| | |
| | | } |
| | | if (2 == chargingOrder.getRechargePaymentType()) { |
| | | QueryRefundReq dto = new QueryRefundReq(); |
| | | dto.setOutTradeNo(refund_out_trade_no); |
| | | dto.setOutTradeNo(chargingOrder.getCode()); |
| | | dto.setOutRequestNo(refund_out_trade_no); |
| | | QueryRefundResp data = aliPaymentClient.queryRefund(dto).getData(); |
| | | if (null == data) { |
| | | throw new ServiceException("退款查询失败"); |
| | |
| | | chargingOrderRefund.setRefundStatus(2); |
| | | chargingOrderRefund.setPayType(1); |
| | | chargingOrderRefund.setRefundSerialNumber(data.getOutRequestNo()); |
| | | chargingOrderRefund.setRefundTime(LocalDateTime.parse(data.getRefundTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| | | chargingOrderRefund.setRefundTime(null != chargingOrder.getEndTime() ? chargingOrder.getEndTime() : chargingOrder.getPayTime()); |
| | | chargingOrderRefund.setCode(chargingOrder.getCode()); |
| | | chargingOrderRefund.setRefundTitle(rechargeAmount.compareTo(chargingOrderRefund.getRefundAmount()) == 0 ? "充电失败" : "充电完成退款"); |
| | | chargingOrderRefund.setRefundContent(rechargeAmount.compareTo(chargingOrderRefund.getRefundAmount()) == 0 ? "充电失败" : "充电完成退款"); |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public Map<Integer, BigDecimal> getSiteChargingCapacity(List<Integer> siteIds) { |
| | | List<Map<String, Object>> siteChargingCapacity = this.baseMapper.getSiteChargingCapacity(siteIds); |
| | | Map<Integer, BigDecimal> map = new HashMap<>(); |
| | | siteChargingCapacity.forEach(s->{ |
| | | Integer key = Integer.parseInt(s.get("siteId").toString()); |
| | | BigDecimal value = new BigDecimal(s.get("chargingCapacity").toString()); |
| | | map.put(key, value); |
| | | }); |
| | | return map; |
| | | } |
| | | } |