ApplyOffWorkController.java 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054
  1. package com.idea.oa.apply.controller;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.github.pagehelper.PageInfo;
  5. import com.idea.oa.apply.model.ApplyOffWork;
  6. import com.idea.oa.apply.model.ApplyOffWorkTime;
  7. import com.idea.oa.apply.model.ApplyOffWorkTimeExample;
  8. import com.idea.oa.apply.model.inout.AddConfirmResult;
  9. import com.idea.oa.apply.model.inout.ApplyOffWorkIn;
  10. import com.idea.oa.apply.model.inout.UseDays;
  11. import com.idea.oa.apply.service.ApplyOffWorkService;
  12. import com.idea.oa.apply.service.ApplyOffWorkTimeService;
  13. import com.idea.oa.apply.util.constant.ConstantFlowType;
  14. import com.idea.oa.flow2.model.FlowMain;
  15. import com.idea.oa.flow2.model.FlowMainPush;
  16. import com.idea.oa.flow2.model.in.FlowMainCcVo;
  17. import com.idea.oa.flow2.service.FlowMainCcService;
  18. import com.idea.oa.flow2.service.FlowMainPushService;
  19. import com.idea.oa.flow2.service.FlowMainService;
  20. import com.idea.oa.holidayManagement.model.HolidayManagement;
  21. import com.idea.oa.holidayManagement.model.HolidayManagementExample;
  22. import com.idea.oa.holidayManagement.model.out.HolidayTime;
  23. import com.idea.oa.holidayManagement.service.HolidayManagementService;
  24. import com.rockstar.common.base.BaseController;
  25. import com.rockstar.common.domain.AjaxResult;
  26. import com.rockstar.flow.exception.FlowException;
  27. import com.rockstar.frame.model.extend.DateTrans;
  28. import com.rockstar.frame.model.extend.TableSplitResult;
  29. import com.rockstar.frame.model.extend.Tablepar;
  30. import com.rockstar.shiro.util.ShiroUtils;
  31. import io.swagger.annotations.Api;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.stereotype.Controller;
  34. import org.springframework.transaction.annotation.Transactional;
  35. import org.springframework.util.StringUtils;
  36. import org.springframework.web.bind.annotation.PathVariable;
  37. import org.springframework.web.bind.annotation.PostMapping;
  38. import org.springframework.web.bind.annotation.RequestMapping;
  39. import org.springframework.web.bind.annotation.ResponseBody;
  40. import java.math.BigDecimal;
  41. import java.math.MathContext;
  42. import java.text.ParseException;
  43. import java.text.SimpleDateFormat;
  44. import java.util.*;
  45. /**
  46. * Created by zt
  47. */
  48. @Controller
  49. @RequestMapping(value = "/ApplyOffWorkController")
  50. @Api(value = "申请流程/分表_申请请假表")
  51. public class ApplyOffWorkController extends BaseController {
  52. //主表
  53. @Autowired
  54. private ApplyOffWorkService modelService;
  55. @Autowired
  56. private HolidayManagementService holidayManagementService;
  57. @Autowired
  58. private FlowMainService flowMainService;
  59. @Autowired
  60. private ApplyOffWorkTimeService applyOffWorkTimeService;
  61. @Autowired
  62. private FlowMainCcService flowMainCcService;
  63. @Autowired
  64. private FlowMainPushService flowMainPushService;
  65. /**
  66. * 查询 请假统计详细
  67. * @param tablepar
  68. * @param name
  69. * @param startTime
  70. * @param endTime
  71. * @return
  72. */
  73. @PostMapping(value = "findApplyOffWorkListByInfo", produces = {"application/json;charset=UTF-8"})
  74. @ResponseBody
  75. public TableSplitResult findOffWorkListByInfo(Tablepar tablepar, String name,String startTime,String endTime) {
  76. PageInfo<Map> page=modelService.findOffWorkListByInfo(tablepar, name, startTime, endTime);
  77. TableSplitResult<Map> result=new TableSplitResult<>(page.getPageNum(), page.getTotal(), page.getList());
  78. return result;
  79. }
  80. @PostMapping(value = "findAllApplyOffWorkListByInfo", produces = {"application/json;charset=UTF-8"})
  81. @ResponseBody
  82. public List<Map> findAllApplyOffWorkListByInfo(String name,String startTime,String endTime) {
  83. List<Map> result=modelService.findAllApplyOffWorkListByInfo(name, startTime, endTime);
  84. return result;
  85. }
  86. /**
  87. * 申请人撤回申请
  88. *
  89. * @param flowMainid
  90. * @return
  91. */
  92. @PostMapping(value = "recallApply", produces = {"application/json;charset=UTF-8"})
  93. @ResponseBody
  94. public AjaxResult recallApply(String flowMainid) {
  95. AjaxResult ajaxResult = flowMainService.recallApply(flowMainid);
  96. if (new Integer(200).equals(ajaxResult.get("code"))) {
  97. FlowMain flowMain = flowMainService.selectByPrimaryKey(flowMainid);
  98. //添加业务信息(将请假信息中的修改掉,剩余年假,剩余调休,冻结年假,冻结调休都修改掉)
  99. ApplyOffWorkTimeExample example = new ApplyOffWorkTimeExample();
  100. example.createCriteria().andOffWorkIdEqualTo(flowMain.getFormId());
  101. List<ApplyOffWorkTime> applyOffWorkTimes = applyOffWorkTimeService.selectByExample(example);
  102. BigDecimal totalTiaoXiu = new BigDecimal(0);//所有调休假小时
  103. BigDecimal totalNianJia = new BigDecimal(0);//所有年假天数
  104. // BigDecimal totalShiJia = new BigDecimal(0);//所有事假天数(因为不需要修改假期管理,所以不需要单独进行计算)
  105. {
  106. // ApplyOffWork applyOffWork = modelService.selectByPrimaryKey(flowMainPush.getFormId());
  107. for (ApplyOffWorkTime applyOffWorkTime : applyOffWorkTimes) {
  108. {//修改请假表,将请假表的对应数据添加冻结时间,并减去可用时间
  109. if (applyOffWorkTime.getOffWorkType().equals("1")) {//1年假
  110. totalNianJia = totalNianJia.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  111. } else if (applyOffWorkTime.getOffWorkType().equals("3")) {//3调休
  112. totalTiaoXiu = totalTiaoXiu.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  113. } else if (applyOffWorkTime.getOffWorkType().equals("2")) {//2事假
  114. // totalShiJia=totalShiJia.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  115. }
  116. }
  117. }
  118. }
  119. if (true) {
  120. String createdById = applyOffWorkTimes.get(0).getCreatedBy();
  121. HolidayManagementExample holidayManagementExample = new HolidayManagementExample();
  122. holidayManagementExample.createCriteria().andUserIdEqualTo(createdById);
  123. List<HolidayManagement> holidayManagements = holidayManagementService.selectByExample(holidayManagementExample);
  124. if (holidayManagements.isEmpty()) {
  125. return result(0);
  126. }
  127. if (false) {//如果是最后 并且同意了,就进行下面的操作,或者不同意就进行另一种操作,
  128. //如果是同意了
  129. {
  130. HolidayManagement holidayManagement = holidayManagements.get(0);
  131. if (totalNianJia.doubleValue() > 0) {//存在年假修改
  132. Double freezeHolidayTime = holidayManagement.getFreezeHolidayTime();
  133. // Double restHolidayTime = holidayManagement.getRestHolidayTime();
  134. double v = new BigDecimal(freezeHolidayTime).subtract(totalNianJia, MathContext.DECIMAL32).doubleValue();
  135. holidayManagement.setFreezeHolidayTime(v);
  136. }
  137. if (totalTiaoXiu.doubleValue() > 0) {//存在调休假修改
  138. Double freezeExchangeTime = holidayManagement.getFreezeExchangeTime();
  139. double v = new BigDecimal(freezeExchangeTime).subtract(totalTiaoXiu, MathContext.DECIMAL32).doubleValue();
  140. holidayManagement.setFreezeExchangeTime(v);
  141. }
  142. holidayManagement.setUpdatedBy(ShiroUtils.getUser().getId());
  143. holidayManagement.setUpdatedAt(new Date());
  144. holidayManagementService.updateByPrimaryKeySelective(holidayManagement);
  145. }
  146. } else {
  147. //如果是不同意
  148. {
  149. HolidayManagement holidayManagement = holidayManagements.get(0);
  150. if (totalNianJia.doubleValue() > 0) {//存在年假修改
  151. Double freezeHolidayTime = holidayManagement.getFreezeHolidayTime();
  152. double v = new BigDecimal(freezeHolidayTime).subtract(totalNianJia, MathContext.DECIMAL32).doubleValue();
  153. holidayManagement.setFreezeHolidayTime(v);
  154. Double restHolidayTime = holidayManagement.getRestHolidayTime();
  155. double v1 = new BigDecimal(restHolidayTime).add(totalNianJia, MathContext.DECIMAL32).doubleValue();
  156. holidayManagement.setRestHolidayTime(v1);
  157. }
  158. if (totalTiaoXiu.doubleValue() > 0) {//存在调休假修改
  159. Double freezeExchangeTime = holidayManagement.getFreezeExchangeTime();
  160. double v = new BigDecimal(freezeExchangeTime).subtract(totalTiaoXiu, MathContext.DECIMAL32).doubleValue();
  161. holidayManagement.setFreezeExchangeTime(v);
  162. Double restExchangeTime = holidayManagement.getRestExchangeTime();
  163. double v1 = new BigDecimal(restExchangeTime).add(totalTiaoXiu, MathContext.DECIMAL32).doubleValue();
  164. holidayManagement.setRestExchangeTime(v1);
  165. }
  166. holidayManagement.setUpdatedBy(ShiroUtils.getUser().getId());
  167. holidayManagement.setUpdatedAt(new Date());
  168. holidayManagementService.updateByPrimaryKeySelective(holidayManagement);
  169. }
  170. }
  171. }
  172. }
  173. return ajaxResult;
  174. }
  175. /**
  176. * 添加审核结果
  177. * 根据不同的状态值confirmResult判断是 1:审核通过,转下一步;2:退回发起人;3:退回上节点;4:结束流程;
  178. *
  179. * @param addConfirmResult
  180. * @return
  181. */
  182. @PostMapping(value = "AddConfirmResultOffWork", produces = {"application/json;charset=UTF-8"})
  183. @ResponseBody
  184. @Transactional
  185. public AjaxResult AddConfirmResultOffWork(AddConfirmResult addConfirmResult) throws FlowException, ParseException {
  186. System.out.println("AddConfirmResultOffWork");
  187. System.out.println(addConfirmResult);
  188. if (addConfirmResult.getConfirmResult() == null) {
  189. return result(-1);
  190. }
  191. String deploymentid = ConstantFlowType.OFF_WORK_DEPLOYMENTID;
  192. String constantFlowType = ConstantFlowType.OFF_WORK;
  193. FlowMainPush flowMainPush = flowMainPushService.selectByPrimaryKey(addConfirmResult.getFlowMainPushId());
  194. ApplyOffWorkTimeExample example = new ApplyOffWorkTimeExample();
  195. example.createCriteria().andOffWorkIdEqualTo(flowMainPush.getFormId());
  196. List<ApplyOffWorkTime> applyOffWorkTimes = applyOffWorkTimeService.selectByExample(example);
  197. BigDecimal hour_totalTiaoXiu = new BigDecimal(0);//所有调休假小时
  198. BigDecimal day_totalNianJia = new BigDecimal(0);//所有年假天数
  199. BigDecimal hour_totalShiJia = new BigDecimal(0);//所有事假天数
  200. BigDecimal day_total_BingJia_hunjia_chanjia_peichanjia_sangjia = new BigDecimal(0);//所有,4病假,5婚假,6产假,7陪产假,8丧假 ,最小为0.5天
  201. String isOkString = null;
  202. {//进行审核判断
  203. {
  204. // ApplyOffWork applyOffWork = modelService.selectByPrimaryKey(flowMainPush.getFormId());
  205. for (ApplyOffWorkTime applyOffWorkTime : applyOffWorkTimes) {
  206. {//修改请假表,将请假表的对应数据添加冻结时间,并减去可用时间
  207. if (applyOffWorkTime.getOffWorkType().equals("1")) {//1年假
  208. day_totalNianJia = day_totalNianJia.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  209. } else if (applyOffWorkTime.getOffWorkType().equals("3")) {//3调休
  210. hour_totalTiaoXiu = hour_totalTiaoXiu.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  211. } else if (applyOffWorkTime.getOffWorkType().equals("2")) {//2事假
  212. hour_totalShiJia = hour_totalShiJia.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  213. } else if (applyOffWorkTime.getOffWorkType().equals("4") || applyOffWorkTime.getOffWorkType().equals("4") || applyOffWorkTime.getOffWorkType().equals("5") || applyOffWorkTime.getOffWorkType().equals("5")
  214. || applyOffWorkTime.getOffWorkType().equals("6") || applyOffWorkTime.getOffWorkType().equals("6") || applyOffWorkTime.getOffWorkType().equals("7") || applyOffWorkTime.getOffWorkType().equals("7")
  215. || applyOffWorkTime.getOffWorkType().equals("8") || applyOffWorkTime.getOffWorkType().equals("8")) {//4病假,5婚假,6产假,7陪产假,8丧假 ,最小为0.5天
  216. day_total_BingJia_hunjia_chanjia_peichanjia_sangjia = day_total_BingJia_hunjia_chanjia_peichanjia_sangjia.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  217. }
  218. }
  219. }
  220. }
  221. //添加判断条件
  222. HashMap<String, Object> feeMoneyTotalMap = new HashMap<>();
  223. if (hour_totalTiaoXiu.doubleValue() > 0 && day_totalNianJia.doubleValue() <= 0 && hour_totalShiJia.doubleValue() <= 0 && day_total_BingJia_hunjia_chanjia_peichanjia_sangjia.doubleValue() <= 0) {
  224. //假别仅有调休假
  225. // String isExchangeOnly = conditionMap.get("isExchangeOnly").toString();
  226. // Integer applyDay = Integer.valueOf(conditionMap.get("applyDay").toString());
  227. feeMoneyTotalMap.put("isExchangeOnly", "yes");
  228. feeMoneyTotalMap.put("applyDay", 0);
  229. } else {
  230. BigDecimal addDay = hour_totalTiaoXiu.add(hour_totalShiJia).divide(new BigDecimal(ConstantFlowType.ONE_DAY_TIME), 2, BigDecimal.ROUND_HALF_UP);
  231. if (addDay.add(day_totalNianJia).add(day_total_BingJia_hunjia_chanjia_peichanjia_sangjia).doubleValue() > 3) {
  232. // 假期天数合计>3天
  233. feeMoneyTotalMap.put("isExchangeOnly", "no");
  234. feeMoneyTotalMap.put("applyDay", 4);
  235. } else {
  236. feeMoneyTotalMap.put("isExchangeOnly", "no");
  237. feeMoneyTotalMap.put("applyDay", 0);
  238. }
  239. }
  240. isOkString = flowMainService.doConfirmResult(addConfirmResult, deploymentid, constantFlowType, flowMainPush, feeMoneyTotalMap);
  241. if (!"ok_end".equals(isOkString) && !"ok_noEnd".equals(isOkString)) {
  242. return AjaxResult.error(isOkString);
  243. }
  244. }
  245. Boolean isEnd = false;//是否结束
  246. Boolean isAgree = false;//是否同意
  247. if (addConfirmResult.getConfirmResult().equals("4")) {//结束流程
  248. isEnd = true;
  249. isAgree = false;
  250. } else if (addConfirmResult.getConfirmResult().equals("1")) {//1:审核通过,转下一步
  251. if ("ok_end".equals(isOkString)) {
  252. isEnd = true;
  253. isAgree = true;
  254. }
  255. }
  256. //添加业务信息(将请假信息中的修改掉,剩余年假,剩余调休,冻结年假,冻结调休都修改掉)
  257. if (isEnd) {
  258. String createdById = applyOffWorkTimes.get(0).getCreatedBy();
  259. HolidayManagementExample holidayManagementExample = new HolidayManagementExample();
  260. holidayManagementExample.createCriteria().andUserIdEqualTo(createdById);
  261. List<HolidayManagement> holidayManagements = holidayManagementService.selectByExample(holidayManagementExample);
  262. if (holidayManagements.isEmpty()) {
  263. return result(0);
  264. }
  265. if (isAgree) {//如果是最后 并且同意了,就进行下面的操作,或者不同意就进行另一种操作,
  266. this.booleanIsAgree(holidayManagements,day_totalNianJia,hour_totalTiaoXiu,applyOffWorkTimes,createdById);
  267. {//移动到booleanIsAgree方法中去了
  268. // //如果是同意了
  269. // {
  270. // HolidayManagement holidayManagement = holidayManagements.get(0);
  271. // if (day_totalNianJia.doubleValue() > 0) {//存在年假修改
  272. // Double freezeHolidayTime = holidayManagement.getFreezeHolidayTime();
  273. //// Double restHolidayTime = holidayManagement.getRestHolidayTime();
  274. // double v = new BigDecimal(freezeHolidayTime).subtract(day_totalNianJia, MathContext.DECIMAL32).doubleValue();
  275. // holidayManagement.setFreezeHolidayTime(v);
  276. // }
  277. // if (hour_totalTiaoXiu.doubleValue() > 0) {//存在调休假修改
  278. // Double freezeExchangeTime = holidayManagement.getFreezeExchangeTime();
  279. // double v = new BigDecimal(freezeExchangeTime).subtract(hour_totalTiaoXiu, MathContext.DECIMAL32).doubleValue();
  280. // holidayManagement.setFreezeExchangeTime(v);
  281. // }
  282. //
  283. // holidayManagement.setUpdatedBy(ShiroUtils.getUser().getId());
  284. // holidayManagement.setUpdatedAt(new Date());
  285. //
  286. // holidayManagementService.updateByPrimaryKeySelective(holidayManagement);
  287. // }
  288. // {//审核通过后 在oa_work_attendance_log表中添加记录
  289. // for (ApplyOffWorkTime applyOffWorkTime : applyOffWorkTimes) {
  290. // WorkAttendanceLog workAttendanceLog = new WorkAttendanceLog();
  291. //
  292. //
  293. //// //=========================下面是重要的数据
  294. //// user_id varchar (64) DEFAULT NULL COMMENT '用户id 姓名/部门/岗位',
  295. //// `do_day`date DEFAULT NULL COMMENT '发生的日期',
  296. //// `happen_type` int(4) DEFAULT NULL COMMENT
  297. //// '1年假,2调休,3事假,4病假,5婚假,6产假,7陪产假,8丧假,9加班,10迟到,11早退,12旷工,13外出,14居家,15出差',
  298. //// //=========================上面是重要的数据
  299. //// do_start_time datetime DEFAULT NULL COMMENT '发生开始时间',
  300. //// do_end_time datetime DEFAULT NULL COMMENT '发生结束时间',
  301. //// `use_time`decimal(5, 2) DEFAULT NULL COMMENT '消耗时间(比如加班/调休时间小时)',
  302. //// from_table_id varchar(64) DEFAULT NULL COMMENT '来源表id',
  303. //// from_table_name varchar(64) DEFAULT NULL COMMENT '来源表名称',
  304. //
  305. // workAttendanceLog.setUserId(createdById);
  306. // workAttendanceLog.setDoDay(applyOffWorkTime.getStartDay());
  307. // workAttendanceLog.setHappenType(offWorkTypeChangehappenType(applyOffWorkTime.getOffWorkType()));//'1年假,2调休,3事假,4病假,5婚假,6产假,7陪产假,8丧假,9加班,10迟到,11早退,12旷工,13外出,14居家,15出差',
  308. // workAttendanceLog.setFromTableId(applyOffWorkTime.getId());
  309. // workAttendanceLog.setFromTableName("apply_off_work_time");
  310. //
  311. //
  312. // workAttendanceLog.setCreatedBy(ShiroUtils.getUser().getId());
  313. // workAttendanceLog.setCreatedAt(new Date());
  314. // workAttendanceLog.setStatus(0);
  315. // workAttendanceLog.setUpdatedAt(workAttendanceLog.getCreatedAt());
  316. // workAttendanceLog.setUpdatedBy(workAttendanceLog.getCreatedBy());
  317. //
  318. //
  319. // //年假 上午/下午/全天
  320. // //事假/调休 是时间:24小时如08:00',
  321. // //如果有跨天的问题需要新建多条数据日志
  322. //// '请假类型(1年假,2事假,3调休,4病假,5婚假,6产假,7陪产假,8丧假)',
  323. // if (applyOffWorkTime.getOffWorkType().equals("2") || applyOffWorkTime.getOffWorkType().equals("3")) {
  324. //
  325. // workAttendanceLog.setDoStartTime(applyOffWorkTime.getStartDay());
  326. // workAttendanceLog.setDoEndTime(applyOffWorkTime.getEndDay());
  327. // //判断事假要把小时要转成天
  328. // if (applyOffWorkTime.getOffWorkType().equals("2")) {
  329. //// if ("小时".equals(applyOffWorkTime.getTimeUnit())) {
  330. // BigDecimal divide = applyOffWorkTime.getUseTime().divide(new BigDecimal(ConstantFlowType.ONE_DAY_TIME), 2, BigDecimal.ROUND_HALF_UP);
  331. // workAttendanceLog.setUseTime(divide);
  332. //// }
  333. // } else {
  334. // workAttendanceLog.setUseTime(applyOffWorkTime.getUseTime());
  335. // }
  336. // int result = workAttendanceLogService.insert(workAttendanceLog);
  337. //
  338. //
  339. // } else {
  340. // //计算年假调用的多少天,分别消耗的多少天
  341. // List<UseDays> useDays = this.countDayUseDays(applyOffWorkTime.getStartDay(), applyOffWorkTime.getEndDay(), applyOffWorkTime.getStartTime(), applyOffWorkTime.getEndTime(), applyOffWorkTime.getUseTime());
  342. // for (UseDays useDay : useDays) {
  343. // workAttendanceLog.setDoStartTime(useDay.getStartTime());
  344. // workAttendanceLog.setDoEndTime(useDay.getEndTime());
  345. // workAttendanceLog.setUseTime(useDay.getUseTime());
  346. // workAttendanceLog.setDoDay(useDay.getDoDay());
  347. // int result = workAttendanceLogService.insert(workAttendanceLog);
  348. // }
  349. //
  350. // }
  351. //
  352. // }
  353. //
  354. // }
  355. }
  356. } else {
  357. //如果是不同意
  358. {
  359. HolidayManagement holidayManagement = holidayManagements.get(0);
  360. if (day_totalNianJia.doubleValue() > 0) {//存在年假修改
  361. Double freezeHolidayTime = holidayManagement.getFreezeHolidayTime();
  362. double v = new BigDecimal(freezeHolidayTime).subtract(day_totalNianJia, MathContext.DECIMAL32).doubleValue();
  363. holidayManagement.setFreezeHolidayTime(v);
  364. Double restHolidayTime = holidayManagement.getRestHolidayTime();
  365. double v1 = new BigDecimal(restHolidayTime).add(day_totalNianJia, MathContext.DECIMAL32).doubleValue();
  366. holidayManagement.setRestHolidayTime(v1);
  367. }
  368. if (hour_totalTiaoXiu.doubleValue() > 0) {//存在调休假修改
  369. Double freezeExchangeTime = holidayManagement.getFreezeExchangeTime();
  370. double v = new BigDecimal(freezeExchangeTime).subtract(hour_totalTiaoXiu, MathContext.DECIMAL32).doubleValue();
  371. holidayManagement.setFreezeExchangeTime(v);
  372. Double restExchangeTime = holidayManagement.getRestExchangeTime();
  373. double v1 = new BigDecimal(restExchangeTime).add(hour_totalTiaoXiu, MathContext.DECIMAL32).doubleValue();
  374. holidayManagement.setRestExchangeTime(v1);
  375. }
  376. holidayManagement.setUpdatedBy(ShiroUtils.getUser().getId());
  377. holidayManagement.setUpdatedAt(new Date());
  378. holidayManagementService.updateByPrimaryKeySelective(holidayManagement);
  379. }
  380. }
  381. }
  382. return result(1);
  383. }
  384. /**
  385. * 审核或申请结束且同意的情况下进行的处理
  386. */
  387. public void booleanIsAgree(List<HolidayManagement> holidayManagements,BigDecimal day_totalNianJia,BigDecimal hour_totalTiaoXiu,List<ApplyOffWorkTime> applyOffWorkTimes,String createdById) throws ParseException {
  388. //如果是同意了
  389. {
  390. HolidayManagement holidayManagement = holidayManagements.get(0);
  391. if (day_totalNianJia.doubleValue() > 0) {//存在年假修改
  392. Double freezeHolidayTime = holidayManagement.getFreezeHolidayTime();
  393. // Double restHolidayTime = holidayManagement.getRestHolidayTime();
  394. double v = new BigDecimal(freezeHolidayTime).subtract(day_totalNianJia, MathContext.DECIMAL32).doubleValue();
  395. holidayManagement.setFreezeHolidayTime(v);
  396. }
  397. if (hour_totalTiaoXiu.doubleValue() > 0) {//存在调休假修改
  398. Double freezeExchangeTime = holidayManagement.getFreezeExchangeTime();
  399. double v = new BigDecimal(freezeExchangeTime).subtract(hour_totalTiaoXiu, MathContext.DECIMAL32).doubleValue();
  400. holidayManagement.setFreezeExchangeTime(v);
  401. }
  402. holidayManagement.setUpdatedBy(ShiroUtils.getUser().getId());
  403. holidayManagement.setUpdatedAt(new Date());
  404. holidayManagementService.updateByPrimaryKeySelective(holidayManagement);
  405. }
  406. /*{//审核通过后 在oa_work_attendance_log表中添加记录
  407. for (ApplyOffWorkTime applyOffWorkTime : applyOffWorkTimes) {
  408. WorkAttendanceLog workAttendanceLog = new WorkAttendanceLog();
  409. // //=========================下面是重要的数据
  410. // user_id varchar (64) DEFAULT NULL COMMENT '用户id 姓名/部门/岗位',
  411. // `do_day`date DEFAULT NULL COMMENT '发生的日期',
  412. // `happen_type` int(4) DEFAULT NULL COMMENT
  413. // '1年假,2调休,3事假,4病假,5婚假,6产假,7陪产假,8丧假,9加班,10迟到,11早退,12旷工,13外出,14居家,15出差',
  414. // //=========================上面是重要的数据
  415. // do_start_time datetime DEFAULT NULL COMMENT '发生开始时间',
  416. // do_end_time datetime DEFAULT NULL COMMENT '发生结束时间',
  417. // `use_time`decimal(5, 2) DEFAULT NULL COMMENT '消耗时间(比如加班/调休时间小时)',
  418. // from_table_id varchar(64) DEFAULT NULL COMMENT '来源表id',
  419. // from_table_name varchar(64) DEFAULT NULL COMMENT '来源表名称',
  420. workAttendanceLog.setUserId(createdById);
  421. workAttendanceLog.setDoDay(applyOffWorkTime.getStartDay());
  422. workAttendanceLog.setHappenType(offWorkTypeChangehappenType(applyOffWorkTime.getOffWorkType()));//'1年假,2调休,3事假,4病假,5婚假,6产假,7陪产假,8丧假,9加班,10迟到,11早退,12旷工,13外出,14居家,15出差',
  423. workAttendanceLog.setFromTableId(applyOffWorkTime.getId());
  424. workAttendanceLog.setFromTableName("apply_off_work_time");
  425. workAttendanceLog.setCreatedBy(ShiroUtils.getUser().getId());
  426. workAttendanceLog.setCreatedAt(new Date());
  427. workAttendanceLog.setStatus(0);
  428. workAttendanceLog.setUpdatedAt(workAttendanceLog.getCreatedAt());
  429. workAttendanceLog.setUpdatedBy(workAttendanceLog.getCreatedBy());
  430. //年假 上午/下午/全天
  431. //事假/调休 是时间:24小时如08:00',
  432. //如果有跨天的问题需要新建多条数据日志
  433. // '请假类型(1年假,2事假,3调休,4病假,5婚假,6产假,7陪产假,8丧假)',
  434. if (applyOffWorkTime.getOffWorkType().equals("2") || applyOffWorkTime.getOffWorkType().equals("3")) {
  435. workAttendanceLog.setDoStartTime(applyOffWorkTime.getStartDay());
  436. workAttendanceLog.setDoEndTime(applyOffWorkTime.getEndDay());
  437. //判断事假要把小时要转成天
  438. if (applyOffWorkTime.getOffWorkType().equals("2")) {
  439. // if ("小时".equals(applyOffWorkTime.getTimeUnit())) {
  440. BigDecimal divide = applyOffWorkTime.getUseTime().divide(new BigDecimal(ConstantFlowType.ONE_DAY_TIME), 2, BigDecimal.ROUND_HALF_UP);
  441. workAttendanceLog.setUseTime(divide);
  442. // }
  443. } else {
  444. workAttendanceLog.setUseTime(applyOffWorkTime.getUseTime());
  445. }
  446. int result = workAttendanceLogService.insert(workAttendanceLog);
  447. } else {
  448. //计算年假调用的多少天,分别消耗的多少天
  449. List<UseDays> useDays = this.countDayUseDays(applyOffWorkTime.getStartDay(), applyOffWorkTime.getEndDay(), applyOffWorkTime.getStartTime(), applyOffWorkTime.getEndTime(), applyOffWorkTime.getUseTime());
  450. for (UseDays useDay : useDays) {
  451. workAttendanceLog.setDoStartTime(useDay.getStartTime());
  452. workAttendanceLog.setDoEndTime(useDay.getEndTime());
  453. workAttendanceLog.setUseTime(useDay.getUseTime());
  454. workAttendanceLog.setDoDay(useDay.getDoDay());
  455. int result = workAttendanceLogService.insert(workAttendanceLog);
  456. }
  457. }
  458. }
  459. }*/
  460. }
  461. //计算年假/病假/婚假...调用的多少天,分别消耗的多少天
  462. private List<UseDays> countDayUseDays(Date startDay, Date endDay, String startTime, String endTime, BigDecimal useTime) throws ParseException {
  463. if (startDay.after(endDay)) {
  464. return null;
  465. }
  466. List<UseDays> useDayList = new ArrayList<>();
  467. //如果是同一天
  468. if (startDay.equals(endDay)) {
  469. UseDays useDays = new UseDays();
  470. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  471. SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  472. String format = simpleDateFormat.format(startDay);
  473. if ("上午".equals(startTime)) {
  474. Date parse = simpleDateFormat1.parse(format + " 09:00:00");
  475. useDays.setStartTime(parse);
  476. } else {
  477. Date parse = simpleDateFormat1.parse(format + " 13:00:00");
  478. useDays.setStartTime(parse);
  479. }
  480. if ("上午".equals(endDay)) {
  481. Date parse = simpleDateFormat1.parse(format + " 12:00:00");
  482. useDays.setEndTime(parse);
  483. } else {
  484. Date parse = simpleDateFormat1.parse(format + " 17:30:00");
  485. useDays.setEndTime(parse);
  486. }
  487. useDays.setUseTime(useTime);
  488. useDays.setDoDay(useDays.getStartTime());
  489. useDayList.add(useDays);
  490. return useDayList;
  491. } else {//发现不是同一天
  492. //先设置第一天
  493. UseDays useDays = new UseDays();
  494. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  495. SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  496. String format = simpleDateFormat.format(startDay);
  497. if ("上午".equals(startTime)) {
  498. Date parse = simpleDateFormat1.parse(format + " 09:00:00");
  499. useDays.setStartTime(parse);
  500. useDays.setUseTime(new BigDecimal(1));
  501. } else {
  502. Date parse = simpleDateFormat1.parse(format + " 13:00:00");
  503. useDays.setStartTime(parse);
  504. useDays.setUseTime(new BigDecimal(0.5));
  505. }
  506. Date parse = simpleDateFormat1.parse(format + " 17:30:00");
  507. useDays.setEndTime(parse);
  508. useDays.setDoDay(useDays.getStartTime());
  509. useDayList.add(useDays);
  510. //下面设置第二天或最后一天
  511. Calendar cal = Calendar.getInstance();
  512. //设置月份
  513. cal.setTime(startDay);
  514. cal.add(Calendar.DATE, 1);
  515. Calendar cal2 = Calendar.getInstance();
  516. //设置月份
  517. cal2.setTime(endDay);
  518. Date setstartTime=null;
  519. while (cal.get(Calendar.DAY_OF_YEAR) < cal2.get(Calendar.DAY_OF_YEAR)) {
  520. UseDays useDays2 = new UseDays();
  521. setstartTime = simpleDateFormat1.parse(simpleDateFormat.format(cal.getTime()) + " 09:00:00");
  522. useDays2.setStartTime(setstartTime);
  523. parse = simpleDateFormat1.parse(simpleDateFormat.format(cal.getTime()) + " 17:30:00");
  524. useDays2.setEndTime(parse);
  525. useDays2.setUseTime(new BigDecimal(1));
  526. useDays2.setDoDay(useDays2.getStartTime());
  527. useDayList.add(useDays2);
  528. cal.add(Calendar.DATE, 1);
  529. }
  530. //设置最后一天
  531. if (cal.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR)) {
  532. UseDays useDays3 = new UseDays();
  533. setstartTime = simpleDateFormat1.parse(simpleDateFormat.format(cal.getTime()) + " 09:00:00");
  534. useDays3.setStartTime(setstartTime);
  535. if ("上午".equals(endTime)) {
  536. parse = simpleDateFormat1.parse(simpleDateFormat.format(cal.getTime()) + " 12:00:00");
  537. useDays3.setEndTime(parse);
  538. useDays3.setUseTime(new BigDecimal(0.5));
  539. } else {
  540. parse = simpleDateFormat1.parse(simpleDateFormat.format(cal.getTime()) + " 17:30:00");
  541. useDays3.setEndTime(parse);
  542. useDays3.setUseTime(new BigDecimal(1));
  543. }
  544. useDays3.setDoDay(useDays3.getStartTime());
  545. useDayList.add(useDays3);
  546. }
  547. return useDayList;
  548. }
  549. }
  550. /**
  551. * 请假和考勤标识的转换
  552. *
  553. * @param offWorkType
  554. * @return
  555. */
  556. private Integer offWorkTypeChangehappenType(String offWorkType) {
  557. switch (offWorkType) {
  558. // '请假类型(1年假,2事假,3调休,4病假,5婚假,6产假,7陪产假,8丧假)',
  559. // 1年假,2调休,3事假,4病假,5婚假,6产假,7陪产假,8丧假,9加班,10迟到,11早退,12旷工,13外出,14居家,15出差
  560. case "1":
  561. return 1;
  562. case "2":
  563. return 3;
  564. case "3":
  565. return 2;
  566. case "4":
  567. return 4;
  568. case "5":
  569. return 5;
  570. case "6":
  571. return 6;
  572. case "7":
  573. return 7;
  574. case "8":
  575. return 8;
  576. default:
  577. return 0;
  578. }
  579. }
  580. /**
  581. * 发起付款申请流程
  582. *
  583. * @param record
  584. * @return
  585. */
  586. @PostMapping(value = "addApplyOffWork", produces = {"application/json;charset=UTF-8"})
  587. @ResponseBody
  588. @Transactional
  589. public AjaxResult addApplyOffWork(ApplyOffWorkIn record) throws FlowException, ParseException {
  590. System.out.println("addApplyOffWork");
  591. System.out.println(record);
  592. if (false) {
  593. return AjaxResult.error("这是一个错误测试信息");
  594. }
  595. return myaddApplyPayment(record, null);
  596. }
  597. /**
  598. * 申请人重新发起申请
  599. *
  600. * @param record
  601. * @return
  602. */
  603. @PostMapping(value = "addApplyOffWorkAgain", produces = {"application/json;charset=UTF-8"})
  604. @ResponseBody
  605. @Transactional
  606. public AjaxResult addApplyOffWorkAgain(ApplyOffWorkIn record) throws FlowException, ParseException {
  607. System.out.println("addApplyOffWorkAgain");
  608. if (StringUtils.isEmpty(record.getFlowMainId())) {
  609. return AjaxResult.error("没有传入flowMainId的值");
  610. }
  611. System.out.println(record);
  612. // record.setRemark("重新发起申请[" + record.getFlowMainId() + "],");
  613. {//修改重新发起前的表状态
  614. FlowMain flowMain1 = new FlowMain();
  615. flowMain1.setId(record.getFlowMainId());
  616. flowMain1.setReturnStatus(1);//0/null无状态,1已撤回并且已重新发起
  617. flowMain1.setUpdatedAt(new Date());
  618. flowMain1.setUpdatedBy(ShiroUtils.getUser().getId());
  619. flowMainService.updateByPrimaryKeySelective(flowMain1);
  620. }
  621. return myaddApplyPayment(record, "重新发起申请[" + record.getFlowMainId() + "],");
  622. }
  623. /**
  624. * 根据推送表的FlowMainPushId获取信息
  625. *
  626. * @param flowMainPushId
  627. * @return
  628. */
  629. @PostMapping(value = "getInfoByFlowMainPushId", produces = {"application/json;charset=UTF-8"})
  630. @ResponseBody
  631. public ApplyOffWorkIn getInfoByFlowMainPushId(String flowMainPushId) {
  632. ApplyOffWorkIn myApplyOffWorkIn = modelService.getInfoByFlowMainPushId(flowMainPushId);
  633. if (myApplyOffWorkIn != null) {
  634. {//获取抄送人
  635. // FlowMainCcExample example = new FlowMainCcExample();
  636. // example.createCriteria().andFlowMainIdEqualTo(myApplyUseMoneyIn.getFlowMainId());
  637. // List<FlowMainCc> flowMainCcList = flowMainCcService.selectByExample(example);
  638. List<FlowMainCcVo> flowMainCcList = flowMainCcService.selectVoByFlowMainId(myApplyOffWorkIn.getFlowMainId());
  639. // HashSet<String> set = new HashSet<>();
  640. // for (FlowMainCc flowMainCc : flowMainCcList) {
  641. // set.add(flowMainCc.getCcUser());
  642. // }
  643. // StringBuilder stringBuilder = new StringBuilder();
  644. // if (!set.isEmpty()) {
  645. // for (String s : set) {
  646. // stringBuilder.append(s + ",");
  647. // }
  648. // }
  649. // myApplyUseMoneyIn.setCcList(stringBuilder.toString());
  650. myApplyOffWorkIn.setFlowMainCcList(flowMainCcList);
  651. }
  652. {//获取apply_use_money_detail数据
  653. ApplyOffWorkTimeExample example = new ApplyOffWorkTimeExample();
  654. example.createCriteria().andOffWorkIdEqualTo(myApplyOffWorkIn.getId());
  655. List<ApplyOffWorkTime> ApplyOffWorkTimes = applyOffWorkTimeService.selectByExample(example);
  656. myApplyOffWorkIn.setApplyOffWorkTimeList(ApplyOffWorkTimes);
  657. }
  658. }
  659. return myApplyOffWorkIn;
  660. }
  661. /**
  662. * 写一个方法:根据用户id获取该用户的年假剩余时间,调休假剩余时间,冻结时间等
  663. */
  664. @PostMapping(value = "getHolidayManagementByUserId", produces = {"application/json;charset=UTF-8"})
  665. @ResponseBody
  666. public HolidayTime getHolidayManagementByUserId(String userId) throws ParseException {
  667. HolidayManagementExample example = new HolidayManagementExample();
  668. example.createCriteria().andUserIdEqualTo(userId);
  669. List<HolidayManagement> holidayManagements = holidayManagementService.selectByExample(example);
  670. if (holidayManagements.isEmpty()) {
  671. return new HolidayTime((double) 0, (double) 0, (double) 0, (double) 0);
  672. }
  673. HolidayManagement holidayManagement = holidayManagements.get(0);
  674. if (holidayManagement.getHolidayType() == null) {
  675. return new HolidayTime((double) 0, (double) 0, (double) 0, (double) 0);
  676. }
  677. //写一个方法 计算当前用户还有多少年假和调休假,
  678. // 查看列表的时候 计算年假剩余天数
  679. HolidayTime holidayTime = holidayManagementService.getHolidayTimeByEntiy(holidayManagement);
  680. return holidayTime;
  681. }
  682. /**
  683. * 写一个方法:获取该用户的年假剩余时间,调休假剩余时间,冻结时间等
  684. */
  685. @PostMapping(value = "getHolidayManagementByCreater", produces = {"application/json;charset=UTF-8"})
  686. @ResponseBody
  687. public HolidayTime getHolidayManagementByCreater() throws ParseException {
  688. HolidayManagementExample example = new HolidayManagementExample();
  689. example.createCriteria().andUserIdEqualTo(ShiroUtils.getUser().getId());
  690. List<HolidayManagement> holidayManagements = holidayManagementService.selectByExample(example);
  691. if (holidayManagements.isEmpty()) {
  692. return new HolidayTime((double) 0, (double) 0, (double) 0, (double) 0);
  693. }
  694. HolidayManagement holidayManagement = holidayManagements.get(0);
  695. if (holidayManagement.getHolidayType() == null) {
  696. return new HolidayTime((double) 0, (double) 0, (double) 0, (double) 0);
  697. }
  698. //写一个方法 计算当前用户还有多少年假和调休假,做一个定时,每天更新计算年假剩余天数
  699. HolidayTime holidayTime = holidayManagementService.getHolidayTimeByEntiy(holidayManagement);
  700. return holidayTime;
  701. }
  702. /**
  703. * 根据申请人的id获取年假的信息
  704. *
  705. * @return
  706. * @throws ParseException
  707. */
  708. @PostMapping(value = "getHolidayManagementByApplyUserId", produces = {"application/json;charset=UTF-8"})
  709. @ResponseBody
  710. public HolidayTime getHolidayManagementByApplyUserId(String userId) throws ParseException {
  711. HolidayManagementExample example = new HolidayManagementExample();
  712. example.createCriteria().andUserIdEqualTo(userId);
  713. List<HolidayManagement> holidayManagements = holidayManagementService.selectByExample(example);
  714. if (holidayManagements.isEmpty()) {
  715. return new HolidayTime((double) 0, (double) 0, (double) 0, (double) 0);
  716. }
  717. HolidayManagement holidayManagement = holidayManagements.get(0);
  718. if (holidayManagement.getHolidayType() == null) {
  719. return new HolidayTime((double) 0, (double) 0, (double) 0, (double) 0);
  720. }
  721. //写一个方法 计算当前用户还有多少年假和调休假,做一个定时,每天更新计算年假剩余天数
  722. HolidayTime holidayTime = holidayManagementService.getHolidayTimeByEntiy(holidayManagement);
  723. return holidayTime;
  724. }
  725. /**
  726. * 根据主表的FlowMainId获取信息
  727. *
  728. * @param flowMainId
  729. * @return
  730. */
  731. @PostMapping(value = "getInfoByFlowMainId", produces = {"application/json;charset=UTF-8"})
  732. @ResponseBody
  733. public ApplyOffWorkIn getInfoByFlowMainId(String flowMainId) {
  734. ApplyOffWorkIn myApplyOffWorkIn = modelService.getInfoByFlowMainId(flowMainId);
  735. if (myApplyOffWorkIn != null) {
  736. {//获取抄送人
  737. // FlowMainCcExample example = new FlowMainCcExample();
  738. // example.createCriteria().andFlowMainIdEqualTo(myApplyUseMoneyIn.getFlowMainId());
  739. // List<FlowMainCc> flowMainCcList = flowMainCcService.selectByExample(example);
  740. List<FlowMainCcVo> flowMainCcList = flowMainCcService.selectVoByFlowMainId(myApplyOffWorkIn.getFlowMainId());
  741. // HashSet<String> set = new HashSet<>();
  742. // for (FlowMainCc flowMainCc : flowMainCcList) {
  743. // set.add(flowMainCc.getCcUser());
  744. // }
  745. // StringBuilder stringBuilder = new StringBuilder();
  746. // if (!set.isEmpty()) {
  747. // for (String s : set) {
  748. // stringBuilder.append(s + ",");
  749. // }
  750. // }
  751. // myApplyUseMoneyIn.setCcList(stringBuilder.toString());
  752. myApplyOffWorkIn.setFlowMainCcList(flowMainCcList);
  753. }
  754. {//获取apply_use_money_detail数据
  755. ApplyOffWorkTimeExample example = new ApplyOffWorkTimeExample();
  756. example.createCriteria().andOffWorkIdEqualTo(myApplyOffWorkIn.getId());
  757. List<ApplyOffWorkTime> ApplyOffWorkTimes = applyOffWorkTimeService.selectByExample(example);
  758. myApplyOffWorkIn.setApplyOffWorkTimeList(ApplyOffWorkTimes);
  759. }
  760. }
  761. return myApplyOffWorkIn;
  762. }
  763. /**
  764. * 发起请假申请流程
  765. * addSystemRemark系统中的备注
  766. *
  767. * @param record
  768. * @return
  769. */
  770. public AjaxResult myaddApplyPayment(ApplyOffWorkIn record, String addSystemRemark) throws FlowException, ParseException {
  771. if (StringUtils.isEmpty(record.getApplyOffWorkTimeString())) {
  772. return AjaxResult.error("没有获取到请假详细信息,请重新确认");
  773. }
  774. BigDecimal hour_totalTiaoXiu = new BigDecimal(0);//所有调休假小时
  775. BigDecimal day_totalNianJia = new BigDecimal(0);//所有年假天数
  776. BigDecimal hour_totalShiJia = new BigDecimal(0);//所有事假天数
  777. BigDecimal day_total_BingJia_hunjia_chanjia_peichanjia_sangjia = new BigDecimal(0);//所有,4病假,5婚假,6产假,7陪产假,8丧假 ,最小为0.5天
  778. // 记得有2个地方要加,如果还有别的类型的话,还有一个在审核的时候AddConfirmResultOffWork
  779. {
  780. record.setUpdatedAt(new Date());
  781. record.setCreatedAt(record.getUpdatedAt());
  782. record.setCreatedBy(ShiroUtils.getUser().getId());
  783. record.setUpdatedBy(record.getCreatedBy());
  784. record.setStatus(0);
  785. modelService.insert(record);
  786. String applyOffWorkTimeString = record.getApplyOffWorkTimeString();
  787. JSONArray jsonArray = JSONArray.parseArray(applyOffWorkTimeString);
  788. for (int i = 0; i < jsonArray.size(); i++) {
  789. JSONObject object = jsonArray.getJSONObject(i);
  790. ApplyOffWorkTime applyOffWorkTime = JSONObject.parseObject(object.toJSONString(), ApplyOffWorkTime.class);// 将string类型直接封装成对象
  791. if (applyOffWorkTime.getUseTime().doubleValue()<=0) {
  792. throw new RuntimeException("请假时间不能小于0小时");
  793. }
  794. applyOffWorkTime.setOffWorkId(record.getId());
  795. // 用到 `off_work_type` varchar(100) DEFAULT NULL COMMENT '请假类型(1年假,2事假,3调休)',
  796. // 用到 `time_unit` varchar(100) DEFAULT NULL COMMENT '请假消耗时间单位(天/小时)',
  797. // 用到 `use_time` decimal(10,2) DEFAULT NULL COMMENT '请假消耗时间',
  798. // `start_day` date DEFAULT NULL COMMENT '开始天',
  799. // `start_time` varchar(100) DEFAULT NULL COMMENT '开始上午/下午/全天/24小时如08:00',
  800. // `end_day` date DEFAULT NULL COMMENT '开始天',
  801. // `end_time` varchar(100) DEFAULT NULL COMMENT '开始上午/下午/全天/24小时如08:00',
  802. applyOffWorkTime.setUpdatedAt(new Date());
  803. applyOffWorkTime.setCreatedAt(applyOffWorkTime.getUpdatedAt());
  804. applyOffWorkTime.setCreatedBy(ShiroUtils.getUser().getId());
  805. applyOffWorkTime.setUpdatedBy(applyOffWorkTime.getCreatedBy());
  806. applyOffWorkTime.setStatus(0);
  807. applyOffWorkTimeService.insert(applyOffWorkTime);
  808. {//修改请假表,将请假表的对应数据添加冻结时间,并减去可用时间
  809. if (applyOffWorkTime.getOffWorkType().equals(1) || applyOffWorkTime.getOffWorkType().equals("1")) {//1年假
  810. day_totalNianJia = day_totalNianJia.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  811. } else if (applyOffWorkTime.getOffWorkType().equals(3) || applyOffWorkTime.getOffWorkType().equals("3")) {//3调休
  812. hour_totalTiaoXiu = hour_totalTiaoXiu.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  813. } else if (applyOffWorkTime.getOffWorkType().equals(2) || applyOffWorkTime.getOffWorkType().equals("2")) {//2事假
  814. hour_totalShiJia = hour_totalShiJia.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  815. } else if (applyOffWorkTime.getOffWorkType().equals(4) || applyOffWorkTime.getOffWorkType().equals("4") || applyOffWorkTime.getOffWorkType().equals(5) || applyOffWorkTime.getOffWorkType().equals("5")
  816. || applyOffWorkTime.getOffWorkType().equals(6) || applyOffWorkTime.getOffWorkType().equals("6") || applyOffWorkTime.getOffWorkType().equals(7) || applyOffWorkTime.getOffWorkType().equals("7")
  817. || applyOffWorkTime.getOffWorkType().equals(8) || applyOffWorkTime.getOffWorkType().equals("8")) {//4病假,5婚假,6产假,7陪产假,8丧假 ,最小为0.5天
  818. day_total_BingJia_hunjia_chanjia_peichanjia_sangjia = day_total_BingJia_hunjia_chanjia_peichanjia_sangjia.add(new BigDecimal(applyOffWorkTime.getUseTime().toString()), MathContext.DECIMAL32);
  819. }
  820. }
  821. }
  822. if (day_totalNianJia.doubleValue() > 0 || hour_totalTiaoXiu.doubleValue() > 0) {
  823. /**
  824. * 做一个方法,修改年假表的数据
  825. */
  826. holidayManagementService.updateTime(day_totalNianJia.doubleValue(), hour_totalTiaoXiu.doubleValue(), record.getCreatedBy());
  827. }
  828. }
  829. HashMap<String, Object> feeMoneyTotalMap = new HashMap<>();
  830. if (hour_totalTiaoXiu.doubleValue() > 0 && day_totalNianJia.doubleValue() <= 0 && hour_totalShiJia.doubleValue() <= 0 && day_total_BingJia_hunjia_chanjia_peichanjia_sangjia.doubleValue() <= 0) {
  831. //假别仅有调休假
  832. // String isExchangeOnly = conditionMap.get("isExchangeOnly").toString();
  833. // Integer applyDay = Integer.valueOf(conditionMap.get("applyDay").toString());
  834. feeMoneyTotalMap.put("isExchangeOnly", "yes");
  835. feeMoneyTotalMap.put("applyDay", 0);
  836. } else {
  837. BigDecimal addDay = hour_totalTiaoXiu.add(hour_totalShiJia).divide(new BigDecimal(ConstantFlowType.ONE_DAY_TIME), 2, BigDecimal.ROUND_HALF_UP);
  838. if (addDay.add(day_totalNianJia).add(day_total_BingJia_hunjia_chanjia_peichanjia_sangjia).doubleValue() > 3) {
  839. // 假期天数合计>3天
  840. feeMoneyTotalMap.put("isExchangeOnly", "no");
  841. feeMoneyTotalMap.put("applyDay", 4);
  842. } else {
  843. feeMoneyTotalMap.put("isExchangeOnly", "no");
  844. feeMoneyTotalMap.put("applyDay", 0);
  845. }
  846. }
  847. // feeMoneyTotalMap.put("billMoney", feeMoneyTotalDouble);
  848. String applyTheme = "" + ShiroUtils.getUser().getTruename() + "的请假申请单";
  849. AjaxResult ajaxResult = flowMainService.doFlowMain(applyTheme, record.getId(), addSystemRemark, record.getCcList(),
  850. ConstantFlowType.OFF_WORK_PROCESSDEFINE, ConstantFlowType.OFF_WORK_DEPLOYMENTID,
  851. feeMoneyTotalMap, ConstantFlowType.OFF_WORK_NAME, ConstantFlowType.OFF_WORK,ShiroUtils.getUser());
  852. if (ajaxResult.get("code").equals(1688)) {
  853. //表成功了 且已经审核完成
  854. // 需要进行后续的处理
  855. Boolean isEnd = true;//是否结束
  856. Boolean isAgree = true;//是否同意
  857. //添加业务信息(将请假信息中的修改掉,剩余年假,剩余调休,冻结年假,冻结调休都修改掉)
  858. if (isEnd) {
  859. String createdById = record.getCreatedBy();
  860. HolidayManagementExample holidayManagementExample = new HolidayManagementExample();
  861. holidayManagementExample.createCriteria().andUserIdEqualTo(createdById);
  862. List<HolidayManagement> holidayManagements = holidayManagementService.selectByExample(holidayManagementExample);
  863. if (holidayManagements.isEmpty()) {
  864. return result(0);
  865. }
  866. if (isAgree) {//如果是最后 并且同意了,就进行下面的操作,或者不同意就进行另一种操作,
  867. ApplyOffWorkTimeExample example = new ApplyOffWorkTimeExample();
  868. example.createCriteria().andOffWorkIdEqualTo(record.getId());
  869. List<ApplyOffWorkTime> applyOffWorkTimes = applyOffWorkTimeService.selectByExample(example);
  870. this.booleanIsAgree(holidayManagements,day_totalNianJia,hour_totalTiaoXiu,applyOffWorkTimes,createdById);
  871. } else {
  872. //如果是不同意
  873. {
  874. HolidayManagement holidayManagement = holidayManagements.get(0);
  875. if (day_totalNianJia.doubleValue() > 0) {//存在年假修改
  876. Double freezeHolidayTime = holidayManagement.getFreezeHolidayTime();
  877. double v = new BigDecimal(freezeHolidayTime).subtract(day_totalNianJia, MathContext.DECIMAL32).doubleValue();
  878. holidayManagement.setFreezeHolidayTime(v);
  879. Double restHolidayTime = holidayManagement.getRestHolidayTime();
  880. double v1 = new BigDecimal(restHolidayTime).add(day_totalNianJia, MathContext.DECIMAL32).doubleValue();
  881. holidayManagement.setRestHolidayTime(v1);
  882. }
  883. if (hour_totalTiaoXiu.doubleValue() > 0) {//存在调休假修改
  884. Double freezeExchangeTime = holidayManagement.getFreezeExchangeTime();
  885. double v = new BigDecimal(freezeExchangeTime).subtract(hour_totalTiaoXiu, MathContext.DECIMAL32).doubleValue();
  886. holidayManagement.setFreezeExchangeTime(v);
  887. Double restExchangeTime = holidayManagement.getRestExchangeTime();
  888. double v1 = new BigDecimal(restExchangeTime).add(hour_totalTiaoXiu, MathContext.DECIMAL32).doubleValue();
  889. holidayManagement.setRestExchangeTime(v1);
  890. }
  891. holidayManagement.setUpdatedBy(ShiroUtils.getUser().getId());
  892. holidayManagement.setUpdatedAt(new Date());
  893. holidayManagementService.updateByPrimaryKeySelective(holidayManagement);
  894. }
  895. }
  896. }
  897. return AjaxResult.success();
  898. }
  899. return ajaxResult;
  900. }
  901. @PostMapping(value = "list", produces = {"application/json;charset=UTF-8"})
  902. @ResponseBody
  903. public Object list(Tablepar tablepar, ApplyOffWork model, DateTrans dt) {
  904. PageInfo<ApplyOffWork> page = modelService.list(tablepar, model, dt);
  905. TableSplitResult<ApplyOffWork> result = new TableSplitResult<ApplyOffWork>(page.getPageNum(), page.getTotal(), page.getList());
  906. return result;
  907. }
  908. @PostMapping(value = "listAll", produces = {"application/json;charset=UTF-8"})
  909. @ResponseBody
  910. public Object listAll(ApplyOffWork model, DateTrans dt) {
  911. return modelService.listAll(model, dt);
  912. }
  913. @PostMapping(value = "add", produces = {"application/json;charset=UTF-8"})
  914. @ResponseBody
  915. public AjaxResult add(ApplyOffWork record) {
  916. record.setCreatedAt(new Date());
  917. int result = modelService.insert(record);
  918. return result(result);
  919. }
  920. @PostMapping(value = "remove/{id}", produces = {"application/json;charset=UTF-8"})
  921. @ResponseBody
  922. public AjaxResult remove(@PathVariable("id") String id) {
  923. int result = modelService.deleteByPrimaryKey(id);
  924. return result(result);
  925. }
  926. @PostMapping(value = "edit", produces = {"application/json;charset=UTF-8"})
  927. @ResponseBody
  928. public AjaxResult editSave(ApplyOffWork model) {
  929. int result = modelService.updateByPrimaryKeySelective(model);
  930. return result(result);
  931. }
  932. @PostMapping(value = "getById", produces = {"application/json;charset=UTF-8"})
  933. @ResponseBody
  934. public ApplyOffWork getById(String id) {
  935. return modelService.selectByPrimaryKey(id);
  936. }
  937. }