Jelajahi Sumber

企业信息查询API

lizhenhao 2 tahun lalu
induk
melakukan
6737110af8

+ 46 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/common/enterpriseSearch/EnterpriseJsonRespDTO.java

@@ -0,0 +1,46 @@
+package com.jeeplus.test.cw.common.enterpriseSearch;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class EnterpriseJsonRespDTO {
+
+    private Integer error_code;
+
+    private Boolean success;
+
+    private String message;
+
+    private D data;
+
+    @Data
+    class D {
+        private BigDecimal searchtime;
+
+        private Integer total;
+
+        private String num;
+
+        private Integer viewtotal;
+
+        private List<Items> items;
+    }
+
+    @Data
+    class Items {
+        private String entname;
+
+        private String legalname;
+
+        private String esdate;
+
+        private Integer id;
+
+        private String companyid;
+    }
+
+
+}

+ 87 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/common/enterpriseSearch/EnterpriseSearchApi.java

@@ -0,0 +1,87 @@
+package com.jeeplus.test.cw.common.enterpriseSearch;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import com.jeeplus.sys.utils.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Api("企业信息查询API")
+@RestController
+@RequestMapping(value = "/enterprise_search_api")
+public class EnterpriseSearchApi {
+
+    /**
+     * 根据关键字查询相关企业
+     * @param keyword
+     * @return
+     */
+    @ApiOperation(value = "根据关键字查询相关企业")
+    @PostMapping("enterpriseSearchByName")
+    public String enterpriseSearchByName(@RequestParam String keyword){
+        if(StringUtils.isBlank(keyword)){
+            return null;
+        }
+        return  TicketQueryUtils.enterpriseSearchByName(keyword);
+    }
+
+    /**
+     * 根据id查询企业税号
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "根据id查询企业税号")
+    @PostMapping("enterpriseTicketInfo")
+    public Object enterpriseTicketInfo(String id){
+        if(StringUtils.isBlank(id)){
+            return null;
+        }
+        return TicketQueryUtils.enterpriseTicketInfoQueryById(id);
+    }
+
+    /**
+     * 分页查询相关企业
+     * @param enterpriseSearchDTO
+     * @param page
+     * @return
+     * @throws Exception
+     */
+    @ApiLog("分页查询相关企业")
+    @GetMapping("list")
+    public ResponseEntity<IPage<EnterpriseSearchDTO>> data(EnterpriseSearchDTO enterpriseSearchDTO, Page<EnterpriseSearchDTO> page) throws Exception {
+        IPage<EnterpriseSearchDTO> result = new Page<EnterpriseSearchDTO>();
+        List<EnterpriseSearchDTO> list = new ArrayList<>();
+        if (ObjectUtil.isNotEmpty(enterpriseSearchDTO)){
+            if (StringUtils.isNotBlank(enterpriseSearchDTO.getENTNAME())){
+                String s = TicketQueryUtils.enterpriseSearchPage(enterpriseSearchDTO.getENTNAME(),String.valueOf(page.getSize()),String.valueOf(page.getCurrent()));
+                if (StringUtils.isNotBlank(s)){
+                    EnterpriseJsonRespDTO enterpriseJsonRespDTO = JSONObject.parseObject(s, EnterpriseJsonRespDTO.class); //json字符串直接转java对象
+                    if (ObjectUtil.isNotEmpty(enterpriseJsonRespDTO)){
+                        if(ObjectUtil.isNotEmpty(enterpriseJsonRespDTO.getData())){
+                            if(CollectionUtil.isNotEmpty(enterpriseJsonRespDTO.getData().getItems())){
+                                enterpriseJsonRespDTO.getData().getItems().stream().forEach(item->{
+                                    String s1 = TicketQueryUtils.enterpriseTicketInfoQueryById(item.getCompanyid());
+                                    EnterpriseSearchDTO dto = JSONObject.parseObject(s1, EnterpriseSearchDTO.class);
+                                    list.add(dto);
+                                });
+                                result.setRecords(list);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return ResponseEntity.ok (result);
+    }
+
+}

+ 53 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/common/enterpriseSearch/EnterpriseSearchDTO.java

@@ -0,0 +1,53 @@
+package com.jeeplus.test.cw.common.enterpriseSearch;
+
+import lombok.Data;
+
+/**
+ * 企业查询DTO
+ *     "ENTNAME": "用友网络科技股份有限公司", //企业全称
+ *     "OPLOC": "北京市海淀区北清路68号", //注册地址
+ *     "UNCID": "91110000600001760P",  //统一信用代码
+ *     "GONGSH": "110000005119254", //工商注册号
+ *     "ORGCODE": "600001760", //组织机构代码
+ *     "HASUNIFY": true, //是否三证合一
+ *     "TAXNUMBER": "91110000600001760P", //税号(同统一信用代码)
+ */
+@Data
+public class EnterpriseSearchDTO  {
+
+    /**
+     * 企业全称
+     */
+    private String ENTNAME;
+
+    /**
+     * 注册地址
+     */
+    private String OPLOC;
+
+    /**
+     * 统一信用代码
+     */
+    private String UNCID;
+
+    /**
+     * 工商注册号
+     */
+    private String GONGSH;
+
+    /**
+     * 组织机构代码
+     */
+    private String ORGCODE;
+
+    /**
+     * 是否三证合一
+     */
+    private Boolean HASUNIFY;
+
+    /**
+     * 税号(同统一信用代码)
+     */
+    private String TAXNUMBER;
+
+}

+ 279 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/common/enterpriseSearch/TicketQueryUtils.java

@@ -0,0 +1,279 @@
+package com.jeeplus.test.cw.common.enterpriseSearch;
+
+import com.alibaba.fastjson.JSONObject;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSession;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+名称:企业开票税号查询
+ * 功能:
+ * 1、根据关键字查询相关企业,或者根据企业信息的id查询企业的详细信息;
+ * 2、可以查到企业的名称、联系方式等基本信息;
+ * 3、可以查到公司纳税人识别号、注册地址等开发票需要的详细信息。
+ *
+ * 状态:
+ * 	    错误码	说明
+ *  	300001	请求header中没有设置apikey
+ *  	300002	api不存在或url无法解析
+ *  	300003	apikey不存在,请输入正确的apikey
+ *  	300004	服务剩余次数不足,请再次购买
+ *  	300005	未设置ip白名单
+ *  	300006	IP白名单中不包含您的IP
+ *  	300007	系统繁忙稍候再试
+ *  	300008	访问次数超载
+ *  	300009	未找到节流信息
+ *  	300010	header参数中缺少需签名的参数值
+ *  	300011	缺少需验证的参数列表
+ *  	300012	签名信息不匹配
+ *  	300013	header中缺少参数appkey
+ *  	300014	header中缺少参数appsecret
+ *  	300015	api已过期,请另行购买
+ *  	300017	要求必填参数为不能为空
+ *  	300018	api没有授权
+ */
+public class TicketQueryUtils {
+
+    private static String ApiCode = "35afe9ec3263424f9a18feb837177169";
+    private static String searchByNameUrl = "https://api.yonyoucloud.com/apis/dst/enterpriseTicketQuery/enterpriseSearchByName";
+    private static String ticketInfoQueryUrl = "https://api.yonyoucloud.com/apis/dst/enterpriseTicketQuery/enterpriseTicketInfo";
+
+    private static final String DEF_CHATSET = "UTF-8";
+    private static final int DEF_CONN_TIMEOUT = 30000;
+    private static final int DEF_READ_TIMEOUT = 30000;
+    private static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
+
+
+    /**
+     * 根据关键字查询相关企业
+     * @param keyword
+     * @return
+     */
+    public static String enterpriseSearchByName(String keyword){
+        String result =null;
+        String method = "GET";
+        String paramFormat = "form";
+        Map<String, Object> params = new HashMap<String, Object>();//请求参数
+        params.put("keyword", keyword);
+
+        Map<String, Object> headerParams = new HashMap<String, Object>();//请求头参数
+        headerParams.put("apicode", ApiCode);//APICODE
+        try {
+            result = net(searchByNameUrl, params, headerParams, method, paramFormat);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * 根据关键字以及分页信息查询相关企业
+     * @param keyword
+     * @return
+     */
+    public static String enterpriseSearchPage(String keyword,String size,String pageNum){
+        String result =null;
+        String method = "GET";
+        String paramFormat = "form";
+        Map<String, Object> params = new HashMap<String, Object>();//请求参数
+        params.put("keyword", keyword);
+        params.put("size", size);
+        params.put("pageNum", pageNum);
+
+        Map<String, Object> headerParams = new HashMap<String, Object>();//请求头参数
+        headerParams.put("apicode", ApiCode);//APICODE
+        try {
+            result = net(searchByNameUrl, params, headerParams, method, paramFormat);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * 根据id查询企业税号
+     * @param id
+     * @return
+     */
+    public static String enterpriseTicketInfoQueryById(String id){
+        String result =null;
+        String method = "GET";
+        String paramFormat = "form";
+        Map<String, Object> params = new HashMap<String, Object>();//请求参数
+        params.put("id", id);
+
+        Map<String, Object> headerParams = new HashMap<String, Object>();//请求头参数
+        headerParams.put("apicode", ApiCode);//APICODE
+
+        try {
+            result = net(ticketInfoQueryUrl, params, headerParams, method, paramFormat);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    private static final HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
+        public boolean verify(String hostname, SSLSession session) {
+            return true;
+        }
+    };
+
+    /**
+     *
+     * @param strUrl 请求地址
+     * @param params 请求参数
+     * @param method 请求方法
+     * @return  网络请求字符串
+     * @throws Exception
+     */
+    public static String net(String strUrl, Map<String,Object> params, Map<String,Object> headerParams, String method, String paramFormat) throws Exception {
+        HttpURLConnection conn = null;
+        BufferedReader reader = null;
+        String rs = null;
+        try {
+            String contentType = null;
+            if(headerParams.containsKey("Content-Type"))
+                contentType = headerParams.get("Content-Type").toString();
+
+            StringBuffer sb = new StringBuffer();
+            if(method==null || method.equals("GET")){
+                strUrl = strUrl+"?"+urlencode(params);
+            }
+
+            trustAllHttpsCertificates();
+            HttpsURLConnection.setDefaultHostnameVerifier(DO_NOT_VERIFY);
+
+            URL url = new URL(strUrl);
+            conn = (HttpURLConnection) url.openConnection();
+            if(method==null || method.equals("GET")){
+                conn.setRequestMethod("GET");
+            }else{
+                conn.setRequestMethod("POST");
+                conn.setDoOutput(true);
+            }
+            conn.setRequestProperty("User-agent", userAgent);
+            for (String i : headerParams.keySet()) {
+                conn.setRequestProperty(i, headerParams.get(i).toString());
+            }
+            if("form".equals(paramFormat) && !"application/x-www-form-urlencoded".equals(contentType) && !"application/xml".equals(contentType)) {
+                conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
+            }
+            conn.setUseCaches(false);
+            conn.setConnectTimeout(DEF_CONN_TIMEOUT);
+            conn.setReadTimeout(DEF_READ_TIMEOUT);
+            conn.setInstanceFollowRedirects(false);
+            conn.connect();
+            if (params!= null && method.equals("POST")) {
+                try {
+                    OutputStream out = conn.getOutputStream();
+                    if("form".equals(paramFormat)) {
+                        if("application/x-www-form-urlencoded".equals(contentType))
+                            out.write(urlencode(params).getBytes("utf-8"));
+                        else if("application/xml".equals(contentType))
+                            out.write(xmlencode(params).getBytes("utf-8"));
+                        else
+                            out.write(jsonencode(params).getBytes("utf-8"));
+                    } else
+                        out.write(params.toString().getBytes("utf-8"));
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            InputStream is = conn.getInputStream();
+            reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
+            String strRead = null;
+            while ((strRead = reader.readLine()) != null) {
+                sb.append(strRead);
+            }
+            rs = sb.toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (reader != null) {
+                reader.close();
+            }
+            if (conn != null) {
+                conn.disconnect();
+            }
+        }
+        return rs;
+    }
+
+    //将map型转为请求参数型
+    public static String urlencode(Map<String,Object>data) {
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry i : data.entrySet()) {
+            try {
+                if(("").equals(i.getKey())) {
+                    sb.append(URLEncoder.encode(i.getValue()+"","UTF-8"));
+                } else {
+                    sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
+                }
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        return sb.toString();
+    }
+
+    //将map型转为请求参数型
+    public static String jsonencode(Map<String,Object>data) {
+        JSONObject jparam = new JSONObject();
+        for (Map.Entry i : data.entrySet())
+            jparam.put((String) i.getKey(), i.getValue());
+
+        return jparam.toString();
+    }
+
+    //将map型转为请求参数型
+    public static String xmlencode(Map<String,Object>data) {
+        StringBuffer xmlData = new StringBuffer();
+        xmlData.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+        for (Map.Entry i : data.entrySet())
+            xmlData.append("<" + i.getKey() + ">" + i.getValue() + "</" + i.getKey() + ">");
+
+        return xmlData.toString();
+    }
+
+    static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
+        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+            return null;
+        }
+
+        public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
+            return true;
+        }
+
+        public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
+            return true;
+        }
+
+        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
+                throws java.security.cert.CertificateException {
+            return;
+        }
+
+        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
+                throws java.security.cert.CertificateException {
+            return;
+        }
+    }
+
+    private static void trustAllHttpsCertificates() throws Exception {
+        javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
+        javax.net.ssl.TrustManager tm = new miTM();
+        trustAllCerts[0] = tm;
+        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
+        sc.init(null, trustAllCerts, null);
+        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+    }
+}