Kaynağa Gözat

考勤规则代码

dzx 1 yıl önce
ebeveyn
işleme
b094d5cd99
19 değiştirilmiş dosya ile 1509 ekleme ve 0 silme
  1. 101 0
      src/main/java/com/xjrsoft/module/attendance/controller/AttendanceRuleCategoryController.java
  2. 74 0
      src/main/java/com/xjrsoft/module/attendance/dto/AddAttendanceRuleCategoryDto.java
  3. 168 0
      src/main/java/com/xjrsoft/module/attendance/dto/AddAttendanceRuleDetailsDto.java
  4. 42 0
      src/main/java/com/xjrsoft/module/attendance/dto/AddAttendanceUserRelationDto.java
  5. 19 0
      src/main/java/com/xjrsoft/module/attendance/dto/AttendanceRuleCategoryPageDto.java
  6. 24 0
      src/main/java/com/xjrsoft/module/attendance/dto/UpdateAttendanceRuleCategoryDto.java
  7. 130 0
      src/main/java/com/xjrsoft/module/attendance/entity/AttendanceRuleCategory.java
  8. 220 0
      src/main/java/com/xjrsoft/module/attendance/entity/AttendanceRuleDetails.java
  9. 94 0
      src/main/java/com/xjrsoft/module/attendance/entity/AttendanceUserRelation.java
  10. 16 0
      src/main/java/com/xjrsoft/module/attendance/mapper/AttendanceRuleCategoryMapper.java
  11. 16 0
      src/main/java/com/xjrsoft/module/attendance/mapper/AttendanceRuleDetailsMapper.java
  12. 16 0
      src/main/java/com/xjrsoft/module/attendance/mapper/AttendanceUserRelationMapper.java
  13. 39 0
      src/main/java/com/xjrsoft/module/attendance/service/IAttendanceRuleCategoryService.java
  14. 125 0
      src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceRuleCategoryServiceImpl.java
  15. 93 0
      src/main/java/com/xjrsoft/module/attendance/vo/AttendanceRuleCategoryPageVo.java
  16. 76 0
      src/main/java/com/xjrsoft/module/attendance/vo/AttendanceRuleCategoryVo.java
  17. 170 0
      src/main/java/com/xjrsoft/module/attendance/vo/AttendanceRuleDetailsVo.java
  18. 43 0
      src/main/java/com/xjrsoft/module/attendance/vo/AttendanceUserRelationVo.java
  19. 43 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 101 - 0
src/main/java/com/xjrsoft/module/attendance/controller/AttendanceRuleCategoryController.java

@@ -0,0 +1,101 @@
+package com.xjrsoft.module.attendance.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.attendance.dto.AddAttendanceRuleCategoryDto;
+import com.xjrsoft.module.attendance.dto.AttendanceRuleCategoryPageDto;
+import com.xjrsoft.module.attendance.dto.UpdateAttendanceRuleCategoryDto;
+import com.xjrsoft.module.attendance.entity.AttendanceRuleCategory;
+import com.xjrsoft.module.attendance.service.IAttendanceRuleCategoryService;
+import com.xjrsoft.module.attendance.vo.AttendanceRuleCategoryPageVo;
+import com.xjrsoft.module.attendance.vo.AttendanceRuleCategoryVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+* @title: 考勤规则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/attendance" + "/attendanceRuleCategory")
+@Api(value = "/attendance"  + "/attendanceRuleCategory",tags = "考勤规则代码")
+@AllArgsConstructor
+public class AttendanceRuleCategoryController {
+
+
+    private final IAttendanceRuleCategoryService attendanceRuleCategoryService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="考勤规则列表(分页)")
+    @SaCheckPermission("attendancerulecategory:detail")
+    public RT<PageOutput<AttendanceRuleCategoryPageVo>> page(@Valid AttendanceRuleCategoryPageDto dto){
+
+        LambdaQueryWrapper<AttendanceRuleCategory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                    .orderByDesc(AttendanceRuleCategory::getId)
+                .select(AttendanceRuleCategory.class,x -> VoToColumnUtil.fieldsToColumns(AttendanceRuleCategoryPageVo.class).contains(x.getProperty()));
+        IPage<AttendanceRuleCategory> page = attendanceRuleCategoryService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<AttendanceRuleCategoryPageVo> pageOutput = ConventPage.getPageOutput(page, AttendanceRuleCategoryPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询考勤规则信息")
+    @SaCheckPermission("attendancerulecategory:detail")
+    public RT<AttendanceRuleCategoryVo> info(@RequestParam Long id){
+        AttendanceRuleCategory attendanceRuleCategory = attendanceRuleCategoryService.getByIdDeep(id);
+        if (attendanceRuleCategory == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(attendanceRuleCategory, AttendanceRuleCategoryVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增考勤规则")
+    @SaCheckPermission("attendancerulecategory:add")
+    public RT<Boolean> add(@Valid @RequestBody AddAttendanceRuleCategoryDto dto){
+        AttendanceRuleCategory attendanceRuleCategory = BeanUtil.toBean(dto, AttendanceRuleCategory.class);
+        boolean isSuccess = attendanceRuleCategoryService.add(attendanceRuleCategory);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改考勤规则")
+    @SaCheckPermission("attendancerulecategory:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateAttendanceRuleCategoryDto dto){
+
+        AttendanceRuleCategory attendanceRuleCategory = BeanUtil.toBean(dto, AttendanceRuleCategory.class);
+        return RT.ok(attendanceRuleCategoryService.update(attendanceRuleCategory));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除考勤规则")
+    @SaCheckPermission("attendancerulecategory:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(attendanceRuleCategoryService.delete(ids));
+
+    }
+
+}

+ 74 - 0
src/main/java/com/xjrsoft/module/attendance/dto/AddAttendanceRuleCategoryDto.java

@@ -0,0 +1,74 @@
+package com.xjrsoft.module.attendance.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+
+/**
+* @title: 考勤规则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+public class AddAttendanceRuleCategoryDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 考勤规则名称
+    */
+    @ApiModelProperty("考勤规则名称")
+    private String name;
+    /**
+    * 考勤开始时间
+    */
+    @ApiModelProperty("考勤开始时间")
+    private Date startDate;
+    /**
+    * 考勤结束时间
+    */
+    @ApiModelProperty("考勤结束时间")
+    private Date endDate;
+    /**
+    * 被考勤角色(xjr_role)
+    */
+    @ApiModelProperty("被考勤角色(xjr_role)")
+    private Long roleId;
+    /**
+    * 考勤人员范围(1:全体 2:指定)
+    */
+    @ApiModelProperty("考勤人员范围(1:全体 2:指定)")
+    private Integer attendanceRange;
+    /**
+    * 就读方式(xjr_dictionary_item[stduy_status])
+    */
+    @ApiModelProperty("就读方式(xjr_dictionary_item[stduy_status])")
+    private String stduyStatus;
+    /**
+    * 状态(1:启用 0:禁用)
+    */
+    @ApiModelProperty("状态(1:启用 0:禁用)")
+    private Integer status;
+
+    /**
+    * attendanceRuleDetails
+    */
+    @ApiModelProperty("attendanceRuleDetails子表")
+    private List<AddAttendanceRuleDetailsDto> attendanceRuleDetailsList;
+    /**
+    * attendanceUserRelation
+    */
+    @ApiModelProperty("attendanceUserRelation子表")
+    private List<AddAttendanceUserRelationDto> attendanceUserRelationList;
+}

+ 168 - 0
src/main/java/com/xjrsoft/module/attendance/dto/AddAttendanceRuleDetailsDto.java

@@ -0,0 +1,168 @@
+package com.xjrsoft.module.attendance.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalTime;
+
+
+
+/**
+* @title: 考勤规则细则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+public class AddAttendanceRuleDetailsDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 周几(星期一~日或节假日)
+    */
+    @ApiModelProperty("周几(星期一~日或节假日)")
+    private String dateType;
+    /**
+    * 是否允许进出校
+    */
+    @ApiModelProperty("是否允许进出校")
+    private Integer isAllowInOutSchool;
+    /**
+    * 是否考勤
+    */
+    @ApiModelProperty("是否考勤")
+    private Integer isAttendance;
+    /**
+    * 上学时间前多少分钟进行提醒
+    */
+    @ApiModelProperty("上学时间前多少分钟进行提醒")
+    private Integer agoMinutes;
+    /**
+    * 超过上学时间多少分钟未打卡进行提醒
+    */
+    @ApiModelProperty("超过上学时间多少分钟未打卡进行提醒")
+    private Integer overMinutes;
+    /**
+    * 上学时间内是否允许进出
+    */
+    @ApiModelProperty("上学时间内是否允许进出")
+    private Integer isAllowInOutSchoolTime;
+    /**
+    * 上午是否启用(1:是 0:否)
+    */
+    @ApiModelProperty("上午是否启用(1:是 0:否)")
+    private Integer amStatus;
+    /**
+    * 上午上学时间
+    */
+    @ApiModelProperty("上午上学时间")
+    private LocalTime amStartTime;
+    /**
+    * 上午放学时间
+    */
+    @ApiModelProperty("上午放学时间")
+    private LocalTime amEndTime;
+    /**
+    * 上午迟到旷课分钟数
+    */
+    @ApiModelProperty("上午迟到旷课分钟数")
+    private Integer amLateMinutes;
+    /**
+    * 上午是否为节假日(1:是 0:否)
+    */
+    @ApiModelProperty("上午是否为节假日(1:是 0:否)")
+    private Integer amIsHolidays;
+    /**
+    * 上午为节假日前一天时上学时间
+    */
+    @ApiModelProperty("上午为节假日前一天时上学时间")
+    private LocalTime amHolidaysStartTime;
+    /**
+    * 上午为节假日前一天时放学时间
+    */
+    @ApiModelProperty("上午为节假日前一天时放学时间")
+    private LocalTime amHolidaysEndTime;
+    /**
+    * 下午是否启用(1:是 0:否)
+    */
+    @ApiModelProperty("下午是否启用(1:是 0:否)")
+    private Integer pmStatus;
+    /**
+    * 下午上学时间
+    */
+    @ApiModelProperty("下午上学时间")
+    private LocalTime pmStartTime;
+    /**
+    * 下午放学时间
+    */
+    @ApiModelProperty("下午放学时间")
+    private LocalTime pmEndTime;
+    /**
+    * 下午迟到旷课分钟数
+    */
+    @ApiModelProperty("下午迟到旷课分钟数")
+    private Integer pmLateMinutes;
+    /**
+    * 下午是否为节假日(1:是 0:否)
+    */
+    @ApiModelProperty("下午是否为节假日(1:是 0:否)")
+    private Integer pmIsHolidays;
+    /**
+    * 下午为节假日前一天时上学时间
+    */
+    @ApiModelProperty("下午为节假日前一天时上学时间")
+    private LocalTime pmHolidaysStartTime;
+    /**
+    * 下午为节假日前一天时放学时间
+    */
+    @ApiModelProperty("下午为节假日前一天时放学时间")
+    private LocalTime pmHolidaysEndTime;
+    /**
+    * 晚上是否启用(1:是 0:否)
+    */
+    @ApiModelProperty("晚上是否启用(1:是 0:否)")
+    private Integer eveningStatus;
+    /**
+    * 晚上上学时间
+    */
+    @ApiModelProperty("晚上上学时间")
+    private LocalTime eveningStartTime;
+    /**
+    * 晚上放学时间
+    */
+    @ApiModelProperty("晚上放学时间")
+    private LocalTime eveningEndTime;
+    /**
+    * 晚上迟到旷课分钟数
+    */
+    @ApiModelProperty("晚上迟到旷课分钟数")
+    private Integer eveningLateMinutes;
+    /**
+    * 晚上是否为节假日(1:是 0:否)
+    */
+    @ApiModelProperty("晚上是否为节假日(1:是 0:否)")
+    private Integer eveningIsHolidays;
+    /**
+    * 晚上为节假日前一天时上学时间
+    */
+    @ApiModelProperty("晚上为节假日前一天时上学时间")
+    private LocalTime eveningHolidaysStartTime;
+    /**
+    * 晚上为节假日前一天时放学时间
+    */
+    @ApiModelProperty("晚上为节假日前一天时放学时间")
+    private LocalTime eveningHolidaysEndTime;
+    /**
+    * 考勤规则(attendance_rule_category)
+    */
+    @ApiModelProperty("考勤规则(attendance_rule_category)")
+    private Long attendanceRuleCategoryId;
+
+}

+ 42 - 0
src/main/java/com/xjrsoft/module/attendance/dto/AddAttendanceUserRelationDto.java

@@ -0,0 +1,42 @@
+package com.xjrsoft.module.attendance.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+
+/**
+* @title: 考勤规则人员绑定表
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+public class AddAttendanceUserRelationDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 所属班级id
+    */
+    @ApiModelProperty("所属班级id")
+    private Long classId;
+    /**
+    * 所属部门id
+    */
+    @ApiModelProperty("所属部门id")
+    private Long deptId;
+    /**
+    * 用id
+    */
+    @ApiModelProperty("用id")
+    private Long userId;
+    /**
+    * 考勤规则(attendance_rule_category)
+    */
+    @ApiModelProperty("考勤规则(attendance_rule_category)")
+    private Long attendanceRuleCategoryId;
+
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/attendance/dto/AttendanceRuleCategoryPageDto.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.attendance.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 考勤规则分页查询入参
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class AttendanceRuleCategoryPageDto extends PageInput {
+
+
+}

+ 24 - 0
src/main/java/com/xjrsoft/module/attendance/dto/UpdateAttendanceRuleCategoryDto.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.attendance.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+* @title: 考勤规则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+public class UpdateAttendanceRuleCategoryDto extends AddAttendanceRuleCategoryDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+}

+ 130 - 0
src/main/java/com/xjrsoft/module/attendance/entity/AttendanceRuleCategory.java

@@ -0,0 +1,130 @@
+package com.xjrsoft.module.attendance.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+* @title: 考勤规则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+@TableName("attendance_rule_category")
+@ApiModel(value = "attendance_rule_category", description = "考勤规则")
+public class AttendanceRuleCategory implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 考勤规则名称
+    */
+    @ApiModelProperty("考勤规则名称")
+    private String name;
+    /**
+    * 考勤开始时间
+    */
+    @ApiModelProperty("考勤开始时间")
+    private Date startDate;
+    /**
+    * 考勤结束时间
+    */
+    @ApiModelProperty("考勤结束时间")
+    private Date endDate;
+    /**
+    * 被考勤角色(xjr_role)
+    */
+    @ApiModelProperty("被考勤角色(xjr_role)")
+    private Long roleId;
+    /**
+    * 考勤人员范围(1:全体 2:指定)
+    */
+    @ApiModelProperty("考勤人员范围(1:全体 2:指定)")
+    private Integer attendanceRange;
+    /**
+    * 就读方式(xjr_dictionary_item[stduy_status])
+    */
+    @ApiModelProperty("就读方式(xjr_dictionary_item[stduy_status])")
+    private String stduyStatus;
+    /**
+    * 状态(1:启用 0:禁用)
+    */
+    @ApiModelProperty("状态(1:启用 0:禁用)")
+    private Integer status;
+
+    /**
+    * attendanceRuleDetails
+    */
+    @ApiModelProperty("attendanceRuleDetails子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "attendanceRuleCategoryId")
+    private List<AttendanceRuleDetails> attendanceRuleDetailsList;
+    /**
+    * attendanceUserRelation
+    */
+    @ApiModelProperty("attendanceUserRelation子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "attendanceRuleCategoryId")
+    private List<AttendanceUserRelation> attendanceUserRelationList;
+
+}

+ 220 - 0
src/main/java/com/xjrsoft/module/attendance/entity/AttendanceRuleDetails.java

@@ -0,0 +1,220 @@
+package com.xjrsoft.module.attendance.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.util.Date;
+
+
+/**
+* @title: 考勤规则细则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+@TableName("attendance_rule_details")
+@ApiModel(value = "attendance_rule_details", description = "考勤规则细则")
+public class AttendanceRuleDetails implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 周几(星期一~日或节假日)
+    */
+    @ApiModelProperty("周几(星期一~日或节假日)")
+    private String dateType;
+    /**
+    * 是否允许进出校
+    */
+    @ApiModelProperty("是否允许进出校")
+    private Integer isAllowInOutSchool;
+    /**
+    * 是否考勤
+    */
+    @ApiModelProperty("是否考勤")
+    private Integer isAttendance;
+    /**
+    * 上学时间前多少分钟进行提醒
+    */
+    @ApiModelProperty("上学时间前多少分钟进行提醒")
+    private Integer agoMinutes;
+    /**
+    * 超过上学时间多少分钟未打卡进行提醒
+    */
+    @ApiModelProperty("超过上学时间多少分钟未打卡进行提醒")
+    private Integer overMinutes;
+    /**
+    * 上学时间内是否允许进出
+    */
+    @ApiModelProperty("上学时间内是否允许进出")
+    private Integer isAllowInOutSchoolTime;
+    /**
+    * 上午是否启用(1:是 0:否)
+    */
+    @ApiModelProperty("上午是否启用(1:是 0:否)")
+    private Integer amStatus;
+    /**
+    * 上午上学时间
+    */
+    @ApiModelProperty("上午上学时间")
+    private LocalTime amStartTime;
+    /**
+    * 上午放学时间
+    */
+    @ApiModelProperty("上午放学时间")
+    private LocalTime amEndTime;
+    /**
+    * 上午迟到旷课分钟数
+    */
+    @ApiModelProperty("上午迟到旷课分钟数")
+    private Integer amLateMinutes;
+    /**
+    * 上午是否为节假日(1:是 0:否)
+    */
+    @ApiModelProperty("上午是否为节假日(1:是 0:否)")
+    private Integer amIsHolidays;
+    /**
+    * 上午为节假日前一天时上学时间
+    */
+    @ApiModelProperty("上午为节假日前一天时上学时间")
+    private LocalTime amHolidaysStartTime;
+    /**
+    * 上午为节假日前一天时放学时间
+    */
+    @ApiModelProperty("上午为节假日前一天时放学时间")
+    private LocalTime amHolidaysEndTime;
+    /**
+    * 下午是否启用(1:是 0:否)
+    */
+    @ApiModelProperty("下午是否启用(1:是 0:否)")
+    private Integer pmStatus;
+    /**
+    * 下午上学时间
+    */
+    @ApiModelProperty("下午上学时间")
+    private LocalTime pmStartTime;
+    /**
+    * 下午放学时间
+    */
+    @ApiModelProperty("下午放学时间")
+    private LocalTime pmEndTime;
+    /**
+    * 下午迟到旷课分钟数
+    */
+    @ApiModelProperty("下午迟到旷课分钟数")
+    private Integer pmLateMinutes;
+    /**
+    * 下午是否为节假日(1:是 0:否)
+    */
+    @ApiModelProperty("下午是否为节假日(1:是 0:否)")
+    private Integer pmIsHolidays;
+    /**
+    * 下午为节假日前一天时上学时间
+    */
+    @ApiModelProperty("下午为节假日前一天时上学时间")
+    private LocalTime pmHolidaysStartTime;
+    /**
+    * 下午为节假日前一天时放学时间
+    */
+    @ApiModelProperty("下午为节假日前一天时放学时间")
+    private LocalTime pmHolidaysEndTime;
+    /**
+    * 晚上是否启用(1:是 0:否)
+    */
+    @ApiModelProperty("晚上是否启用(1:是 0:否)")
+    private Integer eveningStatus;
+    /**
+    * 晚上上学时间
+    */
+    @ApiModelProperty("晚上上学时间")
+    private LocalTime eveningStartTime;
+    /**
+    * 晚上放学时间
+    */
+    @ApiModelProperty("晚上放学时间")
+    private LocalTime eveningEndTime;
+    /**
+    * 晚上迟到旷课分钟数
+    */
+    @ApiModelProperty("晚上迟到旷课分钟数")
+    private Integer eveningLateMinutes;
+    /**
+    * 晚上是否为节假日(1:是 0:否)
+    */
+    @ApiModelProperty("晚上是否为节假日(1:是 0:否)")
+    private Integer eveningIsHolidays;
+    /**
+    * 晚上为节假日前一天时上学时间
+    */
+    @ApiModelProperty("晚上为节假日前一天时上学时间")
+    private LocalTime eveningHolidaysStartTime;
+    /**
+    * 晚上为节假日前一天时放学时间
+    */
+    @ApiModelProperty("晚上为节假日前一天时放学时间")
+    private LocalTime eveningHolidaysEndTime;
+    /**
+    * 考勤规则(attendance_rule_category)
+    */
+    @ApiModelProperty("考勤规则(attendance_rule_category)")
+    private Long attendanceRuleCategoryId;
+
+
+}

+ 94 - 0
src/main/java/com/xjrsoft/module/attendance/entity/AttendanceUserRelation.java

@@ -0,0 +1,94 @@
+package com.xjrsoft.module.attendance.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+* @title: 考勤规则人员绑定表
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+@TableName("attendance_user_relation")
+@ApiModel(value = "attendance_user_relation", description = "考勤规则人员绑定表")
+public class AttendanceUserRelation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 所属班级id
+    */
+    @ApiModelProperty("所属班级id")
+    private Long classId;
+    /**
+    * 所属部门id
+    */
+    @ApiModelProperty("所属部门id")
+    private Long deptId;
+    /**
+    * 用id
+    */
+    @ApiModelProperty("用id")
+    private Long userId;
+    /**
+    * 考勤规则(attendance_rule_category)
+    */
+    @ApiModelProperty("考勤规则(attendance_rule_category)")
+    private Long attendanceRuleCategoryId;
+
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/attendance/mapper/AttendanceRuleCategoryMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.attendance.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.attendance.entity.AttendanceRuleCategory;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 考勤规则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Mapper
+public interface AttendanceRuleCategoryMapper extends MPJBaseMapper<AttendanceRuleCategory> {
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/attendance/mapper/AttendanceRuleDetailsMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.attendance.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 考勤规则细则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Mapper
+public interface AttendanceRuleDetailsMapper extends MPJBaseMapper<AttendanceRuleDetails> {
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/attendance/mapper/AttendanceUserRelationMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.attendance.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 考勤规则人员绑定表
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Mapper
+public interface AttendanceUserRelationMapper extends MPJBaseMapper<AttendanceUserRelation> {
+
+}

+ 39 - 0
src/main/java/com/xjrsoft/module/attendance/service/IAttendanceRuleCategoryService.java

@@ -0,0 +1,39 @@
+package com.xjrsoft.module.attendance.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.attendance.entity.AttendanceRuleCategory;
+
+import java.util.List;
+
+/**
+* @title: 考勤规则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+
+public interface IAttendanceRuleCategoryService extends MPJBaseService<AttendanceRuleCategory> {
+    /**
+    * 新增
+    *
+    * @param attendanceRuleCategory
+    * @return
+    */
+    Boolean add(AttendanceRuleCategory attendanceRuleCategory);
+
+    /**
+    * 更新
+    *
+    * @param attendanceRuleCategory
+    * @return
+    */
+    Boolean update(AttendanceRuleCategory attendanceRuleCategory);
+
+    /**
+    * 删除
+    *
+    * @param ids
+    * @return
+    */
+    Boolean delete(List<Long> ids);
+}

+ 125 - 0
src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceRuleCategoryServiceImpl.java

@@ -0,0 +1,125 @@
+package com.xjrsoft.module.attendance.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.attendance.entity.AttendanceRuleCategory;
+import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
+import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
+import com.xjrsoft.module.attendance.mapper.AttendanceRuleCategoryMapper;
+import com.xjrsoft.module.attendance.mapper.AttendanceRuleDetailsMapper;
+import com.xjrsoft.module.attendance.mapper.AttendanceUserRelationMapper;
+import com.xjrsoft.module.attendance.service.IAttendanceRuleCategoryService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+* @title: 考勤规则
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<AttendanceRuleCategoryMapper, AttendanceRuleCategory> implements IAttendanceRuleCategoryService {
+    private final AttendanceRuleCategoryMapper attendanceRuleCategoryAttendanceRuleCategoryMapper;
+
+    private final AttendanceRuleDetailsMapper attendanceRuleCategoryAttendanceRuleDetailsMapper;
+    private final AttendanceUserRelationMapper attendanceRuleCategoryAttendanceUserRelationMapper;
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean add(AttendanceRuleCategory attendanceRuleCategory) {
+        attendanceRuleCategoryAttendanceRuleCategoryMapper.insert(attendanceRuleCategory);
+        for (AttendanceRuleDetails attendanceRuleDetails : attendanceRuleCategory.getAttendanceRuleDetailsList()) {
+            attendanceRuleDetails.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
+            attendanceRuleCategoryAttendanceRuleDetailsMapper.insert(attendanceRuleDetails);
+        }
+        for (AttendanceUserRelation attendanceUserRelation : attendanceRuleCategory.getAttendanceUserRelationList()) {
+            attendanceUserRelation.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
+            attendanceRuleCategoryAttendanceUserRelationMapper.insert(attendanceUserRelation);
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean update(AttendanceRuleCategory attendanceRuleCategory) {
+        attendanceRuleCategoryAttendanceRuleCategoryMapper.updateById(attendanceRuleCategory);
+        //********************************* AttendanceRuleDetails  增删改  开始 *******************************************/
+        {
+            // 查出所有子级的id
+            List<AttendanceRuleDetails> attendanceRuleDetailsList = attendanceRuleCategoryAttendanceRuleDetailsMapper.selectList(Wrappers.lambdaQuery(AttendanceRuleDetails.class).eq(AttendanceRuleDetails::getAttendanceRuleCategoryId, attendanceRuleCategory.getId()).select(AttendanceRuleDetails::getId));
+            List<Long> attendanceRuleDetailsIds = attendanceRuleDetailsList.stream().map(AttendanceRuleDetails::getId).collect(Collectors.toList());
+            //原有子表单 没有被删除的主键
+            List<Long> attendanceRuleDetailsOldIds = attendanceRuleCategory.getAttendanceRuleDetailsList().stream().map(AttendanceRuleDetails::getId).filter(Objects::nonNull).collect(Collectors.toList());
+            //找到需要删除的id
+            List<Long> attendanceRuleDetailsRemoveIds = attendanceRuleDetailsIds.stream().filter(item -> !attendanceRuleDetailsOldIds.contains(item)).collect(Collectors.toList());
+
+            for (AttendanceRuleDetails attendanceRuleDetails : attendanceRuleCategory.getAttendanceRuleDetailsList()) {
+                //如果不等于空则修改
+                if (attendanceRuleDetails.getId() != null) {
+                    attendanceRuleCategoryAttendanceRuleDetailsMapper.updateById(attendanceRuleDetails);
+                }
+                //如果等于空 则新增
+                else {
+                    //已经不存在的id 删除
+                    attendanceRuleDetails.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
+                    attendanceRuleCategoryAttendanceRuleDetailsMapper.insert(attendanceRuleDetails);
+                }
+            }
+            //已经不存在的id 删除
+            if(attendanceRuleDetailsRemoveIds.size() > 0){
+                attendanceRuleCategoryAttendanceRuleDetailsMapper.deleteBatchIds(attendanceRuleDetailsRemoveIds);
+            }
+        }
+        //********************************* AttendanceRuleDetails  增删改  结束 *******************************************/
+
+        //********************************* AttendanceUserRelation  增删改  开始 *******************************************/
+        {
+            // 查出所有子级的id
+            List<AttendanceUserRelation> attendanceUserRelationList = attendanceRuleCategoryAttendanceUserRelationMapper.selectList(Wrappers.lambdaQuery(AttendanceUserRelation.class).eq(AttendanceUserRelation::getAttendanceRuleCategoryId, attendanceRuleCategory.getId()).select(AttendanceUserRelation::getId));
+            List<Long> attendanceUserRelationIds = attendanceUserRelationList.stream().map(AttendanceUserRelation::getId).collect(Collectors.toList());
+            //原有子表单 没有被删除的主键
+            List<Long> attendanceUserRelationOldIds = attendanceRuleCategory.getAttendanceUserRelationList().stream().map(AttendanceUserRelation::getId).filter(Objects::nonNull).collect(Collectors.toList());
+            //找到需要删除的id
+            List<Long> attendanceUserRelationRemoveIds = attendanceUserRelationIds.stream().filter(item -> !attendanceUserRelationOldIds.contains(item)).collect(Collectors.toList());
+
+            for (AttendanceUserRelation attendanceUserRelation : attendanceRuleCategory.getAttendanceUserRelationList()) {
+                //如果不等于空则修改
+                if (attendanceUserRelation.getId() != null) {
+                    attendanceRuleCategoryAttendanceUserRelationMapper.updateById(attendanceUserRelation);
+                }
+                //如果等于空 则新增
+                else {
+                    //已经不存在的id 删除
+                    attendanceUserRelation.setAttendanceRuleCategoryId(attendanceRuleCategory.getId());
+                    attendanceRuleCategoryAttendanceUserRelationMapper.insert(attendanceUserRelation);
+                }
+            }
+            //已经不存在的id 删除
+            if(attendanceUserRelationRemoveIds.size() > 0){
+                attendanceRuleCategoryAttendanceUserRelationMapper.deleteBatchIds(attendanceUserRelationRemoveIds);
+            }
+        }
+        //********************************* AttendanceUserRelation  增删改  结束 *******************************************/
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(List<Long> ids) {
+        attendanceRuleCategoryAttendanceRuleCategoryMapper.deleteBatchIds(ids);
+        attendanceRuleCategoryAttendanceRuleDetailsMapper.delete(Wrappers.lambdaQuery(AttendanceRuleDetails.class).in(AttendanceRuleDetails::getAttendanceRuleCategoryId, ids));
+        attendanceRuleCategoryAttendanceUserRelationMapper.delete(Wrappers.lambdaQuery(AttendanceUserRelation.class).in(AttendanceUserRelation::getAttendanceRuleCategoryId, ids));
+
+        return true;
+    }
+}

+ 93 - 0
src/main/java/com/xjrsoft/module/attendance/vo/AttendanceRuleCategoryPageVo.java

@@ -0,0 +1,93 @@
+package com.xjrsoft.module.attendance.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 考勤规则分页列表出参
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+public class AttendanceRuleCategoryPageVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private String id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Date createDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Date modifyDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer deleteMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 考勤规则名称
+    */
+    @ApiModelProperty("考勤规则名称")
+    private String name;
+    /**
+    * 考勤开始时间
+    */
+    @ApiModelProperty("考勤开始时间")
+    private Date startDate;
+    /**
+    * 考勤结束时间
+    */
+    @ApiModelProperty("考勤结束时间")
+    private Date endDate;
+    /**
+    * 被考勤角色(xjr_role)
+    */
+    @ApiModelProperty("被考勤角色(xjr_role)")
+    private Long roleId;
+    /**
+    * 考勤人员范围(1:全体 2:指定)
+    */
+    @ApiModelProperty("考勤人员范围(1:全体 2:指定)")
+    private Integer attendanceRange;
+    /**
+    * 就读方式(xjr_dictionary_item[stduy_status])
+    */
+    @ApiModelProperty("就读方式(xjr_dictionary_item[stduy_status])")
+    private String stduyStatus;
+    /**
+    * 状态(1:启用 0:禁用)
+    */
+    @ApiModelProperty("状态(1:启用 0:禁用)")
+    private Integer status;
+
+}

+ 76 - 0
src/main/java/com/xjrsoft/module/attendance/vo/AttendanceRuleCategoryVo.java

@@ -0,0 +1,76 @@
+package com.xjrsoft.module.attendance.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+* @title: 考勤规则表单出参
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+public class AttendanceRuleCategoryVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 考勤规则名称
+    */
+    @ApiModelProperty("考勤规则名称")
+    private String name;
+    /**
+    * 考勤开始时间
+    */
+    @ApiModelProperty("考勤开始时间")
+    private Date startDate;
+    /**
+    * 考勤结束时间
+    */
+    @ApiModelProperty("考勤结束时间")
+    private Date endDate;
+    /**
+    * 被考勤角色(xjr_role)
+    */
+    @ApiModelProperty("被考勤角色(xjr_role)")
+    private Long roleId;
+    /**
+    * 考勤人员范围(1:全体 2:指定)
+    */
+    @ApiModelProperty("考勤人员范围(1:全体 2:指定)")
+    private Integer attendanceRange;
+    /**
+    * 就读方式(xjr_dictionary_item[stduy_status])
+    */
+    @ApiModelProperty("就读方式(xjr_dictionary_item[stduy_status])")
+    private String stduyStatus;
+    /**
+    * 状态(1:启用 0:禁用)
+    */
+    @ApiModelProperty("状态(1:启用 0:禁用)")
+    private Integer status;
+
+
+    /**
+    * attendanceRuleDetails
+    */
+    @ApiModelProperty("attendanceRuleDetails子表")
+    private List<AttendanceRuleDetailsVo> attendanceRuleDetailsList;
+    /**
+    * attendanceUserRelation
+    */
+    @ApiModelProperty("attendanceUserRelation子表")
+    private List<AttendanceUserRelationVo> attendanceUserRelationList;
+
+}

+ 170 - 0
src/main/java/com/xjrsoft/module/attendance/vo/AttendanceRuleDetailsVo.java

@@ -0,0 +1,170 @@
+package com.xjrsoft.module.attendance.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalTime;
+
+/**
+* @title: 考勤规则细则表单出参
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+public class AttendanceRuleDetailsVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 周几(星期一~日或节假日)
+    */
+    @ApiModelProperty("周几(星期一~日或节假日)")
+    private String dateType;
+    /**
+    * 是否允许进出校
+    */
+    @ApiModelProperty("是否允许进出校")
+    private Integer isAllowInOutSchool;
+    /**
+    * 是否考勤
+    */
+    @ApiModelProperty("是否考勤")
+    private Integer isAttendance;
+    /**
+    * 上学时间前多少分钟进行提醒
+    */
+    @ApiModelProperty("上学时间前多少分钟进行提醒")
+    private Integer agoMinutes;
+    /**
+    * 超过上学时间多少分钟未打卡进行提醒
+    */
+    @ApiModelProperty("超过上学时间多少分钟未打卡进行提醒")
+    private Integer overMinutes;
+    /**
+    * 上学时间内是否允许进出
+    */
+    @ApiModelProperty("上学时间内是否允许进出")
+    private Integer isAllowInOutSchoolTime;
+    /**
+    * 上午是否启用(1:是 0:否)
+    */
+    @ApiModelProperty("上午是否启用(1:是 0:否)")
+    private Integer amStatus;
+    /**
+    * 上午上学时间
+    */
+    @ApiModelProperty("上午上学时间")
+    private LocalTime amStartTime;
+    /**
+    * 上午放学时间
+    */
+    @ApiModelProperty("上午放学时间")
+    private LocalTime amEndTime;
+    /**
+    * 上午迟到旷课分钟数
+    */
+    @ApiModelProperty("上午迟到旷课分钟数")
+    private Integer amLateMinutes;
+    /**
+    * 上午是否为节假日(1:是 0:否)
+    */
+    @ApiModelProperty("上午是否为节假日(1:是 0:否)")
+    private Integer amIsHolidays;
+    /**
+    * 上午为节假日前一天时上学时间
+    */
+    @ApiModelProperty("上午为节假日前一天时上学时间")
+    private LocalTime amHolidaysStartTime;
+    /**
+    * 上午为节假日前一天时放学时间
+    */
+    @ApiModelProperty("上午为节假日前一天时放学时间")
+    private LocalTime amHolidaysEndTime;
+    /**
+    * 下午是否启用(1:是 0:否)
+    */
+    @ApiModelProperty("下午是否启用(1:是 0:否)")
+    private Integer pmStatus;
+    /**
+    * 下午上学时间
+    */
+    @ApiModelProperty("下午上学时间")
+    private LocalTime pmStartTime;
+    /**
+    * 下午放学时间
+    */
+    @ApiModelProperty("下午放学时间")
+    private LocalTime pmEndTime;
+    /**
+    * 下午迟到旷课分钟数
+    */
+    @ApiModelProperty("下午迟到旷课分钟数")
+    private Integer pmLateMinutes;
+    /**
+    * 下午是否为节假日(1:是 0:否)
+    */
+    @ApiModelProperty("下午是否为节假日(1:是 0:否)")
+    private Integer pmIsHolidays;
+    /**
+    * 下午为节假日前一天时上学时间
+    */
+    @ApiModelProperty("下午为节假日前一天时上学时间")
+    private LocalTime pmHolidaysStartTime;
+    /**
+    * 下午为节假日前一天时放学时间
+    */
+    @ApiModelProperty("下午为节假日前一天时放学时间")
+    private LocalTime pmHolidaysEndTime;
+    /**
+    * 晚上是否启用(1:是 0:否)
+    */
+    @ApiModelProperty("晚上是否启用(1:是 0:否)")
+    private Integer eveningStatus;
+    /**
+    * 晚上上学时间
+    */
+    @ApiModelProperty("晚上上学时间")
+    private LocalTime eveningStartTime;
+    /**
+    * 晚上放学时间
+    */
+    @ApiModelProperty("晚上放学时间")
+    private LocalTime eveningEndTime;
+    /**
+    * 晚上迟到旷课分钟数
+    */
+    @ApiModelProperty("晚上迟到旷课分钟数")
+    private Integer eveningLateMinutes;
+    /**
+    * 晚上是否为节假日(1:是 0:否)
+    */
+    @ApiModelProperty("晚上是否为节假日(1:是 0:否)")
+    private Integer eveningIsHolidays;
+    /**
+    * 晚上为节假日前一天时上学时间
+    */
+    @ApiModelProperty("晚上为节假日前一天时上学时间")
+    private LocalTime eveningHolidaysStartTime;
+    /**
+    * 晚上为节假日前一天时放学时间
+    */
+    @ApiModelProperty("晚上为节假日前一天时放学时间")
+    private LocalTime eveningHolidaysEndTime;
+    /**
+    * 考勤规则(attendance_rule_category)
+    */
+    @ApiModelProperty("考勤规则(attendance_rule_category)")
+    private Long attendanceRuleCategoryId;
+
+
+
+}

+ 43 - 0
src/main/java/com/xjrsoft/module/attendance/vo/AttendanceUserRelationVo.java

@@ -0,0 +1,43 @@
+package com.xjrsoft.module.attendance.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 考勤规则人员绑定表表单出参
+* @Author dzx
+* @Date: 2024-05-08
+* @Version 1.0
+*/
+@Data
+public class AttendanceUserRelationVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 所属班级id
+    */
+    @ApiModelProperty("所属班级id")
+    private Long classId;
+    /**
+    * 所属部门id
+    */
+    @ApiModelProperty("所属部门id")
+    private Long deptId;
+    /**
+    * 用id
+    */
+    @ApiModelProperty("用id")
+    private Long userId;
+    /**
+    * 考勤规则(attendance_rule_category)
+    */
+    @ApiModelProperty("考勤规则(attendance_rule_category)")
+    private Long attendanceRuleCategoryId;
+
+
+
+}

+ 43 - 0
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -2899,4 +2899,47 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
+
+    @Test
+    public void gcAttendanceRuleCategory() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("attendance_rule_category");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        tableConfigs.add(mainTable);
+
+        mainTable = new TableConfig();
+        mainTable.setTableName("attendance_rule_details");//init_sql中的表名
+        mainTable.setIsMain(false);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        mainTable.setRelationField("attendance_rule_category_id");//设置外键
+        mainTable.setRelationTableField(GlobalConstant.DEFAULT_PK);//设置外键
+        tableConfigs.add(mainTable);
+
+        mainTable = new TableConfig();
+        mainTable.setTableName("attendance_user_relation");//init_sql中的表名
+        mainTable.setIsMain(false);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        mainTable.setRelationField("attendance_rule_category_id");//设置外键
+        mainTable.setRelationTableField(GlobalConstant.DEFAULT_PK);//设置外键
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("dzx");//作者名称
+        params.setPackageName("attendance");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(false);//是否生成导入接口
+        params.setExport(false);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
 }