ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
@@ -31,6 +31,9 @@ @ApiModelProperty(value = "主键") @TableId(value = "id", type = IdType.NONE) private Long id; @ApiModelProperty(value = "序号") @TableField(exist = false) private Integer xuhao; @ApiModelProperty(value = "订单编号") @TableField("code") @@ -69,6 +72,7 @@ @TableField("site_id") private Integer siteId; @ApiModelProperty(value = "停车场id") @TableField("parking_lot_id") private Integer parkingLotId; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
@@ -47,6 +47,9 @@ @ApiModelProperty(value = "结算服务费备注") @TableField("service_remark") private String serviceRemark; @ApiModelProperty(value = "电费结算方编码") @TableField("confirm_code") private String confirmCode; @ApiModelProperty(value = "计量电量(电量合计)") @TableField("metering_electronic") @@ -107,6 +110,12 @@ @ApiModelProperty(value = "合作商充电服务费根据合同约定分成比例") @TableField("service_partner") private BigDecimal servicePartner; @ApiModelProperty(value = "合作商充电服务费根据合同约定分成比例") @TableField(exist = false) private String servicePartnerString; @ApiModelProperty(value = "平台充电服务费根据合同约定分成比例") @TableField(exist = false) private String platformString; @ApiModelProperty(value = "合作商充电服务费根据合同约定分成金额") @TableField("service_money") private BigDecimal serviceMoney; @@ -147,6 +156,9 @@ @ApiModelProperty(value = "站点名称") @TableField(exist = false) private String siteName; @ApiModelProperty(value = "服务费:合计可分配金额") @TableField(exist = false) private String serviceChargeTotal; @ApiModelProperty(value = "合作商名称") @TableField(exist = false) private String partnerName; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementExportVO.java
New file @@ -0,0 +1,107 @@ package com.ruoyi.order.api.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.ruoyi.order.api.model.TChargingOrder; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel(value = "SettlementExportVO对象", description = "结算下载导出信息") public class SettlementExportVO extends TChargingOrder { @ApiModelProperty(value = "站点编号") private String siteCode; @ApiModelProperty(value = "站点名称") private String siteName; @ApiModelProperty(value = "终端名称") private String name; @ApiModelProperty(value = "所属城市") private String city; @ApiModelProperty(value = "所属市区") private String districts; @ApiModelProperty(value = "所属合作商") private String partnerName; @ApiModelProperty(value = "电站类型") private String siteType; @ApiModelProperty(value = "售电模式") private String electronicType; @ApiModelProperty(value = "站点状态") private String siteStatus; @ApiModelProperty(value = "运营类型") private String businessCategory; @ApiModelProperty(value = "计费策略") private String accountingStrategy; @ApiModelProperty(value = "收款方式") private String payTypeName; @ApiModelProperty(value = "订单创建时间") private String createTime1; @ApiModelProperty(value = "充电开始时间") private String startTime1; @ApiModelProperty(value = "充电结束时间") private String endTime1; @ApiModelProperty(value = "订单状态") private String statusName; @ApiModelProperty(value = "订单类型") private String orderTypeName; @ApiModelProperty(value = "充电形式") private String chargingType; @ApiModelProperty(value = "充电结束账号") private String phone; @ApiModelProperty(value = "是否免费订单") private String isFree; @ApiModelProperty(value = "平均电费单价") private String averageElectronic; @ApiModelProperty(value = "平均服务费实际单价") private String averageServiceChargeReal; @ApiModelProperty(value = "平均服务费挂牌单价") private String averageServiceCharge; @ApiModelProperty(value = "充电时长(分钟)") private String chargingSecond; @ApiModelProperty(value = "充电前soc") private String startSoc; @ApiModelProperty(value = "充电后soc") private String endSoc; @ApiModelProperty(value = "是否限制SOC") private String isSoc; @ApiModelProperty(value = "限制SOC方式") private String socType; @ApiModelProperty(value = "限制Soc值") private String socValue; @ApiModelProperty(value = "客户类型") private String userType; @ApiModelProperty(value = "会员类型") private String vipType; @ApiModelProperty(value = "是否PLUS订单") private String isPlus; @ApiModelProperty(value = "客户编号") private String userCode; @ApiModelProperty(value = "真实姓名") private String realName; @ApiModelProperty(value = "设备号") private String deviceCode; @ApiModelProperty(value = "手机号") private String userPhone; @ApiModelProperty(value = "车牌号") private String licensePlate; @ApiModelProperty(value = "选择车型") private String vehicleModel; @ApiModelProperty(value = "车辆品牌") private String vehicleBrand; @ApiModelProperty(value = "电费结算方编码") private String confirmCode; @ApiModelProperty(value = "电费结算方法名称(管理公司)") private String companyName; @ApiModelProperty(value = "计费方式") private String moneyType; @ApiModelProperty(value = "设备接入方式") private String deviceType; @ApiModelProperty(value = "预支付类型") private String beforePayType; @ApiModelProperty(value = "是否安全防护订单") private String isSafe; } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -2,18 +2,25 @@ import java.time.LocalDateTime; import java.math.BigDecimal; import com.ruoyi.account.api.feignClient.AppUserCarClient; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Partner; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.common.core.utils.WebUtils; import com.ruoyi.common.core.web.domain.BasePojo; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.order.api.model.ExportUidDto; import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TSettlementConfirm; import com.ruoyi.order.api.vo.AccountListVO; import com.ruoyi.order.api.vo.ChargingBillListVO; import com.ruoyi.order.api.vo.*; import com.alibaba.excel.EasyExcel; @@ -45,8 +52,8 @@ import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.ChargingListQuery; import com.ruoyi.order.api.vo.ChargingBillVO; import com.ruoyi.order.api.vo.SettlementTotalVO; import com.ruoyi.other.api.feignClient.OtherClient; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.apache.commons.codec.CharEncoding; import org.springframework.beans.BeanUtils; @@ -61,11 +68,10 @@ import java.net.URL; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; /** * <p> @@ -88,6 +94,12 @@ private OrderClient orderClient; @Resource private SiteClient siteClient; @Resource private ChargingGunClient chargingGunClient; @Resource private AppUserClient appUserClient; @Resource private AppUserCarClient appUserCarClient; @Autowired public TApplyChargingPileController(TApplyChargingPileService applyChargingPileService, TokenService tokenService, RedisService redisService) { @@ -366,12 +378,186 @@ } return R.ok(); } @Resource private OtherClient otherClient; @Resource private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient; @ApiOperation(value = "下载", tags = {"管理后台-结算表记录"}) @PutMapping("/downloadSettlement") @Log(title = "【结算表记录】下载结算表", businessType = BusinessType.EXPORT) public R downloadSettlement(@RequestBody ExportUidDto uid,HttpServletResponse response) { TSettlementConfirm data = chargingOrderClient.downloadSettlement(uid.getUid()).getData(); for (TChargingOrder chargingOrder : data.getList()) { SettlementExportVO settlementExportVO = new SettlementExportVO(); BeanUtils.copyProperties(data, settlementExportVO); List<Site> data3 = siteClient.getSiteByIds(Arrays.asList(data.getSiteId())).getData(); if (data3!=null && (!data3.isEmpty())){ TAppUser data4 = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); if (data4.getVipId()== null ){ settlementExportVO.setVipType("非会员"); }else{ List<Integer> vipIds = new ArrayList<>(); //获取会员map R<Map<Integer, String>> vipMap = otherClient.getVipMap(vipIds); settlementExportVO.setVipType(vipMap.getData().get(data4.getVipId())); } settlementExportVO.setPhone(data4.getPhone()); settlementExportVO.setRealName(data4.getName()); if (chargingOrder.getAppUserCarId()!=null){ List<TAppUserCar> data5 = appUserCarClient.getCarByIds(Arrays.asList(chargingOrder.getAppUserCarId())).getData(); if (!data5.isEmpty()){ settlementExportVO.setLicensePlate(data5.get(0).getLicensePlate()); settlementExportVO.setVehicleModel(data5.get(0).getVehicleModel()); settlementExportVO.setVehicleBrand(data5.get(0).getVehicleBrand()); } } settlementExportVO.setSiteCode(data3.get(0).getCode()); settlementExportVO.setSiteName(data3.get(0).getName()); settlementExportVO.setCity(data3.get(0).getCity()); settlementExportVO.setDistricts(data3.get(0).getDistricts()); Partner data1 = siteClient.getPartnerR(data3.get(0).getPartnerId()).getData(); if (data1!=null){ settlementExportVO.setPartnerName(data1.getName()); } switch (data3.get(0).getSiteType()){ case 0: settlementExportVO.setSiteType("其他"); break; case 1: settlementExportVO.setSiteType("公共"); break; case 2: settlementExportVO.setSiteType("个人"); break; case 3: settlementExportVO.setSiteType("公交(专业)"); break; case 4: settlementExportVO.setSiteType("环卫(专用)"); break; case 5: settlementExportVO.setSiteType("物流(专用)"); break; case 6: settlementExportVO.setSiteType("出租车(专用)"); break; } switch (data3.get(0).getStatus()){ case 1: settlementExportVO.setSiteStatus("正常使用"); break; case 2: settlementExportVO.setSiteStatus("维修中"); break; case 3: settlementExportVO.setSiteStatus("关闭下线"); break; } switch (data3.get(0).getBusinessCategory()){ case 1: settlementExportVO.setBusinessCategory("直营"); break; case 2: settlementExportVO.setBusinessCategory("非直营"); break; } // todo 查询站点计费策略名称 // settlementExportVO.setAccountingStrategy(); } TChargingGun data4 = chargingGunClient.getChargingGunById(settlementExportVO.getChargingGunId()) .getData(); if (data4!=null){ settlementExportVO.setName(data4.getName()); settlementExportVO.setDeviceCode(data4.getCode()); } settlementExportVO.setElectronicType("转售"); settlementExportVO.setPayTypeName("线上结算"); LocalDateTime createTime = settlementExportVO.getCreateTime(); LocalDateTime startTime = settlementExportVO.getStartTime(); LocalDateTime endTime = settlementExportVO.getEndTime(); settlementExportVO.setCreateTime1(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); settlementExportVO.setStartTime1(startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); settlementExportVO.setEndTime1(endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); switch (settlementExportVO.getStatus()){ case 0: settlementExportVO.setStatusName("未知"); break; case 1: settlementExportVO.setStatusName("等待中/已插枪"); break; case 2: settlementExportVO.setStatusName("启动中"); break; case 3: settlementExportVO.setStatusName("充电中"); break; case 4: settlementExportVO.setStatusName("停止中"); break; case 5: settlementExportVO.setStatusName("已结束"); break; } settlementExportVO.setOrderTypeName("充电订单"); settlementExportVO.setChargingType("单桩双充"); settlementExportVO.setIsFree("否"); settlementExportVO.setAverageElectronic(""); settlementExportVO.setAverageServiceChargeReal(""); settlementExportVO.setAverageServiceCharge(""); // 获取充电时间 UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData(); if (data5!=null){ if (data5.getCumulative_charging_time()!=null){ settlementExportVO.setChargingSecond(data5.getCumulative_charging_time()+""); } } // 获取开始SOC 结束soc if (chargingOrder.getCode()!=null){ List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData(); if (data6!=null && !data6.isEmpty()){ // 第一条数据soc为开始 最后一条数据soc为结束soc settlementExportVO.setStartSoc(data6.get(0).getSoc()+"%"); settlementExportVO.setEndSoc(data6.get(data6.size()-1).getSoc()+"%"); } } settlementExportVO.setIsSoc("否"); settlementExportVO.setSocType(""); settlementExportVO.setSocValue(""); settlementExportVO.setUserType("普通个人用户"); if (chargingOrder.getVipDiscountAmount()!=null && chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0){ settlementExportVO.setIsPlus("是"); }else { settlementExportVO.setIsPlus("否"); } settlementExportVO.setUserCode(""); settlementExportVO.setConfirmCode(data.getConfirmCode()); settlementExportVO.setCompanyName("四川明星新能源有限科技公司"); settlementExportVO.setMoneyType("线上计费"); settlementExportVO.setDeviceType("设备直连(自由集控)"); settlementExportVO.setBeforePayType("先付后退"); settlementExportVO.setIsSafe("是"); // 顶部合计数据 data.setServiceChargeTotal(data.getServiceCharge().add(data.getVenue()) .add(data.getVenue()).add(data.getMaintain()).add(data.getClean())+""); data.setServicePartnerString(data.getServicePartner()+"%"); BigDecimal bigDecimal = new BigDecimal("100"); data.setPlatformString(bigDecimal.subtract(data.getServicePartner())+"%"); } List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(data.getSiteId())).getData(); if (!data1.isEmpty()){ data.setSiteName(data1.get(0).getName()); @@ -400,10 +586,11 @@ WriteSheet writeSheet = EasyExcel.writerSheet().build(); WriteSheet writeSheet2 = EasyExcel.writerSheet().build(); WriteSheet writeSheet3 = EasyExcel.writerSheet().build(); FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build(); excelWriter.fill(new FillWrapper("data1", chargingBillVOS), fillConfig, writeSheet); excelWriter.fill(new FillWrapper("data2", chargingBillVOS), fillConfig, writeSheet2); excelWriter.fill(new FillWrapper("data3", data.getList()), fillConfig, writeSheet3); excelWriter.fill(new FillWrapper("data4", data.getList()), fillConfig, writeSheet3); excelWriter.finish(); } catch (Exception e) { return R.fail("excel导出失败!"); ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsxBinary files differ
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
@@ -291,10 +291,8 @@ int i =1; for (TChargingOrder tChargingOrder : tChargingOrders) { // 账单信息 paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount()); if (tChargingOrder.getRefundStatus()!=null && tChargingOrder.getRefundStatus()==2){ refundAmount = refundAmount.add(tChargingOrder.getRefundAmount()); } paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); // 退款信息 ChargingBillRefundExport chargingBillRefundExport = new ChargingBillRefundExport(); ChargingBillPayExport chargingBillPayExport = new ChargingBillPayExport(); @@ -314,12 +312,16 @@ chargingBillPayExport.setPlatformPay("支付宝小程序支付"); } List<TChargingOrderRefund> one1 = tChargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()).list(); List<TChargingOrderRefund> one1 = tChargingOrderRefundService.lambdaQuery() .eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()) .eq(TChargingOrderRefund::getRefundStatus, 2) .list(); for (TChargingOrderRefund one : one1) { refundAmount= refundAmount.add(one.getRefundAmount()); chargingBillRefundExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber()); chargingBillRefundExport.setCode(tChargingOrder.getCode()); chargingBillRefundExport.setPayTime(tChargingOrder.getCreateTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getCreateTime())):""); if (tChargingOrder.getRefundTime()!=null){ if (one.getRefundTime()!=null){ chargingBillRefundExport.setRefundTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(one.getRefundTime()))); } chargingBillRefundExport.setRefundMoney(one.getRefundAmount().toString()); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -248,6 +248,10 @@ .between(TChargingOrder::getStartTime, byId.getStartTime(), byId.getEndTime()) .eq(TChargingOrder::getStatus, 5) .eq(TChargingOrder::getRechargePaymentStatus, 2).list(); int i = 1; for (TChargingOrder chargingOrder : list) { } byId.setList(list); String format = byId.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); String format1 = byId.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss")); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -13,6 +13,7 @@ import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TChargingOrderRefund; import com.ruoyi.order.api.vo.ChargingBillListVO; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -23,6 +24,7 @@ import com.ruoyi.order.mapper.TChargingBillMapper; import com.ruoyi.order.mapper.TChargingOrderMapper; import com.ruoyi.order.service.TChargingBillService; import com.ruoyi.order.service.TChargingOrderRefundService; import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ; import org.omg.CORBA.PRIVATE_MEMBER; import org.springframework.stereotype.Service; @@ -63,6 +65,8 @@ private AppUserClient appUserClient; @Resource private AppUserCarClient appUserCarClient; @Resource private TChargingOrderRefundService chargingOrderRefundService; @Override public ChargingBillVO chargingBillList1(ChargingListQuery dto) { if (dto.getState()!=null){ @@ -243,9 +247,9 @@ } } if (data3!=null)tChargingOrder.setUserName(data3.getName()); // 累加实收金额 支付金额减去退款金额 if (tChargingOrder.getPaymentAmount()!=null){ paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount()); // 累加实收金额 if (tChargingOrder.getOrderAmount()!=null){ paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); } // 累加订单金额 if (tChargingOrder.getOrderAmount()!=null){ @@ -255,8 +259,10 @@ if (tChargingOrder.getElectrovalence()!=null){ electrovalence = electrovalence.add(tChargingOrder.getElectrovalence()); } if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getRefundStatus()!=null && tChargingOrder.getRefundStatus()== 2){ refundAmount = refundAmount.add(tChargingOrder.getRefundAmount()); List<TChargingOrderRefund> list2 = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2) .eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()).list(); for (TChargingOrderRefund tChargingOrderRefund : list2) { refundAmount = refundAmount.add(tChargingOrderRefund.getRefundAmount()); } // 累加累计服务费 if (tChargingOrder.getServiceCharge()!=null){ @@ -264,8 +270,7 @@ } // 累加平台手续费 if (tChargingOrder.getOrderAmount()!=null){ commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(BigDecimal.valueOf(0.006)) .setScale(2,RoundingMode.HALF_DOWN)); commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(BigDecimal.valueOf(0.006))); } // 累加平台分佣 if (tChargingOrder.getSharingAmount()!=null){ @@ -498,7 +503,6 @@ BigDecimal commissionAmount = new BigDecimal("0"); BigDecimal sharingAmount = new BigDecimal("0"); BigDecimal chargingCapacity = new BigDecimal("0"); orderCount+=tChargingOrders.size(); chargingBillVO.setCategory(""); chargingBillListVO.setOrderCount(tChargingOrders.size()); chargingBillVO.setExportList(tChargingOrders); @@ -701,7 +705,7 @@ eq.eq("site_id", chargingBillListVO.getSiteId()); } List<TChargingOrder> tChargingOrders = chargingOrderList.selectList(eq); int chargingSecond = 0; orderCount+=tChargingOrders.size(); BigDecimal paymentAmount = new BigDecimal("0"); BigDecimal orderAmount = new BigDecimal("0"); BigDecimal electrovalence = new BigDecimal("0"); @@ -709,7 +713,7 @@ BigDecimal commissionAmount = new BigDecimal("0"); BigDecimal sharingAmount = new BigDecimal("0"); BigDecimal chargingCapacity = new BigDecimal("0"); orderCount+=tChargingOrders.size(); chargingBillListVO.setOrderCount(tChargingOrders.size()); for (TChargingOrder tChargingOrder : tChargingOrders) { // 累加实收金额 支付金额减去退款金额 if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getPaymentAmount()!=null){ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -2252,6 +2252,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: @@ -2319,21 +2320,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()); @@ -2354,11 +2351,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; @@ -2430,11 +2439,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()); @@ -2487,11 +2497,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(); // 计算充电桩的功率平均值 @@ -2502,11 +2515,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){