📄 renshichukaoqinstatistic.java
字号:
}
String result = "";
if(tian==0){//认为t为0
if(tempXs.equals("0")){
result = "";
}else{
result = tempXs +"小时";
}
}else if(xiaoshi<0.000001){
result = tian +"天";
}else{
result = tian+"天"+tempXs+"小时";
}
return result;
}
/**
* 统计指定用户的每个月的考勤记录,同时根据病假、看病的情况对程序进行考勤统计进行修正,根据其他的考勤状态进行二次修正。 返回结果是14中考勤状态的统计结果,结果的形式是几天几小时。
*
* @param startDate
* 统计的开始日期
* @param endDate
* 统计的结束日期
* @param xm
* 统计用户的名称,即表Up_userinfo 中的userinfo_alias字段的值。
* @return 一个包含考勤状态和考勤时间的字符串数组对象,string[0] 中是考勤状态,String[1] 中包含的是考勤时间。
*/
public List personalStatistic(String startDate, String endDate, String xm) {
if(startDate ==null || startDate.equals("")){
throw new NullPointerException("开始日期不能为null空对象或者空字符串!");
}
if(endDate ==null || endDate.equals("")){
throw new NullPointerException("结束日期不能为null空对象或者空字符串!");
}
if(xm ==null || xm.equals("")){
throw new NullPointerException("用户名不能为null空对象或者空字符串!");
}
String sql = "";
sql =sql+"SELECT tempcode.cd_name as kqzt, tb.kqsj as kqsj ";
sql =sql+"FROM (SELECT aa.cd_name ";
sql =sql+" FROM code_detail aa ";
sql =sql+" WHERE aa.related_cc_id = 16) tempcode LEFT OUTER JOIN ";
sql =sql+" (SELECT zt, SUM(kqsj) AS kqsj ";
sql =sql+" FROM (SELECT swkqzt AS zt, SUM(swkqsj) AS kqsj ";
sql =sql+" FROM zx_kq ";
sql =sql+" WHERE (xm = '"+xm+"') AND (kqrq >= '"+startDate+"') AND ";
sql =sql+" (kqrq <= '"+endDate+"') ";
sql =sql+" GROUP BY swkqzt ";
sql =sql+" UNION all ";
sql =sql+" SELECT xwkqzt AS zt, SUM(xwkqsj) AS kqsj ";
sql =sql+" FROM zx_kq ";
sql =sql+" WHERE (xm = '"+xm+"') AND (kqrq >= '"+startDate+"') AND ";
sql =sql+" (kqrq <= '"+endDate+"') ";
sql =sql+" GROUP BY xwkqzt) ta ";
sql =sql+" GROUP BY zt) tb ON tempcode.cd_name = tb.zt ";
List l = null; //用来记录初次统计的考勤结果,此时的结果还未进行修正。
l = DbUtil.executeQueryStringList(sql); //返回的结果包含14条记录,考勤状态按照考勤表中的默认排列 考勤状态、考勤时间
if(l == null){
return null; //如果结果为null的话,下面的就不需要做了。
}
String bingjiaSql = "";
bingjiaSql = "select swkqsj,xwkqsj from zx_kq where (xm = '"+xm+"') AND (kqrq >= '"+startDate+"') " +
"AND (kqrq <= '"+endDate+"') and (swkqzt='病假、看病' or xwkqzt='病假、看病')";
List bingjaiList = null;
bingjaiList = DbUtil.executeQueryStringList(bingjiaSql);
//对查询结果进行修正。
int bjcs = 0; //用来保存病假小于2小时的次数, 然后从总的中减去即可。 如果有一次病假小于2小时,那么出勤的时间就增加4小时。
float bjsj = 0.0f; //用来保存病假小于2小时的时间。
int BJLEN = 0;
//如果查出来的病假信息不为空才进行修正,如果为空就需要修正。
float bjybkqsj =0.0f; //>2&&<4的应补出勤时间
if(bingjaiList!= null){
BJLEN = bingjaiList.size();
String bj[] = null;
for(int i=0;i<BJLEN; i++){
bj = (String[])bingjaiList.get(i);
if(Float.parseFloat(bj[0])<2.0){
bjcs ++;
bjsj = bjsj +Float.parseFloat(bj[0]);
}else{
bjybkqsj = bjybkqsj + (4-Float.parseFloat(bj[0])); //如果病假时间>2&&<4那么需要增加相应的考勤时间;
}
if(Float.parseFloat(bj[1])<2.0){
bjcs ++;
bjsj = bjsj +Float.parseFloat(bj[1]);
}else{
bjybkqsj = bjybkqsj + (4-Float.parseFloat(bj[1])); //如果病假时间>2&&<4那么需要增加相应的考勤时间;
}
}
}
//System.out.println("病假小于2小时的次数为:"+bjcs+"||病假时间为:"+bjsj+"病假应补时间:"+bjybkqsj);
//统计病假次数和病假时间结束后,开始对开始的统计结果进行修正
int LEN = 0; //其实len应该为14,但是目前的程序需要对此进行统计;
LEN = l.size(); //
//System.out.println("查询出来的记录数目为:"+LEN);
//============================其他时间的修正=======开始======二次修正========================================================
//TODO 这里有bug,需要修正的还有其他的考勤状态,例如:“上课、考试” 3个小时,剩下的一个小时应该为出勤。
//所以要查出处了出勤和看病、病假之外的其他考勤状态的次数和他们时间的总和;
//统计次数的sql语句
String numSql =" SELECT SUM(qt) AS qtcs " +
" FROM (SELECT COUNT(*) AS qt "+
"FROM zx_kq "+
" WHERE (xm = '"+xm+"') AND (kqrq >= '"+startDate+"') AND (kqrq <= '"+endDate+"') AND "+
"swkqzt <> '病假、看病' AND swkqzt <> '出勤' AND swkqzt <> '' "+
" UNION ALL "+
" SELECT COUNT(*) AS qt "+
" FROM zx_kq "+
" WHERE (xm = '"+xm+"') AND (kqrq >= '"+startDate+"') AND (kqrq <= '"+endDate+"') AND "+
" xwkqzt <> '病假、看病' AND xwkqzt <> '出勤' AND xwkqzt <> '') ta ";
String qtsjSql = " SELECT SUM(kqsj) AS qtsj " +
" FROM (SELECT sum(swkqsj) AS kqsj "+
" FROM zx_kq "+
" WHERE (xm = '"+xm+"') AND (kqrq >= '"+startDate+"') AND (kqrq <= '"+endDate+"') AND "+
" swkqzt <> '病假、看病' AND swkqzt <> '出勤' AND swkqzt <> '' "+
" UNION all"+
" SELECT sum(xwkqsj) AS kqsj "+
" FROM zx_kq "+
" WHERE (xm = '"+xm+"') AND (kqrq >= '"+startDate+"') AND (kqrq <= '"+endDate+"') AND "+
" xwkqzt <> '病假、看病' AND xwkqzt <> '出勤' AND xwkqzt <> '') ta" ;
//4*qtcs -qtsj = 应补考勤时间;
//System.out.println(numSql);
//System.out.println(qtsjSql);
float qtybsj = 0f;//其他应补时间
qtybsj = 4*DbUtil.getCount(numSql)-DbUtil.getFloatCount(qtsjSql);
//System.out.println("其他应补时间为:"+qtybsj);
//============================其他时间的修正=======结束==============================================================
for(int i=0;i<LEN;i++){
String[] kqtj = (String[])l.get(i);
if(kqtj[0].equals("病假、看病")){
//System.out.println("病假、看病");
if(!"".equals(kqtj[1].trim()) && kqtj[1]!=null){
//System.out.println("kqtj[1]="+kqtj[1]);
kqtj[1] = (Float.parseFloat(kqtj[1])-bjsj) +"";
l.remove(i);
l.add(i,kqtj);
}
}
if(kqtj[0].equals("出勤")){
//System.out.println("出勤");
if(!"".equals(kqtj[1].trim()) && kqtj[1]!=null){
//System.out.println("kqtj[1]="+kqtj[1]);
kqtj[1] = (Float.parseFloat(kqtj[1])+bjcs*4+qtybsj+bjybkqsj) +"";//在这里修正考勤时间
l.remove(i);
l.add(i,kqtj);
}else{
kqtj[1] = (bjcs*4+qtybsj+bjybkqsj) +"";//如果没有出勤记录,需要进行二次修正。
l.remove(i);
l.add(i,kqtj);
}
}
//System.out.println("i="+i+"||"+kqtj[0]+kqtj[1]);
}
return l;
}
/**
* 返回当前登录用的所在的一级部门的汉语名称。例如'办公室'.
* @param request
* @return 返回当前登录用户所在的一级部门的汉语名称。
*/
public String getFirstLevelDept(HttpServletRequest request) {
// =============================获取所在处室===开始=======================================================
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
InitialContext init = null;
DataSource ds = null;
try {
init = new InitialContext();
ds = (DataSource) init.lookup("java:/eBuilder"); // 获取连接池对象
conn = ds.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
} catch (NamingException e) {
} catch (SQLException ex) {
}
UP UP = new UP();
UP_S ups = new UP_S();
String username = UP.getCookieValue(request, "username");
//String[] userdetail = ups.GetUserDetail(username);// 返回数组内容依次为用户ID:USERINFO_ID;用户姓名:USERINFO_NAME;
// 用户密码:USERINFO_PWD;用户邮件:USERINFO_EMAIL;用户手机:USERINFO_MOBILE;用户全名:USERINFO_ALIAS。
String deptname = request.getParameter("deptname");
if (deptname == null) {
deptname = ups.GetPrimDeptName(username);
// 通过菜单上的deptname参数,区别处室文件柜和局文件柜,
// 局文件柜deptname=中纤局,而处室文件柜菜单中没有deptname参数
// String deptid = ups.GetPrimDept(username);//所在部门ID
String deptsql = "select dept_id,dept_name,dept_parent from up_dept where dept_id='"
+ ups.GetPrimDept(username) + "'";
try {
// 查询当前用户所属处室,而不需要科室。处室作为文件柜分类依据
rs = stmt.executeQuery(deptsql);
rs.next(); // 如果是管理员那么就会抛出异常,因为管理员不属于任何一个部门,查询不到任何结果。
String dept_parent = rs.getString("dept_parent");// 当前部门的上一级部门
if (dept_parent.equals("1")) {
deptname = rs.getString("dept_name");
} else {
// 中纤局的组织机构只有处室和科室,没有更多级别,所以不需要多层嵌套
deptsql = "select dept_id,dept_name,dept_parent from up_dept where dept_id='"
+ dept_parent + "'";
rs.close();
rs = stmt.executeQuery(deptsql);
rs.next();
deptname = rs.getString("dept_name");
}
} catch (SQLException se) {
System.out.println(se);
} finally {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
}
try {
if (stmt != null)
stmt.close();
} catch (SQLException e) {
}
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
}
}
// out.println(deptname);
} else {
// deptname = new String(deptname.getBytes("iso-8859-1"),"gb2312");
String requestMethod = request.getMethod();
if("GET".equals(requestMethod)){
deptname= MyUtil.GB2312ToUnicode(deptname);
}
}
// =======================获取所在处室=====结束===========================================================
return deptname;
}
/**
* 中纤局总共两级部门,用来查询一级部门下面所有的用户。返回的是一个list对象,list中包含的是String【】对象,长度为4.
* 其中string[] [1] 即,数组中的第二个为用户的中文名称。
* 其中1)userinfo_id(用户的id),2)username (中文名称-用户名), 3)userinfo_name(用户的登录帐号),4)dept_name(直接所在部门的名称)
* @param deptname
* @return 要么返回null,要么返回一个List对象。
*
*/
public List searchDeptUser(String deptname) {
if(deptname == null || deptname.trim().equals("")){
throw new NullPointerException("查询一级部门用户的方法中,传入的参数为空字符串或者null空对象!");
}
String sql =
" SELECT c.USERINFO_ID, c.USERINFO_ALIAS AS username, c.USERINFO_NAME, "+
" a.DEPT_NAME "+
" FROM UP_DEPT a INNER JOIN "+
" UP_USERDEPT b ON a.DEPT_ID = b.DEPT_ID INNER JOIN "+
" UP_USERINFO c ON b.USERINFO_ID = c.USERINFO_ID "+
" WHERE (a.dept_id IN "+
" (SELECT dept_id "+
" FROM UP_DEPT "+
" WHERE (DEPT_PARENT = "+
" (SELECT dept_id "+
" FROM up_dept "+
" WHERE dept_name = '"+deptname+"')))) "+
" UNION "+
" SELECT c.USERINFO_ID, c.USERINFO_ALIAS AS username, c.USERINFO_NAME, " +
" a.DEPT_NAME "+
" FROM UP_DEPT a INNER JOIN "+
" UP_LDDEPT b ON a.DEPT_ID = b.DEPT_ID INNER JOIN "+
" UP_USERINFO c ON b.USERINFO_ID = c.USERINFO_ID "+
" WHERE (a.DEPT_NAME = '"+deptname+"') ";
List l = null;
l = DbUtil.executeQueryStringList(sql);
return l;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -