ApplicationProcedureTemporaryController.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. package com.template.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  5. import com.template.api.ApplicationProcedureTemporaryControllerAPI;
  6. import com.template.common.utils.TimeExchange;
  7. import com.template.model.dto.AppletApprovalProcessDto;
  8. import com.template.model.dto.ApplicationProcedureTemporaryDto;
  9. import com.template.model.dto.ApprovalProcessDto;
  10. import com.template.model.pojo.*;
  11. import com.template.model.result.CommonResult;
  12. import com.template.model.result.PageUtils;
  13. import com.template.model.vo.ApplicationProcedureTemporaryVo;
  14. import com.template.services.*;
  15. import org.springframework.beans.BeanUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.util.StringUtils;
  18. import org.springframework.web.bind.annotation.RestController;
  19. import java.text.ParseException;
  20. import java.time.LocalDateTime;
  21. import java.time.format.DateTimeFormatter;
  22. import java.util.ArrayList;
  23. import java.util.Arrays;
  24. import java.util.Calendar;
  25. import java.util.List;
  26. import java.util.stream.Collectors;
  27. /**
  28. * <p>
  29. * 前端控制器
  30. * </p>
  31. *
  32. * @author ceshi
  33. * @since 2024-03-05
  34. */
  35. @RestController
  36. public class ApplicationProcedureTemporaryController implements ApplicationProcedureTemporaryControllerAPI {
  37. @Autowired
  38. ApplicationProcedureTemporaryService applicationProcedureTemporaryService;
  39. @Autowired
  40. ApplicationProcedureSettingService applicationProcedureSettingService;
  41. @Autowired
  42. PermissionSettingService permissionSettingService;
  43. @Autowired
  44. AdminMenuService adminMenuService;
  45. @Autowired
  46. AdminService adminService;
  47. @Autowired
  48. UsersService usersService;
  49. @Autowired
  50. OrganizationService organizationService;
  51. @Override
  52. public CommonResult save(ApplicationProcedureTemporaryDto applicationProcedureDto) {
  53. if (ObjectUtils.isEmpty(applicationProcedureDto)) {
  54. return CommonResult.fail();
  55. }
  56. //一周可定天数可优化为前台配置
  57. int countConfig=2;
  58. Integer usersId = applicationProcedureDto.getUsersId();
  59. // 一个人只能有一个待审批的
  60. List<ApplicationProcedureTemporary> list = applicationProcedureTemporaryService.list(new QueryWrapper<ApplicationProcedureTemporary>()
  61. .eq("users_id", usersId)
  62. .ne("status", "0"));
  63. String startDto=applicationProcedureDto.getStartTime();
  64. String endDto=applicationProcedureDto.getEndTime();
  65. int dtoCount=this.checkWeek(startDto,endDto);
  66. if(dtoCount==-1||dtoCount>countConfig){
  67. return CommonResult.fail("申请日期不能跨周,一周不能超过"+countConfig+"天,请重新申请");
  68. }
  69. //筛选同一周数据
  70. if (!list.isEmpty()){
  71. String[] arr =TimeExchange.getCurrentWeekTimeFrame(startDto);
  72. list=list.stream().filter(a -> a.getStartTime().compareTo(arr[0])>=0&&a.getEndTime().compareTo(arr[1])<=0)
  73. .collect(Collectors.toList());
  74. }
  75. if (!list.isEmpty()) {
  76. int aa =0;
  77. for (ApplicationProcedureTemporary apt : list) {
  78. if (apt.getEndTime().equals(endDto)
  79. || apt.getStartTime().equals(startDto)) {
  80. return CommonResult.fail("相同日期已有待审批申请,请勿重复申请");
  81. }
  82. aa=this.checkWeek(apt.getStartTime(),apt.getEndTime())+aa;
  83. if(countConfig-dtoCount<=aa){
  84. return CommonResult.fail("总申请天数超过本周限额");
  85. }
  86. try {
  87. boolean a = TimeExchange.CompareDate(apt.getEndTime(), startDto, "yyyy-MM-dd");
  88. boolean b = TimeExchange.CompareDate(endDto, apt.getStartTime(), "yyyy-MM-dd");
  89. if (!(a || b)) {
  90. return CommonResult.fail("日期范围内已有待审批申请");
  91. }
  92. } catch (ParseException e) {
  93. throw new RuntimeException(e);
  94. }
  95. }
  96. }
  97. List<Admin> admins=adminService.list(new QueryWrapper<>());
  98. String orgId=usersService.getById(usersId).getOrganId();
  99. if(ObjectUtils.isEmpty(organizationService.getById(orgId))){
  100. return CommonResult.fail("身份异常,申请提交失败");
  101. }
  102. boolean flag =true;
  103. for(Admin admin:admins){
  104. if (StringUtils.hasText(admin.getCheckOrg())&&admin.getCheckOrg().indexOf(orgId) > 0) {
  105. flag =false;
  106. break;
  107. }
  108. }
  109. if(flag){
  110. return CommonResult.fail("您暂无审批人,请联系管理员添加");
  111. }
  112. ApplicationProcedureTemporary applicationProcedure = new ApplicationProcedureTemporary();
  113. BeanUtils.copyProperties(applicationProcedureDto, applicationProcedure);
  114. // 待审核
  115. applicationProcedure.setStatus("1");
  116. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  117. // 提交时间
  118. applicationProcedure.setSubmissionTime(LocalDateTime.now().format(dateTimeFormatter1));
  119. boolean save = applicationProcedureTemporaryService.save(applicationProcedure);
  120. if (save) {
  121. return CommonResult.ok();
  122. }
  123. return CommonResult.fail();
  124. }
  125. @Override
  126. 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) {
  127. PermissionSetting permissionSetting = permissionSettingService.getById(adminMenuId);
  128. if (ObjectUtils.isEmpty(permissionSetting)) {
  129. return CommonResult.fail("非法进入");
  130. }
  131. // 判断该用户是否拥有权限
  132. String processManagement = permissionSetting.getProcessManagement();
  133. if (!"0".equals(processManagement) && !processManagement.contains("5")) {
  134. return CommonResult.fail("此账号暂无该权限");
  135. }
  136. if (ObjectUtils.isEmpty(page) || page <= 0) {
  137. page = 1;
  138. }
  139. if (ObjectUtils.isEmpty(size) || size <= 0) {
  140. size = 10;
  141. }
  142. PageUtils<ApplicationProcedureTemporaryVo> pageList = new PageUtils(new ArrayList(),0,size,page);
  143. if(!StringUtils.hasText(OrgIds)){
  144. return CommonResult.ok(pageList);
  145. }
  146. String[] arr=OrgIds.replaceAll(" ","").split(",");
  147. List<String> orgList = new ArrayList<>(Arrays.asList(arr));
  148. List<ApplicationProcedureSetting> list = applicationProcedureSettingService.list(new LambdaQueryWrapper<>());
  149. ApplicationProcedureSetting applicationProcedureSetting = list.get(0);
  150. String approverType = applicationProcedureSetting.getApproverType();
  151. Integer adminMenuId1 = permissionSetting.getAdminMenuId();
  152. AdminMenu byId = adminMenuService.getById(adminMenuId1);
  153. Integer parentId = byId.getParentId();
  154. //审批一次,角色等级不为0
  155. if ("1".equals(approverType)) {
  156. pageList = applicationProcedureTemporaryService.pageList(submissionStartTime, submissionEndTime, examineAndApproveStartTime, examineAndApproveEndTime, type, department, key, page, size,orgList);
  157. return CommonResult.ok(pageList);
  158. }
  159. if (parentId == 0) {
  160. // 全部则是没有待审批的全部
  161. if (ObjectUtils.isEmpty(type)) {
  162. type = "0,2,3";
  163. }
  164. pageList = applicationProcedureTemporaryService.parentPageList(submissionStartTime, submissionEndTime, examineAndApproveStartTime, examineAndApproveEndTime, type, department, key, page, size,orgList);
  165. return CommonResult.ok(pageList);
  166. }
  167. pageList = applicationProcedureTemporaryService.pageList(submissionStartTime, submissionEndTime, examineAndApproveStartTime, examineAndApproveEndTime, type, department, key, page, size,orgList);
  168. return CommonResult.ok(pageList);
  169. }
  170. @Override
  171. public CommonResult update(ApprovalProcessDto approvalProcessDto) {
  172. int adminMenuId = approvalProcessDto.getAdminMenuId();
  173. PermissionSetting permissionSetting = permissionSettingService.getById(adminMenuId);
  174. if (ObjectUtils.isEmpty(permissionSetting)) {
  175. return CommonResult.fail("非法进入");
  176. }
  177. // 判断该用户是否拥有权限
  178. // 判断该用户是否拥有权限
  179. String processManagement = permissionSetting.getProcessManagement();
  180. if (!"0".equals(processManagement) && !processManagement.contains("3") && !processManagement.contains("4")) {
  181. return CommonResult.fail("此账号暂无该权限");
  182. }
  183. int id = approvalProcessDto.getId();
  184. String status = approvalProcessDto.getStatus();
  185. String adminId = approvalProcessDto.getAdminId();
  186. String remark = approvalProcessDto.getRemark();
  187. ApplicationProcedureTemporary applicationProcedure = applicationProcedureTemporaryService.getById(id);
  188. if (ObjectUtils.isEmpty(applicationProcedure)) {
  189. return CommonResult.fail("参数异常");
  190. }
  191. String applicationProcedureStatus = applicationProcedure.getStatus();
  192. if ("0".equals(applicationProcedureStatus) || "3".equals(applicationProcedureStatus)) {
  193. return CommonResult.fail("已审批,无需再次审批");
  194. }
  195. // 判断是什么审核模式
  196. List<ApplicationProcedureSetting> list = applicationProcedureSettingService.list(new LambdaQueryWrapper<>());
  197. ApplicationProcedureSetting applicationProcedureSetting = list.get(0);
  198. String approverType = applicationProcedureSetting.getApproverType();
  199. // 审核人
  200. Integer adminMenuId1 = permissionSetting.getAdminMenuId();
  201. AdminMenu byId = adminMenuService.getById(adminMenuId1);
  202. // 角色等级
  203. Integer parentId = byId.getParentId();
  204. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  205. // 当只需要审核一次
  206. if ("1".equals(approverType)) {
  207. // 只有最高级才能审批
  208. // 当为最高审批人
  209. if (parentId == 0) {
  210. if ("1".equals(status)) {
  211. status = "3";
  212. }
  213. applicationProcedure.setStatus(status);
  214. applicationProcedure.setApproverId(adminId);
  215. // 审批时间
  216. applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
  217. // 审批备注
  218. applicationProcedure.setExamineAndApproveRemark(remark);
  219. applicationProcedureTemporaryService.updateById(applicationProcedure);
  220. return CommonResult.ok();
  221. }
  222. return CommonResult.fail("权限不足");
  223. }
  224. // 当为最高审批人
  225. if (parentId == 0) {
  226. // 先判断是否已经被审批了
  227. if (!"2".equals(applicationProcedureStatus)) {
  228. // 当不是处理中时则无法审批
  229. return CommonResult.fail("当前无法审批");
  230. }
  231. if ("1".equals(status)) {
  232. status = "3";
  233. }
  234. applicationProcedure.setStatus(status);
  235. applicationProcedure.setApproverId(adminId);
  236. // 审批时间
  237. applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
  238. // 审批备注
  239. applicationProcedure.setExamineAndApproveRemark(remark);
  240. applicationProcedureTemporaryService.updateById(applicationProcedure);
  241. return CommonResult.ok();
  242. }
  243. if ("1".equals(status)) {
  244. status = "2";
  245. }
  246. applicationProcedure.setStatus(status);
  247. applicationProcedure.setSecondaryApproverId(adminId);
  248. // 审批时间
  249. applicationProcedure.setSecondaryExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
  250. // 审批备注
  251. applicationProcedure.setSecondaryExamineAndApproveRemark(remark);
  252. boolean update = applicationProcedureTemporaryService.updateById(applicationProcedure);
  253. System.out.println("update = " + update);
  254. return CommonResult.ok();
  255. }
  256. @Override
  257. public CommonResult appletUpdate(AppletApprovalProcessDto appletApprovalProcessDto) {
  258. int id = appletApprovalProcessDto.getId();
  259. String status = appletApprovalProcessDto.getStatus();
  260. String adminMenuId = appletApprovalProcessDto.getAdminMenuId();
  261. String remark = appletApprovalProcessDto.getRemark();
  262. String adminId = appletApprovalProcessDto.getAdminId();
  263. // 判断对应的管理端是否有权限
  264. if (ObjectUtils.isEmpty(adminMenuId) && ObjectUtils.isEmpty(adminId)) {
  265. return CommonResult.fail("无审批权限");
  266. }
  267. PermissionSetting permissionSetting = permissionSettingService.getMenuPermissionSetting(adminMenuId);
  268. if (ObjectUtils.isEmpty(permissionSetting)) {
  269. return CommonResult.fail("无审批权限");
  270. }
  271. String processManagement = permissionSetting.getProcessManagement();
  272. if (!"0".equals(processManagement) && !processManagement.contains("3") && !processManagement.contains("4")) {
  273. return CommonResult.fail("此账号暂无该权限");
  274. }
  275. ApplicationProcedureTemporary applicationProcedure = applicationProcedureTemporaryService.getById(id);
  276. if (ObjectUtils.isEmpty(applicationProcedure)) {
  277. return CommonResult.fail("参数异常");
  278. }
  279. String applicationProcedureStatus = applicationProcedure.getStatus();
  280. if ("0".equals(applicationProcedureStatus) || "3".equals(applicationProcedureStatus)) {
  281. return CommonResult.fail("已审批,无需再次审批");
  282. }
  283. // 判断是什么审核模式
  284. List<ApplicationProcedureSetting> list = applicationProcedureSettingService.list(new LambdaQueryWrapper<>());
  285. ApplicationProcedureSetting applicationProcedureSetting = list.get(0);
  286. String approverType = applicationProcedureSetting.getApproverType();
  287. AdminMenu byId = adminMenuService.getById(adminMenuId);
  288. // 角色等级
  289. Integer parentId = byId.getParentId();
  290. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  291. // 当只需要审核一次
  292. if ("1".equals(approverType)) {
  293. // 只有最高级才能审批
  294. // 当为最高审批人
  295. if (parentId == 0) {
  296. if ("1".equals(status)) {
  297. status = "3";
  298. }
  299. applicationProcedure.setStatus(status);
  300. applicationProcedure.setApproverId(adminId);
  301. // 审批时间
  302. applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
  303. // 审批备注
  304. applicationProcedure.setExamineAndApproveRemark(remark);
  305. applicationProcedureTemporaryService.updateById(applicationProcedure);
  306. return CommonResult.ok();
  307. }
  308. return CommonResult.fail("权限不足");
  309. }
  310. // 当为最高审批人
  311. if (parentId == 0) {
  312. // 先判断是否已经被审批了
  313. if (!"2".equals(applicationProcedureStatus)) {
  314. // 当不是处理中时则无法审批
  315. return CommonResult.fail("当前无法审批");
  316. }
  317. if ("1".equals(status)) {
  318. status = "3";
  319. }
  320. applicationProcedure.setStatus(status);
  321. applicationProcedure.setApproverId(adminId);
  322. // 审批时间
  323. applicationProcedure.setExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
  324. // 审批备注
  325. applicationProcedure.setExamineAndApproveRemark(remark);
  326. applicationProcedureTemporaryService.updateById(applicationProcedure);
  327. return CommonResult.ok();
  328. }
  329. if ("1".equals(status)) {
  330. status = "2";
  331. }
  332. applicationProcedure.setStatus(status);
  333. applicationProcedure.setSecondaryApproverId(adminId);
  334. // 审批时间
  335. applicationProcedure.setSecondaryExamineAndApproveTime(LocalDateTime.now().format(dateTimeFormatter1));
  336. // 审批备注
  337. applicationProcedure.setSecondaryExamineAndApproveRemark(remark);
  338. applicationProcedureTemporaryService.updateById(applicationProcedure);
  339. return CommonResult.ok();
  340. }
  341. @Override
  342. public CommonResult appletList(int adminMenuId, String startTime, String endTime, String status, int page, int size) {
  343. if (ObjectUtils.isEmpty(page) || page <= 0) {
  344. page = 1;
  345. }
  346. if (ObjectUtils.isEmpty(size) || size <= 0) {
  347. size = 10;
  348. }
  349. List<ApplicationProcedureSetting> list = applicationProcedureSettingService.list(new LambdaQueryWrapper<>());
  350. ApplicationProcedureSetting applicationProcedureSetting = list.get(0);
  351. String approverType = applicationProcedureSetting.getApproverType();
  352. AdminMenu byId = adminMenuService.getById(adminMenuId);
  353. Integer parentId = byId.getParentId();
  354. PageUtils<ApplicationProcedureTemporaryVo> pageList = null;
  355. //审批一次,角色等级不为0
  356. if ("1".equals(approverType)) {
  357. if (parentId != 0) {
  358. return CommonResult.fail("暂无查看权限");
  359. } else {
  360. pageList = applicationProcedureTemporaryService.pageAppletList(startTime, endTime, status, page, size);
  361. return CommonResult.ok(pageList);
  362. }
  363. }
  364. if (parentId == 0) {
  365. // 全部则是没有待审批的全部
  366. if (ObjectUtils.isEmpty(status)) {
  367. status = "0,2,3";
  368. }
  369. pageList = applicationProcedureTemporaryService.parentAppletPageList(startTime, endTime, status, page, size);
  370. return CommonResult.ok(pageList);
  371. }
  372. pageList = applicationProcedureTemporaryService.pageAppletList(startTime, endTime, status, page, size);
  373. return CommonResult.ok(pageList);
  374. }
  375. //region 获取是否跨周 且不超过两天
  376. public static int checkWeek(String strDate1,String strDate2) {
  377. Calendar calendar = Calendar.getInstance();
  378. calendar.setTime(TimeExchange.StringToDate(strDate1,"yyyy-MM-dd"));
  379. int year = calendar.get(Calendar.YEAR);
  380. int week = calendar.get(Calendar.WEEK_OF_YEAR);
  381. int day = calendar.get(Calendar.DAY_OF_WEEK)-1;
  382. if (day==0){
  383. day=7;
  384. week=week-1;
  385. }
  386. Calendar calendar1 = Calendar.getInstance();
  387. calendar1.setTime(TimeExchange.StringToDate(strDate2,"yyyy-MM-dd"));
  388. int year1 = calendar1.get(Calendar.YEAR);
  389. int week1 = calendar1.get(Calendar.WEEK_OF_YEAR);
  390. int day1 = calendar1.get(Calendar.DAY_OF_WEEK)-1;
  391. if (day1==0){
  392. day=7;
  393. week1=week1-1;
  394. }
  395. if(year==year1&&week==week1){
  396. return day1-day;
  397. }else{
  398. return -1;
  399. }
  400. }
  401. }