提交 ba2c08c4 authored 作者: hzh's avatar hzh

出差申请功能实现

上级 0f8edd5b
...@@ -16,6 +16,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; ...@@ -16,6 +16,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.server.domain.bo.ApplyApproveBo;
import org.dromara.server.domain.bo.ApplyBo; import org.dromara.server.domain.bo.ApplyBo;
import org.dromara.server.domain.vo.ApplyVo; import org.dromara.server.domain.vo.ApplyVo;
import org.dromara.server.service.IApplyService; import org.dromara.server.service.IApplyService;
...@@ -101,6 +102,16 @@ public class ApplyController extends BaseController { ...@@ -101,6 +102,16 @@ public class ApplyController extends BaseController {
return toAjax(applyService.updateByBo(bo)); return toAjax(applyService.updateByBo(bo));
} }
/**
* 出差申请审批
*/
@Log(title = "出差申请审批", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/approve")
public R<Void> approve(@Validated(AddGroup.class) @RequestBody ApplyApproveBo bo) {
return toAjax(applyService.approve(bo));
}
/** /**
* 删除出差申请 * 删除出差申请
* *
......
...@@ -3,8 +3,6 @@ package org.dromara.server.domain; ...@@ -3,8 +3,6 @@ package org.dromara.server.domain;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial; import java.io.Serial;
import java.util.Date; import java.util.Date;
...@@ -16,9 +14,8 @@ import java.util.Date; ...@@ -16,9 +14,8 @@ import java.util.Date;
* @date 2024-12-04 * @date 2024-12-04
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_apply_approve") @TableName("biz_apply_approve")
public class ApplyApprove extends BaseEntity { public class ApplyApprove {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -57,7 +54,7 @@ public class ApplyApprove extends BaseEntity { ...@@ -57,7 +54,7 @@ public class ApplyApprove extends BaseEntity {
/** /**
* 是否通过 * 是否通过
*/ */
private Long pass; private Boolean pass;
} }
...@@ -3,8 +3,6 @@ package org.dromara.server.domain; ...@@ -3,8 +3,6 @@ package org.dromara.server.domain;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial; import java.io.Serial;
...@@ -15,9 +13,8 @@ import java.io.Serial; ...@@ -15,9 +13,8 @@ import java.io.Serial;
* @date 2024-12-04 * @date 2024-12-04
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_apply_person") @TableName("biz_apply_person")
public class ApplyPerson extends BaseEntity { public class ApplyPerson {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
......
package org.dromara.server.domain.bo; package org.dromara.server.domain.bo;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.server.domain.ApplyApprove; import org.dromara.server.domain.ApplyApprove;
import java.util.Date; import java.util.Date;
...@@ -19,14 +16,12 @@ import java.util.Date; ...@@ -19,14 +16,12 @@ import java.util.Date;
* @date 2024-12-04 * @date 2024-12-04
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ApplyApprove.class, reverseConvertGenerate = false) @AutoMapper(target = ApplyApprove.class, reverseConvertGenerate = false)
public class ApplyApproveBo extends BaseEntity { public class ApplyApproveBo {
/** /**
* id * id
*/ */
@NotNull(message = "id不能为空", groups = {EditGroup.class})
private Long id; private Long id;
/** /**
...@@ -38,32 +33,28 @@ public class ApplyApproveBo extends BaseEntity { ...@@ -38,32 +33,28 @@ public class ApplyApproveBo extends BaseEntity {
/** /**
* 审批人id * 审批人id
*/ */
@NotNull(message = "审批人id不能为空", groups = {AddGroup.class, EditGroup.class})
private Long approveUserId; private Long approveUserId;
/** /**
* 审批人 * 审批人
*/ */
@NotBlank(message = "审批人不能为空", groups = {AddGroup.class, EditGroup.class})
private String approveName; private String approveName;
/** /**
* 审批时间 * 审批时间
*/ */
@NotNull(message = "审批时间不能为空", groups = {AddGroup.class, EditGroup.class})
private Date approveTime; private Date approveTime;
/** /**
* 审批描述 * 审批描述
*/ */
@NotBlank(message = "审批描述不能为空", groups = {AddGroup.class, EditGroup.class})
private String approveDesc; private String approveDesc;
/** /**
* 是否通过 * 是否通过
*/ */
@NotNull(message = "是否通过不能为空", groups = {AddGroup.class, EditGroup.class}) @NotNull(message = "是否通过不能为空", groups = {AddGroup.class, EditGroup.class})
private Long pass; private Boolean pass;
} }
package org.dromara.server.domain.bo; package org.dromara.server.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
...@@ -50,7 +51,6 @@ public class ApplyBo extends BaseEntity { ...@@ -50,7 +51,6 @@ public class ApplyBo extends BaseEntity {
/** /**
* 申请时间 * 申请时间
*/ */
@NotNull(message = "申请时间不能为空", groups = {AddGroup.class, EditGroup.class})
private Date applyTime; private Date applyTime;
/** /**
...@@ -69,12 +69,14 @@ public class ApplyBo extends BaseEntity { ...@@ -69,12 +69,14 @@ public class ApplyBo extends BaseEntity {
* 开始时间 * 开始时间
*/ */
@NotNull(message = "开始时间不能为空", groups = {AddGroup.class, EditGroup.class}) @NotNull(message = "开始时间不能为空", groups = {AddGroup.class, EditGroup.class})
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startTime; private Date startTime;
/** /**
* 结束时间 * 结束时间
*/ */
@NotNull(message = "结束时间不能为空", groups = {AddGroup.class, EditGroup.class}) @NotNull(message = "结束时间不能为空", groups = {AddGroup.class, EditGroup.class})
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endTime; private Date endTime;
/** /**
......
...@@ -3,10 +3,8 @@ package org.dromara.server.domain.bo; ...@@ -3,10 +3,8 @@ package org.dromara.server.domain.bo;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.server.domain.ApplyPerson; import org.dromara.server.domain.ApplyPerson;
/** /**
...@@ -16,9 +14,8 @@ import org.dromara.server.domain.ApplyPerson; ...@@ -16,9 +14,8 @@ import org.dromara.server.domain.ApplyPerson;
* @date 2024-12-04 * @date 2024-12-04
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ApplyPerson.class, reverseConvertGenerate = false) @AutoMapper(target = ApplyPerson.class, reverseConvertGenerate = false)
public class ApplyPersonBo extends BaseEntity { public class ApplyPersonBo {
/** /**
* id * id
......
...@@ -65,7 +65,7 @@ public class ApplyApproveVo implements Serializable { ...@@ -65,7 +65,7 @@ public class ApplyApproveVo implements Serializable {
* 是否通过 * 是否通过
*/ */
@ExcelProperty(value = "是否通过") @ExcelProperty(value = "是否通过")
private Long pass; private Boolean pass;
} }
...@@ -2,6 +2,7 @@ package org.dromara.server.domain.vo; ...@@ -2,6 +2,7 @@ package org.dromara.server.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.server.domain.Apply; import org.dromara.server.domain.Apply;
...@@ -9,6 +10,7 @@ import org.dromara.server.domain.Apply; ...@@ -9,6 +10,7 @@ import org.dromara.server.domain.Apply;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
...@@ -71,12 +73,14 @@ public class ApplyVo implements Serializable { ...@@ -71,12 +73,14 @@ public class ApplyVo implements Serializable {
* 开始时间 * 开始时间
*/ */
@ExcelProperty(value = "开始时间") @ExcelProperty(value = "开始时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startTime; private Date startTime;
/** /**
* 结束时间 * 结束时间
*/ */
@ExcelProperty(value = "结束时间") @ExcelProperty(value = "结束时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endTime; private Date endTime;
/** /**
...@@ -91,5 +95,13 @@ public class ApplyVo implements Serializable { ...@@ -91,5 +95,13 @@ public class ApplyVo implements Serializable {
@ExcelProperty(value = "状态") @ExcelProperty(value = "状态")
private String status; private String status;
/**
* 关联人员
*/
private List<ApplyPersonVo> personList;
/**
* 审批记录
*/
private List<ApplyApproveVo> approveList;
} }
...@@ -2,6 +2,7 @@ package org.dromara.server.service; ...@@ -2,6 +2,7 @@ package org.dromara.server.service;
import org.dromara.server.base.IBaseService; import org.dromara.server.base.IBaseService;
import org.dromara.server.domain.Apply; import org.dromara.server.domain.Apply;
import org.dromara.server.domain.bo.ApplyApproveBo;
import org.dromara.server.domain.bo.ApplyBo; import org.dromara.server.domain.bo.ApplyBo;
import org.dromara.server.domain.vo.ApplyVo; import org.dromara.server.domain.vo.ApplyVo;
...@@ -13,5 +14,11 @@ import org.dromara.server.domain.vo.ApplyVo; ...@@ -13,5 +14,11 @@ import org.dromara.server.domain.vo.ApplyVo;
*/ */
public interface IApplyService extends IBaseService<ApplyVo, ApplyBo, Apply> { public interface IApplyService extends IBaseService<ApplyVo, ApplyBo, Apply> {
/**
* 审批
*
* @param bo bo
* @return boolean
*/
Boolean approve(ApplyApproveBo bo);
} }
package org.dromara.server.service.impl; package org.dromara.server.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.server.base.AbstractBaseService; import org.dromara.server.base.AbstractBaseService;
import org.dromara.server.constant.ApplyStatus; import org.dromara.server.constant.ApplyStatus;
import org.dromara.server.domain.Apply; import org.dromara.server.domain.Apply;
import org.dromara.server.domain.ApplyApprove;
import org.dromara.server.domain.ApplyPerson; import org.dromara.server.domain.ApplyPerson;
import org.dromara.server.domain.bo.ApplyApproveBo;
import org.dromara.server.domain.bo.ApplyBo; import org.dromara.server.domain.bo.ApplyBo;
import org.dromara.server.domain.bo.ApplyPersonBo; import org.dromara.server.domain.bo.ApplyPersonBo;
import org.dromara.server.domain.vo.ApplyApproveVo;
import org.dromara.server.domain.vo.ApplyPersonVo;
import org.dromara.server.domain.vo.ApplyVo; import org.dromara.server.domain.vo.ApplyVo;
import org.dromara.server.mapper.ApplyApproveMapper;
import org.dromara.server.mapper.ApplyMapper; import org.dromara.server.mapper.ApplyMapper;
import org.dromara.server.mapper.ApplyPersonMapper; import org.dromara.server.mapper.ApplyPersonMapper;
import org.dromara.server.service.IApplyService; import org.dromara.server.service.IApplyService;
...@@ -23,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -23,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* 出差申请Service业务层处理 * 出差申请Service业务层处理
...@@ -38,6 +48,8 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl ...@@ -38,6 +48,8 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl
private final ApplyPersonMapper applyPersonMapper; private final ApplyPersonMapper applyPersonMapper;
private final ApplyApproveMapper applyApproveMapper;
@Override @Override
public BaseMapperPlus<Apply, ApplyVo> mapper() { public BaseMapperPlus<Apply, ApplyVo> mapper() {
return baseMapper; return baseMapper;
...@@ -68,15 +80,53 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl ...@@ -68,15 +80,53 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl
bo.setApplyTime(new Date()); bo.setApplyTime(new Date());
bo.setApplyDeptName(LoginHelper.getDeptName()); bo.setApplyDeptName(LoginHelper.getDeptName());
bo.setStatus(ApplyStatus.WAIT_AUDIT.getCode()); bo.setStatus(ApplyStatus.WAIT_AUDIT.getCode());
Boolean result = super.insertByBo(bo); Apply apply = MapstructUtils.convert(bo, Apply.class);
Boolean result = baseMapper.insert(apply) == 1;
if (result) { if (result) {
List<ApplyPersonBo> personList = bo.getPersonList(); List<ApplyPersonBo> personList = bo.getPersonList();
for (ApplyPersonBo person : personList) { for (ApplyPersonBo person : personList) {
person.setApplyId(bo.getId()); person.setApplyId(apply.getId());
ApplyPerson ap = MapstructUtils.convert(person, ApplyPerson.class); ApplyPerson ap = MapstructUtils.convert(person, ApplyPerson.class);
applyPersonMapper.insert(ap); applyPersonMapper.insert(ap);
} }
} }
return result; return result;
} }
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean approve(ApplyApproveBo bo) {
Apply apply = baseMapper.selectById(bo.getApplyId());
if (apply == null) {
throw new RuntimeException("未找到该申请!");
}
if (!StringUtils.equals(apply.getStatus(), ApplyStatus.WAIT_AUDIT.getCode())) {
throw new RuntimeException("该申请不是待审批状态,不能进行审批!");
}
bo.setApproveUserId(LoginHelper.getUserId());
bo.setApproveName(LoginHelper.getUsername());
bo.setApproveTime(new Date());
applyApproveMapper.insert(MapstructUtils.convert(bo, ApplyApprove.class));
apply.setStatus(bo.getPass() ? ApplyStatus.FINISH.getCode() : ApplyStatus.REFUSE.getCode());
baseMapper.updateById(apply);
return true;
}
@Override
public TableDataInfo<ApplyVo> queryPageList(ApplyBo bo, PageQuery pageQuery) {
TableDataInfo<ApplyVo> page = super.queryPageList(bo, pageQuery);
List<ApplyVo> list = page.getRows();
List<Long> applyIds = StreamUtils.toList(list, ApplyVo::getId);
applyIds = CollectionUtil.isEmpty(applyIds) ? List.of(-1L) : applyIds;
//查询审批记录
List<ApplyApproveVo> approveList = applyApproveMapper.selectVoList(new LambdaQueryWrapper<ApplyApprove>().in(ApplyApprove::getApplyId, applyIds));
//查询出行人
List<ApplyPersonVo> personList = applyPersonMapper.selectVoList(new LambdaQueryWrapper<ApplyPerson>().in(ApplyPerson::getApplyId, applyIds));
list.forEach(vo -> {
vo.setPersonList(StreamUtils.filter(personList, p -> Objects.equals(p.getApplyId(), vo.getId())));
vo.setApproveList(StreamUtils.filter(approveList, a -> Objects.equals(a.getApplyId(), vo.getId())));
});
return page;
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论