瀏覽代碼

模块创建,1.4-2.1接口完成提交

jyj 1 月之前
父節點
當前提交
4a7713eb94

+ 2 - 0
common-ecall-sdk/src/main/java/com/fs/ecall/config/EcallProperties.java

@@ -24,6 +24,8 @@ public class EcallProperties {
         private String membership;
         private String terminate;
         private String modifyPhone;
+        private String extension;
+        private String workOrder;
     }
 
 

+ 34 - 62
common-ecall-sdk/src/main/java/com/fs/ecall/domain/ECallWorkOrderRequest.java

@@ -1,110 +1,82 @@
 package com.fs.ecall.domain;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
 
 /**
- * 救援工单请求参数 [cite: 118]
+ * 1. 救援工单请求实体 (DTO)
  */
 @Data
-public class ECallWorkOrderRequest {
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ECallWorkOrderRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
 
-    /**
-     * 设备ID [cite: 117]
-     */
+    // 设备ID,通常为设备上的唯一编号
     private String extenalId;
 
-    /**
-     * 渠道号 [cite: 117]
-     */
+    // 渠道号,由远盟分配的身份标识
     private String channelId;
 
-    /**
-     * 客户方系统唯一工单流水号 (必录) [cite: 118]
-     */
+    // 客户方系统生成的唯一工单流水号
     private String woNoOutside;
 
-    /**
-     * 事故—触发时间:yyyy-mm-dd HH:MM:SS (必录) [cite: 118]
-     */
+    // 事故触发的具体时间,格式要求:yyyy-MM-dd HH:mm:ss
     private String accidentTriggerTime;
 
-    /**
-     * 事故—GPS类型:01-WGS84, 02-GCJ02, 03-BD [cite: 118]
-     */
+    // 事故定位坐标系类型:01-WGS84, 02-GCJ02, 03-BD
     private String accidentGpstype;
 
-    /**
-     * 事故—GPS:格式“经度,纬度” [cite: 118]
-     */
+    // 事故坐标数据,格式要求:“经度, 纬度”
     private String accidentGps;
 
-    /**
-     * 事故—触发方式:04-自动, 05-手动 (必录) [cite: 118]
-     */
+    // 事故触发方式:04-自动触发, 05-手动触发
     private String accidentTriggerType;
 
-    /**
-     * 会员姓名 (必录) [cite: 118]
-     */
+    // 会员或车主姓名
     private String name;
 
-    /**
-     * 会员手机 (必录) [cite: 118]
-     */
+    // 会员联系电话
     private String phone;
 
-    /**
-     * 设备电话/报警电话 (必录) [cite: 118]
-     */
+    // 设备内置卡电话或报警时拨打的电话
     private String alertPhone;
 
-    /**
-     * 车牌号 (必录) [cite: 118]
-     */
+    // 车辆的车牌号码
     private String vehicleNumber;
 
-    /**
-     * 车架号/VIN [cite: 118]
-     */
+    // 车辆的唯一识别码(VIN码)
     private String vin;
 
-    /**
-     * 紧急联系人姓名 (必录) [cite: 118]
-     */
+    // 发生紧急情况时的联系人姓名
     private String emergencyContactPerson;
 
-    /**
-     * 紧急联系电话 (必录) [cite: 118]
-     */
+    // 紧急联系人的联系电话
     private String emergencyContact;
 
-    /**
-     * 车辆颜色 [cite: 118]
-     */
+    // 车辆外观颜色
     private String vehicalColor;
 
-    /**
-     * 车辆类型 (必录) [cite: 118]
-     */
+    // 车辆类型编码,对应文档3.1章节
     private String vihecleType;
 
-    /**
-     * 车辆动力类型 (必录) [cite: 118]
-     */
+    // 车辆动力类型编码,对应文档3.2章节
     private String powerType;
 
-    /**
-     * 证件类型 [cite: 118]
-     */
+    // 证件类型说明
     private String certificateType;
 
-    /**
-     * 证件号码 [cite: 118]
-     */
+    // 对应的证件号码
     private String certificateNumber;
 
-    /**
-     * 备注 [cite: 119]
-     */
+    // 其他需要备注的信息
     private String note;
 }

+ 32 - 0
common-ecall-sdk/src/main/java/com/fs/ecall/domain/MemberExtensionRequest.java

@@ -0,0 +1,32 @@
+package com.fs.ecall.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import java.io.Serializable;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MemberExtensionRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 设备 ID (必填)
+     */
+    private String extenalId;
+
+    /**
+     * 渠道号 (必填)
+     */
+    private String channelId;
+
+    /**
+     * 续期时长(月) (必填)
+     * 根据文档 1.4.3,数据类型为 int
+     */
+    private Integer month;
+}

+ 14 - 4
common-ecall-sdk/src/main/java/com/fs/ecall/service/IECallService.java

@@ -1,9 +1,6 @@
 package com.fs.ecall.service;
 
-import com.fs.ecall.domain.ECallResponse;
-import com.fs.ecall.domain.MemberMembershipRequest;
-import com.fs.ecall.domain.MemberTerminateRequest;
-import com.fs.ecall.domain.ModifyTboxPhoneRequest;
+import com.fs.ecall.domain.*;
 
 /**
  * 车联网 E-Call 会员管理服务接口 [cite: 3, 32]
@@ -33,5 +30,18 @@ public interface IECallService {
      */
     ECallResponse modifyTboxPhone(ModifyTboxPhoneRequest request);
 
+    /**
+     * 1.4 会员续费接口
+     * @param request 续费请求参数(含 extenalId, channelId, month)
+     * @return 远盟处理结果
+     */
+    ECallResponse extendMembership(MemberExtensionRequest request);
+
 
+    /**
+     * 2.1 救援工单请求(E-Call 报警)接口实现
+     * @param request
+     * @return 远盟处理结果
+     */
+    ECallResponse sendWorkOrder(ECallWorkOrderRequest request);
 }

+ 71 - 8
common-ecall-sdk/src/main/java/com/fs/ecall/service/impl/ECallServiceImpl.java

@@ -1,10 +1,7 @@
 package com.fs.ecall.service.impl;
 
 import com.fs.ecall.config.EcallProperties;
-import com.fs.ecall.domain.ECallResponse;
-import com.fs.ecall.domain.MemberMembershipRequest;
-import com.fs.ecall.domain.MemberTerminateRequest;
-import com.fs.ecall.domain.ModifyTboxPhoneRequest;
+import com.fs.ecall.domain.*;
 import com.fs.ecall.service.IECallService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -25,6 +22,7 @@ public class ECallServiceImpl implements IECallService {
 
     /**
      * 会员备案更新接口
+     *
      * @param restTemplate
      * @param ecallProperties
      */
@@ -47,7 +45,6 @@ public class ECallServiceImpl implements IECallService {
         headers.set("Authorization", authCode);
 
 
-
         // 4. 构建 Entity 并发送 POST 请求
         HttpEntity<MemberMembershipRequest> entity = new HttpEntity<>(request, headers);
         String url = env.getUrl().getMembership();
@@ -57,13 +54,14 @@ public class ECallServiceImpl implements IECallService {
             return restTemplate.postForObject(url, entity, ECallResponse.class);
         } catch (Exception e) {
             log.error("E-Call 接口调用失败", e);
-            return  new ECallResponse("03", "系统异常: " + e.getMessage());
+            return new ECallResponse("03", "系统异常: " + e.getMessage());
         }
     }
 
 
     /**
      * 会员终止服务
+     *
      * @param request
      * @return
      */
@@ -91,13 +89,14 @@ public class ECallServiceImpl implements IECallService {
             return restTemplate.postForObject(url, entity, ECallResponse.class);
         } catch (Exception e) {
             log.error("E-Call 接口调用失败", e);
-            return  new ECallResponse("03", "系统异常: " + e.getMessage());
+            return new ECallResponse("03", "系统异常: " + e.getMessage());
         }
     }
 
 
     /**
      * 修改设备电话接口
+     *
      * @param request
      * @return
      */
@@ -117,7 +116,39 @@ public class ECallServiceImpl implements IECallService {
 
         // 4. 构建 Entity 并发送 POST 请求
         HttpEntity<ModifyTboxPhoneRequest> entity = new HttpEntity<>(request, headers);
-        String url = env.getUrl().getTerminate();
+        String url = env.getUrl().getModifyPhone();
+
+        try {
+            log.info("调用 E-Call 设备电话接口, URL: {}, ExtenalId: {}", url, request.getExtenalId());
+            return restTemplate.postForObject(url, entity, ECallResponse.class);
+        } catch (Exception e) {
+            log.error("E-Call 接口调用失败", e);
+            return new ECallResponse("03", "系统异常: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 会员续费接口
+     * @param request 续费请求参数(含 extenalId, channelId, month)
+     * @return
+     */
+    @Override
+    public ECallResponse extendMembership(MemberExtensionRequest request) {
+        EcallProperties.EnvConfig env = ecallProperties.getEnv();
+
+        // 1. 生成 Authorization: MD5(appkey + appsecret) -> UpperCase
+        String rawKey = env.getAppKey() + env.getAppSecret();
+        String authCode = DigestUtils.md5DigestAsHex(rawKey.getBytes()).toUpperCase();
+
+        // 2. 设置 HTTP Header
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        headers.set("Authorization", authCode);
+
+
+        // 4. 构建 Entity 并发送 POST 请求
+        HttpEntity<MemberExtensionRequest> entity = new HttpEntity<>(request, headers);
+        String url = env.getUrl().getExtension();
 
         try {
             log.info("调用 E-Call 会员备案接口, URL: {}, ExtenalId: {}", url, request.getExtenalId());
@@ -127,4 +158,36 @@ public class ECallServiceImpl implements IECallService {
             return new ECallResponse("03", "系统异常: " + e.getMessage());
         }
     }
+
+    /**
+     * 2.1 救援工单请求(E-Call 报警)接口实现
+     * @param request
+     * @return
+     */
+    @Override
+    public ECallResponse sendWorkOrder(ECallWorkOrderRequest request) {
+        EcallProperties.EnvConfig env = ecallProperties.getEnv();
+
+        // 1. 生成 Authorization: MD5(appkey + appsecret) -> UpperCase
+        String rawKey = env.getAppKey() + env.getAppSecret();
+        String authCode = DigestUtils.md5DigestAsHex(rawKey.getBytes()).toUpperCase();
+
+        // 2. 设置 HTTP Header
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        headers.set("Authorization", authCode);
+
+
+        // 4. 构建 Entity 并发送 POST 请求
+        HttpEntity<ECallWorkOrderRequest> entity = new HttpEntity<>(request, headers);
+        String url = env.getUrl().getExtension();
+
+        try {
+            log.info("调用 E-Call 救援工单接口, URL: {}, ExtenalId: {}", url, request.getExtenalId());
+            return restTemplate.postForObject(url, entity, ECallResponse.class);
+        } catch (Exception e) {
+            log.error("E-Call 接口调用失败", e);
+            return new ECallResponse("03", "系统异常: " + e.getMessage());
+        }
+    }
 }