ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java
@@ -5,6 +5,7 @@ import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.model.TFaultMessage; import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo; import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.chargingPile.api.vo.SiteNameVO; import com.ruoyi.common.core.domain.R; @@ -72,7 +73,7 @@ } @Override public R<List<TChargingGun>> getChargingGunByChargingPileIds(List<Integer> chargingPileIds) { public R<List<TChargingGun>> getChargingGunByChargingPileIds(GetChargingGunByChargingPileIdsVo vo) { return R.fail("根据充电桩ids获取枪失败:" + throwable.getMessage()); } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java
@@ -3,6 +3,7 @@ import com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo; import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.chargingPile.api.vo.SiteNameVO; import com.ruoyi.common.core.constant.ServiceNameConstants; @@ -83,11 +84,10 @@ /** * 根据充电桩ids获取枪 * @param chargingPileIds * @return */ @PostMapping("/t-charging-gun/getChargingGunByChargingPileIds") R<List<TChargingGun>> getChargingGunByChargingPileIds(@RequestParam("chargingPileIds") List<Integer> chargingPileIds); R<List<TChargingGun>> getChargingGunByChargingPileIds(@RequestBody GetChargingGunByChargingPileIdsVo vo); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -190,7 +190,7 @@ Address[] allRecipients = {toMail, toMail2}; message.setRecipients(Message.RecipientType.TO, allRecipients); // Set Subject: 邮件主体 message.setSubject("明星电力"); message.setSubject("明星新能源充电开票"); // 设置消息体 message.setSentDate(new Date()); javax.mail.internet.MimeMultipart msgMultipart = new MimeMultipart("mixed"); ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
@@ -326,12 +326,14 @@ /** * 根据充电桩ids获取枪 * @param chargingPileIds * @return */ @PostMapping("/getChargingGunByChargingPileIds") public R<List<TChargingGun>> getChargingGunByChargingPileIds(@RequestParam("chargingPileIds") List<Integer> chargingPileIds){ List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, chargingPileIds) public R<List<TChargingGun>> getChargingGunByChargingPileIds(@RequestBody GetChargingGunByChargingPileIdsVo vo){ if(vo.getChargingPileIds().isEmpty()){ return R.ok(new ArrayList<>()); } List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, vo.getChargingPileIds()) .eq(TChargingGun::getDelFlag, 0)); return R.ok(list); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -267,7 +267,7 @@ @Override public void run() { //推送状态给三方平台 tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), tChargingGun1.getStatus()); tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), 2); } }).start(); @@ -295,7 +295,7 @@ @Override public void run() { //推送状态给三方平台 tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), tChargingGun1.getStatus()); tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), 7); } }).start(); @@ -348,7 +348,7 @@ @Override public void run() { //推送状态给三方平台 tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), tChargingGun1.getStatus()); tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), 5); } }).start(); }else{ @@ -360,7 +360,7 @@ @Override public void run() { //推送状态给三方平台 tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), tChargingGun1.getStatus()); tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), 3); } }).start(); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -733,7 +733,7 @@ @Override public void run() { //推送状态给三方平台 tcecClient.pushChargingGunStatus(chargingGun1.getFullNumber(), chargingGun1.getStatus()); tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 1); } }).start(); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -5,6 +5,7 @@ import com.alibaba.nacos.common.utils.JacksonUtils; import com.ruoyi.chargingPile.api.feignClient.*; import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.common.core.utils.StringUtils; @@ -150,31 +151,7 @@ } return baseResult; } public BaseResult requestCheckJianGuan(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){ Operator operator = new Operator(); BaseResult baseResult = new BaseResult(); baseResult.setRet(0); baseResult.setMsg("成功"); baseResult.setOperatorID(baseRequest.getOperatorID()); operator.setOperatorId(baseRequest.getOperatorID()); Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); baseResult.setTimeStamp(mapKey); baseResult.setSeq("0001"); //校验token和签名 String operatorID = baseRequest.getOperatorID(); String sig = baseRequest.getSig(); Long timeStamp = baseRequest.getTimeStamp(); String data = baseRequest.getData(); String seq = baseRequest.getSeq(); baseResult.setOperator(operator); if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){ baseResult.setRet(4003); baseResult.setMsg("参数异常"); return baseResult; } return baseResult; } @@ -348,7 +325,9 @@ List<Integer> siteIds = sites.stream().map(Site::getId).collect(Collectors.toList()); List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData(); List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData(); GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo(); vo.setChargingPileIds(collect1); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData(); String serviceTel = systemConfigurationClient.getServerPhone().getData(); List<StationInfo> StationInfos = new ArrayList<>(); for (Site datum : sites) { @@ -651,7 +630,9 @@ List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList()); List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData(); List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData(); GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo(); vo.setChargingPileIds(collect1); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData(); QueryStationStatusResult result = new QueryStationStatusResult(); result.setTotal(data.size()); @@ -1896,7 +1877,9 @@ List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(stationIDList).getData(); if(!CollectionUtils.isEmpty(chargingPiles)){ List<Integer> pileIds = chargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(pileIds).getData(); GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo(); vo.setChargingPileIds(pileIds); List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(vo).getData(); if(!CollectionUtils.isEmpty(chargingGuns)){ for (Integer stationID : stationIDList) { StationStatusInfo stationStatusInfo = new StationStatusInfo(); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
@@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.chargingPile.api.feignClient.*; import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.common.core.utils.StringUtils; @@ -287,7 +288,9 @@ List<Integer> siteIds = sites.stream().map(Site::getId).collect(Collectors.toList()); List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData(); List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData(); GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo(); vo.setChargingPileIds(collect1); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData(); String serviceTel = systemConfigurationClient.getServerPhone().getData(); List<StationInfo> StationInfos = new ArrayList<>(); for (Site datum : sites) { @@ -595,7 +598,9 @@ List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList()); List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData(); List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData(); GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo(); vo.setChargingPileIds(collect1); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData(); QueryStationStatusResult result = new QueryStationStatusResult(); result.setTotal(data.size()); @@ -1929,7 +1934,9 @@ List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(stationIDList).getData(); if(!CollectionUtils.isEmpty(chargingPiles)){ List<Integer> pileIds = chargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(pileIds).getData(); GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo(); vo.setChargingPileIds(pileIds); List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(vo).getData(); if(!CollectionUtils.isEmpty(chargingGuns)){ for (Integer stationID : stationIDList) { StationStatusInfo stationStatusInfo = new StationStatusInfo(); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
@@ -5,6 +5,7 @@ import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.integration.drainage.TCECSuperviseUtil; import com.ruoyi.integration.drainage.TokenUtil; @@ -158,7 +159,9 @@ List<Integer> siteIds = data.stream().filter(s->s.getStatus() == 1).map(Site::getId).collect(Collectors.toList()); List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData(); List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData(); GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo(); vo.setChargingPileIds(collect1); List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData(); SupStationPowerInfoResult supStationPowerInfoResult = new SupStationPowerInfoResult(); List<SupStationPowerInfo> stationStatsInfos = new ArrayList<>(); LocalDateTime now = LocalDateTime.now(); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -66,7 +66,6 @@ */ @PostMapping(value = "/message") public AjaxResult<String> message(@RequestBody JSONObject jsonObject) throws IOException { log.info("接收到消息中转:{}",jsonObject.toJSONString()); JSONObject body = jsonObject.getJSONObject("notify_data").getJSONObject("body"); JSONObject content = null; try { @@ -85,6 +84,9 @@ String nodeId = header.getString("node_id"); // 设备编号 String productId = header.getString("product_id"); // 产品id String service_id = content.getString("service_id"); if(!SendTagConstant.PING.equals(service_id)){ log.info("收到IOT发送的消息:{}",jsonObject.toJSONString()); } // log.info("服务id:{}",service_id); ChargingMessage chargingMessage = new ChargingMessage(); chargingMessage.setServiceId(service_id); ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
@@ -40,7 +40,6 @@ */ @PostMapping("/sendMessage") public String sendMessage(String code, String name, JSONObject message){ // log.info("消息下发至设备:code={},name={},message={}", code, name, message); CreateMessageRequest request = new CreateMessageRequest(); request.withDeviceId(code); DeviceMessageRequest body = new DeviceMessageRequest(); @@ -50,11 +49,9 @@ request.withBody(body); try { CreateMessageResponse response = iotBuilder.buildIot().createMessage(request); // log.info("消息下发至设备结果:{}", JSON.toJSONString(response)); return JSON.toJSONString(response); } catch (Exception e) { e.printStackTrace(); // log.error("消息下发至设备异常:code---{},msg---{}", code, e.getMessage()); return e.getMessage(); } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/ChargingMessageUtil.java
@@ -107,7 +107,6 @@ public void handleMessage(ChargingMessage message){ log.info("收到的消息内容:{}",message); String serviceId = message.getServiceId(); if(!StringUtils.hasLength(serviceId)){ return; @@ -115,7 +114,6 @@ switch (serviceId){ case SendTagConstant.ONLINE: OnlineMessage onlineMessage = message.getOnlineMessage(); log.info("充电桩登录认证业务消息处理:{}",onlineMessage); // 持久化消息 Online online = new Online(); BeanUtils.copyProperties(onlineMessage,online); @@ -123,7 +121,6 @@ break; case SendTagConstant.PING: PingMessage pingMessage = message.getPingMessage(); log.info("充电桩心跳包-业务消息处理:{}",pingMessage); // 持久化消息 Ping ping = new Ping(); BeanUtils.copyProperties(pingMessage,ping); @@ -139,7 +136,6 @@ break; case SendTagConstant.END_CHARGE: EndChargeMessage endChargeMessage = message.getEndChargeMessage(); log.info("充电结束-业务消息处理:{}",endChargeMessage); // 持久化消息 EndCharge endCharge = new EndCharge(); BeanUtils.copyProperties(endChargeMessage,endCharge); @@ -149,7 +145,6 @@ break; case SendTagConstant.ERROR_MESSAGE: ErrorMessageMessage errorMessageMessage1 = message.getErrorMessageMessage(); log.info("错误报文-业务消息处理:{}",errorMessageMessage1); // 持久化消息 // ErrorMessageMessage errorMessageMessage = new ErrorMessageMessage(); // BeanUtils.copyProperties(errorMessageMessage1,errorMessageMessage); @@ -157,7 +152,6 @@ break; case SendTagConstant.BILLING_MODE_VERIFY: BillingModeVerifyMessage billingModeVerifyMessage = message.getBillingModeVerifyMessage(); log.info("计费模型验证请求-业务消息处理:{}",billingModeVerifyMessage); // 持久化消息 // BillingModeVerify billingModeVerify = new BillingModeVerify(); // BeanUtils.copyProperties(billingModeVerifyMessage,billingModeVerify); @@ -165,7 +159,6 @@ break; case SendTagConstant.ACQUISITION_BILLING_MODE: AcquisitionBillingModeMessage acquisitionBillingModeMessage = message.getAcquisitionBillingModeMessage(); log.info("充电桩计费模型请求-业务消息处理:{}",acquisitionBillingModeMessage); // 持久化消息 AcquisitionBillingMode acquisitionBillingMode = new AcquisitionBillingMode(); BeanUtils.copyProperties(acquisitionBillingModeMessage,acquisitionBillingMode); @@ -184,7 +177,6 @@ } redisTemplate.opsForValue().set("upload_real_time_monitoring_data:" + transaction_serial_number, System.currentTimeMillis(), 1, TimeUnit.MINUTES); try { log.info("上传实时监测数据-业务消息处理:{}",uploadRealTimeMonitoringDataMessage); // 持久化消息 UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData(); BeanUtils.copyProperties(uploadRealTimeMonitoringDataMessage,uploadRealTimeMonitoringData); @@ -202,7 +194,6 @@ uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree().subtract(data.getCharging_degree())); uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP)); }else { log.info("首次上传实时监测数据"); uploadRealTimeMonitoringData.setPeriod_electric_price(uploadRealTimeMonitoringDataMessage.getPaid_amount()); uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree()); uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP)); @@ -225,7 +216,6 @@ break; case SendTagConstant.CHARGING_HANDSHAKE: ChargingHandshakeMessage chargingHandshakeMessage = message.getChargingHandshakeMessage(); log.info("充电握手-业务消息处理:{}",chargingHandshakeMessage); // 持久化消息 ChargingHandshake chargingHandshake = new ChargingHandshake(); BeanUtils.copyProperties(chargingHandshakeMessage,chargingHandshake); @@ -233,7 +223,6 @@ break; case SendTagConstant.PARAMETER_SETTING: ParameterSettingMessage parameterSettingMessage = message.getParameterSettingMessage(); log.info("参数配置-业务消息处理:{}",parameterSettingMessage); // 持久化消息 // ParameterSetting parameterSetting = new ParameterSetting(); // BeanUtils.copyProperties(parameterSettingMessage,parameterSetting); @@ -241,7 +230,6 @@ break; case SendTagConstant.BMS_ABORT: BmsAbortMessage bmsAbortMessage = message.getBmsAbortMessage(); log.info("充电阶段BMS中止-业务消息处理:{}",bmsAbortMessage); // 持久化消息 BmsAbort bmsAbort = new BmsAbort(); BeanUtils.copyProperties(bmsAbortMessage,bmsAbort); @@ -251,7 +239,6 @@ break; case SendTagConstant.MOTOR_ABORT: MotorAbortMessage motorAbortMessage = message.getMotorAbortMessage(); log.info("充电阶段充电机中止-业务消息处理:{}",motorAbortMessage); // 持久化消息 MotorAbort motorAbort = new MotorAbort(); BeanUtils.copyProperties(motorAbortMessage,motorAbort); @@ -261,7 +248,6 @@ break; case SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION: BmsDemandAndChargerExportationMessage bmsDemandAndChargerExportationMessage = message.getBmsDemandAndChargerExportationMessage(); log.info("充电过程BMS需求、充电机输出-业务消息处理:{}",bmsDemandAndChargerExportationMessage); String transaction_serial_number1 = bmsDemandAndChargerExportationMessage.getTransaction_serial_number(); Object o1 = redisTemplate.opsForValue().get("bms_demand_and_charger_exportation:" + transaction_serial_number1); if(null != o1){ @@ -286,7 +272,6 @@ break; case SendTagConstant.BMS_INFORMATION: BmsInformationMessage bmsInformationMessage = message.getBmsInformationMessage(); log.info("充电过程BMS信息-业务消息处理:{}",bmsInformationMessage); String transaction_serial_number2 = bmsInformationMessage.getTransaction_serial_number(); Object o2 = redisTemplate.opsForValue().get("bms_information:" + transaction_serial_number2); if(null != o2){ @@ -304,7 +289,6 @@ break; case SendTagConstant.CHARGING_PILE_STARTS_CHARGING: ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = message.getChargingPileStartsChargingMessage(); log.info("充电桩主动申请启动充电-业务消息处理:{}",chargingPileStartsChargingMessage); // 持久化消息 ChargingPileStartsCharging chargingPileStartsCharging = new ChargingPileStartsCharging(); BeanUtils.copyProperties(chargingPileStartsChargingMessage,chargingPileStartsCharging); @@ -312,7 +296,6 @@ break; case SendTagConstant.PLATFORM_START_CHARGING_REPLY: PlatformStartChargingReplyMessage platformStartChargingReplyMessage = message.getPlatformStartChargingReplyMessage(); log.info("远程启机命令回复-业务消息处理:{}",platformStartChargingReplyMessage); // 持久化消息 PlatformStartChargingReply platformStartChargingReply = new PlatformStartChargingReply(); BeanUtils.copyProperties(platformStartChargingReplyMessage,platformStartChargingReply); @@ -325,7 +308,6 @@ break; case SendTagConstant.PLATFORM_STOP_CHARGING_REPLY: PlatformStopChargingReplyMessage platformStopChargingReplyMessage = message.getPlatformStopChargingReplyMessage(); log.info("远程停机命令回复-业务消息处理:{}",platformStopChargingReplyMessage); // 持久化消息 PlatformStopChargingReply platformStopChargingReply = new PlatformStopChargingReply(); BeanUtils.copyProperties(platformStopChargingReplyMessage,platformStopChargingReply); @@ -337,7 +319,6 @@ break; case SendTagConstant.TRANSACTION_RECORD: TransactionRecordMessage transactionRecordMessage = message.getTransactionRecordMessage(); log.info("交易记录-业务消息处理:{}",transactionRecordMessage); transactionRecordMessage.setResult(JSONObject.toJSONString(transactionRecordMessage)); // 持久化消息 TransactionRecord transactionRecord = new TransactionRecord(); @@ -368,7 +349,6 @@ break; case SendTagConstant.UPDATE_BALANCE_REPLY: UpdateBalanceReplyMessage updateBalanceReplyMessage = message.getUpdateBalanceReplyMessage(); log.info("余额更新应答-业务消息处理:{}",updateBalanceReplyMessage); // 持久化消息 UpdateBalanceReply updateBalanceReply = new UpdateBalanceReply(); BeanUtils.copyProperties(updateBalanceReplyMessage,updateBalanceReply); @@ -376,7 +356,6 @@ break; case SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY: SynchronizeOfflineCardReplyMessage synchronizeOfflineCardReplyMessage = message.getSynchronizeOfflineCardReplyMessage(); log.info("卡数据同步应答-业务消息处理:{}",synchronizeOfflineCardReplyMessage); // 持久化消息 SynchronizeOfflineCardReply synchronizeOfflineCardReply = new SynchronizeOfflineCardReply(); BeanUtils.copyProperties(synchronizeOfflineCardReplyMessage,synchronizeOfflineCardReply); @@ -384,7 +363,6 @@ break; case SendTagConstant.CLEAR_OFFLINE_CARD_REPLY: ClearOfflineCardReplyMessage clearOfflineCardReplyMessage = message.getClearOfflineCardReplyMessage(); log.info("离线卡数据清除应答-业务消息处理:{}",clearOfflineCardReplyMessage); // 持久化消息 ClearOfflineCardReply clearOfflineCardReply = new ClearOfflineCardReply(); BeanUtils.copyProperties(clearOfflineCardReplyMessage,clearOfflineCardReply); @@ -392,7 +370,6 @@ break; case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY: WorkingParameterSettingReplyMessage workingParameterSettingReplyMessage = message.getWorkingParameterSettingReplyMessage(); log.info("充电桩工作参数设置应答-业务消息处理:{}",workingParameterSettingReplyMessage); // 持久化消息 WorkingParameterSettingReply workingParameterSettingReply = new WorkingParameterSettingReply(); BeanUtils.copyProperties(workingParameterSettingReplyMessage,workingParameterSettingReply); @@ -400,7 +377,6 @@ break; case SendTagConstant.TIMING_SETTING: TimingSettingMessage timingSettingMessage = message.getTimingSettingMessage(); log.info("对时设置-业务消息处理:{}",timingSettingMessage); // 持久化消息 // TimingSetting timingSetting = new TimingSetting(); // BeanUtils.copyProperties(timingSettingMessage,timingSetting); @@ -408,7 +384,6 @@ break; case SendTagConstant.SETUP_BILLING_MODEL_REPLY: SetupBillingModelReplyMessage setupBillingModelReplyMessage = message.getSetupBillingModelReplyMessage(); log.info("计费模型应答-业务消息处理:{}",setupBillingModelReplyMessage); // 持久化消息 SetupBillingModelReply setupBillingModelReply = new SetupBillingModelReply(); BeanUtils.copyProperties(setupBillingModelReplyMessage,setupBillingModelReply); @@ -416,7 +391,6 @@ break; case SendTagConstant.GROUND_LOCK_REAL_TIME_DATA: GroundLockRealTimeDataMessage groundLockRealTimeDataMessage = message.getGroundLockRealTimeDataMessage(); log.info("地锁数据上送(充电桩上送)-业务消息处理:{}",groundLockRealTimeDataMessage); // 持久化消息 GroundLockRealTimeData groundLockRealTimeData = new GroundLockRealTimeData(); BeanUtils.copyProperties(groundLockRealTimeDataMessage,groundLockRealTimeData); @@ -424,7 +398,6 @@ break; case SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA: ChargingPileReturnsGroundLockDataMessage chargingPileReturnsGroundLockDataMessage = message.getChargingPileReturnsGroundLockDataMessage(); log.info("充电桩返回数据(上行)-业务消息处理:{}",chargingPileReturnsGroundLockDataMessage); // 持久化消息 ChargingPileReturnsGroundLockData chargingPileReturnsGroundLockData = new ChargingPileReturnsGroundLockData(); BeanUtils.copyProperties(chargingPileReturnsGroundLockDataMessage,chargingPileReturnsGroundLockData); @@ -432,7 +405,6 @@ break; case SendTagConstant.PLATFORM_RESTART_REPLY: PlatformRestartReplyMessage platformRestartReplyMessage = message.getPlatformRestartReplyMessage(); log.info("远程重启应答-业务消息处理:{}",platformRestartReplyMessage); // 持久化消息 PlatformRestartReply platformRestartReply = new PlatformRestartReply(); BeanUtils.copyProperties(platformRestartReplyMessage,platformRestartReply); @@ -440,14 +412,12 @@ break; case SendTagConstant.QR_CODE_DELIVERY_REPLY: QrCodeDeliveryReplyMessage qrCodeDeliveryReplyMessage = message.getQrCodeDeliveryReplyMessage(); log.info("二维码下发应答-业务消息处理:{}",qrCodeDeliveryReplyMessage); QrCodeDeliveryReply qrCodeDeliveryReply = new QrCodeDeliveryReply(); BeanUtils.copyProperties(qrCodeDeliveryReplyMessage,qrCodeDeliveryReply); qrCodeDeliveryReplyService.create(qrCodeDeliveryReply); break; case SendTagConstant.SECURITY_DETECTION: SecurityDetectionMessage securityDetectionMessage = message.getSecurityDetectionMessage(); log.info("安全监测-业务消息处理:{}",securityDetectionMessage); SecurityDetection securityDetection = new SecurityDetection(); BeanUtils.copyProperties(securityDetectionMessage,securityDetection); securityDetectionService.create(securityDetection); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -222,55 +222,36 @@ @PostMapping(value = "/pay/order/list") @ApiOperation(value = "列表", tags = {"管理后台-支付订单-订单信息"}) public R<PageInfo<PayOrderDto>> payOrderList(@RequestBody PayOrderQueryDto payOrderQueryDto) { Integer pageCurr = payOrderQueryDto.getPageCurr(); Integer pageSize = payOrderQueryDto.getPageSize(); payOrderQueryDto.setPageCurr(1); payOrderQueryDto.setPageSize(10000999); PageInfo<PayOrderDto> data = chargingOrderService.payOrderQuery(payOrderQueryDto).getData(); List<PayOrderDto> res = new ArrayList<>(); // 查询当前登陆人按钮权限 SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData(); Integer roleType = sysUser.getRoleType(); Long userId = tokenService.getLoginUser().getUserid(); //如果没传siteId,获取当前登陆人所有的siteIds List<Integer> siteIds = new ArrayList<>(); if (userId != null){ List<GetSiteListDTO> data2 = siteClient.getSiteListByUserId(userId).getData(); for (GetSiteListDTO datum : data2) { siteIds.add(datum.getId()); } } if (siteIds.isEmpty()){ siteIds.add(-1); } List<TChargingOrder> list = chargingOrderService.list(); List<TParkingRecord> parkingRecord = parkingLotClient.getSiteIdAll().getData(); for (PayOrderDto record : data.getRecords()) { if (record.getType() == 1){ TChargingOrder chargingOrder = list.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null); if (chargingOrder!=null){ record.setSiteId(chargingOrder.getSiteId()); } } if (record.getType()==4){ TParkingRecord tParkingRecord = parkingRecord.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null); if (tParkingRecord!=null){ record.setSiteId(tParkingRecord.getSiteId()); } } if (roleType==1||(record.getType()!=1&&record.getType()!=4)){ res.add(record); continue; } if (roleType==2 && (record.getType()==1||record.getType()==4) && siteIds.contains(record.getSiteId())){ res.add(record); } return chargingOrderService.payOrderQuery(payOrderQueryDto); } List<PayOrderDto> res1 = testing5(res.size(), pageCurr, pageSize, res); data.setTotal(res.size()); data.setRecords(res1); return R.ok(data); // List<TChargingOrder> list = chargingOrderService.list(); // List<TParkingRecord> parkingRecord = parkingLotClient.getSiteIdAll().getData(); // for (PayOrderDto record : data.getRecords()) { // if (record.getType() == 1){ // TChargingOrder chargingOrder = list.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null); // if (chargingOrder!=null){ // record.setSiteId(chargingOrder.getSiteId()); // } // } // if (record.getType()==4){ // TParkingRecord tParkingRecord = parkingRecord.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null); // if (tParkingRecord!=null){ // record.setSiteId(tParkingRecord.getSiteId()); // } // } // if (roleType==1||(record.getType()!=1&&record.getType()!=4)){ // res.add(record); // continue; // } // if (roleType==2 && (record.getType()==1||record.getType()==4) && siteIds.contains(record.getSiteId())){ // res.add(record); // } // // } // List<PayOrderDto> res1 = testing5(res.size(), pageCurr, pageSize, res); // data.setTotal(res.size()); // data.setRecords(res1); // return R.ok(data); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -169,4 +169,11 @@ * @return */ List<TChargingOrder> findChargingOrder(); /** * 获取已结束的数据 * @return */ List<TChargingOrder> findEndChargingOrder(); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -128,8 +128,12 @@ * @return */ AjaxResult stopCharging(String id); void editUserTag(TChargingOrder chargingOrder); void referralReward(TChargingOrder chargingOrder); /** * 停止充电应答结果处理 * @param platformStopChargingReply @@ -349,4 +353,10 @@ * @return */ List<TChargingOrder> findChargingOrder(); /** * 获取已结束的数据 * @return */ List<TChargingOrder> findEndChargingOrder(); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -583,6 +583,8 @@ AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder(); BeanUtils.copyProperties(tAccountingStrategyDetail, accountingStrategyDetailOrder); accountingStrategyDetailOrder.setChargingOrderId(chargingOrder.getId()); accountingStrategyDetailOrder.setCreateTime(LocalDateTime.now()); accountingStrategyDetailOrder.setDelFlag(false); list1.add(accountingStrategyDetailOrder); } accountingStrategyDetailOrderService.saveBatch(list1); @@ -939,7 +941,7 @@ chargingGun.setStatus(4); chargingGunClient.updateChargingGunById(chargingGun); //推送状态给三方平台 tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus()); tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 4); } redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS); this.updateById(order); @@ -1602,42 +1604,7 @@ } } // List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery() // .eq(TChargingOrderRefund::getRefundStatus,2).list(); Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto, startTime1, startTime2, endTime1, endTime2); // for (ChargingOrderVO chargingOrderVO : list1) { // if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){ // continue; // } // List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.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); // electronicMoney = electronicMoney.add(electronic_reduce); // total = total.add(chargingCapacity); // if (!chargingOrderVO.getOrderSource().equals(2)) { // serviceMoney = serviceMoney.add(service_reduce); // paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce); // }else{ // serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8"))); // paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8"))); // } // if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){ // LocalDateTime startTime = chargingOrderVO.getStartTime(); // LocalDateTime endTime = chargingOrderVO.getEndTime(); // // 计算时间差 单位秒 // 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()); //// } // } if (null != map) { tCharingOrderVO.setTotal(map.get("total") == null ? BigDecimal.ZERO : (BigDecimal) map.get("total")); tCharingOrderVO.setTime(map.get("time") == null ? 0L : (Long) map.get("time")); @@ -2662,9 +2629,10 @@ chargingGun.setStatus(2); chargingGun.setChargingPower(BigDecimal.ZERO); chargingGunClient.updateChargingGunById(chargingGun); chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); //推送状态给三方平台 if (2 == chargingOrder.getOrderSource()) { tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus()); tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 2); } //添加积分 @@ -4104,6 +4072,8 @@ AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder(); BeanUtils.copyProperties(tAccountingStrategyDetail, accountingStrategyDetailOrder); accountingStrategyDetailOrder.setChargingOrderId(chargingOrder.getId()); accountingStrategyDetailOrder.setCreateTime(LocalDateTime.now()); accountingStrategyDetailOrder.setDelFlag(false); list1.add(accountingStrategyDetailOrder); } accountingStrategyDetailOrderService.saveBatch(list1); @@ -4363,4 +4333,13 @@ public List<TChargingOrder> findChargingOrder() { return this.baseMapper.findChargingOrder(); } /** * 获取已结束的数据 * @return */ @Override public List<TChargingOrder> findEndChargingOrder() { return this.baseMapper.findEndChargingOrder(); } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -4,24 +4,44 @@ import com.alibaba.fastjson2.util.UUIDUtils; import com.alibaba.nacos.common.utils.UuidUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient; import com.ruoyi.account.api.feignClient.AppUserVipDetailClient; import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.account.api.model.TAppUserIntegralChange; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.integration.api.feignClient.ChargingMessageClient; import com.ruoyi.integration.api.feignClient.TCECClient; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.TransactionRecord; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.api.vo.ChargingOrderVo; import com.ruoyi.order.api.model.TChargingBill; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TChargingOrderRefund; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.vo.AccountingStrategyDetailOrderVo; import com.ruoyi.order.api.vo.TransactionRecordMessageVO; import com.ruoyi.order.service.TChargingBillService; import com.ruoyi.order.service.TChargingOrderRefundService; import com.ruoyi.order.service.TChargingOrderService; import com.ruoyi.order.service.*; import com.ruoyi.order.util.mongodb.service.TransactionRecordService; import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TIntegralRule; import com.ruoyi.other.api.domain.TVip; import com.ruoyi.other.api.feignClient.IntegralRuleClient; import com.ruoyi.other.api.feignClient.VipClient; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.H5AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; import com.ruoyi.payment.api.model.RefundReq; import com.ruoyi.payment.api.model.RefundResp; import com.ruoyi.payment.api.model.WxPaymentRefundModel; import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.core.util.UuidUtil; import org.apache.poi.util.StringUtil; @@ -33,14 +53,16 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; /** @@ -71,6 +93,42 @@ private ChargingMessageClient chargingMessageClient; private Integer port = null; @Resource private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService; @Resource private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; @Resource private AppCouponClient appCouponClient; @Resource private TCECClient tcecClient; @Resource private VipClient vipClient; @Resource private ChargingGunClient chargingGunClient; @Resource private IntegralRuleClient integralRuleClient; @Resource private AppUserClient appUserClient; @Resource private AppUserIntegralChangeClient appUserIntegralChangeClient; @Resource private WxPaymentClient wxPaymentClient; @Resource private AliPaymentClient aliPaymentClient; @Resource private H5AliPaymentClient h5AliPaymentClient; @Resource private ITChargingOrderSummaryDataService chargingOrderSummaryDataService; //十分钟循环执行的定时任务 @@ -132,6 +190,8 @@ BeanUtils.copyProperties(one, vo); R r = chargingOrderService.endChargeBillingCharge(vo); log.info("定时任务执行,停止中的订单处理结果:{}", JSON.toJSONString(r)); }else{ // endOrder(order); } } //处理状态为充电中,但硬件已完成的订单 @@ -155,6 +215,19 @@ log.info("定时任务执行,充电中的订单处理结果:{}", JSON.toJSONString(r)); } } //处理还未退款,但是订单状态已结束的数据 List<TChargingOrder> endChargingOrder = chargingOrderService.findEndChargingOrder(); log.info("定时任务执行,查询到已结束未退款的订单数量:{}", endChargingOrder.size()); for (TChargingOrder order : endChargingOrder) { if(-1 == order.getStatus()){ order.setStatus(2); } if(5 == order.getStatus()){ order.setStatus(4); } chargingOrderService.updateById(order); } } } @@ -285,4 +358,406 @@ port = event.getWebServer().getPort(); System.out.println("端口号:" + port); } public void endOrder(TChargingOrder order){ List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode()); if(!dataList.isEmpty()){ //获取当前订单的计费规则,然后分段计算总的度数和充电金额 List<AccountingStrategyDetailOrder> detailOrders = accountingStrategyDetailOrderService.list(new LambdaQueryWrapper<AccountingStrategyDetailOrder>() .eq(AccountingStrategyDetailOrder::getChargingOrderId, order.getId()).last(" order by start_time")); detailOrders.get(detailOrders.size() - 1).setEndTime("23:59"); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); //开始解析每个时段的充电度数 BigDecimal decimal = BigDecimal.ZERO; //如果使用优惠券需要判断优惠券是否满足使用条件 //退款金额=优惠券金额+剩余充电金额 BigDecimal periodElectricPrice_total = BigDecimal.ZERO; BigDecimal periodServicePrice_total = BigDecimal.ZERO; BigDecimal vipDiscountAmount_total = BigDecimal.ZERO; BigDecimal serviceCharge_total = BigDecimal.ZERO; BigDecimal total = BigDecimal.ZERO; //判断实时数据是否跨天 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); Date end_time = dataList.get(0).getCreate_time(); String end = sdf2.format(end_time); Date start_time = dataList.get(dataList.size() - 1).getCreate_time(); String start = sdf2.format(start_time); if(!end.equals(start)){ List<AccountingStrategyDetailOrder> list = detailOrders.stream().map(s->{ AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder(); BeanUtils.copyProperties(s, accountingStrategyDetailOrder); return accountingStrategyDetailOrder; }).collect(Collectors.toList()); for (AccountingStrategyDetailOrder detailOrder : detailOrders) { detailOrder.setStartTime(start + " " + detailOrder.getStartTime()); detailOrder.setEndTime(start + " " + detailOrder.getEndTime()); } for (AccountingStrategyDetailOrder detailOrder : list) { detailOrder.setStartTime(end + " " + detailOrder.getStartTime()); detailOrder.setEndTime(end + " " + detailOrder.getEndTime()); } detailOrders.addAll(list); }else{ for (AccountingStrategyDetailOrder detailOrder : detailOrders) { detailOrder.setStartTime(start + " " + detailOrder.getStartTime()); detailOrder.setEndTime(start + " " + detailOrder.getEndTime()); } } SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmm"); List<TChargingOrderAccountingStrategy> list = new ArrayList<>(); for (AccountingStrategyDetailOrder detailOrder : detailOrders) { long startTime = Long.parseLong(detailOrder.getStartTime().replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "")); long endTime = Long.parseLong(detailOrder.getEndTime().replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "")); List<UploadRealTimeMonitoringData> collect = dataList.stream().filter(s -> Long.parseLong(sdf1.format(s.getCreate_time())) > startTime && Long.parseLong(sdf1.format(s.getCreate_time())) <= endTime).collect(Collectors.toList()); if(!collect.isEmpty()){ //升序排序 collect.sort(new Comparator<UploadRealTimeMonitoringData>(){ @Override public int compare(UploadRealTimeMonitoringData o1, UploadRealTimeMonitoringData o2) { return o1.getCharging_degree().compareTo(o2.getCharging_degree()); } }); UploadRealTimeMonitoringData uploadRealTimeMonitoringData = collect.get(collect.size() - 1); BigDecimal chargingDegree = uploadRealTimeMonitoringData.getCharging_degree(); BigDecimal subtract = chargingDegree.subtract(decimal); decimal = chargingDegree; if(subtract.compareTo(BigDecimal.ZERO) > 0){ //组装充电明细数据 TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy(); chargingOrderAccountingStrategy.setChargingOrderId(order.getId()); chargingOrderAccountingStrategy.setAccountingStrategyDetailId(detailOrder.getId()); chargingOrderAccountingStrategy.setType(detailOrder.getType()); chargingOrderAccountingStrategy.setElectrovalence(detailOrder.getElectrovalence()); chargingOrderAccountingStrategy.setServiceCharge(detailOrder.getServiceCharge()); chargingOrderAccountingStrategy.setCostServiceCharge(detailOrder.getCostServiceCharge()); chargingOrderAccountingStrategy.setChargingCapacity(subtract); chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); if (list.size() == 0) { String time = sdf.format(collect.get(0).getCreate_time()); chargingOrderAccountingStrategy.setStartTime(time); } else { chargingOrderAccountingStrategy.setStartTime(detailOrder.getStartTime().split(" ")[1]); } chargingOrderAccountingStrategy.setEndTime(detailOrder.getEndTime().split(" ")[1]); //已充电总度数 BigDecimal electrovalenc = detailOrder.getElectrovalence().multiply(subtract); BigDecimal originalServicePrice = detailOrder.getServiceCharge().multiply(subtract); BigDecimal serviceCharge = originalServicePrice; BigDecimal vipDiscountAmount = BigDecimal.ZERO; //计算优惠金额 if (null != order.getVipDiscount()) { //0.58折 vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(order.getVipDiscount())); serviceCharge = serviceCharge.multiply(order.getVipDiscount()); } chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN)); chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN)); chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN)); chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN)); chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); list.add(chargingOrderAccountingStrategy); //电费 periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc); //服务费(含折扣) serviceCharge_total = serviceCharge_total.add(serviceCharge); //服务费(不含折扣) periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); //会员折扣优惠金额 vipDiscountAmount_total = vipDiscountAmount_total.add(vipDiscountAmount); //原始总金额(不含折扣) total = total.add(electrovalenc.add(originalServicePrice)); } } } list.get(list.size() - 1).setEndTime(sdf.format(dataList.get(0).getCreate_time())); chargingOrderAccountingStrategyService.saveBatch(list); BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue()); //原金额 BigDecimal rechargeAmount = order.getRechargeAmount(); //支付金额 BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total); //退款金额=充值金额-实际支付金额 BigDecimal refundAmount = rechargeAmount.subtract(payAmount); UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(order.getCode()); if (null != uploadRealTimeMonitoringData && null == order.getEndMode()) { Integer soc = uploadRealTimeMonitoringData.getSoc(); if (soc >= 98) { order.setEndMode(2); } else if (null != order.getResidualAmount() && order.getResidualAmount().compareTo(new BigDecimal(1)) <= 0) { order.setEndMode(3); } else { order.setEndMode(1); } } order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN)); order.setStartTime(list.get(0).getCreateTime()); order.setEndTime(list.get(list.size() - 1).getCreateTime()); order.setStatus(5); order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN)); order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN)); order.setChargingCapacity(list.get(list.size() - 1).getChargingCapacity()); order.setElectricity(list.get(list.size() - 1).getChargingCapacity()); order.setVipDiscountAmount(vipDiscountAmount_total); if (vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0) { order.setVipDiscount(BigDecimal.valueOf(1)); } //计算优惠券 BigDecimal couponDiscount = BigDecimal.ZERO; if (null != order.getAppCouponId()) { //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。 TAppCoupon appCoupon = appCouponClient.getAppCouponById(order.getAppCouponId()).getData(); String couponJson = appCoupon.getCouponJson(); TCoupon tCoupon = com.alibaba.fastjson2.JSON.parseObject(couponJson, TCoupon.class); Integer preferentialMode = tCoupon.getPreferentialMode(); if (1 == preferentialMode) { //满减 if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) { BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount(); //如果优惠金额大于服务费金额,以服务费作为最大限制 if (serviceCharge_total.compareTo(couponDiscountAmount) < 0) { couponDiscount = serviceCharge_total; serviceCharge_total = BigDecimal.ZERO; } else { couponDiscount = couponDiscountAmount; } appCoupon.setStatus(2); appCouponClient.updateAppCoupon(appCoupon); } else { appCouponClient.refund(order.getAppCouponId().toString()); order.setAppCouponId(null); order.setCouponDiscountAmount(BigDecimal.ZERO); } } if (2 == preferentialMode) { //抵扣 if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) { //折扣金额 BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10)); divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide; //如果优惠金额大于服务费金额,以服务费作为最大限制 if (serviceCharge_total.compareTo(divide) < 0) { couponDiscount = serviceCharge_total; serviceCharge_total = BigDecimal.ZERO; } else { couponDiscount = divide; } appCoupon.setStatus(2); appCouponClient.updateAppCoupon(appCoupon); } else { order.setAppCouponId(null); order.setCouponDiscountAmount(BigDecimal.ZERO); appCouponClient.refund(order.getAppCouponId().toString()); } } } //优惠券优惠金额 couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN); //退款金额+优惠券 refundAmount = refundAmount.add(couponDiscount); //实际支付金额-优惠券 payAmount = payAmount.subtract(couponDiscount); if (serviceCharge_total.compareTo(BigDecimal.ZERO) > 0) { serviceCharge_total = serviceCharge_total.subtract(couponDiscount); } order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN)); order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN)); order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN)); order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN)); order.setRefundStatus(1); chargingOrderService.updateById(order); order = chargingOrderService.getById(order.getId()); //推送三方平台 if (2 == order.getOrderSource()) { TChargingOrder finalChargingOrder = order; 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(); } //开始将优惠券优惠的金额添加到明细中 BigDecimal couponDiscountAmount = order.getCouponDiscountAmount(); if (null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0) { List<TChargingOrderAccountingStrategy> list1 = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId())); BigDecimal reduce = list1.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add); for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list1) { BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice(); BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN))); periodServicePrice = periodServicePrice.subtract(multiply); chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN)); chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN)); } chargingOrderAccountingStrategyService.updateBatchById(list1); } // 将枪状态重置为空闲 TChargingGun chargingGun = new TChargingGun(); chargingGun.setId(order.getChargingGunId()); chargingGun.setStatus(2); chargingGun.setChargingPower(BigDecimal.ZERO); chargingGunClient.updateChargingGunById(chargingGun); chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData(); //推送状态给三方平台 if (2 == order.getOrderSource()) { tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 2); } //添加积分 if (1 == order.getOrderSource()) { TIntegralRule integralRule = integralRuleClient.getSet().getData(); if (null != integralRule) { TAppUser appUser = appUserClient.getUserById(order.getAppUserId()).getData(); Integer num1 = com.alibaba.fastjson2.JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1"); Integer integral = order.getServiceCharge().intValue() * num1; if (null != appUser.getVipId()) { TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); Integer doubleIntegration = vip.getDoubleIntegration(); //双倍积分 if (1 == doubleIntegration) { integral *= 2; } } if (integral > 0) { TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); appUserIntegralChange.setAppUserId(appUser.getId()); appUserIntegralChange.setChangeType(2); appUserIntegralChange.setHistoricalIntegral(appUser.getPoints()); appUser.setPoints(appUser.getPoints() + integral); appUserIntegralChange.setCurrentIntegral(appUser.getPoints()); appUserIntegralChange.setCreateTime(LocalDateTime.now()); appUserIntegralChange.setOrderCode(order.getCode()); appUserIntegralChange.setExtension(order.getId().toString()); appUserClient.updateAppUser(appUser); appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); } } //计算用户标签 chargingOrderService.editUserTag(order); //用户推荐奖励 chargingOrderService.referralReward(order); //开始构建退款费用 refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN); if (refundAmount.compareTo(BigDecimal.ZERO) > 0) { Integer rechargePaymentType = order.getRechargePaymentType(); //构建退款明细 TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); chargingOrderRefund.setChargingOrderId(order.getId()); SimpleDateFormat sdfaa = new SimpleDateFormat("yyyyMMddHHmmssSSS"); chargingOrderRefund.setRefundCode("CDF" + sdfaa.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); chargingOrderRefund.setRefundAmount(refundAmount); chargingOrderRefund.setRefundStatus(1); chargingOrderRefund.setPayType(rechargePaymentType); chargingOrderRefund.setRefundStatus(1); chargingOrderRefund.setCode(order.getCode()); chargingOrderRefund.setRefundTitle("充电完成退款"); chargingOrderRefund.setRefundContent("充电完成退款"); chargingOrderRefund.setRefundReason("充电完成退款"); chargingOrderRefund.setRefundRemark("实际充电消费金额:" + order.getPaymentAmount()); chargingOrderRefund.setRefundTotalAmount(refundAmount); chargingOrderRefund.setPayAmount(rechargeAmount); if (1 == rechargePaymentType) { WxPaymentRefundModel model = new WxPaymentRefundModel(); model.setOut_trade_no(order.getCode()); model.setOut_refund_no(chargingOrderRefund.getRefundCode()); model.setReason("充电完成退款"); model.setNotify_url("/payment/wx/refund/notify"); WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue()); amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); amount.setCurrency("CNY"); model.setAmount(amount); R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model); if (200 == result.getCode()) { chargingOrderRefundService.save(chargingOrderRefund); //手续费 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); chargingOrderRefundService.updateById(chargingOrderRefund); } } if (2 == rechargePaymentType) { RefundReq dto = new RefundReq(); dto.setOutTradeNo(order.getCode()); dto.setOutRequestNo(chargingOrderRefund.getRefundCode()); dto.setRefundAmount(refundAmount.toString()); dto.setRefundReason("充电完成退款"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if (null != resp) { chargingOrderRefundService.save(chargingOrderRefund); chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); } } if (3 == rechargePaymentType) { RefundReq dto = new RefundReq(); dto.setOutTradeNo(order.getRechargeSerialNumber()); dto.setOutRequestNo(chargingOrderRefund.getRefundCode()); dto.setRefundAmount(refundAmount.toString()); dto.setRefundReason("充电完成退款"); RefundResp resp = h5AliPaymentClient.refund(dto).getData(); if (null != resp && "10000".equals(resp.getCode())) { chargingOrderRefundService.save(chargingOrderRefund); chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); } } } } //添加汇总统计数据 List<TChargingOrderAccountingStrategy> list4 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>().eq("charging_order_id", order.getId())); 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); BigDecimal serviceMoney = BigDecimal.ZERO; BigDecimal paymentMoney = BigDecimal.ZERO; long time = 0; if (!order.getOrderSource().equals(2)) { serviceMoney = serviceMoney.add(service_reduce); paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce); } else { serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8"))); paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8"))); } if (order.getStartTime() != null && order.getEndTime() != null) { time = ChronoUnit.SECONDS.between(order.getStartTime(), order.getEndTime()); } TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData(); summaryData.setChargingOrderId(order.getId()); summaryData.setChargingCapacity(chargingCapacity); summaryData.setChargingDuration(time); summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN)); summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN)); summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN)); chargingOrderSummaryDataService.save(summaryData); //推送监管平台订单状态和订单详情 ChargingOrderVo chargingOrderVo = new ChargingOrderVo(); BeanUtils.copyProperties(order, chargingOrderVo); chargingMessageClient.pushOrderInfo(chargingOrderVo); chargingMessageClient.pushOrderStatus(chargingOrderVo); } } } ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -4,57 +4,62 @@ <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.ruoyi.order.api.model.TChargingOrder"> <id column="id" property="id" /> <result column="code" property="code" /> <result column="order_type" property="orderType" /> <result column="order_classification" property="orderClassification" /> <result column="app_user_id" property="appUserId" /> <result column="app_user_car_id" property="appUserCarId" /> <result column="site_id" property="siteId" /> <result column="parking_lot_id" property="parkingLotId" /> <result column="charging_pile_id" property="chargingPileId" /> <result column="charging_gun_id" property="chargingGunId" /> <id column="id" property="id"/> <result column="code" property="code"/> <result column="order_type" property="orderType"/> <result column="order_classification" property="orderClassification"/> <result column="app_user_id" property="appUserId"/> <result column="app_user_car_id" property="appUserCarId"/> <result column="site_id" property="siteId"/> <result column="parking_lot_id" property="parkingLotId"/> <result column="charging_pile_id" property="chargingPileId"/> <result column="charging_gun_id" property="chargingGunId"/> <result column="charging_capacity" property="chargingCapacity"/> <result column="charging_power" property="chargingPower"/> <result column="start_time" property="startTime" /> <result column="end_time" property="endTime" /> <result column="status" property="status" /> <result column="start_time" property="startTime"/> <result column="end_time" property="endTime"/> <result column="status" property="status"/> <result column="end_mode" property="endMode"/> <result column="recharge_amount" property="rechargeAmount" /> <result column="recharge_payment_type" property="rechargePaymentType" /> <result column="recharge_payment_status" property="rechargePaymentStatus" /> <result column="recharge_serial_number" property="rechargeSerialNumber" /> <result column="residual_amount" property="residualAmount" /> <result column="order_amount" property="orderAmount" /> <result column="app_coupon_id" property="appCouponId" /> <result column="coupon_discount_amount" property="couponDiscountAmount" /> <result column="vip_discount" property="vipDiscount" /> <result column="vip_discount_amount" property="vipDiscountAmount" /> <result column="payment_amount" property="paymentAmount" /> <result column="refund_code" property="refundCode" /> <result column="refund_amount" property="refundAmount" /> <result column="refund_status" property="refundStatus" /> <result column="refund_serial_number" property="refundSerialNumber" /> <result column="refund_time" property="refundTime" /> <result column="need_elec" property="needElec" /> <result column="create_time" property="createTime" /> <result column="del_flag" property="delFlag" /> <result column="total_electricity" property="totalElectricity" /> <result column="recharge_amount" property="rechargeAmount"/> <result column="recharge_payment_type" property="rechargePaymentType"/> <result column="recharge_payment_status" property="rechargePaymentStatus"/> <result column="recharge_serial_number" property="rechargeSerialNumber"/> <result column="residual_amount" property="residualAmount"/> <result column="order_amount" property="orderAmount"/> <result column="app_coupon_id" property="appCouponId"/> <result column="coupon_discount_amount" property="couponDiscountAmount"/> <result column="vip_discount" property="vipDiscount"/> <result column="vip_discount_amount" property="vipDiscountAmount"/> <result column="payment_amount" property="paymentAmount"/> <result column="refund_code" property="refundCode"/> <result column="refund_amount" property="refundAmount"/> <result column="refund_status" property="refundStatus"/> <result column="refund_serial_number" property="refundSerialNumber"/> <result column="refund_time" property="refundTime"/> <result column="need_elec" property="needElec"/> <result column="create_time" property="createTime"/> <result column="del_flag" property="delFlag"/> <result column="total_electricity" property="totalElectricity"/> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> id, code, order_type, order_classification, app_user_id, app_user_car_id,site_id, parking_lot_id, charging_pile_id, charging_gun_id, start_time, end_time, status, recharge_amount, recharge_payment_type, recharge_payment_status, recharge_serial_number, order_amount, app_coupon_id, coupon_discount_amount, vip_discount, vip_discount_amount, payment_amount, refund_code, refund_amount, refund_status, refund_serial_number, refund_time, create_time, del_flag,need_elec,total_electricity id, code, order_type, order_classification, app_user_id, app_user_car_id,site_id, parking_lot_id, charging_pile_id, charging_gun_id, start_time, end_time, status, recharge_amount, recharge_payment_type, recharge_payment_status, recharge_serial_number, order_amount, app_coupon_id, coupon_discount_amount, vip_discount, vip_discount_amount, payment_amount, refund_code, refund_amount, refund_status, refund_serial_number, refund_time, create_time, del_flag,need_elec,total_electricity </sql> <select id="getMyChargingOrderList" resultMap="BaseResultMap"> select * from t_charging_order where del_flag = 0 and app_user_id = #{appUserId} and recharge_payment_status = 2 <if test="1 == type"> and id not in (select order_id from t_order_evaluate where order_type = 1 and app_user_id = #{appUserId} and del_flag = 0) and id not in (select order_id from t_order_evaluate where order_type = 1 and app_user_id = #{appUserId} and del_flag = 0) </if> order by create_time desc <if test="null != pageCurr and null != pageSize"> @@ -62,7 +67,8 @@ </if> </select> <select id="getNoInvoicedOrder" resultMap="BaseResultMap"> select * from t_charging_order where del_flag = 0 and status = 5 and recharge_payment_status = 2 and payment_amount is not null and app_user_id = #{appUserId} select * from t_charging_order where del_flag = 0 and status = 5 and recharge_payment_status = 2 and payment_amount is not null and app_user_id = #{appUserId} <if test="null != month and '' != month"> and DATE_FORMAT(end_time, '%Y-%m') = #{month} </if> @@ -78,15 +84,15 @@ from t_charging_order t1 where t1.del_flag = 0 <if test="null != req.code and req.code!=''"> and t1.code LIKE CONCAT('%',#{req.code},'%') and t1.code LIKE CONCAT('%',#{req.code},'%') </if> <if test="null != req.userIds and req.userIds.size()>0" > <if test="null != req.userIds and req.userIds.size()>0"> and t1.app_user_id in <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> <if test="null != req.siteIds and req.siteIds.size()>0" > <if test="null != req.siteIds and req.siteIds.size()>0"> and t1.site_id in <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")"> #{item} @@ -126,7 +132,8 @@ order by t1.create_time desc </select> <select id="payOrderQuery" resultType="com.ruoyi.order.dto.PayOrderDto"> SELECT o.*,i.phone FROM (SELECT SELECT o.*,i.phone FROM ( SELECT a.id, a.`code`, 1 as type, @@ -145,7 +152,9 @@ charging_pile_order.t_charging_order a left join charging_pile_order.t_charging_order_refund b on (b.charging_order_id = a.id) where a.recharge_payment_status = 2 UNION ALL SELECT a.id, a.`code`, @@ -165,7 +174,9 @@ charging_pile_order.t_shopping_order a left join charging_pile_order.t_shopping_order_refund b on (b.shopping_order_id = a.id) where a.payment_status = 2 UNION ALL SELECT a.id, a.`code`, @@ -185,7 +196,9 @@ charging_pile_order.t_vip_order a left join charging_pile_order.t_vip_order_refund b on (a.id = b.vip_order_id) where a.payment_status = 2 UNION ALL SELECT id, `code`, @@ -202,105 +215,105 @@ 0 as del_flag, app_user_id FROM charging_pile_service.t_parking_record ) o LEFT JOIN `charging_pile_account`.`t_app_user` i on o.app_user_id = i.id <where> o.del_flag = 0 charging_pile_service.t_parking_record ) o LEFT JOIN `charging_pile_account`.`t_app_user` i on o.app_user_id = i.id <where> o.del_flag = 0 <if test="data.code != null and data.code != ''"> AND o.code LIKE CONCAT('%',#{data.code},'%') </if> <if test="data.phone != null and data.phone != ''"> AND i.phone LIKE CONCAT('%',#{data.phone},'%') </if> <if test="data.type != null"> AND o.type = #{data.type} </if> <if test="data.createTime1 != null"> AND o.create_time >= #{data.createTime1} </if> <if test="data.createTime2 != null"> AND o.create_time <= #{data.createTime2} </if> <if test="data.ids != null and data.ids.size() > 0"> AND o.id IN <foreach collection="data.ids" item="id" open="(" separator="," close=")"> #{id} </foreach> </if> <if test="data.isRefund == 1"> AND o.refund_status is not null </if> <if test="data.isRefund == 2"> AND o.refund_status is null </if> <if test="data.code != null and data.code != ''"> AND o.code LIKE CONCAT('%',#{data.code},'%') </if> <if test="data.phone != null and data.phone != ''"> AND i.phone LIKE CONCAT('%',#{data.phone},'%') </if> <if test="data.type != null"> AND o.type = #{data.type} </if> <if test="data.createTime1 != null"> AND o.create_time >= #{data.createTime1} </if> <if test="data.createTime2 != null"> AND o.create_time <= #{data.createTime2} </if> <if test="data.ids != null and data.ids.size() > 0"> AND o.id IN <foreach collection="data.ids" item="id" open="(" separator="," close=")"> #{id} </foreach> </if> <if test="data.isRefund == 1"> AND o.refund_status is not null </if> <if test="data.isRefund == 2"> AND o.refund_status is null </if> </where> </where> ORDER BY o.create_time desc </select> <select id="getRefundList" resultType="com.ruoyi.order.api.model.TChargingOrderRefund"> select * from ( SELECT re.id, re.`code`, re.refund_code, re.refund_title, re.refund_reason, re.refund_amount, re.refund_total_amount, re.refund_time, re.pay_type, re.pay_amount, re.refund_remark, co.recharge_serial_number as serail_number, co.payment_amount, co.create_time as pay_time, co.id as order_id, co.app_user_id as user_id, 1 as type re.id, re.`code`, re.refund_code, re.refund_title, re.refund_reason, re.refund_amount, re.refund_total_amount, re.refund_time, re.pay_type, re.pay_amount, re.refund_remark, co.recharge_serial_number as serail_number, co.payment_amount, co.create_time as pay_time, co.id as order_id, co.app_user_id as user_id, 1 as type FROM t_charging_order_refund re LEFT JOIN t_charging_order co ON re.charging_order_id = co.id LEFT JOIN t_charging_order co ON re.charging_order_id = co.id UNION ALL SELECT re.id, re.`code`, re.refund_code, re.refund_title, re.refund_reason, re.refund_amount, re.refund_total_amount, re.refund_time, re.pay_type, re.pay_amount, re.refund_remark, so.serial_number, so.payment_amount, so.create_time as pay_time, so.id as order_id, so.app_user_id as user_id, 2 as type re.id, re.`code`, re.refund_code, re.refund_title, re.refund_reason, re.refund_amount, re.refund_total_amount, re.refund_time, re.pay_type, re.pay_amount, re.refund_remark, so.serial_number, so.payment_amount, so.create_time as pay_time, so.id as order_id, so.app_user_id as user_id, 2 as type FROM t_shopping_order_refund re LEFT JOIN t_shopping_order so on re.shopping_order_id = so.id UNION ALL SELECT vr.id, vr.`code`, vr.refund_code, vr.refund_title, vr.refund_reason, vr.refund_amount, vr.refund_total_amount, vr.refund_time, vr.pay_type, vr.pay_amount, vr.refund_remark, vo.serial_number, vo.payment_amount, vo.create_time as pay_time, vo.id as order_id, vo.app_user_id as user_id, 3 as type vr.id, vr.`code`, vr.refund_code, vr.refund_title, vr.refund_reason, vr.refund_amount, vr.refund_total_amount, vr.refund_time, vr.pay_type, vr.pay_amount, vr.refund_remark, vo.serial_number, vo.payment_amount, vo.create_time as pay_time, vo.id as order_id, vo.app_user_id as user_id, 3 as type FROM t_vip_order_refund vr LEFT JOIN t_vip_order vo on vr.vip_order_id = vo.id ) o @@ -316,7 +329,7 @@ </select> <select id="chargingOrderGroup" resultType="com.ruoyi.common.core.dto.ChargingOrderGroup"> SELECT SUM(tc.charging_capacity) as charging_capacity,tc.site_id SELECT SUM(tc.charging_capacity) as charging_capacity,tc.site_id FROM t_charging_order tc left join `charging_pile_service`.`t_site` ts on tc.site_id = ts.id <where> @@ -339,12 +352,11 @@ GROUP BY site_id </select> <select id="charge" resultType="com.ruoyi.order.dto.SixChargingDto"> SELECT DATE_FORMAT( subquery.create_time, '%m' ) AS MONTH, SUM(electrovalence) AS electrovalence, SUM(electrovalence) AS electrovalence, SUM( CASE WHEN subquery.order_source = 0 THEN subquery.service_charge @@ -354,30 +366,32 @@ ) AS service_charge FROM ( SELECT a.create_time, b.period_electric_price as electrovalence, b.period_service_price as service_charge, a.order_source FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) <where> a.del_flag = 0 and a.recharge_payment_status = 2 and a.status = 5 <if test="sixBefore != null"> AND a.create_time >= #{sixBefore} </if> <if test="siteIds != null and siteIds.size() > 0"> AND a.site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> #{siteId} </foreach> </if> </where> ) AS subquery ( SELECT a.create_time, b.period_electric_price as electrovalence, b.period_service_price as service_charge, a.order_source FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) <where> a.del_flag = 0 and a.recharge_payment_status = 2 and a.status = 5 <if test="sixBefore != null"> AND a.create_time >= #{sixBefore} </if> <if test="siteIds != null and siteIds.size() > 0"> AND a.site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> #{siteId} </foreach> </if> </where> ) AS subquery GROUP BY DATE_FORMAT( subquery.create_time, '%m' ) DATE_FORMAT( subquery.create_time, '%m' ) </select> @@ -391,7 +405,9 @@ END), 2) AS paymentAmount FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) <where> a.del_flag = 0 and a.recharge_payment_status = 2 and a.status = 5 <if test="siteIds != null and siteIds.size() > 0"> @@ -409,7 +425,9 @@ </select> <select id="countAll" resultType="java.util.Map"> select sum(electrovalence) as electrovalence,sum(service_charge) as service_charge,ROUND(sum(electrovalence+service_charge) * 0.006, 2) as commission_amount,sum(sharing_amount) as sharing_amount select sum(electrovalence) as electrovalence,sum(service_charge) as service_charge,ROUND(sum(electrovalence+service_charge) * 0.006, 2) as commission_amount,sum(sharing_amount) as sharing_amount from t_charging_order where del_flag = 0 and recharge_payment_status = 2 and status = 5 <if test="siteIds != null and siteIds.size() > 0"> @@ -440,7 +458,8 @@ FROM t_charging_order_accounting_strategy t1 LEFT JOIN t_charging_order t2 on t1.charging_order_id = t2.id where t2.del_flag = 0 and t2.status = 5 and t2.recharge_payment_status = 2 and t2.create_time between #{start} and #{end} where t2.del_flag = 0 and t2.status = 5 and t2.recharge_payment_status = 2 and t2.create_time between #{start} and #{end} <if test="null != siteIds and siteIds.size() > 0"> and t2.site_id in <foreach collection="siteIds" separator="," open="(" close=")" item="item" index="index"> @@ -468,9 +487,11 @@ count(1) as orderCount FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) <where> a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE(a.create_time) = CURDATE() a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE(a.create_time) = CURDATE() and a.create_time between #{start} and #{end} <if test="null != siteIds and siteIds.size() > 0"> and a.site_id in @@ -480,9 +501,9 @@ </if> </where> GROUP BY time time ORDER BY time time </select> <select id="getWeekData" resultType="java.util.Map"> @@ -503,9 +524,12 @@ count(1) as orderCount FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) <where> a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and YEARWEEK(DATE_FORMAT(a.create_time, '%Y-%m-%d'), 1) = YEARWEEK(NOW(), 1) a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and YEARWEEK(DATE_FORMAT(a.create_time, '%Y-%m-%d'), 1) = YEARWEEK(NOW(), 1) and a.create_time between #{start} and #{end} <if test="null != siteIds and siteIds.size() > 0"> and a.site_id in @@ -538,9 +562,12 @@ count(1) as orderCount FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) <where> a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and MONTH(a.create_time) = MONTH(NOW()) AND YEAR(a.create_time) = YEAR(NOW()) a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and MONTH(a.create_time) = MONTH(NOW()) AND YEAR(a.create_time) = YEAR(NOW()) and a.create_time between #{start} and #{end} <if test="null != siteIds and siteIds.size() > 0"> and a.site_id in @@ -573,9 +600,11 @@ count(1) as orderCount FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) <where> a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and YEAR(a.create_time) = YEAR(NOW()) a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and YEAR(a.create_time) = YEAR(NOW()) and a.create_time between #{start} and #{end} <if test="null != siteIds and siteIds.size() > 0"> and a.site_id in @@ -607,9 +636,11 @@ count(1) as orderCount FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) <where> a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and a.create_time between #{start} and #{end} <if test="null != siteIds and siteIds.size() > 0"> and a.site_id in @@ -626,15 +657,15 @@ </select> <select id="queryPower" resultType="java.util.Map"> SELECT 'today' AS data_type, DATE_FORMAT(create_time, '%H') AS TIME, SUM(power) AS power 'today' AS data_type, DATE_FORMAT(create_time, '%H') AS TIME, SUM(power) AS power FROM t_charging_order t_charging_order WHERE del_flag = 0 AND recharge_payment_status = 2 AND DATE(create_time) = CURDATE() del_flag = 0 AND recharge_payment_status = 2 AND DATE(create_time) = CURDATE() <if test="siteIds != null and siteIds.size() > 0"> AND site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> @@ -642,20 +673,20 @@ </foreach> </if> GROUP BY TIME TIME UNION ALL SELECT 'yesterday' AS data_type, DATE_FORMAT(create_time, '%H') AS TIME, SUM(power) AS power 'yesterday' AS data_type, DATE_FORMAT(create_time, '%H') AS TIME, SUM(power) AS power FROM t_charging_order t_charging_order WHERE del_flag = 0 AND recharge_payment_status = 2 AND DATE(create_time) = CURDATE() - INTERVAL 1 DAY del_flag = 0 AND recharge_payment_status = 2 AND DATE(create_time) = CURDATE() - INTERVAL 1 DAY <if test="siteIds != null and siteIds.size() > 0"> AND site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> @@ -663,10 +694,10 @@ </foreach> </if> GROUP BY TIME TIME ORDER BY TIME; TIME; </select> @@ -678,10 +709,10 @@ SUM(CASE WHEN power BETWEEN 121 AND 300 THEN 1 ELSE 0 END) AS count_121_300, SUM(CASE WHEN power > 300 THEN 1 ELSE 0 END) AS count_above_300 FROM t_charging_order t_charging_order WHERE del_flag = 0 AND recharge_payment_status = 2 del_flag = 0 AND recharge_payment_status = 2 <if test="siteIds != null and siteIds.size() > 0"> AND site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> @@ -698,7 +729,7 @@ AND MONTH(create_time) = MONTH(CURDATE()) </if> <if test="statisticsQueryDto.dayType ==4"> AND YEAR(create_time) = YEAR(CURDATE()) AND YEAR(create_time) = YEAR(CURDATE()) </if> <if test="statisticsQueryDto.dayType ==5"> @@ -714,31 +745,31 @@ SELECT DATE_FORMAT( create_time, '%H:00' ) AS time, count(1) AS counts DATE_FORMAT( create_time, '%H:00' ) AS time, count(1) AS counts FROM charging_pile_account.t_app_user charging_pile_account.t_app_user WHERE del_flag = 0 AND DATE ( create_time ) = CURDATE() del_flag = 0 AND DATE ( create_time ) = CURDATE() GROUP BY time time </select> <select id="usersDay1" resultType="java.util.Map"> SELECT 'today' AS data_type, '1' as type, DATE_FORMAT( create_time, '%H:00' ) AS time, count(DISTINCT app_user_id) AS counts 'today' AS data_type, '1' as type, DATE_FORMAT( create_time, '%H:00' ) AS time, count(DISTINCT app_user_id) AS counts FROM t_charging_order t_charging_order WHERE del_flag = 0 AND DATE ( create_time ) = CURDATE() del_flag = 0 AND DATE ( create_time ) = CURDATE() GROUP BY time time </select> <select id="usersByQuery1" resultType="java.util.Map"> @@ -747,7 +778,7 @@ 'today' AS data_type, '1' as type, DATE_FORMAT( create_time, '%Y-%m-%d' ) AS time, count(DISTINCT app_user_id) AS counts count(DISTINCT app_user_id) AS counts FROM t_charging_order WHERE @@ -783,12 +814,12 @@ SELECT DATE_FORMAT( create_time, '%Y-%m-%d' ) AS time, count(1) AS counts DATE_FORMAT( create_time, '%Y-%m-%d' ) AS time, count(1) AS counts FROM charging_pile_account.t_app_user charging_pile_account.t_app_user WHERE del_flag = 0 del_flag = 0 <if test="statisticsQueryDto.dayType ==1 "> AND DATE(create_time) = CURDATE() </if> @@ -810,51 +841,52 @@ </if> </if> GROUP BY time time </select> <select id="getUserTagCount" resultType="java.util.Map"> SELECT tt.`name`, COUNT( 1 ) AS count tt.`name`, COUNT( 1 ) AS count FROM ( SELECT a.app_user_id, a.user_tag_id, a.create_time FROM charging_pile_account.t_app_user_tag a JOIN ( SELECT app_user_id, MAX( create_time ) AS max_create_time FROM charging_pile_account.t_app_user_tag GROUP BY app_user_id ) b ON a.app_user_id = b.app_user_id AND a.create_time = b.max_create_time LEFT JOIN `charging_pile_other`.`t_user_tag` ct on a.user_tag_id = ct.id WHERE ct.del_flag = 0 ) o LEFT JOIN `charging_pile_other`.`t_user_tag` tt on o.user_tag_id = tt.id ( SELECT a.app_user_id, a.user_tag_id, a.create_time FROM charging_pile_account.t_app_user_tag a JOIN ( SELECT app_user_id, MAX( create_time ) AS max_create_time FROM charging_pile_account.t_app_user_tag GROUP BY app_user_id ) b ON a.app_user_id = b.app_user_id AND a.create_time = b.max_create_time LEFT JOIN `charging_pile_other`.`t_user_tag` ct on a.user_tag_id = ct.id WHERE ct.del_flag = 0 ) o LEFT JOIN `charging_pile_other`.`t_user_tag` tt on o.user_tag_id = tt.id GROUP BY tt.name tt.name </select> <select id="getVipCount" resultType="java.util.Map"> SELECT tv.`name`, count(1) AS Counts tv.`name`, count(1) AS Counts FROM charging_pile_account.t_app_user ta LEFT JOIN `charging_pile_other`.`t_vip` tv on ta.vip_id = tv.id charging_pile_account.t_app_user ta LEFT JOIN `charging_pile_other`.`t_vip` tv on ta.vip_id = tv.id WHERE ta.del_flag = 0 ta.del_flag = 0 GROUP BY tv.`name` tv.`name` </select> <select id="unitConsumption" resultType="java.util.Map"> SELECT tc.`name`, au.company_id as companyId, SUM( co.charging_capacity ) as chargingCapacity au.company_id as companyId, SUM( co.charging_capacity ) as chargingCapacity FROM charging_pile_order.t_charging_order co LEFT JOIN charging_pile_account.t_app_user au ON co.app_user_id = au.id charging_pile_order.t_charging_order co LEFT JOIN charging_pile_account.t_app_user au ON co.app_user_id = au.id LEFT JOIN `charging_pile_other`.`t_company` tc on au.company_id = tc.id <where> @@ -866,7 +898,7 @@ AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() ) </if> <if test="statisticsQueryDto.dayType == 3"> AND MONTH( co.create_time ) = MONTH(CURDATE()) AND MONTH( co.create_time ) = MONTH(CURDATE()) </if> <if test="statisticsQueryDto.dayType == 4"> AND YEAR( co.create_time ) = YEAR(CURDATE() ) @@ -876,7 +908,7 @@ and DATE(co.create_time) >= #{statisticsQueryDto.startTime} </if> <if test="statisticsQueryDto.endTime != null"> and DATE(co.create_time) <= #{statisticsQueryDto.endTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} </if> </if> </where> @@ -885,61 +917,61 @@ </select> <select id="carUserMethod" resultType="java.util.Map"> SELECT count(1) as counts,vehicle_use count(1) as counts,vehicle_use from charging_pile_account.t_app_user_car where del_flag = 0 where del_flag = 0 GROUP BY vehicle_use </select> <select id="carUserBrand" resultType="java.util.Map"> SELECT count(1) as counts,vehicle_brand count(1) as counts,vehicle_brand from charging_pile_account.t_app_user_car where del_flag = 0 where del_flag = 0 GROUP BY vehicle_brand ORDER BY counts DESC limit 5 limit 5 </select> <select id="countLocalCar" resultType="java.util.Map"> SELECT SUM(CASE WHEN license_plate LIKE '%川J%' THEN 1 ELSE 0 END) AS localCar, SUM(CASE WHEN license_plate NOT LIKE '%川J%' THEN 1 ELSE 0 END) AS notLocalCar SUM(CASE WHEN license_plate LIKE '%川J%' THEN 1 ELSE 0 END) AS localCar, SUM(CASE WHEN license_plate NOT LIKE '%川J%' THEN 1 ELSE 0 END) AS notLocalCar FROM `charging_pile_account`.`t_app_user_car` `charging_pile_account`.`t_app_user_car` WHERE del_flag = 0 del_flag = 0 </select> <select id="getAver" resultType="java.lang.Double"> SELECT ROUND(AVG(te.mark), 2) AS average_mark ROUND(AVG(te.mark), 2) AS average_mark FROM `t_order_evaluate` te LEFT JOIN t_charging_order co on te.order_id = co.id `t_order_evaluate` te LEFT JOIN t_charging_order co on te.order_id = co.id WHERE 1 = 1 1 = 1 <if test="siteIds != null and siteIds.size() > 0"> AND co.site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> #{siteId} </foreach> </if> AND te.del_flag = 0 AND te.del_flag = 0 </select> <select id="getLevelEvaluate" resultType="java.util.Map"> SELECT CASE WHEN te.mark BETWEEN 1 AND 2 THEN '1-2' WHEN te.mark = 3 THEN '3' WHEN te.mark BETWEEN 4 AND 5 THEN '4-5' ELSE 'Other' END AS score_range, COUNT(*) AS count CASE WHEN te.mark BETWEEN 1 AND 2 THEN '1-2' WHEN te.mark = 3 THEN '3' WHEN te.mark BETWEEN 4 AND 5 THEN '4-5' ELSE 'Other' END AS score_range, COUNT(*) AS count FROM `t_order_evaluate` te LEFT JOIN t_charging_order co on te.order_id = co.id `t_order_evaluate` te LEFT JOIN t_charging_order co on te.order_id = co.id WHERE te.del_flag = 0 te.del_flag = 0 <if test="siteIds != null and siteIds.size() > 0"> AND co.site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> @@ -947,34 +979,34 @@ </foreach> </if> GROUP BY score_range score_range </select> <select id="chargingList" resultType="com.ruoyi.order.api.vo.ChargingOrderListVO"> select t1.*, t1.current as chargingCapacity, t1.payment_amount as paymentAmount, t1.electricity as chargingCapacity, ifnull(t2.refund_amount, 0) as refundAmount t1.current as chargingCapacity, t1.payment_amount as paymentAmount, t1.electricity as chargingCapacity, ifnull(t2.refund_amount, 0) as refundAmount from t_charging_order t1 left join t_charging_order_refund t2 on t1.id = t2.charging_order_id where t1.del_flag = 0 and t1.status = 5 and t1.recharge_payment_status = 2 where t1.del_flag = 0 and t1.status = 5 and t1.recharge_payment_status = 2 <if test="null != req.code and req.code!=''"> and t1.code LIKE CONCAT('%',#{req.code},'%') and t1.code LIKE CONCAT('%',#{req.code},'%') </if> <if test="null != req.carIds and req.carIds.size()>0" > <if test="null != req.carIds and req.carIds.size()>0"> and t1.app_user_car_id in <foreach collection="req.carIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> <if test="null != req.userIds and req.userIds.size()>0" > <if test="null != req.userIds and req.userIds.size()>0"> and t1.app_user_id in <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> <if test="null != req.siteIds and req.siteIds.size()>0" > <if test="null != req.siteIds and req.siteIds.size()>0"> and t1.site_id in <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")"> #{item} @@ -1005,15 +1037,15 @@ select t1.* from t_charging_order t1 where 1=1 <if test="null != req.code and req.code!=''"> and t1.code LIKE CONCAT('%',#{req.code},'%') and t1.code LIKE CONCAT('%',#{req.code},'%') </if> <if test="null != req.carIds and req.carIds.size()>0" > <if test="null != req.carIds and req.carIds.size()>0"> and t1.app_user_car_id in <foreach collection="req.carIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> <if test="null != req.userIds and req.userIds.size()>0" > <if test="null != req.userIds and req.userIds.size()>0"> and t1.app_user_id in <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> #{item} @@ -1049,53 +1081,54 @@ end as source from t_charging_order where 1=1 AND del_flag = 0 AND del_flag = 0 AND recharge_payment_status = 2 and status = 5 <if test="siteIds != null and siteIds.size() > 0"> and site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> #{siteId} </foreach> </if> <if test="statisticsQueryDto.dayType == 1"> AND DATE(create_time ) = CURDATE() </if> <if test="statisticsQueryDto.dayType != 1"> and DATE(create_time) >= #{statisticsQueryDto.startTime} and DATE(create_time) <= #{statisticsQueryDto.endTime} </if> <if test="siteIds != null and siteIds.size() > 0"> and site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> #{siteId} </foreach> </if> <if test="statisticsQueryDto.dayType == 1"> AND DATE(create_time ) = CURDATE() </if> <if test="statisticsQueryDto.dayType != 1"> and DATE(create_time) >= #{statisticsQueryDto.startTime} and DATE(create_time) <= #{statisticsQueryDto.endTime} </if> group by tripartite_platform_name </select> <select id="equipmentUserType1" resultType="java.util.Map"> SELECT FORMAT(SUM(TIME_TO_SEC(TIMEDIFF(co.end_time, co.start_time)) / <if test="statisticsQueryDto.dayType == 1"> 864 </if> <if test="statisticsQueryDto.dayType == 2"> 6048 </if> <if test="statisticsQueryDto.dayType == 3"> 25920 </if> <if test="statisticsQueryDto.dayType == 4"> 315360 </if> <if test="statisticsQueryDto.dayType == 5"> (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference )) </if> FORMAT(SUM(TIME_TO_SEC(TIMEDIFF(co.end_time, co.start_time)) / <if test="statisticsQueryDto.dayType == 1"> 864 </if> <if test="statisticsQueryDto.dayType == 2"> 6048 </if> <if test="statisticsQueryDto.dayType == 3"> 25920 </if> <if test="statisticsQueryDto.dayType == 4"> 315360 </if> <if test="statisticsQueryDto.dayType == 5"> (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference )) </if> ), 2) AS percent,co.charging_gun_id,tc.name,cp.name as siteName ), 2) AS percent,co.charging_gun_id,tc.name,cp.name as siteName FROM `charging_pile_order`.`t_charging_order` co LEFT JOIN `charging_pile_service`.`t_charging_gun` tc on co.charging_gun_id = tc.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id `charging_pile_order`.`t_charging_order` co LEFT JOIN `charging_pile_service`.`t_charging_gun` tc on co.charging_gun_id = tc.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id WHERE co.del_flag = 0 and co.start_time IS NOT NULL AND co.end_time IS NOT NULL and tc.type = 4 co.start_time IS NOT NULL AND co.end_time IS NOT NULL and tc.type = 4 <if test="siteIds != null and siteIds.size() > 0"> and co.site_id IN <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> @@ -1116,15 +1149,13 @@ </if> <if test="statisticsQueryDto.dayType == 5"> and DATE(co.create_time) >= #{statisticsQueryDto.startTime} and DATE(co.create_time) >= #{statisticsQueryDto.startTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} </if> GROUP BY tc.name,cp.name,co.charging_gun_id </select> @@ -1144,7 +1175,8 @@ 315360 </if> <if test="statisticsQueryDto.dayType == 5"> (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference )) </if> @@ -1152,8 +1184,8 @@ ), 2) AS percent,co.charging_gun_id,tc.name,cp.name as siteName FROM `charging_pile_order`.`t_charging_order` co LEFT JOIN `charging_pile_service`.`t_charging_gun` tc on co.charging_gun_id = tc.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id LEFT JOIN `charging_pile_service`.`t_charging_gun` tc on co.charging_gun_id = tc.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id WHERE co.del_flag = 0 and co.start_time IS NOT NULL AND co.end_time IS NOT NULL and tc.type in (2,3) <if test="siteIds != null and siteIds.size() > 0"> @@ -1179,7 +1211,7 @@ and DATE(co.create_time) >= #{statisticsQueryDto.startTime} </if> <if test="statisticsQueryDto.endTime != null"> and DATE(co.create_time) <= #{statisticsQueryDto.endTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} </if> </if> GROUP BY tc.name,cp.name,co.charging_gun_id @@ -1188,7 +1220,7 @@ </select> <select id="equipmentMapbroke1" resultType="java.util.Map"> SELECT FORMAT(SUM(TIME_TO_SEC(TIMEDIFF(co.end_time, co.down_time)) / FORMAT(SUM(TIME_TO_SEC(TIMEDIFF(co.end_time, co.down_time)) / <if test="statisticsQueryDto.dayType == 1"> 864 </if> @@ -1202,14 +1234,15 @@ 315360 </if> <if test="statisticsQueryDto.dayType == 5"> (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference )) </if> ), 2) AS percent,cp.name ), 2) AS percent,cp.name FROM `charging_pile_service`.`t_fault_message` co LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id WHERE co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 1 and co.status =2 <if test="siteIds != null and siteIds.size() > 0"> @@ -1232,10 +1265,10 @@ </if> <if test="statisticsQueryDto.dayType == 5"> and DATE(co.create_time) >= #{statisticsQueryDto.startTime} and DATE(co.create_time) >= #{statisticsQueryDto.startTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} </if> GROUP BY cp.name @@ -1258,14 +1291,15 @@ 315360 </if> <if test="statisticsQueryDto.dayType == 5"> (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference )) </if> ), 2) AS percent,cp.name FROM `charging_pile_service`.`t_fault_message` co LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id WHERE co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type in (2,3) and co.status =2 <if test="siteIds != null and siteIds.size() > 0"> @@ -1288,9 +1322,9 @@ </if> <if test="statisticsQueryDto.dayType == 5"> and DATE(co.create_time) >= #{statisticsQueryDto.startTime} and DATE(co.create_time) >= #{statisticsQueryDto.startTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} </if> GROUP BY cp.name @@ -1313,14 +1347,15 @@ 315360 </if> <if test="statisticsQueryDto.dayType == 5"> (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference )) </if> ), 2) AS percent,cp.name ), 2) AS percent,cp.name FROM `charging_pile_service`.`t_fault_message` co LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id WHERE co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 1 and co.status =1 <if test="siteIds != null and siteIds.size() > 0"> @@ -1346,7 +1381,7 @@ and DATE(co.create_time) >= #{statisticsQueryDto.startTime} </if> <if test="statisticsQueryDto.endTime != null"> and DATE(co.create_time) <= #{statisticsQueryDto.endTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} </if> </if> GROUP BY cp.name @@ -1367,14 +1402,15 @@ 315360 </if> <if test="statisticsQueryDto.dayType == 5"> (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference )) </if> ), 2) AS percent,cp.name FROM `charging_pile_service`.`t_fault_message` co LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id WHERE co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 2 and co.status =1 <if test="siteIds != null and siteIds.size() > 0"> @@ -1400,7 +1436,7 @@ and DATE(co.create_time) >= #{statisticsQueryDto.startTime} </if> <if test="statisticsQueryDto.endTime != null"> and DATE(co.create_time) <= #{statisticsQueryDto.endTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} </if> </if> GROUP BY cp.name @@ -1408,14 +1444,14 @@ </select> <select id="needElec" resultType="java.util.Map"> SELECT FORMAT((SUM(co.current)*100 / SUM(co.need_elec)), 2) AS percent, co.charging_gun_id, tc.name as name, cp.name AS siteName FORMAT((SUM(co.current)*100 / SUM(co.need_elec)), 2) AS percent, co.charging_gun_id, tc.name as name, cp.name AS siteName FROM `charging_pile_order`.`t_charging_order` co LEFT JOIN `charging_pile_service`.`t_charging_gun` tc ON co.charging_gun_id = tc.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp ON tc.charging_pile_id = cp.id `charging_pile_order`.`t_charging_order` co LEFT JOIN `charging_pile_service`.`t_charging_gun` tc ON co.charging_gun_id = tc.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp ON tc.charging_pile_id = cp.id <where> tc.type = 4 and co.need_elec != 0 <if test="siteIds != null and siteIds.size() > 0"> @@ -1438,16 +1474,16 @@ </if> <if test="statisticsQueryDto.dayType == 5"> and DATE(co.create_time) >= #{statisticsQueryDto.startTime} and DATE(co.create_time) >= #{statisticsQueryDto.startTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} </if> </where> GROUP BY tc.name, cp.name, co.charging_gun_id; tc.name, cp.name, co.charging_gun_id; </select> @@ -1477,8 +1513,11 @@ (b.charging_capacity) as electricity FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE_FORMAT( left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE_FORMAT( <if test="statisticsQueryDto.type == 1"> a.create_time </if> @@ -1520,8 +1559,11 @@ (b.charging_capacity) as electricity FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE_FORMAT( left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE_FORMAT( <if test="statisticsQueryDto.type == 1"> a.start_time </if> @@ -1563,8 +1605,11 @@ (b.charging_capacity) as electricity FROM t_charging_order a left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE_FORMAT( left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id) WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE_FORMAT( <if test="statisticsQueryDto.type == 1"> a.start_time </if> @@ -1582,11 +1627,11 @@ </select> <select id="getchargingCapacity" resultType="java.util.Map"> SELECT DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, SUM(charging_capacity) as chargingCapacity DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, SUM(charging_capacity) as chargingCapacity FROM t_charging_order WHERE del_flag = 0 and recharge_payment_status = 2 t_charging_order WHERE del_flag = 0 and recharge_payment_status = 2 <if test="statisticsQueryDto.dayType == 1"> AND DATE( create_time ) between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime} </if> @@ -1598,30 +1643,30 @@ </foreach> </if> GROUP BY time time </select> <select id="countAllUserData" resultType="java.util.Map"> SELECT COUNT( DISTINCT app_user_id ) AS counts, '1' AS type COUNT( DISTINCT app_user_id ) AS counts, '1' AS type FROM `charging_pile_order`.`t_charging_order` UNION ALL `charging_pile_order`.`t_charging_order` UNION ALL SELECT COUNT(*) AS counts, '2' AS type COUNT(*) AS counts, '2' AS type FROM `charging_pile_account`.`t_app_user` `charging_pile_account`.`t_app_user` WHERE `vip_end_time` > NOW() `vip_end_time` > NOW() UNION ALL SELECT COUNT(*) AS counts, '3' AS type COUNT(*) AS counts, '3' AS type FROM `charging_pile_account`.`t_app_user` `charging_pile_account`.`t_app_user` WHERE del_flag = 0 del_flag = 0 </select> @@ -1632,7 +1677,8 @@ tc.name as name, cp.name AS siteName FROM (select site_id,create_time,charging_gun_id, charging_pile_id, current, (CASE WHEN need_elec = 0 THEN `current` ELSE need_elec END) as need_elec from `charging_pile_order`.`t_charging_order`) co (select site_id,create_time,charging_gun_id, charging_pile_id, current, (CASE WHEN need_elec = 0 THEN `current` ELSE need_elec END) as need_elec from `charging_pile_order`.`t_charging_order`) co LEFT JOIN `charging_pile_service`.`t_charging_gun` tc ON co.charging_gun_id = tc.id LEFT JOIN `charging_pile_service`.`t_charging_pile` cp ON tc.charging_pile_id = cp.id <where> @@ -1660,7 +1706,7 @@ and DATE(co.create_time) >= #{statisticsQueryDto.startTime} </if> <if test="statisticsQueryDto.endTime != null"> and DATE(co.create_time) <= #{statisticsQueryDto.endTime} and DATE(co.create_time) <= #{statisticsQueryDto.endTime} </if> </if> </where> @@ -1673,24 +1719,24 @@ SELECT count(1) from `charging_pile_account`.`t_app_user` au WHERE au.id not IN ( SELECT app_user_id from `charging_pile_account`.`t_app_user_tag` GROUP BY app_user_id SELECT app_user_id from `charging_pile_account`.`t_app_user_tag` GROUP BY app_user_id ) and au.del_flag = 0 ) and au.del_flag = 0 </select> <select id="countCar" resultType="java.lang.Long"> select count(1) from charging_pile_account.t_app_user_car charging_pile_account.t_app_user_car where del_flag = 0 <if test="brands != null and brands.size() > 0"> and vehicle_brand not in <foreach collection="brands" item="brand" open="(" separator="," close=")"> #{brand} </foreach> and vehicle_brand not in <foreach collection="brands" item="brand" open="(" separator="," close=")"> #{brand} </foreach> </if> </select> <select id="chargingOrderNolimit" resultType="map"> @@ -1706,15 +1752,15 @@ from t_charging_order t1 where 1=1 <if test="null != req.code and req.code!=''"> and t1.code LIKE CONCAT('%',#{req.code},'%') and t1.code LIKE CONCAT('%',#{req.code},'%') </if> <if test="null != req.userIds and req.userIds.size()>0" > <if test="null != req.userIds and req.userIds.size()>0"> and t1.app_user_id in <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> <if test="null != req.siteIds and req.siteIds.size()>0" > <if test="null != req.siteIds and req.siteIds.size()>0"> and t1.site_id in <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")"> #{item} @@ -1754,84 +1800,96 @@ ) </select> <select id="countOrdersByDate" resultType="com.ruoyi.order.vo.OrderCountByDate"> SELECT DATE_FORMAT(create_time, '%m/%d') AS `date`, COUNT(*) AS `count` SELECT DATE_FORMAT(create_time, '%m/%d') AS `date`, COUNT(*) AS `count` FROM t_charging_order WHERE del_flag = 0 del_flag = 0 and status in (3,5) status in (3,5) and charging_gun_id in <foreach item="item" index="index" collection="gunIds" open="(" separator="," close=")"> #{item} </foreach> and create_time BETWEEN #{startTime} AND #{endTime} and charging_gun_id in <foreach item="item" index="index" collection="gunIds" open="(" separator="," close=")"> #{item} </foreach> and create_time BETWEEN #{startTime} AND #{endTime} GROUP BY DATE(create_time, '%m/%d') ORDER BY DATE(create_time, '%m/%d') ASC </select> <select id="findFailedStartupOrder" resultType="com.ruoyi.order.api.model.TChargingOrder"> SELECT * * FROM t_charging_order t_charging_order WHERE `status` = 2 AND recharge_payment_status = 2 AND NOW() >= ADDDATE(pay_time, INTERVAL 15 MINUTE ) AND del_flag = 0 AND id NOT IN ( SELECT charging_order_id FROM t_charging_order_refund) `status` = 2 and order_source = 1 AND recharge_payment_status = 2 AND NOW() >= ADDDATE(pay_time, INTERVAL 15 MINUTE ) AND del_flag = 0 AND id NOT IN ( SELECT charging_order_id FROM t_charging_order_refund) </select> <select id="findStoppedOrder" resultType="com.ruoyi.order.api.model.TChargingOrder"> SELECT * * FROM t_charging_order t_charging_order WHERE `status` = 4 AND NOW() >= ADDDATE(end_time, INTERVAL 10 MINUTE ) AND del_flag = 0 AND id NOT IN ( SELECT charging_order_id FROM t_charging_order_refund) `status` = 4 and order_source = 1 AND NOW() >= ADDDATE(end_time, INTERVAL 10 MINUTE ) AND del_flag = 0 AND id NOT IN ( SELECT charging_order_id FROM t_charging_order_refund) </select> <select id="findChargingOrder" resultType="com.ruoyi.order.api.model.TChargingOrder"> SELECT * * FROM t_charging_order t_charging_order WHERE `status` = 3 AND del_flag = 0 AND id NOT IN ( SELECT charging_order_id FROM t_charging_order_refund) `status` = 3 AND del_flag = 0 and order_source = 1 AND id NOT IN ( SELECT charging_order_id FROM t_charging_order_refund) </select> <select id="getSumDegreeBySiteIds" resultType="java.lang.Double"> SELECT IFNULL(SUM(t2.charging_capacity), 0.0) AS sumDegreeBySiteIds FROM t_charging_order t1 LEFT JOIN t_charging_order_summary_data t2 ON t1.id = t2.charging_order_id LEFT JOIN t_charging_order_summary_data t2 ON t1.id = t2.charging_order_id WHERE t1.del_flag = 0 <if test="siteIds != null and siteIds.size() > 0"> <if test="siteIds != null and siteIds.size() > 0"> AND t1.site_id IN <foreach collection="siteIds" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> </select> </if> </select> <select id="findEndChargingOrder" resultType="com.ruoyi.order.api.model.TChargingOrder"> SELECT * FROM t_charging_order WHERE `status` in (-1, 5) AND del_flag = 0 and create_time > '2025-08-01 00:00:00' and order_source = 1 AND id NOT IN ( SELECT charging_order_id FROM t_charging_order_refund) </select> </mapper> ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
@@ -1,71 +1,511 @@ //package com.ruoyi.order; // //import com.alibaba.fastjson2.JSON; //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.ruoyi.account.api.feignClient.*; //import com.ruoyi.account.api.model.TAppUserCar; //import com.ruoyi.chargingPile.api.feignClient.*; //import com.ruoyi.chargingPile.api.model.Site; //import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; //import com.ruoyi.account.api.feignClient.AppCouponClient; //import com.ruoyi.account.api.feignClient.AppUserClient; //import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient; //import com.ruoyi.account.api.model.TAppCoupon; //import com.ruoyi.account.api.model.TAppUser; //import com.ruoyi.account.api.model.TAppUserIntegralChange; //import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; //import com.ruoyi.chargingPile.api.feignClient.SiteClient; //import com.ruoyi.chargingPile.api.model.TChargingGun; //import com.ruoyi.chargingPile.api.model.TChargingPile; //import com.ruoyi.common.core.domain.R; //import com.ruoyi.common.core.web.domain.AjaxResult; //import com.ruoyi.common.core.web.page.PageInfo; //import com.ruoyi.common.redis.service.RedisService; //import com.ruoyi.common.security.service.TokenService; //import com.ruoyi.integration.api.feignClient.*; //import com.ruoyi.integration.api.model.ChargingHandshake; //import com.ruoyi.integration.api.feignClient.ChargingMessageClient; //import com.ruoyi.integration.api.feignClient.TCECClient; //import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; //import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient; //import com.ruoyi.order.api.model.TChargingOrder; //import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy; //import com.ruoyi.order.api.vo.AccountingStrategyDetailOrderVo; //import com.ruoyi.order.api.vo.ChargingOrderInfoVO; //import com.ruoyi.order.api.vo.TransactionRecordMessageVO; //import com.ruoyi.order.dto.ChargingDetails; //import com.ruoyi.order.dto.MyChargingOrderInfo; //import com.ruoyi.order.dto.PayOrderDto; //import com.ruoyi.order.dto.PayOrderQueryDto; //import com.ruoyi.order.mapper.TSettlementConfirmMapper; //import com.ruoyi.integration.api.vo.ChargingOrderVo; //import com.ruoyi.order.api.model.*; //import com.ruoyi.order.service.*; //import com.ruoyi.order.vo.EndOfChargePageInfo; //import com.ruoyi.order.util.mongodb.service.TransactionRecordService; //import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService; //import com.ruoyi.order.util.task.TaskUtil; //import com.ruoyi.other.api.domain.TCoupon; //import com.ruoyi.other.api.domain.TIntegralRule; //import com.ruoyi.other.api.domain.TVip; //import com.ruoyi.other.api.feignClient.IntegralRuleClient; //import com.ruoyi.other.api.feignClient.UserTagClient; //import com.ruoyi.other.api.feignClient.VipClient; //import com.ruoyi.payment.api.feignClient.AliPaymentClient; //import com.ruoyi.payment.api.feignClient.H5AliPaymentClient; //import com.ruoyi.payment.api.feignClient.WxPaymentClient; //import com.ruoyi.payment.api.model.RefundReq; //import com.ruoyi.payment.api.model.RefundResp; //import com.ruoyi.payment.api.model.WxPaymentRefundModel; //import org.junit.jupiter.api.Test; //import org.redisson.api.RLock; //import org.redisson.api.RedissonClient; //import org.springframework.beans.BeanUtils; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.boot.test.context.SpringBootTest; // //import javax.annotation.Resource; //import java.io.PrintWriter; //import java.math.BigDecimal; //import java.math.MathContext; //import java.math.RoundingMode; //import java.text.SimpleDateFormat; //import java.time.LocalDateTime; //import java.time.format.DateTimeFormatter; //import java.time.temporal.ChronoUnit; //import java.util.*; //import java.util.concurrent.TimeUnit; //import java.util.stream.Collectors; // //@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiOrderApplication.class) //public class RuoYiOrderApplicationTests { // // @Autowired // private RedissonClient redissonClient; // @Resource // private TChargingBillService chargingBillService; // @Resource // private SiteClient siteClient; // @Resource // private TChargingOrderService chargingOrderService; // // @Resource // private TChargingOrderRefundService chargingOrderRefundService; // // @Resource // private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService; // // @Resource // private TransactionRecordService transactionRecordService; // // @Resource // private ChargingMessageClient chargingMessageClient; // // @Resource // private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService; // // @Resource // private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; // // @Resource // private AppCouponClient appCouponClient; // // @Resource // private TCECClient tcecClient; // // @Resource // private VipClient vipClient; // // @Resource // private ChargingGunClient chargingGunClient; // // @Resource // private IntegralRuleClient integralRuleClient; // @Resource // private AppUserClient appUserClient; // // @Resource // private AppUserIntegralChangeClient appUserIntegralChangeClient; // // @Resource // private WxPaymentClient wxPaymentClient; // // @Resource // private AliPaymentClient aliPaymentClient; // @Resource // private H5AliPaymentClient h5AliPaymentClient; // // @Resource // private ITChargingOrderSummaryDataService chargingOrderSummaryDataService; // // // @Test // public void test(){ // RLock lock = redissonClient.getLock("endOrder:1234565"); // boolean tryLock = false; // try { // tryLock = lock.tryLock(100, TimeUnit.SECONDS); // } catch (InterruptedException e) { // e.printStackTrace(); // lock.unlock(); // } // if(!tryLock){ // System.out.println("获取锁失败"); // } // System.out.println("获取锁成功"); // } // TChargingOrder order = chargingOrderService.getOne(new QueryWrapper<TChargingOrder>().eq("code", "CD61220250714235257688")); // List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode()); // if(!dataList.isEmpty()){ // //获取当前订单的计费规则,然后分段计算总的度数和充电金额 // List<AccountingStrategyDetailOrder> detailOrders = accountingStrategyDetailOrderService.list(new LambdaQueryWrapper<AccountingStrategyDetailOrder>() // .eq(AccountingStrategyDetailOrder::getChargingOrderId, order.getId()).last(" order by start_time")); // detailOrders.get(detailOrders.size() - 1).setEndTime("23:59"); // SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); // //开始解析每个时段的充电度数 // BigDecimal decimal = BigDecimal.ZERO; // //如果使用优惠券需要判断优惠券是否满足使用条件 // //退款金额=优惠券金额+剩余充电金额 // BigDecimal periodElectricPrice_total = BigDecimal.ZERO; // BigDecimal periodServicePrice_total = BigDecimal.ZERO; // BigDecimal vipDiscountAmount_total = BigDecimal.ZERO; // BigDecimal serviceCharge_total = BigDecimal.ZERO; // BigDecimal total = BigDecimal.ZERO; // //判断实时数据是否跨天 // SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); // Date end_time = dataList.get(0).getCreate_time(); // String end = sdf2.format(end_time); // Date start_time = dataList.get(dataList.size() - 1).getCreate_time(); // String start = sdf2.format(start_time); // if(!end.equals(start)){ // List<AccountingStrategyDetailOrder> list = detailOrders.stream().map(s->{ // AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder(); // BeanUtils.copyProperties(s, accountingStrategyDetailOrder); // return accountingStrategyDetailOrder; // }).collect(Collectors.toList()); // for (AccountingStrategyDetailOrder detailOrder : detailOrders) { // detailOrder.setStartTime(start + " " + detailOrder.getStartTime()); // detailOrder.setEndTime(start + " " + detailOrder.getEndTime()); // } // for (AccountingStrategyDetailOrder detailOrder : list) { // detailOrder.setStartTime(end + " " + detailOrder.getStartTime()); // detailOrder.setEndTime(end + " " + detailOrder.getEndTime()); // } // detailOrders.addAll(list); // }else{ // for (AccountingStrategyDetailOrder detailOrder : detailOrders) { // detailOrder.setStartTime(start + " " + detailOrder.getStartTime()); // detailOrder.setEndTime(start + " " + detailOrder.getEndTime()); // } // } // // SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmm"); // List<TChargingOrderAccountingStrategy> list = new ArrayList<>(); // for (AccountingStrategyDetailOrder detailOrder : detailOrders) { // long startTime = Long.parseLong(detailOrder.getStartTime().replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "")); // long endTime = Long.parseLong(detailOrder.getEndTime().replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "")); // List<UploadRealTimeMonitoringData> collect = dataList.stream().filter(s -> Long.parseLong(sdf1.format(s.getCreate_time())) > startTime && Long.parseLong(sdf1.format(s.getCreate_time())) <= endTime).collect(Collectors.toList()); // // if(!collect.isEmpty()){ // //升序排序 // collect.sort(new Comparator<UploadRealTimeMonitoringData>(){ // @Override // public int compare(UploadRealTimeMonitoringData o1, UploadRealTimeMonitoringData o2) { // return o1.getCharging_degree().compareTo(o2.getCharging_degree()); // } // }); // UploadRealTimeMonitoringData uploadRealTimeMonitoringData = collect.get(collect.size() - 1); // BigDecimal chargingDegree = uploadRealTimeMonitoringData.getCharging_degree(); // BigDecimal subtract = chargingDegree.subtract(decimal); // decimal = chargingDegree; // if(subtract.compareTo(BigDecimal.ZERO) > 0){ // //组装充电明细数据 // TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy(); // chargingOrderAccountingStrategy.setChargingOrderId(order.getId()); // chargingOrderAccountingStrategy.setAccountingStrategyDetailId(detailOrder.getId()); // chargingOrderAccountingStrategy.setType(detailOrder.getType()); // chargingOrderAccountingStrategy.setElectrovalence(detailOrder.getElectrovalence()); // chargingOrderAccountingStrategy.setServiceCharge(detailOrder.getServiceCharge()); // chargingOrderAccountingStrategy.setCostServiceCharge(detailOrder.getCostServiceCharge()); // chargingOrderAccountingStrategy.setChargingCapacity(subtract); // chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); // // if (list.size() == 0) { // String time = sdf.format(collect.get(0).getCreate_time()); // chargingOrderAccountingStrategy.setStartTime(time); // } else { // chargingOrderAccountingStrategy.setStartTime(detailOrder.getStartTime().split(" ")[1]); // } // chargingOrderAccountingStrategy.setEndTime(detailOrder.getEndTime().split(" ")[1]); // // //已充电总度数 // BigDecimal electrovalenc = detailOrder.getElectrovalence().multiply(subtract); // BigDecimal originalServicePrice = detailOrder.getServiceCharge().multiply(subtract); // BigDecimal serviceCharge = originalServicePrice; // BigDecimal vipDiscountAmount = BigDecimal.ZERO; // //计算优惠金额 // if (null != order.getVipDiscount()) { // //0.58折 // vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(order.getVipDiscount())); // serviceCharge = serviceCharge.multiply(order.getVipDiscount()); // } // chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN)); // chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN)); // chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN)); // chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN)); // chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); // list.add(chargingOrderAccountingStrategy); // //电费 // periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc); // //服务费(含折扣) // serviceCharge_total = serviceCharge_total.add(serviceCharge); // //服务费(不含折扣) // periodServicePrice_total = periodServicePrice_total.add(originalServicePrice); // //会员折扣优惠金额 // vipDiscountAmount_total = vipDiscountAmount_total.add(vipDiscountAmount); // //原始总金额(不含折扣) // total = total.add(electrovalenc.add(originalServicePrice)); // } // } // // } // list.get(list.size() - 1).setEndTime(sdf.format(dataList.get(0).getCreate_time())); // chargingOrderAccountingStrategyService.saveBatch(list); // // BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue()); // //原金额 // BigDecimal rechargeAmount = order.getRechargeAmount(); // //支付金额 // BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total); // //退款金额=充值金额-实际支付金额 // BigDecimal refundAmount = rechargeAmount.subtract(payAmount); // // UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(order.getCode()); // if (null != uploadRealTimeMonitoringData && null == order.getEndMode()) { // Integer soc = uploadRealTimeMonitoringData.getSoc(); // if (soc >= 98) { // order.setEndMode(2); // } else if (null != order.getResidualAmount() && order.getResidualAmount().compareTo(new BigDecimal(1)) <= 0) { // order.setEndMode(3); // } else { // order.setEndMode(1); // } // } // // order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN)); // order.setStartTime(list.get(0).getCreateTime()); // order.setEndTime(list.get(list.size() - 1).getCreateTime()); // order.setStatus(5); // order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN)); // order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN)); // order.setChargingCapacity(list.get(list.size() - 1).getChargingCapacity()); // order.setElectricity(list.get(list.size() - 1).getChargingCapacity()); // order.setVipDiscountAmount(vipDiscountAmount_total); // if (vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0) { // order.setVipDiscount(BigDecimal.valueOf(1)); // } // // //计算优惠券 // BigDecimal couponDiscount = BigDecimal.ZERO; // if (null != order.getAppCouponId()) { // //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。 // TAppCoupon appCoupon = appCouponClient.getAppCouponById(order.getAppCouponId()).getData(); // String couponJson = appCoupon.getCouponJson(); // TCoupon tCoupon = com.alibaba.fastjson2.JSON.parseObject(couponJson, TCoupon.class); // Integer preferentialMode = tCoupon.getPreferentialMode(); // if (1 == preferentialMode) { // //满减 // if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) { // BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount(); // //如果优惠金额大于服务费金额,以服务费作为最大限制 // if (serviceCharge_total.compareTo(couponDiscountAmount) < 0) { // couponDiscount = serviceCharge_total; // serviceCharge_total = BigDecimal.ZERO; // } else { // couponDiscount = couponDiscountAmount; // } // appCoupon.setStatus(2); // appCouponClient.updateAppCoupon(appCoupon); // } else { // appCouponClient.refund(order.getAppCouponId().toString()); // order.setAppCouponId(null); // order.setCouponDiscountAmount(BigDecimal.ZERO); // } // } // if (2 == preferentialMode) { // //抵扣 // if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) { // //折扣金额 // BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10)); // divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide; // //如果优惠金额大于服务费金额,以服务费作为最大限制 // if (serviceCharge_total.compareTo(divide) < 0) { // couponDiscount = serviceCharge_total; // serviceCharge_total = BigDecimal.ZERO; // } else { // couponDiscount = divide; // } // // appCoupon.setStatus(2); // appCouponClient.updateAppCoupon(appCoupon); // } else { // order.setAppCouponId(null); // order.setCouponDiscountAmount(BigDecimal.ZERO); // appCouponClient.refund(order.getAppCouponId().toString()); // } // } // } // //优惠券优惠金额 // couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN); // //退款金额+优惠券 // refundAmount = refundAmount.add(couponDiscount); // //实际支付金额-优惠券 // payAmount = payAmount.subtract(couponDiscount); // if (serviceCharge_total.compareTo(BigDecimal.ZERO) > 0) { // serviceCharge_total = serviceCharge_total.subtract(couponDiscount); // } // order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN)); // order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN)); // order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN)); // order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN)); // order.setRefundStatus(1); // chargingOrderService.updateById(order); // // order = chargingOrderService.getById(order.getId()); // // //推送三方平台 // if (2 == order.getOrderSource()) { // TChargingOrder finalChargingOrder = order; // 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(); // } // // //开始将优惠券优惠的金额添加到明细中 // BigDecimal couponDiscountAmount = order.getCouponDiscountAmount(); // if (null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0) { // List<TChargingOrderAccountingStrategy> list1 = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId())); // BigDecimal reduce = list1.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add); // for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list1) { // BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice(); // BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN))); // periodServicePrice = periodServicePrice.subtract(multiply); // chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN)); // chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN)); // } // chargingOrderAccountingStrategyService.updateBatchById(list1); // } // // // 将枪状态重置为空闲 // TChargingGun chargingGun = new TChargingGun(); // chargingGun.setId(order.getChargingGunId()); // chargingGun.setStatus(2); // chargingGun.setChargingPower(BigDecimal.ZERO); // chargingGunClient.updateChargingGunById(chargingGun); // //推送状态给三方平台 // if (2 == order.getOrderSource()) { // tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus()); // } // // //添加积分 // if (1 == order.getOrderSource()) { // TIntegralRule integralRule = integralRuleClient.getSet().getData(); // if (null != integralRule) { // TAppUser appUser = appUserClient.getUserById(order.getAppUserId()).getData(); // Integer num1 = com.alibaba.fastjson2.JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1"); // Integer integral = order.getServiceCharge().intValue() * num1; // if (null != appUser.getVipId()) { // TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); // Integer doubleIntegration = vip.getDoubleIntegration(); // //双倍积分 // if (1 == doubleIntegration) { // integral *= 2; // } // } // // if (integral > 0) { // TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); // appUserIntegralChange.setAppUserId(appUser.getId()); // appUserIntegralChange.setChangeType(2); // appUserIntegralChange.setHistoricalIntegral(appUser.getPoints()); // appUser.setPoints(appUser.getPoints() + integral); // appUserIntegralChange.setCurrentIntegral(appUser.getPoints()); // appUserIntegralChange.setCreateTime(LocalDateTime.now()); // appUserIntegralChange.setOrderCode(order.getCode()); // appUserIntegralChange.setExtension(order.getId().toString()); // appUserClient.updateAppUser(appUser); // appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); // } // } // // //计算用户标签 // chargingOrderService.editUserTag(order); // //用户推荐奖励 // chargingOrderService.referralReward(order); // // //开始构建退款费用 // refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN); // if (refundAmount.compareTo(BigDecimal.ZERO) > 0) { // Integer rechargePaymentType = order.getRechargePaymentType(); // //构建退款明细 // TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); // chargingOrderRefund.setChargingOrderId(order.getId()); // SimpleDateFormat sdfaa = new SimpleDateFormat("yyyyMMddHHmmssSSS"); // chargingOrderRefund.setRefundCode("CDF" + sdfaa.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); // chargingOrderRefund.setRefundAmount(refundAmount); // chargingOrderRefund.setRefundStatus(1); // chargingOrderRefund.setPayType(rechargePaymentType); // chargingOrderRefund.setRefundStatus(1); // chargingOrderRefund.setCode(order.getCode()); // chargingOrderRefund.setRefundTitle("充电完成退款"); // chargingOrderRefund.setRefundContent("充电完成退款"); // chargingOrderRefund.setRefundReason("充电完成退款"); // chargingOrderRefund.setRefundRemark("实际充电消费金额:" + order.getPaymentAmount()); // chargingOrderRefund.setRefundTotalAmount(refundAmount); // chargingOrderRefund.setPayAmount(rechargeAmount); // if (1 == rechargePaymentType) { // WxPaymentRefundModel model = new WxPaymentRefundModel(); // model.setOut_trade_no(order.getCode()); // model.setOut_refund_no(chargingOrderRefund.getRefundCode()); // model.setReason("充电完成退款"); // model.setNotify_url("/payment/wx/refund/notify"); // WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); // amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue()); // amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); // amount.setCurrency("CNY"); // model.setAmount(amount); // R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model); // if (200 == result.getCode()) { // chargingOrderRefundService.save(chargingOrderRefund); // //手续费 // 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); // chargingOrderRefundService.updateById(chargingOrderRefund); // } // } // if (2 == rechargePaymentType) { // RefundReq dto = new RefundReq(); // dto.setOutTradeNo(order.getCode()); // dto.setOutRequestNo(chargingOrderRefund.getRefundCode()); // dto.setRefundAmount(refundAmount.toString()); // dto.setRefundReason("充电完成退款"); // RefundResp resp = aliPaymentClient.refund(dto).getData(); // if (null != resp) { // chargingOrderRefundService.save(chargingOrderRefund); // chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); // } // } // if (3 == rechargePaymentType) { // RefundReq dto = new RefundReq(); // dto.setOutTradeNo(order.getRechargeSerialNumber()); // dto.setOutRequestNo(chargingOrderRefund.getRefundCode()); // dto.setRefundAmount(refundAmount.toString()); // dto.setRefundReason("充电完成退款"); // RefundResp resp = h5AliPaymentClient.refund(dto).getData(); // if (null != resp && "10000".equals(resp.getCode())) { // chargingOrderRefundService.save(chargingOrderRefund); // chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); // } // } // } // } // // //添加汇总统计数据 // List<TChargingOrderAccountingStrategy> list4 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>().eq("charging_order_id", order.getId())); // 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); // BigDecimal serviceMoney = BigDecimal.ZERO; // BigDecimal paymentMoney = BigDecimal.ZERO; // long time = 0; // if (!order.getOrderSource().equals(2)) { // serviceMoney = serviceMoney.add(service_reduce); // paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce); // } else { // serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8"))); // paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8"))); // } // if (order.getStartTime() != null && order.getEndTime() != null) { // time = ChronoUnit.SECONDS.between(order.getStartTime(), order.getEndTime()); // } // TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData(); // summaryData.setChargingOrderId(order.getId()); // summaryData.setChargingCapacity(chargingCapacity); // summaryData.setChargingDuration(time); // summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN)); // summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN)); // summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN)); // chargingOrderSummaryDataService.save(summaryData); // // //推送监管平台订单状态和订单详情 // ChargingOrderVo chargingOrderVo = new ChargingOrderVo(); // BeanUtils.copyProperties(order, chargingOrderVo); // chargingMessageClient.pushOrderInfo(chargingOrderVo); // chargingMessageClient.pushOrderStatus(chargingOrderVo); // } // } //}