From 6ddfb0ce8f781457b59689d08218d2ea617c5925 Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期四, 05 九月 2024 10:02:43 +0800 Subject: [PATCH] 完善功能 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 277 ++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 210 insertions(+), 67 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index 77bf7a4..ea7bafb 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -1,27 +1,17 @@ package com.ruoyi.order.service.impl; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.account.api.feignClient.AppCouponClient; -import com.ruoyi.account.api.feignClient.AppUserCarClient; -import com.ruoyi.account.api.feignClient.AppUserClient; -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.TAppUserCar; -import com.ruoyi.account.api.model.TAppUserVipDetail; +import com.ruoyi.account.api.feignClient.*; +import com.ruoyi.account.api.model.*; import com.ruoyi.account.api.vo.GetAppUserVipDetail; -import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; -import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; -import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; -import com.ruoyi.chargingPile.api.feignClient.SiteClient; -import com.ruoyi.chargingPile.api.model.Site; -import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; -import com.ruoyi.chargingPile.api.model.TChargingGun; -import com.ruoyi.chargingPile.api.model.TChargingPile; +import com.ruoyi.account.api.vo.GetInviteUser; +import com.ruoyi.chargingPile.api.feignClient.*; +import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ChargingOrderGroup; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; @@ -42,6 +32,7 @@ import com.ruoyi.integration.api.feignClient.*; import com.ruoyi.integration.api.model.*; import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; +import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient; import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; @@ -52,13 +43,12 @@ import com.ruoyi.order.api.vo.TCharingOrderVO; import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TChargingOrderMapper; -import com.ruoyi.order.service.TChargingOrderAccountingStrategyService; -import com.ruoyi.order.service.TChargingOrderRefundService; -import com.ruoyi.order.service.TChargingOrderService; -import com.ruoyi.order.service.TOrderEvaluateService; +import com.ruoyi.order.service.*; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; import com.ruoyi.order.vo.ChargingOrderListInfoVO; +import com.ruoyi.other.api.domain.TIntegralRule; +import com.ruoyi.other.api.feignClient.IntegralRuleClient; import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.payment.api.feignClient.AliPaymentClient; @@ -71,6 +61,8 @@ import com.ruoyi.system.api.feignClient.SysUserClient; import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.ApiModelProperty; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -100,6 +92,8 @@ */ @Service public class TChargingOrderServiceImpl extends ServiceImpl<TChargingOrderMapper, TChargingOrder> implements TChargingOrderService { + + private Logger log = LoggerFactory.getLogger(TChargingOrderServiceImpl.class); @Resource private ChargingGunClient chargingGunClient; @@ -155,6 +149,12 @@ private AccountingStrategyDetailClient accountingStrategyDetailClient; @Resource + private AccountingStrategyDetailOrderClient accountingStrategyDetailOrderClient; + + @Resource + private AccountingStrategyClient accountingStrategyClient; + + @Resource private PlatformStartChargingReplyClient platformStartChargingReplyClient; @Resource @@ -162,6 +162,21 @@ @Resource private PlatformStopChargingReplyClient platformStopChargingReplyClient; + + @Resource + private AccountingStrategyOrderService accountingStrategyOrderService; + + @Resource + private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService; + + @Resource + private InviteUserClient inviteUserClient; + + @Resource + private AppUserIntegralChangeClient appUserIntegralChangeClient; + + @Resource + private IntegralRuleClient integralRuleClient; //计数器 private Map<String, Integer> counter_map = new HashMap<>(); @@ -426,9 +441,25 @@ chargingOrder.setVipDiscountAmount(discountAmount); } } - } this.save(chargingOrder); + + //添加订单的计费策略 + TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(tChargingGun.getAccountingStrategyId()).getData(); + List<TAccountingStrategyDetail> strategyDetailList = accountingStrategyDetailClient.getListByAccountingStrategyId(tChargingGun.getAccountingStrategyId()).getData(); + AccountingStrategyOrder accountingStrategyOrder = new AccountingStrategyOrder(); + BeanUtils.copyProperties(accountingStrategy, accountingStrategyOrder); + accountingStrategyOrder.setChargingOrderId(chargingOrder.getId()); + accountingStrategyOrderService.save(accountingStrategyOrder); + List<AccountingStrategyDetailOrder> list1 = new ArrayList<>(); + for (TAccountingStrategyDetail tAccountingStrategyDetail : strategyDetailList) { + AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder(); + BeanUtils.copyProperties(tAccountingStrategyDetail, accountingStrategyDetailOrder); + accountingStrategyDetailOrder.setChargingOrderId(chargingOrder.getId()); + list1.add(accountingStrategyDetailOrder); + } + accountingStrategyDetailOrderService.saveBatch(list1); + //会员优惠折扣将其计入增加充电时长(增加总充电金额) //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额) if(1 == addChargingOrder.getPaymentType()){ @@ -490,7 +521,7 @@ BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); //计算充电金额,会员需要将折扣金额加入到充电总金额中 TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); - TAccountingStrategyDetail strategyDetail = accountingStrategyDetailClient.getNowData(chargingGun.getAccountingStrategyId()).getData(); + AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderClient.getNowAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); //总单价 BigDecimal totalUnitPrice = strategyDetail.getServiceCharge().add(strategyDetail.getElectrovalence()); //计算能充电的度数 @@ -713,6 +744,7 @@ * @return */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public AjaxResult stopCharging(String id) { TChargingOrder chargingOrder = this.getById(id); Integer status = chargingOrder.getStatus(); @@ -722,51 +754,98 @@ chargingOrder.setStatus(4); chargingOrder.setEndMode(1); this.updateById(chargingOrder); - //调用硬件停止充电,停止成功后开始计算费用退款 - TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingOrder.getChargingPileId()).getData(); - TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); - PlatformStopCharging platformStopCharging = new PlatformStopCharging(); - platformStopCharging.setCharging_pile_code(chargingPile.getCode()); - platformStopCharging.setCharging_gun_code(chargingGun.getCode()); - sendMessageClient.platformStopCharging(platformStopCharging); - //开始查询停机应答,成功后开始计费费用 - for (int i = 0; i < 60; i++) { - GetPlatformStopChargingReply query = new GetPlatformStopChargingReply(); - query.setCharging_gun_code(chargingGun.getCode()); - query.setCharging_pile_code(chargingPile.getCode()); - PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData(); - if(null == reply){ - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); + + //异步线程处理停机 + ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1); + cachedThreadPool.execute(()->{ + //调用硬件停止充电,停止成功后开始计算费用退款 + TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingOrder.getChargingPileId()).getData(); + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + PlatformStopCharging platformStopCharging = new PlatformStopCharging(); + platformStopCharging.setCharging_pile_code(chargingPile.getCode()); + platformStopCharging.setCharging_gun_code(chargingGun.getCode()); + sendMessageClient.platformStopCharging(platformStopCharging); + //开始查询停机应答,成功后开始计费费用 + for (int i = 0; i < 60; i++) { + GetPlatformStopChargingReply query = new GetPlatformStopChargingReply(); + query.setCharging_gun_code(chargingGun.getCode()); + query.setCharging_pile_code(chargingPile.getCode()); + PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData(); + if(null == reply){ + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + continue; } - continue; - } - - if(0 == reply.getStop_result()){ - String failure_cause = ""; - switch (reply.getFailure_cause()){ - case 0: - failure_cause = "无"; - break; - case 1: - failure_cause = "设备编号不匹配"; - break; - case 2: - failure_cause = "枪未处于充电状态"; - break; - case 3: - failure_cause = "其他"; - break; + + if(0 == reply.getStop_result()){ + String failure_cause = ""; + switch (reply.getFailure_cause()){ + case 0: + failure_cause = "无"; + break; + case 1: + failure_cause = "设备编号不匹配"; + break; + case 2: + failure_cause = "枪未处于充电状态"; + break; + case 3: + failure_cause = "其他"; + break; + } + log.error("停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause); + throw new RuntimeException(failure_cause); } - throw new RuntimeException(failure_cause); + + //计算费用,处理退款 + endCharge(chargingOrder); + break; } + }); + + + //处理推荐奖励(被推荐首单奖励) + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); + long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) + .eq(TChargingOrder::getStatus, 5).isNull(TChargingOrder::getEndMode).eq(TChargingOrder::getDelFlag, 0)); + if(null != appUser.getInviteUserId() && 1 == count){ + TIntegralRule integralRule = integralRuleClient.getSet().getData(); + String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints(); + JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints); + Integer num1 = jsonObject.getInteger("num1"); + GetInviteUser query = new GetInviteUser(); + query.setAppUserId(appUser.getInviteUserId()); + query.setBeInvitedAppUserId(chargingOrder.getAppUserId()); + TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData(); + if(null == inviteUser){ + inviteUser = new TInviteUser(); + inviteUser.setAppUserId(appUser.getInviteUserId()); + inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId()); + inviteUser.setAward(num1); + inviteUser.setCreateTime(LocalDateTime.now()); + inviteUserClient.saveInviteUser(inviteUser); + }else{ + inviteUser.setAward(num1); + inviteUserClient.updateInviteUser(inviteUser); + } + TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); + TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); + String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); + appUserIntegralChange.setCode(code); + appUserIntegralChange.setAppUserId(appUser.getInviteUserId()); + appUserIntegralChange.setChangeType(5); + appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); + appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); + appUserIntegralChange.setCreateTime(LocalDateTime.now()); + appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); - //计算费用,处理退款 - endCharge(chargingOrder); - break; + appUser1.setPoints(appUser1.getPoints() + num1); + appUserClient.updateAppUser(appUser1); } + return AjaxResult.success(); } @@ -798,6 +877,14 @@ chargingOrder.setOrderAmount(total); } + if(chargingOrder.getEndMode() != 1){ + chargingOrder.setEndMode(refundAmount.compareTo(BigDecimal.ZERO) > 0 ? 2 : 3); + } + chargingOrder.setStatus(5); + chargingOrder.setPaymentAmount(payAmount); + this.updateById(chargingOrder); + + //计算优惠券 if(null != chargingOrder.getAppCouponId()){ //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。 TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData(); @@ -838,9 +925,6 @@ chargingOrder.setVipDiscountAmount(subtract); payAmount = payAmount.subtract(subtract); } - chargingOrder.setPaymentAmount(payAmount); - this.updateById(chargingOrder); - //开始构建退款费用 if(refundAmount.compareTo(BigDecimal.ZERO) > 0){ Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); @@ -1307,8 +1391,7 @@ if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getCharging_gun_code())){ //获取当前的计费策略 TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getCharging_gun_code())); - TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); - TAccountingStrategyDetail strategyDetail = accountingStrategyDetailClient.getNowData(chargingGun.getAccountingStrategyId()).getData(); + AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderClient.getNowAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = chargingOrderAccountingStrategyService.getOne(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()).orderByDesc(TChargingOrderAccountingStrategy::getCreateTime).last(" limit 0, 1")); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); @@ -1397,4 +1480,64 @@ this.updateById(chargingOrder); } } + + + /** + * 自动结束充电后的处理逻辑 + * @param orderCode + */ + @Override + @GlobalTransactional(rollbackFor = Exception.class) + public void endCharge(String orderCode) { + TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, orderCode)); + Integer status = chargingOrder.getStatus(); + if(status == 4 || status == 5){ + return; + } + chargingOrder.setStatus(5); + chargingOrder.setEndMode(2); + this.updateById(chargingOrder); + + //计算费用,处理退款 + endCharge(chargingOrder); + + //处理推荐奖励(被推荐首单奖励) + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); + long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) + .eq(TChargingOrder::getStatus, 5).isNull(TChargingOrder::getEndMode).eq(TChargingOrder::getDelFlag, 0)); + if(null != appUser.getInviteUserId() && 1 == count){ + TIntegralRule integralRule = integralRuleClient.getSet().getData(); + String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints(); + JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints); + Integer num1 = jsonObject.getInteger("num1"); + GetInviteUser query = new GetInviteUser(); + query.setAppUserId(appUser.getInviteUserId()); + query.setBeInvitedAppUserId(chargingOrder.getAppUserId()); + TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData(); + if(null == inviteUser){ + inviteUser = new TInviteUser(); + inviteUser.setAppUserId(appUser.getInviteUserId()); + inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId()); + inviteUser.setAward(num1); + inviteUser.setCreateTime(LocalDateTime.now()); + inviteUserClient.saveInviteUser(inviteUser); + }else{ + inviteUser.setAward(num1); + inviteUserClient.updateInviteUser(inviteUser); + } + TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); + TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); + String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); + appUserIntegralChange.setCode(code); + appUserIntegralChange.setAppUserId(appUser.getInviteUserId()); + appUserIntegralChange.setChangeType(5); + appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); + appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); + appUserIntegralChange.setCreateTime(LocalDateTime.now()); + appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); + + appUser1.setPoints(appUser1.getPoints() + num1); + appUserClient.updateAppUser(appUser1); + } + } } -- Gitblit v1.7.1