package com.template.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.template.api.ApplicationProcedureTemporaryControllerAPI;
import com.template.model.dto.AppletApprovalProcessDto;
import com.template.model.dto.ApplicationProcedureTemporaryDto;
import com.template.model.dto.ApprovalProcessDto;
import com.template.model.pojo.AdminMenu;
import com.template.model.pojo.ApplicationProcedureSetting;
import com.template.model.pojo.ApplicationProcedureTemporary;
import com.template.model.pojo.PermissionSetting;
import com.template.model.result.CommonResult;
import com.template.model.result.PageUtils;
import com.template.model.vo.ApplicationProcedureTemporaryVo;
import com.template.services.AdminMenuService;
import com.template.services.ApplicationProcedureSettingService;
import com.template.services.ApplicationProcedureTemporaryService;
import com.template.services.PermissionSettingService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
*
* 前端控制器
*
*
* @author ceshi
* @since 2024-03-05
*/
@RestController
public class ApplicationProcedureTemporaryController implements ApplicationProcedureTemporaryControllerAPI {
@Autowired
ApplicationProcedureTemporaryService applicationProcedureTemporaryService;
@Autowired
ApplicationProcedureSettingService applicationProcedureSettingService;
@Autowired
PermissionSettingService permissionSettingService;
@Autowired
AdminMenuService adminMenuService;
@Override
public CommonResult save(ApplicationProcedureTemporaryDto applicationProcedureDto) {
if (ObjectUtils.isEmpty(applicationProcedureDto)) {
return CommonResult.fail();
}
Integer usersId = applicationProcedureDto.getUsersId();
// 一个人在一个时间段内只能有一个待审批
LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>();
wrapper.eq(ApplicationProcedureTemporary::getStatus,1);
applicationProcedureTemporaryService.list(wrapper);
ApplicationProcedureTemporary applicationProcedure = new ApplicationProcedureTemporary();
BeanUtils.copyProperties(applicationProcedureDto, applicationProcedure);
// 待审核
applicationProcedure.setStatus("1");
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 提交时间
applicationProcedure.setSubmissionTime(LocalDateTime.now().format(dateTimeFormatter1));
boolean save = applicationProcedureTemporaryService.save(applicationProcedure);
if (save) {
return CommonResult.ok();
}
return CommonResult.fail();
}
@Override
public CommonResult list( int adminMenuId, String submissionStartTime, String submissionEndTime, String examineAndApproveStartTime, String examineAndApproveEndTime, String type, String department, String key, int page, int size) {
PermissionSetting permissionSetting = permissionSettingService.getById(adminMenuId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
String processManagement = permissionSetting.getProcessManagement();
if (!"0".equals(processManagement) && !processManagement.contains("5")) {
return CommonResult.fail("此账号暂无该权限");
}
if (ObjectUtils.isEmpty(page) || page <= 0) {
page = 1;
}
if (ObjectUtils.isEmpty(size) || size <= 0) {
size = 10;
}
List list = applicationProcedureSettingService.list(new LambdaQueryWrapper<>());
ApplicationProcedureSetting applicationProcedureSetting = list.get(0);
String approverType = applicationProcedureSetting.getApproverType();
Integer adminMenuId1 = permissionSetting.getAdminMenuId();
AdminMenu byId = adminMenuService.getById(adminMenuId1);
Integer parentId = byId.getParentId();
PageUtils pageList=null;
//审批一次,角色等级不为0
if ("1".equals(approverType)) {
if (parentId!=0) {
return CommonResult.ok("无审批权限");
}else {
pageList=applicationProcedureTemporaryService.pageList(submissionStartTime,submissionEndTime,examineAndApproveStartTime,examineAndApproveEndTime,type,department,key,page,size);
return CommonResult.ok(pageList);
}
}
if (parentId==0) {
// 全部则是没有待审批的全部
if (ObjectUtils.isEmpty(type)) {
type="0,2,3";
}
pageList=applicationProcedureTemporaryService.parentPageList(submissionStartTime,submissionEndTime,examineAndApproveStartTime,examineAndApproveEndTime,type,department,key,page,size);
return CommonResult.ok(pageList);
}
pageList=applicationProcedureTemporaryService.pageList(submissionStartTime,submissionEndTime,examineAndApproveStartTime,examineAndApproveEndTime,type,department,key,page,size);
return CommonResult.ok(pageList);
}
@Override
public CommonResult update(ApprovalProcessDto approvalProcessDto) {
int adminMenuId = approvalProcessDto.getAdminMenuId();
PermissionSetting permissionSetting = permissionSettingService.getById(adminMenuId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("非法进入");
}
// 判断该用户是否拥有权限
// 判断该用户是否拥有权限
String processManagement = permissionSetting.getProcessManagement();
if (!"0".equals(processManagement) && !processManagement.contains("3")&& !processManagement.contains("4")) {
return CommonResult.fail("此账号暂无该权限");
}
int id = approvalProcessDto.getId();
String status = approvalProcessDto.getStatus();
String adminId = approvalProcessDto.getAdminId();
String remark = approvalProcessDto.getRemark();
ApplicationProcedureTemporary applicationProcedure = applicationProcedureTemporaryService.getById(id);
if (ObjectUtils.isEmpty(applicationProcedure)) {
return CommonResult.fail("参数异常");
}
String applicationProcedureStatus = applicationProcedure.getStatus();
if ("0".equals(applicationProcedureStatus)||"3".equals(applicationProcedureStatus)) {
return CommonResult.fail("已审批,无需再次审批");
}
// 判断是什么审核模式
List list = applicationProcedureSettingService.list(new LambdaQueryWrapper<>());
ApplicationProcedureSetting applicationProcedureSetting = list.get(0);
String approverType = applicationProcedureSetting.getApproverType();
// 审核人
Integer adminMenuId1 = permissionSetting.getAdminMenuId();
AdminMenu byId = adminMenuService.getById(adminMenuId1);
// 角色等级
Integer parentId = byId.getParentId();
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 当只需要审核一次
if ("1".equals(approverType)) {
if ("1".equals(status)) {
status="3";
}
applicationProcedure.setStatus(status);
applicationProcedure.setApproverId(adminId);
// 审批时间
applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
// 审批备注
applicationProcedure.setExamineAndApproveRemark(remark);
applicationProcedureTemporaryService.updateById(applicationProcedure);
return CommonResult.ok();
}
// 当为最高审批人
if (parentId==0) {
// 先判断是否已经被审批了
if (!"2".equals(applicationProcedureStatus)) {
// 当不是处理中时则无法审批
return CommonResult.fail("当前无法审批");
}
if ("1".equals(status)) {
status="3";
}
applicationProcedure.setStatus(status);
applicationProcedure.setApproverId(adminId);
// 审批时间
applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
// 审批备注
applicationProcedure.setExamineAndApproveRemark(remark);
applicationProcedureTemporaryService.updateById(applicationProcedure);
return CommonResult.ok();
}
if ("1".equals(status)) {
status="2";
}
applicationProcedure.setStatus(status);
applicationProcedure.setSecondaryApproverId(adminId);
// 审批时间
applicationProcedure.setSecondaryExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
// 审批备注
applicationProcedure.setSecondaryExamineAndApproveRemark(remark);
applicationProcedureTemporaryService.updateById(applicationProcedure);
return CommonResult.ok();
}
@Override
public CommonResult appletUpdate(AppletApprovalProcessDto appletApprovalProcessDto) {
int id = appletApprovalProcessDto.getId();
String status = appletApprovalProcessDto.getStatus();
String adminMenuId = appletApprovalProcessDto.getAdminMenuId();
String remark = appletApprovalProcessDto.getRemark();
String adminId = appletApprovalProcessDto.getAdminId();
// 判断对应的管理端是否有权限
if (ObjectUtils.isEmpty(adminMenuId)&&ObjectUtils.isEmpty(adminId)) {
return CommonResult.fail("无审批权限");
}
PermissionSetting permissionSetting = permissionSettingService.getMenuPermissionSetting(adminMenuId);
if (ObjectUtils.isEmpty(permissionSetting)) {
return CommonResult.fail("无审批权限");
}
String processManagement = permissionSetting.getProcessManagement();
if (!"0".equals(processManagement) && !processManagement.contains("3")&& !processManagement.contains("4")) {
return CommonResult.fail("此账号暂无该权限");
}
ApplicationProcedureTemporary applicationProcedure = applicationProcedureTemporaryService.getById(id);
if (ObjectUtils.isEmpty(applicationProcedure)) {
return CommonResult.fail("参数异常");
}
String applicationProcedureStatus = applicationProcedure.getStatus();
if ("0".equals(applicationProcedureStatus)||"3".equals(applicationProcedureStatus)) {
return CommonResult.fail("已审批,无需再次审批");
}
// 判断是什么审核模式
List list = applicationProcedureSettingService.list(new LambdaQueryWrapper<>());
ApplicationProcedureSetting applicationProcedureSetting = list.get(0);
String approverType = applicationProcedureSetting.getApproverType();
AdminMenu byId = adminMenuService.getById(adminMenuId);
// 角色等级
Integer parentId = byId.getParentId();
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 当只需要审核一次
if ("1".equals(approverType)) {
if ("1".equals(status)) {
status="3";
}
applicationProcedure.setStatus(status);
applicationProcedure.setApproverId(adminId);
// 审批时间
applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
// 审批备注
applicationProcedure.setExamineAndApproveRemark(remark);
applicationProcedureTemporaryService.updateById(applicationProcedure);
return CommonResult.ok();
}
// 当为最高审批人
if (parentId==0) {
// 先判断是否已经被审批了
if (!"2".equals(applicationProcedureStatus)) {
// 当不是处理中时则无法审批
return CommonResult.fail("当前无法审批");
}
if ("1".equals(status)) {
status="3";
}
applicationProcedure.setStatus(status);
applicationProcedure.setApproverId(adminId);
// 审批时间
applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
// 审批备注
applicationProcedure.setExamineAndApproveRemark(remark);
applicationProcedureTemporaryService.updateById(applicationProcedure);
return CommonResult.ok();
}
if ("1".equals(status)) {
status="2";
}
applicationProcedure.setStatus(status);
applicationProcedure.setSecondaryApproverId(adminId);
// 审批时间
applicationProcedure.setSecondaryExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
// 审批备注
applicationProcedure.setSecondaryExamineAndApproveRemark(remark);
applicationProcedureTemporaryService.updateById(applicationProcedure);
return CommonResult.ok();
}
@Override
public CommonResult appletList(int adminMenuId,String startTime, String endTime, String status,int page, int size) {
if (ObjectUtils.isEmpty(page) || page <= 0) {
page = 1;
}
if (ObjectUtils.isEmpty(size) || size <= 0) {
size = 10;
}
List list = applicationProcedureSettingService.list(new LambdaQueryWrapper<>());
ApplicationProcedureSetting applicationProcedureSetting = list.get(0);
String approverType = applicationProcedureSetting.getApproverType();
AdminMenu byId = adminMenuService.getById(adminMenuId);
Integer parentId = byId.getParentId();
IPage pageList=null;
//审批一次,角色等级不为0
if ("1".equals(approverType)) {
if (parentId!=0) {
return CommonResult.ok("无审批权限");
}else {
LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>();
wrapper.eq(ObjectUtils.isNotEmpty(status),ApplicationProcedureTemporary::getStatus,status)
.between(ObjectUtils.isNotEmpty(startTime)&&ObjectUtils.isNotEmpty(endTime),ApplicationProcedureTemporary::getSubmissionTime,startTime,endTime)
.orderByDesc(ApplicationProcedureTemporary::getSubmissionTime);
pageList=applicationProcedureTemporaryService.page(new Page<>(page,size),wrapper);
return CommonResult.ok(pageList);
}
}
if (parentId==0) {
LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>();
// 全部则是没有待审批的全部
if (ObjectUtils.isEmpty(status)) {
ArrayList strings = new ArrayList<>();
strings.add("0");
strings.add("2");
strings.add("3");
wrapper.in(ApplicationProcedureTemporary::getStatus,strings);
}else {
wrapper.eq(ApplicationProcedureTemporary::getStatus,status);
}
wrapper.between(ObjectUtils.isNotEmpty(startTime)&&ObjectUtils.isNotEmpty(endTime),ApplicationProcedureTemporary::getSubmissionTime,startTime,endTime)
.orderByDesc(ApplicationProcedureTemporary::getSubmissionTime);
pageList=applicationProcedureTemporaryService.page(new Page<>(page,size),wrapper);
return CommonResult.ok(pageList);
}
LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>();
wrapper.eq(ObjectUtils.isNotEmpty(status),ApplicationProcedureTemporary::getStatus,status)
.between(ObjectUtils.isNotEmpty(startTime)&&ObjectUtils.isNotEmpty(endTime),ApplicationProcedureTemporary::getSubmissionTime,startTime,endTime)
.orderByDesc(ApplicationProcedureTemporary::getSubmissionTime);
pageList=applicationProcedureTemporaryService.page(new Page<>(page,size),wrapper);
return CommonResult.ok(pageList);
}
}