diff --git a/api-third/src/main/java/com/heyu/api/baidu/response/traffic/BVehicleRegistrationCertificateResp.java b/api-third/src/main/java/com/heyu/api/baidu/response/traffic/BVehicleRegistrationCertificateResp.java index c2da28e..201de88 100644 --- a/api-third/src/main/java/com/heyu/api/baidu/response/traffic/BVehicleRegistrationCertificateResp.java +++ b/api-third/src/main/java/com/heyu/api/baidu/response/traffic/BVehicleRegistrationCertificateResp.java @@ -1,15 +1,165 @@ package com.heyu.api.baidu.response.traffic; +import com.fasterxml.jackson.annotation.JsonProperty; import com.heyu.api.baidu.response.BBaseResp; +import lombok.Data; +import lombok.NoArgsConstructor; /** * https://console.bce.baidu.com/support/?_=1740411162437×tamp=1740412165257#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E4%BA%A4%E9%80%9A%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fvehicle_registration_certificate&method=post * 机动车登记证书识别 * */ +@NoArgsConstructor +@Data public class BVehicleRegistrationCertificateResp extends BBaseResp { + @JsonProperty("words_result") + private WordsResultDTO wordsResult; + @JsonProperty("log_id") + private Long logId; + @JsonProperty("direction") + private String direction; + @NoArgsConstructor + @Data + public static class WordsResultDTO { + @JsonProperty("registration_authority") + private RegistrationAuthorityDTO registrationAuthority; + @JsonProperty("vehicle_model") + private VehicleModelDTO vehicleModel; + @JsonProperty("vehicle_type") + private VehicleTypeDTO vehicleType; + @JsonProperty("registration_num") + private RegistrationNumDTO registrationNum; + @JsonProperty("engine_num") + private EngineNumDTO engineNum; + @JsonProperty("number") + private NumberDTO number; + @JsonProperty("body_color") + private BodyColorDTO bodyColor; + @JsonProperty("registration_date") + private RegistrationDateDTO registrationDate; + @JsonProperty("date_of_production") + private DateOfProductionDTO dateOfProduction; + @JsonProperty("seating_capacity") + private SeatingCapacityDTO seatingCapacity; + @JsonProperty("date_of_issue") + private DateOfIssueDTO dateOfIssue; + @JsonProperty("nature_of_use") + private NatureOfUseDTO natureOfUse; + @JsonProperty("vin") + private VinDTO vin; + @JsonProperty("seal_of_issue_authority") + private SealOfIssueAuthorityDTO sealOfIssueAuthority; + @JsonProperty("name_idcard_no") + private NameIdcardNoDTO nameIdcardNo; + + @NoArgsConstructor + @Data + public static class RegistrationAuthorityDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class VehicleModelDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class VehicleTypeDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class RegistrationNumDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class EngineNumDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class NumberDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class BodyColorDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class RegistrationDateDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class DateOfProductionDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class SeatingCapacityDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class DateOfIssueDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class NatureOfUseDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class VinDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class SealOfIssueAuthorityDTO { + @JsonProperty("words") + private String words; + } + + @NoArgsConstructor + @Data + public static class NameIdcardNoDTO { + @JsonProperty("words") + private String words; + } + } } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/tax/RecognizeVINCodeController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/tax/RecognizeVINCodeController.java index 3fb30fc..4751f8e 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/tax/RecognizeVINCodeController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/tax/RecognizeVINCodeController.java @@ -5,6 +5,9 @@ import com.aliyun.ocr20191230.models.RecognizeVINCodeResponse; import com.aliyun.ocr20191230.models.RecognizeVINCodeResponseBody; import com.heyu.api.alibaba.handle.common.text.ARecognizeVINCodeHandle; import com.heyu.api.alibaba.request.common.text.ARecognizeVINCodeRequest; +import com.heyu.api.baidu.handle.traffic.BVinCodeHandle; +import com.heyu.api.baidu.request.traffic.BVinCodeRequest; +import com.heyu.api.baidu.response.traffic.BVinCodeResp; import com.heyu.api.controller.BaseController; import com.heyu.api.request.tax.ARecognizeVATInvoiceReq; import com.heyu.api.resp.tax.RecognizeVINCodeResp; @@ -13,10 +16,14 @@ import com.heyu.api.data.annotation.NotIntercept; import com.heyu.api.data.utils.ApiR; import com.heyu.api.data.utils.R; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; +import java.util.List; + /*** *https://next.api.aliyun.com/api/ocr/2019-12-30/RecognizeVINCode?tab=DEMO&lang=JAVA * @@ -29,6 +36,14 @@ import org.springframework.web.bind.annotation.RestController; * * * VIN 码识别能力可以识别车辆 VIN 码,输出车辆 VIN 码数值。 + * + * + * + * + *https://console.bce.baidu.com/support/?_=1740411162437×tamp=1740411253251#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E4%BA%A4%E9%80%9A%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fvin_code&method=post + * + * + * */ @Slf4j @RestController @@ -41,10 +56,32 @@ public class RecognizeVINCodeController extends BaseController { private ARecognizeVINCodeHandle arecognizeVINCodeHandle; + @Autowired + private BVinCodeHandle bVinCodeHandle; + + @RequestMapping("/recognize") @CacheResult public R recognize(ARecognizeVATInvoiceReq request) { - RecognizeVINCodeResp resp = new RecognizeVINCodeResp(); + List respList = new ArrayList<>(); + + BVinCodeRequest bVinCodeRequest = new BVinCodeRequest(); + bVinCodeRequest.setImageBase64(request.getImageBase64()); + bVinCodeRequest.setImageUrl(request.getImageUrl()); + + ApiR bR = bVinCodeHandle.handle(bVinCodeRequest); + if (bR.isSuccess()) { + BVinCodeResp bVinCodeResp = bR.getData(); + List wordsResultDTOS = bVinCodeResp.getWordsResult(); + if (CollectionUtils.isNotEmpty(wordsResultDTOS)) { + for (BVinCodeResp.WordsResultDTO wordsResultDTO : wordsResultDTOS) { + RecognizeVINCodeResp response = new RecognizeVINCodeResp(); + response.setVinCode(wordsResultDTO.getWords()); + respList.add(response); + } + } + return R.ok().setData(respList); + } ARecognizeVINCodeRequest aRecognizeVINCodeRequest = new ARecognizeVINCodeRequest(); aRecognizeVINCodeRequest.setImageUrl(request.getImageUrl()); @@ -54,8 +91,14 @@ public class RecognizeVINCodeController extends BaseController { if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) { RecognizeVINCodeResponseBody responseBody = aR.getData().getBody(); RecognizeVINCodeResponseBody.RecognizeVINCodeResponseBodyData responseBodyData = responseBody.getData(); + RecognizeVINCodeResp resp = new RecognizeVINCodeResp(); + resp.setVinCode(responseBodyData.getVinCode()); - return R.ok().setData(resp); + + respList.add(resp); + + + return R.ok().setData(respList); } return R.ok(); } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/traffic/VehicleRegistrationCertificateController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/traffic/VehicleRegistrationCertificateController.java new file mode 100644 index 0000000..febd3f8 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/traffic/VehicleRegistrationCertificateController.java @@ -0,0 +1,69 @@ +package com.heyu.api.controller.traffic; + + +import com.heyu.api.baidu.handle.traffic.BVehicleRegistrationCertificateHandle; +import com.heyu.api.baidu.request.traffic.BVehicleRegistrationCertificateRequest; +import com.heyu.api.baidu.response.traffic.BVehicleRegistrationCertificateResp; +import com.heyu.api.controller.BaseController; +import com.heyu.api.data.annotation.CacheResult; +import com.heyu.api.data.annotation.NotIntercept; +import com.heyu.api.data.utils.ApiR; +import com.heyu.api.data.utils.R; +import com.heyu.api.resp.traffic.VehicleRegistrationCertificateResp; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * https://console.bce.baidu.com/support/?_=1740411162437×tamp=1740412165257#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E4%BA%A4%E9%80%9A%E5%9C%BA%E6%99%AFOCR&api=rest%2F2.0%2Focr%2Fv1%2Fvehicle_registration_certificate&method=post + *

+ *

+ * 机动车登记证书识别 + *

+ * 接口描述 + * 支持对机动车登记证书的15个关键字段进行结构化识别,包括编号、机动车所有人、登记机关、登记日期、登记编号、车辆类型等,同时支持检测发证机关章 + */ +@Slf4j +@RestController +@RequestMapping("/vehicle/registration/certificate") +@NotIntercept +public class VehicleRegistrationCertificateController extends BaseController { + + + @Autowired + private BVehicleRegistrationCertificateHandle bVehicleRegistrationCertificateHandle; + + + @RequestMapping("/recognize") + @CacheResult + public R recognize(BVehicleRegistrationCertificateRequest request) { + VehicleRegistrationCertificateResp resp = new VehicleRegistrationCertificateResp(); + ApiR bR = bVehicleRegistrationCertificateHandle.handle(request); + + if (bR.isSuccess()) { + BVehicleRegistrationCertificateResp bVehicleRegistrationCertificateResp = bR.getData(); + BVehicleRegistrationCertificateResp.WordsResultDTO wordsResultDTO = bVehicleRegistrationCertificateResp.getWordsResult(); + + resp.setRegistrationAuthority(wordsResultDTO.getRegistrationAuthority().getWords()); //登记机关 + resp.setVehicleModel(wordsResultDTO.getVehicleModel().getWords()); //车辆型号 + resp.setVehicleType(wordsResultDTO.getVehicleType().getWords()); //车辆类型 + resp.setRegistrationNum(wordsResultDTO.getRegistrationNum().getWords()); // 机动车登记编号 + resp.setEngineNum(wordsResultDTO.getEngineNum().getWords()); //发动机号 + resp.setNumber(wordsResultDTO.getNumber().getWords()); //编号 + resp.setBodyColor(wordsResultDTO.getBodyColor().getWords()); // 车身颜色 + resp.setRegistrationDate(wordsResultDTO.getRegistrationDate().getWords()); // 登记日期 + resp.setDateOfProduction(wordsResultDTO.getDateOfProduction().getWords()); // 出厂日期 + resp.setSeatingCapacity(wordsResultDTO.getSeatingCapacity().getWords()); // 核定载客 + resp.setDateOfIssue(wordsResultDTO.getDateOfIssue().getWords()); // 发证日期 + resp.setNatureOfUse(wordsResultDTO.getNatureOfUse().getWords()); // 使用性质 + resp.setVin(wordsResultDTO.getVin().getWords()); // 车架号 + resp.setSealOfIssueAuthority(wordsResultDTO.getSealOfIssueAuthority().getWords()); // 发证机关章,1表示有,0表示无 + resp.setNameIdcardNo(wordsResultDTO.getNameIdcardNo().getWords()); // 机动车所有人/身份证明名称/号码 + return R.ok().setData(resp); + } + + return R.error(bR.getErrorMsg()); + } +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/traffic/VehicleRegistrationCertificateResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/traffic/VehicleRegistrationCertificateResp.java new file mode 100644 index 0000000..2647504 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/traffic/VehicleRegistrationCertificateResp.java @@ -0,0 +1,27 @@ +package com.heyu.api.resp.traffic; + +import com.heyu.api.data.dto.BaseResp; +import lombok.Data; + + +@Data +public class VehicleRegistrationCertificateResp extends BaseResp { + + + private String registrationAuthority; //登记机关 + private String vehicleModel; //车辆型号 + private String vehicleType; //车辆类型 + private String registrationNum; // 机动车登记编号 + private String engineNum; //发动机号 + private String number; //编号 + private String bodyColor; // 车身颜色 + private String registrationDate; // 登记日期 + private String dateOfProduction; // 出厂日期 + private String seatingCapacity; // 核定载客 + private String dateOfIssue; // 发证日期 + private String natureOfUse; // 使用性质 + private String vin; // 车架号 + private String sealOfIssueAuthority; // 发证机关章,1表示有,0表示无 + private String nameIdcardNo; // 机动车所有人/身份证明名称/号码 + +}