📄 renshichukaoqinstatistic.java
字号:
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 + -