diff --git a/core/src/main/java/com/dite/znpt/constant/Constants.java b/core/src/main/java/com/dite/znpt/constant/Constants.java index bb6b6d4..8b5f824 100644 --- a/core/src/main/java/com/dite/znpt/constant/Constants.java +++ b/core/src/main/java/com/dite/znpt/constant/Constants.java @@ -86,4 +86,15 @@ public class Constants { * 1:代表隐藏 */ public static final String VISIBLE_1 = "1"; + + + /** + * 0:代表发布 + */ + public static final String STATUS_PUBLISH = "0"; + + /** + * 1:代表未发布 + */ + public static final String STATUS_UNPUBLISH = "1"; } diff --git a/core/src/main/java/com/dite/znpt/constant/Message.java b/core/src/main/java/com/dite/znpt/constant/Message.java index 83e643d..0e67ef7 100644 --- a/core/src/main/java/com/dite/znpt/constant/Message.java +++ b/core/src/main/java/com/dite/znpt/constant/Message.java @@ -51,4 +51,13 @@ public class Message implements Serializable { public static final String TASK_STATUS_NOT_IN_PROGRESS = "任务状态不是进行中"; public static final String TASK_IN_CYCLE = "父级任务存在循环依赖:"; public static final String TASK_GROUP_ID_NOT_EXIST = "任务组id不存在"; + public static final String WORK_TIME_START_CAN_NOT_BEFORE_WORK_TIME_END = "下班时间不能早于上班时间"; + public static final String REST_TIME_START_CAN_NOT_BEFORE_REST_TIME_END = "休息结束时间不能早于休息开始时间"; + public static final String REST_TIME_START_MUST_BETWEEN_WORK_TIME = "休息开始时间必须是在上班时间范围内"; + public static final String REST_TIME_END_MUST_BETWEEN_WORK_TIME = "休息结束时间必须是在上班时间范围内"; + public static final String EARLY_TIME_LIMIT_CAN_NOT_BEFORE_EARLY_TIME_OFFSET = "早退临界时间不能小于早退豁免时间"; + public static final String LATE_TIME_LIMIT_CAN_NOT_BEFORE_LATE_TIME_OFFSET = "迟到临界时间不能小于迟到豁免时间"; + public static final String WORK_SHIFT_NAME_EXIST = "班次名称已经存在"; + public static final String WORK_SHIFT_NOT_EXIST = "班次不存在"; + public static final String WORK_SHIFT_IS_NOT_UNPUBLISH = "班次的状态不是未发布"; } diff --git a/core/src/main/java/com/dite/znpt/converts/Converts.java b/core/src/main/java/com/dite/znpt/converts/Converts.java index 9a3b0da..61ea9be 100644 --- a/core/src/main/java/com/dite/znpt/converts/Converts.java +++ b/core/src/main/java/com/dite/znpt/converts/Converts.java @@ -91,5 +91,11 @@ public interface Converts { InsuranceInfoEntity toInsuranceInfoEntity(InsuranceInfoReq req); AttachInfoResp toAttacheInfoResp(AttachInfoEntity entity); + + List toWorkShiftListResp(List list); + + WorkShiftResp toWorkShiftResp(WorkShiftEntity entity); + + WorkShiftEntity toWorkShiftEntity(WorkShiftReq req); } diff --git a/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java index 7161d33..f7b213c 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java @@ -48,10 +48,15 @@ public class MenuEntity extends AuditableEntity implements Serializable { @TableField("order_num") private Integer orderNum; - @ExcelProperty("请求地址") - @ApiModelProperty("请求地址") - @TableField("url") - private String url; + @ExcelProperty("组件地址") + @ApiModelProperty("组件地址") + @TableField("component") + private String component; + + @ExcelProperty("路由地址") + @ApiModelProperty("路由地址") + @TableField("path") + private String path; @ExcelProperty("菜单类型(M目录 C菜单 F按钮)") @ApiModelProperty("菜单类型(M目录 C菜单 F按钮)") diff --git a/core/src/main/java/com/dite/znpt/domain/entity/WorkShiftEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/WorkShiftEntity.java new file mode 100644 index 0000000..2874c54 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/WorkShiftEntity.java @@ -0,0 +1,85 @@ +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalTime; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:08 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("work_shift") +@ApiModel(value="WorkShitEntity对象", description="班次信息") +public class WorkShiftEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = 1912356282767651959L; + + @ApiModelProperty("班次id") + @TableId(value = "work_shift_id", type = IdType.ASSIGN_UUID) + private String workShiftId; + + @ApiModelProperty("班次名称") + @TableField("work_shift_name") + private String workShiftName; + + @ApiModelProperty("上班时间") + @TableField("work_time_start") + private LocalTime workTimeStart; + + @ApiModelProperty("迟到豁免时间,单位分钟") + @TableField("late_time_offset") + private Integer lateTimeOffset; + + @ApiModelProperty("迟到时间临界值,单位分钟") + @TableField("late_time_limit") + private Integer lateTimeLimit; + + @ApiModelProperty("下班时间") + @TableField("work_time_end") + private LocalTime workTimeEnd; + + @ApiModelProperty("早退豁免时间,单位分钟") + @TableField("early_time_offset") + private Integer earlyTimeOffset; + + @ApiModelProperty("早退时间临界值,单位分钟") + @TableField("early_time_limit") + private Integer earlyTimeLimit; + + @ApiModelProperty("休息时间开始") + @TableField("rest_time_start") + private LocalTime restTimeStart; + + @ApiModelProperty("休息时间结束") + @TableField("rest_time_end") + private LocalTime restTimeEnd; + + @ApiModelProperty("工作时间长") + @TableField("work_time") + private Integer workTime; + + @ApiModelProperty("状态,0-已发布,1-未发布") + @TableField("status") + private String status; + + @ApiModelProperty("备注") + @TableField("remark") + private String remark; + + @ApiModelProperty("删除标志(0代表存在 1代表删除)") + @TableField("del_flag") + private String delFlag; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java b/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java index b283c5b..f875972 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java @@ -1,5 +1,7 @@ package com.dite.znpt.domain.vo; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.dite.znpt.util.ValidationGroup; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -32,9 +34,14 @@ public class MenuReq implements Serializable { @ApiModelProperty("显示顺序") private Integer orderNum; - @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "请求地址不能超过100个字符") - @ApiModelProperty("请求地址") - private String url; + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "路由地址不能超过200个字符") + @ApiModelProperty("路由地址") + private String path; + + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "组件地址不能超过200个字符") + @ExcelProperty("组件地址") + @ApiModelProperty("组件地址") + private String component; @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "菜单类型不能为空") @ApiModelProperty("菜单类型") diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java b/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java index f533983..7e9ecf3 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java @@ -30,8 +30,11 @@ public class MenuResp implements Serializable { @ApiModelProperty("显示顺序") private String orderNum; - @ApiModelProperty("请求地址") - private String url; + @ApiModelProperty("路由地址") + private String path; + + @ApiModelProperty("组件地址") + private String component; @ApiModelProperty("菜单类型") private String menuType; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserInfo.java b/core/src/main/java/com/dite/znpt/domain/vo/UserInfo.java index ce5bbfc..4203eed 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/UserInfo.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/UserInfo.java @@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serial; +import java.io.Serializable; import java.util.List; /** @@ -13,7 +15,10 @@ import java.util.List; */ @Data @ApiModel("用户信息") -public class UserInfo { +public class UserInfo implements Serializable { + + @Serial + private static final long serialVersionUID = 1433874497843073028L; @ApiModelProperty("用户信息") private UserListResp user; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftListResp.java new file mode 100644 index 0000000..c9675e8 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftListResp.java @@ -0,0 +1,54 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.time.LocalTime; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:39 + * @description + */ +@Data +@ApiModel("班次信息列表响应实体") +public class WorkShiftListResp implements Serializable { + @Serial + private static final long serialVersionUID = 530703326351692657L; + + @ApiModelProperty("班次id") + private String workShiftId; + + @ApiModelProperty("班次名称") + private String workShiftName; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("上班时间") + private LocalTime workTimeStart; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("下班时间") + private LocalTime workTimeEnd; + + @ApiModelProperty("状态") + private String status; + + @ApiModelProperty("状态描述") + private String statusLabel; + + @ApiModelProperty("创建人id") + private String createBy; + + @ApiModelProperty("创建人名称") + private String createUserName; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("修改时间") + private LocalDateTime updateTime; + +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftReq.java b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftReq.java new file mode 100644 index 0000000..0a0be7a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftReq.java @@ -0,0 +1,59 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalTime; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:39 + * @description + */ +@Data +@ApiModel("班次信息请求实体") +public class WorkShiftReq implements Serializable { + + @Serial + private static final long serialVersionUID = 3008068678585003135L; + + @NotBlank(message = "班次名称不能为空") + @ApiModelProperty("班次名称") + private String workShiftName; + + @NotNull(message = "上班时间不能为空") + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("上班时间") + private LocalTime workTimeStart; + + @ApiModelProperty("迟到豁免时间,单位分钟") + private Integer lateTimeOffset; + + @ApiModelProperty("迟到时间临界值,单位分钟") + private Integer lateTimeLimit; + + @NotNull(message = "下班时间不能为空") + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("下班时间") + private LocalTime workTimeEnd; + + @ApiModelProperty("早退豁免时间,单位分钟") + private Integer earlyTimeOffset; + + @ApiModelProperty("早退时间临界值,单位分钟") + private Integer earlyTimeLimit; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("休息时间开始") + private LocalTime restTimeStart; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("休息时间结束") + private LocalTime restTimeEnd; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftResp.java b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftResp.java new file mode 100644 index 0000000..62f3bed --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/WorkShiftResp.java @@ -0,0 +1,67 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalTime; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:39 + * @description + */ +@Data +@ApiModel("班次信息响应实体") +public class WorkShiftResp implements Serializable { + @Serial + private static final long serialVersionUID = 7000086760170568103L; + + @ApiModelProperty("班次id") + private String workShiftId; + + @ApiModelProperty("班次名称") + private String workShiftName; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("上班时间") + private LocalTime workTimeStart; + + @ApiModelProperty("迟到豁免时间,单位分钟") + private Integer lateTimeOffset; + + @ApiModelProperty("迟到时间临界值,单位分钟") + private Integer lateTimeLimit; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("下班时间") + private LocalTime workTimeEnd; + + @ApiModelProperty("早退豁免时间,单位分钟") + private Integer earlyTimeOffset; + + @ApiModelProperty("早退时间临界值,单位分钟") + private Integer earlyTimeLimit; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("休息时间开始") + private LocalTime restTimeStart; + + @JsonFormat(pattern = "HH:mm") + @ApiModelProperty("休息时间结束") + private LocalTime restTimeEnd; + + @ApiModelProperty("工作时间长") + private Integer workTime; + + @ApiModelProperty("状态,0-已发布,1-未发布") + private String status; + + @ApiModelProperty("状态,0-已发布,1-未发布") + private String statusLabel; + + +} diff --git a/core/src/main/java/com/dite/znpt/mapper/WorkShiftMapper.java b/core/src/main/java/com/dite/znpt/mapper/WorkShiftMapper.java new file mode 100644 index 0000000..b014e9e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/WorkShiftMapper.java @@ -0,0 +1,12 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.WorkShiftEntity; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:26 + * @description + */ +public interface WorkShiftMapper extends BaseMapper { +} diff --git a/core/src/main/java/com/dite/znpt/service/WorkShiftService.java b/core/src/main/java/com/dite/znpt/service/WorkShiftService.java new file mode 100644 index 0000000..bbc5d76 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/WorkShiftService.java @@ -0,0 +1,33 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.WorkShiftEntity; +import com.dite.znpt.domain.vo.WorkShiftListResp; +import com.dite.znpt.domain.vo.WorkShiftReq; +import com.dite.znpt.domain.vo.WorkShiftResp; + +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:27 + * @description + */ +public interface WorkShiftService extends IService { + + List page(String workShitName); + + List list(String workShitName); + + WorkShiftResp detail(String workShiftId); + + void save(WorkShiftReq req); + + void update(String workShiftId, WorkShiftReq req); + + void publish(String workShiftId); + + void delete(String workShiftId); + + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java index ed656af..7e7c6e5 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java @@ -46,9 +46,13 @@ public class MenuServiceImpl extends ServiceImpl impleme tree.setId(treeNode.getMenuId()); tree.setParentId(treeNode.getParentId()); tree.setName(treeNode.getMenuName()); + tree.setWeight(treeNode.getOrderNum()); tree.putExtra("menuType",treeNode.getMenuType()); tree.putExtra("visible",treeNode.getVisible()); tree.putExtra("orderNum",treeNode.getOrderNum()); + tree.putExtra("path",treeNode.getPath()); + tree.putExtra("component",treeNode.getComponent()); + tree.putExtra("perms",treeNode.getPerms()); }); } diff --git a/core/src/main/java/com/dite/znpt/service/impl/WorkShitServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/WorkShitServiceImpl.java new file mode 100644 index 0000000..9cbcf69 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/WorkShitServiceImpl.java @@ -0,0 +1,157 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.entity.WorkShiftEntity; +import com.dite.znpt.domain.vo.WorkShiftListResp; +import com.dite.znpt.domain.vo.WorkShiftReq; +import com.dite.znpt.domain.vo.WorkShiftResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.WorkShiftMapper; +import com.dite.znpt.service.UserService; +import com.dite.znpt.service.WorkShiftService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:28 + * @description + */ +@Service +public class WorkShitServiceImpl extends ServiceImpl implements WorkShiftService { + + @Resource + private UserService userService; + + @Override + public List page(String workShitName) { + PageUtil.startPage(); + return this.list(workShitName); + } + + @Override + public List list(String workShitName) { + List list = this.list(Wrappers.lambdaQuery(WorkShiftEntity.class).eq(WorkShiftEntity::getDelFlag, Constants.DEL_FLAG_0).like(StrUtil.isNotBlank(workShitName), WorkShiftEntity::getWorkShiftName, workShitName)); + List userIds = list.stream().map(WorkShiftEntity::getCreateBy).toList(); + Map userIdMap = !userIds.isEmpty() ? userService.listByIds(userIds).stream().collect(Collectors.toMap(UserEntity::getUserId, Function.identity())): new HashMap<>(); + List result = Converts.INSTANCE.toWorkShiftListResp(list); + result.forEach(workShiftListResp -> { + workShiftListResp.setStatusLabel(Constants.STATUS_UNPUBLISH.equals(workShiftListResp.getStatus()) ? "未发布" : "已发布"); + if(userIdMap.containsKey(workShiftListResp.getCreateBy())){ + workShiftListResp.setCreateUserName(userIdMap.get(workShiftListResp.getCreateBy()).getName()); + } + }); + return result; + } + + @Override + public WorkShiftResp detail(String workShiftId) { + WorkShiftEntity workShift = this.getById(workShiftId); + if(workShift == null || !Constants.DEL_FLAG_0.equals(workShift.getDelFlag())){ + throw new ServiceException(Message.WORK_SHIFT_NOT_EXIST); + } + WorkShiftResp workShiftResp = Converts.INSTANCE.toWorkShiftResp(workShift); + workShiftResp.setStatusLabel(Constants.STATUS_UNPUBLISH.equals(workShiftResp.getStatus()) ? "未发布" : "已发布"); + return workShiftResp; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(WorkShiftReq req) { + List list = this.list(Wrappers.lambdaQuery(WorkShiftEntity.class).eq(WorkShiftEntity::getDelFlag, Constants.DEL_FLAG_0).eq(WorkShiftEntity::getWorkShiftName, req.getWorkShiftName())); + if(!list.isEmpty()){ + throw new ServiceException(Message.WORK_SHIFT_NAME_EXIST); + } + WorkShiftEntity entity = validation(req); + entity.setStatus(Constants.STATUS_UNPUBLISH); + this.save(entity); + } + + private WorkShiftEntity validation(WorkShiftReq req) { + if(req.getWorkTimeEnd().isBefore(req.getWorkTimeStart())){ + throw new ServiceException(Message.WORK_TIME_START_CAN_NOT_BEFORE_WORK_TIME_END); + } + int workTime = req.getWorkTimeEnd().toSecondOfDay() - req.getWorkTimeStart().toSecondOfDay() ; + if(req.getRestTimeEnd() != null && req.getRestTimeStart()!= null){ + if(req.getRestTimeEnd().isBefore(req.getRestTimeStart())){ + throw new ServiceException(Message.REST_TIME_START_CAN_NOT_BEFORE_REST_TIME_END); + } + if(!(req.getRestTimeStart().isAfter(req.getWorkTimeStart()) && req.getRestTimeStart().isBefore(req.getWorkTimeEnd()))){ + throw new ServiceException(Message.REST_TIME_START_MUST_BETWEEN_WORK_TIME); + } + if(!(req.getRestTimeEnd().isAfter(req.getWorkTimeStart()) && req.getRestTimeEnd().isBefore(req.getWorkTimeEnd()))){ + throw new ServiceException(Message.REST_TIME_END_MUST_BETWEEN_WORK_TIME); + } + workTime = workTime - (req.getRestTimeEnd().toSecondOfDay() - req.getRestTimeStart().toSecondOfDay()); + }else { + req.setRestTimeEnd(null); + req.setRestTimeEnd(null); + } + if(req.getEarlyTimeLimit() != null && req.getEarlyTimeOffset()!= null && req.getEarlyTimeLimit() <= req.getEarlyTimeOffset()){ + throw new ServiceException(Message.EARLY_TIME_LIMIT_CAN_NOT_BEFORE_EARLY_TIME_OFFSET); + } + if(req.getLateTimeLimit() != null && req.getLateTimeOffset() != null && req.getLateTimeLimit() <= req.getLateTimeOffset()){ + throw new ServiceException(Message.LATE_TIME_LIMIT_CAN_NOT_BEFORE_LATE_TIME_OFFSET); + } + + WorkShiftEntity entity = Converts.INSTANCE.toWorkShiftEntity(req); + entity.setWorkTime(workTime/60); + return entity; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String workShiftId, WorkShiftReq req) { + WorkShiftEntity workShift = this.getById(workShiftId); + if(workShift == null || !Constants.DEL_FLAG_0.equals(workShift.getDelFlag())){ + throw new ServiceException(Message.WORK_SHIFT_NOT_EXIST); + } + List list = this.list(Wrappers.lambdaQuery(WorkShiftEntity.class).eq(WorkShiftEntity::getDelFlag, Constants.DEL_FLAG_0).eq(WorkShiftEntity::getWorkShiftName, req.getWorkShiftName())); + if(!req.getWorkShiftName().equals(workShift.getWorkShiftName()) && !list.isEmpty()){ + throw new ServiceException(Message.WORK_SHIFT_NAME_EXIST); + } + WorkShiftEntity entity = validation(req); + entity.setWorkShiftId(workShiftId); + this.updateById(entity); + } + + + @Transactional(rollbackFor = Exception.class) + @Override + public void publish(String workShiftId) { + WorkShiftEntity workShift = this.getById(workShiftId); + if(workShift == null || !Constants.DEL_FLAG_0.equals(workShift.getDelFlag())){ + throw new ServiceException(Message.WORK_SHIFT_NOT_EXIST); + } + if(!Constants.STATUS_UNPUBLISH.equals(workShift.getStatus())){ + throw new ServiceException(Message.WORK_SHIFT_IS_NOT_UNPUBLISH); + } + workShift.setStatus(Constants.STATUS_PUBLISH); + this.updateById(workShift); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(String workShiftId) { + WorkShiftEntity workShift = this.getById(workShiftId); + if(workShift == null || !Constants.DEL_FLAG_0.equals(workShift.getDelFlag())){ + throw new ServiceException(Message.WORK_SHIFT_NOT_EXIST); + } + workShift.setDelFlag(Constants.DEL_FLAG_1); + this.updateById(workShift); + } +} diff --git a/core/src/main/resources/mapper/WorkShiftMapper.xml b/core/src/main/resources/mapper/WorkShiftMapper.xml new file mode 100644 index 0000000..4c898ce --- /dev/null +++ b/core/src/main/resources/mapper/WorkShiftMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/web/src/main/java/com/dite/znpt/web/controller/WorkShiftController.java b/web/src/main/java/com/dite/znpt/web/controller/WorkShiftController.java new file mode 100644 index 0000000..353d261 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/WorkShiftController.java @@ -0,0 +1,77 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.WorkShiftListResp; +import com.dite.znpt.domain.vo.WorkShiftReq; +import com.dite.znpt.domain.vo.WorkShiftResp; +import com.dite.znpt.service.WorkShiftService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/6/30/周一 10:29 + * @description + */ +@Api(tags = "班次管理") +@RestController +@RequestMapping("/work-shift") +public class WorkShiftController { + + @Resource + private WorkShiftService workShiftService; + + @ApiOperation(value = "分页查询班次信息", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(@RequestParam(required = false) String workShitName) { + return PageResult.ok(workShiftService.page(workShitName)); + } + + @ApiOperation(value = "查询班次信息列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(@RequestParam(required = false) String workShiftName) { + return Result.ok(workShiftService.list(workShiftName)); + } + + + @ApiOperation(value = "查询班次详情信息", httpMethod = "GET") + @GetMapping("/detail/{workShiftId}") + public Result detail(@PathVariable String workShiftId) { + return Result.ok(workShiftService.detail(workShiftId)); + } + + @ApiOperation(value = "新增班次信息", httpMethod = "POST") + @PostMapping() + public Result add(@Valid @RequestBody WorkShiftReq req){ + workShiftService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改班次信息", httpMethod = "PUT") + @PutMapping("/{workShiftId}") + public Result edit(@PathVariable String workShiftId, @Valid @RequestBody WorkShiftReq req){ + workShiftService.update(workShiftId, req); + return Result.ok(); + } + + + @ApiOperation(value = "发布班次信息", httpMethod = "PUT") + @PutMapping("/publish/{workShiftId}") + public Result publish(@PathVariable String workShiftId){ + workShiftService.publish(workShiftId); + return Result.ok(); + } + + @ApiOperation(value = "删除班次信息", httpMethod = "DELETE") + @DeleteMapping("/{workShiftId}") + public Result remove(@PathVariable String workShiftId){ + workShiftService.delete(workShiftId); + return Result.ok(); + } +}