Commit cef79216032b88edb5b395e651cd2aaedf5705cd

Authored by 吴志飞
1 parent 11da0a5c
Exists in master

feat: 车辆维保API接口文档

vehicle/maintenance/2022120101/maintenance.md 0 → 100644
@@ -0,0 +1,1406 @@ @@ -0,0 +1,1406 @@
  1 +[toc]
  2 +
  3 +# 车辆维保对接API
  4 +
  5 +则一提供了不同规范的API,调用服务端API前,需了解开发前须知及调用流程。本文提供了调用则一服务端API示例,供开发者参考。
  6 +
  7 +## 白名单
  8 +
  9 +则一服务端API接口访问有IP白名单限制,需要接口调用方提供调用API的服务器IP地址。
  10 +
  11 +## 数据加签
  12 +
  13 +采用md5(32位小写)算法生成签名
  14 +appKey(则一提供) + appSecret(则一提供) + timestamp(当前时间戳毫秒) + nonce(6位随机码大小写字母数子组合) + data(请求数据)
  15 +
  16 +## 数据加密
  17 +
  18 +数据加密采用AES算法
  19 +加密模式: CBC
  20 +填充方式:PKCS5Padding
  21 +偏移量:iv(则一提供)
  22 +加密内容:appKey(则一提供) + timestamp(当前时间戳毫秒) + nonce(6位随机码大小写字母数子组合) + data(加密数据)
  23 +密钥: appSecret(则一提供)
  24 +输出:base64
  25 +字符集:utf-8
  26 +注:无敏感数据则无需加密
  27 +
  28 +## 获取访问凭证
  29 +
  30 +### 概述
  31 +
  32 +调用则一服务API时,都需要先获取对应权限类型的访问凭证accessToken。访问凭证(accessToken)是由则一权限系统颁发的,用来校验调用者的身份信息,确保调用者具有要执行的操作的权限。
  33 +**说明**: 在使用accessToken时,请注意:
  34 +
  35 +* accessToken的有效期默认为30天,有效期内重复获取会返回相同结果,过期后获取会返回新的accessToken。
  36 +* 开发者需要缓存accessToken,用于后续接口的调用。不能频繁调用获取accessToken接口,否则会受到频率拦截。
  37 +* 当调用业务API时,如果返回状态码为401,则说明accessToken不正确或已过期,这时需要重新获取accessToken后再调用对应的API。
  38 +
  39 +### 接口信息
  40 +
  41 +#### 请求方式:
  42 +
  43 +post
  44 +
  45 +#### 请求地址:
  46 +
  47 +* 生产:https://gw.shjiuze.cn/auth-service-api/login/password
  48 +* 测试:https://test.shjiuze.cn/auth-service-api/login/password
  49 +
  50 +#### Body参数
  51 +
  52 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  53 +| -------- | ------ | ---- | ----------- | ---------------- |
  54 +| username | String | 是 | zhangsan | 用户名,则一提供 |
  55 +| password | String | 是 | password123 | 密码,则一提供 |
  56 +
  57 +#### 返回参数
  58 +
  59 +| 名称 | 类型 | 示例值 | 描述 |
  60 +| ------------------------------ | ---------- | -------------------------------- | -------------------------------------------------- |
  61 +| success | boolean | true | 成功标识: true 成功,false 失败 |
  62 +| businessException | boolean | false | 业务异常标识: true 业务异常,false 正常 |
  63 +| errorCode | String | 200 | 错误码: 200 业务异常,500 系统异常, 空表示无错误 |
  64 +| message | String | 订单号不能为空 | 错误信息,无错误则返回空 |
  65 +| result | ZYTokenDto | | accessToken结果数据 |
  66 +|     accessToken | String | 000626f15b4b41bba6fe56216a5d2f73 | accessToken |
  67 +|     expiresIn | Integer | 2060 | 有效期限单位秒,accessToken在2060秒后过期 |
  68 +|     tokenType | String | bearer | token类型 |
  69 +
  70 +#### 请求示例
  71 +
  72 +##### Http方式
  73 +
  74 +```http
  75 +POST /auth-service-api/login/password HTTP/1.1
  76 +Host:test.shjiuze.cn
  77 +Content-Type:application/json
  78 +
  79 +{
  80 + "username" : "zeyi",
  81 + "password" : "test1111"
  82 +}
  83 +```
  84 +
  85 +##### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  86 +
  87 +```java
  88 +public class Sample {
  89 + public static void main(String[] args_) {
  90 + String appKey = "appkey";
  91 + String appSecret = "appSecret";
  92 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  93 + ZYTokenRequestDto zyTokenRequest = new ZYTokenRequestDto();
  94 + zyTokenRequest.setUsername("zeyi");
  95 + zyTokenRequest.setPassword("test1111");
  96 + String body = gson.toJson(zyTokenRequest);
  97 + HttpResponseData httpResponseData = zyClient.doPost(Constants.TEST_HOST + Constants.TOKEN_PATH, body);
  98 + if(httpResponseData == null) {
  99 + throw new TokenException("则一Token请求失败,返回为空!");
  100 + }
  101 + ZYResponse<ZYTokenDto> zyResponse = gson.fromJson(httpResponseData.getBody(), new TypeToken<ZYResponse<ZYTokenDto>>(){}.getType());
  102 + if(!Boolean.TRUE.equals(zyResponse.isSuccess())) {
  103 + throw new TokenException("则一Token请求返回失败!" + zyResponse.getMessage());
  104 + }
  105 + if(zyResponse.getResult() == null) {
  106 + throw new TokenException("则一Token请求返回失败,返回结果为空!" + zyResponse.getMessage());
  107 + }
  108 + if(StringUtils.isBlank(zyResponse.getResult().getAccessToken())) {
  109 + throw new TokenException("则一Token请求返回数据异常,AccessToken为空!" + zyResponse.getMessage());
  110 + }
  111 + // 结果 zyResponse.getResult();
  112 + }
  113 +}
  114 +```
  115 +
  116 +#### 返回示例
  117 +
  118 +```json
  119 +{
  120 + "success": true,
  121 + "businessException": false,
  122 + "errorCode": null,
  123 + "message": null,
  124 + "result": {
  125 + "accessToken": "64d7f367-609b-4f7d-a84d-a3d2a0b5ad85",
  126 + "expiresIn": 602105,
  127 + "tokenType": "bearer"
  128 + }
  129 +}
  130 +```
  131 +
  132 +## 车辆报修
  133 +
  134 +### 简要描述
  135 +
  136 +· 车辆报修
  137 +
  138 +### 请求URL
  139 +
  140 +· 车畅行提供 /vehicleRepair/repair
  141 +
  142 +### 请求方式
  143 +
  144 +· POST
  145 +
  146 +### 请求示例
  147 +
  148 +```json
  149 +{
  150 + "code":"WBJL21071000044",
  151 + "licenseNumber":"鄂ARY348",
  152 + "trailerNumber":"辽BHC28挂",
  153 + "owner":"上海则一",
  154 + "brand":"东风",
  155 + "specification":"9.6",
  156 + "vanType":"厢车",
  157 + "driverName":"张三",
  158 + "driverMobile":"18888888888",
  159 + "vin":"21654564894984LK",
  160 + "engineNumber":"2156156",
  161 + "engineModel":"大众EA111",
  162 + "manufactureTime":"1642993757000",
  163 + "registrationTime":"1642993757000",
  164 + "mileage":100000,
  165 + "trafficCompulsoryInsuranceStartTime":"1642993757000",
  166 + "trafficCompulsoryInsuranceEndTime":"1642993757000",
  167 + "commercialInsuranceStartTime":"1642993757000",
  168 + "commercialInsuranceEndTime":"1642993757000",
  169 + "medallionInvalidTime":"1642993757000",
  170 + "monthMileage":100000,
  171 + "recentRepairTime":"1642993757000",
  172 + "vehicleObject":"车头",
  173 + "vehicleAddress":"湖北省随州市曾都区淅河镇002县道",
  174 + "vehicleAddressLng":"113.465168",
  175 + "vehicleAddressLat":"31.664137",
  176 + "orgName":"上海区",
  177 + "repairProjectList":[
  178 + {
  179 + "name":"机油滤芯",
  180 + "number":1
  181 + }
  182 + ]
  183 +```
  184 +
  185 +
  186 +### 参数
  187 +
  188 +| 参数名 | 必传 | 类型 | | 说明 |
  189 +| :---------------------------------- | ---- | ------- | ---- | ------------------------------- |
  190 +| code | 是 | string | | 维保单号 |
  191 +| licenseNumber | 是 | string | | 车牌号 |
  192 +| trailerNumber | 否 | string | | 挂车号 |
  193 +| owner | 是 | string | | 车辆所有人 |
  194 +| brand | 否 | string | | 品牌 |
  195 +| specification | 否 | string | | 车型 |
  196 +| vanType | 否 | string | | 车厢类型 |
  197 +| driverName | 是 | string | | 司机联系姓名 |
  198 +| driverMobile | 是 | string | | 司机联系电话 |
  199 +| vin | 是 | string | | 车架号 |
  200 +| engineNumber | 是 | string | | 发动机号码 |
  201 +| engineModel | 否 | string | | 发动机型号 |
  202 +| manufactureTime | 否 | string | | 出厂日期时间戳(毫秒) |
  203 +| registrationTime | 否 | string | | 注册日期时间戳(毫秒) |
  204 +| mileage | 否 | Integer | | 车辆里程数 |
  205 +| trafficCompulsoryInsuranceStartTime | 否 | string | | 交强险开始时间戳(毫秒) |
  206 +| trafficCompulsoryInsuranceEndTime | 否 | string | | 交强险结束时间戳(毫秒) |
  207 +| commercialInsuranceStartTime | 否 | string | | 商业险开始时间戳(毫秒) |
  208 +| commercialInsuranceEndTime | 否 | string | | 商业险结束时间戳(毫秒) |
  209 +| medallionInvalidTime | 否 | string | | 营运证失效日期时间戳(毫秒) |
  210 +| monthMileage | 否 | Integer | | 月行驶里程数 |
  211 +| recentRepairTime | 否 | string | | 最近维修日期时间戳(毫秒) |
  212 +| vehicleObject | 是 | string | | 维修对象(车头、车挂、车头+车挂) |
  213 +| vehicleAddress | 是 | string | | 车辆位置 |
  214 +| vehicleAddressLng | 是 | string | | 车辆位置经度 |
  215 +| vehicleAddressLat | 是 | string | | 车辆位置纬度 |
  216 +| orgName | 是 | string | | 车辆所属区域 |
  217 +| remark | 否 | string | | 备注 |
  218 +| repairProjectList | 是 | list | | 维修项目列表 |
  219 +| name | 是 | string | | 维修项目名称 |
  220 +| number | 是 | Integer | | 维修项目数量 |
  221 +
  222 +### 返回正常示例
  223 +
  224 + { "success": true, "businessException": false}
  225 +
  226 +### 返回异常示例
  227 +
  228 + { "success": false, "businessException": true, "errorCode": "200", "message": "XXX不存在!"}
  229 +
  230 +
  231 +
  232 +## 车辆维修确认
  233 +
  234 +### 简要描述
  235 +
  236 +· 车辆维修确认
  237 +
  238 +### 请求URL
  239 +
  240 +· 测试环境:https://test.shjiuze.cn/vehicle-service-api/maintenance/repairConfirm
  241 +
  242 +· 生产环境:https://gw.shjiuze.cn/vehicle-service-api/maintenance/repairConfirm
  243 +
  244 +### 请求示例
  245 +
  246 +#### Http方式
  247 +
  248 +```http
  249 +POST /vehicle-service-api/maintenance/repairConfirm HTTP/1.1
  250 +Host:test.shjiuze.cn
  251 +Content-Type:application/json
  252 +
  253 +{
  254 + "code":"WBJL21071000044",
  255 + "repairFlag":true,
  256 + "expectRepairTime":"1642759341000",
  257 + "reason":"无可用站点",
  258 + "stationUser":"张大三",
  259 + "stationMobile":"13277788817",
  260 + "stationAddress":"湖北省武汉市东西湖区新城十六路88号2056物流园B33-34",
  261 + "stationLng":"113.461238",
  262 + "stationLat":"32.614137"
  263 +}
  264 +```
  265 +
  266 +#### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  267 +
  268 +```java
  269 +public class Sample {
  270 + public static void main(String[] args_) {
  271 + String appKey = "appkey";
  272 + String appSecret = "appSecret";
  273 + String jsonData = "报修确认Body参数JSON数据";
  274 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  275 + HttpResponseData httpResponseData =
  276 +zyClient.doPost(Constants.TEST_HOST + "/vehicle-service-api/maintenance/repairConfirm", "accessToken", jsonData);
  277 + if(httpResponseData == null) {
  278 + throw new BusinessException("则一请求失败,返回结果为空!");
  279 + }
  280 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  281 + //重新获取token再次请求
  282 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  283 + "/vehicle-service-api/maintenance/repairConfirm", "accessToken", jsonData);
  284 + }
  285 + }
  286 +}
  287 +```
  288 +
  289 +### Headers参数
  290 +
  291 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  292 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  293 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  294 +| appKey | String | 是 | 0867ef5f23ef446483749e19e1692b40 | 则一提供 |
  295 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  296 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  297 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  298 +
  299 +### Body参数
  300 +
  301 +| 参数名 | 必传 | 类型 | 说明 |
  302 +| ---------------- | ---- | ------- | -------------------- |
  303 +| code | 是 | string | 维保单号 |
  304 +| repairFlag | 是 | boolean | 是否可维修 |
  305 +| expectRepairTime | 否 | string | 预计维修时间戳(毫秒) |
  306 +| reason | 否 | string | 不可维修原因 |
  307 +| stationUser | 否 | string | 站点联系人 |
  308 +| stationMobile | 否 | string | 站点联系电话 |
  309 +| stationAddress | 否 | string | 站点地址 |
  310 +| stationLng | 否 | string | 站点地址经度 |
  311 +| stationLat | 否 | string | 站点地址纬度 |
  312 +
  313 +### 返回正常示例
  314 +
  315 + { "success": true, "businessException": false}
  316 +
  317 +### 返回异常示例
  318 +
  319 + { "success": false, "businessException": true, "errorCode": "200", "message": "XXX不存在!"}
  320 +
  321 +
  322 +
  323 +## 车辆维修清单
  324 +
  325 +### 简要描述
  326 +
  327 +· 车辆维修清单
  328 +
  329 +### 请求URL
  330 +
  331 +· 测试环境:https://test.shjiuze.cn/vehicle-service-api/maintenance/repairList
  332 +
  333 +· 生产环境:https://gw.shjiuze.cn/vehicle-service-api/maintenance/repairList
  334 +
  335 +### 请求示例
  336 +
  337 +#### Http方式
  338 +
  339 +```http
  340 +POST /vehicle-service-api/maintenance/repairList HTTP/1.1
  341 +Host:test.shjiuze.cn
  342 +Content-Type:application/json
  343 +
  344 +{
  345 + "code":"WBJL21071000044",
  346 + "orderCode":"xxxx",
  347 + "discountedAmount":100,
  348 + "totalAmount":1000,
  349 + "paidAmount":900,
  350 + "mileage":121900,
  351 + "type":"大修",
  352 + "startTime":"1642993757000",
  353 + "completeTime":"1642993757000",
  354 + "fieldMaintainPictureUrl":"http://zeyi-tms-test.oss-cn-hangzhou.aliyuncs.com/image/app/9c019526-63fd-4a39-808a-744a452cca18.jpg",
  355 + "certificatePictureUrl":"http://zeyi-tms-test.oss-cn-hangzhou.aliyuncs.com/image/app/9c019526-63fd-4a39-808a-744a452cca18.jpg",
  356 + "mileagePictureUrl":"http://zeyi-tms-test.oss-cn-hangzhou.aliyuncs.com/image/app/9c019526-63fd-4a39-808a-744a452cca18.jpg",
  357 + "feeList":[
  358 + {
  359 + "name":"工时费",
  360 + "amount":100,
  361 + "discountedAmount":0,
  362 + "remark":""
  363 + },
  364 + {
  365 + "name":"材料费",
  366 + "amount":950,
  367 + "discountedAmount":50,
  368 + "remark":""
  369 + }
  370 + ],
  371 + "repairProjectList":[
  372 + {
  373 + "name":"空调滤芯",
  374 + "number":2,
  375 + "unitPrice":275,
  376 + "discountedAmount":50,
  377 + "laborAmount":0,
  378 + "totalAmount":500,
  379 + "remark":""
  380 + },
  381 + {
  382 + "name":"机油滤芯",
  383 + "number":1,
  384 + "unitPrice":400,
  385 + "discountedAmount":0,
  386 + "laborAmount":100,
  387 + "totalAmount":500,
  388 + "remark":""
  389 + },
  390 +
  391 +​ {
  392 +​ "name":"工时费用",
  393 +​ "timeQuota":"1",
  394 +​ "unitAmount":100,
  395 +​ "totalAmount":100,
  396 +​ "remark":""
  397 +​ }
  398 +
  399 +​ ]
  400 +}
  401 +```
  402 +
  403 +#### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  404 +
  405 +```java
  406 +public class Sample {
  407 + public static void main(String[] args_) {
  408 + String appKey = "appkey";
  409 + String appSecret = "appSecret";
  410 + String jsonData = "推送维修清单Body参数JSON数据";
  411 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  412 + HttpResponseData httpResponseData =
  413 +zyClient.doPost(Constants.TEST_HOST + "/vehicle-service-api/maintenance/repairList", "accessToken", jsonData);
  414 + if(httpResponseData == null) {
  415 + throw new BusinessException("则一请求失败,返回结果为空!");
  416 + }
  417 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  418 + //重新获取token再次请求
  419 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  420 + "/vehicle-service-api/maintenance/repairList", "accessToken", jsonData);
  421 + }
  422 + }
  423 +}
  424 +```
  425 +
  426 +### Headers参数
  427 +
  428 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  429 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  430 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  431 +| appKey | String | 是 | 0867ef5f23ef446483749e19e1692b40 | 则一提供 |
  432 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  433 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  434 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  435 +
  436 +### Body参数
  437 +
  438 +| 参数名 | 必传 | 类型 | 说明 |
  439 +| ---------------------------------------- | ---- | ---------- | ------------------------------------------ |
  440 +| code | 是 | string | 维保编码 |
  441 +| orderCode | 是 | string | 维保订单号 |
  442 +| discountedAmount | 否 | Bigdecimal | 折扣金额 |
  443 +| totalAmount | 是 | Bigdecimal | 总金额 |
  444 +| paidAmount | 是 | Bigdecimal | 应付金额 |
  445 +| mileage | 是 | Integer | 车辆里程数 |
  446 +| type | 是 | string | 维修类型 |
  447 +| startTime | 是 | string | 开始时间戳(毫秒) |
  448 +| completeTime | 是 | string | 完工时间戳(毫秒) |
  449 +| fieldMaintainPictureUrl | 是 | string | 清单照片url,多个图片用逗号分割 |
  450 +| certificatePictureUrl | 是 | string | 现场照片url,多个图片用逗号分割 |
  451 +| mileagePictureUrl | 是 | string | 里程照片url,多个图片用逗号分割 |
  452 +| feeList | 否 | list | 费用明细集合 |
  453 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 名称(工时费、拖车费等等) |
  454 +| &nbsp;&nbsp;&nbsp;&nbsp;unit | 否 | string | 单位 |
  455 +| &nbsp;&nbsp;&nbsp;&nbsp;unitPrice | 否 | Bigdecimal | 单价 |
  456 +| &nbsp;&nbsp;&nbsp;&nbsp;number | 否 | Integer | 数量 |
  457 +| &nbsp;&nbsp;&nbsp;&nbsp;amount | 是 | Bigdecimal | 金额 |
  458 +| &nbsp;&nbsp;&nbsp;&nbsp;discountedAmount | 是 | Bigdecimal | 折扣金额 |
  459 +| &nbsp;&nbsp;&nbsp;&nbsp;remark | 否 | string | 备注 |
  460 +| repairProjectList | 否 | list | 维修项目集合(包含配件信息) |
  461 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 项目名称 |
  462 +| &nbsp;&nbsp;&nbsp;&nbsp;unit | 否 | string | 单位 |
  463 +| &nbsp;&nbsp;&nbsp;&nbsp;number | 否 | Integer | 数量 |
  464 +| &nbsp;&nbsp;&nbsp;&nbsp;unitPrice | 是 | Bigdecimal | 单价 |
  465 +| &nbsp;&nbsp;&nbsp;&nbsp;discountedAmount | 否 | Bigdecimal | 折扣金额 |
  466 +| &nbsp;&nbsp;&nbsp;&nbsp;totalAmount | 是 | Bigdecimal | 合计金额 |
  467 +| &nbsp;&nbsp;&nbsp;&nbsp;timeQuota | 否 | Bigdecimal | 工时定额 |
  468 +| &nbsp;&nbsp;&nbsp;&nbsp;projectType | 是 | string | 维修项目类型(配件:materials\|项目:project) |
  469 +| &nbsp;&nbsp;&nbsp;&nbsp;remark | 否 | string | 备注 |
  470 +
  471 +### 返回正常示例
  472 +
  473 + { "success": true, "businessException": false}
  474 +
  475 +### 返回异常示例
  476 +
  477 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不存在!"}
  478 +
  479 +
  480 +
  481 +## 车辆保养
  482 +
  483 +### 简要描述
  484 +
  485 +· 车辆保养信息推送
  486 +
  487 +### 请求URL
  488 +
  489 +· 车畅行提供/vehicleMaintain/maintain
  490 +
  491 +### 请求方式
  492 +
  493 +· POST
  494 +
  495 +### 请求示例
  496 +
  497 +```json
  498 +{
  499 + "code":"WBJL21071000044",
  500 + "licenseNumber":"鄂ARY348",
  501 + "trailerNumber":"辽BHC28挂",
  502 + "owner":"上海则一",
  503 + "brand":"东风",
  504 + "specification":"9.6",
  505 + "vanType":"厢车",
  506 + "driverName":"张三",
  507 + "driverMobile":"18888888888",
  508 + "vin":"21654564894984LK",
  509 + "engineNumber":"2156156",
  510 + "engineModel":"大众EA111",
  511 + "manufactureTime":"1642993757000",
  512 + "registrationTime":"1642993757000",
  513 + "mileage":100000,
  514 + "trafficCompulsoryInsuranceStartTime":"1642993757000",
  515 + "trafficCompulsoryInsuranceEndTime":"1642993757000",
  516 + "commercialInsuranceStartTime":"1642993757000",
  517 + "commercialInsuranceEndTime":"1642993757000",
  518 + "medallionInvalidTime":"1642993757000",
  519 + "monthMileage":100000,
  520 + "recentMaintainTime":"1642993757000",
  521 + "vehicleObject":"车头",
  522 + "vehicleAddress":"湖北省随州市曾都区淅河镇002县道",
  523 + "vehicleAddressLng":"113.465168",
  524 + "vehicleAddressLat":"31.664137",
  525 + "orgName":"上海区",
  526 + "maintainProjectList":[
  527 + {"name": "机油滤芯"}
  528 + ]
  529 +}
  530 +```
  531 +
  532 +
  533 +
  534 +### 参数
  535 +
  536 +| 参数名 | 必传 | 类型 | | 说明 |
  537 +| :---------------------------------- | ---- | ------- | ---- | ------------------------------- |
  538 +| code | 是 | string | | 维保单号 |
  539 +| licenseNumber | 是 | string | | 车牌号 |
  540 +| trailerNumber | 否 | string | | 挂车号 |
  541 +| owner | 是 | string | | 车辆所有人 |
  542 +| brand | 否 | string | | 品牌 |
  543 +| specification | 否 | string | | 车型 |
  544 +| vanType | 否 | string | | 车厢类型 |
  545 +| driverName | 是 | string | | 司机联系姓名 |
  546 +| driverMobile | 是 | string | | 司机联系电话 |
  547 +| vin | 是 | string | | 车架号 |
  548 +| engineNumber | 是 | string | | 发动机号码 |
  549 +| engineModel | 否 | string | | 发动机型号 |
  550 +| manufactureTime | 否 | string | | 出厂日期时间戳(毫秒) |
  551 +| registrationTime | 否 | string | | 注册日期时间戳(毫秒) |
  552 +| mileage | 否 | Integer | | 车辆里程数 |
  553 +| trafficCompulsoryInsuranceStartTime | 否 | string | | 交强险开始时间戳(毫秒) |
  554 +| trafficCompulsoryInsuranceEndTime | 否 | string | | 交强险结束时间戳(毫秒) |
  555 +| commercialInsuranceStartTime | 否 | string | | 商业险开始时间戳(毫秒) |
  556 +| commercialInsuranceEndTime | 否 | string | | 商业险结束时间戳(毫秒) |
  557 +| medallionInvalidTime | 否 | string | | 营运证失效日期时间戳(毫秒) |
  558 +| monthMileage | 否 | Integer | | 月行驶里程数 |
  559 +| recentMaintainTime | 否 | string | | 最近保养日期时间戳(毫秒) |
  560 +| vehicleObject | 是 | string | | 保养对象(车头、车挂、车头+车挂) |
  561 +| vehicleAddress | 是 | string | | 车辆位置 |
  562 +| vehicleAddressLng | 是 | string | | 车辆位置经度 |
  563 +| vehicleAddressLat | 是 | string | | 车辆位置纬度 |
  564 +| orgName | 是 | string | | 车辆所属区域 |
  565 +| remark | 否 | string | | 备注 |
  566 +| maintainProjectList | 是 | list | | 保养项目列表 |
  567 +| name | 是 | string | | 保养项目名称 |
  568 +
  569 +### 返回正常示例
  570 +
  571 + { "success": true, "businessException": false}
  572 +
  573 +### 返回异常示例
  574 +
  575 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不存在!"}
  576 +
  577 +### 备注
  578 +
  579 +| 保养类型:保养项目 |
  580 +| ------------------ |
  581 +| 发动机: |
  582 +| 检查皮带 |
  583 +| 机油滤芯 |
  584 +| 干燥罐 |
  585 +| 柴油滤芯(细滤) |
  586 +| 空气滤芯 |
  587 +| 其他 |
  588 +| 机油 |
  589 +| 油水分离器(粗滤) |
  590 +| 空调滤芯 |
  591 +| 底盘润滑: |
  592 +| 变速箱齿轮油 |
  593 +| 后桥齿轮油 |
  594 +| 车轮保养: |
  595 +| 轮毂保养 |
  596 +| 挂车保养: |
  597 +| 轴承保养 |
  598 +| 轮毂保养 |
  599 +| 底盘润滑: |
  600 +| 打黄油 |
  601 +
  602 +
  603 +
  604 +## 车辆保养确认
  605 +
  606 +### 简要描述
  607 +
  608 +· 车辆保养确认
  609 +
  610 +### 请求URL
  611 +
  612 +· 测试环境:https://test.shjiuze.cn/vehicle-service-api/maintenance/maintainConfirm
  613 +
  614 +· 生产环境:https://gw.shjiuze.cn/vehicle-service-api/maintenance/maintainConfirm
  615 +
  616 +### 请求示例
  617 +
  618 +#### Http方式
  619 +
  620 +```http
  621 +POST /vehicle-service-api/maintenance/maintainConfirm HTTP/1.1
  622 +Host:test.shjiuze.cn
  623 +Content-Type:application/json
  624 +
  625 +{
  626 + "code":"WBJL21071000044",
  627 + "maintainFlag":true,
  628 + "expectMaintainTime":"1642759341000",
  629 + "reason":"无可用站点",
  630 + "stationUser":"张大三",
  631 + "stationMobile":"13277788817",
  632 + "stationAddress":"湖北省武汉市东西湖区新城十六路88号2056物流园B33-34",
  633 + "stationLng":"113.461238",
  634 + "stationLat":"32.614137"
  635 +}
  636 +```
  637 +
  638 +#### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  639 +
  640 +```java
  641 +public class Sample {
  642 + public static void main(String[] args_) {
  643 + String appKey = "appkey";
  644 + String appSecret = "appSecret";
  645 + String jsonData = "保养确认Body参数JSON数据";
  646 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  647 + HttpResponseData httpResponseData =
  648 +zyClient.doPost(Constants.TEST_HOST + "/vehicle-service-api/maintenance/maintainConfirm", "accessToken", jsonData);
  649 + if(httpResponseData == null) {
  650 + throw new BusinessException("则一请求失败,返回结果为空!");
  651 + }
  652 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  653 + //重新获取token再次请求
  654 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  655 + "/vehicle-service-api/maintenance/maintainConfirm", "accessToken", jsonData);
  656 + }
  657 + }
  658 +}
  659 +```
  660 +
  661 +### Headers参数
  662 +
  663 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  664 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  665 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  666 +| appKey | String | 是 | 0867ef5f23ef446483749e19e1692b40 | 则一提供 |
  667 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  668 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  669 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  670 +
  671 +### Body参数
  672 +
  673 +| 参数名 | 必传 | 类型 | 说明 |
  674 +| ------------------ | ---- | ------- | -------------------- |
  675 +| code | 是 | string | 维保单号 |
  676 +| maintainFlag | 是 | boolean | 是否可保养 |
  677 +| expectMaintainTime | 否 | string | 预计保养时间戳(毫秒) |
  678 +| reason | 否 | string | 不可保养原因 |
  679 +| stationUser | 否 | string | 站点联系人 |
  680 +| stationMobile | 否 | string | 站点联系电话 |
  681 +| stationAddress | 否 | string | 站点地址 |
  682 +| stationLng | 否 | string | 站点地址经度 |
  683 +| stationLat | 否 | string | 站点地址纬度 |
  684 +
  685 +### 返回正常示例
  686 +
  687 + { "success": true, "businessException": false}
  688 +
  689 +### 返回异常示例
  690 +
  691 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不存在!"}
  692 +
  693 +
  694 +
  695 +## 车辆保养清单
  696 +
  697 +### 简要描述
  698 +
  699 +· 车辆保养清单
  700 +
  701 +### 请求URL
  702 +
  703 +· 测试环境:https://test.shjiuze.cn/vehicle-service-api/maintenance/maintainList
  704 +
  705 +· 生产环境:https://gw.shjiuze.cn/vehicle-service-api/maintenance/maintainList
  706 +
  707 +### 请求示例
  708 +
  709 +#### Http方式
  710 +
  711 +```http
  712 +POST /vehicle-service-api/maintenance/maintainList HTTP/1.1
  713 +Host:test.shjiuze.cn
  714 +Content-Type:application/json
  715 +
  716 +{
  717 + "code":"WBJL21071000044",
  718 + "orderCode":"xxxx",
  719 + "discountedAmount":100,
  720 + "totalAmount":1000,
  721 + "paidAmount":900,
  722 + "mileage":121900,
  723 + "type":"首保",
  724 + "startTime":"1642993757000",
  725 + "completeTime":"1642993757000",
  726 + "fieldMaintainPictureUrl":"http://zeyi-tms-test.oss-cn-hangzhou.aliyuncs.com/image/app/9c019526-63fd-4a39-808a-744a452cca18.jpg",
  727 + "certificatePictureUrl":"http://zeyi-tms-test.oss-cn-hangzhou.aliyuncs.com/image/app/9c019526-63fd-4a39-808a-744a452cca18.jpg",
  728 + "mileagePictureUrl":"http://zeyi-tms-test.oss-cn-hangzhou.aliyuncs.com/image/app/9c019526-63fd-4a39-808a-744a452cca18.jpg",
  729 + "feeList":[
  730 + {
  731 + "name":"工时费",
  732 + "amount":100,
  733 + "discountedAmount":0,
  734 + "remark":""
  735 + },
  736 + {
  737 + "name":"材料费",
  738 + "amount":950,
  739 + "discountedAmount":50,
  740 + "remark":""
  741 + }
  742 + ],
  743 + "maintainProjectList":[
  744 + {
  745 + "name":"空调滤芯",
  746 + "number":2,
  747 + "unitPrice":275,
  748 + "discountedAmount":50,
  749 + "laborAmount":0,
  750 + "totalAmount":500,
  751 +
  752 +​ "type":"MAINTAIN"
  753 +
  754 +​ "remark":""
  755 +​ },
  756 +​ {
  757 +​ "name":"机油滤芯",
  758 +​ "number":1,
  759 +​ "unitPrice":400,
  760 +​ "discountedAmount":0,
  761 +​ "laborAmount":100,
  762 +​ "totalAmount":500,
  763 +
  764 +​ "type":"MAINTAIN"
  765 +
  766 +​ "remark":""
  767 +​ },
  768 +
  769 +​ {
  770 +​ "name":"工时费用",
  771 +​ "timeQuota":"1",
  772 +​ "unitAmount":100,
  773 +​ "amount":100,
  774 +​ "remark":""
  775 +​ }
  776 +
  777 +​ ]
  778 +}
  779 +```
  780 +
  781 +#### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  782 +
  783 +```java
  784 +public class Sample {
  785 + public static void main(String[] args_) {
  786 + String appKey = "appkey";
  787 + String appSecret = "appSecret";
  788 + String jsonData = "保养清单Body参数JSON数据";
  789 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  790 + HttpResponseData httpResponseData =
  791 +zyClient.doPost(Constants.TEST_HOST + "/vehicle-service-api/maintenance/maintainList", "accessToken", jsonData);
  792 + if(httpResponseData == null) {
  793 + throw new BusinessException("则一请求失败,返回结果为空!");
  794 + }
  795 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  796 + //重新获取token再次请求
  797 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  798 + "/vehicle-service-api/maintenance/maintainList", "accessToken", jsonData);
  799 + }
  800 + }
  801 +}
  802 +```
  803 +
  804 +### Headers参数
  805 +
  806 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  807 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  808 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  809 +| appKey | String | 是 | 0867ef5f23ef446483749e19e1692b40 | 则一提供 |
  810 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  811 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  812 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  813 +
  814 +### Body参数
  815 +
  816 +| 参数名 | 必传 | 类型 | 说明 |
  817 +| ----------------------------------------------- | ---- | ---------- | -------------------------------------------- |
  818 +| code | 是 | string | 维保编码 |
  819 +| orderCode | 是 | string | 维保订单号 |
  820 +| discountedAmount | 否 | Bigdecimal | 折扣金额 |
  821 +| totalAmount | 是 | Bigdecimal | 总金额 |
  822 +| paidAmount | 是 | Bigdecimal | 应付金额 |
  823 +| mileage | 是 | Integer | 车辆里程数 |
  824 +| type | 是 | string | 保养类型 |
  825 +| startTime | 是 | string | 开始时间戳(毫秒) |
  826 +| completeTime | 是 | string | 完工时间戳(毫秒) |
  827 +| fieldMaintainPictureUrl | 是 | string | 清单照片url,多个图片用逗号分割 |
  828 +| certificatePictureUrl | 是 | string | 现场照片url,多个图片用逗号分割 |
  829 +| mileagePictureUrl | 是 | string | 里程照片url,多个图片用逗号分割 |
  830 +| feeList | 否 | list | 费用明细集合 |
  831 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 名称(工时费、材料费、拖车费等等) |
  832 +| &nbsp;&nbsp;&nbsp;&nbsp;unit | 否 | string | 单位 |
  833 +| &nbsp;&nbsp;&nbsp;&nbsp;unitPrice | 否 | Bigdecimal | 单价 |
  834 +| &nbsp;&nbsp;&nbsp;&nbsp;number | 否 | Integer | 数量 |
  835 +| &nbsp;&nbsp;&nbsp;&nbsp;amount | 是 | Bigdecimal | 金额 |
  836 +| &nbsp;&nbsp;&nbsp;&nbsp;discountedAmount | 是 | Bigdecimal | 折扣金额 |
  837 +| &nbsp;&nbsp;&nbsp;&nbsp;remark | 否 | string | 备注 |
  838 +| maintainProjectList | 否 | list | 保养项目集合(包含配件信息) |
  839 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 项目名称 |
  840 +| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unit | 否 | string | 单位 |
  841 +| &nbsp;&nbsp;&nbsp;&nbsp;number | 是 | Integer | 数量 |
  842 +| &nbsp;&nbsp;&nbsp;&nbsp;unitPrice | 是 | Bigdecimal | 单价 |
  843 +| &nbsp;&nbsp;&nbsp;&nbsp;discountedAmount | 否 | Bigdecimal | 折扣金额 |
  844 +| &nbsp;&nbsp;&nbsp;&nbsp;totalAmount | 是 | Bigdecimal | 合计金额 |
  845 +| &nbsp;&nbsp;&nbsp;&nbsp;type | 是 | string | MAINTAIN:保养 或 REPAIR:维修 |
  846 +| &nbsp;&nbsp;&nbsp;&nbsp;remark | 否 | string | 备注 |
  847 +| &nbsp;&nbsp;&nbsp;&nbsp;timeQuota | 否 | Bigdecimal | 工时定额 |
  848 +| &nbsp;&nbsp;&nbsp;&nbsp;projectType | 是 | string | 维保项目类型(配件:materials\|项目:project) |
  849 +| &nbsp;&nbsp;&nbsp;&nbsp;nextMaintainanceMileage | 否 | Integer | 下次保养里程数 |
  850 +| &nbsp;&nbsp;&nbsp;&nbsp;nextMaintainanceTime | 是 | string | 下次保养时间戳(毫秒) |
  851 +
  852 +### 返回正常示例
  853 +
  854 + { "success": true, "businessException": false}
  855 +
  856 +### 返回异常示例
  857 +
  858 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不存在!"}
  859 +
  860 +
  861 +
  862 +## 车辆维保审核
  863 +
  864 +### 简要描述
  865 +
  866 +· 车辆维保审核
  867 +
  868 +### 请求URL
  869 +
  870 +· 车畅行提供 /vehicleMaintainRepair/audit
  871 +
  872 +### 请求方式
  873 +
  874 +· POST
  875 +
  876 +### 请求示例
  877 +
  878 +{
  879 + "code":"WBJL21071000044",
  880 + "auditStatus":"PASS",
  881 + "auditRemark":"审核备注",
  882 + "auditeTime":"1642755099000",
  883 + "contactUser":"张大三",
  884 + "contactMobile":"13277676171"
  885 +}
  886 +
  887 +### 参数
  888 +
  889 +| 参数名 | 必传 | 类型 | 说明 |
  890 +| ------------- | ---- | ------ | ------------------------------------------- |
  891 +| code | 是 | string | 维保编码 |
  892 +| auditStatus | 是 | string | 审核状态(PASS:审核通过,NO_PASS:审核不通过) |
  893 +| auditRemark | 否 | string | 审核备注 |
  894 +| auditeTime | 是 | string | 审核时间戳(毫秒) |
  895 +| contactUser | 否 | string | 审核联系人 |
  896 +| contactMobile | 否 | string | 审核联系人电话 |
  897 +
  898 +### 返回正常示例
  899 +
  900 + { "success": true, "businessException": false}
  901 +
  902 +### 返回异常示例
  903 +
  904 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不存在!"}
  905 +
  906 +
  907 +
  908 +## 车辆维保作废
  909 +
  910 +### 简要描述
  911 +
  912 +· 车辆维保作废
  913 +
  914 +### 请求URL
  915 +
  916 +· 车畅行提供 /vehicleMaintainRepair/delete
  917 +
  918 +### 请求方式
  919 +
  920 +· POST
  921 +
  922 +### 请求示例
  923 +
  924 +{
  925 + "code":"WBJL21071000044",
  926 + "reason":"上报信息错误",
  927 + "operationTime":"1642755099000",
  928 + "operationUser":"张大三",
  929 + "operationMobile":"13277676171"
  930 +}
  931 +
  932 +### 参数
  933 +
  934 +| 参数名 | 必传 | 类型 | 说明 |
  935 +| --------------- | ---- | ------ | ---------------- |
  936 +| code | 是 | string | 维保编码 |
  937 +| reason | 否 | string | 作废原因 |
  938 +| operationTime | 是 | string | 操作时间戳(毫秒) |
  939 +| operationUser | 否 | string | 操作人 |
  940 +| operationMobile | 否 | string | 操作人电话 |
  941 +
  942 +### 返回正常示例
  943 +
  944 + { "success": true, "businessException": false}
  945 +
  946 +### 返回异常示例
  947 +
  948 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx异常!"}
  949 +
  950 +
  951 +
  952 +## 车辆维保合同推送
  953 +
  954 +### 简要描述
  955 +
  956 +· 车辆维修合同推送
  957 +
  958 +### 请求URL
  959 +
  960 +· 测试环境:https://test.shjiuze.cn/vehicle-service-api/vehicleMaintainRepairContract/push
  961 +
  962 +· 生产环境:https://gw.shjiuze.cn/vehicle-service-api/vehicleMaintainRepairContract/push
  963 +
  964 +### 请求示例
  965 +
  966 +#### Http方式
  967 +
  968 +```http
  969 +POST /vehicle-service-api/vehicleMaintainRepairContract/push HTTP/1.1
  970 +Host:test.shjiuze.cn
  971 +Content-Type:application/json
  972 +
  973 +{
  974 + "code":"HT123123123123",
  975 + "originContractCode":"",
  976 + "maintainRepairCode":"WBJL123123123123",
  977 + "companyName":"上海东风公司",
  978 + "branchName":"上海东风青浦门店",
  979 + "billStatus":"",
  980 + "maintainType":"首保",
  981 + "devoteRate":0.56,
  982 + "memberType":"",
  983 + "memberNo":"",
  984 + "comeDate":"1642993757000",
  985 + "sendWay":"",
  986 + "collectionWay":"自提",
  987 + "collectionDate":"1642993757000",
  988 + "licenseNumber":"沪A123456",
  989 + "specification":"9.6",
  990 + "mileage":100000,
  991 + "expectCompleteTime":"1642993757000",
  992 + "deliveryTime":"1642993757000",
  993 + "remark":"备注",
  994 + "month":"2021-02-02",
  995 + "productTotalAmount":1000,
  996 + "serviceTotalAmount":1000,
  997 + "productDiscountedAmount":100,
  998 + "serviceDiscountedAmount":100,
  999 + "totalAmount":1800,
  1000 + "contractDetail":[
  1001 + {
  1002 + "serviceName": "换机油",
  1003 + "serviceNeedHour": 2,
  1004 + "serviceHourUnitAmount": 100,
  1005 + "serviceCustomerUnitAmount": 120,
  1006 + "serviceBranchUnitAmount": 150,
  1007 + "confirmFlag": true,
  1008 + "completeTime": "1642993757000",
  1009 + "selfCheckUser": "张三",
  1010 + "selfCheckTime": "1642993757000",
  1011 + "checkUser": "张三",
  1012 + "checkTime": "1642993757000",
  1013 + "remark": "备注",
  1014 + }
  1015 + ]
  1016 +}
  1017 +```
  1018 +
  1019 +#### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  1020 +
  1021 +```java
  1022 +public class Sample {
  1023 + public static void main(String[] args_) {
  1024 + String appKey = "appkey";
  1025 + String appSecret = "appSecret";
  1026 + String jsonData = "维保合同推送Body参数JSON数据";
  1027 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  1028 + HttpResponseData httpResponseData =
  1029 +zyClient.doPost(Constants.TEST_HOST + "/vehicle-service-api/vehicleMaintainRepairContract/push", "accessToken", jsonData);
  1030 + if(httpResponseData == null) {
  1031 + throw new BusinessException("则一请求失败,返回结果为空!");
  1032 + }
  1033 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  1034 + //重新获取token再次请求
  1035 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  1036 + "/vehicle-service-api/vehicleMaintainRepairContract/push", "accessToken", jsonData);
  1037 + }
  1038 + }
  1039 +}
  1040 +```
  1041 +
  1042 +### Headers参数
  1043 +
  1044 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  1045 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  1046 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  1047 +| appKey | String | 是 | 0867ef5f23ef446483749e19e1692b40 | 则一提供 |
  1048 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  1049 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  1050 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  1051 +
  1052 +### Body参数
  1053 +
  1054 +| 参数名 | 必传 | 类型 | 说明 |
  1055 +| ------------------------- | ---- | ---------- | -------------------- |
  1056 +| code | 是 | string | 合同编号 |
  1057 +| originContractCode | 否 | string | 源合同编号 |
  1058 +| maintainRepairCode | 是 | string | 维保编号 |
  1059 +| companyName | 是 | string | 甲方公司名称 |
  1060 +| branchName | 是 | string | 维修门店名称 |
  1061 +| billStatus | 是 | string | 单据状态 |
  1062 +| maintainType | 是 | string | 维保类型 |
  1063 +| devoteRate | 否 | Bigdecimal | 维修类贡献比例 |
  1064 +| memberType | 否 | string | 会员类型 |
  1065 +| memberNo | 否 | string | 会员编号 |
  1066 +| comeDate | 是 | string | 进场时间戳(毫秒) |
  1067 +| sendWay | 否 | string | 送修方式 |
  1068 +| collectionWay | 否 | string | 提车方式 |
  1069 +| collectionDate | 否 | string | 提车时间戳(毫秒) |
  1070 +| licenseNumber | 是 | string | 车牌号 |
  1071 +| specification | 是 | string | 车型 |
  1072 +| mileage | 否 | Integer | 公里数 |
  1073 +| expectCompleteTime | 是 | string | 预计完成时间戳(毫秒) |
  1074 +| deliveryTime | 否 | string | 出厂时间戳(毫秒) |
  1075 +| remark | 否 | string | 备注 |
  1076 +| month | 否 | string | 会计时间 |
  1077 +| productTotalAmount | 否 | Bigdecimal | 货品项目总费用 |
  1078 +| serviceTotalAmount | 否 | Bigdecimal | 服务项目总费用 |
  1079 +| productDiscountedAmount | 否 | Bigdecimal | 货品项目优惠折扣费用 |
  1080 +| serviceDiscountedAmount | 否 | Bigdecimal | 服务项目优惠折扣费用 |
  1081 +| totalAmount | 否 | Bigdecimal | 总费用 |
  1082 +| contractDetail | 是 | list | 合同明细 |
  1083 +| serviceName | 是 | string | 服务名称 |
  1084 +| serviceNeedHour | 是 | Integer | 服务项目所需工时 |
  1085 +| serviceHourUnitAmount | 是 | Bigdecimal | 服务项目工时单价 |
  1086 +| serviceCustomerUnitAmount | 是 | Bigdecimal | 服务项目客户单价 |
  1087 +| serviceBranchUnitAmount | 是 | Bigdecimal | 服务项目门店单价 |
  1088 +| confirmFlag | 是 | boolean | 是否确认维修 |
  1089 +| completeTime | 否 | string | 完工时间戳(毫秒) |
  1090 +| selfCheckUser | 否 | string | 自检人 |
  1091 +| selfCheckTime | 否 | string | 自检时间戳(毫秒) |
  1092 +| checkUser | 否 | string | 过程检验人 |
  1093 +| checkTime | 否 | string | 过程检验时间戳(毫秒) |
  1094 +| remark | 否 | string | 备注 |
  1095 +
  1096 +### 返回正常示例
  1097 +
  1098 + { "success": true, "businessException": false}
  1099 +
  1100 +### 返回异常示例
  1101 +
  1102 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx异常!"}
  1103 +
  1104 +
  1105 +
  1106 +## 车辆维保合同作废
  1107 +
  1108 +### 简要描述
  1109 +
  1110 +· 车辆维保合同作废
  1111 +
  1112 +### 请求URL
  1113 +
  1114 +· 测试环境:https://test.shjiuze.cn/vehicle-service-api/vehicleMaintainRepairContract/invalid
  1115 +
  1116 +· 生产环境:https://gw.shjiuze.cn/vehicle-service-api/vehicleMaintainRepairContract/invalid
  1117 +
  1118 +### 请求示例
  1119 +
  1120 +#### Http方式
  1121 +
  1122 +```http
  1123 +POST /vehicle-service-api/vehicleMaintainRepairContract/delete HTTP/1.1
  1124 +Host:test.shjiuze.cn
  1125 +Content-Type:application/json
  1126 +
  1127 +{
  1128 + "code":"HT21071000044",
  1129 + "reason":"上报信息错误",
  1130 + "operationTime":"1642755099000",
  1131 + "operationUser":"张大三",
  1132 + "operationMobile":"13277676171"
  1133 +}
  1134 +```
  1135 +
  1136 +#### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  1137 +
  1138 +```java
  1139 +public class Sample {
  1140 + public static void main(String[] args_) {
  1141 + String appKey = "appkey";
  1142 + String appSecret = "appSecret";
  1143 + String jsonData = "维保合同作废Body参数JSON数据";
  1144 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  1145 + HttpResponseData httpResponseData =
  1146 +zyClient.doPost(Constants.TEST_HOST + "/vehicle-service-api/vehicleMaintainRepairContract/delete", "accessToken", jsonData);
  1147 + if(httpResponseData == null) {
  1148 + throw new BusinessException("则一请求失败,返回结果为空!");
  1149 + }
  1150 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  1151 + //重新获取token再次请求
  1152 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  1153 + "/vehicle-service-api/vehicleMaintainRepairContract/delete", "accessToken", jsonData);
  1154 + }
  1155 + }
  1156 +}
  1157 +```
  1158 +
  1159 +### Headers参数
  1160 +
  1161 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  1162 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  1163 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  1164 +| appKey | String | 是 | 0867ef5f23ef446483749e19e1692b40 | 则一提供 |
  1165 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  1166 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  1167 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  1168 +
  1169 +### Body参数
  1170 +
  1171 +| 参数名 | 必传 | 类型 | 说明 |
  1172 +| --------------- | ---- | ------ | ---------------- |
  1173 +| code | 是 | string | 合同编码 |
  1174 +| reason | 否 | string | 作废原因 |
  1175 +| operationTime | 是 | string | 操作时间戳(毫秒) |
  1176 +| operationUser | 否 | string | 操作人 |
  1177 +| operationMobile | 否 | string | 操作人电话 |
  1178 +
  1179 +### 返回正常示例
  1180 +
  1181 + { "success": true, "businessException": false}
  1182 +
  1183 +### 返回异常示例
  1184 +
  1185 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx异常!"}
  1186 +
  1187 +
  1188 +
  1189 +
  1190 +
  1191 +## 维保单作废
  1192 +
  1193 +### 简要描述
  1194 +
  1195 +· 维保单作废
  1196 +
  1197 +​ <font color="red"> 如果此维保单已生成结算单或者已付款,则维保单不可作废,系统会抛出业务异常例如:已生成结算单不可作废 或 已付款不可作废</font>
  1198 +
  1199 +### 请求URL
  1200 +
  1201 +· 测试环境:https://test.shjiuze.cn/vehicle-service-api/maintenance/invalid
  1202 +
  1203 +· 生产环境:https://gw.shjiuze.cn/vehicle-service-api/maintenance/invalid
  1204 +
  1205 +### 请求示例
  1206 +
  1207 +#### Http方式
  1208 +
  1209 +```http
  1210 +POST /vehicle-service-api/maintenance/delete HTTP/1.1
  1211 +Host:test.shjiuze.cn
  1212 +Content-Type:application/json
  1213 +
  1214 +{
  1215 + "code":"WBJL22090200012",
  1216 + "reason":"原因:重复数据等等xxxxxxxx",
  1217 + "operationTime":"1642755099000",
  1218 + "operationUser":"张大三",
  1219 + "operationMobile":"13277676171"
  1220 +}
  1221 +```
  1222 +
  1223 +#### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  1224 +
  1225 +```java
  1226 +public class Sample {
  1227 + public static void main(String[] args_) {
  1228 + String appKey = "appkey";
  1229 + String appSecret = "appSecret";
  1230 + String jsonData = "维保单作废Body参数JSON数据";
  1231 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  1232 + HttpResponseData httpResponseData =
  1233 +zyClient.doPost(Constants.TEST_HOST + "/vehicle-service-api/maintenance/invalid", "accessToken", jsonData);
  1234 + if(httpResponseData == null) {
  1235 + throw new BusinessException("则一请求失败,返回结果为空!");
  1236 + }
  1237 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  1238 + //重新获取token再次请求
  1239 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  1240 + "/vehicle-service-api/maintenance/delete", "accessToken", jsonData);
  1241 + }
  1242 + }
  1243 +}
  1244 +```
  1245 +
  1246 +### Headers参数
  1247 +
  1248 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  1249 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  1250 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  1251 +| appKey | String | 是 | 0867ef5f23ef446483749e19e1692b40 | 则一提供 |
  1252 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  1253 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  1254 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  1255 +
  1256 +### Body参数
  1257 +
  1258 +| 参数名 | 必传 | 类型 | 说明 |
  1259 +| --------------- | ---- | ------ | ---------------- |
  1260 +| code | 是 | string | 维保编码 |
  1261 +| reason | 是 | string | 作废原因 |
  1262 +| operationTime | 是 | string | 操作时间戳(毫秒) |
  1263 +| operationUser | 否 | string | 操作人 |
  1264 +| operationMobile | 否 | string | 操作人电话 |
  1265 +
  1266 +### 返回正常示例
  1267 +
  1268 + { "success": true, "businessException": false}
  1269 +
  1270 +### 返回异常示例
  1271 +
  1272 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx已付款,无法作废!"}
  1273 +
  1274 +
  1275 +
  1276 +## 维保单价格推送
  1277 +
  1278 +### 简要描述
  1279 +
  1280 +维保单价格推送
  1281 +
  1282 +### 请求方式
  1283 +
  1284 +· POST
  1285 +
  1286 +### 请求URL
  1287 +
  1288 +· 车畅行提供 /vehicleMaintainRepair/confirmPirce
  1289 +
  1290 +<h3>请求示例</h3>
  1291 +
  1292 +{
  1293 + "code":"WBJL21071000044",
  1294 + "confirmAmount":1000,
  1295 + "feeList":[
  1296 + {
  1297 + "name":"工时费",
  1298 + "confirmNumber":0,
  1299 + "confirmAmount":0
  1300 + },
  1301 + {
  1302 + "name":"材料费",
  1303 + "confirmNumber":0,
  1304 + "confirmAmount":0
  1305 + }
  1306 + ],
  1307 + "maintainProjectList":[
  1308 + {
  1309 + "name":"空调滤芯",
  1310 + "confirmNumber":2,
  1311 + "confirmAmount":0,
  1312 + "type":"MAINTAIN",
  1313 + "projectType":"materials"
  1314 + },
  1315 + {
  1316 + "name":"机油滤芯",
  1317 + "confirmNumber":1,
  1318 + "confirmAmount":500,
  1319 + "type":"MAINTAIN",
  1320 + "projectType":"materials"
  1321 + }
  1322 + ]
  1323 +}
  1324 +
  1325 +### Body参数
  1326 +
  1327 +| 参数名 | 必传 | 类型 | 说明 |
  1328 +| ------------------------------------- | ---- | ---------- | -------------------------------------------- |
  1329 +| code | 是 | string | 维保编码 |
  1330 +| confirmAmount | 是 | Bigdecimal | 则一确认总金额 |
  1331 +| feeList | 是 | list | 费用明细集合 |
  1332 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 名称(工时费、材料费、拖车费等等) |
  1333 +| &nbsp;&nbsp;&nbsp;&nbsp;confirmNumber | 是 | Integer | 则一确认数量 |
  1334 +| &nbsp;&nbsp;&nbsp;&nbsp;confirmAmount | 是 | Bigdecimal | 则一确认金额 |
  1335 +| maintainProjectList | 是 | list | 保养项目集合(包含配件信息) |
  1336 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 项目名称 |
  1337 +| &nbsp;&nbsp;&nbsp;&nbsp;confirmNumber | 是 | Integer | 则一确认数量 |
  1338 +| &nbsp;&nbsp;&nbsp;&nbsp;confirmAmount | 是 | Bigdecimal | 则一确认金额 |
  1339 +| &nbsp;&nbsp;&nbsp;&nbsp;type | 是 | string | MAINTAIN:保养 或 REPAIR:维修 |
  1340 +| &nbsp;&nbsp;&nbsp;&nbsp;projectType | 是 | string | 维保项目类型(配件:materials\|项目:project) |
  1341 +
  1342 +### 返回正常示例
  1343 +
  1344 + { "success": true, "businessException": false}
  1345 +
  1346 +### 返回异常示例
  1347 +
  1348 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不能为空!"}
  1349 +
  1350 +------------------------------------------------------------------------------------------
  1351 +
  1352 +### 2022-03-05更新日志
  1353 +
  1354 +1. [车辆报修](#车辆报修) 、[车辆保养](#车辆保养)接口参数增加remark字段非必填
  1355 +2. [车辆保养清单](#车辆保养清单):接口参数maintainProjectList中增加类型type字段需必填
  1356 +
  1357 +
  1358 +
  1359 +### 2022-03-11更新日志
  1360 +
  1361 +1. 回调则一接口请求路径变更
  1362 +2. [车辆保养清单](#车辆保养清单)、[车辆维修清单](#车辆维修清单):接口参数taskFeeList移除、合并到维修保养项目集合字段中。
  1363 +3. [车辆保养清单](#车辆保养清单):保养项目集合中增加下次保养时间、下次保养里程数字段
  1364 +
  1365 +
  1366 +
  1367 +### 2022-03-16更新日志
  1368 +
  1369 +​ 1.优化接口请求示例
  1370 +
  1371 +
  1372 +
  1373 +### 2022-03-23更新日志
  1374 +
  1375 +​ 1.维修、保养清单推送增加应付金额字段(必填):【应付价格】计算逻辑:应付价格=总金额-折扣金额
  1376 +
  1377 +
  1378 +
  1379 +### 2022-03-31更新日志
  1380 +
  1381 +​ 1.车辆维修清单、车辆保养清单中的项目集合兼容配件信息
  1382 +
  1383 +
  1384 +
  1385 +### 2022-09-02更新日志
  1386 +
  1387 + 1. 增加维保单作废接口 (车畅行操作作废后成功后 回调此接口)
  1388 + 2. 增加维保单价格推送接口 (我司对维保清单的项目价格确认后推送给车畅行)
  1389 +
  1390 +
  1391 +
  1392 +### 2022-10-13更新日志
  1393 +
  1394 +```json
  1395 +1. 维修及保养清单推送增加orderCode(必填) 开始时间戳:startTime(必填) 完工时间戳:completeTime (必填)
  1396 +```
  1397 +
  1398 +
  1399 +
  1400 +### 2022-11-03更新日志
  1401 +
  1402 +```json
  1403 +1. 车辆报修、车辆保养接口增加车辆所属区域字段:orgName
  1404 +2. 车辆维修清单、车辆保养清单中的项目集合、费用明细集合设置为非必填
  1405 +```
  1406 +
vehicle/maintenance/2022120102/maintenance.md 0 → 100644
@@ -0,0 +1,790 @@ @@ -0,0 +1,790 @@
  1 +[toc]
  2 +
  3 +# 车辆维保对接API
  4 +
  5 +则一提供了不同规范的API,调用服务端API前,需了解开发前须知及调用流程。本文提供了调用则一服务端API示例,供开发者参考。
  6 +
  7 +## 白名单
  8 +
  9 +则一服务端API接口访问有IP白名单限制,需要接口调用方提供调用API的服务器IP地址。
  10 +
  11 +## 数据加签
  12 +
  13 +采用md5(32位小写)算法生成签名
  14 +appKey(则一提供) + appSecret(则一提供) + timestamp(当前时间戳毫秒) + nonce(6位随机码大小写字母数子组合) + data(请求数据)
  15 +
  16 +## 数据加密
  17 +
  18 +数据加密采用AES算法
  19 +加密模式: CBC
  20 +填充方式:PKCS5Padding
  21 +偏移量:iv(则一提供)
  22 +加密内容:appKey(则一提供) + timestamp(当前时间戳毫秒) + nonce(6位随机码大小写字母数子组合) + data(加密数据)
  23 +密钥: appSecret(则一提供)
  24 +输出:base64
  25 +字符集:utf-8
  26 +注:无敏感数据则无需加密
  27 +
  28 +## 获取访问凭证
  29 +
  30 +### 概述
  31 +
  32 +调用则一服务API时,都需要先获取对应权限类型的访问凭证accessToken。访问凭证(accessToken)是由则一权限系统颁发的,用来校验调用者的身份信息,确保调用者具有要执行的操作的权限。
  33 +**说明**: 在使用accessToken时,请注意:
  34 +
  35 +* accessToken的有效期默认为30天,有效期内重复获取会返回相同结果,过期后获取会返回新的accessToken。
  36 +* 开发者需要缓存accessToken,用于后续接口的调用。不能频繁调用获取accessToken接口,否则会受到频率拦截。
  37 +* 当调用业务API时,如果返回状态码为401,则说明accessToken不正确或已过期,这时需要重新获取accessToken后再调用对应的API。
  38 +
  39 +### 接口信息
  40 +
  41 +#### 请求方式:
  42 +
  43 +post
  44 +
  45 +#### 请求地址:
  46 +
  47 +* 生产:https://gw.shjiuze.cn/auth-service-api/login/password
  48 +* 测试:https://test.shjiuze.cn/auth-service-api/login/password
  49 +
  50 +#### Body参数
  51 +
  52 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  53 +| -------- | ------ | ---- | ----------- | ---------------- |
  54 +| username | String | 是 | zhangsan | 用户名,则一提供 |
  55 +| password | String | 是 | password123 | 密码,则一提供 |
  56 +
  57 +#### 返回参数
  58 +
  59 +| 名称 | 类型 | 示例值 | 描述 |
  60 +| ------------------------------ | ---------- | -------------------------------- | -------------------------------------------------- |
  61 +| success | boolean | true | 成功标识: true 成功,false 失败 |
  62 +| businessException | boolean | false | 业务异常标识: true 业务异常,false 正常 |
  63 +| errorCode | String | 200 | 错误码: 200 业务异常,500 系统异常, 空表示无错误 |
  64 +| message | String | 订单号不能为空 | 错误信息,无错误则返回空 |
  65 +| result | ZYTokenDto | | accessToken结果数据 |
  66 +| &nbsp;&nbsp;&nbsp; accessToken | String | 000626f15b4b41bba6fe56216a5d2f73 | accessToken |
  67 +| &nbsp;&nbsp;&nbsp; expiresIn | Integer | 2060 | 有效期限单位秒,accessToken在2060秒后过期 |
  68 +| &nbsp;&nbsp;&nbsp; tokenType | String | bearer | token类型 |
  69 +
  70 +#### 请求示例
  71 +
  72 +##### Http方式
  73 +
  74 +```http
  75 +POST /auth-service-api/login/password HTTP/1.1
  76 +Host:test.shjiuze.cn
  77 +Content-Type:application/json
  78 +
  79 +{
  80 + "username" : "zeyi",
  81 + "password" : "test1111"
  82 +}
  83 +```
  84 +
  85 +##### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  86 +
  87 +```java
  88 +public class Sample {
  89 + public static void main(String[] args_) {
  90 + String appKey = "appkey";
  91 + String appSecret = "appSecret";
  92 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  93 + ZYTokenRequestDto zyTokenRequest = new ZYTokenRequestDto();
  94 + zyTokenRequest.setUsername("zeyi");
  95 + zyTokenRequest.setPassword("test1111");
  96 + String body = gson.toJson(zyTokenRequest);
  97 + HttpResponseData httpResponseData = zyClient.doPost(Constants.TEST_HOST + Constants.TOKEN_PATH, body);
  98 + if(httpResponseData == null) {
  99 + throw new TokenException("则一Token请求失败,返回为空!");
  100 + }
  101 + ZYResponse<ZYTokenDto> zyResponse = gson.fromJson(httpResponseData.getBody(), new TypeToken<ZYResponse<ZYTokenDto>>(){}.getType());
  102 + if(!Boolean.TRUE.equals(zyResponse.isSuccess())) {
  103 + throw new TokenException("则一Token请求返回失败!" + zyResponse.getMessage());
  104 + }
  105 + if(zyResponse.getResult() == null) {
  106 + throw new TokenException("则一Token请求返回失败,返回结果为空!" + zyResponse.getMessage());
  107 + }
  108 + if(StringUtils.isBlank(zyResponse.getResult().getAccessToken())) {
  109 + throw new TokenException("则一Token请求返回数据异常,AccessToken为空!" + zyResponse.getMessage());
  110 + }
  111 + // 结果 zyResponse.getResult();
  112 + }
  113 +}
  114 +```
  115 +
  116 +#### 返回示例
  117 +
  118 +```json
  119 +{
  120 + "success": true,
  121 + "businessException": false,
  122 + "errorCode": null,
  123 + "message": null,
  124 + "result": {
  125 + "accessToken": "64d7f367-609b-4f7d-a84d-a3d2a0b5ad85",
  126 + "expiresIn": 602105,
  127 + "tokenType": "bearer"
  128 + }
  129 +}
  130 +```
  131 +
  132 +## 车辆报修
  133 +
  134 +### 简要描述
  135 +
  136 +· 车辆报修
  137 +
  138 +### 请求URL
  139 +
  140 +· 车畅行提供 /vehicleRepair/repair
  141 +
  142 +### 请求方式
  143 +
  144 +· POST
  145 +
  146 +### 请求示例
  147 +
  148 +```json
  149 +{
  150 + "code":"WBJL21071000044",
  151 + "licenseNumber":"鄂ARY348",
  152 + "trailerNumber":"辽BHC28挂",
  153 + "owner":"上海则一",
  154 + "brand":"东风",
  155 + "specification":"9.6",
  156 + "vanType":"厢车",
  157 + "driverName":"张三",
  158 + "driverMobile":"18888888888",
  159 + "vin":"21654564894984LK",
  160 + "engineNumber":"2156156",
  161 + "engineModel":"大众EA111",
  162 + "manufactureTime":"1642993757000",
  163 + "registrationTime":"1642993757000",
  164 + "mileage":100000,
  165 + "trafficCompulsoryInsuranceStartTime":"1642993757000",
  166 + "trafficCompulsoryInsuranceEndTime":"1642993757000",
  167 + "commercialInsuranceStartTime":"1642993757000",
  168 + "commercialInsuranceEndTime":"1642993757000",
  169 + "medallionInvalidTime":"1642993757000",
  170 + "monthMileage":100000,
  171 + "recentRepairTime":"1642993757000",
  172 + "vehicleObject":"车头",
  173 + "vehicleAddress":"湖北省随州市曾都区淅河镇002县道",
  174 + "vehicleAddressLng":"113.465168",
  175 + "vehicleAddressLat":"31.664137",
  176 + "orgName":"上海区"
  177 +}
  178 +```
  179 +
  180 +
  181 +### 参数
  182 +
  183 +| 参数名 | 必传 | 类型 | | 说明 |
  184 +| :---------------------------------- | ---- | ------- | ---- | ------------------------------- |
  185 +| code | 是 | string | | 维保单号 |
  186 +| licenseNumber | 是 | string | | 车牌号 |
  187 +| trailerNumber | 否 | string | | 挂车号 |
  188 +| owner | 是 | string | | 车辆所有人 |
  189 +| brand | 否 | string | | 品牌 |
  190 +| specification | 否 | string | | 车型 |
  191 +| vanType | 否 | string | | 车厢类型 |
  192 +| driverName | 是 | string | | 司机联系姓名 |
  193 +| driverMobile | 是 | string | | 司机联系电话 |
  194 +| vin | 是 | string | | 车架号 |
  195 +| engineNumber | 是 | string | | 发动机号码 |
  196 +| engineModel | 否 | string | | 发动机型号 |
  197 +| manufactureTime | 否 | string | | 出厂日期时间戳(毫秒) |
  198 +| registrationTime | 否 | string | | 注册日期时间戳(毫秒) |
  199 +| mileage | 否 | Integer | | 车辆里程数 |
  200 +| trafficCompulsoryInsuranceStartTime | 否 | string | | 交强险开始时间戳(毫秒) |
  201 +| trafficCompulsoryInsuranceEndTime | 否 | string | | 交强险结束时间戳(毫秒) |
  202 +| commercialInsuranceStartTime | 否 | string | | 商业险开始时间戳(毫秒) |
  203 +| commercialInsuranceEndTime | 否 | string | | 商业险结束时间戳(毫秒) |
  204 +| medallionInvalidTime | 否 | string | | 营运证失效日期时间戳(毫秒) |
  205 +| monthMileage | 否 | Integer | | 月行驶里程数 |
  206 +| recentRepairTime | 否 | string | | 最近维修日期时间戳(毫秒) |
  207 +| vehicleObject | 是 | string | | 维修对象(车头、车挂、车头+车挂) |
  208 +| vehicleAddress | 是 | string | | 车辆位置 |
  209 +| vehicleAddressLng | 是 | string | | 车辆位置经度 |
  210 +| vehicleAddressLat | 是 | string | | 车辆位置纬度 |
  211 +| orgName | 是 | string | | 车辆所属区域 |
  212 +| remark | 否 | string | | 备注 |
  213 +
  214 +### 返回正常示例
  215 +
  216 + { "success": true, "businessException": false}
  217 +
  218 +### 返回异常示例
  219 +
  220 + { "success": false, "businessException": true, "errorCode": "200", "message": "XXX不存在!"}
  221 +
  222 +
  223 +
  224 +## 车辆维修清单
  225 +
  226 +### 简要描述
  227 +
  228 +· 车辆维修清单
  229 +
  230 +### 请求URL
  231 +
  232 +· 测试环境:https://test.shjiuze.cn/vehicle-service-api/maintenance/repairList
  233 +
  234 +· 生产环境:https://gw.shjiuze.cn/vehicle-service-api/maintenance/repairList
  235 +
  236 +### 请求示例
  237 +
  238 +#### Http方式
  239 +
  240 +```http
  241 +POST /vehicle-service-api/maintenance/repairList HTTP/1.1
  242 +Host:test.shjiuze.cn
  243 +Content-Type:application/json
  244 +
  245 +{
  246 + "code":"WBJL21071000044",
  247 + "orderCode":"xxxx",
  248 + "discountedAmount":100,
  249 + "totalAmount":1000,
  250 + "paidAmount":900,
  251 + "mileage":121900,
  252 + "type":"大修",
  253 + "feeList":[
  254 + {
  255 + "name":"工时费",
  256 + "amount":100,
  257 + "discountedAmount":0,
  258 + "remark":""
  259 + },
  260 + {
  261 + "name":"材料费",
  262 + "amount":950,
  263 + "discountedAmount":50,
  264 + "remark":""
  265 + }
  266 + ],
  267 + "repairProjectList":[
  268 + {
  269 + "name":"空调滤芯",
  270 + "number":2,
  271 + "unitPrice":275,
  272 + "discountedAmount":50,
  273 + "laborAmount":0,
  274 + "totalAmount":500,
  275 + "remark":""
  276 + },
  277 + {
  278 + "name":"机油滤芯",
  279 + "number":1,
  280 + "unitPrice":400,
  281 + "discountedAmount":0,
  282 + "laborAmount":100,
  283 + "totalAmount":500,
  284 + "remark":""
  285 + },
  286 +
  287 +​ {
  288 +​ "name":"工时费用",
  289 +​ "timeQuota":"1",
  290 +​ "unitAmount":100,
  291 +​ "totalAmount":100,
  292 +​ "remark":""
  293 +​ }
  294 +
  295 +​ ]
  296 +}
  297 +```
  298 +
  299 +#### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  300 +
  301 +```java
  302 +public class Sample {
  303 + public static void main(String[] args_) {
  304 + String appKey = "appkey";
  305 + String appSecret = "appSecret";
  306 + String jsonData = "推送维修清单Body参数JSON数据";
  307 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  308 + HttpResponseData httpResponseData =
  309 +zyClient.doPost(Constants.TEST_HOST + "/vehicle-service-api/maintenance/repairList", "accessToken", jsonData);
  310 + if(httpResponseData == null) {
  311 + throw new BusinessException("则一请求失败,返回结果为空!");
  312 + }
  313 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  314 + //重新获取token再次请求
  315 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  316 + "/vehicle-service-api/maintenance/repairList", "accessToken", jsonData);
  317 + }
  318 + }
  319 +}
  320 +```
  321 +
  322 +### Headers参数
  323 +
  324 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  325 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  326 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  327 +| appKey | String | 是 | 0867ef5f23ef446483749e19e1692b40 | 则一提供 |
  328 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  329 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  330 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  331 +
  332 +### Body参数
  333 +
  334 +| 参数名 | 必传 | 类型 | 说明 |
  335 +| ---------------------------------------- | ---- | ---------- | ------------------------------------------ |
  336 +| code | 是 | string | 维保编码 |
  337 +| orderCode | 是 | string | 维保订单号 |
  338 +| discountedAmount | 否 | Bigdecimal | 折扣金额 |
  339 +| totalAmount | 是 | Bigdecimal | 总金额 |
  340 +| paidAmount | 是 | Bigdecimal | 应付金额 |
  341 +| mileage | 是 | Integer | 车辆里程数 |
  342 +| type | 是 | string | 维修类型 |
  343 +| feeList | 否 | list | 费用明细集合 |
  344 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 名称(工时费、拖车费等等) |
  345 +| &nbsp;&nbsp;&nbsp;&nbsp;unit | 否 | string | 单位 |
  346 +| &nbsp;&nbsp;&nbsp;&nbsp;unitPrice | 否 | Bigdecimal | 单价 |
  347 +| &nbsp;&nbsp;&nbsp;&nbsp;number | 否 | Integer | 数量 |
  348 +| &nbsp;&nbsp;&nbsp;&nbsp;amount | 是 | Bigdecimal | 金额 |
  349 +| &nbsp;&nbsp;&nbsp;&nbsp;discountedAmount | 是 | Bigdecimal | 折扣金额 |
  350 +| &nbsp;&nbsp;&nbsp;&nbsp;remark | 否 | string | 备注 |
  351 +| repairProjectList | 否 | list | 维修项目集合(包含配件信息) |
  352 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 项目名称 |
  353 +| &nbsp;&nbsp;&nbsp;&nbsp;unit | 否 | string | 单位 |
  354 +| &nbsp;&nbsp;&nbsp;&nbsp;number | 否 | Integer | 数量 |
  355 +| &nbsp;&nbsp;&nbsp;&nbsp;unitPrice | 是 | Bigdecimal | 单价 |
  356 +| &nbsp;&nbsp;&nbsp;&nbsp;discountedAmount | 否 | Bigdecimal | 折扣金额 |
  357 +| &nbsp;&nbsp;&nbsp;&nbsp;totalAmount | 是 | Bigdecimal | 合计金额 |
  358 +| &nbsp;&nbsp;&nbsp;&nbsp;timeQuota | 否 | Bigdecimal | 工时定额 |
  359 +| &nbsp;&nbsp;&nbsp;&nbsp;projectType | 是 | string | 维修项目类型(配件:materials\|项目:project) |
  360 +| &nbsp;&nbsp;&nbsp;&nbsp;remark | 否 | string | 备注 |
  361 +
  362 +### 返回正常示例
  363 +
  364 + { "success": true, "businessException": false}
  365 +
  366 +### 返回异常示例
  367 +
  368 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不存在!"}
  369 +
  370 +
  371 +
  372 +## 车辆保养
  373 +
  374 +### 简要描述
  375 +
  376 +· 车辆保养信息推送
  377 +
  378 +### 请求URL
  379 +
  380 +· 车畅行提供/vehicleMaintain/maintain
  381 +
  382 +### 请求方式
  383 +
  384 +· POST
  385 +
  386 +### 请求示例
  387 +
  388 +```json
  389 +{
  390 + "code":"WBJL21071000044",
  391 + "licenseNumber":"鄂ARY348",
  392 + "trailerNumber":"辽BHC28挂",
  393 + "owner":"上海则一",
  394 + "brand":"东风",
  395 + "specification":"9.6",
  396 + "vanType":"厢车",
  397 + "driverName":"张三",
  398 + "driverMobile":"18888888888",
  399 + "vin":"21654564894984LK",
  400 + "engineNumber":"2156156",
  401 + "engineModel":"大众EA111",
  402 + "manufactureTime":"1642993757000",
  403 + "registrationTime":"1642993757000",
  404 + "mileage":100000,
  405 + "trafficCompulsoryInsuranceStartTime":"1642993757000",
  406 + "trafficCompulsoryInsuranceEndTime":"1642993757000",
  407 + "commercialInsuranceStartTime":"1642993757000",
  408 + "commercialInsuranceEndTime":"1642993757000",
  409 + "medallionInvalidTime":"1642993757000",
  410 + "monthMileage":100000,
  411 + "recentMaintainTime":"1642993757000",
  412 + "vehicleObject":"车头",
  413 + "vehicleAddress":"湖北省随州市曾都区淅河镇002县道",
  414 + "vehicleAddressLng":"113.465168",
  415 + "vehicleAddressLat":"31.664137",
  416 + "orgName":"上海区"
  417 +}
  418 +```
  419 +
  420 +
  421 +
  422 +### 参数
  423 +
  424 +| 参数名 | 必传 | 类型 | | 说明 |
  425 +| :---------------------------------- | ---- | ------- | ---- | ------------------------------- |
  426 +| code | 是 | string | | 维保单号 |
  427 +| licenseNumber | 是 | string | | 车牌号 |
  428 +| trailerNumber | 否 | string | | 挂车号 |
  429 +| owner | 是 | string | | 车辆所有人 |
  430 +| brand | 否 | string | | 品牌 |
  431 +| specification | 否 | string | | 车型 |
  432 +| vanType | 否 | string | | 车厢类型 |
  433 +| driverName | 是 | string | | 司机联系姓名 |
  434 +| driverMobile | 是 | string | | 司机联系电话 |
  435 +| vin | 是 | string | | 车架号 |
  436 +| engineNumber | 是 | string | | 发动机号码 |
  437 +| engineModel | 否 | string | | 发动机型号 |
  438 +| manufactureTime | 否 | string | | 出厂日期时间戳(毫秒) |
  439 +| registrationTime | 否 | string | | 注册日期时间戳(毫秒) |
  440 +| mileage | 否 | Integer | | 车辆里程数 |
  441 +| trafficCompulsoryInsuranceStartTime | 否 | string | | 交强险开始时间戳(毫秒) |
  442 +| trafficCompulsoryInsuranceEndTime | 否 | string | | 交强险结束时间戳(毫秒) |
  443 +| commercialInsuranceStartTime | 否 | string | | 商业险开始时间戳(毫秒) |
  444 +| commercialInsuranceEndTime | 否 | string | | 商业险结束时间戳(毫秒) |
  445 +| medallionInvalidTime | 否 | string | | 营运证失效日期时间戳(毫秒) |
  446 +| monthMileage | 否 | Integer | | 月行驶里程数 |
  447 +| recentMaintainTime | 否 | string | | 最近保养日期时间戳(毫秒) |
  448 +| vehicleObject | 是 | string | | 保养对象(车头、车挂、车头+车挂) |
  449 +| vehicleAddress | 是 | string | | 车辆位置 |
  450 +| vehicleAddressLng | 是 | string | | 车辆位置经度 |
  451 +| vehicleAddressLat | 是 | string | | 车辆位置纬度 |
  452 +| orgName | 是 | string | | 车辆所属区域 |
  453 +| remark | 否 | string | | 备注 |
  454 +
  455 +### 返回正常示例
  456 +
  457 + { "success": true, "businessException": false}
  458 +
  459 +### 返回异常示例
  460 +
  461 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不存在!"}
  462 +
  463 +
  464 +
  465 +## 车辆保养清单
  466 +
  467 +### 简要描述
  468 +
  469 +· 车辆保养清单
  470 +
  471 +### 请求URL
  472 +
  473 +· 测试环境:https://test.shjiuze.cn/vehicle-service-api/maintenance/maintainList
  474 +
  475 +· 生产环境:https://gw.shjiuze.cn/vehicle-service-api/maintenance/maintainList
  476 +
  477 +### 请求示例
  478 +
  479 +#### Http方式
  480 +
  481 +```http
  482 +POST /vehicle-service-api/maintenance/maintainList HTTP/1.1
  483 +Host:test.shjiuze.cn
  484 +Content-Type:application/json
  485 +
  486 +{
  487 + "code":"WBJL21071000044",
  488 + "orderCode":"xxxx",
  489 + "discountedAmount":100,
  490 + "totalAmount":1000,
  491 + "paidAmount":900,
  492 + "mileage":121900,
  493 + "feeList":[
  494 + {
  495 + "name":"工时费",
  496 + "amount":100,
  497 + "discountedAmount":0,
  498 + "remark":""
  499 + },
  500 + {
  501 + "name":"材料费",
  502 + "amount":950,
  503 + "discountedAmount":50,
  504 + "remark":""
  505 + }
  506 + ],
  507 + "maintainProjectList":[
  508 + {
  509 + "name":"空调滤芯",
  510 + "number":2,
  511 + "unitPrice":275,
  512 + "discountedAmount":50,
  513 + "laborAmount":0,
  514 + "totalAmount":500,
  515 +
  516 +​ "type":"MAINTAIN"
  517 +
  518 +​ "remark":""
  519 +​ },
  520 +​ {
  521 +​ "name":"机油滤芯",
  522 +​ "number":1,
  523 +​ "unitPrice":400,
  524 +​ "discountedAmount":0,
  525 +​ "laborAmount":100,
  526 +​ "totalAmount":500,
  527 +
  528 +​ "type":"MAINTAIN"
  529 +
  530 +​ "remark":""
  531 +​ },
  532 +
  533 +​ {
  534 +​ "name":"工时费用",
  535 +​ "timeQuota":"1",
  536 +​ "unitAmount":100,
  537 +​ "amount":100,
  538 +​ "remark":""
  539 +​ }
  540 +
  541 +​ ]
  542 +}
  543 +```
  544 +
  545 +#### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  546 +
  547 +```java
  548 +public class Sample {
  549 + public static void main(String[] args_) {
  550 + String appKey = "appkey";
  551 + String appSecret = "appSecret";
  552 + String jsonData = "保养清单Body参数JSON数据";
  553 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  554 + HttpResponseData httpResponseData =
  555 +zyClient.doPost(Constants.TEST_HOST + "/vehicle-service-api/maintenance/maintainList", "accessToken", jsonData);
  556 + if(httpResponseData == null) {
  557 + throw new BusinessException("则一请求失败,返回结果为空!");
  558 + }
  559 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  560 + //重新获取token再次请求
  561 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  562 + "/vehicle-service-api/maintenance/maintainList", "accessToken", jsonData);
  563 + }
  564 + }
  565 +}
  566 +```
  567 +
  568 +### Headers参数
  569 +
  570 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  571 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  572 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  573 +| appKey | String | 是 | 0867ef5f23ef446483749e19e1692b40 | 则一提供 |
  574 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  575 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  576 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  577 +
  578 +### Body参数
  579 +
  580 +| 参数名 | 必传 | 类型 | 说明 |
  581 +| ----------------------------------------------- | ---- | ---------- | -------------------------------------------- |
  582 +| code | 是 | string | 维保编码 |
  583 +| orderCode | 是 | string | 维保订单号 |
  584 +| discountedAmount | 否 | Bigdecimal | 折扣金额 |
  585 +| totalAmount | 是 | Bigdecimal | 总金额 |
  586 +| paidAmount | 是 | Bigdecimal | 应付金额 |
  587 +| mileage | 是 | Integer | 车辆里程数 |
  588 +| feeList | 否 | list | 费用明细集合 |
  589 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 名称(工时费、材料费、拖车费等等) |
  590 +| &nbsp;&nbsp;&nbsp;&nbsp;unit | 否 | string | 单位 |
  591 +| &nbsp;&nbsp;&nbsp;&nbsp;unitPrice | 否 | Bigdecimal | 单价 |
  592 +| &nbsp;&nbsp;&nbsp;&nbsp;number | 否 | Integer | 数量 |
  593 +| &nbsp;&nbsp;&nbsp;&nbsp;amount | 是 | Bigdecimal | 金额 |
  594 +| &nbsp;&nbsp;&nbsp;&nbsp;discountedAmount | 是 | Bigdecimal | 折扣金额 |
  595 +| &nbsp;&nbsp;&nbsp;&nbsp;remark | 否 | string | 备注 |
  596 +| maintainProjectList | 否 | list | 保养项目集合(包含配件信息) |
  597 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 项目名称 |
  598 +| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unit | 否 | string | 单位 |
  599 +| &nbsp;&nbsp;&nbsp;&nbsp;number | 是 | Integer | 数量 |
  600 +| &nbsp;&nbsp;&nbsp;&nbsp;unitPrice | 是 | Bigdecimal | 单价 |
  601 +| &nbsp;&nbsp;&nbsp;&nbsp;discountedAmount | 否 | Bigdecimal | 折扣金额 |
  602 +| &nbsp;&nbsp;&nbsp;&nbsp;totalAmount | 是 | Bigdecimal | 合计金额 |
  603 +| &nbsp;&nbsp;&nbsp;&nbsp;type | 是 | string | MAINTAIN:保养 或 REPAIR:维修 |
  604 +| &nbsp;&nbsp;&nbsp;&nbsp;remark | 否 | string | 备注 |
  605 +| &nbsp;&nbsp;&nbsp;&nbsp;timeQuota | 否 | Bigdecimal | 工时定额 |
  606 +| &nbsp;&nbsp;&nbsp;&nbsp;projectType | 是 | string | 维保项目类型(配件:materials\|项目:project) |
  607 +| &nbsp;&nbsp;&nbsp;&nbsp;nextMaintainanceMileage | 否 | Integer | 下次保养里程数 |
  608 +| &nbsp;&nbsp;&nbsp;&nbsp;nextMaintainanceTime | 是 | string | 下次保养时间戳(毫秒) |
  609 +
  610 +### 返回正常示例
  611 +
  612 + { "success": true, "businessException": false}
  613 +
  614 +### 返回异常示例
  615 +
  616 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不存在!"}
  617 +
  618 +
  619 +
  620 +## 车辆维保审核
  621 +
  622 +### 简要描述
  623 +
  624 +· 车辆维保审核
  625 +
  626 +### 请求URL
  627 +
  628 +· 车畅行提供 /vehicleMaintainRepair/audit
  629 +
  630 +### 请求方式
  631 +
  632 +· POST
  633 +
  634 +### 请求示例
  635 +
  636 +{
  637 + "code":"WBJL21071000044",
  638 + "auditStatus":"PASS",
  639 + "auditRemark":"审核备注",
  640 + "auditeTime":"1642755099000",
  641 + "contactUser":"张大三",
  642 + "contactMobile":"13277676171"
  643 +}
  644 +
  645 +### 参数
  646 +
  647 +| 参数名 | 必传 | 类型 | 说明 |
  648 +| ------------- | ---- | ------ | ------------------------------------------- |
  649 +| code | 是 | string | 维保编码 |
  650 +| auditStatus | 是 | string | 审核状态(PASS:审核通过,NO_PASS:审核不通过) |
  651 +| auditRemark | 否 | string | 审核备注 |
  652 +| auditeTime | 是 | string | 审核时间戳(毫秒) |
  653 +| contactUser | 否 | string | 审核联系人 |
  654 +| contactMobile | 否 | string | 审核联系人电话 |
  655 +
  656 +### 返回正常示例
  657 +
  658 + { "success": true, "businessException": false}
  659 +
  660 +### 返回异常示例
  661 +
  662 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不存在!"}
  663 +
  664 +
  665 +
  666 +## 车辆维保作废
  667 +
  668 +### 简要描述
  669 +
  670 +· 车辆维保作废
  671 +
  672 +### 请求URL
  673 +
  674 +· 车畅行提供 /vehicleMaintainRepair/delete
  675 +
  676 +### 请求方式
  677 +
  678 +· POST
  679 +
  680 +### 请求示例
  681 +
  682 +{
  683 + "code":"WBJL21071000044",
  684 + "reason":"上报信息错误",
  685 + "operationTime":"1642755099000",
  686 + "operationUser":"张大三",
  687 + "operationMobile":"13277676171"
  688 +}
  689 +
  690 +### 参数
  691 +
  692 +| 参数名 | 必传 | 类型 | 说明 |
  693 +| --------------- | ---- | ------ | ---------------- |
  694 +| code | 是 | string | 维保编码 |
  695 +| reason | 否 | string | 作废原因 |
  696 +| operationTime | 是 | string | 操作时间戳(毫秒) |
  697 +| operationUser | 否 | string | 操作人 |
  698 +| operationMobile | 否 | string | 操作人电话 |
  699 +
  700 +### 返回正常示例
  701 +
  702 + { "success": true, "businessException": false}
  703 +
  704 +### 返回异常示例
  705 +
  706 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx异常!"}
  707 +
  708 +
  709 +
  710 +## 维保单价格推送
  711 +
  712 +### 简要描述
  713 +
  714 +维保单价格推送
  715 +
  716 +### 请求方式
  717 +
  718 +· POST
  719 +
  720 +### 请求URL
  721 +
  722 +· 车畅行提供 /vehicleMaintainRepair/confirmPirce
  723 +
  724 +<h3>请求示例</h3>
  725 +
  726 +{
  727 + "code":"WBJL21071000044",
  728 + "confirmAmount":1000,
  729 + "feeList":[
  730 + {
  731 + "name":"工时费",
  732 + "confirmNumber":0,
  733 + "confirmAmount":0
  734 + },
  735 + {
  736 + "name":"材料费",
  737 + "confirmNumber":0,
  738 + "confirmAmount":0
  739 + }
  740 + ],
  741 + "maintainProjectList":[
  742 + {
  743 + "name":"空调滤芯",
  744 + "confirmNumber":2,
  745 + "confirmAmount":0,
  746 + "type":"MAINTAIN",
  747 + "projectType":"materials"
  748 + },
  749 + {
  750 + "name":"机油滤芯",
  751 + "confirmNumber":1,
  752 + "confirmAmount":500,
  753 + "type":"MAINTAIN",
  754 + "projectType":"materials"
  755 + }
  756 + ]
  757 +}
  758 +
  759 +### Body参数
  760 +
  761 +| 参数名 | 必传 | 类型 | 说明 |
  762 +| ------------------------------------- | ---- | ---------- | -------------------------------------------- |
  763 +| code | 是 | string | 维保编码 |
  764 +| confirmAmount | 是 | Bigdecimal | 则一确认总金额 |
  765 +| feeList | 是 | list | 费用明细集合 |
  766 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 名称(工时费、材料费、拖车费等等) |
  767 +| &nbsp;&nbsp;&nbsp;&nbsp;confirmNumber | 是 | Integer | 则一确认数量 |
  768 +| &nbsp;&nbsp;&nbsp;&nbsp;confirmAmount | 是 | Bigdecimal | 则一确认金额 |
  769 +| maintainProjectList | 是 | list | 保养项目集合(包含配件信息) |
  770 +| &nbsp;&nbsp;&nbsp;&nbsp;name | 是 | string | 项目名称 |
  771 +| &nbsp;&nbsp;&nbsp;&nbsp;confirmNumber | 是 | Integer | 则一确认数量 |
  772 +| &nbsp;&nbsp;&nbsp;&nbsp;confirmAmount | 是 | Bigdecimal | 则一确认金额 |
  773 +| &nbsp;&nbsp;&nbsp;&nbsp;type | 是 | string | MAINTAIN:保养 或 REPAIR:维修 |
  774 +| &nbsp;&nbsp;&nbsp;&nbsp;projectType | 是 | string | 维保项目类型(配件:materials\|项目:project) |
  775 +
  776 +### 返回正常示例
  777 +
  778 + { "success": true, "businessException": false}
  779 +
  780 +### 返回异常示例
  781 +
  782 +{ "success": false, "businessException": true, "errorCode": "200", "message": "xxx不能为空!"}
  783 +
  784 +------------------------------------------------------------------------------------------
  785 +
  786 +### 2022-12-02文档编写
  787 +
  788 +
  789 +
  790 +###