feat(operation): 添加审核管理功能

- 新增 AuditController 提供审核详情、列表和更新接口
- 新增 AuditServiceI 接口定义审核服务契约
- 重构审核相关枚举名称,将 OrderAuditStateEnum 重命名为 AuditStateEnum
- 新增 AuditSubjectTypeEnum 枚举定义审核对象类型
- 重构 OrderAuditTypeEnum 为 AuditTypeEnum 审核类型枚举
- 新增 AuditPageQry、AuditShowQry 查询对象和 AuditVO 值对象
- 优化 ExpenseCost 中的 expenseAmount 字段类型定义
- 为 ExpenseProvision 添加备注字段
- 新增 AuditAssembler 实现审核数据转换
- 实现 AuditUpdateCmdExe、AuditPageQryExe、AuditShowQryExe 执行器
- 新增 AuditServiceImpl 实现审核服务
- 创建 Audit 实体类和 AuditGateway 数据网关接口
- 新增 AuditConvert 数据转换器和 AuditDO 数据对象
- 实现 AuditGatewayImpl 数据访问实现类
- 优化各 GatewayImpl 中的查询逻辑,使用 Set 替代 List 避免重复数据
- 更新 PurchaseOrderGatewayImpl 中的审核相关处理逻辑
This commit is contained in:
shenyifei 2025-12-23 10:06:24 +08:00
parent 67fea6e500
commit 20ca821bb2
32 changed files with 834 additions and 102 deletions

View File

@ -0,0 +1,52 @@
package com.xunhong.erp.turbo.admin.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.xunhong.erp.turbo.api.biz.api.AuditServiceI;
import com.xunhong.erp.turbo.api.biz.dto.cmd.AuditUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditPageQry;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditShowQry;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.base.dto.PageDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author shenyifei
*/
@Tag(name = "Audit", description = "审核管理")
@RestController("operationAuditController")
@RequestMapping(value = "/operation")
@RequiredArgsConstructor
public class AuditController {
@DubboReference(version = "1.0.0")
private final AuditServiceI auditService;
@SaCheckLogin
@GetMapping("showAudit")
@Operation(summary = "审核详情", method = "GET")
public SingleResponse<AuditVO> showAudit(@ModelAttribute @Validated AuditShowQry auditShowQry) {
return SingleResponse.of(auditService.show(auditShowQry));
}
@SaCheckLogin
@GetMapping("pageAudit")
@Operation(summary = "审核列表", method = "GET")
public PageResponse<AuditVO> pageAudit(@ModelAttribute @Validated AuditPageQry auditPageQry) {
PageDTO<AuditVO> page = auditService.page(auditPageQry);
return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent());
}
@SaCheckLogin
@RequestMapping(value = "updateAudit", method = {RequestMethod.PATCH, RequestMethod.PUT})
@Operation(summary = "审核更新", method = "PATCH")
public SingleResponse<AuditVO> updateAudit(@RequestBody @Validated AuditUpdateCmd auditUpdateCmd) {
return SingleResponse.of(auditService.update(auditUpdateCmd));
}
}

View File

@ -0,0 +1,17 @@
package com.xunhong.erp.turbo.biz.app.assembler;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.NullValueCheckStrategy;
/**
* @author shenyifei
*/
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {PurchaseOrderAssembler.class})
public interface AuditAssembler {
@Mapping(target = "purchaseOrderVO", source = "purchaseOrder")
AuditVO toAuditVO(Audit audit);
}

View File

@ -0,0 +1,27 @@
package com.xunhong.erp.turbo.biz.app.executor.cmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.AuditUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.app.assembler.AuditAssembler;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author shenyifei
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class AuditUpdateCmdExe {
private final AuditAssembler auditAssembler;
private final AuditGateway auditGateway;
public AuditVO execute(AuditUpdateCmd auditUpdateCmd) {
Audit audit = auditGateway.update(auditUpdateCmd);
return auditAssembler.toAuditVO(audit);
}
}

View File

@ -0,0 +1,29 @@
package com.xunhong.erp.turbo.biz.app.executor.query;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditPageQry;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.app.assembler.AuditAssembler;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author shenyifei
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class AuditPageQryExe {
private final AuditGateway auditGateway;
private final AuditAssembler auditAssembler;
public IPage<AuditVO> execute(AuditPageQry auditPageQry) {
IPage<Audit> page = auditGateway.page(auditPageQry);
return page.convert(auditAssembler::toAuditVO);
}
}

View File

@ -0,0 +1,29 @@
package com.xunhong.erp.turbo.biz.app.executor.query;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditShowQry;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.app.assembler.AuditAssembler;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author shenyifei
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class AuditShowQryExe {
private final AuditAssembler auditAssembler;
private final AuditGateway auditGateway;
public AuditVO execute(AuditShowQry auditShowQry) {
Audit audit = auditGateway.show(auditShowQry);
return auditAssembler.toAuditVO(audit);
}
}

View File

@ -0,0 +1,45 @@
package com.xunhong.erp.turbo.biz.app.service;
import com.xunhong.erp.turbo.api.biz.api.AuditServiceI;
import com.xunhong.erp.turbo.api.biz.dto.cmd.AuditUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditPageQry;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditShowQry;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.base.dto.PageDTO;
import com.xunhong.erp.turbo.biz.app.executor.cmd.AuditUpdateCmdExe;
import com.xunhong.erp.turbo.biz.app.executor.query.AuditPageQryExe;
import com.xunhong.erp.turbo.biz.app.executor.query.AuditShowQryExe;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;
/**
* @author shenyifei
*/
@Slf4j
@Service
@DubboService(interfaceClass = AuditServiceI.class, version = "1.0.0")
@RequiredArgsConstructor
public class AuditServiceImpl implements AuditServiceI {
private final AuditUpdateCmdExe auditUpdateCmdExe;
private final AuditPageQryExe auditPageQryExe;
private final AuditShowQryExe auditShowQryExe;
@Override
public PageDTO<AuditVO> page(AuditPageQry auditPageQry) {
return PageDTO.of(auditPageQryExe.execute(auditPageQry));
}
@Override
public AuditVO update(AuditUpdateCmd auditUpdateCmd) {
return auditUpdateCmdExe.execute(auditUpdateCmd);
}
@Override
public AuditVO show(AuditShowQry auditShowQry) {
return auditShowQryExe.execute(auditShowQry);
}
}

View File

@ -0,0 +1,87 @@
package com.xunhong.erp.turbo.biz.domain.entity;
import com.alibaba.cola.domain.Entity;
import com.alibaba.cola.dto.DTO;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditSubjectTypeEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditTypeEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* @author shenyifei
*/
@Data
@Entity
@EqualsAndHashCode(callSuper = true)
public class Audit extends DTO {
/**
* 审核Id
*/
private Long auditId;
/**
* 资源Id
*/
private Long subjectId;
/**
* 资源类型
*/
private AuditSubjectTypeEnum subjectType;
/**
* 审核状态: 1_待审核2_审核中3_审核通过4_审核驳回5_审核撤回
*/
private AuditStateEnum state;
/**
* 审核类型1_审核员审核2_老板审核
*/
private AuditTypeEnum type;
/**
* 驳回原因
*/
private String auditReason;
/**
* 审核时间
*/
private LocalDateTime auditAt;
/**
* 审核人ID
*/
private Long auditBy;
/**
* 审核人名称
*/
private String auditByName;
/**
* 创建人ID
*/
private Long createdBy;
/**
* 创建人姓名
*/
private String createdByName;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 采购订单
*/
private PurchaseOrder purchaseOrder;
}

View File

@ -0,0 +1,20 @@
package com.xunhong.erp.turbo.biz.domain.gateway;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xunhong.erp.turbo.api.biz.dto.cmd.AuditUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditPageQry;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditShowQry;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
/**
* @author shenyifei
*/
public interface AuditGateway {
IPage<Audit> page(AuditPageQry auditPageQry);
Audit update(AuditUpdateCmd auditUpdateCmd);
Audit show(AuditShowQry auditShowQry);
}

View File

@ -0,0 +1,27 @@
package com.xunhong.erp.turbo.biz.infrastructure.convert;
import com.xunhong.erp.turbo.api.biz.dto.cmd.AuditUpdateCmd;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.infrastructure.entity.AuditDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.NullValueCheckStrategy;
/**
* @author shenyifei
*/
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {PurchaseOrderConvert.class})
public interface AuditConvert {
@Mapping(target = "purchaseOrder", source = "purchaseOrderDO")
Audit toAudit(AuditDO auditDO);
@Mapping(target = "purchaseOrderDO", ignore = true)
@Mapping(target = "version", ignore = true)
@Mapping(target = "updatedAt", ignore = true)
@Mapping(target = "isDelete", ignore = true)
@Mapping(target = "createdAt", ignore = true)
void toAuditDO(@MappingTarget AuditDO auditDO, AuditUpdateCmd auditUpdateCmd);
}

View File

@ -4,8 +4,9 @@ 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.xunhong.erp.turbo.api.biz.dto.enums.OrderAuditStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderAuditTypeEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditSubjectTypeEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditTypeEnum;
import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -18,7 +19,7 @@ import java.time.LocalDateTime;
@Data
@TableName(value = "order_audit")
@EqualsAndHashCode(callSuper = true)
public class OrderAuditDO extends BaseDO<OrderAuditDO> {
public class AuditDO extends BaseDO<AuditDO> {
/**
* 审核Id
@ -27,22 +28,28 @@ public class OrderAuditDO extends BaseDO<OrderAuditDO> {
private Long auditId;
/**
* 订单Id
* 审核对象Id
*/
@TableField(value = "order_id")
private Long orderId;
@TableField(value = "subject_id")
private Long subjectId;
/**
* 审核对象类型1_采购单
*/
@TableField(value = "subject_type")
private AuditSubjectTypeEnum subjectType;
/**
* 审核状态: 1_待审核2_审核中3_审核通过4_审核驳回5_审核取消
*/
@TableField(value = "state")
private OrderAuditStateEnum state;
private AuditStateEnum state;
/**
* 审核类型1_报价审核员审核2_老板审核
*/
@TableField(value = "type")
private OrderAuditTypeEnum type;
private AuditTypeEnum type;
/**
* 驳回原因
@ -80,5 +87,8 @@ public class OrderAuditDO extends BaseDO<OrderAuditDO> {
@TableField(value = "created_by_name")
private String createdByName;
@TableField(exist = false)
private PurchaseOrderDO purchaseOrderDO;
}

View File

@ -54,5 +54,11 @@ public class ExpenseProvisionDO extends BaseDO<ExpenseProvisionDO> {
@TableField(value = "order_id")
private Long orderId;
/**
* 备注
*/
@TableField(value = "remark")
private String remark;
}

View File

@ -0,0 +1,90 @@
package com.xunhong.erp.turbo.biz.infrastructure.gateway;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xunhong.erp.turbo.api.biz.dto.cmd.AuditUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditSubjectTypeEnum;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditPageQry;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditShowQry;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import com.xunhong.erp.turbo.biz.infrastructure.convert.AuditConvert;
import com.xunhong.erp.turbo.biz.infrastructure.entity.AuditDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.PurchaseOrderDO;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.AuditMapper;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.PurchaseOrderMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author shenyifei
*/
@Repository
@RequiredArgsConstructor
public class AuditGatewayImpl implements AuditGateway {
private final AuditMapper auditMapper;
private final AuditConvert auditConvert;
private final PurchaseOrderMapper purchaseOrderMapper;
@Override
public IPage<Audit> page(AuditPageQry auditPageQry) {
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
queryWrapper.eq(Objects.nonNull(auditPageQry.getAuditId()), AuditDO::getAuditId, auditPageQry.getAuditId());
queryWrapper.eq(Objects.nonNull(auditPageQry.getType()), AuditDO::getType, auditPageQry.getType());
queryWrapper.eq(Objects.nonNull(auditPageQry.getState()), AuditDO::getState, auditPageQry.getState());
queryWrapper.eq(Objects.nonNull(auditPageQry.getSubjectType()), AuditDO::getSubjectType, auditPageQry.getSubjectType());
queryWrapper.orderByDesc(AuditDO::getCreatedAt);
IPage<AuditDO> page = new Page<>(auditPageQry.getPageIndex(), auditPageQry.getPageSize());
page = auditMapper.selectPage(page, queryWrapper);
Set<Long> orderIdList = page.getRecords().stream().filter(auditDO -> auditDO.getSubjectType().equals(AuditSubjectTypeEnum.PURCHASE_ORDER)).map(AuditDO::getSubjectId).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(orderIdList)) {
List<PurchaseOrderDO> purchaseOrderDOList = purchaseOrderMapper.selectByOrderIdList(orderIdList);
Map<Long, PurchaseOrderDO> purchaseOrderDOMap = purchaseOrderDOList.stream().collect(Collectors.toMap(PurchaseOrderDO::getOrderId, Function.identity()));
page.getRecords().forEach(auditDO -> {
PurchaseOrderDO purchaseOrderDO = purchaseOrderDOMap.get(auditDO.getSubjectId());
auditDO.setPurchaseOrderDO(purchaseOrderDO);
});
}
return page.convert(auditConvert::toAudit);
}
@Override
public Audit update(AuditUpdateCmd auditUpdateCmd) {
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
queryWrapper.eq(AuditDO::getAuditId, auditUpdateCmd.getAuditId());
queryWrapper.last("limit 1");
AuditDO auditDO = auditMapper.selectOne(queryWrapper);
auditConvert.toAuditDO(auditDO, auditUpdateCmd);
auditMapper.updateById(auditDO);
return auditConvert.toAudit(auditDO);
}
@Override
public Audit show(AuditShowQry auditShowQry) {
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
queryWrapper.eq(AuditDO::getAuditId, auditShowQry.getAuditId());
queryWrapper.last("limit 1");
AuditDO auditDO = auditMapper.selectOne(queryWrapper);
return auditConvert.toAudit(auditDO);
}
}

View File

@ -25,6 +25,7 @@ import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -56,7 +57,7 @@ public class OrderCostGatewayImpl implements OrderCostGateway {
IPage<OrderCostDO> page = new Page<>(orderCostPageQry.getPageIndex(), orderCostPageQry.getPageSize());
page = orderCostMapper.selectPage(page, queryWrapper, orderCostPageQry);
List<Long> orderIdList = page.getRecords().stream().map(OrderCostDO::getOrderId).toList();
Set<Long> orderIdList = page.getRecords().stream().map(OrderCostDO::getOrderId).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(orderIdList)) {
LambdaQueryWrapper<OrderCompanyDO> queryWrapper2 = Wrappers.lambdaQuery(OrderCompanyDO.class);
queryWrapper2.in(OrderCompanyDO::getOrderId, orderIdList);

View File

@ -22,6 +22,7 @@ import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -49,7 +50,7 @@ public class OrderRebateGatewayImpl implements OrderRebateGateway {
IPage<OrderRebateDO> page = new Page<>(orderRebatePageQry.getPageIndex(), orderRebatePageQry.getPageSize());
page = orderRebateMapper.selectPage(page, queryWrapper, orderRebatePageQry);
List<Long> orderIdList = page.getRecords().stream().map(OrderRebateDO::getOrderId).toList();
Set<Long> orderIdList = page.getRecords().stream().map(OrderRebateDO::getOrderId).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(orderIdList)) {
LambdaQueryWrapper<OrderCompanyDO> queryWrapper2 = Wrappers.lambdaQuery(OrderCompanyDO.class);
queryWrapper2.in(OrderCompanyDO::getOrderId, orderIdList);

View File

@ -26,6 +26,7 @@ import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -55,7 +56,7 @@ public class OrderSupplierGatewayImpl implements OrderSupplierGateway {
IPage<OrderSupplierDO> page = new Page<>(orderSupplierPageQry.getPageIndex(), orderSupplierPageQry.getPageSize());
page = orderSupplierMapper.selectPage(page, queryWrapper, orderSupplierPageQry);
List<Long> orderIdList = page.getRecords().stream().map(OrderSupplierDO::getOrderId).toList();
Set<Long> orderIdList = page.getRecords().stream().map(OrderSupplierDO::getOrderId).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(orderIdList)) {
LambdaQueryWrapper<OrderCompanyDO> queryWrapper2 = Wrappers.lambdaQuery(OrderCompanyDO.class);
queryWrapper2.in(OrderCompanyDO::getOrderId, orderIdList);

View File

@ -68,7 +68,7 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
private final SupplierMapper supplierMapper;
private final SupplierConvert supplierConvert;
private final OrderAuditMapper orderAuditMapper;
private final AuditMapper auditMapper;
@Override
@Transactional
@ -269,32 +269,32 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
purchaseOrderDO.setAuditState(PurchaseOrderAuditStateEnum.PENDING_BOSS_APPROVAL);
// 更新审核记录状态为审核成功
LambdaQueryWrapper<OrderAuditDO> auditQueryWrapper = Wrappers.lambdaQuery(OrderAuditDO.class);
auditQueryWrapper.eq(OrderAuditDO::getOrderId, purchaseOrderApproveCmd.getOrderId());
auditQueryWrapper.eq(OrderAuditDO::getState, OrderAuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(OrderAuditDO::getType, OrderAuditTypeEnum.REVIEWER_AUDIT);
OrderAuditDO orderAuditDO = orderAuditMapper.selectOne(auditQueryWrapper);
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, purchaseOrderApproveCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (orderAuditDO != null) {
orderAuditDO.setState(OrderAuditStateEnum.AUDIT_SUCCESS);
orderAuditDO.setAuditAt(LocalDateTime.now());
orderAuditDO.setAuditBy(purchaseOrderApproveCmd.getCreatedBy());
orderAuditDO.setAuditByName(purchaseOrderApproveCmd.getCreatedByName());
orderAuditMapper.updateById(orderAuditDO);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_SUCCESS);
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(purchaseOrderApproveCmd.getCreatedBy());
auditDO.setAuditByName(purchaseOrderApproveCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_ORDER_AUDIT_NOT_FOUND);
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
// 自动生成报老板待审核记录每次都创建新记录
OrderAuditDO orderAuditDO1 = new OrderAuditDO();
orderAuditDO1.setOrderId(purchaseOrderApproveCmd.getOrderId());
orderAuditDO1.setType(OrderAuditTypeEnum.BOSS_AUDIT);
orderAuditDO1.setState(OrderAuditStateEnum.WAITING_AUDIT);
orderAuditDO1.setCreatedBy(purchaseOrderApproveCmd.getCreatedBy());
orderAuditDO1.setCreatedByName(purchaseOrderApproveCmd.getCreatedByName());
orderAuditMapper.insert(orderAuditDO1);
AuditDO auditDO1 = new AuditDO();
auditDO1.setSubjectId(purchaseOrderApproveCmd.getOrderId());
auditDO1.setType(AuditTypeEnum.BOSS_AUDIT);
auditDO1.setState(AuditStateEnum.WAITING_AUDIT);
auditDO1.setCreatedBy(purchaseOrderApproveCmd.getCreatedBy());
auditDO1.setCreatedByName(purchaseOrderApproveCmd.getCreatedByName());
auditMapper.insert(auditDO1);
}
purchaseOrderMapper.updateById(purchaseOrderDO);
@ -562,13 +562,13 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
purchaseOrderMapper.updateById(purchaseOrderDO);
// 自动生成报价审核员待审核记录每次都创建新记录
OrderAuditDO orderAuditDO = new OrderAuditDO();
orderAuditDO.setOrderId(purchaseOrderSubmitReviewCmd.getOrderId());
orderAuditDO.setType(OrderAuditTypeEnum.REVIEWER_AUDIT);
orderAuditDO.setState(OrderAuditStateEnum.WAITING_AUDIT);
orderAuditDO.setCreatedBy(purchaseOrderSubmitReviewCmd.getCreatedBy());
orderAuditDO.setCreatedByName(purchaseOrderSubmitReviewCmd.getCreatedByName());
orderAuditMapper.insert(orderAuditDO);
AuditDO auditDO = new AuditDO();
auditDO.setSubjectId(purchaseOrderSubmitReviewCmd.getOrderId());
auditDO.setType(AuditTypeEnum.REVIEWER_AUDIT);
auditDO.setState(AuditStateEnum.WAITING_AUDIT);
auditDO.setCreatedBy(purchaseOrderSubmitReviewCmd.getCreatedBy());
auditDO.setCreatedByName(purchaseOrderSubmitReviewCmd.getCreatedByName());
auditMapper.insert(auditDO);
}
@Override
@ -592,18 +592,18 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
purchaseOrderMapper.updateById(purchaseOrderDO);
// 更新审核记录状态为草稿撤回审核
LambdaQueryWrapper<OrderAuditDO> auditQueryWrapper = Wrappers.lambdaQuery(OrderAuditDO.class);
auditQueryWrapper.eq(OrderAuditDO::getOrderId, purchaseOrderWithdrawReviewCmd.getOrderId());
auditQueryWrapper.eq(OrderAuditDO::getState, OrderAuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(OrderAuditDO::getType, OrderAuditTypeEnum.REVIEWER_AUDIT);
OrderAuditDO orderAuditDO = orderAuditMapper.selectOne(auditQueryWrapper);
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, purchaseOrderWithdrawReviewCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (orderAuditDO != null) {
orderAuditDO.setState(OrderAuditStateEnum.AUDIT_CANCEL);
orderAuditDO.setAuditAt(LocalDateTime.now());
orderAuditDO.setAuditBy(purchaseOrderWithdrawReviewCmd.getCreatedBy());
orderAuditDO.setAuditByName(purchaseOrderWithdrawReviewCmd.getCreatedByName());
orderAuditMapper.updateById(orderAuditDO);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_CANCEL);
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(purchaseOrderWithdrawReviewCmd.getCreatedBy());
auditDO.setAuditByName(purchaseOrderWithdrawReviewCmd.getCreatedByName());
auditMapper.updateById(auditDO);
}
}
@ -628,22 +628,22 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
purchaseOrderMapper.updateById(purchaseOrderDO);
// 更新审核记录
LambdaQueryWrapper<OrderAuditDO> auditQueryWrapper = Wrappers.lambdaQuery(OrderAuditDO.class);
auditQueryWrapper.eq(OrderAuditDO::getOrderId, purchaseOrderRejectApproveCmd.getOrderId());
auditQueryWrapper.eq(OrderAuditDO::getState, OrderAuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(OrderAuditDO::getType, OrderAuditTypeEnum.REVIEWER_AUDIT);
OrderAuditDO orderAuditDO = orderAuditMapper.selectOne(auditQueryWrapper);
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, purchaseOrderRejectApproveCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (orderAuditDO != null) {
orderAuditDO.setState(OrderAuditStateEnum.AUDIT_REJECTED);
orderAuditDO.setAuditReason(purchaseOrderRejectApproveCmd.getRejectReason());
orderAuditDO.setAuditAt(LocalDateTime.now());
orderAuditDO.setAuditBy(purchaseOrderRejectApproveCmd.getCreatedBy());
orderAuditDO.setAuditByName(purchaseOrderRejectApproveCmd.getCreatedByName());
orderAuditMapper.updateById(orderAuditDO);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_REJECTED);
auditDO.setAuditReason(purchaseOrderRejectApproveCmd.getRejectReason());
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(purchaseOrderRejectApproveCmd.getCreatedBy());
auditDO.setAuditByName(purchaseOrderRejectApproveCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_ORDER_AUDIT_NOT_FOUND);
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
// 发货单改成草稿
@ -672,21 +672,21 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
purchaseOrderDO.setAuditState(PurchaseOrderAuditStateEnum.BOSS_APPROVED);
// 更新审核记录为审核成功
LambdaQueryWrapper<OrderAuditDO> auditQueryWrapper = Wrappers.lambdaQuery(OrderAuditDO.class);
auditQueryWrapper.eq(OrderAuditDO::getOrderId, purchaseOrderFinalApproveCmd.getOrderId());
auditQueryWrapper.eq(OrderAuditDO::getState, OrderAuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(OrderAuditDO::getType, OrderAuditTypeEnum.BOSS_AUDIT);
OrderAuditDO orderAuditDO = orderAuditMapper.selectOne(auditQueryWrapper);
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, purchaseOrderFinalApproveCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.BOSS_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (orderAuditDO != null) {
orderAuditDO.setState(OrderAuditStateEnum.AUDIT_SUCCESS);
orderAuditDO.setAuditAt(LocalDateTime.now());
orderAuditDO.setAuditBy(purchaseOrderFinalApproveCmd.getCreatedBy());
orderAuditDO.setAuditByName(purchaseOrderFinalApproveCmd.getCreatedByName());
orderAuditMapper.updateById(orderAuditDO);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_SUCCESS);
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(purchaseOrderFinalApproveCmd.getCreatedBy());
auditDO.setAuditByName(purchaseOrderFinalApproveCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_ORDER_AUDIT_NOT_FOUND);
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
purchaseOrderMapper.updateById(purchaseOrderDO);
@ -729,22 +729,22 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
purchaseOrderMapper.updateById(purchaseOrderDO);
// 更新审核记录
LambdaQueryWrapper<OrderAuditDO> auditQueryWrapper = Wrappers.lambdaQuery(OrderAuditDO.class);
auditQueryWrapper.eq(OrderAuditDO::getOrderId, purchaseOrderRejectFinalCmd.getOrderId());
auditQueryWrapper.eq(OrderAuditDO::getState, OrderAuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(OrderAuditDO::getType, OrderAuditTypeEnum.BOSS_AUDIT);
OrderAuditDO orderAuditDO = orderAuditMapper.selectOne(auditQueryWrapper);
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, purchaseOrderRejectFinalCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.BOSS_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (orderAuditDO != null) {
orderAuditDO.setState(OrderAuditStateEnum.AUDIT_REJECTED);
orderAuditDO.setAuditReason(purchaseOrderRejectFinalCmd.getRejectReason());
orderAuditDO.setAuditAt(LocalDateTime.now());
orderAuditDO.setAuditBy(purchaseOrderRejectFinalCmd.getCreatedBy());
orderAuditDO.setAuditByName(purchaseOrderRejectFinalCmd.getCreatedByName());
orderAuditMapper.updateById(orderAuditDO);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_REJECTED);
auditDO.setAuditReason(purchaseOrderRejectFinalCmd.getRejectReason());
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(purchaseOrderRejectFinalCmd.getCreatedBy());
auditDO.setAuditByName(purchaseOrderRejectFinalCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_ORDER_AUDIT_NOT_FOUND);
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
}

View File

@ -1,13 +1,13 @@
package com.xunhong.erp.turbo.biz.infrastructure.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderAuditDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.AuditDO;
import org.apache.ibatis.annotations.Mapper;
/**
* @author shenyifei
*/
@Mapper
public interface OrderAuditMapper extends BaseMapper<OrderAuditDO> {
public interface AuditMapper extends BaseMapper<AuditDO> {
}

View File

@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
* @author shenyifei
@ -13,6 +14,6 @@ import java.util.List;
@Mapper
public interface PurchaseOrderMapper extends BaseMapper<PurchaseOrderDO> {
List<PurchaseOrderDO> selectByOrderIdList(@Param("orderIdList") List<Long> orderIdList);
List<PurchaseOrderDO> selectByOrderIdList(@Param("orderIdList") Set<Long> orderIdList);
}

View File

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderAuditMapper">
<resultMap id="BaseResultMap" type="com.xunhong.erp.turbo.biz.infrastructure.entity.OrderAuditDO">
<mapper namespace="com.xunhong.erp.turbo.biz.infrastructure.mapper.AuditMapper">
<resultMap id="BaseResultMap" type="com.xunhong.erp.turbo.biz.infrastructure.entity.AuditDO">
<result property="auditId" column="audit_id"/>
<result property="orderId" column="order_id"/>
<result property="subjectId" column="subject_id"/>
<result property="subjectType" column="subject_type"/>
<result property="state" column="state"/>
<result property="type" column="type"/>
<result property="auditReason" column="reject_reason"/>

View File

@ -54,7 +54,7 @@
resultType="com.xunhong.erp.turbo.biz.infrastructure.entity.PurchaseOrderDO"
resultMap="SelectByOrderIdListResultMap">
SELECT
po.order_id, po.order_sn, po.state, po.type, ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin, ov.destination
po.order_id, po.order_sn, po.state, po.audit_state, po.type, ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin, ov.destination
FROM purchase_order po
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete = 0
<where>

View File

@ -0,0 +1,19 @@
package com.xunhong.erp.turbo.api.biz.api;
import com.xunhong.erp.turbo.api.biz.dto.cmd.AuditUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditPageQry;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditShowQry;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.base.dto.PageDTO;
/**
* @author shenyifei
*/
public interface AuditServiceI {
PageDTO<AuditVO> page(AuditPageQry auditPageQry);
AuditVO update(AuditUpdateCmd auditUpdateCmd);
AuditVO show(AuditShowQry auditShowQry);
}

View File

@ -0,0 +1,93 @@
package com.xunhong.erp.turbo.api.biz.dto.cmd;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditSubjectTypeEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditTypeEnum;
import com.xunhong.erp.turbo.base.dto.Command;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* @author shenyifei
*/
@Data
@Schema(title = "审核更新")
@EqualsAndHashCode(callSuper = true)
public class AuditUpdateCmd extends Command {
/**
* 审核Id
*/
@Schema(title = "审核Id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long auditId;
/**
* 资源Id
*/
@Schema(title = "资源Id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long subjectId;
/**
* 资源类型
*/
@Schema(title = "资源类型", requiredMode = Schema.RequiredMode.REQUIRED)
private AuditSubjectTypeEnum subjectType;
/**
* 审核状态: 1_待审核2_审核中3_审核通过4_审核驳回5_审核撤回
*/
@Schema(title = "审核状态: 1_待审核2_审核中3_审核通过4_审核驳回5_审核撤回")
private AuditStateEnum state;
/**
* 审核类型1_审核员审核2_老板审核
*/
@Schema(title = "审核类型1_审核员审核2_老板审核", requiredMode = Schema.RequiredMode.REQUIRED)
private AuditTypeEnum type;
/**
* 驳回原因
*/
@Schema(title = "驳回原因")
private String auditReason;
/**
* 审核时间
*/
@Schema(title = "审核时间")
private LocalDateTime auditAt;
/**
* 审核人ID
*/
@Schema(title = "审核人ID", type = "string")
private Long auditBy;
/**
* 审核人名称
*/
@Schema(title = "审核人名称")
private String auditByName;
/**
* 创建人ID
*/
@Schema(title = "创建人ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long createdBy;
/**
* 创建人姓名
*/
@Schema(title = "创建人姓名")
private String createdByName;
/**
* 创建时间
*/
@Schema(title = "创建时间")
private LocalDateTime createdAt;
}

View File

@ -44,7 +44,7 @@ public class ExpenseCost extends Command {
/**
* 花销金额
*/
@Schema(title = "花销金额", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
@Schema(title = "花销金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal expenseAmount;
/**

View File

@ -52,5 +52,11 @@ public class ExpenseProvision extends Command {
*/
@Schema(title = "采购单ID", type = "string")
private Long orderId;
/**
* 备注
*/
@Schema(title = "备注", type = "string")
private String remark;
}

View File

@ -6,7 +6,7 @@ import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum OrderAuditStateEnum {
public enum AuditStateEnum {
/**
* 审核状态: 1_待审核2_审核中3_审核通过4_审核驳回5_审核取消
*/

View File

@ -0,0 +1,20 @@
package com.xunhong.erp.turbo.api.biz.dto.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum AuditSubjectTypeEnum {
/**
* 审核对象类型1_采购单
*/
PURCHASE_ORDER(1, "采购单"),
;
@EnumValue
private final int type;
private final String message;
}

View File

@ -6,7 +6,7 @@ import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum OrderAuditTypeEnum {
public enum AuditTypeEnum {
/**
* 审核类型1_审核员审核2_老板审核
*/

View File

@ -0,0 +1,31 @@
package com.xunhong.erp.turbo.api.biz.dto.qry;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditSubjectTypeEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditTypeEnum;
import com.xunhong.erp.turbo.base.dto.PageQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author shenyifei
*/
@Data
@Schema(title = "审核分页查询")
@EqualsAndHashCode(callSuper = true)
public class AuditPageQry extends PageQuery {
@Schema(title = "审核ID", type = "string")
private Long auditId;
@Schema(title = "审核类型1_报价审核员审核2_老板审核")
private AuditTypeEnum type;
@Schema(title = "审核状态: 1_待审核2_审核中3_审核通过4_审核驳回5_审核撤回")
private AuditStateEnum state;
@Schema(title = "审核对象类型1_采购单")
private AuditSubjectTypeEnum subjectType;
}

View File

@ -0,0 +1,19 @@
package com.xunhong.erp.turbo.api.biz.dto.qry;
import com.xunhong.erp.turbo.base.dto.Query;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author shenyifei
*/
@Data
@Schema(title = "审核查询")
@EqualsAndHashCode(callSuper = true)
public class AuditShowQry extends Query {
@Schema(title = "审核ID", type = "string")
private Long auditId;
}

View File

@ -0,0 +1,100 @@
package com.xunhong.erp.turbo.api.biz.dto.vo;
import com.alibaba.cola.dto.DTO;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditSubjectTypeEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* @author shenyifei
*/
@Data
@Schema(title = "审核")
@EqualsAndHashCode(callSuper = true)
public class AuditVO extends DTO {
/**
* 审核Id
*/
@Schema(title = "审核Id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long auditId;
/**
* 资源Id
*/
@Schema(title = "资源Id", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long subjectId;
/**
* 资源类型
*/
@Schema(title = "资源类型", requiredMode = Schema.RequiredMode.REQUIRED)
private AuditSubjectTypeEnum subjectType;
/**
* 审核状态: 1_待审核2_审核中3_审核通过4_审核驳回5_审核撤回
*/
@Schema(title = "审核状态: 1_待审核2_审核中3_审核通过4_审核驳回5_审核撤回")
private AuditStateEnum state;
/**
* 审核类型1_审核员审核2_老板审核
*/
@Schema(title = "审核类型1_审核员审核2_老板审核", requiredMode = Schema.RequiredMode.REQUIRED)
private AuditTypeEnum type;
/**
* 驳回原因
*/
@Schema(title = "驳回原因")
private String auditReason;
/**
* 审核时间
*/
@Schema(title = "审核时间")
private LocalDateTime auditAt;
/**
* 审核人ID
*/
@Schema(title = "审核人ID", type = "string")
private Long auditBy;
/**
* 审核人名称
*/
@Schema(title = "审核人名称")
private String auditByName;
/**
* 创建人ID
*/
@Schema(title = "创建人ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long createdBy;
/**
* 创建人姓名
*/
@Schema(title = "创建人姓名")
private String createdByName;
/**
* 创建时间
*/
@Schema(title = "创建时间")
private LocalDateTime createdAt;
/**
* 采购单信息
*/
@Schema(title = "采购单信息")
private PurchaseOrderVO purchaseOrderVO;
}

View File

@ -68,19 +68,19 @@ public class PurchaseOrderVO extends DTO {
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
*/
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭")
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭", requiredMode = Schema.RequiredMode.REQUIRED)
private PurchaseOrderStateEnum state;
/**
* 采购单审核状态: 1_待报价审核2_待老板审批3_老板审批通过4_报价审核驳回5_老板审批驳回
*/
@Schema(title = "采购单审核状态: 1_待报价审核2_待老板审批3_老板审批通过4_报价审核驳回5_老板审批驳回")
@Schema(title = "采购单审核状态: 1_待报价审核2_待老板审批3_老板审批通过4_报价审核驳回5_老板审批驳回", requiredMode = Schema.RequiredMode.REQUIRED)
private PurchaseOrderAuditStateEnum auditState;
/**
* 采购类型1_产地采购2_市场采购
*/
@Schema(title = "采购类型1_产地采购2_市场采购")
@Schema(title = "采购类型1_产地采购2_市场采购", requiredMode = Schema.RequiredMode.REQUIRED)
private PurchaseOrderTypeEnum type;
/**

View File

@ -40,7 +40,7 @@ public enum BizErrorCode implements ErrorCode {
/**
* 审核记录不存在
*/
B_BIZ_ORDER_AUDIT_NOT_FOUND("B_BIZ_ORDER_AUDIT_NOT_FOUND", "审核记录不存在");
B_BIZ_AUDIT_NOT_FOUND("B_BIZ_AUDIT_NOT_FOUND", "审核记录不存在");
;