From 20075860ecd50806f7eb594e1d959dd72c871f8a Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 28 十月 2024 15:19:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java |  138 ++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 127 insertions(+), 11 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 0539930..494f449 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
@@ -50,6 +50,7 @@
 import com.ruoyi.order.vo.EndOfChargePageInfo;
 import com.ruoyi.other.api.domain.*;
 import com.ruoyi.order.vo.ChargingOrderListInfoVO;
+import com.ruoyi.other.api.domain.TVip;
 import com.ruoyi.other.api.feignClient.*;
 import com.ruoyi.payment.api.feignClient.AliPaymentClient;
 import com.ruoyi.payment.api.feignClient.WxPaymentClient;
@@ -2228,6 +2229,10 @@
 	private TShoppingOrderService shoppingOrderService;
 	@Resource
 	private TShoppingOrderRefundService shoppingOrderRefundService;
+	@Resource
+	private TVipOrderService vipOrderService;
+	@Resource
+	private TVipOrderRefundService vipOrderRefundService;
 	@Override
 	public R payRefund(PayOrderRefundDto payOrderQueryDto) {
 			if (payOrderQueryDto.getType()==1){
@@ -2363,6 +2368,71 @@
 
 			}
 
+		if (payOrderQueryDto.getType()==3){
+			TVipOrder tChargingOrder = vipOrderService.getById(payOrderQueryDto.getOrderId());
+			if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount())==-1){
+				return R.fail("退款金额需小于支付金额");
+			}
+			TVipOrderRefund chargingOrderRefund = new TVipOrderRefund();
+			chargingOrderRefund.setVipOrderId(tChargingOrder.getId());
+			chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
+			chargingOrderRefund.setRefundStatus(1);
+			chargingOrderRefund.setPayType(tChargingOrder.getPaymentType());
+			chargingOrderRefund.setRefundTime(LocalDateTime.now());
+			chargingOrderRefund.setCode(tChargingOrder.getCode());
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+			chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+			chargingOrderRefund.setRefundTitle("后台退款");
+			chargingOrderRefund.setRefundContent("后台退款");
+			chargingOrderRefund.setRefundReason("后台退款");
+			chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark());
+			chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
+			chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
+
+			if(1 == tChargingOrder.getPaymentType()){
+				WxPaymentRefundModel model = new WxPaymentRefundModel();
+				model.setOut_trade_no(tChargingOrder.getCode());
+				model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+				model.setTransaction_id(tChargingOrder.getSerialNumber());
+				model.setReason("取消订单");
+				model.setNotify_url("/order/t-shopping-order/cancelShoppingOrderWxRefund");
+				WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+				amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
+				amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
+				amount.setCurrency("CNY");
+				model.setAmount(amount);
+				R<String> orderR = wxPaymentClient.refundOrderR(model);
+				if(200 == orderR.getCode()){
+					tChargingOrder.setRefundStatus(2);
+					tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+					vipOrderService.updateById(tChargingOrder);
+					vipOrderRefundService.save(chargingOrderRefund);
+				}
+			}
+
+			if(2 == tChargingOrder.getPaymentType()){
+				RefundReq dto = new RefundReq();
+				dto.setOutTradeNo(tChargingOrder.getCode());
+				dto.setOutRequestNo(tChargingOrder.getCode());
+				dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
+				dto.setRefundReason("取消订单");
+				RefundResp resp = aliPaymentClient.refund(dto).getData();
+				if(null != resp){
+					SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
+
+					tChargingOrder.setRefundStatus(2);
+					tChargingOrder.setRefundAmount((tChargingOrder.getRefundAmount()==null? BigDecimal.valueOf(0) :tChargingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount()));
+
+
+					vipOrderService.updateById(tChargingOrder);
+
+					vipOrderRefundService.save(chargingOrderRefund);
+
+				}
+			}
+
+		}
+
 
 
 		return R.ok();
@@ -2416,6 +2486,7 @@
 		// 根据站点id和开始时间和结束时间和归属日期 查询充电订单列表
 		QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
 				.eq("site_id", dto.getSiteId())
+				.eq("status", 5)
 				.eq("recharge_payment_status",2);
 		switch (dto.getType()){
 			case 1:
@@ -2483,21 +2554,17 @@
 		// 三方交易手续费 三方收费*0.6%
 		commissionAmount = sharingAmount.multiply(new BigDecimal("0.006"));
 		// 订单手续费 订单支付金额 - 退款金额*0.6%
-		orderCommission = paymentAmount.multiply(new BigDecimal("0.006"));
+		orderCommission = paymentAmount.multiply(new BigDecimal("0.006").setScale(2,RoundingMode.HALF_DOWN));
 		tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN));
 		tSettlementConfirm.setCommissionAmount(commissionAmount.setScale(2, RoundingMode.HALF_DOWN));
-		tSettlementConfirm.setElectrovalence(electrovalence);
-		// 服务费=总服务费-三费收费-交易手续费-交易手续费-服务费会员抵扣-服务费优惠券抵扣
-		tSettlementConfirm.setServiceCharge(serviceCharge.subtract(commissionAmount).subtract(sharingAmount).subtract(orderCommission).subtract(vipDiscount).subtract(couponDiscount));
+		tSettlementConfirm.setElectrovalence(electrovalence.setScale(2, RoundingMode.HALF_DOWN));
+		tSettlementConfirm.setServiceCharge(serviceCharge.setScale(2, RoundingMode.HALF_DOWN));
 		tSettlementConfirm.setOrderCommission(orderCommission);
 		tSettlementConfirm.setVipDiscount(vipDiscount);
 		tSettlementConfirm.setCouponDiscount(couponDiscount);
 		tSettlementConfirm.setSiteId(dto.getSiteId());
 		tSettlementConfirm.setChargingElectronic(chargingElectronic);
 		tSettlementConfirm.setIncome(chargingElectronic.add(serviceCharge));
-		tSettlementConfirm.setProfitMoney(new BigDecimal("0"));
-		tSettlementConfirm.setNewMoney(new BigDecimal("0"));
-		tSettlementConfirm.setNewSettlement(new BigDecimal("0"));
 		tSettlementConfirm.setVipDiscount(vipDiscount);
 		tSettlementConfirm.setCouponDiscount(couponDiscount);
 		tSettlementConfirm.setType(dto.getType());
@@ -2518,11 +2585,23 @@
 			tSettlementConfirm.setRemark(dto.getRemark());
 			tSettlementConfirm.setServicePartner(dto.getServicePartner());
 			tSettlementConfirm.setServiceMoney(dto.getServiceMoney());
+			BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner());
+			// 总电损费用
+			BigDecimal divide = tSettlementConfirm.getProportionMoney().divide(subtract, 2, RoundingMode.HALF_DOWN);
+			// 平台承担电损
+			BigDecimal subtract1 = divide.subtract(tSettlementConfirm.getProportionMoney());
+			BigDecimal multiply = dto.getServiceMoney().multiply(subtract);
+			BigDecimal subtract2 = multiply.subtract(subtract1);
+			tSettlementConfirm.setNewMoney(subtract2);
+
 			tSettlementConfirm.setTotalService(dto.getTotalService());
 			tSettlementConfirm.setServiceRemark(dto.getServiceRemark());
 			tSettlementConfirm.setDistribution(dto.getDistribution());
 			tSettlementConfirm.setIncome(dto.getElectrovalence().add(dto.getServiceCharge()));
-			tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()));
+			tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()).add(dto.getMetering()));
+			tSettlementConfirm.setProfitMoney(chargingElectronic.add(serviceCharge).subtract(tSettlementConfirm.getCost()));
+			tSettlementConfirm.setNewSettlement(subtract2.subtract(tSettlementConfirm.getCost()));
+
 			tSettlementConfirmMapper.insert(tSettlementConfirm);
 		}
 		return tSettlementConfirm;
@@ -2530,6 +2609,18 @@
 
 	@Override
 	public PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto) {
+		if (StringUtils.hasLength(dto.getStartTime())){
+			dto.setType(1);
+			String[] split = dto.getStartTime().split(" - ");
+			dto.setStartTime(split[0]);
+			dto.setEndTime(split[1]);
+		}
+		if (StringUtils.hasLength(dto.getEndTime())){
+			dto.setType(2);
+			String[] split = dto.getStartTime().split(" - ");
+			dto.setStartTime(split[0]);
+			dto.setEndTime(split[1]);
+		}
 		PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
 		List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
 		for (TSettlementConfirm tSettlementConfirm : list) {
@@ -2594,11 +2685,12 @@
 //		tSettlementConfirm1.setIncomePercentage();
 //		tSettlementConfirm1.setTotalPercentage();
 		tSettlementConfirm1.setElectronicRefund(0);
-// 上月成本合计
+		// 上月成本合计
 		BigDecimal beforeCost= new BigDecimal("0");
 		// 上月利润合计
 		BigDecimal beforeIncome= new BigDecimal("0");
 		for (TSettlementConfirm tSettlementConfirm : list1) {
+			tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
 			List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
 			if (!data1.isEmpty()){
 				tSettlementConfirm.setSiteName(data1.get(0).getName());
@@ -2651,11 +2743,14 @@
 			StringBuilder stringBuilder = new StringBuilder();
 			for (TChargingOrder tChargingOrder : tChargingOrders) {
 				stringBuilder.append(tChargingOrder.getCode()).append(",");
+
 			}
+			// 充电总时长
+
 			Long temp = 0L;
 			if (StringUtils.hasLength(stringBuilder.toString())){
 				List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getOrderInfoByCodes(stringBuilder.substring(0,stringBuilder.length()-1)).getData();
-				temp+=data6.stream().mapToLong(UploadRealTimeMonitoringData::getCumulative_charging_time).sum();
+				temp+=(data6.stream().mapToLong(UploadRealTimeMonitoringData::getCumulative_charging_time).sum()*60);
 			}
 			List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
 			// 计算充电桩的功率平均值
@@ -2666,11 +2761,32 @@
 
 
 			tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
-			// todo 计算利用率 该电站充电桩本月利用率:
 			//利用率=充电量/(桩数量*功率*时间)
+			List<TChargingPile> data2 = chargingPileClient.getChargingPileBySiteId(tSettlementConfirm.getSiteId()).getData();
+			BigDecimal bigDecimal2 = new BigDecimal("0");
+
+			if (data2!=null && (!data2.isEmpty())){
+				for (TChargingPile tChargingPile : data2) {
+					bigDecimal2 = bigDecimal2.add(tChargingPile.getRatedPower());
+				}
+				BigDecimal bigDecimal1 = new BigDecimal(data2.size()+"");
+				// 平均功率
+				BigDecimal divide = bigDecimal2.divide(bigDecimal1, 2, RoundingMode.HALF_DOWN);
+				// 充电量
+				BigDecimal chargingElectronic1 = tSettlementConfirm.getChargingElectronic();
+				// 桩数量
+				BigDecimal bigDecimal3 = new BigDecimal(data2.size());
+				BigDecimal multiply = chargingElectronic1.multiply(new BigDecimal("24"));
+				BigDecimal multiply1 = bigDecimal3.multiply(divide).multiply(new BigDecimal(temp));
+				tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1,2,RoundingMode.HALF_DOWN)+"");
+			}else{
+				tSettlementConfirm.setRate("");
+			}
+
 
 			for (TSettlementConfirm settlementConfirm : list2) {
 				settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
+				tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
 				if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
 					// 电站相同比较收入涨幅跌幅
 					if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){

--
Gitblit v1.7.1