📄 requestprocessor.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.server;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import org.compiere.model.*;
import org.compiere.util.*;
/**
* Request Processor
*
* @author Jorg Janke
* @version $Id: RequestProcessor.java,v 1.16 2005/12/17 19:57:21 jjanke Exp $
*/
public class RequestProcessor extends CompiereServer
{
/**
* RequestProcessor
* @param model model
*/
public RequestProcessor (MRequestProcessor model)
{
super (model, 60); // 1 minute delay
m_model = model;
m_client = MClient.get(model.getCtx(), model.getAD_Client_ID());
} // RequestProcessor
/** The Concrete Model */
private MRequestProcessor m_model = null;
/** Last Summary */
private StringBuffer m_summary = new StringBuffer();
/** Client onfo */
private MClient m_client = null;
/**************************************************************************
* Do the actual Work
*/
protected void doWork()
{
m_summary = new StringBuffer();
//
processEMail();
findSalesRep ();
processRequests ();
processStatus();
processECR();
//
int no = m_model.deleteLog();
m_summary.append("Logs deleted=").append(no);
//
MRequestProcessorLog pLog = new MRequestProcessorLog(m_model, m_summary.toString());
pLog.setReference("#" + String.valueOf(p_runCount)
+ " - " + TimeUtil.formatElapsed(new Timestamp(p_startWork)));
pLog.save();
} // doWork
/**************************************************************************
* Process requests.
* Scheduled - are they due?
*/
private void processRequests ()
{
/**
* Due Requests
*/
String sql = "SELECT * FROM R_Request "
+ "WHERE DueType='" + MRequest.DUETYPE_Scheduled + "' AND Processed='N'"
+ " AND DateNextAction > SysDate"
+ " AND AD_Client_ID=?";
if (m_model.getR_RequestType_ID() != 0)
sql += " AND R_RequestType_ID=?";
PreparedStatement pstmt = null;
int count = 0;
int countEMails = 0;
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, m_model.getAD_Client_ID());
if (m_model.getR_RequestType_ID() != 0)
pstmt.setInt(2, m_model.getR_RequestType_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
MRequest request = new MRequest (getCtx(), rs, null);
request.setDueType();
if (request.isDue())
{
if (request.getRequestType().isEMailWhenDue())
{
if (sendEmail (request, "RequestDue"))
{
request.setDateLastAlert();
countEMails++;
}
}
request.save();
count++;
}
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
m_summary.append("New Due #").append(count);
if (countEMails > 0)
m_summary.append(" (").append(countEMails).append(" EMail)");
m_summary.append (" - ");
/**
* Overdue Requests.
* Due Requests - are they overdue?
*/
sql = "SELECT * FROM R_Request r "
+ "WHERE r.DueType='" + MRequest.DUETYPE_Due + "' AND r.Processed='N'"
+ " AND AD_Client_ID=?"
+ " AND EXISTS (SELECT * FROM R_RequestType rt "
+ "WHERE r.R_RequestType_ID=rt.R_RequestType_ID"
+ " AND (r.DateNextAction+rt.DueDateTolerance) > SysDate)";
if (m_model.getR_RequestType_ID() != 0)
sql += " AND r.R_RequestType_ID=?";
count = 0;
countEMails = 0;
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, m_model.getAD_Client_ID());
if (m_model.getR_RequestType_ID() != 0)
pstmt.setInt(2, m_model.getR_RequestType_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
MRequest request = new MRequest (getCtx(), rs, null);
request.setDueType();
if (request.isOverdue())
{
if (request.getRequestType().isEMailWhenOverdue()
&& !TimeUtil.isSameDay(request.getDateLastAlert(), null))
{
if (sendEmail (request, "RequestDue"))
{
request.setDateLastAlert();
countEMails++;
}
}
request.save();
count++;
}
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
m_summary.append("New Overdue #").append(count);
if (countEMails > 0)
m_summary.append(" (").append(countEMails).append(" EMail)");
m_summary.append (" - ");
/**
* Send (over)due alerts
*/
if (m_model.getOverdueAlertDays() > 0)
{
sql = "SELECT * FROM R_Request "
+ "WHERE Processed='N'"
+ " AND AD_Client_ID=?"
+ " AND (DateNextAction+" + m_model.getOverdueAlertDays() + ") > SysDate"
+ " AND (DateLastAlert IS NULL";
if (m_model.getRemindDays() > 0)
sql += " OR (DateLastAlert+" + m_model.getRemindDays()
+ ") > SysDate";
sql += ")";
if (m_model.getR_RequestType_ID() != 0)
sql += " AND R_RequestType_ID=?";
count = 0;
countEMails = 0;
try
{
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, m_model.getAD_Client_ID());
if (m_model.getR_RequestType_ID() != 0)
pstmt.setInt(2, m_model.getR_RequestType_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
MRequest request = new MRequest (getCtx(), rs, null);
request.setDueType();
if (request.getRequestType().isEMailWhenOverdue()
&& (request.getDateLastAlert() == null
|| !TimeUtil.isSameDay(request.getDateLastAlert(), null)))
{
if (sendEmail (request, "RequestAlert"))
{
request.setDateLastAlert();
countEMails++;
}
}
request.save();
count++;
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
m_summary.append("Alerts #").append(count);
if (countEMails > 0)
m_summary.append(" (").append(countEMails).append(" EMail)");
m_summary.append (" - ");
} // Overdue
/**
* Escalate
*/
if (m_model.getOverdueAssignDays() > 0)
{
sql = "SELECT * FROM R_Request "
+ "WHERE Processed='N'"
+ " AND AD_Client_ID=?"
+ " AND IsEscalated='N'"
+ " AND (DateNextAction+" + m_model.getOverdueAssignDays()
+ ") > SysDate";
if (m_model.getR_RequestType_ID() != 0)
sql += " AND R_RequestType_ID=?";
count = 0;
countEMails = 0;
try
{
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, m_model.getAD_Client_ID());
if (m_model.getR_RequestType_ID() != 0)
pstmt.setInt(2, m_model.getR_RequestType_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
MRequest request = new MRequest (getCtx(), rs, null);
if (escalate(request))
count++;
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
m_summary.append("Escalated #").append(count).append(" - ");
} // Esacalate
/**
* Send inactivity alerts
*/
if (m_model.getInactivityAlertDays() > 0)
{
sql = "SELECT * FROM R_Request "
+ "WHERE Processed='N'"
+ " AND AD_Client_ID=?"
+ " AND (Updated+" + m_model.getInactivityAlertDays() + ") > SysDate"
+ " AND (DateLastAlert IS NULL";
if (m_model.getRemindDays() > 0)
sql += " OR (DateLastAlert+" + m_model.getRemindDays()
+ ") < SysDate";
sql += ")";
if (m_model.getR_RequestType_ID() != 0)
sql += " AND R_RequestType_ID=?";
count = 0;
countEMails = 0;
try
{
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, m_model.getAD_Client_ID());
if (m_model.getR_RequestType_ID() != 0)
pstmt.setInt(2, m_model.getR_RequestType_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
MRequest request = new MRequest (getCtx(), rs, null);
request.setDueType();
if (request.getDateLastAlert() == null
|| !TimeUtil.isSameDay(request.getDateLastAlert(), null))
{
if (sendEmail (request, "RequestInactive"))
{
request.setDateLastAlert();
countEMails++;
}
request.save();
count++;
}
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
m_summary.append("Inactivity #").append(count);
if (countEMails > 0)
m_summary.append(" (").append(countEMails).append(" EMail)");
m_summary.append (" - ");
} // Inactivity
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -