精华内容
下载资源
问答
  • 代码描述:基于JAVA的黄金数据接口调用代码实例接口地址:http://www.juhe.cn/docs/api/id/291.[代码][Java]代码import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import...

    代码描述:基于JAVA的黄金数据接口调用代码实例

    接口地址:http://www.juhe.cn/docs/api/id/29

    1.[代码][Java]代码

    import java.io.BufferedReader;

    import java.io.DataOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.io.UnsupportedEncodingException;

    import java.net.HttpURLConnection;

    import java.net.URL;

    import java.net.URLEncoder;

    import java.util.HashMap;

    import java.util.Map;

    import net.sf.json.JSONObject;

    /**

    *黄金数据调用示例代码 - 聚合数据

    *在线接口文档:http://www.juhe.cn/docs/29

    **/

    public class JuheDemo {

    public static final String DEF_CHATSET = "UTF-8";

    public static final int DEF_CONN_TIMEOUT = 30000;

    public static final int DEF_READ_TIMEOUT = 30000;

    public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";

    //配置您申请的KEY

    public static final String APPKEY ="*************************";

    //1.上海黄金交易所

    public static void getRequest1(){

    String result =null;

    String url ="http://web.juhe.cn:8080/finance/gold/shgold";//请求接口地址

    Map params = new HashMap();//请求参数

    params.put("key",APPKEY);//APP Key

    params.put("v","");//JSON格式版本(0或1)默认为0

    try {

    result =net(url, params, "GET");

    JSONObject object = JSONObject.fromObject(result);

    if(object.getInt("error_code")==0){

    System.out.println(object.get("result"));

    }else{

    System.out.println(object.get("error_code")+":"+object.get("reason"));

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    //2.上海期货交易所

    public static void getRequest2(){

    String result =null;

    String url ="http://web.juhe.cn:8080/finance/gold/shfuture";//请求接口地址

    Map params = new HashMap();//请求参数

    params.put("key",APPKEY);//APP Key

    params.put("v","");//JSON格式版本(0或1)默认为0

    try {

    result =net(url, params, "GET");

    JSONObject object = JSONObject.fromObject(result);

    if(object.getInt("error_code")==0){

    System.out.println(object.get("result"));

    }else{

    System.out.println(object.get("error_code")+":"+object.get("reason"));

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    //3.银行账户黄金

    public static void getRequest3(){

    String result =null;

    String url ="http://web.juhe.cn:8080/finance/gold/bankgold";//请求接口地址

    Map params = new HashMap();//请求参数

    params.put("key",APPKEY);//APP Key

    try {

    result =net(url, params, "GET");

    JSONObject object = JSONObject.fromObject(result);

    if(object.getInt("error_code")==0){

    System.out.println(object.get("result"));

    }else{

    System.out.println(object.get("error_code")+":"+object.get("reason"));

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    public static void main(String[] args) {

    }

    /**

    *

    * @param strUrl 请求地址

    * @param params 请求参数

    * @param method 请求方法

    * @return 网络请求字符串

    * @throws Exception

    */

    public static String net(String strUrl, Map params,String method) throws Exception {

    HttpURLConnection conn = null;

    BufferedReader reader = null;

    String rs = null;

    try {

    StringBuffer sb = new StringBuffer();

    if(method==null || method.equals("GET")){

    strUrl = strUrl+"?"+urlencode(params);

    }

    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);

    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 {

    DataOutputStream out = new DataOutputStream(conn.getOutputStream());

    out.writeBytes(urlencode(params));

    } catch (Exception e) {

    // TODO: handle exception

    }

    }

    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(Mapdata) {

    StringBuilder sb = new StringBuilder();

    for (Map.Entry i : data.entrySet()) {

    try {

    sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");

    } catch (UnsupportedEncodingException e) {

    e.printStackTrace();

    }

    }

    return sb.toString();

    }

    }

    展开全文
  • 因为以前从未用数据库向java接口推送数据,所以为了实现这个demo我是一步一个脚印的踩坑啊!!! 此文章的作用以及应用场景:利用数据库主动推送数据,实现前端页面数据实时更新,替换ajax轮询机制。推送的依据是,...

     

     


    因为以前从未用数据库向java接口推送数据,所以为了实现这个demo我是一步一个脚印的踩坑啊!!!

    此文章的作用以及应用场景:利用数据库主动推送数据,实现前端页面数据实时更新,替换ajax轮询机制。推送的依据是,只要数据库指定的表中数据增加有了变化,数据库会触发触发器然后通过存储过程调用消息推送接口

     

    代码如下:....

         

    ----------------------------触发器---------------------------------------
    USE [devRep]
    GO
    /****** Object:  Trigger [dbo].[tr_sm_demo]    Script Date: 2019/9/26 14:06:46 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    
    
    -- Description:	<Insert触发器>
    -- =============================================
    create TRIGGER [dbo].[tr_sm_demo] 
     
    ON [dbo].[demo] 
     
    AFTER insert
     
    AS 
    BEGIN
    	declare @id int
     
    	set @id = (select id from demo where id=@id)  --如不指定条件查询  会出现 子查询返回的不是一个参数 !<> >>?  乱七八糟的一个错误  就是这里返回必须是一个数据
     
    	exec proc_useJPushAPI @id --调用存储过程并传参 如果传入的参数未变则不会触发
     
    	SET NOCOUNT ON;
    END
    
    ----------------------------存储过程--------------------------------
    
    USE [devRep]
    GO
    /****** Object:  StoredProcedure [dbo].[proc_useJPushAPI]    Script Date: 2019/9/26 13:56:19 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    
    -- Description:	<调用消息推送接口>
    -- =============================================
    CREATE procedure [dbo].[proc_useJPushAPI]
    	@id varchar(20)		--demo表的id字段
    AS
    BEGIN
    	--创建存储过程里的参数
    	declare @url varchar(4000)	--接口路由
    	declare @object int			--OLE对象实例
    	declare @responseText varchar(4000) --文本
    	declare @name varchar(20)
        select @name=name from demo;  --查询demo表为接口传递参数
    	set @url = 'http://127.0.0.1:8080/site/recedata?name='+@name ;
    	
    	print @url
     
    	exec sp_OACreate'MSXML2.XMLHTTP',@object out
    	exec sp_OAMethod @object,'open',null,'get',@url,'false'
    	exec sp_OAMethod @object,'send'
    	exec sp_OAMethod @object,'responseText',@responseText output
     
    	print @responseText
     
    	exec sp_OADestroy @object
     
    	SET NOCOUNT ON;
     
    END
    //接收java接口代码 
    @RequestMapping(value = "/recedata")
        public String recedata( String name) {
            try {
                System.out.println("sql server 访问啦---");
                return "HELLO";
            } catch (Exception e) {
                logger.info(e.getMessage(),e);
            }
            return null;
        }

     

    第二种写法

    create table A(keyId int,info1 varchar(20))
    go
    insert into A values(1,'a')
    insert into A values(2,'b')
    insert into A values(3,'C')
    insert into A values(4,'d')
    insert into A values(5,'e')
    insert into A values(6,'f')
    go
    create trigger tr_a_test on a
    after update 
    as
    begin
     declare @keyId_old int ,@info1_old varchar(20)
     declare @keyId_new int ,@info1_new varchar(20)
      
      ---获取修改前的值
      select @keyId_old=keyId,@info1_old =info1 from deleted  
      ---获取修改后的值
      select @keyId_new=keyId,@info1_new =info1 from inserted    
      ----打印获取的相关值   
       print '-------修改前的值------'   
       print @keyId_old
       print @info1_old   
       print '-------修改后的值------'
       print @keyId_new
       print @info1_new   
    end
    go
    
    update A set info1='testwwwtwt',keyId=108 where keyId =2 
    go
    drop trigger  tr_a_test
    go
    truncate table A
    drop table A 
    go

     

    mybatis

     

     create TRIGGER ${triggerName}
    
            ON ${tableName}
    
            AFTER INSERT ,UPDATE ,DELETE
    
            AS
            BEGIN
    
           declare @id varchar(11)
           declare @url varchar(255)
           declare @object int
           declare @responseText varchar(255)
     --删除
        if(not exists(select 1 from inserted) and exists(select 1 from deleted))
    
              select @id=${titleId} from deleted
        ELSE
        ---获取修改后的值
          select @id=${titleId} from inserted
          print @id
            set @url = 'http://${urlApi}/${controUrl}?id='+@id;
            print @url
    
    
        Exec sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT;
        exec sp_OAMethod @object,'open',null,'get',@url,'false'
    
        exec sp_OAMethod @object,'send'
        exec sp_OAMethod @object,'responseText',@responseText output
    
        Exec sp_OADestroy @Object
        EXEC sp_OAGetErrorInfo @Object --异常输出
    
    END;

    现在只要在数据库执行这个sql into demo (name) values  ('你真的很棒啊'); 就可以访问接口

    这里有个坑啊     如果你的表名是demo,接收java接口的@RequestMapping 里也是叫demo, 那么无论你在怎么增加  它都不会跑到这个方法

    嗨!出错了嘛? 看这

    SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问

    借鉴博客:

    http://www.manongjc.com/article/44753.html

    https://www.jianshu.com/p/244c3cc30123

    https://www.cnblogs.com/tohen/p/4265263.html

    https://www.cnblogs.com/lflyq/archive/2016/11/15/6065160.html

    做个记录...

    用数据库推送 websocket接收渲染前端页面应该是  万瑞古德!

     

    -----------------补存-------2020年12月9日11:20:40

    之前写的触发器向指定接口传数据,只是写了一个demo,并没有真正使用,后续使用遇到一些问题,做一些记录

    问题:

    使用mybatis创建触发器和存储过程后,在数据库里添加demo表中的数据,由于传的参数是id,在接口里查询当前参数id的值,结果mybatis查询走到mapper层就卡死了,当前百思不得其解,以为是程序写的有问题。经过不断的摸索和实验最后发现当在数据库中添加

    一条数据时触发器立马请求存储过程中的http接口,然后接口根据id查询最新的数据,为啥会卡死呢?原因就是触发器之前,这个事务并未结束,insert并没有真正的添加到数据库中,所以导致一系列问题.

    解决:

    我的解决思路很简单,上代码

     new Thread(() -> {
                    try {
                        //放到多线程中等待1-2秒,等他的事务完事后在查询
                        Thread.sleep(1500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                  
                }).start();

    如有问题,请指出

     

    展开全文
  • Java接口定时推送数据

    千次阅读 2019-06-09 01:12:00
    接口就是URL 可以请求数据获取响应 本文使用JavaSE实现 依赖jar包 # 怕不兼容jdk1.6使用老版本jar commons-beanutils-1.6.jar commons-collections-3.2.1.jar commons-lang-2....

    接口就是URL 可以请求数据获取响应 本文使用JavaSE实现

    依赖jar包

    # 怕不兼容jdk1.6使用老版本jar
    commons-beanutils-1.6.jar
    commons-collections-3.2.1.jar
    commons-lang-2.1.jar
    commons-logging-1.1.1.jar
    ezmorph-1.0.1.jar
    ezmorph-1.0.2.jar
    json-lib-2.4-jdk15.jar
    mysql-connector-java-5.0.5-bin.jar
    
    // 使用JDK自带Timer 和 HttpURLConnection
    public static void main(String[] args) {
    
    	Timer timer = new Timer();
    	timer.schedule(new TimerTask() {
    		public void run() {
    
    			List userList = new ArrayList();
    			List orgList = new ArrayList();
    
    			try {
    				String URL="jdbc:mysql://localhost/data?characterEncoding=utf-8";
    				String USER="data";
    				String PASSWORD="data";
    				// 1.加载驱动程序
    				Class.forName("com.mysql.jdbc.Driver");
    				// 2.获得数据库连接
    				Connection conn=DriverManager.getConnection(URL, USER, PASSWORD);
    				// 3.通过数据库的连接操作数据库 实现增删改查(使用Statement类)
    				Statement st=conn.createStatement();
    
    				// ---用户信息开始
    				ResultSet userRs=st.executeQuery(
    						"SELECT" +
    								" EMP_ID" + // 用户id
    								" ,ACCOUNT" + // 用户账户
    								" ,ORG_ID" + // 用户部门id
    								" ,EMPNAME" + // 用户名
    								" ,EMP_PASSWORD" + // 密码
    								" ,ISDELETE" + // 用户是否删除 0未删除 1已删除
    								" FROM" +
    								" ORG_EMPLOYEE");
    				// 4.处理数据库的返回结果(使用ResultSet类)
    				userList = new ArrayList();
    				while (userRs.next()) {
    					Map user = new HashMap();
    					user.put("id", userRs.getString("EMP_ID"));
    					user.put("loginName", userRs.getString("ACCOUNT"));
    					user.put("userName", userRs.getString("EMPNAME"));
    					user.put("password", userRs.getString("EMP_PASSWORD"));
    					user.put("userCateId", userRs.getString("ORG_ID"));
    					userList.add(user);
    				}
    				userRs.close(); // 关闭资源
    				// ---用户信息结束
    
    				// ---部门信息开始
    				ResultSet orgRs = st.executeQuery(
    						"SELECT" +
    						 " ORG_ID" +
    						 " ,ORGNAME" +
    						 " ,ORGPARENTORGID" +
    						 " FROM" +
    						 " ORG_ORGANIZATION");
    				// 4.处理数据库的返回结果(使用ResultSet类)
    				while (orgRs.next()) {
    					Map org = new HashMap();
    					org.put("id", orgRs.getString("ORG_ID"));
    					org.put("cateName", orgRs.getString("ORGNAME"));
    					org.put("parentId", orgRs.getString("ORGPARENTORGID"));
    					orgList.add(org);
    				}
    				orgRs.close(); // 关闭资源
    				// ---部门信息结束
    
    				st.close(); // 关闭资源
    				conn.close(); // 关闭资源
    			} catch (ClassNotFoundException e) {
    				e.printStackTrace();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    
    			// 可直接在url上输入参数 中文要编码成UTF-8的字节数组后转成String
    			// String urlPath = new String("http://localhost:8080/data_sync?data=数据".getBytes("UTF-8"));
    			String urlPath = "http://localhost:8080/data_sync";
    
    			// 调用端如不自动解码 则可通过如下方式编码
    			// URLEncoder.encode(userList.toString(), "UTF-8")
    			// 调用端使用如下解码
    			// URLEncoder.decode(userList.toString(), "UTF-8")
    
    			String param  = "userList=" + JSONArray.fromObject(userList).toString()
    					+ "&orgList=" + JSONArray.fromObject(orgList).toString()
    					+ "&token=t$o$k$e$n";
    			try {
    				// 服务地址
    				URL url = new URL(urlPath);
    				// 设定连接的相关参数
    				HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    				connection.setDoOutput(true);
    				connection.setRequestMethod("POST");
    				OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
    				// 向服务端发送 key = value对
    				out.write(param);
    				out.flush();
    				out.close();
    				// 获取服务端的反馈
    				String strLine = "";
    				String strResponse = "";
    				InputStream in = connection.getInputStream();
    				BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    				while((strLine = reader.readLine()) != null) {
    					strResponse += strLine + "\n";
    				}
    				System.out.println(strResponse);
    			} catch (MalformedURLException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			System.out.println("已经执行" + new SimpleDateFormat ("HH:mm:ss").format (new Date()));
    		}
    	}, 1000, 1000 * 60); // 此时为一分钟执行一次 每次延迟一秒执行
    }
    

    调用方为Spring的Controller

    @Controller
    public class DataSyncController {
    
        @Autowired
        private SysUserService userService;
    
        @Autowired
        private SysUserCateService userCateService;
    
        @ResponseBody
        @PostMapping("data_sync")
        public boolean test(String token, String userList, String orgList) {
    
            if (!token.equals("t$o$k$e$n")) {
                return false;
            }
    
            try {
                JSONArray userJson =  JSONArray.fromObject(userList); // 获取data字段
                JSONArray orgJson =  JSONArray.fromObject(orgList); // 获取data字段
    
                List<SysUser> users = JSONArray.toList(userJson, new SysUser(), new JsonConfig());
                List<SysUserCate> userCates = JSONArray.toList(orgJson, new SysUserCate(), new JsonConfig());
    
                userService.syncData(users);
                userCateService.sysnData(userCates);
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    }
    

    窗口运行

    java -jar DataSync.jar
    

    后台运行

    @echo off
    START "data-sync" javaw -jar DataSync.jar
    

    SpringBoot自带定时任务

    @EnableScheduling // 开启对定时任务支持
    @SpringBootApplication
    public class DmsAdminApplication{
        public static void main(String[] args) {
            SpringApplication.run(DmsAdminApplication.class, args);
        }
    }
    
    @Component
    // 启动类写了如下注解 此处可省略书写
    @EnableScheduling
    public class TestTask {
    
    	// 配置毫秒数
        @Scheduled(fixedRate = 1000) // 毫秒
        public void reportCurrentTime() {
            System.out.println ("已经执行" + new SimpleDateFormat ("HH:mm:ss").format (new Date()));
        }
    
    	// cron表达式写法
        // @Scheduled(cron = "* * * * *") // 每1分钟执行一次
        // @Scheduled(cron = "*/1 * * * *") // 每1分钟执行一次
        @Scheduled(cron = "0 */2 * * *") // 每两个小时执行一次
        public void reportCurrentByCron() {
            System.out.println ("已经执行" + new SimpleDateFormat ("HH:mm:ss").format (new Date ()));
        }
    }
    

    cron表达式有7个域 依序分别为 秒 分 时 日 月 周 年 年为可选类型 在不设定年分时为每年
    

    cron字符描述

    字符 描述
    * 匹配所有的值 如 *在分钟的字段域里表示 每分钟
    ? 只在日期域和星期域中使用 它被用来指定非明确的值
    - 指定范围 如 10-12在小时域意味着10点、11点、12点
    , 指定多个值 如 MON WED FRI在星期域里表示星期一 星期三 星期五
    / 指定增量 如 */1 * * * *每1分钟执行一次
    L 表示day-of-month和day-of-week域 但在两个字段中的意思不同 例如day-of-month域中表示一个月的最后一天 如果在day-of-week域表示’7’或者’SAT’ 如果在day-of-week域中前面加上数字 它表示一个月的最后几天 例如’6L’就表示一个月的最后一个星期五
    W 只允许日期域出现 这个字符用于指定日期的最近工作日 例如 在日期域中写15W表示 此月15号最近的工作日 所以 如果15号是周六 则任务会在14号触发 如果15好是周日 则任务会在周一也就是16号触发 如果是在日期域填写1W即使1号是周六 那么任务也只会在下周一 也就是3号触发 W字符指定的最近工作日是不能够跨月份的 字符W只能配合一个单独的数值使用 不能够是一个数字段 如 1-15W是错误的
    LW L和W可以在日期域中联合使用 LW表示这个月最后一周的工作日
    # 只允许在星期域中出现 指定本月的某天 如 6#3表示本月第三周的星期五 6表示星期五 3表示第三周
    C 允许在日期域和星期域出现 此表达式值依赖于相关日历计算 无日历关联 则等价于所有包含的日历 如 日期域是5C表示关联日历中第一天 或者这个月开始的第一天的后5天 星期域是1C表示关联日历中第一天 或者星期的第一天的后1天 也就是周日的后一天周一

    cron字符对应意义

    字段 允许值 允许的特殊字符
    0-59 , - * /
    0-59 , - * /
    小时 0-23 , - * /
    月内日期 1-31 , - * ? / L W C
    1-12 或者 JAN-DEC , - * /
    周内日期 1-7 或者 SUN-SAT , - * ? / L C #
    年(可选) 留空 1970-2099 , - * /

    cron常用写法

    表达式 作用
    * * * * * 每1分钟执行一次
    */1 * * * * 每1分钟执行一次
    0 0 1 * * ? 每天1点触发
    0 10 1 ? * * 每天早上1点10分触发
    0 10 1 * * ? 每天早上1点10分触发
    0 10 1 * * ? * 每天早上1点10分触发
    0 10 1 * * ? 2020 2020年的每天1点10分触发
    0 * 2 * * ? 每天1点到1点59分每分钟一次触发
    0 0/5 14 * * ? 每天从下午2点开始到2:55分结束每5分钟一次触发
    0 0/5 1,3 * * ? 每天1点至1点55分 6点至6点55分每5分钟一次触发
    0 5-10 1 * * ? 每天1点5分至1点10分每分钟一次触发
    0 10,15 1 ? 3 WED 三月的每周三的1点10分和1点15分触发
    0 10 1 ? * MON-FRI 每周 周一至周五1点10分触发
    持续更新。。。
    cron表达式参考 https://www.cnblogs.com/Leo_wl/p/4714135.html

    转载于:https://www.cnblogs.com/setlilei/p/11032356.html

    展开全文
  • java 调用webservice接口推送数据

    千次阅读 2019-10-25 17:18:05
    需求:扫描数据库表数据, 待发送,发送失败且次数不超过3次的的数据推送到别的系统 通过对方提供的xml报文 拼接报文代码:public static String getXML(Map<String, Object> noSucDataMap) { String title ...

    需求:扫描数据库表数据, 待发送,发送失败且次数不超过3次的的数据,推送到别的系统
    通过对方提供的xml报文

    拼接报文代码:public static String getXML(Map<String, Object> noSucDataMap) {
    String title = noSucDataMap.get(“noticeName”) == null ? “” : noSucDataMap.get(“noticeName”).toString();
    Object projectName = noSucDataMap.get(“tenderName”) == null ? “” : noSucDataMap.get(“tenderName”).toString();
    Object RegionCode = noSucDataMap.get(“regionCode”) == null ? “” : noSucDataMap.get(“regionCode”).toString();
    Object NoticeContent = noSucDataMap.get(“noticeContent”) == null ? “” : noSucDataMap.get(“noticeContent”).toString();
    Object tenderType = noSucDataMap.get(“tenderType”) == null ? “” : noSucDataMap.get(“tenderType”).toString();
    Object createTime = noSucDataMap.get(“createTime”);
    Object bidOpenTime = noSucDataMap.get(“bid_open_time”);
    DateFormat df = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss”);
    String createTimeStr = df.format(createTime);
    String bidOpenTimeStr = “”;
    if (bidOpenTime != null) {
    bidOpenTimeStr = df.format(bidOpenTime);
    }else {
    System.out.println(“开标时间不能为空!”);
    }

        String soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
                "  <soap:Body>\n" +
                "    <InsertNoticeInfo xmlns=\"http://tempuri.org/\">\n" +
                "      <userName>test</userName>\n" +
                "      <passWord>111111</passWord>\n" +
                "      <model>\n" +
                "        <NoticeInfoId>0</NoticeInfoId>\n" +
                "        <CategoryId>0</CategoryId>\n" +
                "        <NoticeType>0</NoticeType>\n" +
                "        <Title>" + title + "</Title>\n" +
                "        <Author></Author>\n" +
                "        <Source></Source>\n" +
                "        <UploadFileExplain></UploadFileExplain>\n" +
                "        <UploadFilePath></UploadFilePath>\n" +
                "        <OwnerUnit_ContactPerson></OwnerUnit_ContactPerson>\n" +
                "        <OwnerUnit_Name></OwnerUnit_Name>\n" +
                "        <OwnerUnit_Phone></OwnerUnit_Phone>\n" +
                "        <Qualification></Qualification>\n" +
                "        <Agency_Name></Agency_Name>\n" +
                "        <Agency_ContactPerson></Agency_ContactPerson>\n" +
                "        <Agency_Phone></Agency_Phone>\n" +
                "        <Tender></Tender>\n" +
                "        <TenderType>" + tenderType + "</TenderType>\n" +
                "        <RegionCode>" + RegionCode + "</RegionCode>\n" +
                "        <ProjectName>" + projectName + "</ProjectName>\n" +
                "        <ForecastSuccessfulcandidate></ForecastSuccessfulcandidate>\n" +
                "        <TransactionAmount>0</TransactionAmount>\n" +
                "        <ProjectLeader></ProjectLeader>\n" +
                "        <NoticeContent><![CDATA[" + NoticeContent + "]]></NoticeContent>\n" +
                "        <CreateTime>" + createTimeStr + "</CreateTime>\n" +
                "        <CreateUserId></CreateUserId>\n" +
                "        <TenderDeadline>" + bidOpenTimeStr + "</TenderDeadline>\n" +
                "        <Credential></Credential>\n" +
                "        <Status>0</Status>\n" +
                "        <IsSend>true</IsSend>\n" +
                "        <Scale></Scale>\n" +
                "        <BidPerson></BidPerson>\n" +
                "        <EvaluationBidExpenses>0</EvaluationBidExpenses>\n" +
                "        <State></State>\n" +
                "        <ProjectFilingUN></ProjectFilingUN>\n" +
                "        <ProjectApprovalUN></ProjectApprovalUN>\n" +
                "        <ChapterNumber>0</ChapterNumber>\n" +
                "        <BiddingScope></BiddingScope>\n" +
                "        <BidTime>" + bidOpenTimeStr + "</BidTime>\n" +
                "        <PlanTime></PlanTime>\n" +
                "        <ProjectCondition></ProjectCondition>\n" +
                "        <BidWay></BidWay>\n" +
                "        <BidAddress></BidAddress>\n" +
                "        <PublishMedia></PublishMedia>\n" +
                "        <SectionName></SectionName>\n" +
                "        <OpenAddress></OpenAddress>\n" +
                "        <FirstPerson></FirstPerson>\n" +
                "        <FirstPrice>0</FirstPrice>\n" +
                "        <FirstProjectPerson></FirstProjectPerson>\n" +
                "        <SecondPerson></SecondPerson>\n" +
                "        <SecondPrice>0</SecondPrice>\n" +
                "        <SecondProjectPerson></SecondProjectPerson>\n" +
                "        <TenderPerson></TenderPerson>\n" +
                "        <TenderPrice>0</TenderPrice>\n" +
                "        <TenderProjectPerson></TenderProjectPerson>\n" +
                "        <CreateUsername></CreateUsername>\n" +
                "        <PriceSource></PriceSource>\n" +
                "      </model>\n" +
                "      <categoryId>" + tenderType + "</categoryId>\n" +
                "      <fBytes></fBytes>\n" +
                "      <errorString></errorString>\n" +
                "    </InsertNoticeInfo>\n" +
                "  </soap:Body>\n" +
                "</soap:Envelope>";
        return soapXML;
    }
    

    //业务逻辑
    public void selLogsNoSuc() {
    List<Map<String, Object>> noSucDataList = winBidCandidateDao.selLogsNoSuc();
    // List sendSucCode = new ArrayList();
    for (int i = 0; i < noSucDataList.size(); i++) {
    Map<String, Object> noSucDataMap = noSucDataList.get(i);

            //获取报文
            String soapXML = getXML(noSucDataMap);
            WebserviceResultBean ret = sendDataAhtbaWebService(soapXML);
            int id = Integer.parseInt(String.valueOf(noSucDataMap.get("id")));
            LogsAhszbtbxxw logsAhszbtbxxwNum = winBidCandidateDao.selLogsAhsInfoById(id);
            int sendNum = logsAhszbtbxxwNum.getSendNum() + 1;
            LogsAhszbtbxxw logsAhszbtbxxwObj = new LogsAhszbtbxxw();
            logsAhszbtbxxwObj.setId(id);
            logsAhszbtbxxwObj.setSendNum(sendNum);
    
            //创建名字表对象
            LogsAhszbtbxxwDetail logsAhszbtbxxwDetail = new LogsAhszbtbxxwDetail();
            Object noticeId = noSucDataMap.get("noticeId");
            if (noticeId != null) {
                logsAhszbtbxxwDetail.setNoticeId(noticeId.toString());
            }
            logsAhszbtbxxwDetail.setNoticeId(noSucDataMap.get("noticeId").toString());
            logsAhszbtbxxwDetail.setSendTime(new Date());
            logsAhszbtbxxwDetail.setXml(soapXML);
    
            if ("true".equals(ret.getResult())) {
                logsAhszbtbxxwObj.setStates("1");
                logsAhszbtbxxwDetail.setRemarks(ret.getRemark());
                logsAhszbtbxxwDetail.setStates("1");
            } else {
                logsAhszbtbxxwObj.setStates("2");
                logsAhszbtbxxwDetail.setStates("2");
                String remark = ret.getRemark() == null ? "" : ret.getRemark();
                logsAhszbtbxxwDetail.setRemarks(ret.getResult() + remark);
    

    // logsAhszbtbxxwDetail.setRemarks();
    }
    winBidCandidateDao.updateStates(logsAhszbtbxxwObj);
    winBidCandidateDao.insertLogsDetail(logsAhszbtbxxwDetail);
    }
    System.out.println(“扫描logs_ahszbtbxxw 待发送,发送失败且次数不超过3次的公告”);
    }

    //调用接口逻辑

    public static WebserviceResultBean sendDataAhtbaWebService(String soapXML) {
    // int responseCode=500;
    WebserviceResultBean ret = new WebserviceResultBean();
    try {
    //1:创建服务地址 接口地址
    URL url = new URL(“http://60.173.235.154:9021/ahtbaWebService.asmx”);
    //2:打开到服务地址的一个连接
    try {
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    //3.1设置发送方式:POST必须大写
    connection.setRequestMethod(“POST”);
    //3.2设置数据格式:Content-type
    connection.setRequestProperty(“content-type”, “text/xml;charset=utf-8”);
    connection.setDoInput(true);
    connection.setDoOutput(true);

                //4:组织SOAP协议数据,发送给服务端
    

    // String soapXML = getXML(“1866666666”);
    byte[] b = soapXML.getBytes(); //封装数据,数据以byte方式传输
    connection.setRequestProperty(“Content-Length”, String.valueOf(b.length));

                OutputStream os = connection.getOutputStream();
                os.write(b);
    
                //5:接收服务端的响应
                int responseCode = connection.getResponseCode();
                if (200 == responseCode) {
                    InputStream is = connection.getInputStream();
                    InputStreamReader isr = new InputStreamReader(is);
                    BufferedReader br = new BufferedReader(isr);
                    StringBuilder sb = new StringBuilder();
                    String temp = null;
    
                    while (null != (temp = br.readLine())) {
                        sb.append(temp);
                    }
                    System.out.println(sb.toString());
                    String sbXML = sb.toString();
                    ret = parseSoapMessage(sbXML);
                } else {
                    ret.setResult(String.valueOf(responseCode));
                }
    

    //
    // InputStream is1 = connection.getErrorStream();
    // InputStreamReader isr1 = new InputStreamReader(is1,“utf-8”);
    // BufferedReader in = new BufferedReader(isr1);
    // String inputLine;
    // BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
    // new FileOutputStream(“result.xml”)));// 将结果存放的位置
    // while ((inputLine = in.readLine()) != null)
    // {
    // System.out.println(inputLine);
    // bw.write(inputLine);
    // bw.newLine();
    // bw.close();
    // }
    // in.close();
    os.close();
    } catch (IOException e) {
    e.printStackTrace();
    }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return ret;
    }
    

    //解析接口返回的报文信息

    /**
     * 解析soapXML
     *
     * @param soapXML
     * @return
     */
    public static WebserviceResultBean parseSoapMessage(String soapXML) {
        WebserviceResultBean resultBean = new WebserviceResultBean();
        try {
            SOAPMessage msg = formatSoapString(soapXML);
            SOAPBody body = msg.getSOAPBody();
            Iterator<SOAPElement> iterator = body.getChildElements();
            parse(iterator, resultBean);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultBean;
    }
    

    /**
    * 把soap字符串格式化为SOAPMessage
    *
    * @param soapString
    * @return
    * @see [类、类#方法、类#成员]
    */
    private static SOAPMessage formatSoapString(String soapString) {
    MessageFactory msgFactory;
    try {
    msgFactory = MessageFactory.newInstance();
    SOAPMessage reqMsg = msgFactory.createMessage(new MimeHeaders(),
    new ByteArrayInputStream(soapString.getBytes(“UTF-8”)));
    reqMsg.saveChanges();
    return reqMsg;
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }

    /**
    * 解析soap xml
    *
    * @param iterator
    * @param resultBean
    */
    private static void parse(Iterator iterator, WebserviceResultBean resultBean) {
    while (iterator.hasNext()) {
    SOAPElement element = iterator.next();
    if (“InsertNoticeInfoResponse”.equals(element.getNodeName())) {
    Iterator it = element.getChildElements();
    SOAPElement el = null;
    while (it.hasNext()) {
    el = it.next();
    if (“InsertNoticeInfoResult”.equals(el.getLocalName())) {
    resultBean.setResult(el.getValue());
    System.out.println("#### " + el.getLocalName() + " ==== " + el.getValue());
    } else if (“errorString”.equals(el.getLocalName())) {
    resultBean.setRemark(null != el.getValue() ? el.getValue() : “”);
    System.out.println("#### " + el.getLocalName() + " ==== " + el.getValue());
    }
    }
    } else if (null == element.getValue()
    && element.getChildElements().hasNext()) {
    parse(element.getChildElements(), resultBean);
    }
    }
    }

    这里我的做的是个定时任务
    public void selLogsNoSuc(){
    System.out.println(“扫描logs_ahszbtbxxw 待发送,发送失败且次数不超过3次的公告”);
    winBidCandidateService.selLogsNoSuc();
    }

    展开全文
  • 当我们调用别人接口推送数据时,需要对方给一个接口地址以及接口的规范文档,规范中要包括接口的明确入参及其格式,和接口返回状态的几种情况, 调用的后台acion层业务管理层代码: /** * 调用XXX市接口推送...
  • /*** 调用XXX市接口推送银行开户信息* ywguid 即为 projectguid*@exception/throws [违例类型] [违例说明]*@see[类、类#方法、类#成员]*/public voidpushToSZOpenAcountApplyinfo(String projectguid) {try{...
  • java如何给第三方接口推送加密数据 java如何调用接口  在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口...
  • 405 表示 不允许 此方法,对于请求所标识的资源,不允许使用请求行中所指定的方法。 进一步排查发现: 我的请求方法和第三方接口方法,一个是 POST 请求,一个是GET请求,统一请求方式即可。 ...
  • 在白码低代码开发平台上对接七陌外呼接口,实现选择客户进行外呼,并保存通话记录的功能。外呼接口实现官方接口文档:http://developer.7moor.com/v2docs/dialout/1、对接数据查询向七陌商务索取到七陌用户中心账号...
  • 对接第三方平台JAVA接口问题推送和解决 原文:对接第三方平台JAVA接口问题推送和解决前言 本节所讲为实际项目中与第三方对接出现的问题最后还是靠老大解决了问题以此作为备忘录,本篇分为三小节,一...
  • 刷新页面再次请求服务端接口,这里我听到一个朋友说,他们之前开发的时候,前端是通过ajax轮询去调用服务端接口的,这样看似是解决问题了,其实是不可取的,对服务端很不又好,确却的说是错误的,然后他们就使用了...
  • 网站质量不错的网站可以在百度站长平台/数据提交/sitemap栏目下看到实时推送的功能, 目前这个工具是邀请开放, 百度的实时推送的api接口可以实时推送我们新发布的文章, 保证百度在第一时间收录.百度站长平台 ...
  • 写惯了接口都不知道该怎么主动推送数据了。。 Websocket,一种在单个 TCP 连接上进行全双工通讯的协议。也就是说,它允许服务端主动向客户端推送数据。并且只需要一次握手,两者之间就可以创建持久性的连接,并进行...
  • 我们项目要给别的系统的接口推送数据安全要求要求加密传输,要求如下; sign生成规则 key: 00000000000 secret: 123123 (1)把参数(Map<String,Object>类型)按字典排序 ksort 得到param_str (2)参数map...
  • 研究一种后端向前端推送数据的操作,叫SSE(Server-Sent Events),但是,我觉得这玩意就是轮询。算了,烦的要死,记录下这种方式把。前端代码是vue写的,EventSource里面是后端的接口地址mounted() {var es = new ...
  • 外呼接口实现1、对接数据查询向七陌商务索取到七陌用户中心账号密码,在查询页面查询到三个参数letaccountId="T0********";//账户idletapiSecret="495b60****************5f0555af";//账户secretlethost="https:/...
  • package com.liuqi.www... import java.util.HashMap; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import o...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 225
精华内容 90
关键字:

java数据接口推送数据

java 订阅