package com.template.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.template.api.ApplicationProcedureTemporaryControllerAPI; import com.template.common.utils.TimeExchange; import com.template.model.dto.AppletApprovalProcessDto; import com.template.model.dto.ApplicationProcedureTemporaryDto; import com.template.model.dto.ApprovalProcessDto; import com.template.model.pojo.*; import com.template.model.result.CommonResult; import com.template.model.result.PageUtils; import com.template.model.vo.ApplicationProcedureTemporaryVo; import com.template.services.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RestController; import java.text.ParseException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @author ceshi * @since 2024-03-05 */ @RestController public class ApplicationProcedureTemporaryController implements ApplicationProcedureTemporaryControllerAPI { @Autowired ApplicationProcedureTemporaryService applicationProcedureTemporaryService; @Autowired ApplicationProcedureSettingService applicationProcedureSettingService; @Autowired PermissionSettingService permissionSettingService; @Autowired AdminMenuService adminMenuService; @Autowired AdminService adminService; @Autowired UsersService usersService; @Autowired OrganizationService organizationService; @Override public CommonResult save(ApplicationProcedureTemporaryDto applicationProcedureDto) { if (ObjectUtils.isEmpty(applicationProcedureDto)) { return CommonResult.fail(); } //一周可定天数可优化为前台配置 int countConfig=2; Integer usersId = applicationProcedureDto.getUsersId(); // 一个人只能有一个待审批的 List list = applicationProcedureTemporaryService.list(new QueryWrapper() .eq("users_id", usersId) .ne("status", "0")); String startDto=applicationProcedureDto.getStartTime(); String endDto=applicationProcedureDto.getEndTime(); int dtoCount=this.checkWeek(startDto,endDto); if(dtoCount==-1||dtoCount>countConfig){ return CommonResult.fail("申请日期不能跨周,一周不能超过"+countConfig+"天,请重新申请"); } //筛选同一周数据 if (!list.isEmpty()){ String[] arr =TimeExchange.getCurrentWeekTimeFrame(startDto); list=list.stream().filter(a -> a.getStartTime().compareTo(arr[0])>=0&&a.getEndTime().compareTo(arr[1])<=0) .collect(Collectors.toList()); } if (!list.isEmpty()) { int aa =0; for (ApplicationProcedureTemporary apt : list) { if (apt.getEndTime().equals(endDto) || apt.getStartTime().equals(startDto)) { return CommonResult.fail("相同日期已有待审批申请,请勿重复申请"); } aa=this.checkWeek(apt.getStartTime(),apt.getEndTime())+aa; if(countConfig-dtoCount<=aa){ return CommonResult.fail("总申请天数超过本周限额"); } try { boolean a = TimeExchange.CompareDate(apt.getEndTime(), startDto, "yyyy-MM-dd"); boolean b = TimeExchange.CompareDate(endDto, apt.getStartTime(), "yyyy-MM-dd"); if (!(a || b)) { return CommonResult.fail("日期范围内已有待审批申请"); } } catch (ParseException e) { throw new RuntimeException(e); } } } List admins=adminService.list(new QueryWrapper<>()); String orgId=usersService.getById(usersId).getOrganId(); if(ObjectUtils.isEmpty(organizationService.getById(orgId))){ return CommonResult.fail("身份异常,申请提交失败"); } boolean flag =true; for(Admin admin:admins){ if (StringUtils.hasText(admin.getCheckOrg())&&admin.getCheckOrg().indexOf(orgId) > 0) { flag =false; break; } } if(flag){ return CommonResult.fail("您暂无审批人,请联系管理员添加"); } 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 OrgIds, 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; } PageUtils pageList = new PageUtils(new ArrayList(),0,size,page); if(!StringUtils.hasText(OrgIds)){ return CommonResult.ok(pageList); } String[] arr=OrgIds.replaceAll(" ","").split(","); List orgList = new ArrayList<>(Arrays.asList(arr)); 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(); //审批一次,角色等级不为0 if ("1".equals(approverType)) { pageList = applicationProcedureTemporaryService.pageList(submissionStartTime, submissionEndTime, examineAndApproveStartTime, examineAndApproveEndTime, type, department, key, page, size,orgList); 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,orgList); return CommonResult.ok(pageList); } pageList = applicationProcedureTemporaryService.pageList(submissionStartTime, submissionEndTime, examineAndApproveStartTime, examineAndApproveEndTime, type, department, key, page, size,orgList); 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 (parentId == 0) { 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(); } return CommonResult.fail("权限不足"); } // 当为最高审批人 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); boolean update = applicationProcedureTemporaryService.updateById(applicationProcedure); System.out.println("update = " + update); 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 (parentId == 0) { 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(); } return CommonResult.fail("权限不足"); } // 当为最高审批人 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(); PageUtils pageList = null; //审批一次,角色等级不为0 if ("1".equals(approverType)) { if (parentId != 0) { return CommonResult.fail("暂无查看权限"); } else { pageList = applicationProcedureTemporaryService.pageAppletList(startTime, endTime, status, page, size); return CommonResult.ok(pageList); } } if (parentId == 0) { // 全部则是没有待审批的全部 if (ObjectUtils.isEmpty(status)) { status = "0,2,3"; } pageList = applicationProcedureTemporaryService.parentAppletPageList(startTime, endTime, status, page, size); return CommonResult.ok(pageList); } pageList = applicationProcedureTemporaryService.pageAppletList(startTime, endTime, status, page, size); return CommonResult.ok(pageList); } //region 获取是否跨周 且不超过两天 public static int checkWeek(String strDate1,String strDate2) { Calendar calendar = Calendar.getInstance(); calendar.setTime(TimeExchange.StringToDate(strDate1,"yyyy-MM-dd")); int year = calendar.get(Calendar.YEAR); int week = calendar.get(Calendar.WEEK_OF_YEAR); int day = calendar.get(Calendar.DAY_OF_WEEK)-1; if (day==0){ day=7; week=week-1; } Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(TimeExchange.StringToDate(strDate2,"yyyy-MM-dd")); int year1 = calendar1.get(Calendar.YEAR); int week1 = calendar1.get(Calendar.WEEK_OF_YEAR); int day1 = calendar1.get(Calendar.DAY_OF_WEEK)-1; if (day1==0){ day=7; week1=week1-1; } if(year==year1&&week==week1){ return day1-day; }else{ return -1; } } }