1. 项目 合同 以及审核

This commit is contained in:
zhaowenyuan 2024-06-18 14:46:28 +08:00
parent 6541eb6915
commit cb219b2493
12 changed files with 220 additions and 47 deletions

View File

@ -1,47 +1,23 @@
package com.chushang.inspection.project.entity.dto; package com.chushang.inspection.project.entity.dto;
import cn.hutool.core.date.DatePattern;
import com.chushang.common.mybatis.annotation.Condition;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
/** /**
* @auther: zhao * @auther: zhao
* @date: 2024/6/17 17:59 * @date: 2024/6/17 18:17
*/ */
@Data @Data
public class AuditDTO { public class AuditDTO {
/**
* 多选 第三方id
*/
@Condition(name = "third_id", type = Condition.ConditionType.in)
private List<Long> thirdIds;
/** /**
* 审核状态 * 审核状态
*/ */
@Condition(name = "audit_status", type = Condition.ConditionType.eq) @NotNull(message = "审核状态不能为空")
private Integer auditStatus; private Integer auditStatus;
/** /**
* 默认 合同审核 * 审核 结果
*/ */
@Condition(name = "third_type", type = Condition.ConditionType.eq) private String remark;
private Integer auditType = 1;
/**
* 审核人
*/
@Condition(name = "audit_user_id", type = Condition.ConditionType.eq)
private Long auditUserId;
/**
* 审核时间 区间
*/
@Condition(name = "audit_time", type = Condition.ConditionType.between)
@JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
private List<LocalDateTime> auditTimes;
} }

View File

@ -3,6 +3,7 @@ package com.chushang.inspection.project.entity.dto;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.chushang.common.core.validator.Create; import com.chushang.common.core.validator.Create;
import com.chushang.common.core.validator.Update; import com.chushang.common.core.validator.Update;
import com.chushang.common.mybatis.annotation.Condition;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
@ -24,6 +25,7 @@ public class ContractDTO {
* 合同Id * 合同Id
*/ */
@NotNull(message = "合同Id不能为空", groups = Update.class) @NotNull(message = "合同Id不能为空", groups = Update.class)
@Condition(name = "contract_id", type = Condition.ConditionType.eq)
private Long contractId; private Long contractId;
/** /**
* 项目合同 * 项目合同
@ -54,4 +56,8 @@ public class ContractDTO {
* 查询枚举 AuditStatusEnums , 最终以字典表中project_audit_status字典编码为准 * 查询枚举 AuditStatusEnums , 最终以字典表中project_audit_status字典编码为准
*/ */
private Integer auditStatus; private Integer auditStatus;
/**
* 备注
*/
private String remark;
} }

View File

@ -0,0 +1,46 @@
package com.chushang.inspection.project.entity.dto;
import cn.hutool.core.date.DatePattern;
import com.chushang.common.mybatis.annotation.Condition;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* @auther: zhao
* @date: 2024/6/17 17:59
*/
@Data
public class PageAuditDTO {
/**
* 多选 第三方id
*/
@Condition(name = "third_id", type = Condition.ConditionType.in)
private List<Long> thirdIds;
/**
* 审核状态
*/
@Condition(name = "audit_status", type = Condition.ConditionType.eq)
private Integer auditStatus;
/**
* 默认 合同审核
*/
@Condition(name = "third_type", type = Condition.ConditionType.eq)
private Integer auditType = 1;
/**
* 审核人
*/
@Condition(name = "audit_user_id", type = Condition.ConditionType.eq)
private Long auditUserId;
/**
* 审核时间 区间
*/
@Condition(name = "audit_time", type = Condition.ConditionType.between)
@JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
private List<LocalDateTime> auditTimes;
}

View File

@ -7,6 +7,7 @@ import com.chushang.common.mybatis.base.BaseEntity;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import java.util.List;
import lombok.*; import lombok.*;
@ -101,4 +102,10 @@ public class WrkProjectContract extends BaseEntity {
*/ */
@TableField("dept_id") @TableField("dept_id")
private Long deptId; private Long deptId;
/**
* 审核记录
*/
@TableField(exist = false)
private List<WrkAudit> audits;
} }

View File

@ -1,14 +1,14 @@
package com.chushang.inspection.project.controller; package com.chushang.inspection.project.controller;
import com.chushang.common.core.web.AjaxResult; import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.inspection.project.entity.dto.AuditDTO; import com.chushang.inspection.project.entity.dto.AuditDTO;
import com.chushang.inspection.project.entity.dto.PageAuditDTO;
import com.chushang.inspection.project.service.WrkAuditService; import com.chushang.inspection.project.service.WrkAuditService;
import com.chushang.security.annotation.RequiresPermissions; import com.chushang.security.annotation.RequiresPermissions;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -29,10 +29,37 @@ public class WrkAuditController {
*/ */
@GetMapping(value = "/list") @GetMapping(value = "/list")
// @RequiresPermissions("project:audit:list") // @RequiresPermissions("project:audit:list")
public AjaxResult pageList(@Validated AuditDTO auditDTO){ public AjaxResult pageList(@Validated PageAuditDTO auditDTO){
return AjaxResult.success(auditService.pageList(auditDTO)); return AjaxResult.success(auditService.pageList(auditDTO));
} }
/**
* 审核
*/
@PostMapping(value = "/audit/{auditId}")
// @RequiresPermissions("project:audit:audit")
public AjaxResult audit(@PathVariable Long auditId,
@RequestBody@Validated AuditDTO auditDTO)
{
auditService.audit(auditId, auditDTO);
return AjaxResult.success();
}
@DeleteMapping(value = "/del")
public AjaxResult del(){
return AjaxResult.success();
}
/**
* 获取合同详情
*/
@GetMapping(value = "/contract/{contractId}")
@RequiresPermissions(value = "inspection:contract:info")
public AjaxResult getContractInfo(@PathVariable Long contractId){
return AjaxResult.success(auditService.getContractInfo(contractId));
}
} }

View File

@ -134,7 +134,6 @@ public class WrkProjectController {
return AjaxResult.success(contractService.pageList(projectId, commonParam)); return AjaxResult.success(contractService.pageList(projectId, commonParam));
} }
// /** // /**
// //
// /** // /**

View File

@ -3,18 +3,28 @@ package com.chushang.inspection.project.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.exception.utils.AssertUtil;
import com.chushang.common.mybatis.page.CommonParam; import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult; import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.common.mybatis.utils.WrapperUtils; import com.chushang.common.mybatis.utils.WrapperUtils;
import com.chushang.datascope.annotation.DataScope; import com.chushang.datascope.annotation.DataScope;
import com.chushang.inspection.project.entity.dto.AuditDTO; import com.chushang.inspection.project.entity.dto.AuditDTO;
import com.chushang.inspection.project.entity.po.WrkProject; import com.chushang.inspection.project.entity.dto.PageAuditDTO;
import lombok.Data; import com.chushang.inspection.project.entity.po.WrkProjectContract;
import com.chushang.security.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chushang.inspection.project.entity.po.WrkAudit; import com.chushang.inspection.project.entity.po.WrkAudit;
import com.chushang.inspection.project.mapper.WrkAuditMapper; import com.chushang.inspection.project.mapper.WrkAuditMapper;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
/** /**
* @auther: zhao * @auther: zhao
@ -24,8 +34,11 @@ import com.chushang.inspection.project.mapper.WrkAuditMapper;
@Service @Service
public class WrkAuditService extends ServiceImpl<WrkAuditMapper, WrkAudit> implements IService<WrkAudit> { public class WrkAuditService extends ServiceImpl<WrkAuditMapper, WrkAudit> implements IService<WrkAudit> {
@Resource
WrkProjectContractService contractService;
@DataScope @DataScope
public PageResult pageList(AuditDTO auditDTO) public PageResult pageList(PageAuditDTO auditDTO)
{ {
CommonParam commonParam = CommonParam.buildPageRequest(); CommonParam commonParam = CommonParam.buildPageRequest();
LambdaQueryWrapper<WrkAudit> auditSql = WrapperUtils.builder(auditDTO,commonParam); LambdaQueryWrapper<WrkAudit> auditSql = WrapperUtils.builder(auditDTO,commonParam);
@ -35,4 +48,72 @@ public class WrkAuditService extends ServiceImpl<WrkAuditMapper, WrkAudit> imple
); );
return new PageResult(page); return new PageResult(page);
} }
@DataScope
public List<WrkAudit> allList(PageAuditDTO auditDTO)
{
CommonParam commonParam = CommonParam.buildAllRequest();
LambdaQueryWrapper<WrkAudit> auditSql = WrapperUtils.builder(auditDTO,commonParam);
return this.list(auditSql);
}
/**
* 合同 或者 项目 审核
*/
@Transactional
public void audit(Long auditId, AuditDTO audit)
{
WrkAudit byId = getById(auditId);
AssertUtil.invalidate(null == byId, "审核记录不存在");
Integer thirdAuditStatus = audit.getAuditStatus();
AssertUtil.invalidate(Objects.equals(byId.getAuditStatus(), thirdAuditStatus), "审核状态不能重复审核");
// 更新审核状态
WrkAudit wrkAudit = new WrkAudit();
// 此处为 新增一条 审核信息
// wrkAudit.setAuditId(auditId);
wrkAudit.setAuditStatus(audit.getAuditStatus());
wrkAudit.setAuditName(SecurityUtils.getUsername());
wrkAudit.setAuditUserId(SecurityUtils.getUserId());
wrkAudit.setRemark(audit.getRemark());
wrkAudit.setAuditTime(LocalDateTime.now());
wrkAudit.setThirdId(byId.getThirdId());
wrkAudit.setThirdType(byId.getThirdType());
// 此处需要判断 审核状态
/**
* 未提交 0
* 待初审 1
* 待复审 2
* 初审通过 3
* 复审通过 4
* 初审驳回 5
* 复审驳回 6
* 已撤销 7
*/
if (Objects.equals(byId.getThirdType(), 0)) {
// 项目审核
// projectService.updateState(byId.getThirdId(), auditStatus);
} else {
// 合同审核
contractService.updateAuditStatus(byId.getThirdId(), thirdAuditStatus);
}
// 同时需要更新 合同内的审核状态
updateById(wrkAudit);
}
/**
* 获取 合同以及合同对应的 审核列表
*/
public WrkProjectContract getContractInfo(Long contractId)
{
// 合同信息
WrkProjectContract contract = contractService.getById(contractId);
if (null != contract){
PageAuditDTO pageAuditDTO = new PageAuditDTO();
pageAuditDTO.setThirdIds(Collections.singletonList(contractId));
contract.setAudits(allList(pageAuditDTO));
}
return contract;
}
} }

View File

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.exception.utils.AssertUtil;
import com.chushang.common.mybatis.page.CommonParam; import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult; import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.common.mybatis.utils.WrapperUtils; import com.chushang.common.mybatis.utils.WrapperUtils;
@ -33,9 +34,9 @@ public class WrkProjectContractService extends ServiceImpl<WrkProjectContractMap
public void delete(Long contractId) { public void delete(Long contractId) {
WrkProjectContract contract = getById(contractId); WrkProjectContract contract = getById(contractId);
Integer auditStatus = contract.getAuditStatus(); Integer auditStatus = contract.getAuditStatus();
if (3 == auditStatus || 4 == auditStatus){ // 不为 0 , 合同不能删除
log.info("删除已经审核通过的项目"); AssertUtil.invalidate(0 != auditStatus && 7 != auditStatus, "当前合同无法删除, 请撤销后删除");
}
removeById(contractId); removeById(contractId);
} }
@ -52,4 +53,15 @@ public class WrkProjectContractService extends ServiceImpl<WrkProjectContractMap
); );
return new PageResult(page); return new PageResult(page);
} }
/**
* 修改 合同的 审核状态
*/
public void updateAuditStatus(Long contractId, Integer auditStatus) {
updateById(WrkProjectContract.builder()
.contractId(contractId)
.auditStatus(auditStatus)
.build());
}
} }

View File

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.exception.utils.AssertUtil;
import com.chushang.common.mybatis.enums.Operator; import com.chushang.common.mybatis.enums.Operator;
import com.chushang.common.mybatis.page.CommonParam; import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult; import com.chushang.common.mybatis.utils.PageResult;
@ -11,6 +12,7 @@ import com.chushang.common.mybatis.utils.WrapperUtils;
import com.chushang.datascope.annotation.DataScope; import com.chushang.datascope.annotation.DataScope;
import com.chushang.inspection.project.entity.dto.ContractDTO; import com.chushang.inspection.project.entity.dto.ContractDTO;
import com.chushang.inspection.project.entity.dto.ProjectDTO; import com.chushang.inspection.project.entity.dto.ProjectDTO;
import com.chushang.inspection.project.entity.po.WrkAudit;
import com.chushang.inspection.project.entity.po.WrkProjectContract; import com.chushang.inspection.project.entity.po.WrkProjectContract;
import com.chushang.security.utils.SecurityUtils; import com.chushang.security.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -33,6 +35,8 @@ import java.util.List;
public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject> implements IService<WrkProject> { public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject> implements IService<WrkProject> {
@Resource @Resource
WrkProjectContractService contractService; WrkProjectContractService contractService;
@Resource
WrkAuditService auditService;
@DataScope @DataScope
public PageResult pageList(WrkProject project, CommonParam commonParam) { public PageResult pageList(WrkProject project, CommonParam commonParam) {
@ -55,7 +59,6 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
// Long deptId = 200L; // Long deptId = 200L;
wrkProject.setDeptId(deptId); wrkProject.setDeptId(deptId);
ContractDTO contract = project.getContract(); ContractDTO contract = project.getContract();
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
// 项目合同 // 项目合同
@ -67,7 +70,6 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
this.save(wrkProject); this.save(wrkProject);
// 项目合同 // 项目合同
saveContract(contract); saveContract(contract);
return wrkProject.getProjectId(); return wrkProject.getProjectId();
} }
@ -138,13 +140,31 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
contractService.save(projectContract); contractService.save(projectContract);
updateState(contract.getProjectId(), projectEffect ? 1 : 0 ); updateState(contract.getProjectId(), projectEffect ? 1 : 0 );
Integer auditStatus = contract.getAuditStatus();
// 新增合同的审核记录
WrkAudit audit = new WrkAudit();
audit.setThirdType(1);
audit.setDeptId(deptId);
audit.setAuditStatus(auditStatus);
audit.setThirdId(projectContract.getContractId());
audit.setRemark(contract.getRemark());
auditService.save(audit);
return projectContract.getContractId(); return projectContract.getContractId();
} }
@Transactional @Transactional
public Long updateContract(ContractDTO contract) { public Long updateContract(ContractDTO contract) {
// 修改 合同时必须未提交或者已经撤销
LambdaQueryWrapper<WrkProjectContract> contractSql = WrapperUtils.builder(contract, null);
contractSql.last(Operator.LIMIT_ONE.getCharacter());
WrkProjectContract projectContract = contractService.getOne(contractSql);
AssertUtil.invalidate(null == projectContract, "合同不存在");
Integer auditStatus = projectContract.getAuditStatus();
AssertUtil.invalidate(0 != auditStatus && 7 != auditStatus, "当前合同已提交审核, 无法修改");
projectContract = new WrkProjectContract();
// 项目合同 // 项目合同
WrkProjectContract projectContract = WrkProjectContract.builder().build();
BeanUtil.copyProperties(contract, projectContract); BeanUtil.copyProperties(contract, projectContract);
projectContract.setProjectId(null); projectContract.setProjectId(null);

View File

@ -46,7 +46,7 @@
<!-- jar包不包含唯一版本标识 --> <!-- jar包不包含唯一版本标识 -->
<useUniqueVersions>false</useUniqueVersions> <useUniqueVersions>false</useUniqueVersions>
<!--指定入口类 --> <!--指定入口类 -->
<mainClass>com.chushang.LoanApplication</mainClass> <mainClass>com.chushang.TaskApplication</mainClass>
</manifest> </manifest>
<manifestEntries> <manifestEntries>
<!--MANIFEST.MF 中 Class-Path 加入资源文件目录 --> <!--MANIFEST.MF 中 Class-Path 加入资源文件目录 -->

View File

@ -32,7 +32,6 @@ public class RemoteTaskController implements RemoteTaskService {
@PostMapping("/create") @PostMapping("/create")
public Result<Long> createTask(@RequestBody CreateTaskDTO task, String source) { public Result<Long> createTask(@RequestBody CreateTaskDTO task, String source) {
TaskInfo taskInfo = TaskInfo.builder() TaskInfo taskInfo = TaskInfo.builder()
.applicationName(task.getApplicationName().getServiceName()) .applicationName(task.getApplicationName().getServiceName())
.className(task.getClassName()) .className(task.getClassName())
.methodName(task.getMethodName()) .methodName(task.getMethodName())

View File

@ -21,11 +21,11 @@
<id>cloud</id> <id>cloud</id>
<properties> <properties>
<profiles.active>cloud</profiles.active> <profiles.active>cloud</profiles.active>
<nacos.host>192.168.110.75:8848</nacos.host> <nacos.host>192.168.1.168:16000,192.168.1.169:16000,192.168.1.98:16000</nacos.host>
<nacos.namespace>5512c576-2976-4334-b6f5-fe7c3014f654</nacos.namespace> <nacos.namespace>11c67dc3-423c-4195-b945-ace6cb2323a1</nacos.namespace>
<nacos.group>DEFAULT_GROUP</nacos.group> <nacos.group>DEFAULT_GROUP</nacos.group>
<nacos.username>nacos</nacos.username> <nacos.username>nacos</nacos.username>
<nacos.password>nacos@123</nacos.password> <nacos.password>qq630638001</nacos.password>
<sentinel-transport.dashboard>localhost:5003</sentinel-transport.dashboard> <sentinel-transport.dashboard>localhost:5003</sentinel-transport.dashboard>
</properties> </properties>
</profile> </profile>