⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendinfoservice.java

📁 电信的网厅的整站代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.doone.fj1w.fjmgr;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.TimerTask;

import com.doone.data.DacClient;
import com.doone.data.DataTable;
import com.doone.fj1w.common.CronRuntime;
import com.doone.fj1w.fj1w.login.factory.CallTuxdoInter;
import com.doone.fj1w.fjmgr.config.CallingBean;
import com.doone.iossp.FormBody;
import com.doone.util.FileLogger;

/**
 * 发送短信提醒各个地市及时受理业务受理单,没有业务受理单不发送短信, 业务受理单提交时间不超过1分钟的为新业务受理单需要马上发送短信(对初级电话号码发送),
 * 业务受理单提交时间超过5分钟的为超时业务受理单需要马上发送短信(对初级电话号码发送),
 * 业务受理单提交时间超过30分钟的为超时业务受理单需要马上发送短信(对初级电话号码和高级电话号码都要发送),
 * 其中对初级电话号码每隔5分钟发送一次,对高级电话号码每隔30分钟发送一次
 * 
 * @author zhangy
 * 
 */
public class SendinfoService extends TimerTask {

	private DacClient dacClient = null;

	private static SendinfoService service = null;

	private boolean isRun = false;

	public static SendinfoService getInstance() {
		if (service == null) {
			try {
				service = new SendinfoService();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return service;
	}

	public SendinfoService() {
		dacClient = new DacClient();
	}

	/**
	 * 执行发送信息的操作
	 * 
	 * @return result(1:发送入日志都成功;2:发送成功,入日志失败;0:失败)
	 */
	public static String exec() {
		String result = "0";
		String cityCodes[] = new String[10];
		cityCodes[0] = "0590";
		cityCodes[1] = "0591";
		cityCodes[2] = "0592";
		cityCodes[3] = "0593";
		cityCodes[4] = "0594";
		cityCodes[5] = "0595";
		cityCodes[6] = "0596";
		cityCodes[7] = "0597";
		cityCodes[8] = "0598";
		cityCodes[9] = "0599";
		try {
			SendinfoService sendinfoService = getInstance();
			for (int j = 0; j < cityCodes.length; j++) {
				String cityCode = cityCodes[j];
				DataTable orderList = sendinfoService.getOrderByCitycde(cityCode);
				if (orderList != null && orderList.getRows().getCount() > 0) {
					int newOrderCnt = 0;
					int overFiveMinCnt = 0;
					int overThirtyMinCnt = 0;

					for (int i = 0; i < orderList.getRows().getCount(); i++) {
						boolean isSendedOrder = false;
						String orderId = orderList.getRow(i).getString("PRODORDERID");
						String isNewOrder = sendinfoService.isNewOrder(orderId);
						if (isNewOrder.equals("new")) {
							isSendedOrder = sendinfoService.isSendedOrder(orderId, cityCode, "NEWORDER");
							if (!isSendedOrder) {
								newOrderCnt++;
							}
						} else {
							boolean isOverFiveMin = sendinfoService.isOverFiveMin(orderId);
							if (isOverFiveMin) {
								isSendedOrder = sendinfoService.isSendedOrder(orderId, cityCode, "OVERFIVEMIN");
								if (!isSendedOrder) {
									overFiveMinCnt++;
								}
							} else {
								boolean isOverThirtyMin = sendinfoService.isOverThirtyMin(orderId);
								if (isOverThirtyMin) {
									isSendedOrder = sendinfoService.isSendedOrder(orderId, cityCode, "OVERTHIRTYMIN");
									if (!isSendedOrder) {
										overThirtyMinCnt++;
									}
								}
							}
						}
					}
					result = sendinfoService.sendInfo(newOrderCnt, overFiveMinCnt, overThirtyMinCnt, cityCode);
				}
			}
		} catch (Exception ex) {
			FileLogger.getLogger().error("执行发送信息的操作出错:" + ex.getMessage(), ex);
		}
		return result;
	}

	/**
	 * 获取待受理的业务受理单列表
	 * 
	 * @return orderList(!=null:有,null:没有)
	 */
	private DataTable getOrderByCitycde(String cityCode) {
		DataTable orderList = null;
		try {
			Object[] _object = new Object[1];
			_object[0] = cityCode;
			StringBuffer sql = new StringBuffer();
			sql.append("select * from tf_prodorder t ");
			sql.append("where substr(t.weborder,5,4) = ? ");
			sql.append("and t.progressstate = '1' ");
			sql.append("and t.bosomprogressstate = '1' ");
			sql.append("and t.upprodorderid = '0' ");
			orderList = dacClient.executeQuery(sql.toString(), _object);
		} catch (Exception ex) {
			FileLogger.getLogger().error("判断是否有业务受理单出错:" + ex.getMessage(), ex);
		}
		return orderList;
	}

	/**
	 * 设待受理的业务受理单信息
	 * 
	 * @return orderList(!=null:有,null:没有)
	 */
	private void setOrderInfo(String cityCode, Map infos) {
		try {
			int newOrderCnt = 0;
			int overFiveMinCnt = 0;
			int overThirtyMinCnt = 0;
			String newOrder = "";
			String overFiveMin = "";
			String overThirtyMin = "";

			DataTable orderList = getOrderByCitycde(cityCode);
			if (orderList != null && orderList.getRows().getCount() > 0) {
				for (int i = 0; i < orderList.getRows().getCount(); i++) {
					String orderId = orderList.getRow(i).getString("PRODORDERID");
					String isNewOrder = isNewOrder(orderId);
					if (isNewOrder.equals("new")) {
						newOrderCnt++;
						newOrder += orderId + "#";
					} else {
						boolean isOverFiveMin = isOverFiveMin(orderId);
						if (isOverFiveMin) {
							overFiveMinCnt++;
							overFiveMin += orderId + "#";
						} else {
							boolean isOverThirtyMin = isOverThirtyMin(orderId);
							if (isOverThirtyMin) {
								overThirtyMinCnt++;
								overThirtyMin += orderId + "#";
							}
						}
					}
				}
			}
			infos.put("newOrderCnt", String.valueOf(newOrderCnt));
			infos.put("overFiveMinCnt", String.valueOf(overFiveMinCnt));
			infos.put("overThirtyMinCnt", String.valueOf(overThirtyMinCnt));
			infos.put("newOrder", newOrder);
			infos.put("overFiveMin", overFiveMin);
			infos.put("overThirtyMin", overThirtyMin);
		} catch (Exception ex) {
			FileLogger.getLogger().error("设待受理的业务受理单次数出错:" + ex.getMessage(), ex);
		}
	}

	/**
	 * 获取已经发送过的单子列表 orderId:订单Id
	 * 
	 * @return result(true:是,false:否)
	 */
	private DataTable getSendedOrder(String cityCode) {
		DataTable list = null;
		try {
			Object[] _object = new Object[1];
			_object[0] = cityCode;
			StringBuffer sql = new StringBuffer();
			sql.append("select t.*,rowid from tf_sendinfotime t ");
			sql.append("where substr(t.phonumber,0,4) like ? and t.pholevel = '1' order by t.sendtime desc");
			list = dacClient.executeQuery(sql.toString(), _object);
		} catch (Exception ex) {
			FileLogger.getLogger().error("获取已经发送过的单子出错:" + ex.getMessage(), ex);
		}
		return list;
	}

	// /**获取各种已经发送过的单子
	// * orderId:订单Id
	// *
	// * @return result(true:是,false:否)
	// */
	// private String getSendedOrderByFiled(String cityCode,String filedName) {
	// String sendorder = "";
	// try{
	// DataTable list = getSendedOrder(cityCode);
	// if(list != null && list.getRows().getCount() > 0) {
	// sendorder = list.getRow(0).getString(filedName);
	// }
	// }catch(Exception ex) {
	// FileLogger.getLogger().error("获取各种已经发送过的单子出错:"+ex.getMessage(), ex);
	// }
	// return sendorder;
	// }

	/**
	 * 判断该业务受理单是否是已经发送过的单子 orderId:订单Id
	 * 
	 * @return result(true:是,false:否)
	 */
	private boolean isSendedOrder(String orderId, String cityCode, String filedName) {
		boolean result = false;
		try {
			DataTable list = getSendedOrder(cityCode);
			if (list != null && list.getRows().getCount() > 0) {
				String sendorder = list.getRow(0).getString(filedName);
				String[] sendorders = sendorder.split("#");
				if (sendorders != null && sendorders.length > 0) {
					for (int i = 0; i < sendorders.length; i++) {
						if (orderId.equals(sendorders[i])) {
							result = true;
							break;
						}
					}
				}
			}
		} catch (Exception ex) {
			FileLogger.getLogger().error("判断该业务受理单是否是已经发送过的单子出错:" + ex.getMessage(), ex);
		}
		return result;
	}

	/**
	 * 判断业务受理单是否是新单(提交时间不超过1分钟的单子) orderId:订单Id
	 * 
	 * @return result(new:是,old:否)
	 */
	private String isNewOrder(String orderId) {
		String result = "new";
		try {
			Object[] _object = new Object[1];
			_object[0] = orderId;
			StringBuffer sql = new StringBuffer();
			sql
					.append("select round(to_number(sysdate - t.accepttime) * 1440) time from tf_prodorder t where t.prodorderid = ?");
			String time = dacClient.getStringFromSqlQuery(sql.toString(), _object);
			if (Integer.parseInt(time) > 1) {
				result = "old";
			}
		} catch (Exception ex) {
			FileLogger.getLogger().error("判断业务受理单是否是新单出错:" + ex.getMessage(), ex);
		}
		return result;
	}

	/**
	 * 判断业务受理单是否是超过5分钟小于30分钟的超时单 orderId:订单Id
	 * 
	 * @return result(true:是,false:否)
	 */
	private boolean isOverFiveMin(String orderId) {
		boolean result = true;
		try {
			Object[] _object = new Object[1];
			_object[0] = orderId;
			StringBuffer sql = new StringBuffer();
			sql
					.append("select round(to_number(sysdate - t.accepttime) * 1440) time from tf_prodorder t where t.prodorderid = ?");
			String time = dacClient.getStringFromSqlQuery(sql.toString(), _object);
			if (Integer.parseInt(time) > 30 || (Integer.parseInt(time) > 1 && Integer.parseInt(time) <= 5)) {
				result = false;
			}
		} catch (Exception ex) {
			FileLogger.getLogger().error("判断业务受理单是否是超过5分钟的超时单出错:" + ex.getMessage(), ex);
		}
		return result;
	}

	/**
	 * 判断业务受理单是否是超过30分钟的超时单 orderId:订单Id
	 * 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -