ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
@@ -4,16 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.chargingPile.api.dto.CheckChargingStrategyDTO; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TAccountingStrategy; import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.chargingPile.api.vo.StrategyPriceVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO; import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService; import com.ruoyi.chargingPile.service.TAccountingStrategyService; import com.ruoyi.chargingPile.service.TChargingPileService; import com.ruoyi.chargingPile.service.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -40,13 +34,15 @@ private final ISiteService siteService; private final TChargingPileService chargingPileService; private final TChargingGunService chargingGunService; private final TAccountingStrategyService accountingStrategyService; private final TAccountingStrategyDetailService accountingStrategyDetailService; @Autowired public TAccountingStrategyDetailController(ISiteService siteService, TChargingPileService chargingPileService, TAccountingStrategyService accountingStrategyService, TAccountingStrategyDetailService accountingStrategyDetailService) { public TAccountingStrategyDetailController(ISiteService siteService, TChargingPileService chargingPileService, TChargingGunService chargingGunService, TAccountingStrategyService accountingStrategyService, TAccountingStrategyDetailService accountingStrategyDetailService) { this.siteService = siteService; this.chargingPileService = chargingPileService; this.chargingGunService = chargingGunService; this.accountingStrategyService = accountingStrategyService; this.accountingStrategyDetailService = accountingStrategyDetailService; } @@ -123,11 +119,22 @@ if(Objects.isNull(chargingPile)){ return R.fail("未查询到该桩设备"); } Site site = siteService.getById(chargingPile.getSiteId()); TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery() TChargingGun chargingGun = chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class) .eq(TChargingGun::getChargingPileId, chargingPile.getId()) .last("LIMIT 1")); TAccountingStrategy accountingStrategy = accountingStrategyService.getById(chargingGun.getAccountingStrategyId()); TAccountingStrategyDetail one; if(Objects.nonNull(accountingStrategy)){ one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery() .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()) .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); }else { Site site = siteService.getById(chargingPile.getSiteId()); accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery() .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()) .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); } return R.ok(one); } /** @@ -178,11 +185,21 @@ if(Objects.isNull(chargingPile)){ return R.fail("未查询到该桩设备"); } Site site = siteService.getById(chargingPile.getSiteId()); TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); TChargingGun chargingGun = chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class) .eq(TChargingGun::getChargingPileId, chargingPile.getId()) .last("LIMIT 1")); TAccountingStrategy accountingStrategy = accountingStrategyService.getById(chargingGun.getAccountingStrategyId()); if(Objects.nonNull(accountingStrategy)){ List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery() .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId())); return R.ok(accountingStrategyDetails); }else { Site site = siteService.getById(chargingPile.getSiteId()); accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery() .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId())); return R.ok(accountingStrategyDetails); } } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -223,7 +223,8 @@ TChargingPile chargingPile = chargingPileService.getOne(new LambdaQueryWrapper<TChargingPile>() .eq(TChargingPile::getCode, code).eq(TChargingPile::getDelFlag, 0)); if(null != chargingPile){ if(chargingPile.getStatus() == 1){ //充电桩正常,返回异常,处理充电桩状态和添加故障记录 if(chargingPile.getStatus() == 1 && 1 == status){ TFaultMessage faultMessage = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId()) .eq(TFaultMessage::getStatus, 2).eq(TFaultMessage::getDelFlag, 0).isNull(TFaultMessage::getEndTime)); if(null == faultMessage){ @@ -248,9 +249,14 @@ one.setEndTime(LocalDateTime.now()); faultMessageService.updateById(one); } chargingPile.setStatus(0 == status ? 1 : 3); chargingPileService.updateById(chargingPile); } if(0 == status){ redisService.getCacheMap("charging_pile_online").put(code, System.currentTimeMillis()); Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_pile_online"); charging_pile_online.put(code, System.currentTimeMillis()); redisService.setCacheMap("charging_pile_online", charging_pile_online); } } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -27,6 +27,7 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.integration.api.feignClient.IntegrationClient; import com.ruoyi.integration.api.feignClient.IotInterfaceClient; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; @@ -106,6 +107,9 @@ @Resource private TFaultMessageService faultMessageService; @Resource private IntegrationClient integrationClient; @@ -284,6 +288,11 @@ tChargingGun.setAccountingStrategyId(setAccountingStrategy.getAccountingStrategyId()); } chargingGunService.updateBatchById(list); //下发硬件更新计费模板 for (TChargingPile chargingPile : this.listByIds(id)) { integrationClient.setupBillingModel1(chargingPile.getCode()); } } @Override @@ -589,7 +598,6 @@ if(datas.size() > 0){ for (TChargingPile data : datas) { if(data.getStatus() == 1){ TFaultMessage faultMessage = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, data.getId()) .eq(TFaultMessage::getStatus, 1).eq(TFaultMessage::getDelFlag, 0).isNull(TFaultMessage::getEndTime)); if(null == faultMessage){ @@ -602,7 +610,6 @@ faultMessage.setDelFlag(false); faultMessage.setContent("设备离线"); faultMessageService.save(faultMessage); } } } this.updateBatchById(datas); ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml
@@ -79,8 +79,7 @@ </if> AND status = 3 </where> group by create_time ORDER BY create_time DESC </select> <select id="parkingData" resultType="java.util.Map"> SELECT ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/ChargingHandshakeController.java
@@ -29,7 +29,7 @@ */ @PostMapping("/getDataByOrderCode") public R<ChargingHandshake> getDataByOrderCode(@RequestParam("code") String code){ ChargingHandshake chargingHandshake = chargingHandshakeService.findById(code); ChargingHandshake chargingHandshake = chargingHandshakeService.getDataByOrderCode(code); return R.ok(chargingHandshake); } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ChargingHandshakeService.java
@@ -5,5 +5,7 @@ public interface ChargingHandshakeService extends BaseService<ChargingHandshake> { ChargingHandshake getDataByOrderCode(String code); } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ChargingHandshakeServiceImpl.java
@@ -5,8 +5,14 @@ import com.ruoyi.integration.mongodb.service.ChargingHandshakeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.List; @Service @@ -28,4 +34,10 @@ public List<ChargingHandshake> findAll() { return mongoTemplate.findAll(ChargingHandshake.class); } @Override public ChargingHandshake getDataByOrderCode(String code) { List<ChargingHandshake> charging_gun_code = mongoTemplate.find(new Query().addCriteria(Criteria.where("transaction_serial_number").is(code)), ChargingHandshake.class); return charging_gun_code.size() > 0 ? charging_gun_code.get(0) : null; } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
@@ -245,14 +245,12 @@ chargingBillExport.setCode(byId.getCode()); chargingBillExport.setAccountType("微信商户"); chargingBillExport.setType(byId.getType().toString()); chargingBillExport.setBillType("月账单"); LocalDateTime billTime = byId.getBillTime(); // 将billTime 减去一个月 转化为yyyy-MM格式字符串 billTime = billTime.minusMonths(1); chargingBillExport.setBillWeek(DateUtils.parseDateToStr("yyyy-MM",DateUtils.toDate(billTime))); chargingBillExport.setBillTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(billTime))); chargingBillExport.setState("未出账"); List<Site> data = siteClient.getSiteByIds(Arrays.asList(byId.getSiteId())).getData(); if (!data.isEmpty()){ chargingBillExport.setSiteName(data.get(0).getName()); @@ -316,11 +314,11 @@ chargingBillPayExport.setPlatformPay("支付宝小程序支付"); } TChargingOrderRefund one = tChargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()).one(); if (one!=null){ chargingBillRefundExport.setRechargeSerialNumber(one.getSerailNumber()); chargingBillRefundExport.setCode(one.getCode()); chargingBillRefundExport.setPayTime(tChargingOrder.getPayTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getPayTime())):""); List<TChargingOrderRefund> one1 = tChargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()).list(); for (TChargingOrderRefund one : one1) { 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){ chargingBillRefundExport.setRefundTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getRefundTime()))); } @@ -330,6 +328,7 @@ chargingBillRefundExport.setRefundSerialNumber(one.getRefundSerialNumber()); chargingBillRefundExports.add(chargingBillRefundExport); } // 支付信息 chargingBillPayExport.setId(i+""); chargingBillPayExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber()); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -813,6 +813,7 @@ ChargingOrderAndUploadRealTimeMonitoringDataDto dataDto = new ChargingOrderAndUploadRealTimeMonitoringDataDto(); BeanUtils.copyProperties(uploadRealTimeMonitoringData,dataDto); ChargingOrderQuery dto = new ChargingOrderQuery(); dto.setCode(uploadRealTimeMonitoringData.getTransaction_serial_number()); TCharingOrderVO vo = chargingOrderService.chargingOrder(dto); if (!vo.getList().getRecords().isEmpty()) { ChargingOrderVO chargingOrderVO = vo.getList().getRecords().get(0); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/ChargingBillExport.java
@@ -17,14 +17,12 @@ private String accountType; @Excel(name = "账单分类",width = 30,replace = {"全站账单_1","各个站点账单_2"}) private String type; @Excel(name = "账单类型",width = 30) private String billType; @Excel(name = "账单周期",width = 30 ) private String billWeek; @Excel(name = "账单生成日期",width = 30) private String billTime; @Excel(name = "状态",width = 30) private String state; @Excel(name = "站点名称",width = 30) private String siteName; @Excel(name = "支付金额",width = 30) ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -539,6 +539,7 @@ chargingOrder.setRechargePaymentStatus(2); chargingOrder.setRechargeSerialNumber(transaction_id); chargingOrder.setStatus(2); chargingOrder.setPayTime(LocalDateTime.now()); //添加安全检测数据到缓存中,每步安全检测完成后需要更新缓存数据 PreChargeCheck preChargeCheck = new PreChargeCheck(); @@ -608,12 +609,16 @@ if(times > m){ //充电时间跨度两个计费策略,需要继续对下一个策略进行计算 serviceCharge = s_server_amount.multiply(new BigDecimal(m)); discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount))); rechargeAmount1 = rechargeAmount1.subtract(s_total_amount.multiply(new BigDecimal(m))); if(null != discount){ discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount))); } nowTimeMillis = null; }else{ serviceCharge = s_server_amount.multiply(new BigDecimal(times)); if(null != discount){ discountAmount = discountAmount.add(serviceCharge.multiply(new BigDecimal(1).subtract(discount))); } break; } } @@ -792,8 +797,11 @@ one.setRefundStatus(2); one.setRefundTime(LocalDateTime.now()); chargingOrderRefundService.updateById(one); TChargingOrder chargingOrder = this.getById(one.getChargingOrderId()); chargingOrder.setPayTime(LocalDateTime.now()); chargingOrder.setRefundStatus(2); chargingOrder.setRefundSerialNumber(refund_id); chargingOrder.setRefundTime(LocalDateTime.now()); this.updateById(chargingOrder); return AjaxResult.success(); } @@ -836,6 +844,7 @@ Integer m = Integer.valueOf(data.getCumulative_charging_time() % 60); chargingDetails.setChargedTime(String.format("%02d", h) + ":" + String.format("%02d", m)); } //转换成UTC时间 ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData(); if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){ BigDecimal bms_battery_capacity = chargingHandshake.getBms_battery_capacity(); @@ -1963,8 +1972,6 @@ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date())); if(success.isSuccess()){ chargingOrder.setPayTime(LocalDateTime.now()); this.updateById(chargingOrder); chargingOrderRefundService.save(chargingOrderRefund); } } @@ -2556,7 +2563,7 @@ tSettlementConfirm.setIncomePercentage(0+"%"); tSettlementConfirm.setIncomePercentage(0+"%"); }else{ BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")); BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome,2,RoundingMode.HALF_DOWN).multiply(new BigDecimal("100")); tSettlementConfirm.setIncomePercentage(subtract+"%"); tSettlementConfirm.setIncomePercentage(subtract+"%"); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -128,7 +128,7 @@ tChargingBill3.setType(2); tChargingBill3.setSiteId(collect.get(i)); tChargingBill3.setBillTime(LocalDateTime.now()); tChargingBill3.setBillType(1); tChargingBill3.setBillType(2); tChargingBill3.setStatus(1); tChargingBill3.setOrderState(2); tChargingBills1.add(tChargingBill3);