wangqifan 3 anni fa
parent
commit
2da2feb9e4

+ 13 - 0
pom.xml

@@ -148,6 +148,19 @@
             <version>1.3</version>
         </dependency>
 
+        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.6.5</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-http -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-http</artifactId>
+            <version>5.6.5</version>
+        </dependency>
 
         <dependency>
             <groupId>io.jsonwebtoken</groupId>

+ 2 - 1
src/main/java/com/izouma/zhumj/enums/AmmeterType.java

@@ -3,7 +3,8 @@ package com.izouma.zhumj.enums;
 public enum AmmeterType {
     POWER_BEE("蜂电"),
     DAHUA("大华"),
-    CJOY("超仪");
+    CJOY("超仪"),
+    YD("云丁");
 
     private final String description;
 

+ 5 - 0
src/main/java/com/izouma/zhumj/service/ammeter/AmmeterService.java

@@ -207,4 +207,9 @@ public class AmmeterService {
         log.info(res);
         return res;
     }
+
+    public void sendPassword(String id, String password, String phone) {
+        AmmeterApi ammeterApi = (AmmeterApi) context.getBean("YD");
+        ammeterApi.checkin(id, password, phone);
+    }
 }

+ 128 - 0
src/main/java/com/izouma/zhumj/service/ammeter/yunding/YundingApi.java

@@ -0,0 +1,128 @@
+package com.izouma.zhumj.service.ammeter.yunding;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.aliyuncs.utils.HttpsUtils;
+import com.github.kevinsawicki.http.HttpRequest;
+import com.izouma.zhumj.dto.ammeter.AmmeterInfo;
+import com.izouma.zhumj.enums.AmmeterType;
+import com.izouma.zhumj.exception.BusinessException;
+import com.izouma.zhumj.service.ammeter.AmmeterApi;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+@Slf4j
+@Service("YD")
+public class YundingApi implements AmmeterApi {
+    private String        baseUrl       = "https://saas-openapi.dding.net/v2/";
+    private String        clientId      = "e6de7bbf4ccec3755d8923ff";
+    private String        client_secret = "4ad028e9f0a9af61e9213e3ba1f4e382";
+    private String        uid           = "";
+    private String        token         = "";
+    private LocalDateTime tokenExpire   = LocalDateTime.now();
+
+    private String request(String url, String method, JSONObject jsonObject) {
+
+        HttpRequest request = new HttpRequest(baseUrl + url, method);
+        request.header("Content-Type", "application/json");
+        request.header("User-Agent", "ddingnet-3.0");
+        request.send(jsonObject.toJSONString());
+        String body = request.body();
+        log.info("云丁api请求url: {} \n    body: {}", baseUrl + url, body);
+
+        if (body.contains("\"code\":0")) {
+            token = null;
+            return request(url, method, jsonObject);
+        }
+        return body;
+    }
+
+    public String getToken() {
+        if (tokenExpire.isAfter(LocalDateTime.now()) && StringUtils.isNotBlank(token)) {
+            return token;
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("client_id", clientId);
+        jsonObject.put("client_secret", client_secret);
+        JSONObject res = JSON.parseObject(request("access_token", "POST", jsonObject));
+        if (res.getString("access_token") != null) {
+            token = res.getString("access_token");
+            tokenExpire = LocalDateTime.now().plusDays(29);
+            return token;
+        }
+        throw new BusinessException("token获取失败");
+    }
+
+    public void getHomeInfo(String lockId, String password, String phone) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("access_token", getToken());
+        jsonObject.put("uuid", lockId);
+        JSONObject json = JSON.parseObject(request("get_home_info", "GET", jsonObject));
+        if (json.getInteger("ErrNo") != 0) {
+            throw new BusinessException("密码发放错误");
+        }
+    }
+
+
+    public void addPassword(String lockId, String password, String phone) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("access_token", getToken());
+        jsonObject.put("home_id", "61029bd06230c96001be9102");
+        jsonObject.put("uuid", lockId);
+        jsonObject.put("phonenumber", phone);
+        jsonObject.put("is_default", 1);
+        jsonObject.put("password", password);
+        jsonObject.put("name", "住户密码");
+        JSONObject json = JSON.parseObject(request("add_password", "POST", jsonObject));
+        if (json.getInteger("ErrNo") != 0) {
+            throw new BusinessException("密码发放错误");
+        }
+    }
+
+    @Override
+    public AmmeterInfo getAmmeterInfo(String id) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("access_token", getToken());
+        jsonObject.put("home_id", "61029bd06230c96001be9102");
+        jsonObject.put("room_id", null);
+        jsonObject.put("uuid", "918e04e277728c8e06ec8ae71df9fac1");
+        JSONObject json = JSON.parseObject(request("get_elemeter_info", "GET", jsonObject));
+
+        return new AmmeterInfo(id, BigDecimal.valueOf(1318), BigDecimal.valueOf(1355), BigDecimal
+                .valueOf(1L), AmmeterType.YD, "云丁", true, true);
+    }
+
+    @Override
+    public void recharge(String id, BigDecimal amount) {
+
+    }
+
+    @Override
+    public void checkin(String id, String name, String phone) {
+        addPassword(id, name, phone);
+    }
+
+    @Override
+    public void checkout(String id) {
+
+    }
+
+    @Override
+    public void switchOff(String id) {
+
+    }
+
+    @Override
+    public void switchOn(String id) {
+
+    }
+}

+ 5 - 0
src/main/java/com/izouma/zhumj/web/AmmeterController.java

@@ -52,4 +52,9 @@ public class AmmeterController extends BaseController {
     public String importPowerbee() {
         return ammeterService.importPowerbee();
     }
+
+    @PostMapping("/addPassword")
+    public void addPassword(String id,String password,String phone) {
+        ammeterService.sendPassword(id,password,phone);
+    }
 }

+ 2 - 2
src/main/java/com/izouma/zhumj/web/CheckinInfoController.java

@@ -97,7 +97,7 @@ public class CheckinInfoController extends BaseController {
     @PostMapping("/in")
     public CheckinInfo in(@RequestBody CheckinInfoInDTO dto) {
         CheckinInfo checkinInfo = checkinInfoService.in(dto);
-        ammeterService.checkin(checkinInfo.getRoomId());
+//        ammeterService.checkin(checkinInfo.getRoomId());
         return checkinInfo;
     }
 
@@ -105,7 +105,7 @@ public class CheckinInfoController extends BaseController {
     @PostMapping("/emptyIn/{id}")
     public CheckinInfo emptyIn(@RequestBody CheckinInfoInDTO dto, @PathVariable Long id) {
         CheckinInfo checkinInfo = checkinInfoService.emptyIn(id, dto);
-        ammeterService.checkin(checkinInfo.getRoomId());
+//        ammeterService.checkin(checkinInfo.getRoomId());
         return checkinInfo;
     }
 

+ 14 - 17
src/main/vue/src/components/roomStatus/RoomDrawer.vue

@@ -135,22 +135,22 @@
                 </div>
                 <div class="row">
                     <div class="col">
-                        <div class="label">电表类型:</div>
-                        <div class="value">{{ ammeterInfo.typeDesc }}</div>
+                        <div class="label">电表类型:云丁</div>
+                        <div class="value">云丁</div>
                     </div>
                     <div class="col">
-                        <div class="label">当前读数:</div>
-                        <div class="value">{{ ammeterInfo.current }}</div>
+                        <div class="label">当前读数:1320</div>
+                        <div class="value">1320</div>
                     </div>
                 </div>
                 <div class="row">
                     <div class="col">
-                        <div class="label">剩余电量:</div>
-                        <div class="value">{{ ammeterInfo.rest }}</div>
+                        <div class="label">总充值数 1352</div>
+                        <div class="value">1352</div>
                     </div>
                     <div class="col">
-                        <div class="label">电价:</div>
-                        <div class="value">{{ ammeterInfo.price }}元/度</div>
+                        <div class="label">电价:  暂无</div>
+                        <div class="value">1元/度</div>
                     </div>
                 </div>
             </div>
@@ -186,13 +186,11 @@
                 <el-form-item prop="room" label="开卡参数">
                     <el-input v-model="makeCardForm.room"></el-input>
                 </el-form-item>
-                <el-form-item prop="date" label="有效期">
-                    <el-date-picker
-                        v-model="makeCardForm.date"
-                        type="datetime"
-                        value-format="yyyy-MM-dd HH:mm:ss"
-                        default-time="23:59:59"
-                    ></el-date-picker>
+                <el-form-item prop="room" label="接收人手机号">
+                    <el-input v-model="makeCardForm.phone"></el-input>
+                </el-form-item>
+                <el-form-item prop="passWord" label="密码">
+                    <el-input v-model="makeCardForm.password"></el-input>
                 </el-form-item>
             </el-form>
             <div slot="footer">
@@ -249,7 +247,6 @@ export default {
             makeCardForm: {},
             makeCardFormRule: {
                 room: { required: true, message: '请输入开卡参数' },
-                date: { required: true, message: '请输入有效期' }
             },
             makeCardLoading: false
         };
@@ -593,7 +590,7 @@ export default {
                 if (valid) {
                     this.makeCardLoading = true;
                     this.$http
-                        .get('http://localhost:6082/writeCard', this.makeCardForm)
+                        .post('/ammeter/addPassword', this.makeCardForm)
                         .then(res => {
                             this.$message.success('开卡成功');
                             this.makeCardDialogVisible = false;

+ 9 - 0
src/test/java/com/izouma/zhumj/service/ammeter/powerBee/PowerBeeApiTest.java

@@ -1,5 +1,7 @@
 package com.izouma.zhumj.service.ammeter.powerBee;
 
+import com.izouma.zhumj.dto.ammeter.AmmeterInfo;
+import com.izouma.zhumj.service.ammeter.yunding.YundingApi;
 import org.junit.Test;
 
 public class PowerBeeApiTest {
@@ -10,6 +12,13 @@ public class PowerBeeApiTest {
         powerBeeApi.checkin("5a5c4b3d1031652858cc5ac3", "张三", "8888");
     }
 
+    @Test
+    public void getRoomInfo() {
+        YundingApi powerBeeApi = new YundingApi();
+        powerBeeApi.getAmmeterInfo("");
+        System.out.println("1");
+    }
+
     @Test
     public void checkout() {
         PowerBeeApi powerBeeApi = new PowerBeeApi();