HttpClient实现某AWS pass客户端自动接单

嗯。。。记录一下,别提自己有多菜了。太菜了,现阶段也就只是实现了,还没经过长时间测试。打算过年这两天学完ssm整合,给自己写的第一个爬虫配个页面,配两个数据库表什么的。

光是包就导了这么多,这还没ssm包呢,真的菜 ,先把功能实现再说,后期有时间再看哪个包不用吧

log4j.properties 放src根目录 run.log文件创建在项目根目录

log4j.rootLogger = DEBUG,Console,Stdout

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n

log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

log4j.appender.Stdout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Stdout.File=./log/run.log
log4j.appender.Stdout.Append=true
log4j.appender.Stdout.Threshold = DEBUG
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [%p] %m%n

 一个类(论写注释的必要性)

getUrlResponse方法(下面好几个方法都会调用这个方法来获取一个String 然后自己转成JSONObject)

/**
	 * 传入 url 
	 * @param url
	 * @return json字符串只是字符串 
         *天知道我为什么不直接返回一个JSONObject或JSONArray
	 */
	public static String getUrlResponse(String url) {
		System.out.println(url);
		String json = null;
		CloseableHttpClient client=null;
		HttpEntity entity=null;
		try{
		//获取CloseableHttpClient对象
		client=HttpClients.createDefault();
		//创建httpPost对象
		HttpPost post=new HttpPost();
		post.setURI(new URI(url));
			//执行client 获取response
		HttpResponse response=client.execute(post);
		entity=response.getEntity();
		json=EntityUtils.toString(entity, "UTF-8");
		//返回json字符串
			return json;
		}catch(ClientProtocolException e){
			e.printStackTrace();
			return "{\"data\":{\"sid\":\"异常:执行client抛出的异常\"}}";
		}catch(URISyntaxException e){
			e.printStackTrace();
			return "{\"data\":{\"sid\":\"异常:URI抛出的异常,非要我处理,烦人\"}}";
		}catch(UnknownHostException e){
			e.printStackTrace();
			return "{\"data\":{\"sid\":\"异常:没什么大毛病,可能是服务器崩了,可能是本地断网了,也可能是我把网址写错了\"}}";
		}catch(IOException e){
			e.printStackTrace();
			return "{\"data\":{\"sid\":\"异常:居然真发生IO异常了?\"}}";
		}finally{
			 if (entity != null) {
	                try {
	                    EntityUtils.consume(entity);
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
			 if (client != null) {
	                try {
	                	//关闭连接
	                    client.close();
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
			
			}//finally的结束大括号
	
	}//end 	 getUrlResponse()	
	/**
	 *  传入 userName 和 用户密码 获取到sessionId
	 * @param userName
	 * @param pwd
	 * @return sid
         *看看看 上面为啥不直接返回JSONObject
	 */
	public String getSessionId(String userName,String pwd) {
		String url="http://******/portal/r/jd?userid="+userName+"&pwd="+pwd+"&rememberMeUid=on&rememberMePwd=on&lang=cn&cmd=CLIENT_USER_LOGIN&sid=&deviceType=pc";
		JSONObject json=(JSONObject)JSONObject.fromObject(getUrlResponse(url));//
		logger.info("不出意外的话是登陆成功了,当前用户:"+userName);
		return json.getJSONObject("data").getString("sid");
	}
/**
	 * 获取当前工单数
	 * @param userName
	 * @param pwd
	 * @return 工单数 
	 */
	public  Integer getCount(String userName,String pwd){
		 sid=getSessionId(userName,pwd);
		// System.out.println(sid);
		//嗯 不管下面发生了什么异常这里都有有sid 区别为是否为"异常:"开头,
		//这里需要sessionId.indexOf(str)判断下是异常信息还是正常信息,或者这里可以写一个工具类,判断是否为异常信息
		//工具类的话,下面这每一步都可以用,
		String url="http://*********/portal/r/jd?cmd=com.actionsoft.apps.workbench_con_task&sid="+sid+"&runType=1";
	
		JSONObject json=(JSONObject)JSONObject.fromObject(getUrlResponse(url));
		int count=Integer.parseInt(json.getJSONObject("data").getString("count"));
		logger.info("当前工单数:"+count);
		return count;
	}
	/**通过sessionId 获取工单列表的json集
	 * 获取工单信息
	 * @return jsonArray
	 */
	public JSONArray getTask(){
		String url="http://**************/portal/r/jd?cmd=com.actionsoft.apps.workbench_con_taskdata&sid="+sid;
		JSONArray  jsonArr= JSONArray.fromObject(getUrlResponse(url));
		return jsonArr;
	}
/**
	 * 遍历jsonArr判断社区信息
	 * @return List<UserLink>
	 */
	public List<UserLink> selectArray(JSONArray jsonArr,String sq){
		//临时变量用
		JSONObject ask=null;
		 List<UserLink> userList = new ArrayList<UserLink>();
		 UserLink userLink=new UserLink();
		//遍历当前jsonArray
		for(int i=0;i<jsonArr.size();i++){
			ask=jsonArr.getJSONObject(i);
			userLink.setOrderno(ask.getString("ORDERNO"));
			userLink.setCommun(ask.getString("COMMUNITYNAME"));
			userLink.setLink(ask.getString("LINKADDRESS"));
			userLink.setTaskid(ask.getString("INSTANCEID"));
			userLink.setTal(ask.getString("LINKTEL"));
			userLink.setLinkMan(ask.getString("LINKMAN"));
			userLink.setCustomerno(ask.getString("CUSTOMERNO"));
			logger.info(userLink.toString());
			//这里使用传入的正则匹配社区名称,满足添加到userList中
			if(Pattern.matches(sq, userLink.getCommun())){
				logger.info("社区名称:"+userLink.getCommun());
				userList.add(userLink);
			}
		}
		return userList;
	}
	/**
	 * 接单 
	 * @return
	 */
	private String chackTask(UserLink userLink){
		String url="http://******/portal/r/jd?cmd=com.actionsoft.apps.workbench_con_taskid&sid="+sid+"&taskid="+userLink.getTaskid();
		String chackLog=getUrlResponse(url);
		return chackLog;
	}
//都导的什么包也记录下吧,毕竟我这么菜,是吧
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.regex.Pattern;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
import org.junit.Test;
import *************************UserLink;

置于上面为啥sid直接用了? 我定了一个全局变量啊!哈!哈!哈!哈!咳!咯!

    //  run方法 正常当然不会跟上面的方法在同一个类中,但是测试嘛,今天先记录下,明天加到定时器里调行不?
      private String sid="";
	private Logger logger = Logger.getLogger("console");
	@Test
	public void run() throws Exception{
		String userName="username";
		String pwd="123456";
		//选定社区的正则
		String sq="****|****";
		logger.info("------------------------------------------");
		int count=getCount( userName, pwd);
		//当前有工单
		if(count>0){
			List<UserLink> taskList =	selectArray(getTask(),sq);
			ListIterator<UserLink>  tasIter=taskList.listIterator();
			while(tasIter.hasNext()){
				//一个UserLink对象
				UserLink userLink = tasIter.next();
				logger.info("懒得拆了,就这么存吧"+chackTask(userLink));
			}
		}
	}

嗯。。还有个实体类

package **************.pojo;

public class UserLink {
	//INSTANCEID
	private String taskid;
	//工单编号
	private String orderno;
	//社区
	private String commun;
	//详细地址
	private String link;
	//电话号
	private String tal;
	//用户名
	private String linkMan;
	//账号
	private String  customerno;
	public UserLink(){
		
	}
	public UserLink(String taskid, String orderno, String commun, String link,
			String sheq, String tal, String linkMan, String customerno) {
		super();
		this.taskid = taskid;
		this.orderno = orderno;
		this.commun = commun;
		this.link = link;
		this.tal = tal;
		this.linkMan = linkMan;
		this.customerno = customerno;
	}
	@Override
	public String toString() {
		return 	", 工单编号=" + orderno +
				", 用户名=" + linkMan +
				", 账号=" + customerno +
				", 社区="+ commun +
				", 地址=" + link +  
				", 电话=" + tal+  
				"User [taskid=" + taskid + 
				"]";
	}
	public String getTaskid() {
		return taskid;
	}
	public void setTaskid(String taskid) {
		this.taskid = taskid;
	}
	public String getOrderno() {
		return orderno;
	}
	public void setOrderno(String orderno) {
		this.orderno = orderno;
	}
	public String getCommun() {
		return commun;
	}
	public void setCommun(String commun) {
		this.commun = commun;
	}
	public String getLink() {
		return link;
	}
	public void setLink(String link) {
		this.link = link;
	}


	public String getTal() {
		return tal;
	}
	public void setTal(String tal) {
		this.tal = tal;
	}
	public String getLinkMan() {
		return linkMan;
	}
	public void setLinkMan(String linkMan) {
		this.linkMan = linkMan;
	}
	public String getCustomerno() {
		return customerno;
	}
	public void setCustomerno(String customerno) {
		this.customerno = customerno;
	}
}

定时器在这里,定时器的话,有个坑,定时器我试了好几个,都不行,都是最多运行一次就结束了,最后忽然想到时junit的锅

但是前面试过的定时器都删了只剩这个了

/**
	 * 定时器  这里无法使用junit测试  
	 * 因为junit也是线程
	 * @param args
	 */
public static void main(String args[]){
		 ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
	        executorService.scheduleAtFixedRate(new Runnable() {
	            @Override
	            public void run() {
	           // 	new testDingShiQi().test();
	            }
	        }, 0, 10, TimeUnit.SECONDS);//seconds 是秒 
	}

,还是存下连接吧

几种定时器

https://blog.youkuaiyun.com/lchq1995/article/details/78222528

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值