|
@@ -8,6 +8,8 @@ import org.jeecg.modules.geke.attendance.mapper.AttendanceMapper;
|
|
|
import org.jeecg.modules.geke.attendance.service.IAttendanceService;
|
|
|
import org.jeecg.modules.geke.attendanceRule.entity.AttendanceRule;
|
|
|
import org.jeecg.modules.geke.attendanceRule.service.IAttendanceRuleService;
|
|
|
+import org.jeecg.modules.geke.statutoryleave.entity.StatutoryLeave;
|
|
|
+import org.jeecg.modules.geke.statutoryleave.service.IStatutoryLeaveService;
|
|
|
import org.jeecg.modules.geke.userShift.entity.UserDept;
|
|
|
import org.jeecg.modules.geke.userShift.mapper.UserShiftMapper;
|
|
|
import org.jeecg.modules.geke.userShift.service.IUserShiftService;
|
|
@@ -47,6 +49,9 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
|
|
|
@Autowired
|
|
|
private IAttendanceRuleService attendanceRuleService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IStatutoryLeaveService statutoryLeaveService;
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
public Map<String,Object> queryList(String userid, String date) throws ParseException {
|
|
@@ -62,54 +67,61 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
|
|
|
int year = calendar.get(calendar.YEAR);//年份
|
|
|
int month = calendar.get(calendar.MONTH) + 1;//月份
|
|
|
String cont = "2";
|
|
|
- String ed="0";
|
|
|
+ String jq="";
|
|
|
+ StatutoryLeave one = statutoryLeaveService.getOne(date);
|
|
|
+ if (one!=null){
|
|
|
+ jq=one.getType();
|
|
|
+ }
|
|
|
int actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//获取前端传过来的时间获取月份的总天数
|
|
|
AttendanceRule attendanceRule = attendanceRuleService.UserRule(userid);
|
|
|
- if (attendanceRule!=null){
|
|
|
- ed="1";
|
|
|
- }else {
|
|
|
- List<UserDept> depNamesByUserIds = userShiftMapper.getDepNamesByUserIds(Arrays.asList(userid.split(",")));
|
|
|
- List<String>deps=new ArrayList<>();
|
|
|
- depNamesByUserIds.forEach(st->{
|
|
|
- deps.add(st.getId());
|
|
|
- });
|
|
|
- AttendanceRule attendanceRule1 = attendanceRuleService.UserRules(deps);
|
|
|
- if (attendanceRule1!=null){
|
|
|
- attendanceRule=attendanceRule1;
|
|
|
- ed="1";
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
|
|
|
- if (ed.equals("1")){
|
|
|
+ if (attendanceRule!=null){
|
|
|
if (attendanceRule.getType().equals("1")){//判断规则类型1,固定时间上下班
|
|
|
- String state="1";
|
|
|
- String[] split = attendanceRule.getWorkDay().split(",");//获取工作日
|
|
|
- Date da = DateUtils.str2Date(date, sdf);
|
|
|
- for (String day:split){
|
|
|
- if (day.equals(String.valueOf(da.getDay()))){
|
|
|
- state="2";
|
|
|
- break;
|
|
|
+ if (jq.equals("1")){//优先判断是否存在法定节假日
|
|
|
+ if (attendances != null && attendances.size() > 1) {//判断打卡记录是否有上下班
|
|
|
+ if (exitprio(attendances).equals("1")) {//判断打卡记录是否异常,1,异常
|
|
|
+ cont = "1";
|
|
|
+ } else {
|
|
|
+ Date startDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendanceRule.getStartDate()), sd);
|
|
|
+ Date endDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendanceRule.getEndDate()), sd);
|
|
|
+ Date usStartDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendances.get(0).getUsDate()), sd);
|
|
|
+ Date usEndDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendances.get(attendances.size() - 1).getUsDate()), sd);
|
|
|
+ if (usStartDate.getTime() > startDate.getTime() || usEndDate.getTime() < endDate.getTime()) {
|
|
|
+ cont = "1";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ cont = "1";
|
|
|
}
|
|
|
- }
|
|
|
- if (state.equals("2")){//在工作日内
|
|
|
- if (attendances!=null&&attendances.size()>1){//判断打卡记录是否有上下班
|
|
|
- if (exitprio(attendances).equals("1")){//判断打卡记录是否异常,1,异常
|
|
|
- cont="1";
|
|
|
- }else {
|
|
|
- Date startDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRule.getStartDate()), sd);
|
|
|
- Date endDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRule.getEndDate()), sd);
|
|
|
- Date usStartDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendances.get(0).getUsDate()), sd);
|
|
|
- Date usEndDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendances.get(attendances.size() - 1).getUsDate()), sd);
|
|
|
- if (usStartDate.getTime()>startDate.getTime()||usEndDate.getTime()<endDate.getTime()){
|
|
|
- cont="1";
|
|
|
+ }else if (jq.equals("")) {
|
|
|
+ String state = "1";
|
|
|
+ String[] split = attendanceRule.getWorkDay().split(",");//获取工作日
|
|
|
+ Date da = DateUtils.str2Date(date, sdf);
|
|
|
+ for (String day : split) {
|
|
|
+ if (day.equals(String.valueOf(da.getDay()))) {
|
|
|
+ state = "2";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (state.equals("2") || jq.equals("1")) {//在工作日内
|
|
|
+ if (attendances != null && attendances.size() > 1) {//判断打卡记录是否有上下班
|
|
|
+ if (exitprio(attendances).equals("1")) {//判断打卡记录是否异常,1,异常
|
|
|
+ cont = "1";
|
|
|
+ } else {
|
|
|
+ Date startDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendanceRule.getStartDate()), sd);
|
|
|
+ Date endDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendanceRule.getEndDate()), sd);
|
|
|
+ Date usStartDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendances.get(0).getUsDate()), sd);
|
|
|
+ Date usEndDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendances.get(attendances.size() - 1).getUsDate()), sd);
|
|
|
+ if (usStartDate.getTime() > startDate.getTime() || usEndDate.getTime() < endDate.getTime()) {
|
|
|
+ cont = "1";
|
|
|
+ }
|
|
|
}
|
|
|
+ } else {
|
|
|
+ cont = "1";
|
|
|
}
|
|
|
- }else {
|
|
|
- cont="1";
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}else if (attendanceRule.getType().equals("2")){//规则类型 2,按班次上下班
|
|
|
List<Map<String,Object>> oneUserShift = userShiftMapper.getOneUserShift(userid, date,"");
|
|
|
if (oneUserShift!=null&&oneUserShift.size()>0){
|
|
@@ -129,17 +141,8 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
|
|
|
cont="1";
|
|
|
}
|
|
|
}
|
|
|
- }else if (attendanceRule.getType().equals("3")){//规则类型 3,自由上下班
|
|
|
- String states="1";
|
|
|
- String[] split = attendanceRule.getWorkDay().split(",");//获取工作日
|
|
|
- Date da = DateUtils.str2Date(date, sdf);
|
|
|
- for (String day:split){
|
|
|
- if (day.equals(String.valueOf(da.getDay()))){
|
|
|
- states="2";
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (states.equals("2")) {//在工作日内
|
|
|
+ }else if (attendanceRule.getType().equals("3")) {//规则类型 3,自由上下班
|
|
|
+ if (jq.equals("1")) {//优先判断是否存在法定节假日
|
|
|
if (attendances != null && attendances.size() > 1) {//判断打卡记录是否有上下班
|
|
|
if (exitprio(attendances).equals("1")) {//判断打卡记录是否异常,1,异常
|
|
|
cont = "1";
|
|
@@ -147,104 +150,150 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda
|
|
|
} else {
|
|
|
cont = "1";
|
|
|
}
|
|
|
+ } else if (jq.equals("")) {
|
|
|
+ String states = "1";
|
|
|
+ String[] split = attendanceRule.getWorkDay().split(",");//获取工作日
|
|
|
+ Date da = DateUtils.str2Date(date, sdf);
|
|
|
+ for (String day : split) {
|
|
|
+ if (day.equals(String.valueOf(da.getDay()))) {
|
|
|
+ states = "2";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (states.equals("2")) {//在工作日内
|
|
|
+ if (attendances != null && attendances.size() > 1) {//判断打卡记录是否有上下班
|
|
|
+ if (exitprio(attendances).equals("1")) {//判断打卡记录是否异常,1,异常
|
|
|
+ cont = "1";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ cont = "1";
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//----------------------------------------------------------------下面是获取当前月份所有天数的考勤-------------------------------------------------
|
|
|
for (int i = 1; i <= actualMaximum; i++) {//循环获取时间月份的总天数
|
|
|
Attendance at = new Attendance();
|
|
|
at.setIss(i + "");//获取所有天数,前端js需要绑定的数据
|
|
|
String aDate = String.valueOf(year) + "-" + month + "-" + i;//循环拼接所有天数进行查询是否正常
|
|
|
+ String jqw="";
|
|
|
List<Attendance> acs = attendanceMapper.queryList(userid, aDate);
|
|
|
+ StatutoryLeave stjq = statutoryLeaveService.getOne(aDate);
|
|
|
+ if (stjq!=null){
|
|
|
+ jqw=stjq.getType();
|
|
|
+ }
|
|
|
at.setIs("2");
|
|
|
- String eds="0";
|
|
|
-// AttendanceRule attendanceRules = attendanceRuleService.UserRule(userid);
|
|
|
-// if (attendanceRules!=null){
|
|
|
-// eds="1";
|
|
|
-// }else {
|
|
|
-// List<UserDept> depNamesByUserIds = userShiftMapper.getDepNamesByUserIds(Arrays.asList(userid.split(",")));
|
|
|
-// List<String>deps=new ArrayList<>();
|
|
|
-// depNamesByUserIds.forEach(st->{
|
|
|
-// deps.add(st.getId());
|
|
|
-// });
|
|
|
-// AttendanceRule attendanceRule1 = attendanceRuleService.UserRules(deps);
|
|
|
-// if (attendanceRule1!=null){
|
|
|
-// attendanceRules=attendanceRule1;
|
|
|
-// eds="1";
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
- if (ed.equals("1")){
|
|
|
+ at.setNotes("休");
|
|
|
if (attendanceRule.getType().equals("1")){//判断规则类型1,固定时间上下班
|
|
|
- String state="1";
|
|
|
- String[] split = attendanceRule.getWorkDay().split(",");//获取工作日
|
|
|
- Date da = DateUtils.str2Date(aDate, sdf);
|
|
|
- for (String day:split){
|
|
|
- if (day.equals(String.valueOf(da.getDay()))){
|
|
|
- state="2";
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (state.equals("2")){//在工作日内
|
|
|
- if (acs!=null&&acs.size()>1){//判断打卡记录是否有上下班
|
|
|
- if (exitprio(acs).equals("1")){//判断打卡记录是否异常,1,异常
|
|
|
+ if (jqw.equals("1")){//优先判断是否存在法定节假日
|
|
|
+ at.setNotes("班");
|
|
|
+ if (acs != null && acs.size() > 1) {//判断打卡记录是否有上下班
|
|
|
+ if (exitprio(acs).equals("1")) {//判断打卡记录是否异常,1,异常
|
|
|
at.setIs("1");
|
|
|
- }else {
|
|
|
- Date startDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRule.getStartDate()), sd);
|
|
|
- Date endDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRule.getEndDate()), sd);
|
|
|
- Date usStartDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(0).getUsDate()), sd);
|
|
|
- Date usEndDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(acs.size() - 1).getUsDate()), sd);
|
|
|
- if (usStartDate.getTime()>startDate.getTime()||usEndDate.getTime()<endDate.getTime()){
|
|
|
+ } else {
|
|
|
+ Date startDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendanceRule.getStartDate()), sd);
|
|
|
+ Date endDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendanceRule.getEndDate()), sd);
|
|
|
+ Date usStartDate = DateUtils.str2Date("2021-10-21 " + sdt.format(acs.get(0).getUsDate()), sd);
|
|
|
+ Date usEndDate = DateUtils.str2Date("2021-10-21 " + sdt.format(acs.get(acs.size() - 1).getUsDate()), sd);
|
|
|
+ if (usStartDate.getTime() > startDate.getTime() || usEndDate.getTime() < endDate.getTime()) {
|
|
|
at.setIs("1");
|
|
|
}
|
|
|
}
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
at.setIs("1");
|
|
|
}
|
|
|
+ }else if (jqw.equals("")) {
|
|
|
+ String state = "1";
|
|
|
+ String[] split = attendanceRule.getWorkDay().split(",");//获取工作日
|
|
|
+ Date da = DateUtils.str2Date(aDate, sdf);
|
|
|
+ for (String day : split) {
|
|
|
+ if (day.equals(String.valueOf(da.getDay()))) {
|
|
|
+ state = "2";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (state.equals("2")) {//在工作日内
|
|
|
+ at.setNotes("班");
|
|
|
+ if (acs != null && acs.size() > 1) {//判断打卡记录是否有上下班
|
|
|
+ if (exitprio(acs).equals("1")) {//判断打卡记录是否异常,1,异常
|
|
|
+ at.setIs("1");
|
|
|
+ } else {
|
|
|
+ Date startDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendanceRule.getStartDate()), sd);
|
|
|
+ Date endDate = DateUtils.str2Date("2021-10-21 " + sdt.format(attendanceRule.getEndDate()), sd);
|
|
|
+ Date usStartDate = DateUtils.str2Date("2021-10-21 " + sdt.format(acs.get(0).getUsDate()), sd);
|
|
|
+ Date usEndDate = DateUtils.str2Date("2021-10-21 " + sdt.format(acs.get(acs.size() - 1).getUsDate()), sd);
|
|
|
+ if (usStartDate.getTime() > startDate.getTime() || usEndDate.getTime() < endDate.getTime()) {
|
|
|
+ at.setIs("1");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ at.setIs("1");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
}else if (attendanceRule.getType().equals("2")){//规则类型 2,按班次上下班
|
|
|
+ at.setNotes("");
|
|
|
List<Map<String,Object>> oneUserShift = userShiftMapper.getOneUserShift(userid, aDate,"");
|
|
|
if (oneUserShift!=null&&oneUserShift.size()>0){
|
|
|
- if (acs!=null&&acs.size()>1){//判断打卡记录是否有上下班
|
|
|
- if (exitprio(acs).equals("1")){//判断打卡记录是否异常,1,异常
|
|
|
- at.setIs("1");
|
|
|
- }else {
|
|
|
- Date startDate = DateUtils.str2Date("2021-10-21 "+oneUserShift.get(0).get("startDate"), sd);
|
|
|
- Date endDate = DateUtils.str2Date("2021-10-21 "+oneUserShift.get(0).get("endDate"), sd);
|
|
|
- Date usStartDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(0).getUsDate()), sd);
|
|
|
- Date usEndDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(acs.size() - 1).getUsDate()), sd);
|
|
|
- if (usStartDate.getTime()>startDate.getTime()||usEndDate.getTime()<endDate.getTime()){
|
|
|
+ if (oneUserShift.get(0).get("id").equals("0")) {
|
|
|
+ at.setNotes("休");
|
|
|
+
|
|
|
+ }else {
|
|
|
+ at.setNotes("班");
|
|
|
+ if (acs != null && acs.size() > 1) {//判断打卡记录是否有上下班
|
|
|
+ if (exitprio(acs).equals("1")) {//判断打卡记录是否异常,1,异常
|
|
|
at.setIs("1");
|
|
|
+ } else {
|
|
|
+ Date startDate = DateUtils.str2Date("2021-10-21 " + oneUserShift.get(0).get("startDate"), sd);
|
|
|
+ Date endDate = DateUtils.str2Date("2021-10-21 " + oneUserShift.get(0).get("endDate"), sd);
|
|
|
+ Date usStartDate = DateUtils.str2Date("2021-10-21 " + sdt.format(acs.get(0).getUsDate()), sd);
|
|
|
+ Date usEndDate = DateUtils.str2Date("2021-10-21 " + sdt.format(acs.get(acs.size() - 1).getUsDate()), sd);
|
|
|
+ if (usStartDate.getTime() > startDate.getTime() || usEndDate.getTime() < endDate.getTime()) {
|
|
|
+ at.setIs("1");
|
|
|
+ }
|
|
|
}
|
|
|
+ } else {
|
|
|
+ at.setIs("1");
|
|
|
}
|
|
|
- }else {
|
|
|
- at.setIs("1");
|
|
|
}
|
|
|
}
|
|
|
}else if (attendanceRule.getType().equals("3")){//规则类型 3,自由上下班
|
|
|
- String states="1";
|
|
|
- String[] split = attendanceRule.getWorkDay().split(",");//获取工作日
|
|
|
- Date da = DateUtils.str2Date(aDate, sdf);
|
|
|
- for (String day:split){
|
|
|
- if (day.equals(String.valueOf(da.getDay()))){
|
|
|
- states="2";
|
|
|
- break;
|
|
|
+ if (jqw.equals("1")){//优先判断是否存在法定节假日
|
|
|
+ at.setNotes("班");
|
|
|
+ if (acs != null && acs.size() > 1) {//判断打卡记录是否有上下班
|
|
|
+ if (exitprio(acs).equals("1")) {//判断打卡记录是否异常,1,异常
|
|
|
+ at.setIs("1");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ at.setIs("1");
|
|
|
+ }
|
|
|
+ }else if (jqw.equals("")) {
|
|
|
+ String states = "1";
|
|
|
+ String[] split = attendanceRule.getWorkDay().split(",");//获取工作日
|
|
|
+ Date da = DateUtils.str2Date(aDate, sdf);
|
|
|
+ for (String day : split) {
|
|
|
+ if (day.equals(String.valueOf(da.getDay()))) {
|
|
|
+ states = "2";
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- if (states.equals("2")){
|
|
|
- if (acs!=null&&acs.size()>1){//判断打卡记录是否有上下班
|
|
|
- if (exitprio(acs).equals("1")){//判断打卡记录是否异常,1,异常
|
|
|
- at.setIs("1");
|
|
|
+ if (states.equals("2")) {
|
|
|
+ at.setNotes("班");
|
|
|
+ if (acs != null && acs.size() > 1) {//判断打卡记录是否有上下班
|
|
|
+ if (exitprio(acs).equals("1")) {//判断打卡记录是否异常,1,异常
|
|
|
+ at.setIs("1");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ at.setIs("1");
|
|
|
+ }
|
|
|
}
|
|
|
- }else {
|
|
|
- at.setIs("1");
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
lit.add(at);
|
|
|
}
|
|
|
List<Vacation> vacation = vacationMapper.vacation(userid, date);//获取当前用户的假期数据
|