From 4e53338c0c6859a43693f3f690f0c05da888a02e Mon Sep 17 00:00:00 2001
From: liuhaonan <31457034@qq.com>
Date: 星期五, 12 八月 2022 11:48:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java |  188 ++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 155 insertions(+), 33 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java
index 3f6aaf8..e9548ed 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3ChargingService.java
@@ -2,11 +2,13 @@
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.pagehelper.PageHelper;
+import com.sandu.common.domain.CommonPage;
 import com.sandu.common.execption.BusinessException;
 import com.sandu.common.object.BaseConditionVO;
 import com.sandu.common.service.impl.BaseServiceImpl;
+import com.sandu.common.util.SpringContextHolder;
 import com.sandu.ximon.admin.config.C3mRedisConfig;
+import com.sandu.ximon.admin.dto.ChargingDto;
 import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
 import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3HeartbeatReportInnerFrame;
 import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3OperationReportInnerFrame;
@@ -19,25 +21,23 @@
 import com.sandu.ximon.admin.param.C3ChargingAddParam;
 import com.sandu.ximon.admin.param.C3ChargingParam;
 import com.sandu.ximon.admin.security.SecurityUtils;
+import com.sandu.ximon.admin.utils.ListPagingUtils;
 import com.sandu.ximon.admin.utils.LogUtils;
 import com.sandu.ximon.admin.utils.RedisUtils;
 import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
 import com.sandu.ximon.admin.vo.EquipmentInfomation;
 import com.sandu.ximon.dao.bo.C3ChargingBo;
-import com.sandu.ximon.dao.domain.C3mCharging;
-import com.sandu.ximon.dao.domain.C3mChargingCharge;
-import com.sandu.ximon.dao.domain.Pole;
-import com.sandu.ximon.dao.domain.PoleBinding;
+import com.sandu.ximon.dao.domain.*;
+import com.sandu.ximon.dao.enums.OrderStatus;
 import com.sandu.ximon.dao.mapper.C3mChargingMapper;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @author ZZQ
@@ -71,7 +71,7 @@
     }
 
     /**
-     * 淇濆瓨涓婃姤C3鍏呯數璁惧蹇冭烦鏁版嵁
+     * 淇濆瓨涓婃姤C3鍏呯數璁惧
      *
      * @return 鏄惁鎴愬姛
      */
@@ -172,10 +172,7 @@
      *
      * @return
      */
-    public List<C3ChargingBo> getC3ChargingListByKeyword(BaseConditionVO baseConditionVO, C3ChargingParam c3ChargingParam) {
-        if (baseConditionVO != null) {
-            PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
-        }
+    public Map getC3ChargingListByKeyword(BaseConditionVO baseConditionVO, C3ChargingParam c3ChargingParam) {
         if (c3ChargingParam == null) {
             c3ChargingParam = new C3ChargingParam();
         }
@@ -191,42 +188,133 @@
         } else {
             c3ChargingBoList = c3mChargingMapper.listC3mChargingDto(c3ChargingParam.getKeyword(), SecurityUtils.getUserId());
         }
+        //鍦ㄧ嚎鏁伴噺
+        int onlineNumber = 0;
+        //绂荤嚎鏁伴噺
+        int offlineNumber = 0;
+        //鏁呴殰鏁伴噺
+        int faultNumber = 0;
+        //绛夊緟鎺ュ叆鏁伴噺
+        int waitConnectNumber = 0;
+
         for (C3ChargingBo one : c3ChargingBoList) {
             String s = RedisUtils.getBean().get(C3mRedisConstant.C3_STATUS.getCode() + one.getC3Mac());
             if (s != null) {
                 try {
                     A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage beatDataPackage = JSON.parseObject(s, A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage.class);
                     one.setStatusBit((Integer.valueOf(beatDataPackage.getStatusBit())));
+                    switch (Integer.valueOf(beatDataPackage.getStatusBit())) {
+                        //1.绌洪棽
+                        case 1:
+                            onlineNumber = onlineNumber + 1;
+                            break;
+                        //2.鍏呯數涓�
+                        case 2:
+                            onlineNumber = onlineNumber + 1;
+                            break;
+                        //3.鍏呯數涓柇锛岀瓑寰呮湇鍔″櫒纭
+                        case 3:
+                            onlineNumber = onlineNumber + 1;
+                            break;
+                        //4.鍏呯數缁撴潫锛岀瓑寰呮湇鍔″櫒纭
+                        case 4:
+                            onlineNumber = onlineNumber + 1;
+                            break;
+                        //5.鏈夋晠闅�
+                        case 5:
+                            faultNumber = faultNumber + 1;
+                            break;
+                        //6.涓庡厖鐢垫々瀵规帴涓�
+                        case 6:
+                            waitConnectNumber = waitConnectNumber + 1;
+                            break;
+                        default:
+                    }
                 } catch (Exception e) {
                     e.printStackTrace();
+                    offlineNumber = offlineNumber + 1;
                 }
             } else {
                 one.setStatusBit(0);
+                offlineNumber = offlineNumber + 1;
             }
 
+        }
+        Map map = new LinkedHashMap();
+        CommonPage commonPage = ListPagingUtils.pages(c3ChargingBoList, baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
+        map.put("pageNum", commonPage.getPageNum());
+        map.put("pageSize", commonPage.getPageSize());
+        map.put("totalPage", commonPage.getTotalPage());
+        map.put("total", commonPage.getTotal());
+        map.put("list", commonPage.getList());
+        map.put("onlineNumber", onlineNumber);
+        map.put("offlineNumber", offlineNumber);
+        map.put("faultNumber", faultNumber);
+        map.put("waitConnectNumber", waitConnectNumber);
+
+        return map;
+    }
+
+    /**
+     * 棣栭〉缁熻鍏呯數妗╁垪琛ㄦ暟鎹�
+     *
+     * @return
+     */
+    public List<C3ChargingBo> getC3ChargingList() {
+
+        List<C3ChargingBo> c3ChargingBoList;
+        if (SecurityUtils.getClientId() == null) {
+            c3ChargingBoList = c3mChargingMapper.listC3mChargingDto(null, null);
+        } else {
+            c3ChargingBoList = c3mChargingMapper.listC3mChargingDto(null, SecurityUtils.getUserId());
         }
         return c3ChargingBoList;
     }
 
     /**
-     * 鏌ヨ鍏呯數妗�
+     * 鑾峰彇鍏呯數妗╄鎯�
      *
      * @return
      */
-    public C3mCharging getByC3Mac(String udid) {
-        C3mCharging one = getOne(Wrappers.lambdaQuery(C3mCharging.class).eq(C3mCharging::getMcuUdid, udid));
-        String s = RedisUtils.getBean().get(C3mRedisConstant.C3_STATUS.getCode() + one.getC3Mac());
-        if (s != null) {
-            try {
-                A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage beatDataPackage = JSON.parseObject(s, A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage.class);
-                one.setStatusBit((Integer.valueOf(beatDataPackage.getStatusBit())));
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        } else {
-            one.setStatusBit(0);
+    public ChargingDto getChargingInfo(String poleId) {
+        if (poleId == null) {
+            throw new BusinessException("鐏潌ID涓嶈兘涓虹┖锛�");
         }
-        return one;
+
+        Pole pole = SpringContextHolder.getBean(PoleService.class).
+                getOne(Wrappers.lambdaQuery(Pole.class).eq(Pole::getId, poleId));
+        if (pole == null) {
+            throw new BusinessException("鍏呯數妗╃粦瀹氱殑鐏潌涓嶅瓨鍦紒");
+        }
+
+        C3mCharging one = getOne(Wrappers.lambdaQuery(C3mCharging.class).eq(C3mCharging::getPoleDevicesCode, pole.getDeviceCode()));
+        ChargingDto chargingDto = new ChargingDto();
+
+        if (one == null) {
+            throw new BusinessException("鍏呯數妗╀俊鎭笉瀛樺湪锛�");
+        }
+        A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage beatDataPackage = ReadTheHeartbeatPackage(one.getC3Mac());
+        if (beatDataPackage != null) {
+            //鍏呯數妗㊣D
+            chargingDto.setC3Id(one.getC3Id());
+            //C3Mac
+            chargingDto.setC3Mac(one.getC3Mac());
+            //鍦ㄧ嚎鐘舵��
+            chargingDto.setStatusBit(Integer.valueOf(beatDataPackage.getStatusBit()));
+            //鐢靛帇
+            chargingDto.setGridVoltage(beatDataPackage.getGridVoltage());
+            //鐢垫祦
+            chargingDto.setGridCurrent(beatDataPackage.getGridCurrent());
+            //娓╁害
+            chargingDto.setDeviceTemperature(beatDataPackage.getDeviceTemperature());
+            //鐏潌ID
+            chargingDto.setPoleId(pole.getId());
+            //璐圭巼
+            BigDecimal bigDecimal = SpringContextHolder.getBean(C3mChargingChargeService.class).getchargeDecimalByC3id(one.getC3Id());
+            chargingDto.setRate(bigDecimal);
+        }
+
+        return chargingDto;
     }
 
     /**
@@ -323,7 +411,23 @@
      *
      * @param c3Mac
      */
-    public String finishCharging(String c3Mac) {
+    @Transactional(rollbackFor = Exception.class)
+    public String finishCharging(String c3Mac, String openId) {
+        //鏌ヨ
+        if (openId.isEmpty()) {
+            throw new BusinessException("openId涓嶈兘涓虹┖");
+        }
+        //鏌ヨ璇ュ厖鐢垫々鏈�杩戠殑璁㈠崟
+        C3mOrder order = SpringContextHolder.getBean(C3mOrderService.class).getOne(Wrappers.lambdaQuery(C3mOrder.class)
+                .eq(C3mOrder::getC3Mac, c3Mac).eq(C3mOrder::getChargingStates, 0).last("limit 1"));
+
+        if (order == null) {
+            throw new BusinessException("鍏呯數妗╂病鏈夎繘琛屼腑鐨勮鍗�");
+        }
+        if (!openId.equals(order.getOrderId())) {
+            throw new BusinessException("涓嶈兘鎿嶄綔涓嶅睘浜庢偍鐨勮鍗�");
+        }
+
         C3FinishChargingReqInnerFrame c3FinishChargingReqInnerFrame =
                 new C3FinishChargingReqInnerFrame(c3Mac);
 
@@ -340,6 +444,23 @@
 
         A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(commonFrame.getPayload());
 
+        //缁撴潫鍏呯數 鏇存敼璁㈠崟鐘舵��
+        C3mOrder lastOrderByC3Mac = SpringContextHolder.getBean(C3mOrderService.class).getLastOrderByC3Mac(c3Mac);
+        if (lastOrderByC3Mac != null) {
+            //璁剧疆璁㈠崟鐘舵�佷负宸插畬鎴�
+            lastOrderByC3Mac.setOrderStatus(OrderStatus.COMPLETE.getStatus());
+
+            BigDecimal actualChargingCapacity = BigDecimal.valueOf(lastOrderByC3Mac.getActualChargingCapacity());
+            BigDecimal actualChargingCapacityHide = BigDecimal.valueOf(lastOrderByC3Mac.getActualChargingCapacityHide());
+            //璁剧疆瀹為檯鍏呯數鐢甸噺
+            lastOrderByC3Mac.setActualChargingCapacity(actualChargingCapacity.add(actualChargingCapacityHide).doubleValue());
+            //璁剧疆璁㈠崟缁撴潫鏃堕棿
+            lastOrderByC3Mac.setStopChargingTimestamp(System.currentTimeMillis());
+            lastOrderByC3Mac.setActualChargingCapacity(0.00);
+            //璁剧疆璁㈠崟鐘舵�佷负鍏呯數缁撴潫
+            lastOrderByC3Mac.setChargingStates(1);
+            SpringContextHolder.getBean(C3mOrderService.class).updateById(lastOrderByC3Mac);
+        }
         if (operationReportInnerFrame.isValidate()) {
             return operationReportInnerFrame.getState();
         } else {
@@ -687,13 +808,13 @@
 
         A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_C3_DATA.getCode(), setAddressReqInnerFrame);
         System.out.println(a5Frame + "            -----a5Frame");
-
-
         CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(c3mCharging.getPoleDevicesCode(), a5Frame);
         StoreOperationRecordsUtils.storeInnerFrameData(c3Mac, "C3甯�-璁剧疆鍦板潃", a5Frame, commonFrame);
-
-
         System.out.println(commonFrame + "            -----commonFrame");
+
+        //淇濆瓨鎿嶄綔鏃ュ織
+        String content = "鏃3Mac鍦板潃锛�" + c3Mac + "锛涙柊C3Mac鍦板潃锛�" + address;
+        StoreOperationRecordsUtils.storeOperationData(null, null, "C3甯�-璁剧疆鍦板潃", content);
 
         A5C3OperationReportInnerFrame operationReportInnerFrame = new A5C3OperationReportInnerFrame().transformFrame(commonFrame.getPayload());
         if (operationReportInnerFrame.isValidate()) {
@@ -707,6 +828,7 @@
         } else {
             throw new BusinessException("鏁版嵁鏍¢獙閿欒锛岃閲嶆柊璇锋眰");
         }
+
     }
 
     /**

--
Gitblit v1.9.3