| | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | import com.product.core.transfer.Transactional; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | public BaseDao baseDao; |
| | | /** |
| | | * 先查出历史打卡记录 |
| | | * @param cpage |
| | | * @param pagesize |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | @Transactional |
| | | public boolean signIn(FieldSetEntity fse) throws BaseException{ |
| | | fse.setTableName(MobileCoreConst.TABLE_PUNCH_RECORD); |
| | | SystemUser user=SpringMVCContextHolder.getCurrentUser(); |
| | | Date d = new Date(); |
| | | DataTableEntity dt=signInList(fse); |
| | | if(user!=null) { |
| | | fse.setValue(MobileCoreConst.ORG_LEVEL_UUID, user.getOrg_level_uuid()); |
| | | fse.setValue(MobileCoreConst.DEPT_UUID, user.getDept_uuid()); |
| | | fse.setValue(MobileCoreConst.CREATED_UTC_DATETIME, d); |
| | | } |
| | | fse.setValue(MobileCoreConst.FIELD_PUNCH_TYPE,1);//手机打卡 |
| | | //获取当前时间打卡记录 |
| | | FieldSetEntity fs_record=signInList(); |
| | | //获取打卡设置 |
| | | FieldSetEntity fs_time = baseDao.getFieldSetByFilter(MobileCoreConst.TABLE_PUNCH_TIME, "punch_site_uuid=?", new Object[]{fse.getString("punch_congfig_uuid")}, false); |
| | | if (!StringUtils.isEmpty(fs_time.getString("morning_work_off"))&&!StringUtils.isEmpty(fs_time.getString("afternoon_work"))){ |
| | | //四次打卡保存规则 |
| | | if (FieldSetEntity.isEmpty(fs_record)){ |
| | | //未查询到打开记录新建打卡记录 |
| | | if(user!=null) { |
| | | fse.setValue(MobileCoreConst.ORG_LEVEL_UUID, user.getOrg_level_uuid()); |
| | | fse.setValue(MobileCoreConst.DEPT_UUID, user.getDept_uuid()); |
| | | fse.setValue(MobileCoreConst.CREATED_BY, user.getUser_id()); |
| | | fse.setValue(MobileCoreConst.CREATED_UTC_DATETIME, d); |
| | | } |
| | | fse.setValue(MobileCoreConst.FIELD_PUNCH_TYPE,1);//手机打卡 |
| | | if (!StringUtils.isEmpty(fse.getDate("punch_time_one"))){ |
| | | if (dataCompareTo(fse.getDate("punch_time_one"),fs_time.getDate("morning_work_off"))){ |
| | | fse.setValue("punch_time_one",fse.getDate("punch_time_one")); |
| | | fse.setValue("punch_range_one",fse.getString("punch_range_one")); |
| | | }else { |
| | | fse.setValue("punch_time_three",fse.getDate("punch_time_one")); |
| | | fse.setValue("punch_range_three",fse.getString("punch_range_one")); |
| | | fse.setValue("punch_time_one",null); |
| | | fse.setValue("punch_range_one",null); |
| | | } |
| | | } |
| | | if (!StringUtils.isEmpty(fse.getDate("punch_time_four"))){ |
| | | if (dataCompareTo(fse.getDate("punch_time_four"),fs_time.getDate("afternoon_work_off"))){ |
| | | fse.setValue("punch_time_two",fse.getDate("punch_time_four")); |
| | | fse.setValue("punch_range_two",fse.getString("punch_range_four")); |
| | | }else { |
| | | fse.setValue("punch_time_two",null); |
| | | fse.setValue("punch_range_two",null); |
| | | fse.setValue("punch_time_four",fse.getDate("punch_time_four")); |
| | | fse.setValue("punch_range_four",fse.getString("punch_range_four")); |
| | | } |
| | | } |
| | | fse.setTableName(MobileCoreConst.TABLE_PUNCH_RECORD); |
| | | return baseDao.saveFieldSetEntity(fse); |
| | | } |
| | | else { |
| | | //查询到已有打开记录新建打卡记录 |
| | | if (!StringUtils.isEmpty(fse.getDate("punch_time_one"))){ |
| | | //判断上班打卡打卡规则:1、上午上班未打卡 2、未超过上午下班时间 3、上午未打下班卡 则为上午上班卡否则为下午上班卡 |
| | | |
| | | if(dataCompareTo(fse.getDate("punch_time_one"),fs_time.getDate("morning_work_off")) |
| | | &&StringUtils.isEmpty(fs_record.getString("punch_time_one")) |
| | | &&StringUtils.isEmpty(fs_record.getString("punch_time_two"))){ |
| | | fs_record.setValue("punch_time_one", fse.getDate("punch_time_one")); |
| | | fs_record.setValue("punch_range_one", fse.getString("punch_range_one")); |
| | | }else { |
| | | fs_record.setValue("punch_time_three", fse.getDate("punch_time_one")); |
| | | fs_record.setValue("punch_range_three", fse.getString("punch_range_one")); |
| | | } |
| | | } |
| | | //判断下班打卡班打卡规则:1、上午下班未打卡 2、未超过上午下班时间 3、下午午未打上班卡 则为上午下班卡否则为下午下班卡 |
| | | if (!StringUtils.isEmpty(fse.getDate("punch_time_four"))){ |
| | | if(dataCompareTo(fse.getDate("punch_time_four"),fs_time.getDate("afternoon_work_off")) |
| | | &&StringUtils.isEmpty(fs_record.getDate("punch_time_two")) |
| | | &&StringUtils.isEmpty(fs_record.getDate("punch_time_three"))){ |
| | | fs_record.setValue("punch_time_two", fse.getDate("punch_time_four")); |
| | | fs_record.setValue("punch_range_two", fse.getString("punch_range_four")); |
| | | }else { |
| | | fs_record.setValue("punch_time_four", fse.getDate("punch_time_four")); |
| | | fs_record.setValue("punch_range_four", fse.getString("punch_range_four")); |
| | | } |
| | | } |
| | | return baseDao.saveFieldSetEntity(fs_record); |
| | | } |
| | | }else { |
| | | //两次打卡保存规则 |
| | | if (FieldSetEntity.isEmpty(fs_record)){ |
| | | //未查询到打开记录新建打卡记录 |
| | | if(user!=null) { |
| | | fse.setValue(MobileCoreConst.ORG_LEVEL_UUID, user.getOrg_level_uuid()); |
| | | fse.setValue(MobileCoreConst.DEPT_UUID, user.getDept_uuid()); |
| | | fse.setValue(MobileCoreConst.CREATED_UTC_DATETIME, d); |
| | | fse.setValue(MobileCoreConst.CREATED_BY, user.getUser_id()); |
| | | } |
| | | fse.setValue(MobileCoreConst.FIELD_PUNCH_TYPE,1);//手机打卡 |
| | | fse.setTableName(MobileCoreConst.TABLE_PUNCH_RECORD); |
| | | return baseDao.saveFieldSetEntity(fse); |
| | | }else { |
| | | //查询到已有打开记录新建打卡记录 |
| | | if (!StringUtils.isEmpty(fse.getString("punch_time_one"))){ |
| | | fs_record.setValue("punch_time_one",fse.getDate("punch_time_one")); |
| | | fs_record.setValue("punch_range_one",fse.getString("punch_range_one")); |
| | | |
| | | return baseDao.saveFieldSetEntity(fse); |
| | | } |
| | | } |
| | | if (!StringUtils.isEmpty(fse.getString("punch_time_four"))){ |
| | | fs_record.setValue("punch_time_four",fse.getDate("punch_time_four")); |
| | | fs_record.setValue("punch_range_four",fse.getString("punch_range_four")); |
| | | } |
| | | |
| | | return baseDao.saveFieldSetEntity(fs_record); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 将两个时间得时分秒进行对比true则为前者早 否则就是一样时间或者后者早 |
| | | * @param a |
| | | * @param b |
| | | * @return |
| | | */ |
| | | private boolean dataCompareTo(Date a,Date b){ |
| | | a.setTime(a.getTime() % (24 * 60 * 60 * 1000)); // 设置date2为当天的00:00:00 |
| | | b.setTime(b.getTime() % (24 * 60 * 60 * 1000)); // 设置date2为当天的00:00:00 |
| | | if (a.compareTo(b) < 0) { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | /** |
| | | * 查出指定日期打卡记录 |
| | | * @param cpage |
| | |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public DataTableEntity signInList(FieldSetEntity fse) throws BaseException{ |
| | | public FieldSetEntity signInList() throws BaseException{ |
| | | SystemUser user=SpringMVCContextHolder.getCurrentUser(); |
| | | Date d = new Date(); |
| | | String str = sdf.format(d); //将日期转换为字符串且格式按照之前制定的 |
| | | StringBuilder sql=new StringBuilder(); |
| | | sql.append("select * from ").append(MobileCoreConst.TABLE_PUNCH_RECORD) |
| | | .append(" where created_by=? and DATE_FORMAT(created_utc_datetime,'%Y-%m-%d')=? "); |
| | | |
| | | DataTableEntity dt=baseDao.listTable(sql.toString(), new Object[] {user.getUser_id(),str}); |
| | | return dt; |
| | | FieldSetEntity fs = baseDao.getFieldSetByFilter(MobileCoreConst.TABLE_PUNCH_RECORD, "created_by=? and DATE_FORMAT(created_utc_datetime,'%Y-%m-%d')=?", new Object[]{user.getUser_id(), str}, false); |
| | | return fs; |
| | | } |
| | | /** |
| | | * 查询公司定义的考勤点 |