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

📄 renshichukaoqinstatistic.java

📁 一个真实项目的源代码。有一个比较优秀的时间类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		}
		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 + -