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

出差申请功能实现

上级 0f8edd5b
......@@ -16,6 +16,7 @@ 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.web.core.BaseController;
import org.dromara.server.domain.bo.ApplyApproveBo;
import org.dromara.server.domain.bo.ApplyBo;
import org.dromara.server.domain.vo.ApplyVo;
import org.dromara.server.service.IApplyService;
......@@ -101,6 +102,16 @@ public class ApplyController extends BaseController {
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;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.util.Date;
......@@ -16,9 +14,8 @@ import java.util.Date;
* @date 2024-12-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_apply_approve")
public class ApplyApprove extends BaseEntity {
public class ApplyApprove {
@Serial
private static final long serialVersionUID = 1L;
......@@ -57,7 +54,7 @@ public class ApplyApprove extends BaseEntity {
/**
* 是否通过
*/
private Long pass;
private Boolean pass;
}
......@@ -3,8 +3,6 @@ package org.dromara.server.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
......@@ -15,9 +13,8 @@ import java.io.Serial;
* @date 2024-12-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_apply_person")
public class ApplyPerson extends BaseEntity {
public class ApplyPerson {
@Serial
private static final long serialVersionUID = 1L;
......
package org.dromara.server.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.server.domain.ApplyApprove;
import java.util.Date;
......@@ -19,14 +16,12 @@ import java.util.Date;
* @date 2024-12-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ApplyApprove.class, reverseConvertGenerate = false)
public class ApplyApproveBo extends BaseEntity {
public class ApplyApproveBo {
/**
* id
*/
@NotNull(message = "id不能为空", groups = {EditGroup.class})
private Long id;
/**
......@@ -38,32 +33,28 @@ public class ApplyApproveBo extends BaseEntity {
/**
* 审批人id
*/
@NotNull(message = "审批人id不能为空", groups = {AddGroup.class, EditGroup.class})
private Long approveUserId;
/**
* 审批人
*/
@NotBlank(message = "审批人不能为空", groups = {AddGroup.class, EditGroup.class})
private String approveName;
/**
* 审批时间
*/
@NotNull(message = "审批时间不能为空", groups = {AddGroup.class, EditGroup.class})
private Date approveTime;
/**
* 审批描述
*/
@NotBlank(message = "审批描述不能为空", groups = {AddGroup.class, EditGroup.class})
private String approveDesc;
/**
* 是否通过
*/
@NotNull(message = "是否通过不能为空", groups = {AddGroup.class, EditGroup.class})
private Long pass;
private Boolean pass;
}
package org.dromara.server.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
......@@ -50,7 +51,6 @@ public class ApplyBo extends BaseEntity {
/**
* 申请时间
*/
@NotNull(message = "申请时间不能为空", groups = {AddGroup.class, EditGroup.class})
private Date applyTime;
/**
......@@ -69,12 +69,14 @@ public class ApplyBo extends BaseEntity {
* 开始时间
*/
@NotNull(message = "开始时间不能为空", groups = {AddGroup.class, EditGroup.class})
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startTime;
/**
* 结束时间
*/
@NotNull(message = "结束时间不能为空", groups = {AddGroup.class, EditGroup.class})
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endTime;
/**
......
......@@ -3,10 +3,8 @@ package org.dromara.server.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.server.domain.ApplyPerson;
/**
......@@ -16,9 +14,8 @@ import org.dromara.server.domain.ApplyPerson;
* @date 2024-12-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ApplyPerson.class, reverseConvertGenerate = false)
public class ApplyPersonBo extends BaseEntity {
public class ApplyPersonBo {
/**
* id
......
......@@ -65,7 +65,7 @@ public class ApplyApproveVo implements Serializable {
* 是否通过
*/
@ExcelProperty(value = "是否通过")
private Long pass;
private Boolean pass;
}
......@@ -2,6 +2,7 @@ package org.dromara.server.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.server.domain.Apply;
......@@ -9,6 +10,7 @@ import org.dromara.server.domain.Apply;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
......@@ -71,12 +73,14 @@ public class ApplyVo implements Serializable {
* 开始时间
*/
@ExcelProperty(value = "开始时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startTime;
/**
* 结束时间
*/
@ExcelProperty(value = "结束时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endTime;
/**
......@@ -91,5 +95,13 @@ public class ApplyVo implements Serializable {
@ExcelProperty(value = "状态")
private String status;
/**
* 关联人员
*/
private List<ApplyPersonVo> personList;
/**
* 审批记录
*/
private List<ApplyApproveVo> approveList;
}
......@@ -2,6 +2,7 @@ package org.dromara.server.service;
import org.dromara.server.base.IBaseService;
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.vo.ApplyVo;
......@@ -13,5 +14,11 @@ import org.dromara.server.domain.vo.ApplyVo;
*/
public interface IApplyService extends IBaseService<ApplyVo, ApplyBo, Apply> {
/**
* 审批
*
* @param bo bo
* @return boolean
*/
Boolean approve(ApplyApproveBo bo);
}
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.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
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.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.server.base.AbstractBaseService;
import org.dromara.server.constant.ApplyStatus;
import org.dromara.server.domain.Apply;
import org.dromara.server.domain.ApplyApprove;
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.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.mapper.ApplyApproveMapper;
import org.dromara.server.mapper.ApplyMapper;
import org.dromara.server.mapper.ApplyPersonMapper;
import org.dromara.server.service.IApplyService;
......@@ -23,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* 出差申请Service业务层处理
......@@ -38,6 +48,8 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl
private final ApplyPersonMapper applyPersonMapper;
private final ApplyApproveMapper applyApproveMapper;
@Override
public BaseMapperPlus<Apply, ApplyVo> mapper() {
return baseMapper;
......@@ -68,15 +80,53 @@ public class ApplyServiceImpl extends AbstractBaseService<ApplyVo, ApplyBo, Appl
bo.setApplyTime(new Date());
bo.setApplyDeptName(LoginHelper.getDeptName());
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) {
List<ApplyPersonBo> personList = bo.getPersonList();
for (ApplyPersonBo person : personList) {
person.setApplyId(bo.getId());
person.setApplyId(apply.getId());
ApplyPerson ap = MapstructUtils.convert(person, ApplyPerson.class);
applyPersonMapper.insert(ap);
}
}
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论