| | |
| | | chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); |
| | | SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>(); |
| | | for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) { |
| | | Class<? extends TransactionRecordMessageVO> clazz = vo.getClass(); |
| | | try { |
| | | AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i); |
| | | //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) |
| | | Object invoke = null; |
| | | switch (strategyDetail.getType()){ |
| | | case 1: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 2: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 3: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 4: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | try { |
| | | //跨天 |
| | | if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){ |
| | | //当天的 |
| | | //开始通过计费策略遍历解析每个时段的费用明细 |
| | | String start_time = vo.getStart_time(); |
| | | String end_time = vo.getEnd_time(); |
| | | long start = sdfs.parse(start_time).getTime(); |
| | | long end = sdfs.parse(end_time).getTime(); |
| | | boolean b = false; |
| | | Class<? extends TransactionRecordMessageVO> clazz = vo.getClass(); |
| | | for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) { |
| | | AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i); |
| | | long time = sdfs.parse(start_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime(); |
| | | if(start >= time){ |
| | | b = true; |
| | | } |
| | | //开始充电 |
| | | if(b){ |
| | | //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) |
| | | Object invoke = null; |
| | | switch (strategyDetail.getType()){ |
| | | case 1: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 2: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 3: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 4: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | } |
| | | if(null == invoke || Double.valueOf(invoke.toString()) == 0){ |
| | | continue; |
| | | } |
| | | BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); |
| | | AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); |
| | | BeanUtils.copyProperties(strategyDetail, vo1); |
| | | vo1.setChargingCapacity(sharp_peak_charge); |
| | | lists.add(vo1); |
| | | } |
| | | } |
| | | if(null == invoke || Double.valueOf(invoke.toString()) == 0){ |
| | | continue; |
| | | |
| | | //第二天的 |
| | | //开始通过计费策略遍历解析每个时段的费用明细 |
| | | for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) { |
| | | AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i); |
| | | long time = sdfs.parse(end_time.split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime(); |
| | | if(time > end){ |
| | | break; |
| | | } |
| | | //开始充电 |
| | | if(b){ |
| | | //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) |
| | | Object invoke = null; |
| | | switch (strategyDetail.getType()){ |
| | | case 1: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 2: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 3: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 4: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | } |
| | | if(null == invoke || Double.valueOf(invoke.toString()) == 0){ |
| | | continue; |
| | | } |
| | | BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); |
| | | AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); |
| | | BeanUtils.copyProperties(strategyDetail, vo1); |
| | | vo1.setChargingCapacity(sharp_peak_charge); |
| | | lists.add(vo1); |
| | | } |
| | | } |
| | | BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); |
| | | AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); |
| | | BeanUtils.copyProperties(strategyDetail, vo1); |
| | | vo1.setStart(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime()); |
| | | vo1.setEnd(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime()); |
| | | vo1.setChargingCapacity(sharp_peak_charge); |
| | | lists.add(vo1); |
| | | } catch (IllegalAccessException e) { |
| | | throw new RuntimeException(e); |
| | | } catch (InvocationTargetException e) { |
| | | throw new RuntimeException(e); |
| | | } catch (NoSuchMethodException e) { |
| | | throw new RuntimeException(e); |
| | | } catch (ParseException e) { |
| | | throw new RuntimeException(e); |
| | | }else{ |
| | | for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) { |
| | | Class<? extends TransactionRecordMessageVO> clazz = vo.getClass(); |
| | | AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderList.get(i); |
| | | //阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段) |
| | | Object invoke = null; |
| | | switch (strategyDetail.getType()){ |
| | | case 1: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getSpike_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 2: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getPeak_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 3: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getFlat_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | case 4: |
| | | //充电度数 |
| | | invoke = clazz.getMethod("getValley_charge" + (i + 1)).invoke(vo); |
| | | break; |
| | | } |
| | | if(null == invoke || Double.valueOf(invoke.toString()) == 0){ |
| | | continue; |
| | | } |
| | | BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString()); |
| | | AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo(); |
| | | BeanUtils.copyProperties(strategyDetail, vo1); |
| | | vo1.setChargingCapacity(sharp_peak_charge); |
| | | lists.add(vo1); |
| | | } |
| | | } |
| | | } |
| | | Collections.sort(lists, new Comparator<AccountingStrategyDetailOrderVo>() { |
| | | public int compare(AccountingStrategyDetailOrderVo s1, AccountingStrategyDetailOrderVo s2) { |
| | | return s1.getStart() < s2.getStart() ? -1 : s1.getStart() == s2.getStart() ? 0 : 1; |
| | | } |
| | | }); |
| | | if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){ |
| | | List<AccountingStrategyDetailOrderVo> list1 = new ArrayList<>(lists); |
| | | for (AccountingStrategyDetailOrderVo orderVo : list1) { |
| | | Calendar start = Calendar.getInstance(); |
| | | start.setTimeInMillis(orderVo.getStart()); |
| | | start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1); |
| | | orderVo.setStart(start.getTimeInMillis()); |
| | | Calendar end = Calendar.getInstance(); |
| | | end.setTimeInMillis(orderVo.getEnd()); |
| | | end.set(Calendar.DAY_OF_YEAR, end.get(Calendar.DAY_OF_YEAR) + 1); |
| | | orderVo.setEnd(end.getTimeInMillis()); |
| | | } |
| | | lists.addAll(list1); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | //开始处理明细 |