| package com.ruoyi.integration.iotda.utils.tools; | 
|   | 
| import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; | 
| import com.ruoyi.common.core.utils.DateUtils; | 
| import com.ruoyi.integration.api.model.AcquisitionBillingModeReply; | 
| import lombok.extern.slf4j.Slf4j; | 
|   | 
| import java.io.Serializable; | 
| import java.math.BigDecimal; | 
| import java.time.LocalTime; | 
| import java.util.*; | 
| import java.util.stream.Collectors; | 
|   | 
| @Slf4j | 
| public class StrategyUtil implements Serializable { | 
|   | 
|   | 
|     /** | 
|      * 获取计费模版的价格 | 
|      * @return | 
|      */ | 
|     public static Map<Integer, TAccountingStrategyDetail> getStrategyPrice(List<TAccountingStrategyDetail> accountingStrategyDetails) { | 
|         Map<Integer, TAccountingStrategyDetail> phaseToServiceFee = new HashMap<>(); | 
|         for (TAccountingStrategyDetail detail : accountingStrategyDetails) { | 
|             Integer type = detail.getType(); | 
|             if (!phaseToServiceFee.containsKey(type)) { | 
|                 phaseToServiceFee.put(type, detail); | 
|             } | 
|         } | 
|         return phaseToServiceFee; | 
|     } | 
|     /** | 
|      * 计费模版的价格设置 | 
|      * @return | 
|      */ | 
|     public static void setStrategyPrice(Map<Integer, TAccountingStrategyDetail> accountingStrategyDetails,AcquisitionBillingModeReply acquisitionBillingModeReply) { | 
|         accountingStrategyDetails.forEach((k,v)->{ | 
|             BigDecimal electrovalence = v.getElectrovalence(); | 
|             BigDecimal serviceCharge = v.getServiceCharge(); | 
|             if(Objects.isNull(electrovalence)){ | 
|                 electrovalence = BigDecimal.ZERO; | 
|             } | 
|             if(Objects.isNull(serviceCharge)){ | 
|                 serviceCharge = BigDecimal.ZERO; | 
|             } | 
|             switch (k){ | 
|                 case 1: | 
|                     acquisitionBillingModeReply.setSharp_peak_electricity_rate(electrovalence); | 
|                     acquisitionBillingModeReply.setSharp_peak_service_rate(serviceCharge); | 
|                     break; | 
|                 case 2: | 
|                     acquisitionBillingModeReply.setPeak_electricity_rate(electrovalence); | 
|                     acquisitionBillingModeReply.setPeak_service_rate(serviceCharge); | 
|                     break; | 
|                 case 3: | 
|                     acquisitionBillingModeReply.setFlat_peak_electricity_rate(electrovalence); | 
|                     acquisitionBillingModeReply.setFlat_peak_service_rate(serviceCharge); | 
|                     break; | 
|                 default: | 
|                     acquisitionBillingModeReply.setLow_peak_electricity_rate(electrovalence); | 
|                     acquisitionBillingModeReply.setLow_peak_service_rate(serviceCharge); | 
|                     break; | 
|             } | 
|         }); | 
|     } | 
|   | 
|     /** | 
|      * 计费模版的时段设置 | 
|      * @return | 
|      */ | 
|     public static void setTime(List<TAccountingStrategyDetail> accountingStrategyDetails,AcquisitionBillingModeReply acquisitionBillingModeReply) { | 
|         LocalTime time = LocalTime.of(0, 15, 0); | 
|         for (int i = 1; i <= 48; i++) { | 
|             if(i != 1){ | 
|                 time = time.plusMinutes(30); | 
|             } | 
|             accountingStrategyDetails = accountingStrategyDetails.stream().sorted(Comparator.comparing(TAccountingStrategyDetail::getStartTime)).collect(Collectors.toList()); | 
|             for (TAccountingStrategyDetail accountingStrategyDetail : accountingStrategyDetails) { | 
|                 String startTime = accountingStrategyDetail.getStartTime(); | 
|                 String endTime = accountingStrategyDetail.getEndTime(); | 
|                 if("00:00".equals(endTime)){ | 
|                     endTime = "23:59"; | 
|                 } | 
|                 if(DateUtils.string2LocalTime(startTime + ":00").isBefore(time) | 
|                         && DateUtils.string2LocalTime(endTime + ":00").isAfter(time)){ | 
|                     switch (i){ | 
|                         case 1: | 
|                             acquisitionBillingModeReply.setTime1(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 2: | 
|                             acquisitionBillingModeReply.setTime2(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 3: | 
|                             acquisitionBillingModeReply.setTime3(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 4: | 
|                             acquisitionBillingModeReply.setTime4(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 5: | 
|                             acquisitionBillingModeReply.setTime5(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 6: | 
|                             acquisitionBillingModeReply.setTime6(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 7: | 
|                             acquisitionBillingModeReply.setTime7(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 8: | 
|                             acquisitionBillingModeReply.setTime8(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 9: | 
|                             acquisitionBillingModeReply.setTime9(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 10: | 
|                             acquisitionBillingModeReply.setTime10(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 11: | 
|                             acquisitionBillingModeReply.setTime11(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 12: | 
|                             acquisitionBillingModeReply.setTime12(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 13: | 
|                             acquisitionBillingModeReply.setTime13(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 14: | 
|                             acquisitionBillingModeReply.setTime14(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 15: | 
|                             acquisitionBillingModeReply.setTime15(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 16: | 
|                             acquisitionBillingModeReply.setTime16(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 17: | 
|                             acquisitionBillingModeReply.setTime17(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 18: | 
|                             acquisitionBillingModeReply.setTime18(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 19: | 
|                             acquisitionBillingModeReply.setTime19(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 20: | 
|                             acquisitionBillingModeReply.setTime20(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 21: | 
|                             acquisitionBillingModeReply.setTime21(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 22: | 
|                             acquisitionBillingModeReply.setTime22(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 23: | 
|                             acquisitionBillingModeReply.setTime23(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 24: | 
|                             acquisitionBillingModeReply.setTime24(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 25: | 
|                             acquisitionBillingModeReply.setTime25(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 26: | 
|                             acquisitionBillingModeReply.setTime26(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 27: | 
|                             acquisitionBillingModeReply.setTime27(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 28: | 
|                             acquisitionBillingModeReply.setTime28(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 29: | 
|                             acquisitionBillingModeReply.setTime29(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 30: | 
|                             acquisitionBillingModeReply.setTime30(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 31: | 
|                             acquisitionBillingModeReply.setTime31(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 32: | 
|                             acquisitionBillingModeReply.setTime32(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 33: | 
|                             acquisitionBillingModeReply.setTime33(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 34: | 
|                             acquisitionBillingModeReply.setTime34(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 35: | 
|                             acquisitionBillingModeReply.setTime35(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 36: | 
|                             acquisitionBillingModeReply.setTime36(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 37: | 
|                             acquisitionBillingModeReply.setTime37(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 38: | 
|                             acquisitionBillingModeReply.setTime38(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 39: | 
|                             acquisitionBillingModeReply.setTime39(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 40: | 
|                             acquisitionBillingModeReply.setTime40(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 41: | 
|                             acquisitionBillingModeReply.setTime41(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 42: | 
|                             acquisitionBillingModeReply.setTime42(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 43: | 
|                             acquisitionBillingModeReply.setTime43(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 44: | 
|                             acquisitionBillingModeReply.setTime44(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 45: | 
|                             acquisitionBillingModeReply.setTime45(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 46: | 
|                             acquisitionBillingModeReply.setTime46(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 47: | 
|                             acquisitionBillingModeReply.setTime47(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                         case 48: | 
|                             acquisitionBillingModeReply.setTime48(accountingStrategyDetail.getType().equals(1)?0 | 
|                                     :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); | 
|                             break; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
| } |