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.component.WeiXiaoComponent; 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 io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; 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 @Slf4j //加密 //@DESRespondSecret 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; @Autowired WeiXiaoComponent weiXiaoComponent; @Override public CommonResult save(ApplicationProcedureTemporaryDto applicationProcedureDto) { log.info("入参"+applicationProcedureDto.toString()); 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(); //周日-周1为上周 int dtoCount=checkWeek(startDto,endDto); if(startDto.compareTo(endDto)>=0){ log.info("开始时间不能大于结束时间"); return CommonResult.fail("开始时间不能大于结束时间"); } if(dtoCount==-1||dtoCount>countConfig){ log.info("申请日期不能跨周,一周不能超过"+countConfig+"天,请重新申请"); return CommonResult.fail("申请日期不能跨周,一周不能超过"+countConfig+"天,请重新申请"); } //筛选同一周数据 if (!list.isEmpty()){ String[] arr =TimeExchange.getCurrentWeekTimeFrame(startDto); //开始时间为本周 list=list.stream().filter(a -> a.getStartTime().substring(0,10).compareTo(arr[0])>=0&&a.getStartTime().substring(0,10).compareTo(arr[1])<=0) .collect(Collectors.toList()); } if (!list.isEmpty()) { int aa =0; for (ApplicationProcedureTemporary apt : list) { if (apt.getEndTime().substring(0,10).equals(endDto.substring(0,10)) || apt.getStartTime().substring(0,10).equals(startDto.substring(0,10))) { log.info("相同日期已有待审批申请,请勿重复申请"); return CommonResult.fail("相同日期已有待审批申请,请勿重复申请"); } aa=checkWeek(apt.getStartTime(),apt.getEndTime())+aa; //已申请+本次大于配置数量则不能申请 if(countConfig admins=adminService.list(new QueryWrapper<>()); Users users=usersService.getById(usersId); String orgId=users.getOrganId(); if(ObjectUtils.isEmpty(organizationService.getById(orgId))){ log.info("身份异常,申请提交失败"); return CommonResult.fail("身份异常,申请提交失败"); } ArrayList strings = new ArrayList<>(); strings=this.getCardNumbers(strings,admins,orgId); if(strings.isEmpty()){ log.info("您暂无审批人,请联系管理员添加"); 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) { String content ="姓名:"+users.getUserName()+";开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。原因:"+applicationProcedure.getReasonApplication()+"。"; weiXiaoComponent.sendNotice(strings,"有一条新增审核", "审批通知",content,null); 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"); Users users=usersService.getById(applicationProcedure.getUsersId()); // 当只需要审核一次 if ("1".equals(approverType)) { // 只有最高级才能审批 // 当为最高审批人 if (parentId == 0) { String content ="您的申请未能通过审核,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。拒绝原因:"+approvalProcessDto.getRemark()+"。"; String digest ="您的申请未能通过审核"; if ("1".equals(status)) { status = "3"; content ="您的申请审核已通过,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。请进入小程序点击预定。"; digest ="您的申请审核已通过"; } applicationProcedure.setStatus(status); applicationProcedure.setApproverId(adminId); // 审批时间 applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1)); // 审批备注 applicationProcedure.setExamineAndApproveRemark(remark); applicationProcedureTemporaryService.updateById(applicationProcedure); ArrayList strings = new ArrayList<>(); strings.add(users.getCardNumber()); weiXiaoComponent.sendNotice(strings,digest, "审批通知",content,null); return CommonResult.ok(); } return CommonResult.fail("权限不足"); } // 当为最高审批人 if (parentId == 0) { // 先判断是否已经被审批了 if (!"2".equals(applicationProcedureStatus)) { // 当不是处理中时则无法审批 return CommonResult.fail("当前无法审批"); } String content ="您的申请未能通过审核,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。拒绝原因:"+approvalProcessDto.getRemark()+"。"; String digest ="您的申请未能通过审核"; if ("1".equals(status)) { status = "3"; content ="您的申请审核已通过,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。请进入小程序点击预定。"; digest ="您的申请审核已通过"; } applicationProcedure.setStatus(status); applicationProcedure.setApproverId(adminId); // 审批时间 applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1)); // 审批备注 applicationProcedure.setExamineAndApproveRemark(remark); applicationProcedureTemporaryService.updateById(applicationProcedure); ArrayList strings = new ArrayList<>(); strings.add(users.getCardNumber()); weiXiaoComponent.sendNotice(strings,digest, "审批通知",content,null); return CommonResult.ok(); } String content1 ="您的申请未能通过初次审核,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。拒绝原因:"+approvalProcessDto.getRemark()+"。"; String digest ="未能通过初次审核"; if ("1".equals(status)) { status = "2"; content1 ="您的申请初次审核已通过,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。目前尚待最终审批流程,请您耐心等候。"; digest ="初次审核已通过"; } applicationProcedure.setStatus(status); applicationProcedure.setSecondaryApproverId(adminId); // 审批时间 applicationProcedure.setSecondaryExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1)); // 审批备注 applicationProcedure.setSecondaryExamineAndApproveRemark(remark); ArrayList strings = new ArrayList<>(); List admins=adminService.list(new QueryWrapper().eq("admin_menu_id",parentId)); for(Admin admin:admins){ if (StringUtils.hasText(admin.getCheckOrg())&&admin.getCheckOrg().indexOf(users.getOrganId()) > 0) { Users adminUser=usersService.getById(admin.getUsersId()); strings.add(adminUser.getCardNumber()); } } if(strings.isEmpty()){ return CommonResult.fail("该流程没有上级审核人员,请联系管理员添加该部门上级审核角色"); } boolean update = applicationProcedureTemporaryService.updateById(applicationProcedure); String content ="姓名:"+users.getUserName()+";开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。原因:"+applicationProcedure.getReasonApplication()+"。次级审核备注:"+remark; //发给下级审批人员 if(!"0".equals(status)){ weiXiaoComponent.sendNotice(strings,"有一条新增审核", "审批通知",content,null); } //发给申请人 strings.add(users.getCardNumber()); weiXiaoComponent.sendNotice(strings,digest, "审批通知",content1,null); 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"); Users users=usersService.getById(applicationProcedure.getUsersId()); // 当只需要审核一次 if ("1".equals(approverType)) { // 只有最高级才能审批 // 当为最高审批人 if (parentId == 0) { String content ="您的申请未能通过审核,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。拒绝原因:"+appletApprovalProcessDto.getRemark()+"。"; String digest ="您的申请未能通过审核"; if ("1".equals(status)) { status = "3"; content ="您的申请审核已通过,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。请进入小程序点击预定。"; digest ="您的申请审核已通过"; } applicationProcedure.setStatus(status); applicationProcedure.setApproverId(adminId); // 审批时间 applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1)); // 审批备注 applicationProcedure.setExamineAndApproveRemark(remark); applicationProcedureTemporaryService.updateById(applicationProcedure); ArrayList strings = new ArrayList<>(); strings.add(users.getCardNumber()); weiXiaoComponent.sendNotice(strings,digest, "审批通知",content,null); return CommonResult.ok(); } return CommonResult.fail("权限不足"); } // 当为最高审批人 if (parentId == 0) { // 先判断是否已经被审批了 if (!"2".equals(applicationProcedureStatus)) { // 当不是处理中时则无法审批 return CommonResult.fail("当前无法审批"); } String content ="申请未能通过审核,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。拒绝原因:"+appletApprovalProcessDto.getRemark()+"。"; String digest ="您的申请未能通过审核"; if ("1".equals(status)) { status = "3"; content ="您的申请审核已通过,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。请进入小程序点击预定。"; digest ="您的申请审核已通过"; } applicationProcedure.setStatus(status); applicationProcedure.setApproverId(adminId); // 审批时间 applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1)); // 审批备注 applicationProcedure.setExamineAndApproveRemark(remark); applicationProcedureTemporaryService.updateById(applicationProcedure); ArrayList strings = new ArrayList<>(); strings.add(users.getCardNumber()); weiXiaoComponent.sendNotice(strings,digest, "审批通知",content,null); return CommonResult.ok(); } String content1 ="申请未能通过审核,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。拒绝原因:"+appletApprovalProcessDto.getRemark()+"。"; String digest ="您的申请未能通过审核"; if ("1".equals(status)) { status = "2"; content1 ="已顺利通过初审环节,开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。目前尚待最终审批流程,请您耐心等候。"; digest ="已顺利通过初审环节"; } applicationProcedure.setStatus(status); applicationProcedure.setSecondaryApproverId(adminId); // 审批时间 applicationProcedure.setSecondaryExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1)); // 审批备注 applicationProcedure.setSecondaryExamineAndApproveRemark(remark); ArrayList strings = new ArrayList<>(); List admins=adminService.list(new QueryWrapper().eq("admin_menu_id",parentId)); for(Admin admin:admins){ if (StringUtils.hasText(admin.getCheckOrg())&&admin.getCheckOrg().indexOf(users.getOrganId()) > 0) { Users adminUser=usersService.getById(admin.getUsersId()); strings.add(adminUser.getCardNumber()); } } if(strings.isEmpty()){ return CommonResult.fail("该流程没有上级审核人员,请联系管理员添加该部门上级审核角色"); } applicationProcedureTemporaryService.updateById(applicationProcedure); String content ="姓名:"+users.getUserName()+";开始时间:"+applicationProcedure.getStartTime()+"。结束时间:"+applicationProcedure.getEndTime() +"。原因:"+applicationProcedure.getReasonApplication()+"。次级审核备注:"+remark; //发给下级审批人员 if(!"0".equals(status)){ weiXiaoComponent.sendNotice(strings,"有一条新增审核", "审批通知",content,null); } //发给申请人 strings.add(users.getCardNumber()); weiXiaoComponent.sendNotice(strings,digest, "审批通知",content1,null); return CommonResult.ok(); } @Override public CommonResult appletList(int adminMenuId, String startTime, String endTime, String status,String OrgIds, int page, int size) { 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(); AdminMenu byId = adminMenuService.getById(adminMenuId); Integer parentId = byId.getParentId(); //审批一次,角色等级不为0 if ("1".equals(approverType)) { if (parentId != 0) { return CommonResult.fail("暂无查看权限"); } else { pageList = applicationProcedureTemporaryService.pageAppletList(startTime, endTime, status, page, size,orgList); return CommonResult.ok(pageList); } } if (parentId == 0) { // 全部则是没有待审批的全部 if (ObjectUtils.isEmpty(status)) { status = "0,2,3"; } pageList = applicationProcedureTemporaryService.parentAppletPageList(startTime, endTime, status, page, size,orgList); return CommonResult.ok(pageList); } pageList = applicationProcedureTemporaryService.pageAppletList(startTime, endTime, status, page, size,orgList); 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 week = calendar.get(Calendar.WEEK_OF_YEAR); int month = calendar.get(Calendar.MONTH); if(week==1&&month==11){ week=53; } 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 week1 = calendar1.get(Calendar.WEEK_OF_YEAR); int month1 = calendar1.get(Calendar.MONTH); if(week1==1&&month1==11){ week1=53; } int day1 = calendar1.get(Calendar.DAY_OF_WEEK)-1; if (day1==0){ day1=7; week1=week1-1; } if(week==week1||week-week1==52){ return day1-day; }else if (week+1==week1&&day1==1){ return day1+7-day; }else{ return -1; } } // @GetMapping("/test") // @ApiOperation(value = "小程序-临时人员流程管理展示", notes = "小程序-临时人员流程管理展示", httpMethod = "GET") // CommonResult test(){ // ArrayList strings = new ArrayList<>(); // strings.add("20240702"); // weiXiaoComponent.sendNotice(strings,"公寓办理入住成功", "办理入住成功","content",null); // return null; // }; //获取下一级审批人员微校卡号集合 private ArrayList getCardNumbers(ArrayList strings,List admins,String orgId){ List list = applicationProcedureSettingService.list(new LambdaQueryWrapper<>()); ApplicationProcedureSetting applicationProcedureSetting = list.get(0); String approverType = applicationProcedureSetting.getApproverType(); for(Admin admin:admins){ if (StringUtils.hasText(admin.getCheckOrg())&&admin.getCheckOrg().indexOf(orgId) >= 0) { if ("1".equals(approverType)) { Users users=usersService.getById(admin.getUsersId()); strings.add(users.getCardNumber()); }else{ AdminMenu byId = adminMenuService.getById(admin.getAdminMenuId()); if(byId.getParentId()!=0){ Users users=usersService.getById(admin.getUsersId()); strings.add(users.getCardNumber()); } } } } return strings; } }