| | |
| | | package com.product.administration.service; |
| | | |
| | | |
| | | |
| | | |
| | | import java.sql.Timestamp; |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | |
| | | |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUnit; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | |
| | | @Autowired |
| | | BaseDao baseDao; |
| | | |
| | | |
| | | /** |
| | | * 考勤打卡列表 |
| | | * @param fse |
| | | * @return |
| | | */ |
| | | public DataTableEntity listRecordInfo(FieldSetEntity fse) { |
| | | DataTableEntity dt=baseDao.listTable(CmnConst.PRODUCT_OA_PUNCH_RECORD, "created_by=?", new Object[] {SpringMVCContextHolder.getCurrentUser().getUser_id()}, null, null, fse.getInteger(CmnConst.PAGESIZE), fse.getInteger(CmnConst.CPAGE)); |
| | | public DataTableEntity listRecordInfo(FieldSetEntity fse) throws ParseException { |
| | | DataTableEntity dt=baseDao.listTable(CmnConst.PRODUCT_OA_PUNCH_RECORD, "created_by=?", new Object[] {SpringMVCContextHolder.getCurrentUser().getUser_id()}, null, CmnConst.CREATED_UTC_DATETIME+" DESC", fse.getInteger(CmnConst.PAGESIZE), fse.getInteger(CmnConst.CPAGE)); |
| | | for (int i=0;i<dt.getRows();i++){ |
| | | FieldSetEntity fieldSetEntity = dt.getData().get(i); |
| | | String punch_time_one = fieldSetEntity.getValue("punch_time_one").toString(); |
| | | Date date1=new Date(punch_time_one); |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | String sign_date = dateFormat.format(date1); |
| | | fieldSetEntity.setValue("sign_date",sign_date); |
| | | DateFormat dateFormatGet = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | |
| | | //获取早退迟到的分钟数 |
| | | List<Object>param1=new ArrayList<>(); |
| | | param1.add(fieldSetEntity.getValue("created_by").toString()); |
| | | param1.add(fieldSetEntity.getValue("punch_congfig_uuid").toString()); |
| | | param1.add(fieldSetEntity.getValue("created_by").toString()+","); |
| | | |
| | | //获取使用到的设置规则 |
| | | StringBuilder sbPunchTime=new StringBuilder(); |
| | | sbPunchTime.append(" SELECT c.* "); |
| | | sbPunchTime.append(" FROM ( "); |
| | | sbPunchTime.append(" SELECT d.* "); |
| | | sbPunchTime.append(" FROM product_oa_punch_time d "); |
| | | sbPunchTime.append(" left JOIN product_oa_punch_record b "); |
| | | sbPunchTime.append(" on d.punch_site_uuid=b.punch_congfig_uuid and d.created_by=? where d.punch_site_uuid= ? "); |
| | | sbPunchTime.append(" ) c "); |
| | | sbPunchTime.append(" where c.uuid in ( "); |
| | | sbPunchTime.append(" SELECT DISTINCT uuid "); |
| | | sbPunchTime.append(" FROM product_oa_punch_time "); |
| | | sbPunchTime.append(" where LOCATE(?, concat(attendance_object,','))>0 "); |
| | | sbPunchTime.append(" ) "); |
| | | DataTableEntity dataTableEntity = baseDao.listTable(sbPunchTime.toString(), param1.toArray()); |
| | | |
| | | |
| | | //处理补卡的情况 |
| | | List<Object>param2=new ArrayList<>(); |
| | | param2.add(fieldSetEntity.getValue("created_by").toString()); |
| | | param2.add(sign_date); |
| | | |
| | | StringBuilder sbReplenish=new StringBuilder(); |
| | | sbReplenish.append(" SELECT T1.id,T1.uuid,T1.created_by,T1.applicant,T1.replenish_date,T1.reason,"); |
| | | sbReplenish.append(" SUBSTRING_INDEX( SUBSTRING_INDEX( T1.replacement_card_type, ',', T2.digit + 1 ), ',',- 1 ) AS type "); |
| | | sbReplenish.append(" FROM product_oa_replenish_punch T1 "); |
| | | sbReplenish.append(" JOIN ( SELECT 0 AS digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 ) T2"); |
| | | sbReplenish.append(" ON T2.digit < ( length( T1.replacement_card_type )- length( REPLACE ( T1.replacement_card_type, ',', '' ))+ 1 )"); |
| | | sbReplenish.append(" where t1.created_by=? "); |
| | | sbReplenish.append(" and DATE_FORMAT( t1.replenish_date, '%Y-%m-%d' )=? "); |
| | | DataTableEntity dataTableEntity1 = baseDao.listTable(sbReplenish.toString(), param2.toArray()); |
| | | if(dataTableEntity1.getRows()!=0){ |
| | | |
| | | for(int j=0;j<dataTableEntity1.getRows();j++){ |
| | | String type = dataTableEntity1.getData().get(j).getValue("type").toString(); |
| | | if(type.equals("1")){ |
| | | String morning_work = dataTableEntity.getData().get(0).getValue("morning_work").toString(); |
| | | Date parse = dateFormatGet.parse(morning_work); |
| | | fieldSetEntity.setValue("punch_time_one", new Timestamp(parse.getTime())); |
| | | } |
| | | |
| | | if(type.equals("2")){ |
| | | String morning_work_off = dataTableEntity.getData().get(0).getValue("morning_work_off").toString(); |
| | | Date parse = dateFormatGet.parse(morning_work_off); |
| | | fieldSetEntity.setValue("punch_time_two", new Timestamp(parse.getTime())); |
| | | } |
| | | |
| | | if(type.equals("3")){ |
| | | String afternoon_work = dataTableEntity.getData().get(0).getValue("afternoon_work").toString(); |
| | | Date parse = dateFormatGet.parse(afternoon_work); |
| | | fieldSetEntity.setValue("punch_time_three", new Timestamp(parse.getTime())); |
| | | } |
| | | |
| | | if(type.equals("4")){ |
| | | String afternoon_work_off = dataTableEntity.getData().get(0).getValue("afternoon_work_off").toString(); |
| | | Date parse = dateFormatGet.parse(afternoon_work_off); |
| | | fieldSetEntity.setValue("punch_time_four", new Timestamp(parse.getTime())); |
| | | } |
| | | } |
| | | } |
| | | |
| | | long beLate1 = 0; |
| | | long beLate2 = 0; |
| | | long beEarily1 = 0; |
| | | long beEarily2 = 0; |
| | | if(dataTableEntity.getRows()!=0){ |
| | | |
| | | String morning_work=""; |
| | | String morning_work_off=""; |
| | | String afternoon_work=""; |
| | | String afternoon_work_off=""; |
| | | Date morning_work_date; |
| | | Date morning_work_off_date; |
| | | Date afternoon_work_date; |
| | | Date afternoon_work_off_date; |
| | | |
| | | DateTime punch_time_one_date; |
| | | DateTime punch_time_two_date; |
| | | DateTime punch_time_three_date; |
| | | DateTime punch_time_four_date; |
| | | |
| | | SimpleDateFormat dateFormatHHmmss = new SimpleDateFormat("HH:mm:ss"); |
| | | |
| | | StringBuilder lateSb=new StringBuilder(); |
| | | StringBuilder earilySb=new StringBuilder(); |
| | | StringBuilder supereffective_distance=new StringBuilder(); |
| | | |
| | | |
| | | if(!ObjectUtil.isNotEmpty(dataTableEntity.getData().get(0).getValue("morning_work_off")) && !ObjectUtil.isNotEmpty(dataTableEntity.getData().get(0).getValue("afternoon_work"))){ |
| | | |
| | | morning_work = dataTableEntity.getData().get(0).getValue("morning_work").toString(); |
| | | afternoon_work_off = dataTableEntity.getData().get(0).getValue("afternoon_work_off").toString(); |
| | | morning_work_date= DateUtil.parse(morning_work.split(" ")[1]); |
| | | afternoon_work_off_date= DateUtil.parse(afternoon_work_off.split(" ")[1]); |
| | | int distance = Integer.parseInt(dataTableEntity.getData().get(0).getValue("distance").toString()); |
| | | if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_one"))){ |
| | | String punch_time_one1 = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_one")); |
| | | punch_time_one_date = DateUtil.parse(punch_time_one1); |
| | | if(punch_time_one_date.after(morning_work_date)){ |
| | | beLate1 = DateUtil.between(punch_time_one_date, morning_work_date, DateUnit.MINUTE); |
| | | lateSb.append("迟到:"+beLate1+"分钟"); |
| | | //计算超出的有效距离 |
| | | int punch_range_one = Integer.parseInt(fieldSetEntity.getValue("punch_range_one").toString()); |
| | | if(punch_range_one>distance){ |
| | | int distanceMorning = punch_range_one- distance; |
| | | fieldSetEntity.setValue("supereffective_distance","上班超有效距离:"+distanceMorning); |
| | | } |
| | | } |
| | | |
| | | }else { |
| | | lateSb.append("上班未打卡"); |
| | | } |
| | | |
| | | if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_four"))){ |
| | | String punch_time_four = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_four")); |
| | | punch_time_four_date = DateUtil.parse(punch_time_four); |
| | | if(punch_time_four_date.before(afternoon_work_off_date)){ |
| | | beEarily2 = DateUtil.between(punch_time_four_date, afternoon_work_off_date, DateUnit.MINUTE); |
| | | earilySb.append("早退:"+beEarily2+"分钟"); |
| | | int punch_range_four = Integer.parseInt(fieldSetEntity.getValue("punch_range_four").toString()); |
| | | if(punch_range_four>distance){ |
| | | int distanceMorning = punch_range_four- distance; |
| | | fieldSetEntity.setValue("supereffective_distance","下班超有效距离:"+distanceMorning); |
| | | } |
| | | } |
| | | |
| | | }else { |
| | | earilySb.append("下班未打卡"); |
| | | } |
| | | |
| | | }else { |
| | | |
| | | morning_work = dataTableEntity.getData().get(0).getValue("morning_work").toString(); |
| | | morning_work_date= DateUtil.parse(morning_work.split(" ")[1]); |
| | | morning_work_off = dataTableEntity.getData().get(0).getValue("morning_work_off").toString(); |
| | | morning_work_off_date= DateUtil.parse(morning_work_off.split(" ")[1]); |
| | | afternoon_work =dataTableEntity.getData().get(0).getValue("afternoon_work").toString(); |
| | | afternoon_work_date= DateUtil.parse(afternoon_work.split(" ")[1]); |
| | | afternoon_work_off = dataTableEntity.getData().get(0).getValue("afternoon_work_off").toString(); |
| | | afternoon_work_off_date= DateUtil.parse(afternoon_work_off.split(" ")[1]); |
| | | |
| | | |
| | | int distance = Integer.parseInt(dataTableEntity.getData().get(0).getValue("distance").toString()); |
| | | |
| | | if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_one"))){ |
| | | String punch_time_one1 = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_one")); |
| | | punch_time_one_date = DateUtil.parse(punch_time_one1); |
| | | if(punch_time_one_date.after(morning_work_date)){ |
| | | beLate1 = DateUtil.between(punch_time_one_date, morning_work_date, DateUnit.MINUTE); |
| | | lateSb.append("早上班迟到:"+beLate1+" "); |
| | | int punch_range_one = Integer.parseInt(fieldSetEntity.getValue("punch_range_one").toString()); |
| | | if(punch_range_one>distance){ |
| | | int distanceMorning = punch_range_one- distance; |
| | | supereffective_distance.append("早上班超有效距离:"+distanceMorning); |
| | | } |
| | | |
| | | } |
| | | |
| | | }else { |
| | | lateSb.append("早上班未打卡"+" "); |
| | | |
| | | } |
| | | |
| | | if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_two"))){ |
| | | String punch_time_two= dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_two")); |
| | | punch_time_two_date = DateUtil.parse(punch_time_two); |
| | | if(punch_time_two_date.before(morning_work_off_date)){ |
| | | beEarily1 = DateUtil.between(punch_time_two_date, morning_work_off_date, DateUnit.MINUTE); |
| | | earilySb.append("早下班早退:"+beEarily1+" "); |
| | | int punch_range_two = Integer.parseInt(fieldSetEntity.getValue("punch_range_two").toString()); |
| | | if(punch_range_two>distance){ |
| | | int distanceMorningoff = punch_range_two- distance; |
| | | supereffective_distance.append("早下班超有效距离:"+distanceMorningoff); |
| | | } |
| | | } |
| | | |
| | | }else { |
| | | earilySb.append("早下班未打卡"+" "); |
| | | } |
| | | if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_three"))){ |
| | | String punch_time_three = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_three")); |
| | | punch_time_three_date = DateUtil.parse(punch_time_three); |
| | | if(punch_time_three_date.after(afternoon_work_date)){ |
| | | beLate2 = DateUtil.between(punch_time_three_date, afternoon_work_date, DateUnit.MINUTE); |
| | | lateSb.append("下午上班迟到:"+beLate2+" "); |
| | | int punch_range_three = Integer.parseInt(fieldSetEntity.getValue("punch_range_three").toString()); |
| | | if(punch_range_three>distance){ |
| | | int distanceAfternoon = punch_range_three- distance; |
| | | supereffective_distance.append("下午上班超有效距离:"+distanceAfternoon); |
| | | } |
| | | } |
| | | }else { |
| | | lateSb.append("早上班未打卡"+" "); |
| | | } |
| | | if(ObjectUtil.isNotEmpty(fieldSetEntity.getValue("punch_time_four"))){ |
| | | String punch_time_four = dateFormatHHmmss.format(fieldSetEntity.getValue("punch_time_four")); |
| | | punch_time_four_date = DateUtil.parse(punch_time_four); |
| | | if(punch_time_four_date.before(afternoon_work_off_date)){ |
| | | beEarily2 = DateUtil.between(punch_time_four_date, afternoon_work_off_date, DateUnit.MINUTE); |
| | | earilySb.append("下午下班早退:"+beEarily2+" "); |
| | | int punch_range_four = Integer.parseInt(fieldSetEntity.getValue("punch_range_four").toString()); |
| | | if(punch_range_four>distance){ |
| | | int distanceAfternoonoff = punch_range_four- distance; |
| | | supereffective_distance.append("下午下班超有效距离:"+distanceAfternoonoff); |
| | | } |
| | | |
| | | } |
| | | }else { |
| | | earilySb.append("下午下班未打卡"+" "); |
| | | } |
| | | |
| | | } |
| | | fieldSetEntity.setValue("be_late",lateSb); |
| | | fieldSetEntity.setValue("ealy_leave",earilySb); |
| | | fieldSetEntity.setValue("supereffective_distance",supereffective_distance.toString()); |
| | | } |
| | | |
| | | } |
| | | dt.setFieldFormat("punch_time_one", " HH:mm"); |
| | | dt.setFieldFormat("punch_time_two", " HH:mm"); |
| | | dt.setFieldFormat("punch_time_three", " HH:mm"); |
| | | dt.setFieldFormat("punch_time_four", " HH:mm"); |
| | | baseDao.loadPromptData(dt); |
| | | return dt; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 考勤打卡详情 |
| | | * @param uuid |
| | | * @return |
| | | * @return |
| | | */ |
| | | public FieldSetEntity findRecordInfo(String uuid) { |
| | | return baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_PUNCH_RECORD, uuid, true); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 考勤打卡新增 |
| | | * @param fse |
| | |
| | | */ |
| | | public String addRecordInfo(FieldSetEntity fse) { |
| | | SimpleDateFormat df = new SimpleDateFormat(CmnConst.YYYYMMDDHHMMSS); |
| | | |
| | | |
| | | SystemUser currentUser=SpringMVCContextHolder.getCurrentUser(); //获取打卡人 |
| | | Date created_datetime=fse.getDate("created_datetime"); //获取打卡时间 |
| | | // Date created_datetime=new Date(); //获取打卡时间 |
| | | String string_created_datetime=df.format(created_datetime); //时间转string |
| | | |
| | | |
| | | //获取公司打卡时间配置信息 |
| | | FieldSetEntity fseCompanyPunch=baseDao.getFieldSetEntityByFilter("product_oa_punch_time", "org_level_uuid=?", new Object[] {currentUser.getOrg_level_uuid()}, false); |
| | | if (fseCompanyPunch==null) { |
| | | throw new BaseException(SystemCode.SYSTEM_CONMAPNY_PUNCH_NO_EXIST.getValue(), SystemCode.SYSTEM_CONMAPNY_PUNCH_NO_EXIST.getText(), this.getClass(), "addRecordInfo"); |
| | | } |
| | | |
| | | |
| | | //获取当天打卡信息 |
| | | FieldSetEntity fsePunchInfo=baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_OA_PUNCH_RECORD, "created_by=? and DATE_FORMAT(created_utc_datetime,'%Y-%m-%d')like ?", new Object[] {currentUser.getUser_id(),string_created_datetime.substring(0, 10)+"%"}, false); |
| | | if (fsePunchInfo==null) { |
| | |
| | | //新增打卡信息 |
| | | return baseDao.add(fseNewPunchInfo); |
| | | }else { |
| | | |
| | | |
| | | //打卡模式(0:双卡 1:四卡) |
| | | int punchMode=0; |
| | | if (StringUtils.isEmpty(fseCompanyPunch.getString("work_time_two"))) { |
| | | punchMode=1; |
| | | } |
| | | |
| | | |
| | | String punch_time_one=fsePunchInfo.getDate("punch_time_one", CmnConst.YYYYMMDDHHMMSS); |
| | | String punch_time_two=fsePunchInfo.getDate("punch_time_two", CmnConst.YYYYMMDDHHMMSS); |
| | | String punch_time_three=fsePunchInfo.getDate("punch_time_three", CmnConst.YYYYMMDDHHMMSS); |
| | |
| | | } |
| | | list.add(string_created_datetime); |
| | | Collections.sort(list); |
| | | |
| | | |
| | | for (int i = 0; i < list.size(); i++) { |
| | | if (punchMode==1) { |
| | | if (i==0) { |
| | |
| | | return fsePunchInfo.getUUID(); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |