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

📄 aggetdeptusers.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.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Vector;

import com.fzet.cois.common.scriptLib.Common;
import com.fzet.cois.common.scriptLib.ErrHandle;

import lotus.domino.AgentBase;
import lotus.domino.AgentContext;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.DocumentCollection;
import lotus.domino.NotesError;
import lotus.domino.NotesException;
import lotus.domino.Session;
import lotus.domino.View;
import lotus.domino.ViewEntry;
import lotus.domino.ViewEntryCollection;

import java.util.StringTokenizer;

/**
 * @author yeshq 取用户排班数据的运行逻辑: 1、 新文档? |-------------------------Y--------------------------| |N | 取所有的个人数据byUnid 判断sType | |---------- |循环取出所有的人员排班数据 |0(从本库取) |从配置中心取 | |
 *         |----------------------------------------------------- 返回XML
 * 
 * 
 * 返回值: 
 * Case 1: <Return>0</Return> 
 *             <Error>
 *                错误消息
 *             </Error>
 * 
 * Case 2: <Return>1</Return>
 *            <Content> 
 *             <rows> 
 *              数据体,包括所有返回的数据 
 *              <row>
 *               <cell>姓名</cell>
 *               <cell>组名</cell>
 *               <cell>周1数据</cell> 
 *               <cell>周2数据</cell> 
 *               <cell>周3数据</cell> 
 *               <cell>周4数据</cell> 
 *               <cell>周5数据</cell>
 *               <cell>周6数据</cell> 
 *               <cell>周7数据</cell> 
 *               <cell>周计数据</cell> 
 *               <cell>累计数据</cell> 
 *              </Document>
 *               …… * 
 *           </Data> 
 *          </Content>
 */
// modify by yeshq,2008-1-8凌晨,把xml格式改为dhtmlxGrid识别的格式
public class AgGetDeptUsers extends AgentBase {

    public void NotesMain() {
	ErrHandle err = null; // 错误日志
	Session session = null; // 当前会话
	AgentContext ac = null; // 当前上下文环境
	Database dbMain = null;
	Database db = null; // 当前数据库
	View vwCalendar = null; // 日程安排查询视图
	ViewEntryCollection vecReturn = null; // 日程安排返回查询结果记录集实体
	ViewEntry veReturn = null; // 查询结果集中一条实体
	ViewEntry veTemp = null;
	Document doc = null, docPerson = null; // 当前文档
	PrintWriter pw = null; // 输出流
	String sQuery = null; // 查询参数
	String sDeptName = null, sUNID = null; // 查询条件------当前用户名称
	String sGroup = null; // 用户所有在组
	float iZj;
	float iLj;
	StringBuffer sbResult = new StringBuffer(); // 输出结果字符串缓冲:查询结果
	Document docTemp = null; // 条目字符串变量

	DocumentCollection dc = null;

	try {
	    // 初始化过程
	    session = getSession();
	    ac = session.getAgentContext();
	    doc = ac.getDocumentContext();
	    db = ac.getCurrentDatabase();
	    pw = getAgentOutput();
	    dbMain = Common.getMainDb(session);
	    // 初始化错误日志类
	    err = new ErrHandle(session, 0, "", "agGetDeptUsers.xml");

	    // 取得查询参数
	    sQuery = doc.getItemValueString("Query_String_Decoded");
	    // 取UNID
	    sUNID = Common.parseParameter(sQuery, "UNID");
	    // 提取当部门户名称
	    sDeptName = Common.parseParameter(sQuery, "DeptName");
	    if (sDeptName == null)
		throw new NotesException(NotesError.NOTES_ERR_OBJECT_NOT_FOUND, "未找到参数DeptName");
	    String sStartday = Common.parseParameter(sQuery, "start_day");
	    // 最近周次的开始日期
	    String sLstartday = Common.parseParameter(sQuery, "Lstartday");

	    // 提取视图名称
	    String sViewName = Common.parseParameter(sQuery, "ViewName");
	    // 取值的类型 0:从本库中取 1:从配置中心取 2.从上次排班记录取
	    String sType = Common.parseParameter(sQuery, "Type");
	    // 是否新文档
	    String sIsNewDoc = Common.parseParameter(sQuery, "NewDoc");

	    if (sIsNewDoc.equals("0")) {
		Document oriDoc = db.getDocumentByUNID(sUNID);
		if (oriDoc != null) { // 说明是已保存过的文档
		    View vwPersonPaib = db.getView("vwPaibIndx");
		    if (vwPersonPaib == null) {
			Common.returnXML(pw, "<root><Return>0</Return><Error>vwPaibIndx!</Error></root>");
			return;
		    }
		    vwPersonPaib = db.getView("vwPersonPaib");
		    if (vwPersonPaib == null) {
			Common.returnXML(pw, "<root><Return>0</Return><Error>未找到视图vwPersonPaib!</Error></root>");
			return;
		    }
		    // 开始计算返回值
		    sbResult.append("<root><Return>1</Return><Content>");
		    sbResult.append("<rows>");
		    vecReturn = vwPersonPaib.getAllEntriesByKey(sStartday + sDeptName, true);
		    veReturn = vecReturn.getFirstEntry();
		    int i = 0;
		    while (veReturn != null) {
			// 2、数据体
			// 开始

			docPerson = veReturn.getDocument();
			//sbResult.append("<row id=\"").append(docPerson.getItemValueString("Sequence")).append("\">");
			sbResult.append("<row id=\"").append(i).append("\">");
			i++;
			//sbResult.append("<row>");
			// 周1到周7数据及周计,累计
			sbResult.append("<cell>").append(docPerson.getItemValueString("name")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("group")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("day1")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("day2")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("day3")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("day4")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("day5")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("day6")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("day7")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("Zj")).append("</cell>");
			sbResult.append("<cell>").append(docPerson.getItemValueString("Lj")).append("</cell>");
			// 结束
			sbResult.append("</row>");
			docPerson.recycle();

			veTemp = veReturn;
			veReturn = vecReturn.getNextEntry(veReturn);
			veTemp.recycle();
		    }
		    sbResult.append("</rows></Content></root>");
		    // System.out.println(sbResult);

		    // 返回结果
		    Common.returnXML(pw, sbResult.toString());
		    return;
		}
	    }
	    // 如果是新文档,判断是从本库中取还是从配置中心取
	    String sName[] = new String[1]; // 姓名------------返回值
	    Document doc1 = null;

	    if (sType.equals("0")) {
		// 从本库中取
		View vwUsers = db.getView(sViewName);
		doc1 = vwUsers.getDocumentByKey(sDeptName);
		String sTemp = null;
		int len = 0;
		if (doc1 != null) {
		    sTemp = doc1.getItemValue("DeptUsers").toString();
		    len = sTemp.length();
		    sTemp = sTemp.substring(1, len - 1);
		    len = sTemp.split(",").length;
		    sName = new String[len];
		}

		for (int i = 0; i < len; i++)
		    sName[i] = sTemp.split(",")[i].trim();
		/*
                 * del by yeshq sName[len] = ""; sName[len + 1] = "";
                 */
	    }
	    if (sType.equals("1")) {
		//View vwUsers = dbMain.getView("vwUserByDeptName");
		View vwUsers = dbMain.getView("vwUserByDept");
		doc1 = vwUsers.getDocumentByKey(sDeptName);

		dc = vwUsers.getAllDocumentsByKey(sDeptName, true);
		sName = new String[dc.getCount()]; // 重新定义sName数组的长度
		doc1 = dc.getFirstDocument();
		int i = 0;
		while (doc1 != null) {
		    sName[i] = doc1.getItemValueString("LastName").trim();
		    i++;
		    docTemp = doc1;
		    doc1 = dc.getNextDocument(doc1);
		    docTemp.recycle();
		}
		/*
                 * del by yeshq,2008/2/22 // 加两行空白,为新加人员预留 sName[dc.getCount()] = ""; sName[dc.getCount() + 1] = "";
                 */
	    }
	    if (sType.equals("2")) {
		// 从最近的排班数据中取人员
		View vwUsers = db.getView("vwPersonPaib");
		dc = vwUsers.getAllDocumentsByKey(sLstartday + sDeptName, true);
		sName = new String[dc.getCount()]; // 重新定义sName数组的长度
		doc1 = dc.getFirstDocument();
		int i = 0;
		while (doc1 != null) {
		    sName[i] = doc1.getItemValueString("name").trim();
		    i++;
		    docTemp = doc1;
		    doc1 = dc.getNextDocument(doc1);
		    docTemp.recycle();
		}
	    }

	    // 输出结果
	    // 开始计算返回值
	    View vwUsers = db.getView("vwPersonPaibForStat");
	    // 计算上周开始日期

	    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
	    sStartday = df.format(new java.util.Date(df.parse(sStartday).getTime()));
	    String sLStartday = df.format(new java.util.Date(df.parse(sStartday).getTime() - 7 * 24 * 60 * 60 * 1000));
	    sbResult.append("<root><Return>1</Return><Content>");
	    sbResult.append("<rows>");
	    String sTemp = "";
	    View vwPersonPaibByName = db.getView("vwPersonPaibByName");
	    for (int j = 0; j < sName.length; j++) {

		/*
                 * sbResult.append("<cell>").append(sName[j]).append("</cell>"); for(int k=0;k<7;k++) sbResult.append("<cell></cell>"); //先返回周计 sbResult.append("<cell>0.0</cell>");
                 */
		if (sName[j].trim() != "") {
		    // yeshq思路:如果找到上周数据,把上周的周计+累计 -> 本周的累计
		    // 如果找不到上周数据,则通过vwPersonPaibByName视图找最近的周的周计+累计 -> 本周的累计
		    // else 累计为0
		    // 如果姓名中含有标识符,保存标识符前面的姓名 xinjf 2008-1-18
		   // if (sName[j].indexOf("(") != -1) {
			//sName[j] = sName[j].substring(0, sName[j].indexOf("("));
		   // }
		    System.out.println(sLStartday.trim()+sName[j].trim());
		    dc = vwUsers.getAllDocumentsByKey(sLStartday.trim() + sName[j].trim(), true);
		    System.out.println(dc.getCount());
		    doc1 = dc.getFirstDocument();
		    if (doc1 == null) {
			dc = vwPersonPaibByName.getAllDocumentsByKey(sName[j].trim(), true);
			doc1 = dc.getFirstDocument();
		    }

		    if (doc1 != null) {
			sGroup = doc1.getItemValueString("group");
			// xinjf 2008-1-11 把变量iZj,iLj设为浮点型.
			iZj = Float.parseFloat(doc1.getItemValueString("Zj").equals("") ? "0.0" : doc1
				.getItemValueString("Zj"));
			iLj = Float.parseFloat(doc1.getItemValueString("Lj").equals("") ? "0.0" : doc1
				.getItemValueString("Lj"));
		    } else {
			sGroup = "";
			iZj = Float.parseFloat("0.0");
			iLj = Float.parseFloat("0.0");
		    }

		    // 返回xml值,姓名(不包含括号)+组名+周一~周日+周计+累计
		    sbResult.append("<row id=\"" + j + "\">");
		    //sbResult.append("<row>");
		    sbResult.append("<cell>").append(sName[j]).append("</cell>");
		    sbResult.append("<cell>").append(sGroup).append("</cell>");
		    
		    //判断用户是否在另一部门已排过班,如果已经排过班,则调出数据		    
		    dc = vwUsers.getAllDocumentsByKey(sStartday.trim() + sName[j].trim(), true);
		    doc1 = dc.getFirstDocument();
		    if (doc1 != null) {			
			sbResult.append("<cell>").append(doc1.getItemValueString("day1")).append("</cell>");
			sbResult.append("<cell>").append(doc1.getItemValueString("day2")).append("</cell>");
			sbResult.append("<cell>").append(doc1.getItemValueString("day3")).append("</cell>");
			sbResult.append("<cell>").append(doc1.getItemValueString("day4")).append("</cell>");
			sbResult.append("<cell>").append(doc1.getItemValueString("day5")).append("</cell>");
			sbResult.append("<cell>").append(doc1.getItemValueString("day6")).append("</cell>");
			sbResult.append("<cell>").append(doc1.getItemValueString("day7")).append("</cell>");
			 // 返回周计
			sbResult.append("<cell>").append(doc1.getItemValueString("Zj")).append("</cell>");
			sbResult.append("<cell>").append(doc1.getItemValueString("Lj")).append("</cell>");
	            }else{
	        	for (int k = 0; k < 7; k++)
	        	    sbResult.append("<cell></cell>");
                        // 返回周计
			sbResult.append("<cell>0.0</cell>");
                            // 返回累计
			sbResult.append("<cell>").append(sTemp.valueOf(iZj + iLj)).append("</cell>");
	            }
		    
		    // 返回累计
		    //sbResult.append("<cell>").append(sTemp.valueOf(iZj + iLj)).append("</cell>");
		    sbResult.append("</row>");

		}

	    }

	    sbResult.append("</rows></Content></root>");
	    Common.returnXML(pw, sbResult.toString());
	} catch (NotesException e) {
	    StringBuffer sbReturn = new StringBuffer().append("<root><Return>0</Return><Error>").append(e.text).append(
		    "</Error></root>");
	    Common.returnXML(pw, sbReturn.toString());
	    err.record(true, e.id, e.text);
	    e.printStackTrace();
	} catch (Exception e) {
	    StringBuffer sbReturn = new StringBuffer().append("<root><Return>0</Return><Error>").append(e.toString())
		    .append("</Error></root>");
	    Common.returnXML(pw, sbReturn.toString());
	    err.record(true, 0, e.toString());
	    e.printStackTrace();
	} finally {
	    // 释放所有申请的资源
	    try {
		if (doc != null)
		    doc.recycle();
		if (veReturn != null)
		    veReturn.recycle();
		if (vecReturn != null)
		    vecReturn.recycle();
		if (vwCalendar != null)
		    vwCalendar.recycle();
		if (db != null)
		    db.recycle();
		if (ac != null)
		    ac.recycle();
		if (session != null)
		    session.recycle();
	    } catch (NotesException e) {
		System.out.println(e.text);
		e.printStackTrace();
	    }
	}
    }

    public String[] split(String source, String sign) {
	StringTokenizer commaToker = new StringTokenizer(source, sign);
	String[] result = new String[commaToker.countTokens()];
	for (int i = 0; commaToker.hasMoreTokens(); i++)
	    result[i] = commaToker.nextToken();
	return result;
    }
}

⌨️ 快捷键说明

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