Merge branch 'master' of http://47.109.37.87:3000/by2025/SmartParks
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run

This commit is contained in:
lxj
2025-07-18 15:13:31 +08:00
8 changed files with 152 additions and 22 deletions

View File

@@ -65,8 +65,8 @@ public class AttendanceGroupController extends BaseController {
@SaCheckPermission("Property:group:query")
@GetMapping("/{id}")
public R<AttendanceGroupVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("id") Long id) {
return R.ok(attendanceGroupService.queryById(id));
@PathVariable("id") Long id,Integer attendanceType) {
return R.ok(attendanceGroupService.queryById(id,attendanceType));
}
/**
@@ -88,6 +88,7 @@ public class AttendanceGroupController extends BaseController {
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody AttendanceGroupBo bo) {
//todo:考勤组的修改待确定
return toAjax(attendanceGroupService.updateByBo(bo));
}
@@ -100,7 +101,7 @@ public class AttendanceGroupController extends BaseController {
@Log(title = "考勤组基本信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("ids") Long[] ids) {
return toAjax(attendanceGroupService.deleteWithValidByIds(List.of(ids), true));
@PathVariable("ids") Long[] ids,Integer attendanceType) {
return toAjax(attendanceGroupService.deleteWithValidByIds(List.of(ids), true,attendanceType));
}
}

View File

@@ -30,7 +30,7 @@ public class AttendanceScheduleCycle extends TenantEntity {
/**
* 周期中的第几天(1开始)
*/
private Long dayNumber;
private Integer dayNumber;
/**
* 关联排班组id

View File

@@ -9,7 +9,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.List;
/**
* 排班业务对象 attendance_arrangement
@@ -63,5 +64,7 @@ public class AttendanceArrangementBo extends BaseEntity {
*/
private Long status;
// private List<>
}

View File

@@ -7,7 +7,9 @@ import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.property.domain.AttendanceShift;
import org.dromara.property.domain.AttendanceWeekSet;
import org.dromara.property.domain.AttendanceWeeksetShift;
import java.io.Serial;
import java.io.Serializable;
@@ -56,5 +58,9 @@ public class AttendanceGroupVo implements Serializable {
List<AttendanceWeekSet> weekList;
List<AttendanceWeeksetShift> shiftList;
List<AttendanceShift> attendanceList;
}

View File

@@ -23,7 +23,7 @@ public interface IAttendanceGroupService {
* @param id 主键
* @return 考勤组基本信息
*/
AttendanceGroupVo queryById(Long id);
AttendanceGroupVo queryById(Long id,Integer attendanceType);
/**
* 分页查询考勤组基本信息列表
@@ -65,5 +65,5 @@ public interface IAttendanceGroupService {
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid,Integer attendanceType);
}

View File

@@ -15,6 +15,7 @@ import org.dromara.property.domain.vo.AttendanceArrangementVo;
import org.dromara.property.domain.AttendanceArrangement;
import org.dromara.property.mapper.AttendanceArrangementMapper;
import org.dromara.property.service.IAttendanceArrangementService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@@ -33,6 +34,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
private final AttendanceArrangementMapper baseMapper;
/**
* 查询排班
*
@@ -90,6 +92,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
* @param bo 排班
* @return 是否新增成功
*/
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean insertByBo(AttendanceArrangementBo bo) {
AttendanceArrangement add = MapstructUtils.convert(bo, AttendanceArrangement.class);
@@ -98,6 +101,12 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS
if (flag) {
bo.setId(add.getId());
}
//取出当前新增的排班的id
Long ArrangementId = add.getId();
//向排班人员表中插入排班人员信息
return flag;
}

View File

@@ -11,14 +11,11 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.*;
import org.dromara.property.domain.constant.StatusConstant;
import org.dromara.property.mapper.AttendanceClockDateMapper;
import org.dromara.property.mapper.AttendanceFixedScheduleMapper;
import org.dromara.property.mapper.AttendanceWeekSetMapper;
import org.dromara.property.mapper.*;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.AttendanceGroupBo;
import org.dromara.property.domain.vo.AttendanceGroupVo;
import org.dromara.property.mapper.AttendanceGroupMapper;
import org.dromara.property.service.IAttendanceGroupService;
import org.springframework.transaction.annotation.Transactional;
@@ -27,6 +24,9 @@ import java.util.Map;
import java.util.Collection;
import java.util.Objects;
import static org.dromara.property.domain.constant.StatusConstant.FIXEDSCHEDULE;
import static org.dromara.property.domain.constant.StatusConstant.SHIFTSCHEDULE;
/**
* 考勤组基本信息Service业务层处理
*
@@ -44,6 +44,11 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
private final AttendanceClockDateMapper attendanceClockDateMapper;
private final AttendanceScheduleCycleMapper attendanceScheduleCycleMapper;
private final AttendanceWeeksetShiftMapper attendanceWeeksetShiftMapper;
private final AttendanceShiftMapper attendanceShiftMapper;
/**
* 查询考勤组基本信息
*
@@ -51,8 +56,42 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
* @return 考勤组基本信息
*/
@Override
public AttendanceGroupVo queryById(Long id) {
return baseMapper.selectVoById(id);
public AttendanceGroupVo queryById(Long id, Integer attendanceType) {
//根据id参数查询考勤组表
AttendanceGroupVo vo = baseMapper.selectVoById(id);
//判断考勤是固定班制还是排班制
if (Objects.equals(attendanceType, FIXEDSCHEDULE)) {
//1.固定班制:
//1.1根据id参数查询考勤周期表
List<AttendanceWeekSet> weekSets = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>lambdaQuery().eq(AttendanceWeekSet::getGroupId, id));
//1.2根据id参数取出所有考勤周期id
List<Long> weekSetIds = weekSets.stream().map(AttendanceWeekSet::getId).toList();
//1.3根据考勤周期id查询出中间表
List<AttendanceWeeksetShift> weeksetShifts = attendanceWeeksetShiftMapper.selectList(Wrappers.<AttendanceWeeksetShift>lambdaQuery().in(AttendanceWeeksetShift::getWeekSetId, weekSetIds));
//1.4根据中间表的班次id查询出班次表id
List<Long> shiftIds = weeksetShifts.stream().map(AttendanceWeeksetShift::getShiftId).toList();
//1.5根据班次id查询出班次表
List<AttendanceShift> shifts = attendanceShiftMapper.selectList(Wrappers.<AttendanceShift>lambdaQuery().in(AttendanceShift::getId, shiftIds));
//1.6将查询后的数据封装到attendanceGroupVo中
vo.setAttendanceList(shifts);
} else if(Objects.equals(attendanceType, SHIFTSCHEDULE)) {
//2.排班制
//2.1根据id参数查询考勤周期表
List<AttendanceWeekSet> weekSets = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>lambdaQuery().eq(AttendanceWeekSet::getGroupId, id));
//2.2根据id参数取出所有考勤天数id
List<Long> weekSetIds = weekSets.stream().map(AttendanceWeekSet::getId).toList();
//2.3根据天数id查询出中间表
List<AttendanceScheduleCycle> scheduleCycles = attendanceScheduleCycleMapper.selectList(Wrappers.<AttendanceScheduleCycle>lambdaQuery().in(AttendanceScheduleCycle::getGroupId, weekSetIds));
//2.4根据中间表的班次id查询出班次表id
List<Long> scheduleCycleIds = scheduleCycles.stream().map(AttendanceScheduleCycle::getId).toList();
//2.5根据班次id查询出班次表
List<AttendanceShift> shifts = attendanceShiftMapper.selectList(Wrappers.<AttendanceShift>lambdaQuery().in(AttendanceShift::getId, scheduleCycleIds));
//2.6将查询后的数据封装到attendanceGroupVo中
vo.setAttendanceList(shifts);
}
return vo;
}
/**
@@ -111,8 +150,9 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
bo.setId(add.getId());
}
//2.判断考勤是固定班制还是排班制
if (Objects.equals(add.getAttendanceType(), StatusConstant.FIXEDSCHEDULE)) {
//判断考勤是固定班制还是排班制
//2.固定班制
if (Objects.equals(add.getAttendanceType(), FIXEDSCHEDULE)) {
//2.1固定班制,向周期表插入数据
//拿到考勤组的id,遍历weekList
for (Integer week : bo.getWeekList()) {
@@ -131,10 +171,8 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
}
//todo: 法定节假日自动排休
//4.新增打卡日期表
//4.1判断是必须打卡还是无需打卡
//2.3.新增打卡日期表
//2.3.1判断是必须打卡还是无需打卡
//(1)必须打卡,向打卡日期表中插入数据
if (Objects.equals(bo.getMustNoCheck(), StatusConstant.MUSTCHECK)) {
judgeDate(bo);
@@ -145,9 +183,23 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
}
}
//3.排班制
if (Objects.equals(add.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) {
//2.2排班制,向天数表中插入数据
AttendanceScheduleCycle attendanceScheduleCycle = new AttendanceScheduleCycle();
//循环向周期表中插入数据
for (Integer week : bo.getWeekList()) {
attendanceScheduleCycle.setGroupId(add.getId());
attendanceScheduleCycle.setDayNumber(week);
}
//通过考勤组id拿到日期表的所有关联id
List<AttendanceScheduleCycle> scheduleCycles = attendanceScheduleCycleMapper.selectList(Wrappers.<AttendanceScheduleCycle>lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, add.getId()));
//2.3遍历日期表,向班次和周设置表的中间表插入数据
for (AttendanceScheduleCycle scheduleCycle : scheduleCycles) {
AttendanceWeeksetShift attendanceWeeksetShift = new AttendanceWeeksetShift();
attendanceWeeksetShift.setScheduleId(scheduleCycle.getId());
attendanceWeeksetShift.setShiftId(bo.getShiftId());
}
}
@@ -185,6 +237,8 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
public Boolean updateByBo(AttendanceGroupBo bo) {
AttendanceGroup update = MapstructUtils.convert(bo, AttendanceGroup.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
@@ -202,10 +256,31 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid,Integer attendanceType) {
//判断删除固定班次还是排班制
if (Objects.equals(attendanceType, FIXEDSCHEDULE)){
//1.固定班制
//根据id删除周期表中的数据
weekSetMapper.delete(Wrappers.<AttendanceWeekSet>lambdaQuery().in(AttendanceWeekSet::getGroupId, ids));
//根据id查询出考勤周期id
List<Long> weekSetIds = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>lambdaQuery().in(AttendanceWeekSet::getGroupId, ids)).stream().map(AttendanceWeekSet::getId).toList();
//根据考勤周期id删除中间表数据
attendanceWeeksetShiftMapper.delete(Wrappers.<AttendanceWeeksetShift>lambdaQuery().in(AttendanceWeeksetShift::getWeekSetId, weekSetIds));
} else if (Objects.equals(attendanceType, SHIFTSCHEDULE)) {
//2.排班制
//根据id删除考勤天数的数据
attendanceScheduleCycleMapper.delete(Wrappers.<AttendanceScheduleCycle>lambdaQuery().in(AttendanceScheduleCycle::getGroupId, ids));
//根据id查询出考勤天数的所有id
List<Long> scheduleCycleIds = attendanceScheduleCycleMapper.selectList(Wrappers.<AttendanceScheduleCycle>lambdaQuery().in(AttendanceScheduleCycle::getGroupId, ids)).stream().map(AttendanceScheduleCycle::getId).toList();
//根据考勤天数id删除中间表数据
attendanceWeeksetShiftMapper.delete(Wrappers.<AttendanceWeeksetShift>lambdaQuery().in(AttendanceWeeksetShift::getScheduleId, scheduleCycleIds));
}
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
//TODO 做一些业务上的校验,判断是否需要校验,判断考勤组下是否有数据,有数据则不做删除
}
return baseMapper.deleteByIds(ids) > 0;
}

View File

@@ -0,0 +1,36 @@
package org.dromara.property.utils;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;
/**
* 法定节假日工具类
*/
public class HolidayUtil {
public HolidayUtil() throws Exception {
// 调用jiejiariapi.com API获取节假日信息
String baiduUrl = "https://api.jiejiariapi.com/v1/holidays/2025";
JSONObject jiejiariapiResponse = getJsonFromUrl(baiduUrl);
}
private static JSONObject getJsonFromUrl(String urlString) throws Exception {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
return new JSONObject(response.toString());
}
}