📄 sendinfoservice.java
字号:
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 + -