diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java index 43067841..6de3f437 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java @@ -108,10 +108,13 @@ public class XhpcPileOrderController extends BaseController { //解析订单编号 //String s1 = orderNo.substring(6); Integer code = 500; - Long userId = update(0, remark, orderNo, 1); + Long userId=0L; Map map = new HashMap<>(); + if(status == 1|| status == 2){ + userId = update(0, remark, orderNo, 1); + map.put("userId", userId); + } XhpcChargeOrder xhpcChargeOrder = xhpcChargeOrderService.getSerialNumberMessage(orderNo); - map.put("userId", userId); if (status == 1) { xhpcChargeOrder.setStatus(0); map.put("message", "停止充电成功"); @@ -135,8 +138,22 @@ public class XhpcPileOrderController extends BaseController { BigDecimal decimal = new BigDecimal(10000); CacheRealtimeData cacheRealtimeData = list.get(number); xhpcChargeOrder.setChargingDegree(new BigDecimal(cacheRealtimeData.getChargingDegree()).divide(decimal)); + //充电时长 + Long tiem = Long.valueOf(cacheRealtimeData.getChargingTime() / 1000); + if (tiem > 3600) { + long hours = tiem / 3600; + double mins = (double) ((tiem - (hours * 3600)) / 60); + xhpcChargeOrder.setChargingTime(hours + "时" + new BigDecimal(mins).setScale(0) + "分"); + } else { + double mins = (double) (tiem / 60); + xhpcChargeOrder.setChargingTime(new BigDecimal(mins).setScale(0) + "分"); + } xhpcChargeOrder.setChargingTimeNumber(Long.valueOf(cacheRealtimeData.getChargingTime())); xhpcChargeOrder.setAmountCharged(new BigDecimal(cacheRealtimeData.getAmountCharged()).divide(decimal)); + xhpcChargeOrder.setEndSoc(""+cacheRealtimeData.getSoc()); + + CacheRealtimeData cacheRealtimeData1 = list.get(0); + xhpcChargeOrder.setStartSoc(""+cacheRealtimeData1.getSoc()); } }else{ if (xhpcChargeOrder.getStatus() == 1 || xhpcChargeOrder.getStatus() == 3) { @@ -147,6 +164,8 @@ public class XhpcPileOrderController extends BaseController { } xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); code = 300; + userId =xhpcChargeOrder.getUserId(); + map.put("userId",userId); map.put("message", remark); }else{ //修改订单,判断订单 @@ -174,6 +193,10 @@ public class XhpcPileOrderController extends BaseController { XhpcChargeOrder xhpcChargeOrder = xhpcChargeOrderService.getSerialNumberMessage(orderNo); Long userId = xhpcChargeOrder.getUserId(); try { + Date date = new Date(); + xhpcChargeOrder.setEndTime(date); + xhpcChargeOrder.setUpdateTime(date); + xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); Map map = addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, 1); JSONObject json = new JSONObject(map); //消息对了内容 @@ -303,7 +326,7 @@ public class XhpcPileOrderController extends BaseController { //电站活动抵扣--抵扣的总金额 BigDecimal promotionDiscount = new BigDecimal(0); //实际价格-用户支付的钱 - BigDecimal actPrice =new BigDecimal(0); + BigDecimal actPrice =money; //流量方总金额抽成 BigDecimal internetCommission =new BigDecimal(0); //流量方服务费抽成 @@ -322,7 +345,7 @@ public class XhpcPileOrderController extends BaseController { String state = ""; BigDecimal discount = new BigDecimal(0); //用户第几次充电 - int count = xhpcChargeOrderService.getCount(userId); + int count = xhpcChargeOrderService.getCount(userId,xhpcChargeOrder.getChargeOrderId()); if (count == 0) { //活动折扣 Map promotion = xhpcChargeOrderService.getPromotion(); @@ -333,11 +356,9 @@ public class XhpcPileOrderController extends BaseController { } } if(!"".equals(state)){ - //查看是否优惠为0 boolean fan = true; if(discount.compareTo(new BigDecimal(0))==0){ - actPrice= money; fan=false; } if("1".equals(state)){ @@ -687,7 +708,6 @@ public class XhpcPileOrderController extends BaseController { Long userId = xhpcChargeOrder.getUserId(); if (type == 1) { - //充电订单 --结束soc、充电时长、充电度数 xhpcChargeOrder.setEndTime(date); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcRealTimeOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcRealTimeOrderController.java index 322b4525..aea003d3 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcRealTimeOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcRealTimeOrderController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -84,12 +85,22 @@ public class XhpcRealTimeOrderController extends BaseController { } /** - *异常订单审核 + *异常订单审核详情 */ - @GetMapping("/getExamine") - public AjaxResult getExamine(@RequestParam Long chargingOrderId){ - return xhpcRealTimeOrderService.getExamine(chargingOrderId); + @GetMapping("/getExamineMessage") + public AjaxResult getExamineMessage(@RequestParam Long realTimeOrderId){ + return xhpcRealTimeOrderService.getExamineMessage(realTimeOrderId); } - + /** + * 异常订单审核 + * @param chargingOrderId 订单id + * @param powerPrice 电费 + * @param servicePrice 服务费 + * @return + */ + @GetMapping("/getExamine") + public AjaxResult getExamine(@RequestParam Long chargingOrderId,@RequestParam BigDecimal powerPrice,@RequestParam BigDecimal servicePrice){ + return xhpcRealTimeOrderService.getExamine(chargingOrderId,powerPrice,servicePrice); + } } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcChargeOrderMapper.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcChargeOrderMapper.java index 2c14f833..5135265f 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcChargeOrderMapper.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcChargeOrderMapper.java @@ -93,7 +93,7 @@ public interface XhpcChargeOrderMapper { * @param userId * @return */ - int getCount(@Param("userId") Long userId); + int getCount(@Param("userId") Long userId,@Param("chargeOrderId")Long chargeOrderId); /** * 活动 diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcRealTimeOrderMapper.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcRealTimeOrderMapper.java index 077237cc..def8fae0 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcRealTimeOrderMapper.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcRealTimeOrderMapper.java @@ -113,5 +113,5 @@ public interface XhpcRealTimeOrderMapper { */ XhpcRealTimeOrder getChargingOrderId(@Param("chargingOrderId")Long chargingOrderId); - + Map getChargeOrderById(@Param("chargingOrderId")Long chargingOrderId); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java index b1707dda..2ab674ec 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java @@ -62,7 +62,7 @@ public interface IXhpcChargeOrderService { * @param userId * @return */ - int getCount(Long userId); + int getCount(Long userId,Long chargeOrderId); /** * 活动 diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java index 99f6fb3f..c82b97bc 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java @@ -6,6 +6,7 @@ import com.xhpc.order.domain.XhpcChargeOrderSoc; import com.xhpc.order.domain.XhpcChargeOrderVoltage; import com.xhpc.order.domain.XhpcRealTimeOrder; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -89,12 +90,17 @@ public interface IXhpcRealTimeOrderService { */ int addVoltage(XhpcChargeOrderVoltage xhpcChargeOrderVoltage); - - /** * 审核详情 + * @param realTimeOrderId + * @return + */ + AjaxResult getExamineMessage(Long realTimeOrderId); + + /** + * 审核 * @param chargingOrderId * @return */ - AjaxResult getExamine(Long chargingOrderId); + AjaxResult getExamine(Long chargingOrderId, BigDecimal powerPrice,BigDecimal servicePrice); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java index b4d3cf31..07c5d373 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java @@ -237,9 +237,9 @@ public class XhpcChargeOrderServiceImpl implements IXhpcChargeOrderService { } @Override - public int getCount(Long userId) { + public int getCount(Long userId,Long chargeOrderId) { - return xhpcChargeOrderMapper.getCount(userId); + return xhpcChargeOrderMapper.getCount(userId,chargeOrderId); } @Override diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java index b04b4bb3..e834fbf4 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java @@ -1,8 +1,12 @@ package com.xhpc.order.service.impl; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import com.xhpc.common.api.SmsService; import com.xhpc.common.core.web.domain.AjaxResult; +import com.xhpc.common.data.redis.CacheRealtimeData; +import com.xhpc.common.redis.service.RedisService; import com.xhpc.order.domain.*; import com.xhpc.order.mapper.XhpcRealTimeOrderMapper; import com.xhpc.order.service.IXhpcChargeOrderService; @@ -10,6 +14,7 @@ import com.xhpc.order.service.IXhpcHistoryOrderService; import com.xhpc.order.service.IXhpcRealTimeOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; @@ -31,6 +36,12 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { @Autowired private IXhpcHistoryOrderService xhpcHistoryOrderService; + @Autowired + private SmsService smsService; + + @Autowired + private RedisService redisService; + @Override public List> list(String phone, String transactionNumber, Integer source, String chargingStationName, String terminalName, Long operatorId, String startTime, String endTime,Integer status,Long userId,Integer type) { @@ -87,10 +98,17 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { return xhpcRealTimeOrderMapper.addVoltage(xhpcChargeOrderVoltage); } + @Transactional @Override - public AjaxResult getExamine(Long chargingOrderId) { + public AjaxResult getExamineMessage(Long realTimeOrderId) { + + //基本信息 + Map message = xhpcRealTimeOrderMapper.getMessage(realTimeOrderId); + if(message ==null || message.get("chargeOrderId") ==null){ + return AjaxResult.success(new HashMap<>()); + } //获取开始充电时间、结束时间、计费模型、充电度数、已充金额 - XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getChargingOrderId(chargingOrderId); + XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getChargingOrderId(Long.parseLong(message.get("chargeOrderId").toString())); Long rateModelId = chargeOrder.getRateModelId(); Date startTime2 = chargeOrder.getStartTime(); Date updateTime2 = chargeOrder.getUpdateTime(); @@ -101,53 +119,256 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { //1时间没有跨天 long betweenDay = DateUtil.between(startTime2, updateTime2, DateUnit.DAY); if(betweenDay==0){ - //算出相差时间,分 - double time = (updateTime2.getTime()-startTime2.getTime())/60000; - BigDecimal decimal = new BigDecimal(time).setScale(2); - //每分钟多少度 - BigDecimal degree =chargingDegree.divide(decimal,2,BigDecimal.ROUND_HALF_UP); - //获取费率时间段 - String startTime = DateUtil.formatTime(startTime2); - String endTime = DateUtil.formatTime(updateTime2); - List> reatTimeList = xhpcHistoryOrderService.getReatTimeList(startTime, endTime, rateModelId); - if(reatTimeList !=null && reatTimeList.size()>0){ - int size = reatTimeList.size(); - if(size==1){ - BigDecimal powerFee = new BigDecimal(reatTimeList.get(0).get("powerFee").toString()); - powerPriceTotal = powerFee.multiply(chargingDegree).setScale(2); - }else{ - for (int i = 0; i objectMap = reatTimeList.get(i); - BigDecimal powerFee =new BigDecimal(objectMap.get("powerFee").toString()); - String startTime1 = objectMap.get("startTime").toString(); - String endTime1 = objectMap.get("endTime").toString(); - if(i==0){ + powerPriceTotal = getBigDecimal(rateModelId, startTime2, updateTime2, chargingDegree, powerPriceTotal); + }else{ + //跨天 + String startTime = DateUtil.format(startTime2, "yyyy-MM-dd"); + Date updateTime = DateUtil.parse(startTime+" 23:59:59"); + powerPriceTotal = getBigDecimal(rateModelId, startTime2, updateTime, chargingDegree, powerPriceTotal); + //明天 + DateTime tomorrow = DateUtil.offsetDay(startTime2,1); + String startTime1 = DateUtil.format(tomorrow, "yyyy-MM-dd"); + Date startTime3 = DateUtil.parse(startTime1+" 00:00:00"); + powerPriceTotal = getBigDecimal(rateModelId, startTime3, updateTime2, chargingDegree, powerPriceTotal); + } + //算服务费和电费 + BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal); + message.put("powerPriceTotal",powerPriceTotal); + message.put("servicePriceTotal",servicePriceTotal); + return AjaxResult.success(message); + } + + @Override + public AjaxResult getExamine(Long chargingOrderId, BigDecimal powerPrice, BigDecimal servicePrice) { + + //电费不能为0 + if(new BigDecimal(0).compareTo(powerPrice)==1){ + return AjaxResult.error("电费为0"); + } + //总金额 + BigDecimal money = powerPrice.add(servicePrice); + //总服务费 servicePrice + //总电费 powerPrice + //剩余的电费 + BigDecimal surplusPowerPrice = powerPrice; + //剩余的服务费 + BigDecimal surplusServicePrice = servicePrice; + + XhpcChargeOrder xhpcChargeOrder = xhpcChargeOrderService.getChargingOrderId(chargingOrderId); + xhpcChargeOrder.setStatus(3); + xhpcChargeOrder.setAmountCharged(money); + //生成一条历史订单 + XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder(); + xhpcHistoryOrder.setPowerPriceTotal(powerPrice); + xhpcHistoryOrder.setServicePriceTotal(servicePrice); + Long userId = xhpcChargeOrder.getUserId(); + Map userMessage = xhpcChargeOrderService.getUserMessage(userId); + if (userMessage == null || userMessage.get("balance") == null) { + //订单异常 + xhpcChargeOrder.setStatus(2); + //异常原因 + xhpcChargeOrder.setErroRemark("用户id:" + userId + "为空"); + } + BigDecimal balance = new BigDecimal(userMessage.get("balance").toString()).divide(new BigDecimal(100)); + //电站活动抵扣--抵扣的总金额 + BigDecimal promotionDiscount = new BigDecimal(0); + //实际价格-用户支付的钱 + BigDecimal actPrice =money; + //流量方总金额抽成 + BigDecimal internetCommission =new BigDecimal(0); + //流量方服务费抽成 + BigDecimal internetSvcCommission =new BigDecimal(0); + //平台总金额抽成 + BigDecimal platformCommission =new BigDecimal(0); + //平台服务费抽成 + BigDecimal platformSvcCommission =new BigDecimal(0); + //运维总抽成 + BigDecimal operationCommission =new BigDecimal(0); + //运维服务费抽成 + BigDecimal operationSvcCommission =new BigDecimal(0); + //判断是C端用户还是流量端用户 + if (xhpcChargeOrder.getSource() == 0) { + String state = ""; + BigDecimal discount = new BigDecimal(0); + //用户第几次充电 + int count = xhpcChargeOrderService.getCount(userId,xhpcChargeOrder.getChargeOrderId()); + if (count == 0) { + //活动折扣 + Map promotion = xhpcChargeOrderService.getPromotion(); + if (promotion != null && promotion.get("state") != null && promotion.get("discount") != null) { + //state 1.总金额 2.电费 3.服务费 discount 折扣率 + state = promotion.get("state").toString(); + discount =new BigDecimal(promotion.get("discount").toString()); + } + } + if(!"".equals(state)){ + + //查看是否优惠为0 + boolean fan = true; + if(discount.compareTo(new BigDecimal(0))==0){ + fan=false; + } + if("1".equals(state)){ + //总金额 + if(fan){ + promotionDiscount=money.multiply(discount); + actPrice = money.subtract(promotionDiscount); + surplusPowerPrice = surplusPowerPrice.subtract(promotionDiscount.divide(new BigDecimal(2))); + surplusServicePrice= surplusServicePrice.subtract(promotionDiscount.divide(new BigDecimal(2))); + } + }else if("2".equals(state)){ + if(fan){ + //电费 + promotionDiscount =powerPrice.multiply(balance); + actPrice = money.subtract(promotionDiscount); + surplusPowerPrice=surplusPowerPrice.subtract(promotionDiscount); + } + }else if("3".equals(state)){ + if(fan){ + //服务费 + promotionDiscount = servicePrice.multiply(balance); + actPrice = money.subtract(promotionDiscount); + surplusServicePrice =surplusServicePrice.subtract(promotionDiscount); + } + } + } + xhpcHistoryOrder.setInternetCommission(internetCommission); + xhpcHistoryOrder.setInternetSvcCommission(internetSvcCommission); + }else{ + //流量方,未实现 + } + //获取运营商 + Map operatorMessage = xhpcChargeOrderService.getOperatorMessage(xhpcChargeOrder.getChargingStationId()); + if(operatorMessage !=null){ + if(operatorMessage.get("maintenanceCommissionRate") !=null && operatorMessage.get("commissionType") !=null && operatorMessage.get("platformCommissionRate") !=null){ + Integer commissionType = (Integer) operatorMessage.get("commissionType"); + //运维提成 + BigDecimal maintenanceCommissionRate = new BigDecimal(operatorMessage.get("maintenanceCommissionRate").toString()).divide(new BigDecimal(100)); + //平台提成 + BigDecimal platformCommissionRate = new BigDecimal(operatorMessage.get("platformCommissionRate").toString()).divide(new BigDecimal(100)); + //提成类型(0总金额提成 1服务费提成) + if(commissionType==0){ + BigDecimal multiply1 = surplusPowerPrice.multiply(platformCommissionRate); + BigDecimal multiply2 = surplusServicePrice.multiply(platformCommissionRate); + platformCommission = multiply1.add(multiply2); + //剩下的钱 + surplusPowerPrice = surplusPowerPrice.subtract(multiply1); + surplusServicePrice = surplusServicePrice.subtract(multiply2); + BigDecimal multiply3 = surplusPowerPrice.multiply(maintenanceCommissionRate); + BigDecimal multiply4 = surplusServicePrice.multiply(maintenanceCommissionRate); + operationCommission = multiply1.add(multiply2); + //剩下的钱 + surplusPowerPrice = surplusPowerPrice.subtract(multiply3); + surplusServicePrice = surplusServicePrice.subtract(multiply4); + + }else if(commissionType==1){ + BigDecimal multiply2 = surplusServicePrice.multiply(platformCommissionRate); + platformSvcCommission=multiply2; + //剩下的钱 + surplusServicePrice = surplusServicePrice.subtract(multiply2); + + BigDecimal multiply4 = surplusServicePrice.multiply(maintenanceCommissionRate); + operationCommission = multiply4; + //剩下的钱 + surplusServicePrice = surplusServicePrice.subtract(multiply4); + } + }else{ + //订单异常 + xhpcChargeOrder.setStatus(2); + //异常原因 + xhpcChargeOrder.setErroRemark("运营商数据为空"); + } + } + Long chargeOrderId = xhpcChargeOrder.getChargeOrderId(); + xhpcHistoryOrder.setChargeOrderId(chargeOrderId); + xhpcHistoryOrder.setChargingStationId(xhpcChargeOrder.getChargingStationId()); + xhpcHistoryOrder.setUserId(userId); + xhpcHistoryOrder.setTerminalId(xhpcChargeOrder.getTerminalId()); + xhpcHistoryOrder.setSerialNumber(xhpcChargeOrder.getSerialNumber()); + xhpcHistoryOrder.setStartSoc(xhpcChargeOrder.getStartSoc()); + xhpcHistoryOrder.setReconciliationStatus(0); + xhpcHistoryOrder.setSortingStatus(0); + xhpcHistoryOrder.setType(1); + //订单总价---运维服务费抽成 + xhpcHistoryOrder.setTotalPrice(money.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setPromotionDiscount(promotionDiscount.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setActPrice(actPrice.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setActPowerPrice(surplusPowerPrice.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setActServicePrice(surplusServicePrice.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setInternetCommission(internetCommission.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setInternetSvcCommission(internetSvcCommission.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setPlatformCommission(platformCommission.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setPlatformSvcCommisssion(platformSvcCommission.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setOperationCommission(operationCommission.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setOperationSvcCommission(operationSvcCommission.setScale(2, BigDecimal.ROUND_HALF_UP)); + xhpcHistoryOrder.setStartSoc(xhpcChargeOrder.getStartSoc()); + xhpcHistoryOrder.setEndSoc(xhpcChargeOrder.getEndSoc()); + xhpcHistoryOrder.setReconciliationStatus(0); + Date date = new Date(); + xhpcHistoryOrder.setCreateTime(date); + + //扣除用户实际消费金额,添加消费记录 + Map user = xhpcChargeOrderService.getUserMessage(userId); + //剩余的钱 + BigDecimal balance1 =(BigDecimal) user.get("balance"); + BigDecimal subtract = balance1.subtract(actPrice); + int i = xhpcChargeOrderService.updateUserBalance(userId, subtract); + if(i==0){ + //扣钱失败 + xhpcHistoryOrder.setStatus(2); + xhpcHistoryOrder.setRemark("扣钱失败"); + }else{ + xhpcHistoryOrderService.insert(xhpcHistoryOrder); + // addPileEndOrder(xhpcHistoryOrder, xhpcChargeOrder, xhpcChargeOrder.getSerialNumber()); + //添加流水 + xhpcChargeOrderService.addUserAccountStatement(userId, actPrice.negate(), subtract, xhpcChargeOrder.getChargeOrderId(), 3, date); + } + xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); + + return AjaxResult.success(); + } + + + private BigDecimal getBigDecimal(Long rateModelId, Date startTime2, Date updateTime2, BigDecimal chargingDegree, BigDecimal powerPriceTotal) { + + //算出相差时间,分 + double time = (updateTime2.getTime()-startTime2.getTime())/60000; + BigDecimal decimal = new BigDecimal(time).setScale(2); + //每分钟多少度 + BigDecimal degree =chargingDegree.divide(decimal,2,BigDecimal.ROUND_HALF_UP); + //获取费率时间段 + String startTime = DateUtil.formatTime(startTime2); + String endTime = DateUtil.formatTime(updateTime2); + List> reatTimeList = xhpcHistoryOrderService.getReatTimeList(startTime, endTime, rateModelId); + if(reatTimeList !=null && reatTimeList.size()>0){ + int size = reatTimeList.size(); + if(size==1){ + BigDecimal powerFee = new BigDecimal(reatTimeList.get(0).get("powerFee").toString()); + powerPriceTotal = powerFee.multiply(chargingDegree).setScale(2, RoundingMode.HALF_UP); + }else{ + for (int i = 0; i objectMap = reatTimeList.get(i); + BigDecimal powerFee =new BigDecimal(objectMap.get("powerFee").toString()); + String startTime1 = objectMap.get("startTime").toString(); + String endTime1 = objectMap.get("endTime").toString(); + if(i==0){ + powerPriceTotal=getRateTimeList(startTime1,endTime,degree,powerFee,powerPriceTotal); + }else{ + if(size==2){ powerPriceTotal=getRateTimeList(startTime1,endTime,degree,powerFee,powerPriceTotal); }else{ - if(size==2){ - powerPriceTotal=getRateTimeList(startTime1,endTime,degree,powerFee,powerPriceTotal); + //三个时段以上 + if(i message = new HashMap<>(); - message.put("powerPriceTotal",powerPriceTotal); - message.put("servicePriceTotal",servicePriceTotal); - return AjaxResult.success(message); + return powerPriceTotal; } private BigDecimal getRateTimeList(String startTime,String endTime,BigDecimal s,BigDecimal powerFee,BigDecimal powerPriceTotal){ @@ -164,4 +385,167 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService { xhpcRealTimeOrderMapper.deleteChargeVoltage(chargingOrderId); } + private void addPileEndOrder(XhpcHistoryOrder xhpcHistoryOrder, XhpcChargeOrder xhpcChargeOrder,String orderNo) { + Map cacheMap = redisService.getCacheMap("order:" + orderNo); + Date date = new Date(); + Long chargeOrderId = xhpcChargeOrder.getChargeOrderId(); + //删除实时数据,获取最新的实时数据 + deleteRealTimeOrder(xhpcChargeOrder.getChargeOrderId()); + //添加新的实时数据 + List list = (List) cacheMap.get("realtimeDataList"); + if (list != null && list.size() > 0) { + for (CacheRealtimeData cacheRealtimeData : list) { + addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, 2); + } + } + //添加redis到数据库 + XhpcOrderRedisRecord xhpcOrderRedisRecord =new XhpcOrderRedisRecord(); + xhpcOrderRedisRecord.setChargeOrderId(chargeOrderId); + xhpcOrderRedisRecord.setHistoryOrderOd(xhpcHistoryOrder.getHistoryOrderId()); + if(cacheMap.get("endSoc") !=null){ + xhpcOrderRedisRecord.setEndSoc(cacheMap.get("endSoc").toString()); + } + if(cacheMap.get("status") !=null){ + xhpcOrderRedisRecord.setStatus(cacheMap.get("status").toString()); + } + if(cacheMap.get("balance") !=null){ + xhpcOrderRedisRecord.setBalance(cacheMap.get("balance").toString()); + } + if(cacheMap.get("tel") !=null){ + xhpcOrderRedisRecord.setTel(cacheMap.get("tel").toString()); + } + if(cacheMap.get("startSoc") !=null){ + xhpcOrderRedisRecord.setStartSoc(cacheMap.get("startSoc").toString()); + } + if(cacheMap.get("startResult") !=null){ + xhpcOrderRedisRecord.setStartResult(cacheMap.get("startResult").toString()); + } + if(cacheMap.get("realtimeDataList") !=null){ + xhpcOrderRedisRecord.setRealtimeDataList(cacheMap.get("realtimeDataList").toString()); + } + if(cacheMap.get("remainingTime") !=null){ + xhpcOrderRedisRecord.setRemainingTime(cacheMap.get("remainingTime").toString()); + } + if(cacheMap.get("rateModelId") !=null){ + xhpcOrderRedisRecord.setRateModelId(cacheMap.get("rateModelId").toString()); + } + if(cacheMap.get("lt5alerted") !=null){ + xhpcOrderRedisRecord.setLt5alerted(cacheMap.get("lt5alerted").toString()); + } + if(cacheMap.get("orderData") !=null){ + xhpcOrderRedisRecord.setOrderData(cacheMap.get("orderData").toString()); + } + xhpcOrderRedisRecord.setCreateTime(date); + xhpcChargeOrderService.addXhpcOrderRedisRecord(xhpcOrderRedisRecord); + + //删除redis + //redisService.deleteObject("order:"+orderNo); + + } + + + + /** + * 添加实时数据 + * + * @param cacheRealtimeData + * @param xhpcChargeOrder + * @param orderNo 订单号 + * @param type 1.实时数据回调 2.结算回调 + * @return + */ + private void addOrderTime(CacheRealtimeData cacheRealtimeData, XhpcChargeOrder xhpcChargeOrder, + String orderNo, Integer type) { + + Map map = new HashMap<>(); + Date date = new Date(); + Long chargeOrderId = xhpcChargeOrder.getChargeOrderId(); + XhpcRealTimeOrder xhpcRealTimeOrder = new XhpcRealTimeOrder(); + xhpcRealTimeOrder.setChargingOrderId(xhpcChargeOrder.getChargeOrderId()); + xhpcRealTimeOrder.setTransactionNumber(orderNo); + xhpcRealTimeOrder.setPileNumber(cacheRealtimeData.getPileNo()); + String gunId = cacheRealtimeData.getGunId(); + xhpcRealTimeOrder.setGunNumber(gunId); + if("00".equals(cacheRealtimeData.getPileGunStatus())){ + xhpcRealTimeOrder.setPileGunStatus(0); + }else if("01".equals(cacheRealtimeData.getPileGunStatus())){ + xhpcRealTimeOrder.setPileGunStatus(1); + }else{ + xhpcRealTimeOrder.setPileGunStatus(2); + } + if("00".equals(cacheRealtimeData.getVehicleGunStatus())){ + xhpcRealTimeOrder.setVehicleGunStatus(0); + }else{ + xhpcRealTimeOrder.setVehicleGunStatus(1); + } + BigDecimal v = new BigDecimal(cacheRealtimeData.getWorkingVoltage()).divide(new BigDecimal(10)); + BigDecimal c = new BigDecimal(cacheRealtimeData.getWorkingCurrent()).divide(new BigDecimal(10)); + xhpcRealTimeOrder.setVoltage(v); + xhpcRealTimeOrder.setElectricCurrent(c); + xhpcRealTimeOrder.setGunLineTemperature(cacheRealtimeData.getGunLineTemperature()); + xhpcRealTimeOrder.setGunLineNumber(cacheRealtimeData.getGunLineNumber()); + Integer soc = cacheRealtimeData.getSoc(); + xhpcRealTimeOrder.setSoc(soc.toString()); + xhpcRealTimeOrder.setMaxTemperature(cacheRealtimeData.getMaxTemperature()); + Integer chargingTime = cacheRealtimeData.getChargingTime(); + if(chargingTime>60){ + int hours = chargingTime / 60; + int mins = (chargingTime-(hours*60)) % 60; + xhpcRealTimeOrder.setChargingTime(hours+"时"+mins+"分"); + }else{ + xhpcRealTimeOrder.setChargingTime(chargingTime+"分"); + } + Integer remainingTime = cacheRealtimeData.getRemainingTime(); + if(remainingTime>60){ + int hours = remainingTime / 60; + double mins = (remainingTime-(hours*60))/60; + xhpcRealTimeOrder.setRemainingTime(hours+"时"+new BigDecimal(mins).setScale(0)+"分"); + }else{ + double mins = (double)(remainingTime/60); + xhpcRealTimeOrder.setRemainingTime(new BigDecimal(mins).setScale(0)+"分"); + } + BigDecimal decimal = new BigDecimal(10000); + BigDecimal divide = new BigDecimal(cacheRealtimeData.getLossChargingDegree()).divide(decimal); + BigDecimal chargingDegree = new BigDecimal(cacheRealtimeData.getChargingDegree()).divide(decimal); + xhpcRealTimeOrder.setChargingDegree(chargingDegree); + xhpcRealTimeOrder.setLossChargingDegree(divide); + BigDecimal amountCharged = new BigDecimal(cacheRealtimeData.getAmountCharged()).divide(decimal); + xhpcRealTimeOrder.setAmountCharged(amountCharged); + xhpcRealTimeOrder.setHardwareFault(cacheRealtimeData.getHardwareFault()); + if ("00".equals(cacheRealtimeData.getStatus())) { + xhpcRealTimeOrder.setStatus(0); + } else if ("01".equals(cacheRealtimeData.getStatus())) { + xhpcRealTimeOrder.setStatus(1); + } else if ("02".equals(cacheRealtimeData.getStatus())) { + xhpcRealTimeOrder.setStatus(2); + } else { + xhpcRealTimeOrder.setStatus(3); + } + xhpcRealTimeOrder.setCreateTime(date); + xhpcRealTimeOrder.setUserId(xhpcChargeOrder.getUserId()); + Long chargingStationId = xhpcChargeOrder.getChargingStationId(); + xhpcRealTimeOrder.setChargingStationId(chargingStationId); + + addXhpcRealTimeOrder(xhpcRealTimeOrder); + //实时数据存入MYsql、soc、电流、电压 + + XhpcChargeOrderSoc xhpcChargeOrderSoc = new XhpcChargeOrderSoc(); + xhpcChargeOrderSoc.setChargeOrderId(chargeOrderId); + xhpcChargeOrderSoc.setSoc(soc.toString()); + xhpcChargeOrderSoc.setCreateTime(date); + addSOC(xhpcChargeOrderSoc); + + XhpcChargeOrderCurrent xhpcChargeOrderCurrent =new XhpcChargeOrderCurrent(); + xhpcChargeOrderCurrent.setChargeOrderId(chargeOrderId); + xhpcChargeOrderCurrent.setCurrent(c.toString()); + xhpcChargeOrderCurrent.setCreateTime(date); + addCurrent(xhpcChargeOrderCurrent); + + XhpcChargeOrderVoltage xhpcChargeOrderVoltage =new XhpcChargeOrderVoltage(); + xhpcChargeOrderVoltage.setChargeOrderId(chargeOrderId); + xhpcChargeOrderVoltage.setVoltage(v.toString()); + xhpcChargeOrderVoltage.setCreateTime(date); + addVoltage(xhpcChargeOrderVoltage); + + } } diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml index a57296c7..b0b53907 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml @@ -302,7 +302,10 @@ diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcRealTimeOrderMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcRealTimeOrderMapper.xml index a080fd96..255b5e05 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcRealTimeOrderMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcRealTimeOrderMapper.xml @@ -458,6 +458,7 @@ + + \ No newline at end of file