Browse Source

[bug-4398]新增排班时不会产生考勤数据了

gaozl 11 months ago
parent
commit
37cb5f9041

+ 83 - 78
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/domain/StaffSchedule.java

@@ -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);