📄 aggetdeptusers.java.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 + -