Commit 3e4b6e6b by ilal

提交

parent 3e2d4937
...@@ -843,6 +843,8 @@ public class LoginController { ...@@ -843,6 +843,8 @@ public class LoginController {
// 用户信息缓存 // 用户信息缓存
session.setAttribute("ui", qyzxEmpLogin1); session.setAttribute("ui", qyzxEmpLogin1);
System.err.println(session.getId());
return ResultUtil.data(qyzxEmpLogin1); return ResultUtil.data(qyzxEmpLogin1);
} }
......
...@@ -16,6 +16,8 @@ import java.util.List; ...@@ -16,6 +16,8 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
import org.apache.commons.lang3.ArrayUtils;
/** /**
* @author lal 2020-05-11 * @author lal 2020-05-11
* *
...@@ -24,6 +26,23 @@ public class ClockInTool { ...@@ -24,6 +26,23 @@ public class ClockInTool {
static SimpleDateFormat famt = new SimpleDateFormat("yyyy-MM-dd"); static SimpleDateFormat famt = new SimpleDateFormat("yyyy-MM-dd");
public static boolean useArrayUtils(String[] arr, String targetValue) {
return ArrayUtils.contains(arr,targetValue);
}
// 获得上个月月份年份
public static String getYearMonth() {
Calendar now = Calendar.getInstance();
int month = now.get(Calendar.MONTH);
String m;
if (month < 10) {
m = "0" + month;
} else {
m = month + "";
}
return now.get(Calendar.YEAR) + "-" + m;
}
/** /**
* 将传入的日期的年月得到一个值 * 将传入的日期的年月得到一个值
* @param date 日期 * @param date 日期
......
...@@ -35,6 +35,7 @@ import cn.timer.api.bean.yggl.YgglMainLzb; ...@@ -35,6 +35,7 @@ import cn.timer.api.bean.yggl.YgglMainLzb;
import cn.timer.api.controller.kqgl.ClockInController; import cn.timer.api.controller.kqgl.ClockInController;
import cn.timer.api.controller.kqgl.ClockInTool; import cn.timer.api.controller.kqgl.ClockInTool;
import cn.timer.api.controller.kqgl.EmptyUtil; import cn.timer.api.controller.kqgl.EmptyUtil;
import cn.timer.api.controller.kqgl.test1;
import cn.timer.api.dao.kqgl.AttendanceWeeklySchMapper; import cn.timer.api.dao.kqgl.AttendanceWeeklySchMapper;
import cn.timer.api.dao.kqgl.PunchCardDetailsMapper; import cn.timer.api.dao.kqgl.PunchCardDetailsMapper;
import cn.timer.api.dao.kqgl.PunchRecordMapper; import cn.timer.api.dao.kqgl.PunchRecordMapper;
...@@ -61,8 +62,6 @@ import cn.timer.api.utils.DateUtil; ...@@ -61,8 +62,6 @@ import cn.timer.api.utils.DateUtil;
@EnableScheduling // 2.开启定时任务 @EnableScheduling // 2.开启定时任务
public class AttendanceTaskTiming{ public class AttendanceTaskTiming{
// private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
static String tablename = null;
@Autowired @Autowired
private KqglMainKqzMapper kqglmainkqzmapper; private KqglMainKqzMapper kqglmainkqzmapper;
...@@ -80,23 +79,6 @@ public class AttendanceTaskTiming{ ...@@ -80,23 +79,6 @@ public class AttendanceTaskTiming{
private ScheduleMapper schedulemapper; private ScheduleMapper schedulemapper;
static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
static SimpleDateFormat sdf2 = new SimpleDateFormat("EEE"); static SimpleDateFormat sdf2 = new SimpleDateFormat("EEE");
/**
* 数据库动态更改定时配置(attendance_socks)
*/
// @Override
// public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// taskRegistrar.addTriggerTask(() -> {
// // 任务逻辑
// try {
// tablename = AttendanceTask();
// } catch (ParseException e) {
// e.printStackTrace();
// }
// }, triggerContext -> {
// CronTrigger cron = new CronTrigger(AttendanceUtil.getCron(tablename)); // cron配置
// return cron.nextExecutionTime(triggerContext); // 下次执行任务的时间
// });
// }
@Autowired @Autowired
private KqglAssoRelationSummaryMapper kqglassorelationsummarymapper; private KqglAssoRelationSummaryMapper kqglassorelationsummarymapper;
...@@ -108,37 +90,17 @@ public class AttendanceTaskTiming{ ...@@ -108,37 +90,17 @@ public class AttendanceTaskTiming{
@Autowired @Autowired
private ClockInController clockincontroller; private ClockInController clockincontroller;
/**
* @return
* @throws ParseException
*/
//3.添加定时任务 每四小时执行一次 //3.添加定时任务 每四小时执行一次
// @Scheduled(cron = "0 0 */4 * * ?") // @Scheduled(cron = "0 0 */4 * * ?")
//typeid:1-员工 2-考勤组 //typeid:1-员工 2-考勤组
// @Scheduled(cron = "0 */5 * * * ?") // @Scheduled(cron = "0 */5 * * * ?")
// @Scheduled(cron = "0 47 8 * * ?") // @Scheduled(cron = "0 50 18 * * ?")
@Scheduled(cron = "0 0 8,12,16,20 * * ?")//每天上午8、12点,下午16点,20点 执行 @Scheduled(cron = "0 0 8,12,16,20 * * ?")//每天上午8、12点,下午16点,20点 执行
public void AttendanceTask() throws ParseException { public void AttendanceTask() throws ParseException {
// boolean implement = false;
// int sockid = 0;
// KqglTaskTiming sock = KqglTaskTiming.builder().build().selectOne(new QueryWrapper<KqglTaskTiming>().lambda().eq(KqglTaskTiming::getTask, "AttendanceTask"));
// if(sock == null) {
// KqglTaskTiming sock1 = KqglTaskTiming.builder().task("AttendanceTask").executionStatus(1).lastExecutionTime(new Date().getTime()).build();
// sock1.insert();
// sockid = sock1.getId();
// implement = true;
// }else {
// sockid = sock.getId();
// if(sock.getExecutionStatus() == 0) {
// KqglTaskTiming.builder().task("AttendanceTask").id(sock.getId()).executionStatus(1).lastExecutionTime(new Date().getTime()).build().updateById();
// implement = true;
// }
// }
boolean implement = true; boolean implement = true;
//逻辑 //逻辑
if(implement) { if(implement) {
...@@ -152,24 +114,23 @@ public class AttendanceTaskTiming{ ...@@ -152,24 +114,23 @@ public class AttendanceTaskTiming{
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(sdf1.format(ca.getTime()),"yyyy-MM-dd")).getTime(); Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(sdf1.format(ca.getTime()),"yyyy-MM-dd")).getTime();
List<QyzxEntInfoM> orgcodelist = qyzxentinfommapper.selectList(new QueryWrapper<QyzxEntInfoM>());//系统中的所有公司 所有未到期的公司
String str = new SimpleDateFormat("yyyy-MM-dd").format(new Date()).toString();// String str = new SimpleDateFormat("yyyy-MM-dd").format(new Date()).toString();//
String ttstr = new SimpleDateFormat("yyyy-MM").format(new Date()).toString();// String ttstr = new SimpleDateFormat("yyyy-MM").format(new Date()).toString();//
// String yesterday = ClockInTool.requires_extra_times(str,-1,3,1);//前一天 // String yesterday = ClockInTool.requires_extra_times(str,-1,3,1);//前一天
String yesterday = str; // String yesterday = str;
String[] rangeArray=ClockInTool.listToString(ClockInTool.getDays(sdf1.format(c.getTime()),yesterday)).split(";");//目前为止所有日期 String[] rangeArray=ClockInTool.listToString(ClockInTool.getDays(sdf1.format(c.getTime()),str)).split(";");//目前为止所有日期
String[] range=rangeArray[0].split(","); String[] range=rangeArray[0].split(",");
Long endDateyesterday = DateUtil.getnowEndTime(23,DateUtil.getStringTime(yesterday,"yyyy-MM-dd")).getTime(); // Long endDateyesterday = DateUtil.getnowEndTime(23,DateUtil.getStringTime(yesterday,"yyyy-MM-dd")).getTime();
int year = Calendar.getInstance().get(Calendar.YEAR); int year = Calendar.getInstance().get(Calendar.YEAR);
int month = Calendar.getInstance().get(Calendar.MONTH) + 1; int month = Calendar.getInstance().get(Calendar.MONTH) + 1;
int summaryid = 0;//汇总id int summaryid = 0;//汇总id
List<QyzxEntInfoM> orgcodelist = qyzxentinfommapper.selectList(new QueryWrapper<QyzxEntInfoM>());//系统中的所有公司 所有未到期的公司
for(int t = 0;t<orgcodelist.size();t++){ for(int t = 0;t<orgcodelist.size();t++){
int org_code = orgcodelist.get(t).getId();//企业组织代码 int org_code = orgcodelist.get(t).getId();//企业组织代码
...@@ -205,7 +166,7 @@ public class AttendanceTaskTiming{ ...@@ -205,7 +166,7 @@ public class AttendanceTaskTiming{
//考勤组信息 //考勤组信息
KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(user.getEmpnum(),org_code); KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(user.getEmpnum(),org_code);
//目前为止打卡记录 //目前为止打卡记录
List<PunchCardDetails> attendance = punchcarddetailsmapper.selectAttendanceDays(user.getEmpnum(), startDate, endDateyesterday); List<PunchCardDetails> attendance = punchcarddetailsmapper.selectAttendanceDays(user.getEmpnum(), startDate, endDate);
int dkjl = 0;//目前为止打卡次数 int dkjl = 0;//目前为止打卡次数
int sbqkcs = 0,xbqkcs = 0,dk=0; int sbqkcs = 0,xbqkcs = 0,dk=0;
String[] sblacks = new String[31];//上班缺卡天数 String[] sblacks = new String[31];//上班缺卡天数
...@@ -336,7 +297,7 @@ public class AttendanceTaskTiming{ ...@@ -336,7 +297,7 @@ public class AttendanceTaskTiming{
int w = 0,x=0; int w = 0,x=0;
int zj = 6; int zj = 6;
for(String num : range) { for(String num : range) {
if(Arrays.binarySearch(needfig, String.valueOf(ClockInTool.dateToWeek(num))) >= 0) {//对比排班应打卡时间 if(ClockInTool.useArrayUtils(needfig, String.valueOf(ClockInTool.dateToWeek(num)))) {//对比排班应打卡时间
String[] ycqtst = new String[ycqts.length + zj]; String[] ycqtst = new String[ycqts.length + zj];
System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length); System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length);
ycqtst[w] = num; ycqtst[w] = num;
...@@ -354,7 +315,7 @@ public class AttendanceTaskTiming{ ...@@ -354,7 +315,7 @@ public class AttendanceTaskTiming{
//xxts[x] = num; //xxts[x] = num;
x++; x++;
} }
if(Arrays.binarySearch(bxdkss, num) >= 0) {//检查是否存在 必须打卡名单中 if(ClockInTool.useArrayUtils(bxdkss, num)) {//检查是否存在 必须打卡名单中
String[] ycqtst = new String[ycqts.length + zj]; String[] ycqtst = new String[ycqts.length + zj];
System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length); System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length);
ycqtst[w] = num; ycqtst[w] = num;
...@@ -365,7 +326,7 @@ public class AttendanceTaskTiming{ ...@@ -365,7 +326,7 @@ public class AttendanceTaskTiming{
zjgzts++; zjgzts++;
xxts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(xxts), num);//为必须上班的话从休息日期中去除 xxts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(xxts), num);//为必须上班的话从休息日期中去除
} }
if(Arrays.binarySearch(appmaps, num) >= 0) {//检查是否存在 无需打卡名单中 if(ClockInTool.useArrayUtils(appmaps, num)) {//检查是否存在 无需打卡名单中
ycqts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(ycqts), num);//为必须休息的话从上班日期中去除 ycqts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(ycqts), num);//为必须休息的话从上班日期中去除
zjgzts = zjgzts - 1; zjgzts = zjgzts - 1;
...@@ -398,7 +359,7 @@ public class AttendanceTaskTiming{ ...@@ -398,7 +359,7 @@ public class AttendanceTaskTiming{
//目前为止应出勤天数 //目前为止应出勤天数
int y = 0,x=0; int y = 0,x=0;
for(String num : range) { for(String num : range) {
if(Arrays.binarySearch(ziyoupb, num) >= 0) { if(ClockInTool.useArrayUtils(ziyoupb, num)) {
KqglAssoPbmx pbx = KqglAssoPbmx.builder().build().selectOne(new QueryWrapper<KqglAssoPbmx>().lambda().eq(KqglAssoPbmx::getUserid, user.getEmpnum()).eq(KqglAssoPbmx::getData, num).eq(KqglAssoPbmx::getKqzid, attgro.getId())); KqglAssoPbmx pbx = KqglAssoPbmx.builder().build().selectOne(new QueryWrapper<KqglAssoPbmx>().lambda().eq(KqglAssoPbmx::getUserid, user.getEmpnum()).eq(KqglAssoPbmx::getData, num).eq(KqglAssoPbmx::getKqzid, attgro.getId()));
if(pbx!=null && pbx.getBcid()!=0) { if(pbx!=null && pbx.getBcid()!=0) {
ycqts[y] = num; ycqts[y] = num;
...@@ -437,7 +398,7 @@ public class AttendanceTaskTiming{ ...@@ -437,7 +398,7 @@ public class AttendanceTaskTiming{
//目前为止应出勤天数 //目前为止应出勤天数
int g = 0,x=0; int g = 0,x=0;
for(String num : range) { for(String num : range) {
if(Arrays.binarySearch(ziyoupb, String.valueOf(ClockInTool.dateToWeek(num))) >= 0) {//对比排班应打卡时间 if(ClockInTool.useArrayUtils(ziyoupb, String.valueOf(ClockInTool.dateToWeek(num)))) {//对比排班应打卡时间
ycqts[g] = num; ycqts[g] = num;
g++; g++;
zjgzts++; zjgzts++;
...@@ -447,7 +408,7 @@ public class AttendanceTaskTiming{ ...@@ -447,7 +408,7 @@ public class AttendanceTaskTiming{
} }
} }
} }
List<PunchRecord> initial = punchrecordmapper.getMaintenancePunchCardList(startDate,endDateyesterday,user.getEmpnum()); List<PunchRecord> initial = punchrecordmapper.getMaintenancePunchCardList(startDate,endDate,user.getEmpnum());
// // 迟到次数 迟到时长 早退次数 早退时长 // // 迟到次数 迟到时长 早退次数 早退时长
// int latenum = 0,latehours = 0,leanum = 0,leahours = 0;// 迟到次数 // int latenum = 0,latehours = 0,leanum = 0,leahours = 0;// 迟到次数
String[] cdts = new String[31];//迟到的具体天数 String[] cdts = new String[31];//迟到的具体天数
...@@ -533,32 +494,34 @@ public class AttendanceTaskTiming{ ...@@ -533,32 +494,34 @@ public class AttendanceTaskTiming{
// List<String> rowData = new ArrayList<String>(); // List<String> rowData = new ArrayList<String>();
//遍历目前为止所有日期 结合该用户发起的审批进行结合 //遍历目前为止所有日期 结合该用户发起的审批进行结合
//1:加班 2:请假 3:出差 4:外出 5:补卡 //1:加班 2:请假 3:出差 4:外出 5:补卡
int u = 0;
for(String num : range) { for(String num : range) {
if(Arrays.binarySearch(ClockInTool.deleteArrayNull(xxts), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(dkjtts),num) >= 0) { if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xxts), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(dkjtts),num)) {
rowData.add("休息并打卡"); rowData.add("休息并打卡");
}else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(xxts), num) >= 0){ }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xxts), num)){
rowData.add("休息"); rowData.add("休息");
}else { }else {
if(Arrays.binarySearch(ClockInTool.deleteArrayNull(ycqts), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(dkjtts), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(leaves), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(travels), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(goouts), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(cards), num) < 0) { if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ycqts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(dkjtts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(leaves), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(travels), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(goouts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cards), num)) {
rowData.add("旷工"); rowData.add("旷工");
}else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(ycqts), num) < 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(xxts), num) < 0) {//日期不在上班也不在休息里面即为未排班 }else if(!ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ycqts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xxts), num)) {//日期不在上班也不在休息里面即为未排班
rowData.add("未排班"); rowData.add("未排班");
}else if(sdf1.parse(beginTime).getTime() < sdf1.parse(num).getTime()) { }else if(sdf1.parse(beginTime).getTime() < sdf1.parse(num).getTime()) {
rowData.add("未到班期"); rowData.add("未到班期");
}else { }else {
if(Arrays.binarySearch(ClockInTool.deleteArrayNull(sblacks), num) >= 0) { if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(sblacks), num)) {
rowData.add("上班缺卡"); rowData.add("上班缺卡");
}else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(sblacks), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(ztts), num) >= 0) { }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(sblacks), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ztts), num)) {
rowData.add("上班缺卡,下班早退"); rowData.add("上班缺卡,下班早退");
}else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(cdts), num) >= 0) { }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cdts), num)) {
rowData.add("上班迟到"); rowData.add("上班迟到");
}else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(cdts), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(xblacks), num) >= 0) { }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cdts), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xblacks), num)) {
rowData.add("上班迟到,下班缺卡"); rowData.add("上班迟到,下班缺卡");
}else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(cdts), num) >= 0 && Arrays.binarySearch(ClockInTool.deleteArrayNull(ztts), num) >= 0) { }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cdts), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ztts), num)) {
rowData.add("上班迟到,下班早退"); rowData.add("上班迟到,下班早退");
}else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(xblacks), num) >= 0) { // }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(xblacks), num) >= 0) {
}else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xblacks),num)) {
rowData.add("下班缺卡"); rowData.add("下班缺卡");
}else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(ztts), num) >= 0) { }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ztts), num)) {
rowData.add("下班早退"); rowData.add("下班早退");
}else { }else {
rowData.add("正常"); rowData.add("正常");
...@@ -566,6 +529,7 @@ public class AttendanceTaskTiming{ ...@@ -566,6 +529,7 @@ public class AttendanceTaskTiming{
} }
} }
/******/
if(ClockInTool.contains(ClockInTool.deleteArrayNull(leaves),num)) { if(ClockInTool.contains(ClockInTool.deleteArrayNull(leaves),num)) {
KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 2)); KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 2));
String leavetype = "未知";//请假类型 String leavetype = "未知";//请假类型
...@@ -580,19 +544,24 @@ public class AttendanceTaskTiming{ ...@@ -580,19 +544,24 @@ public class AttendanceTaskTiming{
else { company = "小时"; } else { company = "小时"; }
} }
} }
rowData.add(lea.getStartTime() +"到"+ lea.getEndTime()+"请"+leavetype+lea.getDuration()+company); rowData.remove(u);
rowData.add(u,lea.getStartTime() +"到"+ lea.getEndTime()+"请"+leavetype+lea.getDuration()+company);
} }
if(ClockInTool.contains(ClockInTool.deleteArrayNull(travels),num)) { if(ClockInTool.contains(ClockInTool.deleteArrayNull(travels),num)) {
KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 3)); KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 3));
rowData.add(lea.getStartTime() +"到"+ lea.getEndTime()+"出差"+lea.getDuration()+"天");
rowData.remove(u);
rowData.add(u,lea.getStartTime() +"到"+ lea.getEndTime()+"出差"+lea.getDuration()+"天");
} }
if(ClockInTool.contains(ClockInTool.deleteArrayNull(goouts),num)) { if(ClockInTool.contains(ClockInTool.deleteArrayNull(goouts),num)) {
KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 4)); KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 4));
rowData.add(lea.getStartTime() +"到"+ lea.getEndTime()+"外出"+lea.getDuration()+"天"); rowData.remove(u);
rowData.add(u,lea.getStartTime() +"到"+ lea.getEndTime()+"外出"+lea.getDuration()+"天");
} }
if(ClockInTool.contains(ClockInTool.deleteArrayNull(cards),num)) { if(ClockInTool.contains(ClockInTool.deleteArrayNull(cards),num)) {
KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 5)); KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 5));
rowData.add("已补卡:"+lea.getStartTime()); rowData.remove(u);
rowData.add(u,"已补卡:"+lea.getStartTime());
} }
if(ClockInTool.contains(ClockInTool.deleteArrayNull(overtimes),num)) { if(ClockInTool.contains(ClockInTool.deleteArrayNull(overtimes),num)) {
...@@ -612,7 +581,9 @@ public class AttendanceTaskTiming{ ...@@ -612,7 +581,9 @@ public class AttendanceTaskTiming{
if(lea.getCompensateId() == 1) { method="转调休"; } if(lea.getCompensateId() == 1) { method="转调休"; }
else if(lea.getCompensateId() == 2) { method="转加班费"; } else if(lea.getCompensateId() == 2) { method="转加班费"; }
else {method="转调休或加班费";} else {method="转调休或加班费";}
rowData.add(lea.getStartTime() +"到"+ lea.getEndTime()+"加班"+lea.getDuration()+company+"["+method+"]");
rowData.remove(u);
rowData.add(u,lea.getStartTime() +"到"+ lea.getEndTime()+"加班"+lea.getDuration()+company+"["+method+"]");
//防止多运算 //防止多运算
if(lea.getOrdernum() == lea.getTotals()) { if(lea.getOrdernum() == lea.getTotals()) {
//加班补偿方式 1:转调休;2:转加班费;3:转调休或加班费 //加班补偿方式 1:转调休;2:转加班费;3:转调休或加班费
...@@ -649,9 +620,10 @@ public class AttendanceTaskTiming{ ...@@ -649,9 +620,10 @@ public class AttendanceTaskTiming{
} }
} }
} }
} }
/****/
//////// ////////
KqglAssoBcsz shif = KqglAssoBcsz.builder().build(); KqglAssoBcsz shif = KqglAssoBcsz.builder().build();
...@@ -706,10 +678,13 @@ public class AttendanceTaskTiming{ ...@@ -706,10 +678,13 @@ public class AttendanceTaskTiming{
} }
} }
} }
u++;
} }
}else { }else {
for (String num2 : range) { for (String num2 : range) {
if (Arrays.binarySearch(dkjtts, num2) >= 0) { if (ClockInTool.useArrayUtils(dkjtts, num2)) {
rowData.add("未排班并打卡"); rowData.add("未排班并打卡");
}else{ }else{
rowData.add("未排班"); rowData.add("未排班");
...@@ -809,17 +784,13 @@ public class AttendanceTaskTiming{ ...@@ -809,17 +784,13 @@ public class AttendanceTaskTiming{
summary.insert(); summary.insert();
} }
// summary.insertOrUpdate();
} }
} }//循环对应公司所有员工
} }//循环所有公司
// KqglTaskTiming.builder().task("AttendanceTask").id(sockid).executionStatus(0).lastExecutionTime(new Date().getTime()).build().updateById();
// return new Exception().getStackTrace()[0].getMethodName();
} }
// else {
// return null;
// }
} }
} }
package cn.timer.api.controller.kqgl.atttimer;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import cn.timer.api.bean.kqgl.AttendanceWeeklySch;
import cn.timer.api.bean.kqgl.PunchCardDetails;
import cn.timer.api.bean.kqgl.PunchRecord;
import cn.timer.api.bean.kqgl.Schedule;
import cn.timer.api.bean.kqmk.KqglAssoBcsz;
import cn.timer.api.bean.kqmk.KqglAssoLeaveRules;
import cn.timer.api.bean.kqmk.KqglAssoMonthPunchSummary;
import cn.timer.api.bean.kqmk.KqglAssoOvertimeBasics;
import cn.timer.api.bean.kqmk.KqglAssoPbmx;
import cn.timer.api.bean.kqmk.KqglAssoRelationSummary;
import cn.timer.api.bean.kqmk.KqglAssoTeshu;
import cn.timer.api.bean.kqmk.KqglAssoZhoupaiban;
import cn.timer.api.bean.kqmk.KqglMainKqz;
import cn.timer.api.bean.qyzx.QyzxEntInfoM;
import cn.timer.api.bean.yggl.YgglMainLzb;
import cn.timer.api.controller.kqgl.ClockInController;
import cn.timer.api.controller.kqgl.ClockInTool;
import cn.timer.api.controller.kqgl.EmptyUtil;
import cn.timer.api.dao.kqgl.AttendanceWeeklySchMapper;
import cn.timer.api.dao.kqgl.PunchCardDetailsMapper;
import cn.timer.api.dao.kqgl.PunchRecordMapper;
import cn.timer.api.dao.kqgl.ScheduleMapper;
import cn.timer.api.dao.kqmk.KqglAssoDkmxMapper;
import cn.timer.api.dao.kqmk.KqglAssoLeaveBalanceMapper;
import cn.timer.api.dao.kqmk.KqglAssoRelationSummaryMapper;
import cn.timer.api.dao.kqmk.KqglAssoTeshuMapper;
import cn.timer.api.dao.kqmk.KqglMainKqzMapper;
import cn.timer.api.dao.qyzx.QyzxEntInfoMMapper;
import cn.timer.api.dto.kqmk.AdditionalDto;
import cn.timer.api.dto.kqmk.AttSchedule;
import cn.timer.api.dto.kqmk.AttSubsidiaryDto;
import cn.timer.api.dto.kqmk.AttendanceCardListDto;
import cn.timer.api.utils.DateUtil;
/**
* @author Yl123 上月数据
*/
@Configuration //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling // 2.开启定时任务
public class LastMonthtimingExport {
@Autowired
private KqglMainKqzMapper kqglmainkqzmapper;
@Autowired
private QyzxEntInfoMMapper qyzxentinfommapper;
@Autowired
private KqglAssoLeaveBalanceMapper kqglassoleavebalancemapper;
@Autowired
private KqglAssoTeshuMapper kqglassoteshumapper;
@Autowired
private PunchCardDetailsMapper punchcarddetailsmapper;
@Autowired
private AttendanceWeeklySchMapper attendanceweeklyschmapper;
@Autowired
private ScheduleMapper schedulemapper;
static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
static SimpleDateFormat sdf2 = new SimpleDateFormat("EEE");
@Autowired
private KqglAssoRelationSummaryMapper kqglassorelationsummarymapper;
@Autowired
private PunchRecordMapper punchrecordmapper;
@Autowired
private KqglAssoDkmxMapper kqglassodkmxmapper;
@Autowired
private ClockInController clockincontroller;
private static String lastDay;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// @Scheduled(cron = "0 53 18 * * ?")
public void LastMonthtimingAttendanceTask() throws ParseException {
//获取前月的最后一天
Calendar cale = Calendar.getInstance();
cale.set(Calendar.DAY_OF_MONTH,0);//设置为1号,当前日期既为本月第一天
lastDay = format.format(cale.getTime());
String lastmonth = ClockInTool.getYearMonth();//2020-07
int year = Integer.valueOf(lastmonth.substring(0,4));//获取前一个年份
int month=Integer.valueOf(lastmonth.substring(5,7));//获取前一个月份
int summaryid = 0;//汇总id
//获取上月年月份
String date = lastmonth+"-01";
String sdaet = DateUtil.getMinMonthDate(date);
Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(sdaet,"yyyy-MM-dd")).getTime();
String edate = DateUtil.getMaxMonthDate(date);
Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(edate,"yyyy-MM-dd")).getTime();
String str = lastDay;
String ttstr = lastmonth;
String[] rangeArray=ClockInTool.listToString(ClockInTool.getDays(date,str)).split(";");//目前为止所有日期
String[] range=rangeArray[0].split(",");
List<QyzxEntInfoM> orgcodelist = qyzxentinfommapper.selectList(new QueryWrapper<QyzxEntInfoM>());//系统中的所有公司 所有未到期的公司
for(int t = 0;t<orgcodelist.size();t++){
int org_code = orgcodelist.get(t).getId();//企业组织代码
List<AdditionalDto> userlist = kqglassoleavebalancemapper.selectAdditionalList(org_code);
for(AdditionalDto user : userlist) {
YgglMainLzb lzb = YgglMainLzb.builder().build().selectOne(new QueryWrapper<YgglMainLzb>().lambda().eq(YgglMainLzb::getOrgCode, org_code).eq(YgglMainLzb::getJobStatus, 3)
.eq(YgglMainLzb::getEmpNum, user.getEmpnum()));
if(lzb == null) {//已离职 的人员不进入计算(已存在的不做任何处理)
// KqglAssoMonthPunchSummary.builder().build().delete(new QueryWrapper<KqglAssoMonthPunchSummary>().lambda().eq(KqglAssoMonthPunchSummary::getBelongYear, year)
// .eq(KqglAssoMonthPunchSummary::getBelongMonth, month).eq(KqglAssoMonthPunchSummary::getOrgCode, org_code));
KqglAssoMonthPunchSummary sum = KqglAssoMonthPunchSummary.builder().build().selectOne(new QueryWrapper<KqglAssoMonthPunchSummary>().lambda().eq(KqglAssoMonthPunchSummary::getOrgCode, org_code)
.eq(KqglAssoMonthPunchSummary::getBelongYear, year).eq(KqglAssoMonthPunchSummary::getBelongMonth, month).eq(KqglAssoMonthPunchSummary::getNum, user.getEmpnum()));
if(sum != null) {
summaryid = sum.getId();
}else {
summaryid = 0;
}
double traveltotal = 0,egresstotal = 0,overtimetotal = 0;
//出差总时长
KqglAssoRelationSummary travel = kqglassorelationsummarymapper.SecondaryValue(user.getEmpnum(), 3, ttstr);
if(travel !=null) { traveltotal = travel.getDuration(); }
//外出总时长
KqglAssoRelationSummary egress = kqglassorelationsummarymapper.SecondaryValue(user.getEmpnum(), 4, ttstr);
if(egress!=null) { egresstotal = egress.getDuration(); }
//加班总时长
KqglAssoRelationSummary overtime = kqglassorelationsummarymapper.SecondaryValue(user.getEmpnum(), 1, ttstr);
if(overtime!= null) { overtimetotal = overtime.getDuration(); }
//考勤组信息
KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(user.getEmpnum(),org_code);
//目前为止打卡记录
List<PunchCardDetails> attendance = punchcarddetailsmapper.selectAttendanceDays(user.getEmpnum(), startDate, endDate);
int dkjl = 0;//目前为止打卡次数
int sbqkcs = 0,xbqkcs = 0,dk=0;
String[] sblacks = new String[31];//上班缺卡天数
String[] xblacks = new String[31];//下班缺卡天数
String[] dkjtts = new String[attendance.size()];//目前打卡日期明细
int bccs = 0;
if(attendance.size() > 0) {
dkjl = attendance.size();
for(PunchCardDetails pcd:attendance){
AttendanceCardListDto attdate = clockincontroller.MethodCall(org_code, user.getEmpnum(), pcd.getData());
List<AttSchedule> ashss = attdate.getAttsch();//获取今天应打卡时间
if(EmptyUtil.isNotEmpty(attdate.getAttsch()) && ashss.get(0).getId() != 0) {//班次不为空
bccs = attdate.getAttsch().size();
}
dkjtts[dk] = pcd.getData();
dk++;
if(bccs == 2 || bccs == 4 || bccs == 6){
if(pcd.getSbdk1() == null){
sblacks[sbqkcs] = pcd.getData();
sbqkcs++;
}
if(pcd.getXbdk1() == null){
xblacks[xbqkcs] = pcd.getData();
xbqkcs++;
}
}
if(bccs == 4 || bccs == 6){
if(pcd.getSbdk2() == null){
sblacks[sbqkcs] = pcd.getData();
sbqkcs++;
}
if(pcd.getXbdk2() == null){
xblacks[xbqkcs] = pcd.getData();
xbqkcs++;
}
}
if(bccs == 6){
if(pcd.getSbdk3() == null){
sblacks[sbqkcs] = pcd.getData();
sbqkcs++;
}
if(pcd.getXbdk3() == null){
xblacks[xbqkcs] = pcd.getData();
xbqkcs++;
}
}
}
sblacks = ClockInTool.deleteArrayNull(sblacks);
sbqkcs= sblacks.length;
xblacks = ClockInTool.deleteArrayNull(xblacks);
xbqkcs = xblacks.length;
}
//具体打卡时间入汇总表(打卡成功才会录入汇总表)
// KqglAssoMonthPunchSummary isyessum = KqglAssoMonthPunchSummary.builder().build().selectOne(new QueryWrapper<KqglAssoMonthPunchSummary>().lambda()
// .eq(KqglAssoMonthPunchSummary::getNum, user.getEmpnum()).eq(KqglAssoMonthPunchSummary::getOrgCode, org_code));
String[] ycqts = new String[31];//应上班的具体天数(yyyy-MM-dd)
String[] xxts = new String[31];//休息的具体天数(yyyy-MM-dd)
List<String> rowData = new ArrayList<String>();
//休息天数,应出勤天数,实际出勤
double daysOff = 0,daysOnDuty = 0;//,actualAttDays = 0;
int zjgzts = 0;//目前为止应该出勤的天数
//工作时长(分钟)、严重迟到次数、严重迟到时长(分钟)、旷工迟到次数
double workinghours = 0,seriouslatetimes = 0,seriouslatehours = 0,absenlatetimes = 0;
// 迟到次数 迟到时长 早退次数 早退时长
int latenum = 0,latehours = 0,leanum = 0,leahours = 0;// 迟到次数
int answer =0;//班次ID
//工作日(转调休)、休息日(转调休)、节假日(转调休)
double workingturncompenleave = 0,restturncompenleave = 0,holidayturncompenleave = 0;//工作日(转调休)
//工作日(转加班费)、休息日(转加班费)、节假日(转加班费)
double workingtransferovertime = 0,resttransferovertime = 0,holidaytransferovertime = 0;
int attgroid = 0;
if(attgro != null){//该员工是否加入到考勤组 排班方式 1:固定排班;2:自由排班;3:自由工时 计算出应出勤,实际出勤,休息天数
attgroid = attgro.getId();
// KqglAssoBcsz shif = KqglAssoBcsz.builder().build();
// //休息天数,应出勤天数,实际出勤
// double daysOff = 0,daysOnDuty = 0;//,actualAttDays = 0;
// int zjgzts = 0;//目前为止应该出勤的天数
if(attgro.getPbfs() == 1){ //固定排班
List<KqglAssoTeshu> bxdklist = kqglassoteshumapper.ShouldSpecialDatessetByKqzid(attgro.getId(), ttstr,1);//当前月 必须打卡日期
int bxdk = bxdklist.size();
String[] bxdkss = new String[bxdk];////特殊-必须打卡天数(工作日)
int b = 0;
for(KqglAssoTeshu bxd : bxdklist) {
bxdkss[b] = bxd.getTsrq();
b++;
}
List<KqglAssoTeshu> wxdk = kqglassoteshumapper.ShouldSpecialDatessetByKqzid(attgro.getId(), ttstr,2);//当前月 无需打卡日期
String[] appmaps= new String[wxdk.size()];//特殊-无需打卡天数(休息日)
int d1 = 0;
for(KqglAssoTeshu spe:wxdk){
appmaps[d1] = spe.getTsrq();
d1++;
}
//应打卡周期时间
List<AttendanceWeeklySch> atwek = attendanceweeklyschmapper.selectAttendanceMadeByUserid(user.getEmpnum(),org_code);
String[] week= new String[atwek.size()];
String[] needfig = new String[atwek.size()];//应打卡周期时间
int e = 0;
for(AttendanceWeeklySch awek : atwek){
week[e] = awek.getWekmc();
needfig[e] = String.valueOf(awek.getType());//获取设置的应打卡周几
e++;
}
String yemo = year + "-" + month;
sdf1.setLenient(false);
int y = 0,q = 0;
for(int i = 1; i <= ClockInTool.getDaysByYearMonth(year,month); i++){
Date date1 = sdf1.parse(yemo + "-" + i);
for(int u=0;u<week.length;u++){
if(sdf2.format(date1).equals(week[u])){
q++;
y++;
if(Arrays.asList(appmaps).contains(String.valueOf(sdf1.format(date1)))){
y = y-1;
}
}
}
}
//全月时间 - 应打卡时间 - 必须打卡时间 + 无需打卡时间
int xiuxi = ClockInTool.getDaysByYearMonth(year,month) - q - bxdk + wxdk.size();
daysOff = xiuxi;
daysOnDuty = y+bxdk;
// String[] range=ClockInTool.listToString(ClockInTool.getDays(sdf1.format(c.getTime()),str)).split(";");//目前为止所有日期
// int zjgzts = 0;//目前为止应该出勤的天数
//目前为止应出勤天数
int w = 0,x=0;
int zj = 6;
for(String num : range) {
if(ClockInTool.useArrayUtils(needfig, String.valueOf(ClockInTool.dateToWeek(num)))) {//对比排班应打卡时间
String[] ycqtst = new String[ycqts.length + zj];
System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length);
ycqtst[w] = num;
ycqts = ycqtst;
//ycqts[w] = num;
w++;
zjgzts++;
}else {
String[] xxtst = new String[xxts.length + zj];
System.arraycopy(xxts, 0, xxtst, 0, xxts.length);
xxtst[x] = num;
xxts = xxtst;
//xxts[x] = num;
x++;
}
if(ClockInTool.useArrayUtils(bxdkss, num)) {//检查是否存在 必须打卡名单中
String[] ycqtst = new String[ycqts.length + zj];
System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length);
ycqtst[w] = num;
ycqts = ycqtst;
//ycqts[w] = num;
w++;
zjgzts++;
xxts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(xxts), num);//为必须上班的话从休息日期中去除
}
if(ClockInTool.useArrayUtils(appmaps, num)) {//检查是否存在 无需打卡名单中
ycqts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(ycqts), num);//为必须休息的话从上班日期中去除
zjgzts = zjgzts - 1;
String[] xxtst = new String[xxts.length + zj];
System.arraycopy(xxts, 0, xxtst, 0, xxts.length);
xxtst[x] = num;
//xxts[x] = num;
xxts = xxtst;
x++;
}
}
}else if(attgro.getPbfs() == 2){ //自由排班
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
List<Schedule> ycqs = schedulemapper.getAttendanceShouldList(user.getEmpnum(),startDate,endDate);
int xiuxi = 0,shangban = 0,z=0;
String[] ziyoupb = new String[ycqs.size()];
for(Schedule sc : ycqs){
String data = new SimpleDateFormat("yyyy-MM-dd").format(df.parse(String.valueOf(sc.getData())));// 获得格式化后的日期字符串
ziyoupb[z] = data;
z++;
if(sc.getBcid().equals(0)){
xiuxi++;
}else{
shangban++;
}
}
daysOff = xiuxi;
daysOnDuty = shangban;
//目前为止应出勤天数
int y = 0,x=0;
for(String num : range) {
if(ClockInTool.useArrayUtils(ziyoupb, num)) {
KqglAssoPbmx pbx = KqglAssoPbmx.builder().build().selectOne(new QueryWrapper<KqglAssoPbmx>().lambda().eq(KqglAssoPbmx::getUserid, user.getEmpnum()).eq(KqglAssoPbmx::getData, num).eq(KqglAssoPbmx::getKqzid, attgro.getId()));
if(pbx!=null && pbx.getBcid()!=0) {
ycqts[y] = num;
y++;
zjgzts++;
}else {
xxts[x] = num;
x++;
}
}
}
}else{
List<AttendanceWeeklySch> atwek = attendanceweeklyschmapper.selectAttendanceMadeByUserid(user.getEmpnum(),org_code);
String[] week= new String[atwek.size()];
int e = 0;
String[] ziyoupb = new String[atwek.size()];
for(AttendanceWeeklySch awek : atwek){
week[e] = awek.getWekmc();
ziyoupb[e] = String.valueOf(awek.getType());
e++;
}
String yemo = year + "-" + month;
sdf1.setLenient(false);
int y = 0;
for(int i = 1; i <= ClockInTool.getDaysByYearMonth(year,month); i++){
Date date1 = sdf1.parse(yemo + "-" + i);
for(int u=0;u<week.length;u++){
if(sdf2.format(date1).equals(week[u])){
y++;
}
}
}
int xiuxi = ClockInTool.getDaysByYearMonth(year,month) - y;
daysOff = xiuxi;
daysOnDuty = y;
//目前为止应出勤天数
int g = 0,x=0;
for(String num : range) {
if(ClockInTool.useArrayUtils(ziyoupb, String.valueOf(ClockInTool.dateToWeek(num)))) {//对比排班应打卡时间
ycqts[g] = num;
g++;
zjgzts++;
}else {
xxts[x] = num;
x++;
}
}
}
List<PunchRecord> initial = punchrecordmapper.getMaintenancePunchCardList(startDate,endDate,user.getEmpnum());
// // 迟到次数 迟到时长 早退次数 早退时长
// int latenum = 0,latehours = 0,leanum = 0,leahours = 0;// 迟到次数
String[] cdts = new String[31];//迟到的具体天数
String[] ztts = new String[31];//早退的具体天数
if(initial.size() > 0){
for(PunchRecord prd : initial){
if(prd.getType() == 1 && prd.getResults() > 0){
cdts[latenum] = new SimpleDateFormat("yyyy-MM-dd").format(prd.getDktime());
latenum++;
latehours += prd.getResults();
}
if(prd.getType() == 2 && prd.getResults() > 0){
ztts[leanum] = new SimpleDateFormat("yyyy-MM-dd").format(prd.getDktime());
leanum++;
leahours += prd.getResults();
}
}
}
AttSubsidiaryDto subs = kqglassodkmxmapper.subsidiary(user.getEmpnum(), ttstr);
// //工作时长(分钟)、严重迟到次数、严重迟到时长(分钟)、旷工迟到次数
// double workinghours = 0,seriouslatetimes = 0,seriouslatehours = 0,absenlatetimes = 0;
if(subs != null) {
workinghours = subs.getGzsctotalgzsc();
seriouslatetimes = subs.getYzcdcstotal();
seriouslatehours = subs.getYzcdsctotal();
absenlatetimes = subs.getKgcdfzstotal();
}
//具体请假天数
List<KqglAssoRelationSummary> leavetotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 2, ttstr);
String[] leaves = new String[leavetotal.size()];
int l = 0;
if(leavetotal.size()>0) {
for(KqglAssoRelationSummary lea : leavetotal){
leaves[l] = lea.getAppTime();
l++;
}
}
//具体加班天数
List<KqglAssoRelationSummary> overtitotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 1, ttstr);
String[] overtimes = new String[overtitotal.size()];
int o = 0;
if(overtitotal.size() > 0) {
for(KqglAssoRelationSummary over : overtitotal) {
overtimes[o] = over.getAppTime();
o++;
}
}
//具体出差天数
List<KqglAssoRelationSummary> trtotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 3, ttstr);
String[] travels = new String[trtotal.size()];
int cx = 0;
if(trtotal.size()>0) {
for(KqglAssoRelationSummary trt : trtotal) {
travels[cx] = trt.getAppTime();
cx++;
}
}
//具体外出天数
List<KqglAssoRelationSummary> goouttotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 4, ttstr);
String[] goouts = new String[goouttotal.size()];
int wc = 0;
if(goouttotal.size()>0) {
for(KqglAssoRelationSummary go:goouttotal) {
goouts[wc] = go.getAppTime();
wc++;
}
}
//具体补卡天数
List<KqglAssoRelationSummary> cardtotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 5, ttstr);
String[] cards = new String[cardtotal.size()];
int bk = 0;
if(cardtotal.size()>0) {
for(KqglAssoRelationSummary car : cardtotal) {
cards[bk] = car.getAppTime();
bk++;
}
}
//排查请假是否在最后一次打卡范围内 查询当月的请假所有日期
List<KqglAssoRelationSummary> leainv = kqglassorelationsummarymapper.LeaveInvestigation(user.getEmpnum(), 2, ttstr,org_code);
// KqglAssoBcsz shif = KqglAssoBcsz.builder().build();
String beginTime = sdf1.format(new Date());
// List<String> rowData = new ArrayList<String>();
//遍历目前为止所有日期 结合该用户发起的审批进行结合
//1:加班 2:请假 3:出差 4:外出 5:补卡
int u = 0;
for(String num : range) {
if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xxts), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(dkjtts),num)) {
rowData.add("休息并打卡");
}else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xxts), num)){
rowData.add("休息");
}else {
if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ycqts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(dkjtts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(leaves), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(travels), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(goouts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cards), num)) {
rowData.add("旷工");
}else if(!ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ycqts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xxts), num)) {//日期不在上班也不在休息里面即为未排班
rowData.add("未排班");
}else if(sdf1.parse(beginTime).getTime() < sdf1.parse(num).getTime()) {
rowData.add("未到班期");
}else {
if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(sblacks), num)) {
rowData.add("上班缺卡");
}else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(sblacks), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ztts), num)) {
rowData.add("上班缺卡,下班早退");
}else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cdts), num)) {
rowData.add("上班迟到");
}else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cdts), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xblacks), num)) {
rowData.add("上班迟到,下班缺卡");
}else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cdts), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ztts), num)) {
rowData.add("上班迟到,下班早退");
// }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(xblacks), num) >= 0) {
}else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xblacks),num)) {
rowData.add("下班缺卡");
}else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ztts), num)) {
rowData.add("下班早退");
}else {
rowData.add("正常");
}
}
}
/******/
if(ClockInTool.contains(ClockInTool.deleteArrayNull(leaves),num)) {
KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 2));
String leavetype = "未知";//请假类型
String company = "未知";//请假单位
if(lea != null) {
KqglAssoLeaveRules rul = KqglAssoLeaveRules.builder().build().selectOne(new QueryWrapper<KqglAssoLeaveRules>().lambda().eq(KqglAssoLeaveRules::getId, lea.getLeaveTypeId()));
if(rul != null) {
leavetype = rul.getName();
//1:按天请假;2:按半天;3:按小时
if(rul.getCompany() == 1) { company = "天"; }
else if(rul.getCompany() == 2) { company = "半天"; }
else { company = "小时"; }
}
}
rowData.remove(u);
rowData.add(u,lea.getStartTime() +"到"+ lea.getEndTime()+"请"+leavetype+lea.getDuration()+company);
}
if(ClockInTool.contains(ClockInTool.deleteArrayNull(travels),num)) {
KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 3));
rowData.remove(u);
rowData.add(u,lea.getStartTime() +"到"+ lea.getEndTime()+"出差"+lea.getDuration()+"天");
}
if(ClockInTool.contains(ClockInTool.deleteArrayNull(goouts),num)) {
KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 4));
rowData.remove(u);
rowData.add(u,lea.getStartTime() +"到"+ lea.getEndTime()+"外出"+lea.getDuration()+"天");
}
if(ClockInTool.contains(ClockInTool.deleteArrayNull(cards),num)) {
KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 5));
rowData.remove(u);
rowData.add(u,"已补卡:"+lea.getStartTime());
}
if(ClockInTool.contains(ClockInTool.deleteArrayNull(overtimes),num)) {
String company = "未知",method = "无";//加班单位、加班补偿方式
List<KqglAssoRelationSummary> leas = KqglAssoRelationSummary.builder().build().selectList(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 1));
for(KqglAssoRelationSummary lea : leas) {
//最小加班单位 1:按分钟加班、2:按半小时加班、3:按小时加班、4:按半天加班、5:按天加班
KqglAssoOvertimeBasics basics = KqglAssoOvertimeBasics.builder().build().selectOne(new QueryWrapper<KqglAssoOvertimeBasics>().lambda().eq(KqglAssoOvertimeBasics::getOrgCode, org_code));
if(basics.getMinimumUnit() == 1) { company = "分钟"; }
else if(basics.getMinimumUnit() == 2) { company = "半小时";}
else if(basics.getMinimumUnit() == 3) { company = "小时";}
else if(basics.getMinimumUnit() == 4) { company = "半天";}
else if(basics.getMinimumUnit() == 5) { company = "天";}
//1:转调休;2:转加班费;3:转调休或加班费
if(lea.getCompensateId() == 1) { method="转调休"; }
else if(lea.getCompensateId() == 2) { method="转加班费"; }
else {method="转调休或加班费";}
rowData.remove(u);
rowData.add(u,lea.getStartTime() +"到"+ lea.getEndTime()+"加班"+lea.getDuration()+company+"["+method+"]");
//防止多运算
if(lea.getOrdernum() == lea.getTotals()) {
//加班补偿方式 1:转调休;2:转加班费;3:转调休或加班费
//工作日
if(ClockInTool.contains(ClockInTool.deleteArrayNull(ycqts),num)) {
if(lea.getOvertimeTypeId() == 1) {
if(lea.getCompensateId() == 1 || lea.getCompensateId() == 3) {
workingturncompenleave = workingturncompenleave + lea.getDuration();
}else if(lea.getCompensateId() == 2 || lea.getCompensateId() == 4) {
workingtransferovertime = workingtransferovertime + + lea.getDuration();
}
}
}
//休息日
if(ClockInTool.contains(ClockInTool.deleteArrayNull(xxts),num)) {
if(lea.getOvertimeTypeId() == 2) {
if(lea.getCompensateId() == 1 || lea.getCompensateId() == 3) {
restturncompenleave = restturncompenleave + lea.getDuration();
}else if(lea.getCompensateId() == 2 || lea.getCompensateId() == 4) {
resttransferovertime = resttransferovertime + lea.getDuration();
}
}
}
if(!ClockInTool.contains(ClockInTool.deleteArrayNull(ycqts),num) && !ClockInTool.contains(ClockInTool.deleteArrayNull(xxts),num)) {
if(lea.getOvertimeTypeId() == 3) {
if(lea.getCompensateId() == 1 || lea.getCompensateId() == 3) {
// holidayturncompenleave++;
holidayturncompenleave = holidayturncompenleave + lea.getDuration();
}else if(lea.getCompensateId() == 2 || lea.getCompensateId() == 4) {
// holidaytransferovertime++;
holidaytransferovertime = holidaytransferovertime + lea.getDuration();
}
}
}
}
}
}
/****/
////////
KqglAssoBcsz shif = KqglAssoBcsz.builder().build();
if(attgro.getPbfs() == 1){
int several = Integer.valueOf(ClockInTool.dateToWeek(num));//
KqglAssoTeshu tesu = KqglAssoTeshu.builder().build().selectOne(new QueryWrapper<KqglAssoTeshu>().lambda().eq(KqglAssoTeshu::getKqzid, attgro.getId()).eq(KqglAssoTeshu::getTsrq, num));
if(tesu == null) {
//获取该员工最新班次
KqglAssoZhoupaiban gudingpb = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId())
.eq(KqglAssoZhoupaiban::getType, several));
if(gudingpb!=null) {
shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, gudingpb.getBcid()));
}
}else {
if(tesu.getBcid() > 0) {
shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, tesu.getBcid()));
}
}
//获取该员工最新班次
KqglAssoZhoupaiban gudingpb = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId())
.eq(KqglAssoZhoupaiban::getType, several));
if(gudingpb != null) {
shif = KqglAssoBcsz.builder().build();
shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, gudingpb.getBcid()));
}
}else if(attgro.getPbfs() == 2){
KqglAssoPbmx pbmxx = KqglAssoPbmx.builder().build().selectOne(new QueryWrapper<KqglAssoPbmx>().lambda().eq(KqglAssoPbmx::getUserid, user.getEmpnum()).eq(KqglAssoPbmx::getData, num).eq(KqglAssoPbmx::getKqzid, attgro.getId()));
if(pbmxx != null && pbmxx.getBcid() != 0) {
shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, pbmxx.getBcid()));
}
}
if(shif != null && shif.getSxbcs() != null) {
System.out.println(shif.getSxbcs());
answer = shif.getSxbcs();//1=2次 2=4次 3=6次
//未打最后一次卡的时候 判断最后一次打卡时间是否在请假范围内 相对应减少下班缺卡次数
//最后一次应打卡时间
String latimeclock = "";
if(answer == 1) {
latimeclock = num +" "+ shif.getXbdk1();//ClockInTool.dealDateFormat(shif.getXbdk1(),3);
}else if(answer == 2) {
latimeclock = num +" "+ shif.getXbdk2();//ClockInTool.dealDateFormat(shif.getXbdk2(),3);
}else {
latimeclock = num +" "+ shif.getXbdk3();//ClockInTool.dealDateFormat(shif.getXbdk3(),3);
}
for(KqglAssoRelationSummary learel:leainv) {
boolean adopt = ClockInTool.hourMinuteBetween(latimeclock, learel.getStartTime().substring(0, 16), learel.getEndTime().substring(0, 16),"yyyy-MM-dd HH:mm");
if(adopt) {
xbqkcs = xbqkcs-1;
}
}
}
u++;
}
}else {
for (String num2 : range) {
if (ClockInTool.useArrayUtils(dkjtts, num2)) {
rowData.add("未排班并打卡");
}else{
rowData.add("未排班");
}
}
System.err.print("该员工未加入考勤组");
}
String[] range1=ClockInTool.listToString(rowData).split(";");
String[] noticesArray=range1[0].split(",");
noticesArray = ClockInTool.arrycopy(noticesArray);
for(int ct=noticesArray.length-1;ct<31;ct++) {
noticesArray[ct] = "";
if(ct<30) {
noticesArray = ClockInTool.arrycopy(noticesArray);
}
}
String department = "",position="";
if(user.getDepartment() != null) {
department = user.getDepartment();
}
if(user.getPosition() != null) {
position = user.getPosition();
}
KqglAssoMonthPunchSummary summary = KqglAssoMonthPunchSummary.builder().name(user.getEmpname()).num(user.getEmpnum()).dept(department)
.post(position).attGroup(attgroid).shift(answer).build();
summary.setDaysOnDuty(daysOnDuty);//应出勤天数
summary.setActualAttDays(Double.valueOf(dkjl));//实际出勤天数
summary.setDaysOff(daysOff);//休息天数
summary.setWorkingHours(workinghours);
summary.setLateTimes(Double.valueOf(latenum));//迟到次数
summary.setLateHours(Double.valueOf(latehours));//迟到时长(分钟)
summary.setSeriousLateTimes(seriouslatetimes);//严重迟到次数
summary.setSeriousLateHours(seriouslatehours);//严重迟到时长(分钟)
summary.setAbsenLateTimes(absenlatetimes);//旷工迟到次数
summary.setEarlyLeaveTimes(Double.valueOf(leanum));//早退次数
summary.setLengthEarlyLeave(Double.valueOf(leahours));//早退时长(分钟)
summary.setNumberWorkCardShortage(Double.valueOf(sbqkcs));//上班缺卡次数
summary.setNumberDutyCardShortage(Double.valueOf(xbqkcs < 0 ? 0 : xbqkcs));//下班缺卡次数
summary.setLengthBusinessTrip(traveltotal);//出差时长
summary.setTimeOut(egresstotal);//外出时长
summary.setTotalOvertimeHours(overtimetotal);//加班总时长
summary.setBelongYear(year);
summary.setBelongMonth(month);
summary.setOrgCode(org_code);
summary.setLastModified(new Date().getTime());
int absenteeismdays=0;
if(zjgzts-dkjl > 0) { absenteeismdays = zjgzts-dkjl; }
summary.setAbsenteeismDays(Double.valueOf(absenteeismdays));//旷工天数
summary.setWorkingTurnCompenLeave(workingturncompenleave);//工作日(转调休)
summary.setRestTurnCompenLeave(restturncompenleave);//休息日(转调休)
summary.setHolidayTurnCompenLeave(holidayturncompenleave);//节假日(转调休)
summary.setWorkingTransferOvertime(workingtransferovertime);//工作日(转加班费)
summary.setRestTransferOvertime(resttransferovertime);//休息日(转加班费)
summary.setHolidayTransferOvertime(holidaytransferovertime);//节假日(转加班费)
summary.setDay1(noticesArray[0]);
summary.setDay2(noticesArray[1]);
summary.setDay3(noticesArray[2]);
summary.setDay4(noticesArray[3]);
summary.setDay5(noticesArray[4]);
summary.setDay6(noticesArray[5]);
summary.setDay7(noticesArray[6]);
summary.setDay8(noticesArray[7]);
summary.setDay9(noticesArray[8]);
summary.setDay10(noticesArray[9]);
summary.setDay11(noticesArray[10]);
summary.setDay12(noticesArray[11]);
summary.setDay13(noticesArray[12]);
summary.setDay14(noticesArray[13]);
summary.setDay15(noticesArray[14]);
summary.setDay16(noticesArray[15]);
summary.setDay17(noticesArray[16]);
summary.setDay18(noticesArray[17]);
summary.setDay19(noticesArray[18]);
summary.setDay20(noticesArray[19]);
summary.setDay21(noticesArray[20]);
summary.setDay22(noticesArray[21]);
summary.setDay23(noticesArray[22]);
summary.setDay24(noticesArray[23]);
summary.setDay25(noticesArray[24]);
summary.setDay26(noticesArray[25]);
summary.setDay27(noticesArray[26]);
summary.setDay28(noticesArray[27]);
summary.setDay29(noticesArray[28]);
summary.setDay30(noticesArray[29]);
summary.setDay31(noticesArray[30]);
if(summaryid > 0) {
summary.setId(summaryid);
summary.updateById();
}else {
summary.insert();
}
}
}//循环对应公司所有员工
}//循环所有公司
}
}
...@@ -236,4 +236,7 @@ public class KqglAssoMonthPunchSummaryDto implements Serializable{ ...@@ -236,4 +236,7 @@ public class KqglAssoMonthPunchSummaryDto implements Serializable{
@ApiModelProperty(value = "表数据", example = "字段说明") @ApiModelProperty(value = "表数据", example = "字段说明")
List<BalanceSheetDataDto> balanceTo; List<BalanceSheetDataDto> balanceTo;
@ApiModelProperty(value = "表数据", example = "离职状态")
private Integer turnover_status;
} }
\ No newline at end of file
...@@ -133,6 +133,7 @@ ...@@ -133,6 +133,7 @@
LEFT JOIN zzgl_bmgw_m as gw on gw.id = emp.bmgw_id LEFT JOIN zzgl_bmgw_m as gw on gw.id = emp.bmgw_id
LEFT JOIN zzgl_bmgw_m as c ON c.id = gw.up_id LEFT JOIN zzgl_bmgw_m as c ON c.id = gw.up_id
where emp.org_code = #{orgcode} where emp.org_code = #{orgcode}
<!-- and emp.emp_num = 12 -->
<!-- and emp.job_status != 3 --> <!-- and emp.job_status != 3 -->
</select> </select>
......
...@@ -139,6 +139,8 @@ ...@@ -139,6 +139,8 @@
<result column="org_code" property="orgCode" /> <result column="org_code" property="orgCode" />
<result column="last_modified" property="lastModified" /> <result column="last_modified" property="lastModified" />
<result column="turnover_status" property="turnover_status" />
<collection property="balanceTo" ofType="cn.timer.api.dto.kqmk.BalanceSheetDataDto"> <collection property="balanceTo" ofType="cn.timer.api.dto.kqmk.BalanceSheetDataDto">
<id column="yzid" property="yzid"/> <id column="yzid" property="yzid"/>
<result column="leaverulesid" property="leaverulesid"/> <result column="leaverulesid" property="leaverulesid"/>
...@@ -276,7 +278,8 @@ ...@@ -276,7 +278,8 @@
<select id="AttendanceSummaryData" resultMap="SummarydataMap"> <select id="AttendanceSummaryData" resultMap="SummarydataMap">
select sum.*, select sum.*,
(select kqz.name from kqgl_main_kqz kqz where kqz.id = sum.att_group) as attname (select kqz.name from kqgl_main_kqz kqz where kqz.id = sum.att_group) as attname,
IFNULL((select em.job_status from yggl_main_lzb em where em.emp_num = sum.num and em.org_code = sum.org_code),0) as turnover_status
from kqgl_asso_month_punch_summary sum from kqgl_asso_month_punch_summary sum
where sum.org_code = #{param.orgCode} where sum.org_code = #{param.orgCode}
and sum.belong_year = #{param.year} and sum.belong_year = #{param.year}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment