Pārlūkot izejas kodu

[task-4206]子排班考勤功能开发/排班相关接口调整

gaozl 11 mēneši atpakaļ
vecāks
revīzija
6a91a43e04
26 mainītis faili ar 2208 papildinājumiem un 9 dzēšanām
  1. 92 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/api/IAttendanceDetailService.java
  2. 83 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/api/IAttendanceReissueService.java
  3. 99 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/domain/AttendanceDetail.java
  4. 64 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/domain/AttendanceReissue.java
  5. 279 9
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/domain/StaffSchedule.java
  6. 16 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/AttendanceDetailDao.java
  7. 16 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/AttendanceDetailQueryDao.java
  8. 16 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/AttendanceReissueDao.java
  9. 16 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/AttendanceReissueQueryDao.java
  10. 2 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/StaffScheduleDetailQueryDao.java
  11. 26 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/impl/AttendanceDetailDaoImpl.java
  12. 27 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/impl/AttendanceDetailQueryDaoImpl.java
  13. 26 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/impl/AttendanceReissueDaoImpl.java
  14. 27 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/impl/AttendanceReissueQueryDaoImpl.java
  15. 35 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/entity/AttendanceDetailPo.java
  16. 401 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/entity/AttendanceDetailTbl.java
  17. 35 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/entity/AttendanceReissuePo.java
  18. 290 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/entity/AttendanceReissueTbl.java
  19. 141 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/provider/AttendanceDetailProvider.java
  20. 123 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/provider/AttendanceReissueProvider.java
  21. 21 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/repository/AttendanceDetailRepository.java
  22. 18 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/repository/AttendanceReissueRepository.java
  23. 56 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/repository/impl/AttendanceDetailRepositoryImpl.java
  24. 56 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/repository/impl/AttendanceReissueRepositoryImpl.java
  25. 130 0
      ibps-provider-root/modules/provider-business/src/main/resources/com/lc/ibps/employee/persistence/mapping/AttendanceDetail.map.xml
  26. 113 0
      ibps-provider-root/modules/provider-business/src/main/resources/com/lc/ibps/employee/persistence/mapping/AttendanceReissue.map.xml

+ 92 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/api/IAttendanceDetailService.java

@@ -0,0 +1,92 @@
+package com.lc.ibps.components.employee.api;
+
+import java.util.List;
+
+import org.hibernate.validator.constraints.NotBlank;
+import org.hibernate.validator.constraints.NotEmpty;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.lc.ibps.cloud.entity.APIPageList;
+import com.lc.ibps.cloud.entity.APIRequest;
+import com.lc.ibps.cloud.entity.APIResult;
+import javax.validation.Valid;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo;
+
+
+
+/**
+ * 考勤明细表 接口
+ *
+ *<pre> 
+ * 构建组:ibps-provider-attendanceDetail-api
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:55
+ *</pre>
+ */
+@Validated
+@RequestMapping(value = "/employee/attendanceDetail")
+@RestController
+public interface IAttendanceDetailService {
+
+	/**
+	 * 
+	 * 【考勤明细表】列表(分页条件查询)数据
+	 *
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value = "/query", method = RequestMethod.POST)
+	public APIResult<APIPageList<AttendanceDetailPo>> query(
+			@RequestBody(required = true) APIRequest request);
+	
+	/**
+	 * 
+	 * 根据id查询【考勤明细表】
+	 *
+	 * @param id
+	 * @return
+	 */
+	@RequestMapping(value = "/get", method = { RequestMethod.GET })
+	public APIResult<AttendanceDetailPo> get(
+//			@NotBlank(message = "{com.lc.ibps.components.provider.AttendanceDetailProvider.id}") 
+			@RequestParam(name = "id", required = true) String id);
+	
+	/**
+	 * 
+	 * 批量删除【考勤明细表】记录
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@RequestMapping(value = "/remove", method = { RequestMethod.POST })
+	public APIResult<Void> remove(
+//			@NotEmpty(message = "{com.lc.ibps.components.provider.AttendanceDetailProvider.ids}")
+			@RequestParam(name = "ids", required = true) String[] ids);
+	
+	/**
+	 * 
+	 * 保存【考勤明细表】记录
+	 *
+	 * @param attendanceDetailPo
+	 * @return
+	 */
+	@RequestMapping(value = "/save", method = { RequestMethod.POST })
+	public APIResult<Void> save(
+ 			@RequestBody(required = true) @Valid AttendanceDetailPo attendanceDetailPo);
+
+
+	/**
+	 * 打卡
+	 * @param id
+	 * @return
+	 */
+	@RequestMapping(value = "/clockIn", method = { RequestMethod.POST })
+	public APIResult<AttendanceDetailPo> clockIn(
+			@RequestParam(name = "id", required = true) String id);
+}

+ 83 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/api/IAttendanceReissueService.java

@@ -0,0 +1,83 @@
+package com.lc.ibps.components.employee.api;
+
+import java.util.List;
+
+import org.hibernate.validator.constraints.NotBlank;
+import org.hibernate.validator.constraints.NotEmpty;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.lc.ibps.cloud.entity.APIPageList;
+import com.lc.ibps.cloud.entity.APIRequest;
+import com.lc.ibps.cloud.entity.APIResult;
+import javax.validation.Valid;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo;
+
+
+
+/**
+ * 考勤补卡记录表 接口
+ *
+ *<pre> 
+ * 构建组:ibps-provider-attendanceReissue-api
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:34
+ *</pre>
+ */
+@Validated
+@RequestMapping(value = "/employee/attendanceReissue")
+@RestController
+public interface IAttendanceReissueService {
+
+	/**
+	 * 
+	 * 【考勤补卡记录表】列表(分页条件查询)数据
+	 *
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value = "/query", method = RequestMethod.POST)
+	public APIResult<APIPageList<AttendanceReissuePo>> query(
+			@RequestBody(required = true) APIRequest request);
+	
+	/**
+	 * 
+	 * 根据id查询【考勤补卡记录表】
+	 *
+	 * @param id
+	 * @return
+	 */
+	@RequestMapping(value = "/get", method = { RequestMethod.GET })
+	public APIResult<AttendanceReissuePo> get(
+//			@NotBlank(message = "{com.lc.ibps.components.provider.AttendanceReissueProvider.id}") 
+			@RequestParam(name = "id", required = true) String id);
+	
+	/**
+	 * 
+	 * 批量删除【考勤补卡记录表】记录
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@RequestMapping(value = "/remove", method = { RequestMethod.POST })
+	public APIResult<Void> remove(
+//			@NotEmpty(message = "{com.lc.ibps.components.provider.AttendanceReissueProvider.ids}")
+			@RequestParam(name = "ids", required = true) String[] ids);
+	
+	/**
+	 * 
+	 * 保存【考勤补卡记录表】记录
+	 *
+	 * @param attendanceReissuePo
+	 * @return
+	 */
+	@RequestMapping(value = "/save", method = { RequestMethod.POST })
+	public APIResult<Void> save(
+ 			@RequestBody(required = true) @Valid AttendanceReissuePo attendanceReissuePo);
+
+}

+ 99 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/domain/AttendanceDetail.java

@@ -0,0 +1,99 @@
+package com.lc.ibps.components.employee.domain;
+
+
+import javax.annotation.Resource;
+
+import com.lc.ibps.base.core.constants.StringPool;
+import org.springframework.context.annotation.Scope;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.stereotype.Service;
+
+import com.lc.ibps.base.core.util.BeanUtils;
+import com.lc.ibps.base.framework.domain.AbstractDomain;
+import com.lc.ibps.base.framework.persistence.dao.IDao;
+import com.lc.ibps.base.framework.persistence.dao.IQueryDao;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceDetailDao;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceDetailQueryDao;
+import com.lc.ibps.components.employee.repository.AttendanceDetailRepository;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 考勤明细表 领域对象实体
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:55
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@Service
+@Transactional
+@Scope("prototype")
+public class AttendanceDetail extends AbstractDomain<String, AttendanceDetailPo>{
+	
+	@Resource
+	private AttendanceDetailDao attendanceDetailDao;
+	@Resource
+	private AttendanceDetailQueryDao attendanceDetailQueryDao;
+	@Resource
+	private AttendanceDetailRepository attendanceDetailRepository;
+
+	private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern(StringPool.DATE_FORMAT_DATETIME);
+
+
+	protected void init(){
+		//
+	}
+	
+	@Override
+	protected IQueryDao<String, AttendanceDetailPo> getInternalQueryDao() {
+		return attendanceDetailQueryDao;
+	}
+	
+	@Override
+	protected IDao<String, AttendanceDetailPo> getInternalDao() {
+		return attendanceDetailDao;
+	}
+	
+	@Override
+	public String getInternalCacheName() {
+		return "attendanceDetail";
+	}
+	
+
+	public void clockIn(String id) throws Exception {
+		AttendanceDetailPo attendanceDetailPo = attendanceDetailRepository.get(id);
+		if(BeanUtils.isEmpty(attendanceDetailPo)){
+			throw new Exception("考勤不存在!");
+		}
+		String end = attendanceDetailPo.getBanCiJieShu()+":00";
+		String start = attendanceDetailPo.getBanCiKaiShi()+":59";
+		LocalDateTime endTime = LocalDateTime.parse(end, DATETIME_FORMATTER);
+		LocalDateTime startTime = LocalDateTime.parse(start, DATETIME_FORMATTER);
+		LocalDateTime now = LocalDateTime.now();
+		if (!now.isAfter(endTime)) {
+			// 上班打卡
+			attendanceDetailPo.setDaKaShiJian1(now.format(DATETIME_FORMATTER));
+			if (!startTime.isAfter(now)){
+				attendanceDetailPo.setZhuangTai1("正常");
+			}else {
+				attendanceDetailPo.setZhuangTai1("异常");
+			}
+		}else {
+			// 下班打卡
+			attendanceDetailPo.setDaKaShiJian2(now.format(DATETIME_FORMATTER));
+			attendanceDetailPo.setZhuangTai2("正常");
+//				if (attendanceDetailPo.getDaKaShiJian1().equals("正常") && attendanceDetailPo.getDaKaShiJian2().equals("正常")){
+//					attendanceDetailPo.setKaoQinZhuangTa("正常");
+//				}else {
+//					attendanceDetailPo.setKaoQinZhuangTa("异常");
+//				}
+		}
+		attendanceDetailPo.setDaKaCiShu(attendanceDetailPo.getDaKaCiShu()+1);
+	}
+	
+}

+ 64 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/domain/AttendanceReissue.java

@@ -0,0 +1,64 @@
+package com.lc.ibps.components.employee.domain;
+
+
+import javax.annotation.Resource;
+
+import org.springframework.context.annotation.Scope;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.stereotype.Service;
+
+import com.lc.ibps.base.core.util.BeanUtils;
+import com.lc.ibps.base.core.util.AppUtil;
+import com.lc.ibps.base.framework.domain.AbstractDomain;
+import com.lc.ibps.base.framework.persistence.dao.IDao;
+import com.lc.ibps.base.framework.persistence.dao.IQueryDao;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceReissueDao;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceReissueQueryDao;
+import com.lc.ibps.components.employee.repository.AttendanceReissueRepository;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo;
+
+/**
+ * 考勤补卡记录表 领域对象实体
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:33
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@Service
+@Transactional
+@Scope("prototype")
+public class AttendanceReissue extends AbstractDomain<String, AttendanceReissuePo>{
+	
+	@Resource
+	private AttendanceReissueDao attendanceReissueDao;
+	@Resource
+	private AttendanceReissueQueryDao attendanceReissueQueryDao;
+	@Resource
+	private AttendanceReissueRepository attendanceReissueRepository;
+
+
+	protected void init(){
+		//
+	}
+	
+	@Override
+	protected IQueryDao<String, AttendanceReissuePo> getInternalQueryDao() {
+		return attendanceReissueQueryDao;
+	}
+	
+	@Override
+	protected IDao<String, AttendanceReissuePo> getInternalDao() {
+		return attendanceReissueDao;
+	}
+	
+	@Override
+	public String getInternalCacheName() {
+		return "attendanceReissue";
+	}
+	
+	
+	
+}

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

@@ -3,22 +3,37 @@ package com.lc.ibps.components.employee.domain;
 
 import javax.annotation.Resource;
 
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.lc.ibps.base.core.constants.StringPool;
+import com.lc.ibps.base.core.util.Collections;
+import com.lc.ibps.base.framework.table.ICommonDao;
+import com.lc.ibps.base.web.context.ContextUtil;
+import com.lc.ibps.components.employee.persistence.dao.StaffScheduleDetailQueryDao;
+import com.lc.ibps.components.employee.persistence.entity.*;
+import com.lc.ibps.components.employee.repository.*;
+import com.lc.ibps.untils.StrUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.stereotype.Service;
 
 import com.lc.ibps.base.core.util.BeanUtils;
-import com.lc.ibps.base.core.util.string.StringUtil;
-import com.lc.ibps.base.core.util.AppUtil;
 import com.lc.ibps.base.framework.domain.AbstractDomain;
 import com.lc.ibps.base.framework.persistence.dao.IDao;
 import com.lc.ibps.base.framework.persistence.dao.IQueryDao;
 import com.lc.ibps.components.employee.persistence.dao.StaffScheduleDao;
 import com.lc.ibps.components.employee.persistence.dao.StaffScheduleQueryDao;
-import com.lc.ibps.components.employee.repository.StaffScheduleRepository;
-import com.lc.ibps.components.employee.persistence.entity.StaffSchedulePo;
-import com.lc.ibps.components.employee.repository.StaffScheduleDetailRepository;
-import com.lc.ibps.components.employee.persistence.entity.StaffScheduleDetailPo;
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.lang.reflect.Method;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.util.*;
 
 /**
  * 排班记录表 领域对象实体
@@ -45,6 +60,29 @@ public class StaffSchedule extends AbstractDomain<String, StaffSchedulePo>{
 	@Resource
 	private StaffScheduleDetailRepository staffScheduleDetailRepository;
 
+	@Resource
+	private AttendanceDetailRepository attendanceDetailRepository;
+
+	@Resource
+	private EmployeeInfoRepository employeeInfoRepository;
+
+	@Resource
+	private ICommonDao commonDao;
+
+	@Resource
+	private AdjustmentRepository adjustmentRepository;
+
+	@Resource
+	private StaffScheduleDetailQueryDao scheduleDetailQueryDao;
+
+	private static final Logger logger = LoggerFactory.getLogger(StaffSchedule.class);
+
+	private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(StringPool.DATE_FORMAT_DATETIME_NOSECOND);
+	private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(StringPool.DATE_FORMAT_DATE);
+	private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern(StringPool.DATE_FORMAT_DATETIME);
+	private static final String STATUS_APPROVED = "已通过";
+	private static final String ADJUSTMENT_TYPE_SCHEDULE = "paiban";
+
 	protected void init(){
 		//
 	}
@@ -71,21 +109,253 @@ public class StaffSchedule extends AbstractDomain<String, StaffSchedulePo>{
 	 * @since  1.0.0
 	 */
 	public void saveCascade(){
+		List<StaffScheduleDetailPo> oldList = staffScheduleDetailRepository.findByMainId(getData().getId());
 		save();
 		if(getData().isDelBeforeSave()){
 			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);
+				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());
+
+						// 添加修改记录 即 调班申请记录
+						addAdjustRecord(newDate,oldDate,staffScheduleDetailPo.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);
+
+							// 查询旧考勤记录
+							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);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private void addAdjustRecord(List<Map<String,String>> newDateList,List<Map<String,String>> oldDateList,String scheduleId) {
+		boolean areEqualIgnoreOrder = new HashSet<>(newDateList).equals(new HashSet<>(oldDateList))&& newDateList.size() == oldDateList.size();
+		if (!areEqualIgnoreOrder) {
+			AdjustmentPo adjustmentPo = new AdjustmentPo();
+			adjustmentPo.setDiDian(getData().getDiDian());
+			adjustmentPo.setCreateBy(ContextUtil.getCurrentUserId());
+			adjustmentPo.setStatus(STATUS_APPROVED);
+			JSONObject configJson = JSONUtil.parseObj(getData().getConfig());
+			JSONArray approverArray = configJson.getJSONArray("approver");
+			String[] approverList = new String[approverArray.size()];
+			for (int i = 0; i < approverArray.size(); i++) {
+				approverList[i] = approverArray.getStr(i);
+			}
+			String executor = String.join(",", approverList);
+			adjustmentPo.setExecutor(executor);
+			adjustmentPo.setType(ADJUSTMENT_TYPE_SCHEDULE);
+			StringBuilder overview = new StringBuilder();
+			List<AdjustmentDetailPo> adjustmentDetailPoList = new ArrayList<>();
+			adjustmentPo.setReason("修改排班");
+			for (Map<String, String> newMap : newDateList) {
+				for (Map<String, String> oldMap : oldDateList) {
+					String newValue = StrUtil.str(newMap.get("value"));
+					String newDate = StrUtil.str(newMap.get("date"));
+					String oldValue = StrUtil.str(oldMap.get("value"));
+					String oldDate = StrUtil.str(oldMap.get("date"));
+					if (!newValue.equals(oldValue) && oldDate.equals(newDate)) {
+						oldValue = oldValue.isEmpty() ?"无":oldValue;
+						newValue = newValue.isEmpty() ?"无":newValue;
+						AdjustmentDetailPo adjustmentDetailPo = new AdjustmentDetailPo();
+						adjustmentDetailPo.setCreateBy(ContextUtil.getCurrentUserId());
+						adjustmentDetailPo.setRecordId(scheduleId);
+						adjustmentDetailPo.setBeforeAdjust(oldValue);
+						adjustmentDetailPo.setBeforeDate(oldDate);
+						adjustmentDetailPo.setAfterAdjust(newValue);
+						adjustmentDetailPo.setAfterDate(newDate);
+						adjustmentDetailPo.setStatus("已通过");
+						adjustmentDetailPo.setParty(ContextUtil.getCurrentUserId());
+						adjustmentDetailPo.setAuditTime(LocalDateTime.now().format(TIME_FORMATTER));
+						overview.append(oldDate).append("班次【").append(oldValue).append("】调换到").append(newDate).append("班次【").append(newValue).append("】").append("\n");
+						adjustmentDetailPoList.add(adjustmentDetailPo);
+					}
+				}
 			}
+			adjustmentPo.setOverview(String.valueOf(overview));
+			adjustmentPo.setAdjustmentDetailPoList(adjustmentDetailPoList);
+			Adjustment adjustment = adjustmentRepository.newInstance(adjustmentPo);
+			adjustment.saveCascade();
 		}
-	}	
+	}
+
+
+	public static long calculateMinutesBetween(String startTimeStr, String endTimeStr) {
+		if (startTimeStr == null || endTimeStr == null) {
+			throw new IllegalArgumentException("时间参数不能为null");
+		}
+		try {
+			LocalDateTime start = LocalDateTime.parse(startTimeStr, DATE_TIME_FORMATTER);
+			LocalDateTime end = LocalDateTime.parse(endTimeStr, DATE_TIME_FORMATTER);
+			Duration duration = Duration.between(start, end);
+			return Math.abs(duration.toMinutes());
+		} catch (DateTimeParseException e) {
+			throw new IllegalArgumentException("时间格式不正确,应使用 yyyy-MM-dd HH:mm 格式", e);
+		}
+	}
+
+	public List<Map<String, String>> getScheduleConfig(String config) {
+		List<Map<String, String>> result = new ArrayList<>();
+		JSONObject configJson = JSONUtil.parseObj(config);
+		JSONArray scheduleShifts = configJson.getJSONArray("scheduleShift");
+		if (scheduleShifts == null || scheduleShifts.isEmpty()) {
+			return result;
+		}
+		for (int i = 0; i < scheduleShifts.size(); i++) {
+			JSONObject shift = scheduleShifts.getJSONObject(i);
+			String name = shift.getStr("name");
+			String alias = shift.getStr("alias");
+			JSONArray dateRanges = shift.getJSONArray("dateRange");
+			if (dateRanges == null || dateRanges.isEmpty()) {
+				continue;
+			}
+			for (int j = 0; j < dateRanges.size(); j++) {
+				JSONObject dateRange = dateRanges.getJSONObject(j);
+				Map<String, String> scheduleEntry = new HashMap<>();
+				putIfNotNull(scheduleEntry, "name", name);
+				putIfNotNull(scheduleEntry, "alias", alias);
+				putIfNotNull(scheduleEntry, dateRange, "startTime");
+				putIfNotNull(scheduleEntry, dateRange, "endTime");
+				putIfNotNull(scheduleEntry, dateRange, "isSecondDay");
+				result.add(scheduleEntry);
+			}
+		}
+		return result;
+	}
+
+	private void putIfNotNull(Map<String, String> map, JSONObject json, String key) {
+		String value = json.getStr(key);
+		putIfNotNull(map, key, value);
+	}
+
+	private void putIfNotNull(Map<String, String> map, String key, String value) {
+		if (value != null && !value.isEmpty()) {
+			map.put(key, value);
+		}
+	}
+
+	public static List<Map<String, String>> extractNonEmptyDValuesAsArray(StaffScheduleDetailPo detailPo, String startDate, String endDate) {
+		List<Map<String, String>> result = new ArrayList<>();
+		try {
+			LocalDate start = LocalDate.parse(startDate);
+			LocalDate end = LocalDate.parse(endDate);
+			if (start.isAfter(end) || BeanUtils.isEmpty(detailPo)) {
+				return result;
+			}
+			List<LocalDate> dateList = new ArrayList<>();
+			LocalDate current = start;
+			while (!current.isAfter(end)) {
+				dateList.add(current);
+				current = current.plusDays(1);
+			}
+			int maxDays = Math.min(dateList.size(), 45);
+			for (int i = 0; i < maxDays; i++) {
+				LocalDate date = dateList.get(i);
+				int dNumber = i + 1;
+				String methodName = "getD" + dNumber;
+				try {
+					Method method = StaffScheduleDetailPo.class.getMethod(methodName);
+					String value = (String) method.invoke(detailPo);
+					Map<String, String> entry = new HashMap<>();
+					entry.put("date", date.toString());
+					entry.put("value", value);
+					result.add(entry);
+				} catch (NoSuchMethodException e) {
+					break;
+				} catch (Exception e) {
+					throw new RuntimeException("Error accessing field d" + dNumber, e);
+				}
+			}
+		} catch (Exception e) {
+			throw new RuntimeException("Invalid date format or processing error", e);
+		}
+		return result;
+	}
+
 	
 	/**
 	 * 主从表一并删除 

+ 16 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/AttendanceDetailDao.java

@@ -0,0 +1,16 @@
+package com.lc.ibps.components.employee.persistence.dao;
+
+import com.lc.ibps.base.framework.persistence.dao.IDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo;
+
+/**
+ * 考勤明细表 Dao接口
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:54
+ *</pre>
+ */
+public interface AttendanceDetailDao extends IDao<String, AttendanceDetailPo> {
+}

+ 16 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/AttendanceDetailQueryDao.java

@@ -0,0 +1,16 @@
+package com.lc.ibps.components.employee.persistence.dao;
+
+import com.lc.ibps.base.framework.persistence.dao.IQueryDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo;
+
+/**
+ * 考勤明细表 查询Dao接口
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:53
+ *</pre>
+ */
+public interface AttendanceDetailQueryDao extends IQueryDao<String, AttendanceDetailPo> {
+}

+ 16 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/AttendanceReissueDao.java

@@ -0,0 +1,16 @@
+package com.lc.ibps.components.employee.persistence.dao;
+
+import com.lc.ibps.base.framework.persistence.dao.IDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo;
+
+/**
+ * 考勤补卡记录表 Dao接口
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:33
+ *</pre>
+ */
+public interface AttendanceReissueDao extends IDao<String, AttendanceReissuePo> {
+}

+ 16 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/AttendanceReissueQueryDao.java

@@ -0,0 +1,16 @@
+package com.lc.ibps.components.employee.persistence.dao;
+
+import com.lc.ibps.base.framework.persistence.dao.IQueryDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo;
+
+/**
+ * 考勤补卡记录表 查询Dao接口
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:32
+ *</pre>
+ */
+public interface AttendanceReissueQueryDao extends IQueryDao<String, AttendanceReissuePo> {
+}

+ 2 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/StaffScheduleDetailQueryDao.java

@@ -22,4 +22,6 @@ public interface StaffScheduleDetailQueryDao extends IQueryDao<String, StaffSche
 	 * List<StaffScheduleDetailPo>
 	 */
 	public List<StaffScheduleDetailPo> findByMainId(String mainId);
+
+	public StaffScheduleDetailPo get(String id);
 }

+ 26 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/impl/AttendanceDetailDaoImpl.java

@@ -0,0 +1,26 @@
+package com.lc.ibps.components.employee.persistence.dao.impl;
+
+import org.springframework.stereotype.Repository;
+
+import com.lc.ibps.base.db.ddd.dao.MyBatisDaoImpl;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceDetailDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo;
+
+/**
+ * 考勤明细表 Dao接口的实现类
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:53
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@Repository
+public class AttendanceDetailDaoImpl extends MyBatisDaoImpl<String, AttendanceDetailPo> implements AttendanceDetailDao{
+
+    @Override
+    public String getNamespace() {
+        return AttendanceDetailPo.class.getName();
+    }
+}

+ 27 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/impl/AttendanceDetailQueryDaoImpl.java

@@ -0,0 +1,27 @@
+package com.lc.ibps.components.employee.persistence.dao.impl;
+
+
+import org.springframework.stereotype.Repository;
+
+import com.lc.ibps.base.db.ddd.dao.MyBatisQueryDaoImpl;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceDetailQueryDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo;
+
+/**
+ *考勤明细表 查询Dao的实现类
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:53
+ *</pre>
+ */
+ @SuppressWarnings("serial")
+@Repository
+public class AttendanceDetailQueryDaoImpl extends MyBatisQueryDaoImpl<String, AttendanceDetailPo> implements AttendanceDetailQueryDao{
+
+    @Override
+    public String getNamespace() {
+        return AttendanceDetailPo.class.getName();
+    }
+}

+ 26 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/impl/AttendanceReissueDaoImpl.java

@@ -0,0 +1,26 @@
+package com.lc.ibps.components.employee.persistence.dao.impl;
+
+import org.springframework.stereotype.Repository;
+
+import com.lc.ibps.base.db.ddd.dao.MyBatisDaoImpl;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceReissueDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo;
+
+/**
+ * 考勤补卡记录表 Dao接口的实现类
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:32
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@Repository
+public class AttendanceReissueDaoImpl extends MyBatisDaoImpl<String, AttendanceReissuePo> implements AttendanceReissueDao{
+
+    @Override
+    public String getNamespace() {
+        return AttendanceReissuePo.class.getName();
+    }
+}

+ 27 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/dao/impl/AttendanceReissueQueryDaoImpl.java

@@ -0,0 +1,27 @@
+package com.lc.ibps.components.employee.persistence.dao.impl;
+
+
+import org.springframework.stereotype.Repository;
+
+import com.lc.ibps.base.db.ddd.dao.MyBatisQueryDaoImpl;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceReissueQueryDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo;
+
+/**
+ *考勤补卡记录表 查询Dao的实现类
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:32
+ *</pre>
+ */
+ @SuppressWarnings("serial")
+@Repository
+public class AttendanceReissueQueryDaoImpl extends MyBatisQueryDaoImpl<String, AttendanceReissuePo> implements AttendanceReissueQueryDao{
+
+    @Override
+    public String getNamespace() {
+        return AttendanceReissuePo.class.getName();
+    }
+}

+ 35 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/entity/AttendanceDetailPo.java

@@ -0,0 +1,35 @@
+package com.lc.ibps.components.employee.persistence.entity;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import com.lc.ibps.base.core.util.JacksonUtil;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 考勤明细表 实体对象
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:52
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@ApiModel(value = "考勤明细表对象")
+public class AttendanceDetailPo extends AttendanceDetailTbl{
+
+	public static AttendanceDetailPo fromJsonString(String data){
+		if(JacksonUtil.isNotJsonObject(data)){
+			return null;
+		}
+		return JacksonUtil.getDTO(data, AttendanceDetailPo.class);
+	}
+	
+	public static List<AttendanceDetailPo> fromJsonArrayString(String listData){
+		if(JacksonUtil.isNotJsonArray(listData)){
+			return Collections.emptyList();
+		}
+		return JacksonUtil.getDTOList(listData, AttendanceDetailPo.class);
+	}
+}

+ 401 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/entity/AttendanceDetailTbl.java

@@ -0,0 +1,401 @@
+package com.lc.ibps.components.employee.persistence.entity;
+
+import java.util.Date;
+
+import com.lc.ibps.base.framework.persistence.entity.AbstractPo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 考勤明细表 表对象
+ * 
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:53
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@ApiModel(value = "考勤明细表对象")
+public class AttendanceDetailTbl extends AbstractPo<String>{
+	@ApiModelProperty(value = "主键")
+	protected String  id; 		/*主键*/
+	@ApiModelProperty(value = "租户ID")
+	protected String  tenantId; 		/*租户ID*/
+	@ApiModelProperty(value = "IP地址")
+	protected String  ip; 		/*IP地址*/
+	@ApiModelProperty(value = "地点")
+	protected String  diDian; 		/*地点*/
+	@ApiModelProperty(value = "快照")
+	protected String  kuaiZhao; 		/*快照*/
+	@ApiModelProperty(value = "排班ID")
+	protected String  paiBanId; 		/*排班ID*/
+	@ApiModelProperty(value = "排班记录ID")
+	protected String  paiBanJiLuId; 		/*排班记录ID*/
+	@ApiModelProperty(value = "日期")
+	protected String  riQi; 		/*日期*/
+	@ApiModelProperty(value = "用户ID")
+	protected String  yongHuId; 		/*用户ID*/
+	@ApiModelProperty(value = "部门")
+	protected String  buMen; 		/*部门*/
+	@ApiModelProperty(value = "工号")
+	protected String  gongHao; 		/*工号*/
+	@ApiModelProperty(value = "班次名")
+	protected String  banCiMing; 		/*班次名*/
+	@ApiModelProperty(value = "班次别名")
+	protected String  banCiBieMing; 		/*班次别名*/
+	@ApiModelProperty(value = "班次开始")
+	protected String  banCiKaiShi; 		/*班次开始*/
+	@ApiModelProperty(value = "班次结束")
+	protected String  banCiJieShu; 		/*班次结束*/
+	@ApiModelProperty(value = "是否跨日")
+	protected String  shiFouKuaRi; 		/*是否跨日*/
+	@ApiModelProperty(value = "班次时长")
+	protected Long  banCiShiChang; 		/*班次时长*/
+	@ApiModelProperty(value = "上班打卡时间")
+	protected String  daKaShiJian1; 		/*上班打卡时间*/
+	@ApiModelProperty(value = "上班打卡状态")
+	protected String  zhuangTai1; 		/*上班打卡状态*/
+	@ApiModelProperty(value = "下班打卡时间")
+	protected String  daKaShiJian2; 		/*下班打卡时间*/
+	@ApiModelProperty(value = "下班打卡状态")
+	protected String  zhuangTai2; 		/*下班打卡状态*/
+	@ApiModelProperty(value = "工作时长")
+	protected Long  gongZuoShiChan; 		/*工作时长*/
+	@ApiModelProperty(value = "迟到时长")
+	protected Long  chiDaoShiChang; 		/*迟到时长*/
+	@ApiModelProperty(value = "加班时长")
+	protected Long  jiaBanShiChang; 		/*加班时长*/
+	@ApiModelProperty(value = "考勤状态")
+	protected String  kaoQinZhuangTa; 		/*考勤状态*/
+	@ApiModelProperty(value = "打卡次数")
+	protected Long  daKaCiShu; 		/*打卡次数*/
+	@ApiModelProperty(value = "排班名称")
+	protected String  paiBanMingChen; 		/*排班名称*/
+
+	public void setId(String id) 
+	{
+		this.id = id;
+	}
+	/**
+	 * 返回 主键
+	 * @return
+	 */
+	public String getId() 
+	{
+		return this.id;
+	}
+	public void setTenantId(String tenantId) 
+	{
+		this.tenantId = tenantId;
+	}
+	/**
+	 * 返回 租户ID
+	 * @return
+	 */
+	public String getTenantId() 
+	{
+		return this.tenantId;
+	}
+	public void setIp(String ip) 
+	{
+		this.ip = ip;
+	}
+	/**
+	 * 返回 IP地址
+	 * @return
+	 */
+	public String getIp() 
+	{
+		return this.ip;
+	}
+	public void setDiDian(String diDian) 
+	{
+		this.diDian = diDian;
+	}
+	/**
+	 * 返回 地点
+	 * @return
+	 */
+	public String getDiDian() 
+	{
+		return this.diDian;
+	}
+	public void setKuaiZhao(String kuaiZhao) 
+	{
+		this.kuaiZhao = kuaiZhao;
+	}
+	/**
+	 * 返回 快照
+	 * @return
+	 */
+	public String getKuaiZhao() 
+	{
+		return this.kuaiZhao;
+	}
+	public void setPaiBanId(String paiBanId) 
+	{
+		this.paiBanId = paiBanId;
+	}
+	/**
+	 * 返回 排班ID
+	 * @return
+	 */
+	public String getPaiBanId() 
+	{
+		return this.paiBanId;
+	}
+	public void setPaiBanJiLuId(String paiBanJiLuId) 
+	{
+		this.paiBanJiLuId = paiBanJiLuId;
+	}
+	/**
+	 * 返回 排班记录ID
+	 * @return
+	 */
+	public String getPaiBanJiLuId() 
+	{
+		return this.paiBanJiLuId;
+	}
+	public void setRiQi(String riQi) 
+	{
+		this.riQi = riQi;
+	}
+	/**
+	 * 返回 日期
+	 * @return
+	 */
+	public String getRiQi() 
+	{
+		return this.riQi;
+	}
+	public void setYongHuId(String yongHuId) 
+	{
+		this.yongHuId = yongHuId;
+	}
+	/**
+	 * 返回 用户ID
+	 * @return
+	 */
+	public String getYongHuId() 
+	{
+		return this.yongHuId;
+	}
+	public void setBuMen(String buMen) 
+	{
+		this.buMen = buMen;
+	}
+	/**
+	 * 返回 部门
+	 * @return
+	 */
+	public String getBuMen() 
+	{
+		return this.buMen;
+	}
+	public void setGongHao(String gongHao) 
+	{
+		this.gongHao = gongHao;
+	}
+	/**
+	 * 返回 工号
+	 * @return
+	 */
+	public String getGongHao() 
+	{
+		return this.gongHao;
+	}
+	public void setBanCiMing(String banCiMing) 
+	{
+		this.banCiMing = banCiMing;
+	}
+	/**
+	 * 返回 班次名
+	 * @return
+	 */
+	public String getBanCiMing() 
+	{
+		return this.banCiMing;
+	}
+	public void setBanCiBieMing(String banCiBieMing) 
+	{
+		this.banCiBieMing = banCiBieMing;
+	}
+	/**
+	 * 返回 班次别名
+	 * @return
+	 */
+	public String getBanCiBieMing() 
+	{
+		return this.banCiBieMing;
+	}
+	public void setBanCiKaiShi(String banCiKaiShi) 
+	{
+		this.banCiKaiShi = banCiKaiShi;
+	}
+	/**
+	 * 返回 班次开始
+	 * @return
+	 */
+	public String getBanCiKaiShi() 
+	{
+		return this.banCiKaiShi;
+	}
+	public void setBanCiJieShu(String banCiJieShu) 
+	{
+		this.banCiJieShu = banCiJieShu;
+	}
+	/**
+	 * 返回 班次结束
+	 * @return
+	 */
+	public String getBanCiJieShu() 
+	{
+		return this.banCiJieShu;
+	}
+	public void setShiFouKuaRi(String shiFouKuaRi) 
+	{
+		this.shiFouKuaRi = shiFouKuaRi;
+	}
+	/**
+	 * 返回 是否跨日
+	 * @return
+	 */
+	public String getShiFouKuaRi() 
+	{
+		return this.shiFouKuaRi;
+	}
+	public void setBanCiShiChang(Long banCiShiChang) 
+	{
+		this.banCiShiChang = banCiShiChang;
+	}
+	/**
+	 * 返回 班次时长
+	 * @return
+	 */
+	public Long getBanCiShiChang() 
+	{
+		return this.banCiShiChang;
+	}
+	public void setDaKaShiJian1(String daKaShiJian1) 
+	{
+		this.daKaShiJian1 = daKaShiJian1;
+	}
+	/**
+	 * 返回 上班打卡时间
+	 * @return
+	 */
+	public String getDaKaShiJian1() 
+	{
+		return this.daKaShiJian1;
+	}
+	public void setZhuangTai1(String zhuangTai1) 
+	{
+		this.zhuangTai1 = zhuangTai1;
+	}
+	/**
+	 * 返回 上班打卡状态
+	 * @return
+	 */
+	public String getZhuangTai1() 
+	{
+		return this.zhuangTai1;
+	}
+	public void setDaKaShiJian2(String daKaShiJian2) 
+	{
+		this.daKaShiJian2 = daKaShiJian2;
+	}
+	/**
+	 * 返回 下班打卡时间
+	 * @return
+	 */
+	public String getDaKaShiJian2() 
+	{
+		return this.daKaShiJian2;
+	}
+	public void setZhuangTai2(String zhuangTai2) 
+	{
+		this.zhuangTai2 = zhuangTai2;
+	}
+	/**
+	 * 返回 下班打卡状态
+	 * @return
+	 */
+	public String getZhuangTai2() 
+	{
+		return this.zhuangTai2;
+	}
+	public void setGongZuoShiChan(Long gongZuoShiChan) 
+	{
+		this.gongZuoShiChan = gongZuoShiChan;
+	}
+	/**
+	 * 返回 工作时长
+	 * @return
+	 */
+	public Long getGongZuoShiChan() 
+	{
+		return this.gongZuoShiChan;
+	}
+	public void setChiDaoShiChang(Long chiDaoShiChang) 
+	{
+		this.chiDaoShiChang = chiDaoShiChang;
+	}
+	/**
+	 * 返回 迟到时长
+	 * @return
+	 */
+	public Long getChiDaoShiChang() 
+	{
+		return this.chiDaoShiChang;
+	}
+	public void setJiaBanShiChang(Long jiaBanShiChang) 
+	{
+		this.jiaBanShiChang = jiaBanShiChang;
+	}
+	/**
+	 * 返回 加班时长
+	 * @return
+	 */
+	public Long getJiaBanShiChang() 
+	{
+		return this.jiaBanShiChang;
+	}
+	public void setKaoQinZhuangTa(String kaoQinZhuangTa) 
+	{
+		this.kaoQinZhuangTa = kaoQinZhuangTa;
+	}
+	/**
+	 * 返回 考勤状态
+	 * @return
+	 */
+	public String getKaoQinZhuangTa() 
+	{
+		return this.kaoQinZhuangTa;
+	}
+	public void setDaKaCiShu(Long daKaCiShu) 
+	{
+		this.daKaCiShu = daKaCiShu;
+	}
+	/**
+	 * 返回 打卡次数
+	 * @return
+	 */
+	public Long getDaKaCiShu() 
+	{
+		return this.daKaCiShu;
+	}
+	public void setPaiBanMingChen(String paiBanMingChen) 
+	{
+		this.paiBanMingChen = paiBanMingChen;
+	}
+	/**
+	 * 返回 排班名称
+	 * @return
+	 */
+	public String getPaiBanMingChen() 
+	{
+		return this.paiBanMingChen;
+	}
+	
+}

+ 35 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/entity/AttendanceReissuePo.java

@@ -0,0 +1,35 @@
+package com.lc.ibps.components.employee.persistence.entity;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import com.lc.ibps.base.core.util.JacksonUtil;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 考勤补卡记录表 实体对象
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:32
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@ApiModel(value = "考勤补卡记录表对象")
+public class AttendanceReissuePo extends AttendanceReissueTbl{
+
+	public static AttendanceReissuePo fromJsonString(String data){
+		if(JacksonUtil.isNotJsonObject(data)){
+			return null;
+		}
+		return JacksonUtil.getDTO(data, AttendanceReissuePo.class);
+	}
+	
+	public static List<AttendanceReissuePo> fromJsonArrayString(String listData){
+		if(JacksonUtil.isNotJsonArray(listData)){
+			return Collections.emptyList();
+		}
+		return JacksonUtil.getDTOList(listData, AttendanceReissuePo.class);
+	}
+}

+ 290 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/persistence/entity/AttendanceReissueTbl.java

@@ -0,0 +1,290 @@
+package com.lc.ibps.components.employee.persistence.entity;
+
+import java.util.Date;
+
+import com.lc.ibps.base.framework.persistence.entity.AbstractPo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 考勤补卡记录表 表对象
+ * 
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:32
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@ApiModel(value = "考勤补卡记录表对象")
+public class AttendanceReissueTbl extends AbstractPo<String>{
+	@ApiModelProperty(value = "主键")
+	protected String  id; 		/*主键*/
+	@ApiModelProperty(value = "租户ID")
+	protected String  tenantId; 		/*租户ID*/
+	@ApiModelProperty(value = "IP地址")
+	protected String  ip; 		/*IP地址*/
+	@ApiModelProperty(value = "地点")
+	protected String  diDian; 		/*地点*/
+	@ApiModelProperty(value = "快照")
+	protected String  kuaiZhao; 		/*快照*/
+	@ApiModelProperty(value = "编制人")
+	protected String  bianZhiRen; 		/*编制人*/
+	@ApiModelProperty(value = "编制时间")
+	protected String  bianZhiShiJian; 		/*编制时间*/
+	@ApiModelProperty(value = "补卡日期")
+	protected String  buKaRiQi; 		/*补卡日期*/
+	@ApiModelProperty(value = "补卡班次")
+	protected String  buKaBanCi; 		/*补卡班次*/
+	@ApiModelProperty(value = "班次状态")
+	protected String  banCiZhuangTai; 		/*班次状态*/
+	@ApiModelProperty(value = "补卡时间")
+	protected String  buKaShiJian; 		/*补卡时间*/
+	@ApiModelProperty(value = "补卡事由")
+	protected String  buKaShiYou; 		/*补卡事由*/
+	@ApiModelProperty(value = "附件")
+	protected String  fuJian; 		/*附件*/
+	@ApiModelProperty(value = "状态")
+	protected String  zhuangTai; 		/*状态*/
+
+	@ApiModelProperty(value = "排班id")
+	protected String  paiBanId; 		/*排班id*/
+	@ApiModelProperty(value = "排班记录id")
+	protected String  paiBanJiLuId; 		/*排班记录id*/
+	@ApiModelProperty(value = "审核人")
+	protected String  shenHeRen; 		/*审核人*/
+	@ApiModelProperty(value = "审核时间")
+	protected String  shenHeShiJian; 		/*审核时间*/
+	@ApiModelProperty(value = "类型")
+	protected String  type; 		/*类型*/
+	@ApiModelProperty(value = "考勤id")
+	protected String  kaoQinId; 		/*考勤id*/
+	@ApiModelProperty(value = "审核意见")
+	protected String  shenHeYiJian; 		/*审核意见*/
+
+	public String getPaiBanId() {
+		return paiBanId;
+	}
+
+	public void setPaiBanId(String paiBanId) {
+		this.paiBanId = paiBanId;
+	}
+
+	public String getPaiBanJiLuId() {
+		return paiBanJiLuId;
+	}
+
+	public void setPaiBanJiLuId(String paiBanJiLuId) {
+		this.paiBanJiLuId = paiBanJiLuId;
+	}
+
+	public String getShenHeRen() {
+		return shenHeRen;
+	}
+
+	public void setShenHeRen(String shenHeRen) {
+		this.shenHeRen = shenHeRen;
+	}
+
+	public String getShenHeShiJian() {
+		return shenHeShiJian;
+	}
+
+	public void setShenHeShiJian(String shenHeShiJian) {
+		this.shenHeShiJian = shenHeShiJian;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getKaoQinId() {
+		return kaoQinId;
+	}
+
+	public void setKaoQinId(String kaoQinId) {
+		this.kaoQinId = kaoQinId;
+	}
+
+	public String getShenHeYiJian() {
+		return shenHeYiJian;
+	}
+
+	public void setShenHeYiJian(String shenHeYiJian) {
+		this.shenHeYiJian = shenHeYiJian;
+	}
+
+	public void setId(String id)
+	{
+		this.id = id;
+	}
+	/**
+	 * 返回 主键
+	 * @return
+	 */
+	public String getId() 
+	{
+		return this.id;
+	}
+	public void setTenantId(String tenantId) 
+	{
+		this.tenantId = tenantId;
+	}
+	/**
+	 * 返回 租户ID
+	 * @return
+	 */
+	public String getTenantId() 
+	{
+		return this.tenantId;
+	}
+	public void setIp(String ip) 
+	{
+		this.ip = ip;
+	}
+	/**
+	 * 返回 IP地址
+	 * @return
+	 */
+	public String getIp() 
+	{
+		return this.ip;
+	}
+	public void setDiDian(String diDian) 
+	{
+		this.diDian = diDian;
+	}
+	/**
+	 * 返回 地点
+	 * @return
+	 */
+	public String getDiDian() 
+	{
+		return this.diDian;
+	}
+	public void setKuaiZhao(String kuaiZhao) 
+	{
+		this.kuaiZhao = kuaiZhao;
+	}
+	/**
+	 * 返回 快照
+	 * @return
+	 */
+	public String getKuaiZhao() 
+	{
+		return this.kuaiZhao;
+	}
+	public void setBianZhiRen(String bianZhiRen) 
+	{
+		this.bianZhiRen = bianZhiRen;
+	}
+	/**
+	 * 返回 编制人
+	 * @return
+	 */
+	public String getBianZhiRen() 
+	{
+		return this.bianZhiRen;
+	}
+	public void setBianZhiShiJian(String bianZhiShiJian) 
+	{
+		this.bianZhiShiJian = bianZhiShiJian;
+	}
+	/**
+	 * 返回 编制时间
+	 * @return
+	 */
+	public String getBianZhiShiJian() 
+	{
+		return this.bianZhiShiJian;
+	}
+	public void setBuKaRiQi(String buKaRiQi) 
+	{
+		this.buKaRiQi = buKaRiQi;
+	}
+	/**
+	 * 返回 补卡日期
+	 * @return
+	 */
+	public String getBuKaRiQi() 
+	{
+		return this.buKaRiQi;
+	}
+	public void setBuKaBanCi(String buKaBanCi) 
+	{
+		this.buKaBanCi = buKaBanCi;
+	}
+	/**
+	 * 返回 补卡班次
+	 * @return
+	 */
+	public String getBuKaBanCi() 
+	{
+		return this.buKaBanCi;
+	}
+	public void setBanCiZhuangTai(String banCiZhuangTai) 
+	{
+		this.banCiZhuangTai = banCiZhuangTai;
+	}
+	/**
+	 * 返回 班次状态
+	 * @return
+	 */
+	public String getBanCiZhuangTai() 
+	{
+		return this.banCiZhuangTai;
+	}
+	public void setBuKaShiJian(String buKaShiJian) 
+	{
+		this.buKaShiJian = buKaShiJian;
+	}
+	/**
+	 * 返回 补卡时间
+	 * @return
+	 */
+	public String getBuKaShiJian() 
+	{
+		return this.buKaShiJian;
+	}
+	public void setBuKaShiYou(String buKaShiYou) 
+	{
+		this.buKaShiYou = buKaShiYou;
+	}
+	/**
+	 * 返回 补卡事由
+	 * @return
+	 */
+	public String getBuKaShiYou() 
+	{
+		return this.buKaShiYou;
+	}
+	public void setFuJian(String fuJian) 
+	{
+		this.fuJian = fuJian;
+	}
+	/**
+	 * 返回 附件
+	 * @return
+	 */
+	public String getFuJian() 
+	{
+		return this.fuJian;
+	}
+	public void setZhuangTai(String zhuangTai) 
+	{
+		this.zhuangTai = zhuangTai;
+	}
+	/**
+	 * 返回 状态
+	 * @return
+	 */
+	public String getZhuangTai() 
+	{
+		return this.zhuangTai;
+	}
+	
+}

+ 141 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/provider/AttendanceDetailProvider.java

@@ -0,0 +1,141 @@
+package com.lc.ibps.components.employee.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import com.lc.ibps.api.base.constants.StateEnum;
+import com.lc.ibps.api.base.query.QueryFilter;
+import com.lc.ibps.base.core.constants.StringPool;
+import com.lc.ibps.base.core.util.BeanUtils;
+import com.lc.ibps.cloud.entity.APIPageList;
+import com.lc.ibps.cloud.entity.APIRequest;
+import com.lc.ibps.cloud.entity.APIResult;
+import com.lc.ibps.cloud.provider.GenericProvider;
+import com.lc.ibps.components.employee.api.IAttendanceDetailService;
+import com.lc.ibps.components.employee.domain.AttendanceDetail;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo;
+import com.lc.ibps.components.employee.repository.AttendanceDetailRepository;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.Extension;
+import io.swagger.annotations.ExtensionProperty;
+
+/**
+ * 考勤明细表 服务类
+ * <pre>
+ * 构建组:ibps-provider-attendanceDetail
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:55
+ *</pre>
+ */
+@Api(tags = "考勤明细表管理", value = "考勤明细表数据")
+@Service
+public class AttendanceDetailProvider extends GenericProvider implements IAttendanceDetailService{
+
+	@Resource
+	private AttendanceDetailRepository attendanceDetailRepository;
+
+	@ApiOperation(value = "考勤明细表列表(分页条件查询)数据", notes = "考勤明细表列表(分页条件查询)数据")
+	@Override
+	public APIResult<APIPageList<AttendanceDetailPo>> query(
+			@ApiParam(name = "request", value = "传入查询请求json字符串", required = true) 
+			@RequestBody(required = true) APIRequest request) {
+		APIResult<APIPageList<AttendanceDetailPo>> result = new APIResult<>();
+		try {
+			QueryFilter queryFilter = getQueryFilter(request);
+			List<AttendanceDetailPo> data = attendanceDetailRepository.query(queryFilter);
+			APIPageList<AttendanceDetailPo> apiPageData = getAPIPageList(data);
+			result.setData(apiPageData);
+		} catch (Exception e) {
+			// TODO ERROR => other error message
+			setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
+		}
+		return result;
+	}
+
+	@ApiOperation(value = "根据id查询考勤明细表", notes = "根据id查询考勤明细表")
+	@Override
+	public APIResult<AttendanceDetailPo> get(
+			@ApiParam(name = "id", value = "查询id", required = true) 
+			@RequestParam(name = "id", required = true) String id) {
+		APIResult<AttendanceDetailPo> result = new APIResult<>();
+		try {
+			AttendanceDetailPo attendanceDetailPo = attendanceDetailRepository.get(id);
+			result.setData(attendanceDetailPo);
+		} catch (Exception e) {
+			setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
+		}
+		return result;
+	}
+	
+	@ApiOperation(value = "保存", notes = "保存考勤明细表信息", 
+			extensions = {
+					@Extension(properties = {
+							@ExtensionProperty(name = "submitCtrl", value = StringPool.Y)
+					})
+			})
+	@Override
+	public APIResult<Void> save(
+			@ApiParam(name = "attendanceDetailPo", value = "考勤明细表对象", required = true)  
+			@RequestBody(required = true) AttendanceDetailPo attendanceDetailPo) {
+		APIResult<Void> result = new APIResult<Void>();
+		try {
+			logger.info(" com.lc.ibps.components.provider.AttendanceDetailProvider.save()--->attendanceDetailPo: {}", attendanceDetailPo.toString());
+			AttendanceDetail domain = attendanceDetailRepository.newInstance(attendanceDetailPo);
+			domain.save();
+			result.setMessage("保存考勤明细表成功");
+		} catch (Exception e) {
+			setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
+		}
+		return result;
+	}
+
+	@ApiOperation(value = "打卡", notes = "打卡",extensions = {@Extension(properties = {@ExtensionProperty(name = "submitCtrl", value = StringPool.Y)})})
+	@Override
+	public APIResult<AttendanceDetailPo> clockIn(
+			@ApiParam(name = "id", value = "考勤id", required = true)
+			@RequestParam(name = "id", required = true) String id) {
+		APIResult<AttendanceDetailPo> result = new APIResult<>();
+		try {
+			AttendanceDetail domain = attendanceDetailRepository.newInstance();
+			domain.clockIn(id);
+			result.setMessage("打卡成功!");
+		} catch (Exception e) {
+			setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
+		}
+		return result;
+	}
+
+	@ApiOperation(value = "删除", notes = "删除考勤明细表", 
+			extensions = {
+					@Extension(properties = {
+							@ExtensionProperty(name = "submitCtrl", value = StringPool.Y)
+					})
+			})
+	@Override
+	public APIResult<Void> remove(
+			@ApiParam(name = "ids", value = "考勤明细表ID数组", required = true)  
+			@RequestParam(name = "ids", required = true) String[] ids) {
+		APIResult<Void> result = new APIResult<Void>();
+		try {
+			AttendanceDetail domain = attendanceDetailRepository.newInstance();
+			domain.deleteByIds(ids);
+			result.setMessage("删除考勤明细表成功");
+		} catch (Exception e) {
+			setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
+		}
+		return result;
+	}
+
+
+	
+}

+ 123 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/provider/AttendanceReissueProvider.java

@@ -0,0 +1,123 @@
+package com.lc.ibps.components.employee.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import com.lc.ibps.api.base.constants.StateEnum;
+import com.lc.ibps.api.base.query.QueryFilter;
+import com.lc.ibps.base.core.constants.StringPool;
+import com.lc.ibps.base.core.util.BeanUtils;
+import com.lc.ibps.cloud.entity.APIPageList;
+import com.lc.ibps.cloud.entity.APIRequest;
+import com.lc.ibps.cloud.entity.APIResult;
+import com.lc.ibps.cloud.provider.GenericProvider;
+import com.lc.ibps.components.employee.api.IAttendanceReissueService;
+import com.lc.ibps.components.employee.domain.AttendanceReissue;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo;
+import com.lc.ibps.components.employee.repository.AttendanceReissueRepository;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.Extension;
+import io.swagger.annotations.ExtensionProperty;
+
+/**
+ * 考勤补卡记录表 服务类
+ * <pre>
+ * 构建组:ibps-provider-attendanceReissue
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:34
+ *</pre>
+ */
+@Api(tags = "考勤补卡记录表管理", value = "考勤补卡记录表数据")
+@Service
+public class AttendanceReissueProvider extends GenericProvider implements IAttendanceReissueService{
+
+	@Resource
+	private AttendanceReissueRepository attendanceReissueRepository;
+
+	@ApiOperation(value = "考勤补卡记录表列表(分页条件查询)数据", notes = "考勤补卡记录表列表(分页条件查询)数据")
+	@Override
+	public APIResult<APIPageList<AttendanceReissuePo>> query(
+			@ApiParam(name = "request", value = "传入查询请求json字符串", required = true) 
+			@RequestBody(required = true) APIRequest request) {
+		APIResult<APIPageList<AttendanceReissuePo>> result = new APIResult<>();
+		try {
+			QueryFilter queryFilter = getQueryFilter(request);
+			List<AttendanceReissuePo> data = attendanceReissueRepository.query(queryFilter);
+			APIPageList<AttendanceReissuePo> apiPageData = getAPIPageList(data);
+			result.setData(apiPageData);
+		} catch (Exception e) {
+			// TODO ERROR => other error message
+			setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
+		}
+		return result;
+	}
+
+	@ApiOperation(value = "根据id查询考勤补卡记录表", notes = "根据id查询考勤补卡记录表")
+	@Override
+	public APIResult<AttendanceReissuePo> get(
+			@ApiParam(name = "id", value = "查询id", required = true) 
+			@RequestParam(name = "id", required = true) String id) {
+		APIResult<AttendanceReissuePo> result = new APIResult<>();
+		try {
+			AttendanceReissuePo attendanceReissuePo = attendanceReissueRepository.get(id);
+			result.setData(attendanceReissuePo);
+		} catch (Exception e) {
+			setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
+		}
+		return result;
+	}
+	
+	@ApiOperation(value = "保存", notes = "保存考勤补卡记录表信息", 
+			extensions = {
+					@Extension(properties = {
+							@ExtensionProperty(name = "submitCtrl", value = StringPool.Y)
+					})
+			})
+	@Override
+	public APIResult<Void> save(
+			@ApiParam(name = "attendanceReissuePo", value = "考勤补卡记录表对象", required = true)  
+			@RequestBody(required = true) AttendanceReissuePo attendanceReissuePo) {
+		APIResult<Void> result = new APIResult<Void>();
+		try {
+			logger.info(" com.lc.ibps.components.provider.AttendanceReissueProvider.save()--->attendanceReissuePo: {}", attendanceReissuePo.toString());
+			AttendanceReissue domain = attendanceReissueRepository.newInstance(attendanceReissuePo);
+			domain.save();
+			result.setMessage("保存考勤补卡记录表成功");
+		} catch (Exception e) {
+			setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
+		}
+		return result;
+	}
+
+	@ApiOperation(value = "删除", notes = "删除考勤补卡记录表", 
+			extensions = {
+					@Extension(properties = {
+							@ExtensionProperty(name = "submitCtrl", value = StringPool.Y)
+					})
+			})
+	@Override
+	public APIResult<Void> remove(
+			@ApiParam(name = "ids", value = "考勤补卡记录表ID数组", required = true)  
+			@RequestParam(name = "ids", required = true) String[] ids) {
+		APIResult<Void> result = new APIResult<Void>();
+		try {
+			AttendanceReissue domain = attendanceReissueRepository.newInstance();
+			domain.deleteByIds(ids);
+			result.setMessage("删除考勤补卡记录表成功");
+		} catch (Exception e) {
+			setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
+		}
+		return result;
+	}
+	
+}

+ 21 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/repository/AttendanceDetailRepository.java

@@ -0,0 +1,21 @@
+package com.lc.ibps.components.employee.repository;
+
+import com.lc.ibps.base.framework.repository.IRepository;
+import com.lc.ibps.components.employee.domain.AttendanceDetail;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo;
+
+/**
+ * 考勤明细表 仓库接口
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:54
+ *</pre>
+ */
+public interface AttendanceDetailRepository extends IRepository<String, AttendanceDetailPo,AttendanceDetail>{
+
+
+
+
+}

+ 18 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/repository/AttendanceReissueRepository.java

@@ -0,0 +1,18 @@
+package com.lc.ibps.components.employee.repository;
+
+import com.lc.ibps.base.framework.repository.IRepository;
+import com.lc.ibps.components.employee.domain.AttendanceReissue;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo;
+
+/**
+ * 考勤补卡记录表 仓库接口
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:33
+ *</pre>
+ */
+public interface AttendanceReissueRepository extends IRepository<String, AttendanceReissuePo,AttendanceReissue>{
+
+}

+ 56 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/repository/impl/AttendanceDetailRepositoryImpl.java

@@ -0,0 +1,56 @@
+package com.lc.ibps.components.employee.repository.impl;
+
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Repository;
+
+import com.lc.ibps.base.core.util.AppUtil;
+import com.lc.ibps.base.framework.persistence.dao.IQueryDao;
+import com.lc.ibps.base.framework.repository.AbstractRepository;
+import com.lc.ibps.components.employee.domain.AttendanceDetail;
+import com.lc.ibps.components.employee.repository.AttendanceDetailRepository;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceDetailQueryDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo;
+
+/**
+ * 考勤明细表 仓库的实现类
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:09:54
+ *</pre>
+ */
+@Repository
+public class AttendanceDetailRepositoryImpl extends AbstractRepository<String, AttendanceDetailPo,AttendanceDetail> implements AttendanceDetailRepository{
+	  
+	@Resource
+	private  AttendanceDetailQueryDao attendanceDetailQueryDao;
+
+	public AttendanceDetail newInstance() {
+		AttendanceDetailPo po = new AttendanceDetailPo();
+		AttendanceDetail attendanceDetail = AppUtil.getBean(AttendanceDetail.class);
+		attendanceDetail.setData(po);
+		return attendanceDetail;
+	}
+
+	public AttendanceDetail newInstance(AttendanceDetailPo po) {
+		AttendanceDetail attendanceDetail = AppUtil.getBean(AttendanceDetail.class);
+		attendanceDetail.setData(po);
+		return attendanceDetail;
+	} 
+	
+	@Override
+	protected IQueryDao<String, AttendanceDetailPo> getQueryDao() {
+		return attendanceDetailQueryDao;
+	}
+	
+	@Override
+	public String getInternalCacheName() {
+		return "attendanceDetail";
+	}
+	
+
+	
+}

+ 56 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/components/employee/repository/impl/AttendanceReissueRepositoryImpl.java

@@ -0,0 +1,56 @@
+package com.lc.ibps.components.employee.repository.impl;
+
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Repository;
+
+import com.lc.ibps.base.core.util.AppUtil;
+import com.lc.ibps.base.framework.persistence.dao.IQueryDao;
+import com.lc.ibps.base.framework.repository.AbstractRepository;
+import com.lc.ibps.components.employee.domain.AttendanceReissue;
+import com.lc.ibps.components.employee.repository.AttendanceReissueRepository;
+import com.lc.ibps.components.employee.persistence.dao.AttendanceReissueQueryDao;
+import com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo;
+
+/**
+ * 考勤补卡记录表 仓库的实现类
+ *
+ *<pre> 
+ * 开发公司:深圳市金源信通科技有限公司
+ * 开发人员:codegen
+ * 创建时间:2025-04-17 11:10:33
+ *</pre>
+ */
+@Repository
+public class AttendanceReissueRepositoryImpl extends AbstractRepository<String, AttendanceReissuePo,AttendanceReissue> implements AttendanceReissueRepository{
+	  
+	@Resource
+	private  AttendanceReissueQueryDao attendanceReissueQueryDao;
+
+	public AttendanceReissue newInstance() {
+		AttendanceReissuePo po = new AttendanceReissuePo();
+		AttendanceReissue attendanceReissue = AppUtil.getBean(AttendanceReissue.class);
+		attendanceReissue.setData(po);
+		return attendanceReissue;
+	}
+
+	public AttendanceReissue newInstance(AttendanceReissuePo po) {
+		AttendanceReissue attendanceReissue = AppUtil.getBean(AttendanceReissue.class);
+		attendanceReissue.setData(po);
+		return attendanceReissue;
+	} 
+	
+	@Override
+	protected IQueryDao<String, AttendanceReissuePo> getQueryDao() {
+		return attendanceReissueQueryDao;
+	}
+	
+	@Override
+	public String getInternalCacheName() {
+		return "attendanceReissue";
+	}
+	
+
+	
+}

+ 130 - 0
ibps-provider-root/modules/provider-business/src/main/resources/com/lc/ibps/employee/persistence/mapping/AttendanceDetail.map.xml

@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo">
+	<!--<cache type="net.oschina.j2cache.mybatis.J2CacheAdapter"/>-->
+	<resultMap id="AttendanceDetailPo" type="com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo">
+		<id property="id" column="ID_" jdbcType="VARCHAR"/>
+		<result property="tenantId" column="TENANT_ID_" jdbcType="VARCHAR"/>
+		<result property="ip" column="IP_" jdbcType="VARCHAR"/>
+		<result property="createBy" column="CREATE_BY_" jdbcType="VARCHAR"/>
+		<result property="createTime" column="CREATE_TIME_" jdbcType="TIMESTAMP"/>
+		<result property="updateBy" column="UPDATE_BY_" jdbcType="VARCHAR"/>
+		<result property="updateTime" column="UPDATE_TIME_" jdbcType="TIMESTAMP"/>
+		<result property="diDian" column="DI_DIAN_" jdbcType="VARCHAR"/>
+		<result property="kuaiZhao" column="KUAI_ZHAO_" jdbcType="VARCHAR"/>
+		<result property="paiBanId" column="PAI_BAN_ID_" jdbcType="VARCHAR"/>
+		<result property="paiBanJiLuId" column="PAI_BAN_JI_LU_ID_" jdbcType="VARCHAR"/>
+		<result property="riQi" column="RI_QI_" jdbcType="VARCHAR"/>
+		<result property="yongHuId" column="YONG_HU_ID_" jdbcType="VARCHAR"/>
+		<result property="buMen" column="BU_MEN_" jdbcType="VARCHAR"/>
+		<result property="gongHao" column="GONG_HAO_" jdbcType="VARCHAR"/>
+		<result property="banCiMing" column="BAN_CI_MING_" jdbcType="VARCHAR"/>
+		<result property="banCiBieMing" column="BAN_CI_BIE_MING_" jdbcType="VARCHAR"/>
+		<result property="banCiKaiShi" column="BAN_CI_KAI_SHI_" jdbcType="VARCHAR"/>
+		<result property="banCiJieShu" column="BAN_CI_JIE_SHU_" jdbcType="VARCHAR"/>
+		<result property="shiFouKuaRi" column="SHI_FOU_KUA_RI_" jdbcType="VARCHAR"/>
+		<result property="banCiShiChang" column="BAN_CI_SHI_CHANG_" jdbcType="NUMERIC"/>
+		<result property="daKaShiJian1" column="DA_KA_SHI_JIAN_1_" jdbcType="VARCHAR"/>
+		<result property="zhuangTai1" column="ZHUANG_TAI_1_" jdbcType="VARCHAR"/>
+		<result property="daKaShiJian2" column="DA_KA_SHI_JIAN_2_" jdbcType="VARCHAR"/>
+		<result property="zhuangTai2" column="ZHUANG_TAI_2_" jdbcType="VARCHAR"/>
+		<result property="gongZuoShiChan" column="GONG_ZUO_SHI_CHAN" jdbcType="NUMERIC"/>
+		<result property="chiDaoShiChang" column="CHI_DAO_SHI_CHANG" jdbcType="NUMERIC"/>
+		<result property="jiaBanShiChang" column="JIA_BAN_SHI_CHANG" jdbcType="NUMERIC"/>
+		<result property="kaoQinZhuangTa" column="KAO_QIN_ZHUANG_TA" jdbcType="VARCHAR"/>
+		<result property="daKaCiShu" column="DA_KA_CI_SHU_" jdbcType="NUMERIC"/>
+		<result property="paiBanMingChen" column="PAI_BAN_MING_CHEN" jdbcType="VARCHAR"/>
+	</resultMap>
+	
+	<sql id="columns">
+		ID_,TENANT_ID_,IP_,CREATE_BY_,CREATE_TIME_,UPDATE_BY_,UPDATE_TIME_,DI_DIAN_,KUAI_ZHAO_,PAI_BAN_ID_,PAI_BAN_JI_LU_ID_,RI_QI_,YONG_HU_ID_,BU_MEN_,GONG_HAO_,BAN_CI_MING_,BAN_CI_BIE_MING_,BAN_CI_KAI_SHI_,BAN_CI_JIE_SHU_,SHI_FOU_KUA_RI_,BAN_CI_SHI_CHANG_,DA_KA_SHI_JIAN_1_,ZHUANG_TAI_1_,DA_KA_SHI_JIAN_2_,ZHUANG_TAI_2_,GONG_ZUO_SHI_CHAN,CHI_DAO_SHI_CHANG,JIA_BAN_SHI_CHANG,KAO_QIN_ZHUANG_TA,DA_KA_CI_SHU_,PAI_BAN_MING_CHEN
+	</sql>
+	
+	<insert id="create" parameterType="com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo">
+		INSERT INTO T_ATTENDANCE_DETAIL
+		(<include refid="columns"/>)
+		VALUES 
+		(#{id,jdbcType=VARCHAR}, #{tenantId,jdbcType=VARCHAR}, #{ip,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{diDian,jdbcType=VARCHAR}, #{kuaiZhao,jdbcType=VARCHAR}, #{paiBanId,jdbcType=VARCHAR}, #{paiBanJiLuId,jdbcType=VARCHAR}, #{riQi,jdbcType=VARCHAR}, #{yongHuId,jdbcType=VARCHAR}, #{buMen,jdbcType=VARCHAR}, #{gongHao,jdbcType=VARCHAR}, #{banCiMing,jdbcType=VARCHAR}, #{banCiBieMing,jdbcType=VARCHAR}, #{banCiKaiShi,jdbcType=VARCHAR}, #{banCiJieShu,jdbcType=VARCHAR}, #{shiFouKuaRi,jdbcType=VARCHAR}, #{banCiShiChang,jdbcType=NUMERIC}, #{daKaShiJian1,jdbcType=VARCHAR}, #{zhuangTai1,jdbcType=VARCHAR}, #{daKaShiJian2,jdbcType=VARCHAR}, #{zhuangTai2,jdbcType=VARCHAR}, #{gongZuoShiChan,jdbcType=NUMERIC}, #{chiDaoShiChang,jdbcType=NUMERIC}, #{jiaBanShiChang,jdbcType=NUMERIC}, #{kaoQinZhuangTa,jdbcType=VARCHAR}, #{daKaCiShu,jdbcType=NUMERIC}, #{paiBanMingChen,jdbcType=VARCHAR})
+	</insert>
+	
+	<select id="get" parameterType="java.lang.String" resultMap="AttendanceDetailPo">
+		SELECT <include refid="columns"/> FROM T_ATTENDANCE_DETAIL 
+		WHERE 
+		ID_=#{id}
+	</select>
+	
+	
+	<sql id="querySql" >
+		SELECT <include refid="columns"/> FROM T_ATTENDANCE_DETAIL
+		<where>
+			<if test="@o.Ognl@isNotEmpty(whereSql)">
+				${whereSql}
+			</if>
+		</where>
+		<if test="@o.Ognl@isNotEmpty(orderBySql)">
+			ORDER BY ${orderBySql}
+		</if>
+		<if test="@o.Ognl@isEmpty(orderBySql)">
+			ORDER BY ID_ DESC
+		</if>
+	</sql>
+	
+	<select id="query" parameterType="java.util.Map" resultMap="AttendanceDetailPo">
+		<include refid="querySql"/>
+	</select>
+	
+	<select id="queryIds" parameterType="java.util.Map" resultMap="AttendanceDetailPo">
+		SELECT ID_ FROM (<include refid="querySql"/>) T
+	</select>
+	
+	<select id="findByIds" resultMap="AttendanceDetailPo">
+		SELECT <include refid="columns"/> FROM T_ATTENDANCE_DETAIL
+			WHERE ID_ in 
+			<foreach item="id" index="index" collection="ids" open="(" separator="," close=")">  
+				#{id}  
+			</foreach>  		
+			ORDER BY ID_ DESC			
+	</select>	
+	
+	<update id="update" parameterType="com.lc.ibps.components.employee.persistence.entity.AttendanceDetailPo">
+		UPDATE T_ATTENDANCE_DETAIL SET
+		TENANT_ID_=#{tenantId,jdbcType=VARCHAR},
+		IP_=#{ip,jdbcType=VARCHAR},
+		UPDATE_BY_=#{updateBy,jdbcType=VARCHAR},
+		UPDATE_TIME_=#{updateTime,jdbcType=TIMESTAMP},
+		DI_DIAN_=#{diDian,jdbcType=VARCHAR},
+		KUAI_ZHAO_=#{kuaiZhao,jdbcType=VARCHAR},
+		PAI_BAN_ID_=#{paiBanId,jdbcType=VARCHAR},
+		PAI_BAN_JI_LU_ID_=#{paiBanJiLuId,jdbcType=VARCHAR},
+		RI_QI_=#{riQi,jdbcType=VARCHAR},
+		YONG_HU_ID_=#{yongHuId,jdbcType=VARCHAR},
+		BU_MEN_=#{buMen,jdbcType=VARCHAR},
+		GONG_HAO_=#{gongHao,jdbcType=VARCHAR},
+		BAN_CI_MING_=#{banCiMing,jdbcType=VARCHAR},
+		BAN_CI_BIE_MING_=#{banCiBieMing,jdbcType=VARCHAR},
+		BAN_CI_KAI_SHI_=#{banCiKaiShi,jdbcType=VARCHAR},
+		BAN_CI_JIE_SHU_=#{banCiJieShu,jdbcType=VARCHAR},
+		SHI_FOU_KUA_RI_=#{shiFouKuaRi,jdbcType=VARCHAR},
+		BAN_CI_SHI_CHANG_=#{banCiShiChang,jdbcType=NUMERIC},
+		DA_KA_SHI_JIAN_1_=#{daKaShiJian1,jdbcType=VARCHAR},
+		ZHUANG_TAI_1_=#{zhuangTai1,jdbcType=VARCHAR},
+		DA_KA_SHI_JIAN_2_=#{daKaShiJian2,jdbcType=VARCHAR},
+		ZHUANG_TAI_2_=#{zhuangTai2,jdbcType=VARCHAR},
+		GONG_ZUO_SHI_CHAN=#{gongZuoShiChan,jdbcType=NUMERIC},
+		CHI_DAO_SHI_CHANG=#{chiDaoShiChang,jdbcType=NUMERIC},
+		JIA_BAN_SHI_CHANG=#{jiaBanShiChang,jdbcType=NUMERIC},
+		KAO_QIN_ZHUANG_TA=#{kaoQinZhuangTa,jdbcType=VARCHAR},
+		DA_KA_CI_SHU_=#{daKaCiShu,jdbcType=NUMERIC},
+		PAI_BAN_MING_CHEN=#{paiBanMingChen,jdbcType=VARCHAR}
+		WHERE
+		ID_=#{id}
+	</update>
+	
+	<delete id="remove" parameterType="java.lang.String">
+		DELETE FROM T_ATTENDANCE_DETAIL 
+		WHERE
+		ID_=#{id}
+	</delete>
+	
+	
+</mapper>

+ 113 - 0
ibps-provider-root/modules/provider-business/src/main/resources/com/lc/ibps/employee/persistence/mapping/AttendanceReissue.map.xml

@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo">
+	<!--<cache type="net.oschina.j2cache.mybatis.J2CacheAdapter"/>-->
+	<resultMap id="AttendanceReissuePo" type="com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo">
+		<id property="id" column="ID_" jdbcType="VARCHAR"/>
+		<result property="tenantId" column="TENANT_ID_" jdbcType="VARCHAR"/>
+		<result property="ip" column="IP_" jdbcType="VARCHAR"/>
+		<result property="createBy" column="CREATE_BY_" jdbcType="VARCHAR"/>
+		<result property="createTime" column="CREATE_TIME_" jdbcType="TIMESTAMP"/>
+		<result property="updateBy" column="UPDATE_BY_" jdbcType="VARCHAR"/>
+		<result property="updateTime" column="UPDATE_TIME_" jdbcType="TIMESTAMP"/>
+		<result property="diDian" column="DI_DIAN_" jdbcType="VARCHAR"/>
+		<result property="kuaiZhao" column="KUAI_ZHAO_" jdbcType="VARCHAR"/>
+		<result property="bianZhiRen" column="BIAN_ZHI_REN_" jdbcType="VARCHAR"/>
+		<result property="bianZhiShiJian" column="BIAN_ZHI_SHI_JIAN" jdbcType="VARCHAR"/>
+		<result property="buKaRiQi" column="BU_KA_RI_QI_" jdbcType="VARCHAR"/>
+		<result property="buKaBanCi" column="BU_KA_BAN_CI_" jdbcType="VARCHAR"/>
+		<result property="banCiZhuangTai" column="BAN_CI_ZHUANG_TAI" jdbcType="VARCHAR"/>
+		<result property="buKaShiJian" column="BU_KA_SHI_JIAN_" jdbcType="VARCHAR"/>
+		<result property="buKaShiYou" column="BU_KA_SHI_YOU_" jdbcType="VARCHAR"/>
+		<result property="fuJian" column="FU_JIAN_" jdbcType="VARCHAR"/>
+		<result property="zhuangTai" column="ZHUANG_TAI_" jdbcType="VARCHAR"/>
+
+		<result property="paiBanId" column="PAI_BAN_ID_" jdbcType="VARCHAR"/>
+		<result property="paiBanJiLuId" column="PAI_BAN_JI_LU_ID_" jdbcType="VARCHAR"/>
+		<result property="shenHeRen" column="SHEN_HE_REN_" jdbcType="VARCHAR"/>
+		<result property="shenHeShiJian" column="SHEN_HE_SHI_JIAN_" jdbcType="VARCHAR"/>
+		<result property="type" column="TYPE_" jdbcType="VARCHAR"/>
+		<result property="kaoQinId" column="KAO_QIN_ID_" jdbcType="VARCHAR"/>
+		<result property="shenHeYiJian" column="SHEN_HE_YI_JIAN_" jdbcType="VARCHAR"/>
+	</resultMap>
+	
+	<sql id="columns">
+		ID_,TENANT_ID_,IP_,CREATE_BY_,CREATE_TIME_,UPDATE_BY_,UPDATE_TIME_,DI_DIAN_,KUAI_ZHAO_,BIAN_ZHI_REN_,BIAN_ZHI_SHI_JIAN,BU_KA_RI_QI_,BU_KA_BAN_CI_,
+		BAN_CI_ZHUANG_TAI,BU_KA_SHI_JIAN_,BU_KA_SHI_YOU_,FU_JIAN_,ZHUANG_TAI_,PAI_BAN_ID_,PAI_BAN_JI_LU_ID_,SHEN_HE_REN_,SHEN_HE_SHI_JIAN_,TYPE_,KAO_QIN_ID_,SHEN_HE_YI_JIAN_
+	</sql>
+	
+	<insert id="create" parameterType="com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo">
+		INSERT INTO T_ATTENDANCE_REISSUE
+		(<include refid="columns"/>)
+		VALUES 
+		(#{id,jdbcType=VARCHAR}, #{tenantId,jdbcType=VARCHAR}, #{ip,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{diDian,jdbcType=VARCHAR}, #{kuaiZhao,jdbcType=VARCHAR}, #{bianZhiRen,jdbcType=VARCHAR}, #{bianZhiShiJian,jdbcType=VARCHAR}, #{buKaRiQi,jdbcType=VARCHAR}, #{buKaBanCi,jdbcType=VARCHAR}, #{banCiZhuangTai,jdbcType=VARCHAR}, #{buKaShiJian,jdbcType=VARCHAR}, #{buKaShiYou,jdbcType=VARCHAR}, #{fuJian,jdbcType=VARCHAR}, #{zhuangTai,jdbcType=VARCHAR})
+	</insert>
+	
+	<select id="get" parameterType="java.lang.String" resultMap="AttendanceReissuePo">
+		SELECT <include refid="columns"/> FROM T_ATTENDANCE_REISSUE 
+		WHERE 
+		ID_=#{id}
+	</select>
+	
+	
+	<sql id="querySql" >
+		SELECT <include refid="columns"/> FROM T_ATTENDANCE_REISSUE
+		<where>
+			<if test="@o.Ognl@isNotEmpty(whereSql)">
+				${whereSql}
+			</if>
+		</where>
+		<if test="@o.Ognl@isNotEmpty(orderBySql)">
+			ORDER BY ${orderBySql}
+		</if>
+		<if test="@o.Ognl@isEmpty(orderBySql)">
+			ORDER BY ID_ DESC
+		</if>
+	</sql>
+	
+	<select id="query" parameterType="java.util.Map" resultMap="AttendanceReissuePo">
+		<include refid="querySql"/>
+	</select>
+	
+	<select id="queryIds" parameterType="java.util.Map" resultMap="AttendanceReissuePo">
+		SELECT ID_ FROM (<include refid="querySql"/>) T
+	</select>
+	
+	<select id="findByIds" resultMap="AttendanceReissuePo">
+		SELECT <include refid="columns"/> FROM T_ATTENDANCE_REISSUE
+			WHERE ID_ in 
+			<foreach item="id" index="index" collection="ids" open="(" separator="," close=")">  
+				#{id}  
+			</foreach>  		
+			ORDER BY ID_ DESC			
+	</select>	
+	
+	<update id="update" parameterType="com.lc.ibps.components.employee.persistence.entity.AttendanceReissuePo">
+		UPDATE T_ATTENDANCE_REISSUE SET
+		TENANT_ID_=#{tenantId,jdbcType=VARCHAR},
+		IP_=#{ip,jdbcType=VARCHAR},
+		UPDATE_BY_=#{updateBy,jdbcType=VARCHAR},
+		UPDATE_TIME_=#{updateTime,jdbcType=TIMESTAMP},
+		DI_DIAN_=#{diDian,jdbcType=VARCHAR},
+		KUAI_ZHAO_=#{kuaiZhao,jdbcType=VARCHAR},
+		BIAN_ZHI_REN_=#{bianZhiRen,jdbcType=VARCHAR},
+		BIAN_ZHI_SHI_JIAN=#{bianZhiShiJian,jdbcType=VARCHAR},
+		BU_KA_RI_QI_=#{buKaRiQi,jdbcType=VARCHAR},
+		BU_KA_BAN_CI_=#{buKaBanCi,jdbcType=VARCHAR},
+		BAN_CI_ZHUANG_TAI=#{banCiZhuangTai,jdbcType=VARCHAR},
+		BU_KA_SHI_JIAN_=#{buKaShiJian,jdbcType=VARCHAR},
+		BU_KA_SHI_YOU_=#{buKaShiYou,jdbcType=VARCHAR},
+		FU_JIAN_=#{fuJian,jdbcType=VARCHAR},
+		ZHUANG_TAI_=#{zhuangTai,jdbcType=VARCHAR}
+		WHERE
+		ID_=#{id}
+	</update>
+	
+	<delete id="remove" parameterType="java.lang.String">
+		DELETE FROM T_ATTENDANCE_REISSUE 
+		WHERE
+		ID_=#{id}
+	</delete>
+	
+	
+</mapper>