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

📄 renshichukaoqinstatistic.java

📁 一个真实项目的源代码。有一个比较优秀的时间类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.zx.kaoqin;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.sql.DataSource;

import thtf.ebuilder.UP.MyUtil;
import thtf.ebuilder.UP.UP;
import thtf.ebuilder.webservice.UP_S;

import com.work.db.DbUtil;
import com.work.util.DateUtil;

/**
 * 人事处考勤一览表。
 * 
 * @author wangmj
 * 
 */

/*
 * //=====================程序中实际使用的======================================================================
 * SELECT tempcode.cd_name, tb.kqsj <br>
 *FROM (SELECT aa.cd_name <br>
 *        FROM code_detail aa <br>
 *        WHERE aa.related_cc_id = 16) tempcode LEFT OUTER JOIN <br>
 *          (SELECT zt, SUM(kqsj) AS kqsj <br>
 *         FROM (SELECT swkqzt AS zt, SUM(swkqsj) AS kqsj <br>
 *                 FROM zx_kq <br>
 *                 WHERE (xm = '舒广顺') AND (kqrq >= '2007/07/01') AND  <br>
 *                       (kqrq <= '2007/07/31') <br>
 *                 GROUP BY swkqzt <br>
 *                 UNION <br>
 *                 SELECT xwkqzt AS zt, SUM(xwkqsj) AS kqsj <br>
 *                 FROM zx_kq <br>
 *                 WHERE (xm = '舒广顺') AND (kqrq >= '2007/07/01') AND  <br>
 *                       (kqrq <= '2007/07/31') <br>
 *                 GROUP BY xwkqzt) ta <br>
 *         GROUP BY zt) tb ON tempcode.cd_name = tb.zt <br>
 * 
 * //首先将code_detail 中的字典数据查询出来建立一个虚表,然后和从zx_kq中(通过 union将上下午的考勤记录合并) 查询出来的考勤记录进行
 * 虚表链接,这样就可以将一个用户的考勤记录汇总出来。
 * 
 * //对于病假的统计 select swkqsj,xwkqsj from zx_kq where (xm = '舒广顺') AND (kqrq >=
 * '2007/07/01') AND (kqrq <= '2007/07/31') and swkqzt='病假、看病' or
 * xwkqzt='病假、看病';
 * 
 * 
 * //用来查找某个处室下面所有的员工的。 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 = '办公室')))) 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 =
 * '办公室')
 * //=======================================================================================================
 */
public class RenShiChuKaoQinStatistic {
	
	/**
	 * 根据年份和月份来查询考勤月度的开始日期和结束日期
	 * @param nd  yyyy 年度
	 * @param yd  MM 月度
	 * @return  日期字符串数组,日期的格式为yyyy/MM/dd
	 */
	public String[] getKqyd(String nd ,String yd){
		if(nd==null || nd.trim().equals("")){
			nd = DateUtil.getCurrentYear();
		}
		if(yd==null || yd.trim().equals("")){
			yd = DateUtil.getCurrentMonth();
		}
		
		List l = DbUtil.executeQueryStringList(" select kqksrq,kqjsrq from zx_kqyddy where nd="+nd+" and yd="+yd+"");
		if(l!=null){			
			String[] result = new String[2];	
			result[0] = ((String[])l.get(0))[0];
			result[1] = ((String[])l.get(0))[1];
			System.out.println(result[0]+result[1]);	
			return result;
		}
		return null;
	}
	public static void main(String[] args){
		{
			RenShiChuKaoQinStatistic tt = new RenShiChuKaoQinStatistic();
			tt.getKqyd("2007","07");
		}
		
		{
			System.out.println(changeToTian("9.5"));
			System.out.println(changeToTian("37.5"));
			System.out.println(changeToTian("0.5"));
			System.out.println(changeToTian("16.0"));
			System.out.println(changeToTian("12.0"));
			System.out.println(changeToTian("0.0"));
		}
		
		boolean flag = true;
		if(flag)
		try{
			long start = System.currentTimeMillis();
		RenShiChuKaoQinStatistic rs = new RenShiChuKaoQinStatistic();		
		List l = rs.renShiChuKaoQinStatistic("2007/07/03","2007/07/04","舒广顺");
		//List l = rs.renShiChuKaoQinStatisticByChuShi("2007/07/01","2007/07/31","办公室");
		System.out.println("共花费"+(System.currentTimeMillis()-start)+"毫秒!");
		if(l==null){
		System.out.println("查询结果为空,或者出错了。");
	}else{
		System.out.println("开始打印结果了");
		for(int i=0;i<l.size();i++){
			String[] kq = (String[]) l.get(i);
			for(int j=0;j<kq.length;j++)
			System.out.print(kq[j]+"\t");
			System.out.println();
		}
		
	}		
		}catch(Exception e){
			e.printStackTrace();
		}
		
//		RenShiChuKaoQinStatistic rs = new RenShiChuKaoQinStatistic();
//		List l = rs.personalStatistic("2007/07/01","2007/07/31","舒广顺");
//		if(l==null){
//			System.out.println("查询结果为空,或者出错了。");
//		}else{
//			for(int i=0;i<l.size();i++){
//				String[] kq = (String[]) l.get(i);
//				System.out.println(kq[0]+"\t"+kq[1]);
//			}
//		}
	}
	/**
	 * 用来获取考勤状态,这样整个考勤状态动态取出,然后从在页面中动态组合页面。
	 * @return 考勤状态的字符串数组
	 */
	public String[] getKqzt(){
		String sql = " select cd_name from code_detail where related_cc_id=16 and is_use=1 ";
		List l = DbUtil.executeQueryStringList(sql);
		int LEN = l.size();
		String[] result = new String[LEN];
		for(int i=0;i<LEN;i++){
			result[i] = ((String[])l.get(i))[0];
		}
		return result;
	}
	/**
	 * 返回结果,一个list中包含多个string[]对象,
	 * @param startDate
	 * @param endDate
	 * @param deptName 一级处室的中文名称。
	 * @return 根据处室来进行考勤状态统计。用来做扩充的。List 中包含多个string[3]对象, 用户名、考勤状态、考勤时间
	 */
	public List renShiChuKaoQinStatisticByChuShi(String startDate, String endDate,String deptName) {
		if(deptName==null || deptName.trim().equals("")){
			throw new NullPointerException("部门名称不能为空!");
		}else{
			List l = searchDeptUser(deptName);
			//TOTO 表示可以进一步加强。
			//如果要查找某个处室的,那么在这里实现程序的衔接。   searchDeptUser(deptname) 查找获取某个一级部门所有下面员工的方法。
			// getFirstLevelDept(HttpServletRequest request) 通过request对象来查找登录用户所在的一级部门,如果需要将其更改为按照登录帐号查找。
			if(l==null){
				System.out.println("查询出来的用户为空!");
			}
			int LEN = l.size();
			List resultList = new ArrayList();
			String tempKqsj = ""; 
			for(int i=0; i<LEN;i++){
				String username = ((String[])l.get(i))[1];
				System.out.println("用户名为:"+username+"||");
				List tempList = personalStatistic(startDate,endDate,username); 
				//循环统计出所有用户的考勤信息
				String[] tempKqStatistic = new String[tempList.size()+1];
				tempKqStatistic[0] = username;
				
				if(tempList!=null){
					for(int j=0;j<tempList.size();j++){
						//由于考勤状态是按照数据库表中的默认记录顺序排列的,所以不需要再此记录了,只保留最终的每种考勤状态的时间就可以了。
						tempKqsj =((String[])tempList.get(j))[1] ;
						//在这里对考勤时间进行转换,首先将字符串转换成为float,然后乘以10在取整。
						if(tempKqsj!=null && !tempKqsj.trim().equals("")){
							//进行考勤时间转换
							tempKqsj = changeToTian(tempKqsj);
						}
						tempKqStatistic[j+1]=tempKqsj;
					}			
				}
				resultList.add(tempKqStatistic);
			}
			
			return resultList;
		}
	}	
	/**
	 * 返回结果,一个list中包含多个string[]对象,
	 * @param startDate
	 * @param endDate
	 * @param user_name 如果参数为null空对象或者空字符串,那么就查询全体的,如果不为空字符串就查询个人的。
	 * @return List 中包含多个string[3]对象, 用户名、考勤状态、考勤时间
	 */
	public List renShiChuKaoQinStatistic(String startDate, String endDate,String user_name) {
		if(user_name==null || user_name.trim().equals("")){
			String userinfoSql  = " select userinfo_alias as username from up_userinfo where  USERINFO_NAME <> 'administrator'";
			List l = DbUtil.executeQueryStringList(userinfoSql);
			//TOTO 表示可以进一步加强。
			//如果要查找某个处室的,那么在这里实现程序的衔接。   searchDeptUser(deptname) 查找获取某个一级部门所有下面员工的方法。
			// getFirstLevelDept(HttpServletRequest request) 通过request对象来查找登录用户所在的一级部门,如果需要将其更改为按照登录帐号查找。
			if(l==null){
				System.out.println("查询出来的用户为空!");
			}
			int LEN = l.size();
			List resultList = new ArrayList();
			String tempKqsj = ""; 
			for(int i=0; i<LEN;i++){
				String username = ((String[])l.get(i))[0];
				List tempList = personalStatistic(startDate,endDate,username); 
				//循环统计出所有用户的考勤信息
				String[] tempKqStatistic = new String[tempList.size()+1];
				tempKqStatistic[0] = username;
				
				if(tempList!=null){
					for(int j=0;j<tempList.size();j++){
						//由于考勤状态是按照数据库表中的默认记录顺序排列的,所以不需要再此记录了,只保留最终的每种考勤状态的时间就可以了。
						tempKqsj =((String[])tempList.get(j))[1] ;
						//在这里对考勤时间进行转换,首先将字符串转换成为float,然后乘以10在取整。
						if(tempKqsj!=null && !tempKqsj.trim().equals("")){
							//进行考勤时间转换
							tempKqsj = changeToTian(tempKqsj);
						}
						tempKqStatistic[j+1]=tempKqsj;
					}			
				}
				resultList.add(tempKqStatistic);
			}
			
			return resultList;
		}else{
			List resultList = new ArrayList();
			List tempList = personalStatistic(startDate,endDate,user_name); 
			//循环统计出所有用户的考勤信息
			String[] tempKqStatistic = new String[tempList.size()+1];
			tempKqStatistic[0] = user_name;
			String tempKqsj = ""; 
			if(tempList!=null){
				for(int j=0;j<tempList.size();j++){
					//由于考勤状态是按照数据库表中的默认记录顺序排列的,所以不需要再此记录了,只保留最终的每种考勤状态的时间就可以了。
					tempKqsj =((String[])tempList.get(j))[1] ;
					//在这里对考勤时间进行转换,首先将字符串转换成为float,然后乘以10在取整。
					if(tempKqsj!=null && !tempKqsj.trim().equals("")){
						//进行考勤时间转换
						tempKqsj = changeToTian(tempKqsj);
					}
					tempKqStatistic[j+1]=tempKqsj;
				}			
			}
			resultList.add(tempKqStatistic);
			return resultList;
		}
	}
	
	/**
	 * 将一个字符串为浮点数的时间转换成天。结果为几天几小时。例如9.5就是1天1.5小时。
	 * @param tempKqsj
	 * @return String 结果为几天几小时。例如9.5就是1天1.5小时。
	 */
	public static String changeToTian(String tempKqsj){
		float t=0.0f;
		t = Float.parseFloat(tempKqsj);
		int tian = (int)(t/8);
		float xiaoshi = t%8;
		//System.out.println(tian+"天"+xiaoshi+"小时");
		String tempXs = "";
		if((xiaoshi+"").indexOf(".0")>0 ){
			tempXs = (xiaoshi+"").substring(0,(xiaoshi+"").indexOf(".0"));
		}else{
			tempXs = xiaoshi +"";

⌨️ 快捷键说明

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