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

📄 agrcpbstat.java.svn-base

📁 一个包含排班信息的模块 2.1. 最新排班 6 2.2. 所有排班 6 2.3. 日常排班统计 7 2.4. 排班管理 7 2.5. 班次配置 7 2.6. 部门人员配置 7
💻 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\">开始日期:&nbsp;&nbsp;")
				.append(sBeginTime).append("&nbsp;").append(
						"——&nbsp;结束日期:&nbsp;&nbsp;");
		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("&nbsp;</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\">开始日期:&nbsp;&nbsp;")
				.append(sBeginTime).append("&nbsp;").append(
						"——&nbsp;结束日期:&nbsp;&nbsp;");
		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()\">&nbsp;[打印]</a>");
		sbResult
				.append("<a onclick=\"document.all.WebBrowser.ExecWB(6,1); return false;\" target=\"_self\" href=\"\" class=\"NOPRINT\">&nbsp;[打印]</a>");
		sbResult
				.append("<a onclick=\"document.all.WebBrowser.ExecWB(7,1); return false;\" target=\"_self\" href=\"\" class=\"NOPRINT\">&nbsp;[打印预览]</a>");
		sbResult
				.append("<a onclick=\"document.all.WebBrowser.ExecWB(8,1); return false;\" target=\"_self\" href=\"\" class=\"NOPRINT\">&nbsp;[页面设置]</a>");

		sbResult.append("</div>");
	}

}

⌨️ 快捷键说明

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