📄 requestprocessor.java
字号:
//
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
} // processRequests
/**
* Send Alert EMail
* @param request request
* @param AD_Message message
*/
private boolean sendEmail (MRequest request, String AD_Message)
{
// Alert: Request {0} overdue
String subject = Msg.getMsg(m_client.getAD_Language(), AD_Message,
new String[] {request.getDocumentNo()});
return m_client.sendEMail(request.getSalesRep_ID(),
subject, request.getSummary(), request.createPDF());
} // sendAlert
/**
* Escalate
* @param request request
* @return true if saved
*/
private boolean escalate (MRequest request)
{
// Get Supervisor
MUser supervisor = request.getSalesRep(); // self
int supervisor_ID = request.getSalesRep().getSupervisor_ID();
if (supervisor_ID == 0 && m_model.getSupervisor_ID() != 0)
supervisor_ID = m_model.getSupervisor_ID();
if (supervisor_ID != 0 && supervisor_ID != request.getAD_User_ID())
supervisor = MUser.get(getCtx(), supervisor_ID);
// Escalated: Request {0} to {1}
String subject = Msg.getMsg(m_client.getAD_Language(), "RequestEscalate",
new String[] {request.getDocumentNo(), supervisor.getName()});
String to = request.getSalesRep().getEMail();
if (to == null || to.length() == 0)
log.warning("SalesRep has no EMail - " + request.getSalesRep());
else
m_client.sendEMail(request.getSalesRep_ID(),
subject, request.getSummary(), request.createPDF());
// Not the same - send mail to supervisor
if (request.getSalesRep_ID() != supervisor.getAD_User_ID())
{
to = supervisor.getEMail();
if (to == null || to.length() == 0)
log.warning("Supervisor has no EMail - " + supervisor);
else
m_client.sendEMail(supervisor.getAD_User_ID(),
subject, request.getSummary(), request.createPDF());
}
// ----------------
request.setDueType();
request.setIsEscalated(true);
request.setResult(subject);
return request.save();
} // escalate
/**************************************************************************
* Process Request Status
*/
private void processStatus()
{
int count = 0;
// Requests with status with after timeout
String sql = "SELECT * FROM R_Request r WHERE EXISTS ("
+ "SELECT * FROM R_Status s "
+ "WHERE r.R_Status_ID=s.R_Status_ID"
+ " AND s.TimeoutDays > 0 AND s.Next_Status_ID > 0"
+ " AND r.Updated+s.TimeoutDays < SysDate"
+ ") "
+ "ORDER BY R_Status_ID";
PreparedStatement pstmt = null;
MStatus status = null;
MStatus next = null;
try
{
pstmt = DB.prepareStatement (sql, null);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
MRequest r = new MRequest(getCtx(), rs, null);
// Get/Check Status
if (status == null || status.getR_Status_ID() != r.getR_Status_ID())
status = MStatus.get(getCtx(), r.getR_Status_ID());
if (status.getTimeoutDays() <= 0
|| status.getNext_Status_ID() == 0)
continue;
// Next Status
if (next == null || next.getR_Status_ID() != status.getNext_Status_ID())
next = MStatus.get(getCtx(), status.getNext_Status_ID());
//
String result = Msg.getMsg(getCtx(), "RequestStatusTimeout")
+ ": " + status.getName() + " -> " + next.getName();
r.setResult(result);
r.setR_Status_ID(status.getNext_Status_ID());
if (r.save())
count++;
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log (Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
m_summary.append("Status Timeout #").append(count)
.append(" - ");
} // processStatus
/**
* Create ECR
*/
private void processECR()
{
// Get Requests with Request Type-AutoChangeRequest and Group with info
String sql = "SELECT * FROM R_Request r "
+ "WHERE M_ChangeRequest_ID IS NULL"
+ " AND EXISTS ("
+ "SELECT * FROM R_RequestType rt "
+ "WHERE rt.R_RequestType_ID=r.R_RequestType_ID"
+ " AND rt.IsAutoChangeRequest='Y')"
+ "AND EXISTS ("
+ "SELECT * FROM R_Group g "
+ "WHERE g.R_Group_ID=r.R_Group_ID"
+ " AND (g.M_BOM_ID IS NOT NULL OR g.M_ChangeNotice_ID IS NOT NULL) )";
//
int count = 0;
int failure = 0;
//
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
MRequest r = new MRequest (getCtx(), rs, null);
MGroup rg = MGroup.get(getCtx(), r.getR_Group_ID());
MChangeRequest ecr = new MChangeRequest (r, rg);
if (r.save())
{
r.setM_ChangeRequest_ID(ecr.getM_ChangeRequest_ID());
if (r.save())
count++;
else
failure++;
}
else
failure++;
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log (Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
m_summary.append("Auto Change Request #").append(count);
if (failure > 0)
m_summary.append("(fail=").append(failure).append(")");
m_summary.append(" - ");
} // processECR
/**************************************************************************
* Create Reauest / Updates from EMail
*/
private void processEMail ()
{
// m_summary.append("Mail #").append(count)
// .append(" - ");
} // processEMail
/**************************************************************************
* Allocate Sales Rep
*/
private void findSalesRep ()
{
int changed = 0;
int notFound = 0;
Properties ctx = new Properties();
//
String sql = "SELECT * FROM R_Request "
+ "WHERE AD_Client_ID=?"
+ " AND SalesRep_ID=0 AND Processed='N'";
if (m_model.getR_RequestType_ID() != 0)
sql += " AND R_RequestType_ID=?";
PreparedStatement pstmt = null;
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 (ctx, rs, null);
if (request.getSalesRep_ID() != 0)
continue;
int SalesRep_ID = findSalesRep(request);
if (SalesRep_ID != 0)
{
request.setSalesRep_ID(SalesRep_ID);
request.save();
changed++;
}
else
notFound++;
}
rs.close();
pstmt.close();
pstmt = null;
}
catch (SQLException ex)
{
log.log(Level.SEVERE, sql, ex);
}
try
{
if (pstmt != null)
pstmt.close();
}
catch (SQLException ex1)
{
}
pstmt = null;
//
if (changed == 0 && notFound == 0)
m_summary.append("No unallocated Requests");
else
m_summary.append("Allocated SalesRep=").append(changed);
if (notFound > 0)
m_summary.append(",Not=").append(notFound);
m_summary.append(" - ");
} // findSalesRep
/**
* Find SalesRep/User based on Request Type and Question.
* @param request request
* @return SalesRep_ID user
*/
private int findSalesRep (MRequest request)
{
String QText = request.getSummary();
if (QText == null)
QText = "";
else
QText = QText.toUpperCase();
//
MRequestProcessorRoute[] routes = m_model.getRoutes(false);
for (int i = 0; i < routes.length; i++)
{
MRequestProcessorRoute route = routes[i];
// Match first on Request Type
if (request.getR_RequestType_ID() == route.getR_RequestType_ID()
&& route.getR_RequestType_ID() != 0)
return route.getAD_User_ID();
// Match on element of keyword
String keyword = route.getKeyword();
if (keyword != null)
{
StringTokenizer st = new StringTokenizer(keyword.toUpperCase(), " ,;\t\n\r\f");
while (st.hasMoreElements())
{
if (QText.indexOf(st.nextToken()) != -1)
return route.getAD_User_ID();
}
}
} // for all routes
return m_model.getSupervisor_ID();
} // findSalesRep
/**
* Get Server Info
* @return info
*/
public String getServerInfo()
{
return "#" + p_runCount + " - Last=" + m_summary.toString();
} // getServerInfo
} // RequestProcessor
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -