📄 agrcpbstat.java.svn-base
字号:
//统计代理
package com.fzet.cois.dividework.agents;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import com.fzet.cois.common.scriptLib.*;
import lotus.domino.*;
public class Agrcpbstat extends AgentBase {
public void NotesMain() {
Session session = null;
AgentContext ac = null;
Document doc = null;
Database db = null;
DocumentCollection dc = null; // 记录结果集
Document docRecord = null; // 记录结果文档
Document docTemp = null; // 临时文档
ErrHandle err = null; // 错误处理
PrintWriter pw = null;
Document docSearch = null;
DocumentCollection dcSearch = null; // 记录结果集
View vwPersonPaib = null;
View vwAffair = null;
String sPubAffair = null;
try {
session = getSession();
ac = session.getAgentContext();
db = ac.getCurrentDatabase(); // 取得当前数据库
doc = ac.getDocumentContext(); // 取得当前文档
pw = getAgentOutput();
err = new ErrHandle(session, 0, "", "agrcpbTotal.xm1");
// 读取URL中的参数
String sQuery = doc.getItemValueString("Query_String_Decoded");
String sBeginTime = Common.parseParameter(sQuery, "BeginTime");
String sEndTime = Common.parseParameter(sQuery, "EndTime");
String sName = Common.parseParameter(sQuery, "name");
String sCond = getScond(sQuery); // 取得查询条件
// 生成XML头信息
Common.returnXML(pw, "<root><Return>1</Return><Content>");
if (db == null) {
Common
.returnXML(pw,
"<root><Return>0</Return><Error>无法打人员分工数据库。</Error></root>");
return;
}
dc = db.search(sCond, null, 0);
Document doc1 = null;
doc1 = dc.getLastDocument();
// 定义部门数组,开结始日期数据,并动态初始化数组的长度;
String aStartDay[] = new String[dc.getCount()];
String aDeptName[] = new String[dc.getCount()];
int i = 0;
while (doc1 != null) {
aStartDay[i] = doc1.getItemValue("start_day").firstElement()
.toString();
aDeptName[i] = doc1.getItemValueString("DeptName");
i++;
docTemp = doc1;
doc1 = dc.getPrevDocument(doc1);
docTemp.recycle();
}
// 去掉重复的日期值和部门值,得到不重复的数组值
String aUnique[] = null;
String aUniqueDept[] = null;
aUnique = setUnique(aStartDay);
aUniqueDept = setUnique(aDeptName);
vwAffair = db.getView("vwAffair");
// 取公共班次
docTemp = vwAffair.getDocumentByKey("公共班次");
if (docTemp != null)
sPubAffair = docTemp.getItemValueString("LoborName");
// 定义部门班次数组
StringBuffer sbResult = null;
sbResult = new StringBuffer();
String aPaib[][] = null;
String aAffairDept[] = null;
String aPaibNum[][][] = null;
String sAffair = null;
// 当sName不为空值时,aAffairDept数组的第一个值为该人员所在部门的所有班次
int aPaibPersonTotal = 0;// 定义个人排班总数变量
String sDeptName = null;
// 打印头部分
printButton(sbResult);
if (sName != null && (!sName.equals(""))) {
dcSearch = db.search(sCond, null, 0);
if (dcSearch.getCount() == 0) {
doc.replaceItemValue("Body1", "暂时没有" + sName + "的排班"); // 输出到页面表单中
return;
}
// 取部门班次
docSearch = dcSearch.getFirstDocument();
sDeptName = docSearch.getItemValueString("DeptName");
doc1 = vwAffair.getDocumentByKey(sDeptName);
sAffair = doc1.getItemValueString("LoborName");
// 公共班次加上部门班次为所有班次
sAffair = sAffair + ";" + sPubAffair;
aAffairDept = sAffair.split(";");
i = 0;
// 动态定义二维数组的长度
aPaib = new String[dcSearch.getCount()][7];
while (docSearch != null) {
for (int j = 1; j < 8; j++) {
aPaib[i][j - 1] = docSearch.getItemValueString("day"
+ j);
}
i++;
docTemp = docSearch;
docSearch = dcSearch.getNextDocument(docSearch);
docTemp.recycle();
}
// 统计班次
// 第一维是人员,第二维是班次,第三维是的0代表统计的个数,1代表对应班次
aPaibNum = new String[dcSearch.getCount()][7][2];
String aPaibNumPerson[][] = new String[aAffairDept.length][2];
aPaibPersonTotal = personstat(aPaib, aAffairDept,
aPaibPersonTotal, aPaibNumPerson);
// 最后对班次分配进行统计
printoutperson(sBeginTime, sEndTime, sName, aUniqueDept,
sbResult, aAffairDept, aPaibPersonTotal, aPaibNumPerson);
}// 与if对应
// 定义部门人员数组
String aPaib1[][][] = null;
String aDeptPersons[] = null;
vwPersonPaib = db.getView("vwPersonPaib");
if (sName.equals("") || sName == null) {
for (i = 0; i < aUniqueDept.length; i++) {
// 第一维是人员,第二维是排班数;第三维是周一到周日的班次
sCond = "Form=\"frmPersonPaib\"" + "&DeptName=\""
+ aUniqueDept[i] + "\"";
dcSearch = db.search(sCond, null, 0);
aDeptPersons = new String[dcSearch.getCount()];
docSearch = dcSearch.getFirstDocument();
int m = 0;
while (docSearch != null) {
aDeptPersons[m] = docSearch.getItemValueString("name");
m++;
docTemp = docSearch;
docSearch = dcSearch.getNextDocument(docSearch);
docTemp.recycle();
}
aDeptPersons = setUnique(aDeptPersons); // 部门人员数已固定
aPaib1 = new String[aDeptPersons.length][aUnique.length][7];
for (int j = 0; j < aUnique.length; j++) {
dcSearch = vwPersonPaib.getAllDocumentsByKey(aUnique[j]
+ aUniqueDept[i]);
// 求相应部门的所有班次
doc1 = vwAffair.getDocumentByKey(aUniqueDept[i]);
sAffair = doc1.getItemValueString("LoborName");
//公共班次不为空时,班次为部门班次加上公共班次xinjf 2008-1-11
if (sPubAffair != null && (!sPubAffair.equals("")))
sAffair = sAffair + ";" + sPubAffair;
aAffairDept = sAffair.split(";");
docSearch = dcSearch.getLastDocument();
m = 0;
while (docSearch != null) {
// 得到部门所有人员的所有排班。
// 当姓名不为空时,求所有人的排班及人员姓名xinjf 2008-1-11
if (!(docSearch.getItemValueString("name").equals(
"") || docSearch.getItemValueString("name") == null)) {
for (int k = 1; k < 8; k++) {
aPaib1[m][j][k - 1] = docSearch
.getItemValueString("day" + k);
}
aDeptPersons[m] = docSearch
.getItemValueString("name");
m++;
}
docTemp = docSearch;
docSearch = dcSearch.getPrevDocument(docSearch);
docTemp.recycle();
}
}
// 第一维是人员,第二维是班次,第三维是的0代表统计的个数,1代表对应班次
aPaibNum = new String[aDeptPersons.length][aAffairDept.length][2];
// 定义个人排班总数数组
int aPaibTotal[][] = new int[aDeptPersons.length][1];
// 统计班次
deptstat(aUnique, aAffairDept, aPaibNum, aPaib1,
aDeptPersons, aPaibTotal);
// 打印输出
printoutdept(sBeginTime, sEndTime, i, aUniqueDept,
sbResult, aAffairDept, aPaibNum, aDeptPersons,
aPaibTotal);
}// 与i对应
}// 与if对应
doc.replaceItemValue("Body1", sbResult.toString()); // 输出到页面表单中
} catch (Exception e) {
err.record(false, 0, e.toString());
e.printStackTrace();
Common.returnXML(pw, "<root><Return>0</Return><Error>错误:"
+ e.toString() + "</Error></root>");
} finally {
try {
if (docTemp != null)
docTemp.recycle();
if (docRecord != null)
docRecord.recycle();
if (dc != null)
dc.recycle();
if (db != null)
db.recycle();
if (doc != null)
doc.recycle();
if (ac != null)
ac.recycle();
if (session != null)
session.recycle();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void deptstat(String[] aUnique, String[] aAffairDept,
String[][][] aPaibNum, String[][][] aPaib1, String[] aDeptPersons,
int[][] aPaibTotal) {
int m;
for (int a = 0; a < aDeptPersons.length; a++) {
aPaibTotal[a][0] = 0;
for (int n = 0; n < aAffairDept.length; n++) {
aPaibNum[a][n][0] = "0";
for (m = 0; m < aUnique.length; m++) {
for (int k = 0; k < 7; k++) {
// 统计一个人各类排班的总数
if (aPaib1[a][m][k] == null)
aPaib1[a][m][k] = "";
if (aAffairDept[n].equals(aPaib1[a][m][k])
|| aPaib1[a][m][k].indexOf(aAffairDept[n]) != -1) {
aPaibNum[a][n][0] = String.valueOf(Integer
.parseInt(aPaibNum[a][n][0]) + 1);
aPaibNum[a][n][1] = aAffairDept[n];
// 统计一个人总的排班数
aPaibTotal[a][0] = aPaibTotal[a][0] + 1;
}
}
}
}
}
}
private int personstat(String[][] aPaib, String[] aAffairDept,
int aPaibPersonTotal, String[][] aPaibNumPerson) {
for (int n = 0; n < aAffairDept.length; n++) {
aPaibNumPerson[n][0] = "0";
for (int m = 0; m < aPaib.length; m++) {
for (int k = 0; k < 7; k++) {
if (aAffairDept[n].equals(aPaib[m][k])
|| aPaib[m][k].indexOf(aAffairDept[n]) != -1) {
aPaibNumPerson[n][0] = String.valueOf(Integer
.parseInt(aPaibNumPerson[n][0]) + 1);
aPaibNumPerson[n][1] = aAffairDept[n];
aPaibPersonTotal = aPaibPersonTotal + 1;
}
}
}
}
return aPaibPersonTotal;
}
private void printoutdept(String sBeginTime, String sEndTime, int i,
String[] aUniqueDept, StringBuffer sbResult, String[] aAffairDept,
String[][][] aPaibNum, String[] aDeptPersons, int[][] aPaibTotal) {
int m;
sbResult
.append("<table width='100%' border='1' cellspacing='0' cellpadding='0' class='WTableBorder' style='border-width-top:0px'>");
sbResult.append("<tr>").append("<td class=tdbgred>部门").append("</td>");
sbResult.append("<td class=tdbgred>").append(aUniqueDept[i]).append(
"</td>");
sbResult.append("<td class=tdbgred colspan=\"27\">开始日期: ")
.append(sBeginTime).append(" ").append(
"—— 结束日期: ");
sbResult.append(sEndTime).append("</td>").append("</tr>");
sbResult.append("<tr><td class=viewTitle>班次</td>");
for (m = 0; m < aDeptPersons.length; m++) {
sbResult.append("<td class=viewTitle>").append(aDeptPersons[m])
.append(" </td>");
}
sbResult.append("</tr>");
for (int n = 0; n < aAffairDept.length; n++) {
sbResult.append("<tr><td class=tdbgred>").append(aAffairDept[n])
.append("</td>");
for (m = 0; m < aPaibNum.length; m++) {
sbResult.append("<td class=tdbgred>").append(aPaibNum[m][n][0])
.append("</td>");
}
sbResult.append("</tr>");
}
sbResult.append("<tr>");
sbResult.append("<td class=tdbgred>总计</td>");
for (int k = 0; k < aPaibTotal.length; k++)
sbResult.append("<td class=tdbgred> <font color=\"red\">").append(aPaibTotal[k][0])
.append("</font></td>");
sbResult.append("</table><br>");
}
private void printoutperson(String sBeginTime, String sEndTime,
String sName, String[] aUniqueDept, StringBuffer sbResult,
String[] aAffairDept, int aPaibPersonTotal,
String[][] aPaibNumPerson) {
sbResult
.append("<table width='100%' border='1' cellspacing='0' cellpadding='0' class='WTableBorder' style='border-width-top:0px'>");
sbResult.append("<tr>").append("<td class=tdbgred>部门").append("</td>");
sbResult.append("<td class=tdbgred>").append(aUniqueDept[0]).append(
"</td>");
sbResult.append("<td class=tdbgred colspan=\"10\">开始日期: ")
.append(sBeginTime).append(" ").append(
"—— 结束日期: ");
sbResult.append(sEndTime).append("</td>").append("</tr>");
sbResult.append("<tr><td class=viewTitle>班次</td>");
for (int m = 0; m < aAffairDept.length; m++)
sbResult.append("<td class=viewTitle>").append(aAffairDept[m])
.append("</td>");
sbResult.append("</tr>");
sbResult.append("<tr><td class=tdbgred>").append(sName).append("</td>");
for (int m = 0; m < aAffairDept.length; m++) {
sbResult.append("<td class=tdbgred>").append(aPaibNumPerson[m][0])
.append("(次)</td>");
}
sbResult.append("</tr>");
sbResult.append("<tr>");
sbResult.append("<td class=tdbgred>").append("总计").append("</td>");
sbResult.append("<td class=tdbgred colspan=\"" + aAffairDept.length
+ "\">");
sbResult.append(aPaibPersonTotal).append("(次)</td>");
sbResult.append("</table>");
}
// 获取&sCond后面的参数值
public String getScond(String sQuery) {
int nPos = sQuery.indexOf("&Cond=");
String sCond;
if (nPos <= 0)
sCond = "";
else
sCond = sQuery.substring(nPos + 6, sQuery.length());
return sCond;
}
public String[] setUnique(String[] values) {
Map map = new HashMap();
if (values == null)
return null;
for (int i = 0; i < values.length; i++) {
if (map.get(values[i]) == null)
map.put(values[i], values[i]);
}
String[] rt = new String[map.keySet().size()];
return (String[]) map.keySet().toArray(rt);
}
private void printButton(StringBuffer sbResult) {
sbResult.append("<html>");
sbResult.append("<head>");
sbResult.append("<title>");
sbResult.append("统计结果");
sbResult.append("</title>");
sbResult.append("</head>");
sbResult.append("<body>");
sbResult.append("<SCRIPT LANGUAGE=\"JavaScript\">");
sbResult.append("</SCRIPT>");
sbResult.append("<STYLE type=text/css> ");
sbResult
.append(
"BODY { COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 14px } TD { COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 14px; font-height: 100% } ")
.append(
"A:link { COLOR: blue; CURSOR: hand; TEXT-DECORATION: none } A:visited { COLOR: black; CURSOR: hand; TEXT-DECORATION: none } A:active { COLOR: red; TEXT-DECORATION: none}")
.append("A:hover { COLOR: red; TEXT-DECORATION: none }");
sbResult.append("</STYLE>");
sbResult.append("<BODY bgcolor=\"#FFFFFF\">");
sbResult.append("<div class=\"TD\">");
sbResult
.append("<a href=\"javascript:window.close()\" class=\"NOPRINT\">");
sbResult.append("[关闭]</a>");
// sbResult.append("<a
// href=\"javascript:window.print()\"> [打印]</a>");
sbResult
.append("<a onclick=\"document.all.WebBrowser.ExecWB(6,1); return false;\" target=\"_self\" href=\"\" class=\"NOPRINT\"> [打印]</a>");
sbResult
.append("<a onclick=\"document.all.WebBrowser.ExecWB(7,1); return false;\" target=\"_self\" href=\"\" class=\"NOPRINT\"> [打印预览]</a>");
sbResult
.append("<a onclick=\"document.all.WebBrowser.ExecWB(8,1); return false;\" target=\"_self\" href=\"\" class=\"NOPRINT\"> [页面设置]</a>");
sbResult.append("</div>");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -