|
|
@@ -115,102 +115,107 @@ public class StaffSchedule extends AbstractDomain<String, StaffSchedulePo>{
|
|
|
StaffScheduleDetail staffScheduleDetail = staffScheduleDetailRepository.newInstance();
|
|
|
staffScheduleDetail.deleteByMainId(getData().getId());
|
|
|
}
|
|
|
- LocalDate today = LocalDate.now();
|
|
|
List<Map<String,String>> config = getScheduleConfig(getData().getConfig());
|
|
|
StaffScheduleDetail staffScheduleDetail = staffScheduleDetailRepository.newInstance();
|
|
|
- AttendanceDetail attendanceDetail = attendanceDetailRepository.newInstance();
|
|
|
|
|
|
if(BeanUtils.isNotEmpty(getData().getStaffScheduleDetailPoList())){
|
|
|
for(StaffScheduleDetailPo staffScheduleDetailPo:getData().getStaffScheduleDetailPoList()){
|
|
|
staffScheduleDetailPo.setParentId(getData().getId());
|
|
|
staffScheduleDetail.save(staffScheduleDetailPo);
|
|
|
+
|
|
|
+ // 查询主部门 和 用户工号
|
|
|
+ String sql = "SELECT MAIN_PID_ from ibps_party_rel WHERE MAIN_TYPE_='position' and BIZ_='mainPost' and SUB_PID_='%s' limit 1";
|
|
|
+ sql = String.format(sql, staffScheduleDetailPo.getUserId());
|
|
|
+ Map<String,Object> position = commonDao.queryOne(sql);
|
|
|
+ EmployeeInfoPo employeeInfoPo = employeeInfoRepository.get(staffScheduleDetailPo.getUserId());
|
|
|
+ List<Map<String, String>> newDate = extractNonEmptyDValuesAsArray(staffScheduleDetailPo,getData().getStartDate(),getData().getEndDate());
|
|
|
+
|
|
|
+ // 添加考勤记录
|
|
|
+ addAttendanceDetail(newDate,staffScheduleDetailPo,position,employeeInfoPo,config);
|
|
|
+
|
|
|
for(StaffScheduleDetailPo oldScheduleDetailPo :oldList ){
|
|
|
if(oldScheduleDetailPo.getId().equals(staffScheduleDetailPo.getId())){
|
|
|
- List<Map<String, String>> newDate = extractNonEmptyDValuesAsArray(staffScheduleDetailPo,getData().getStartDate(),getData().getEndDate());
|
|
|
List<Map<String, String>> oldDate = extractNonEmptyDValuesAsArray(oldScheduleDetailPo,getData().getStartDate(),getData().getEndDate());
|
|
|
-
|
|
|
- // 查询主部门 和 用户工号
|
|
|
- String sql = "SELECT MAIN_PID_ from ibps_party_rel WHERE MAIN_TYPE_='position' and BIZ_='mainPost' and SUB_PID_='%s' limit 1";
|
|
|
- sql = String.format(sql, staffScheduleDetailPo.getUserId());
|
|
|
- Map<String,Object> position = commonDao.queryOne(sql);
|
|
|
- EmployeeInfoPo employeeInfoPo = employeeInfoRepository.get(staffScheduleDetailPo.getUserId());
|
|
|
-
|
|
|
// 添加修改记录 即 调班申请记录
|
|
|
if (BeanUtils.isNotEmpty(getData().getUpdateType()) && getData().getUpdateType().equals("排班修改")){
|
|
|
addAdjustRecord(newDate,oldDate,staffScheduleDetailPo.getId(),getData().getId());
|
|
|
}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- for (Map<String, String> entry : newDate) {
|
|
|
- String dateStr = entry.get("date");
|
|
|
- String value = entry.get("value");
|
|
|
- LocalDate date = LocalDate.parse(dateStr);
|
|
|
- if (date.isBefore(today)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- String[] values = value.split(StringPool.COMMA);
|
|
|
+ private void addAttendanceDetail(List<Map<String, String>> newDate,StaffScheduleDetailPo staffScheduleDetailPo,
|
|
|
+ Map<String,Object> position,EmployeeInfoPo employeeInfoPo,List<Map<String,String>> config){
|
|
|
+ AttendanceDetail attendanceDetail = attendanceDetailRepository.newInstance();
|
|
|
+ for (Map<String, String> entry : newDate) {
|
|
|
+ String dateStr = entry.get("date");
|
|
|
+ String value = entry.get("value");
|
|
|
+ LocalDate date = LocalDate.parse(dateStr);
|
|
|
+ if (date.isBefore(LocalDate.now())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String[] values = value.split(StringPool.COMMA);
|
|
|
|
|
|
- // 查询旧考勤记录
|
|
|
- String sql2 = "SELECT id_ from t_attendance_detail where pai_ban_ji_lu_id_='%s' and yong_hu_id_='%s' and ri_qi_='%s' ";
|
|
|
- sql2 = String.format(sql2, staffScheduleDetailPo.getId(),staffScheduleDetailPo.getUserId(),dateStr);
|
|
|
- List<Map<String,Object>> attendanceList = commonDao.query(sql2);
|
|
|
- if (Collections.isNotEmpty(attendanceList)) {
|
|
|
- String[] ids = attendanceList.stream().map(map -> String.valueOf(map.get("id_"))).toArray(String[]::new);
|
|
|
- AttendanceDetail domain = attendanceDetailRepository.newInstance();
|
|
|
- domain.deleteByIds(ids);
|
|
|
- }
|
|
|
+ // 查询旧考勤记录
|
|
|
+ String sql2 = "SELECT id_ from t_attendance_detail where pai_ban_ji_lu_id_='%s' and yong_hu_id_='%s' and ri_qi_='%s' ";
|
|
|
+ sql2 = String.format(sql2, staffScheduleDetailPo.getId(),staffScheduleDetailPo.getUserId(),dateStr);
|
|
|
+ List<Map<String,Object>> attendanceList = commonDao.query(sql2);
|
|
|
+ if (Collections.isNotEmpty(attendanceList)) {
|
|
|
+ String[] ids = attendanceList.stream().map(map -> String.valueOf(map.get("id_"))).toArray(String[]::new);
|
|
|
+ AttendanceDetail domain = attendanceDetailRepository.newInstance();
|
|
|
+ domain.deleteByIds(ids);
|
|
|
+ }
|
|
|
|
|
|
- if (BeanUtils.isNotEmpty(value)){
|
|
|
- for (String s : values) {
|
|
|
- AttendanceDetailPo attendanceDetailPo = new AttendanceDetailPo();
|
|
|
- attendanceDetailPo.setDiDian(getData().getDiDian());
|
|
|
- attendanceDetailPo.setPaiBanId(getData().getId());
|
|
|
- attendanceDetailPo.setPaiBanJiLuId(staffScheduleDetailPo.getId());
|
|
|
- attendanceDetailPo.setRiQi(dateStr);
|
|
|
- attendanceDetailPo.setYongHuId(staffScheduleDetailPo.getUserId());
|
|
|
- attendanceDetailPo.setBuMen(employeeInfoPo.getPositions().split(StringPool.COMMA)[0]);
|
|
|
- if (BeanUtils.isNotEmpty(position)) {
|
|
|
- attendanceDetailPo.setBuMen(position.get("MAIN_PID_").toString());
|
|
|
- }
|
|
|
- attendanceDetailPo.setGongHao(employeeInfoPo.getJianDingZiGeZ()==null?"":employeeInfoPo.getJianDingZiGeZ());
|
|
|
- attendanceDetailPo.setPaiBanMingChen(getData().getTitle());
|
|
|
- for (Map<String,String> map : config) {
|
|
|
- if (map.get("alias").equals(s)) {
|
|
|
- String next = map.get("isSecondDay");
|
|
|
- attendanceDetailPo.setBanCiBieMing(s);
|
|
|
- attendanceDetailPo.setBanCiMing(map.get("name"));
|
|
|
- attendanceDetailPo.setBanCiKaiShi(dateStr +StringPool.SPACE+ map.get("startTime"));
|
|
|
- attendanceDetailPo.setBanCiJieShu(dateStr +StringPool.SPACE+ map.get("endTime"));
|
|
|
- if (next.equals("Y")){
|
|
|
- String nextDateStr = LocalDate.parse(dateStr, DATE_FORMATTER).plusDays(1).format(DATE_FORMATTER);
|
|
|
- attendanceDetailPo.setBanCiJieShu(nextDateStr +StringPool.SPACE+ map.get("endTime"));
|
|
|
- }
|
|
|
- attendanceDetailPo.setShiFouKuaRi(map.get("isSecondDay"));
|
|
|
- attendanceDetailPo.setBanCiShiChang(calculateMinutesBetween(attendanceDetailPo.getBanCiKaiShi(),attendanceDetailPo.getBanCiJieShu()));
|
|
|
- attendanceDetailPo.setKaoQinZhuangTa("");
|
|
|
- attendanceDetail.save(attendanceDetailPo);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }else {
|
|
|
- AttendanceDetailPo attendanceDetailPo = new AttendanceDetailPo();
|
|
|
- attendanceDetailPo.setDiDian(getData().getDiDian());
|
|
|
- attendanceDetailPo.setPaiBanId(getData().getId());
|
|
|
- attendanceDetailPo.setPaiBanJiLuId(staffScheduleDetailPo.getId());
|
|
|
- attendanceDetailPo.setRiQi(dateStr);
|
|
|
- attendanceDetailPo.setYongHuId(staffScheduleDetailPo.getUserId());
|
|
|
- attendanceDetailPo.setBuMen(employeeInfoPo.getPositions().split(StringPool.COMMA)[0]);
|
|
|
- if (BeanUtils.isNotEmpty(position)) {
|
|
|
- attendanceDetailPo.setBuMen(position.get("MAIN_PID_").toString());
|
|
|
- }
|
|
|
- attendanceDetailPo.setGongHao(employeeInfoPo.getJianDingZiGeZ()==null?"":employeeInfoPo.getJianDingZiGeZ());
|
|
|
- attendanceDetailPo.setPaiBanMingChen(getData().getTitle());
|
|
|
- attendanceDetailPo.setBanCiMing("休息");
|
|
|
- attendanceDetailPo.setKaoQinZhuangTa("");
|
|
|
- attendanceDetail.save(attendanceDetailPo);
|
|
|
+ if (BeanUtils.isNotEmpty(value)){
|
|
|
+ for (String s : values) {
|
|
|
+ AttendanceDetailPo attendanceDetailPo = new AttendanceDetailPo();
|
|
|
+ attendanceDetailPo.setDiDian(getData().getDiDian());
|
|
|
+ attendanceDetailPo.setPaiBanId(getData().getId());
|
|
|
+ attendanceDetailPo.setPaiBanJiLuId(staffScheduleDetailPo.getId());
|
|
|
+ attendanceDetailPo.setRiQi(dateStr);
|
|
|
+ attendanceDetailPo.setYongHuId(staffScheduleDetailPo.getUserId());
|
|
|
+ attendanceDetailPo.setBuMen(employeeInfoPo.getPositions().split(StringPool.COMMA)[0]);
|
|
|
+ if (BeanUtils.isNotEmpty(position)) {
|
|
|
+ attendanceDetailPo.setBuMen(position.get("MAIN_PID_").toString());
|
|
|
+ }
|
|
|
+ attendanceDetailPo.setGongHao(employeeInfoPo.getJianDingZiGeZ()==null?"":employeeInfoPo.getJianDingZiGeZ());
|
|
|
+ attendanceDetailPo.setPaiBanMingChen(getData().getTitle());
|
|
|
+ for (Map<String,String> map : config) {
|
|
|
+ if (map.get("alias").equals(s)) {
|
|
|
+ String next = map.get("isSecondDay");
|
|
|
+ attendanceDetailPo.setBanCiBieMing(s);
|
|
|
+ attendanceDetailPo.setBanCiMing(map.get("name"));
|
|
|
+ attendanceDetailPo.setBanCiKaiShi(dateStr +StringPool.SPACE+ map.get("startTime"));
|
|
|
+ attendanceDetailPo.setBanCiJieShu(dateStr +StringPool.SPACE+ map.get("endTime"));
|
|
|
+ if (next.equals("Y")){
|
|
|
+ String nextDateStr = LocalDate.parse(dateStr, DATE_FORMATTER).plusDays(1).format(DATE_FORMATTER);
|
|
|
+ attendanceDetailPo.setBanCiJieShu(nextDateStr +StringPool.SPACE+ map.get("endTime"));
|
|
|
}
|
|
|
+ attendanceDetailPo.setShiFouKuaRi(map.get("isSecondDay"));
|
|
|
+ attendanceDetailPo.setBanCiShiChang(calculateMinutesBetween(attendanceDetailPo.getBanCiKaiShi(),attendanceDetailPo.getBanCiJieShu()));
|
|
|
+ attendanceDetailPo.setKaoQinZhuangTa("");
|
|
|
+ attendanceDetail.save(attendanceDetailPo);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ }else {
|
|
|
+ AttendanceDetailPo attendanceDetailPo = new AttendanceDetailPo();
|
|
|
+ attendanceDetailPo.setDiDian(getData().getDiDian());
|
|
|
+ attendanceDetailPo.setPaiBanId(getData().getId());
|
|
|
+ attendanceDetailPo.setPaiBanJiLuId(staffScheduleDetailPo.getId());
|
|
|
+ attendanceDetailPo.setRiQi(dateStr);
|
|
|
+ attendanceDetailPo.setYongHuId(staffScheduleDetailPo.getUserId());
|
|
|
+ attendanceDetailPo.setBuMen(employeeInfoPo.getPositions().split(StringPool.COMMA)[0]);
|
|
|
+ if (BeanUtils.isNotEmpty(position)) {
|
|
|
+ attendanceDetailPo.setBuMen(position.get("MAIN_PID_").toString());
|
|
|
+ }
|
|
|
+ attendanceDetailPo.setGongHao(employeeInfoPo.getJianDingZiGeZ()==null?"":employeeInfoPo.getJianDingZiGeZ());
|
|
|
+ attendanceDetailPo.setPaiBanMingChen(getData().getTitle());
|
|
|
+ attendanceDetailPo.setBanCiMing("休息");
|
|
|
+ attendanceDetailPo.setKaoQinZhuangTa("");
|
|
|
+ attendanceDetail.save(attendanceDetailPo);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -268,7 +273,7 @@ public class StaffSchedule extends AbstractDomain<String, StaffSchedulePo>{
|
|
|
}
|
|
|
|
|
|
|
|
|
- public static long calculateMinutesBetween(String startTimeStr, String endTimeStr) {
|
|
|
+ private long calculateMinutesBetween(String startTimeStr, String endTimeStr) {
|
|
|
if (startTimeStr == null || endTimeStr == null) {
|
|
|
throw new IllegalArgumentException("时间参数不能为null");
|
|
|
}
|
|
|
@@ -282,7 +287,7 @@ public class StaffSchedule extends AbstractDomain<String, StaffSchedulePo>{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public List<Map<String, String>> getScheduleConfig(String config) {
|
|
|
+ private List<Map<String, String>> getScheduleConfig(String config) {
|
|
|
List<Map<String, String>> result = new ArrayList<>();
|
|
|
JSONObject configJson = JSONUtil.parseObj(config);
|
|
|
JSONArray scheduleShifts = configJson.getJSONArray("scheduleShift");
|
|
|
@@ -322,7 +327,7 @@ public class StaffSchedule extends AbstractDomain<String, StaffSchedulePo>{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static List<Map<String, String>> extractNonEmptyDValuesAsArray(StaffScheduleDetailPo detailPo, String startDate, String endDate) {
|
|
|
+ private List<Map<String, String>> extractNonEmptyDValuesAsArray(StaffScheduleDetailPo detailPo, String startDate, String endDate) {
|
|
|
List<Map<String, String>> result = new ArrayList<>();
|
|
|
try {
|
|
|
LocalDate start = LocalDate.parse(startDate);
|