ApplyLxWorkController.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. package com.idea.oa.apply.controller;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.idea.oa.apply.model.ApplyAddWorkTime;
  5. import com.idea.oa.apply.model.ApplyAddWorkTimeExample;
  6. import com.idea.oa.apply.model.ApplyWorkReceivable;
  7. import com.idea.oa.apply.model.ApplyWorkReceivableExample;
  8. import com.idea.oa.apply.model.inout.AddConfirmResult;
  9. import com.idea.oa.apply.model.inout.ApplyAddLxWorkIn;
  10. import com.idea.oa.apply.model.inout.ApplyAddWorkIn;
  11. import com.idea.oa.apply.service.ApplyAddWorkService;
  12. import com.idea.oa.apply.service.ApplyAddWorkTimeService;
  13. import com.idea.oa.apply.service.ApplyLxWorkService;
  14. import com.idea.oa.apply.service.ApplyWorkReceivableService;
  15. import com.idea.oa.apply.util.constant.ConstantFlowType;
  16. import com.idea.oa.flow2.model.FlowMain;
  17. import com.idea.oa.flow2.model.FlowMainPush;
  18. import com.idea.oa.flow2.model.in.FlowMainCcVo;
  19. import com.idea.oa.flow2.service.FlowMainCcService;
  20. import com.idea.oa.flow2.service.FlowMainPushService;
  21. import com.idea.oa.flow2.service.FlowMainService;
  22. import com.idea.oa.outsource.model.OutOrderPay;
  23. import com.idea.oa.project.model.ProApproval;
  24. import com.idea.oa.project.model.ProMain;
  25. import com.idea.oa.project.service.ProApprovalService;
  26. import com.idea.oa.project.service.ProMainService;
  27. import com.rockstar.common.base.BaseController;
  28. import com.rockstar.common.domain.AjaxResult;
  29. import com.rockstar.frame.service.FrameUserService;
  30. import com.rockstar.shiro.util.ShiroUtils;
  31. import com.rockstar.util.UUIDUtils;
  32. import io.swagger.annotations.Api;
  33. import org.activiti.engine.impl.util.Activiti5Util;
  34. import org.springframework.beans.BeanUtils;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.stereotype.Controller;
  37. import org.springframework.transaction.annotation.Transactional;
  38. import org.springframework.util.StringUtils;
  39. import org.springframework.web.bind.annotation.PostMapping;
  40. import org.springframework.web.bind.annotation.RequestMapping;
  41. import org.springframework.web.bind.annotation.ResponseBody;
  42. import java.math.BigDecimal;
  43. import java.math.MathContext;
  44. import java.util.Date;
  45. import java.util.HashMap;
  46. import java.util.List;
  47. import java.util.Map;
  48. /**
  49. * Created by py on 2023
  50. */
  51. @Controller
  52. @RequestMapping(value = "/ApplyLxWorkController")
  53. @Api(value = "分表_立项申请_灵锡")
  54. public class ApplyLxWorkController extends BaseController {
  55. // @Autowired
  56. // private WorkAttendanceLogService workAttendanceLogService;
  57. // @Autowired
  58. // private HolidayManagementService holidayManagementService;
  59. //主表
  60. @Autowired
  61. private ApplyLxWorkService modelService;
  62. @Autowired
  63. private ApplyWorkReceivableService applyWorkReceivableService;
  64. @Autowired
  65. private ProApprovalService proApprovalService;
  66. @Autowired
  67. private FlowMainPushService flowMainPushService;
  68. @Autowired
  69. private FlowMainService flowMainService;
  70. @Autowired
  71. private ProMainService proMainService;
  72. @Autowired
  73. private FrameUserService frameUserService;
  74. /**
  75. * 添加审核结果
  76. * 根据不同的状态值confirmResult判断是 1:审核通过,转下一步;2:退回发起人;3:退回上节点;4:结束流程;
  77. *
  78. * @param addConfirmResult
  79. * @return
  80. */
  81. @PostMapping(value = "AddConfirmResultAddWork", produces = {"application/json;charset=UTF-8"})
  82. @ResponseBody
  83. @Transactional
  84. public AjaxResult AddConfirmResultAddWork(AddConfirmResult addConfirmResult) throws com.rockstar.flow.exception.FlowException {
  85. System.out.println("AddConfirmResultAddWork");
  86. System.out.println(addConfirmResult);
  87. if (addConfirmResult.getConfirmResult() == null) {
  88. return result(-1);
  89. }
  90. // String deploymentid = ConstantFlowType.USE_MONEY_DEPLOYMENTID;
  91. // String constantFlowType = ConstantFlowType.USE_MONEY;
  92. FlowMainPush flowMainPush = flowMainPushService.selectByPrimaryKey(addConfirmResult.getFlowMainPushId());
  93. String isOkString = null;
  94. {//进行审核判断
  95. //添加判断条件
  96. HashMap<String, Object> feeMoneyTotalMap = null;//new HashMap<>();
  97. // if (totalTiaoXiu.doubleValue() > 0 && totalNianJia.doubleValue() <= 0 && totalShiJia.doubleValue() <= 0) {
  98. // //假别仅有调休假
  99. //// String isExchangeOnly = conditionMap.get("isExchangeOnly").toString();
  100. //// Integer applyDay = Integer.valueOf(conditionMap.get("applyDay").toString());
  101. // feeMoneyTotalMap.put("isExchangeOnly", "yes");
  102. // feeMoneyTotalMap.put("applyDay", 0);
  103. // } else if (totalTiaoXiu.add(totalNianJia).add(totalShiJia).doubleValue() > 3) {
  104. //// 假期天数合计>3天
  105. // feeMoneyTotalMap.put("isExchangeOnly", "no");
  106. // feeMoneyTotalMap.put("applyDay", 4);
  107. // } else {
  108. // feeMoneyTotalMap.put("isExchangeOnly", "no");
  109. // feeMoneyTotalMap.put("applyDay", 0);
  110. // }
  111. isOkString = flowMainService.doConfirmResult(addConfirmResult, ConstantFlowType.LX_WORK_DEPLOYMENTID, ConstantFlowType.LX_WORK, flowMainPush, feeMoneyTotalMap);
  112. if (!"ok_end".equals(isOkString) && !"ok_noEnd".equals(isOkString)) {
  113. return AjaxResult.error(isOkString);
  114. }
  115. }
  116. Boolean isEnd = false;//是否结束
  117. Boolean isAgree = false;//是否同意
  118. if (addConfirmResult.getConfirmResult().equals("4")) {//结束流程
  119. isEnd = true;
  120. isAgree = false;
  121. } else if (addConfirmResult.getConfirmResult().equals("1")) {//1:审核通过,转下一步
  122. if ("ok_end".equals(isOkString)) {
  123. isEnd = true;
  124. isAgree = true;
  125. }
  126. }
  127. //添加业务信息
  128. if (isEnd&&isAgree) {
  129. // 修改项目立项状态
  130. modelService.updateInfo(flowMainPush.getFormId());
  131. }
  132. return result(1);
  133. }
  134. /**
  135. * 发起立项申请流程
  136. *
  137. * @param record
  138. * @return
  139. */
  140. @PostMapping(value = "addApplyLxWork", produces = {"application/json;charset=UTF-8"})
  141. @ResponseBody
  142. @Transactional
  143. public AjaxResult addApplyLxWork(ApplyAddLxWorkIn record) throws com.rockstar.flow.exception.FlowException {
  144. System.out.println("addApplyLxWork");
  145. System.out.println(record);
  146. if (false) {
  147. return AjaxResult.error("这是一个错误测试信息");
  148. }
  149. return myaddApplyPayment(record,null);
  150. }
  151. /**
  152. * 申请人重新发起申请
  153. *
  154. * @param record
  155. * @return
  156. */
  157. @PostMapping(value = "addApplyLxWorkAgain", produces = {"application/json;charset=UTF-8"})
  158. @ResponseBody
  159. @Transactional
  160. public AjaxResult addApplyLxWorkAgain(ApplyAddLxWorkIn record) throws com.rockstar.flow.exception.FlowException {
  161. System.out.println("addApplyLxWorkAgain");
  162. if (StringUtils.isEmpty(record.getFlowMainId())) {
  163. return AjaxResult.error("没有传入flowMainId的值");
  164. }
  165. System.out.println(record);
  166. // record.setRemark("重新发起申请[" + record.getFlowMainId() + "],");
  167. {//修改重新发起前的表状态
  168. FlowMain flowMain1 = new FlowMain();
  169. flowMain1.setId(record.getFlowMainId());
  170. flowMain1.setReturnStatus(1);//0/null无状态,1已撤回并且已重新发起
  171. flowMain1.setUpdatedAt(new Date());
  172. flowMain1.setUpdatedBy(ShiroUtils.getUser().getId());
  173. flowMainService.updateByPrimaryKeySelective(flowMain1);
  174. }
  175. return myaddApplyPayment(record,"重新发起申请[" + record.getFlowMainId() + "],");
  176. }
  177. /**
  178. * 发起请假申请流程
  179. *
  180. * @param record
  181. * @return
  182. */
  183. public AjaxResult myaddApplyPayment(ApplyAddLxWorkIn record,String addSystemRemark) throws com.rockstar.flow.exception.FlowException {
  184. String id = UUIDUtils.middleUUID();
  185. record.setId(id);
  186. ProApproval approvalJsonObject = null;
  187. JSONArray receivableList = new JSONArray();
  188. Date currentDate =new Date();
  189. String approveId = UUIDUtils.middleUUID();
  190. //立项内容
  191. if(com.rockstar.util.StringUtils.isNotEmpty(record.getApprovalForm())){
  192. approvalJsonObject = JSONObject.parseObject(record.getApprovalForm(), ProApproval.class);
  193. if(StringUtils.isEmpty(approvalJsonObject.getId())){ //add
  194. approvalJsonObject.setId(approveId);
  195. approvalJsonObject.setCreatedAt(currentDate);
  196. proApprovalService.insert(approvalJsonObject);
  197. }else{ //edit
  198. approveId = approvalJsonObject.getId();
  199. proApprovalService.updateByPrimaryKeySelective(approvalJsonObject);
  200. }
  201. }
  202. //回款计划
  203. if(com.rockstar.util.StringUtils.isNotEmpty(record.getWorkReceivableForm())){
  204. receivableList = JSONArray.parseArray(record.getWorkReceivableForm());
  205. ApplyWorkReceivableExample applyWorkReceivableExample = new ApplyWorkReceivableExample();
  206. applyWorkReceivableExample.createCriteria().andProidEqualTo(record.getProId());
  207. applyWorkReceivableService.deleteByExample(applyWorkReceivableExample);
  208. }
  209. record.setApprovalId(approveId);
  210. record.setUpdatedAt(new Date());
  211. record.setCreatedAt(record.getUpdatedAt());
  212. record.setCreatedBy(ShiroUtils.getUser().getId());
  213. record.setUpdatedBy(record.getCreatedBy());
  214. record.setStatus(0);
  215. modelService.insert(record);
  216. for (int i = 0; i < receivableList.size(); i++) {
  217. JSONObject object = receivableList.getJSONObject(i);
  218. ApplyWorkReceivable applyWorkReceivable = JSONObject.parseObject(object.toJSONString(), ApplyWorkReceivable.class);// 将string类型直接封装成对象
  219. applyWorkReceivable.setProid(record.getProId());
  220. applyWorkReceivable.setCreatedat(new Date());
  221. applyWorkReceivableService.insert(applyWorkReceivable);
  222. }
  223. ProMain proMain = proMainService.selectVoByPrimaryKey(record.getProId());
  224. proMain.setRealValidStatus("1"); //立项待审核
  225. proMainService.updateByPrimaryKey(proMain);
  226. HashMap<String, Object> feeMoneyTotalMap = null;//new HashMap<>();
  227. String applyTheme = "" + record.getProName() + "立项申请";
  228. AjaxResult ajaxResult = flowMainService.doFlowMain(applyTheme, id, addSystemRemark, record.getCcList(),
  229. ConstantFlowType.LX_WORK_PROCESSDEFINE, ConstantFlowType.LX_WORK_DEPLOYMENTID,
  230. feeMoneyTotalMap, ConstantFlowType.LX_WORK_NAME, ConstantFlowType.LX_WORK,ShiroUtils.getUser());
  231. if (ajaxResult.get("code").equals(1688)) {
  232. //表成功了 且已经审核完成
  233. // 需要进行后续的处理
  234. Boolean isEnd = true;//是否结束
  235. Boolean isAgree = true;//是否同意
  236. //添加业务信息(将请假信息中的修改掉,剩余年假,剩余调休,冻结年假,冻结调休都修改掉)
  237. if (isEnd) {
  238. /*String createdById = record.getCreatedBy();
  239. HolidayManagementExample holidayManagementExample = new HolidayManagementExample();
  240. holidayManagementExample.createCriteria().andUserIdEqualTo(createdById);
  241. List<HolidayManagement> holidayManagements = holidayManagementService.selectByExample(holidayManagementExample);
  242. if (holidayManagements.isEmpty()) {
  243. // 添加holidayManagements信息
  244. FrameUser frameUser = frameUserService.selectByPrimaryKey(createdById);
  245. HolidayManagement entity = new HolidayManagement();
  246. entity.setId(UUIDUtils.middleUUID());
  247. entity.setUserId(createdById);
  248. entity.setJoinDay(frameUser.getCreatedat());
  249. entity.setStatus(0);//状态0正常,1删除,2禁用
  250. entity.setIsFirst(1);//是否是第一次录入管理1是,0不是
  251. entity.setCreatedAt(new Date());
  252. entity.setUpdatedAt(entity.getCreatedAt());
  253. entity.setCreatedBy(ShiroUtils.getUser().getId());
  254. entity.setUpdatedBy(entity.getCreatedBy());
  255. int insert = holidayManagementService.insertWithoutId(entity);
  256. holidayManagements.add(entity);
  257. }
  258. if (isAgree) {//如果是最后 并且同意了,就进行下面的操作,或者不同意就进行另一种操作,
  259. ApplyAddWorkTimeExample example = new ApplyAddWorkTimeExample();
  260. example.createCriteria().andAddWorkIdEqualTo(record.getId());
  261. List<ApplyAddWorkTime> applyAddWorkTimes = applyAddWorkTimeService.selectByExample(example);
  262. this.booleanIsAgree(totalAddTime,holidayManagements,applyAddWorkTimes,createdById);
  263. } else {
  264. //如果是不同意
  265. {
  266. // 不需要做什么
  267. }
  268. }*/
  269. }
  270. return AjaxResult.success();
  271. } else {
  272. return ajaxResult;
  273. }
  274. }
  275. /**
  276. * 审核或申请结束且同意的情况下进行的处理
  277. */
  278. /* public void booleanIsAgree(BigDecimal totalAddTime,List<HolidayManagement> holidayManagements,List<ApplyAddWorkTime> applyAddWorkTimes,String createdById){
  279. //如果是同意了
  280. {
  281. HolidayManagement holidayManagement = holidayManagements.get(0);
  282. if (totalAddTime.doubleValue() > 0) {//存在加班修改
  283. Double restExchangeTime = holidayManagement.getRestExchangeTime();
  284. // Double restHolidayTime = holidayManagement.getRestHolidayTime();
  285. double v = new BigDecimal(restExchangeTime).add(totalAddTime, MathContext.DECIMAL32).doubleValue();
  286. holidayManagement.setRestExchangeTime(v);
  287. }
  288. holidayManagement.setUpdatedBy(ShiroUtils.getUser().getId());
  289. holidayManagement.setUpdatedAt(new Date());
  290. holidayManagementService.updateByPrimaryKeySelective(holidayManagement);
  291. }
  292. {//审核通过后 在oa_work_attendance_log表中添加记录
  293. for (ApplyAddWorkTime applyAddWorkTime : applyAddWorkTimes) {
  294. WorkAttendanceLog workAttendanceLog = new WorkAttendanceLog();
  295. // //=========================下面是重要的数据
  296. // user_id varchar (64) DEFAULT NULL COMMENT '用户id 姓名/部门/岗位',
  297. // `do_day`date DEFAULT NULL COMMENT '发生的日期',
  298. // `happen_type` int(4) DEFAULT NULL COMMENT
  299. // '1年假,2调休,3事假,4病假,5婚假,6产假,7陪产假,8丧假,9加班,10迟到,11早退,12旷工,13外出,14居家,15出差',
  300. // //=========================上面是重要的数据
  301. // do_start_time datetime DEFAULT NULL COMMENT '发生开始时间',
  302. // do_end_time datetime DEFAULT NULL COMMENT '发生结束时间',
  303. // `use_time`decimal(5, 2) DEFAULT NULL COMMENT '消耗时间(比如加班/调休时间小时)',
  304. // from_table_id varchar(64) DEFAULT NULL COMMENT '来源表id',
  305. // from_table_name varchar(64) DEFAULT NULL COMMENT '来源表名称',
  306. workAttendanceLog.setUserId(createdById);
  307. workAttendanceLog.setDoDay(applyAddWorkTime.getStartDay());
  308. workAttendanceLog.setHappenType(9);//'1年假,2调休,3事假,4病假,5婚假,6产假,7陪产假,8丧假,9加班,10迟到,11早退,12旷工,13外出,14居家,15出差',
  309. workAttendanceLog.setDoStartTime(applyAddWorkTime.getStartTime());
  310. workAttendanceLog.setDoEndTime(applyAddWorkTime.getEndTime());
  311. workAttendanceLog.setUseTime(applyAddWorkTime.getUseTime());
  312. workAttendanceLog.setFromTableId(applyAddWorkTime.getId());
  313. workAttendanceLog.setFromTableName("apply_add_work_time");
  314. workAttendanceLog.setCreatedBy(ShiroUtils.getUser().getId());
  315. workAttendanceLog.setCreatedAt(new Date());
  316. workAttendanceLog.setStatus(0);
  317. workAttendanceLog.setUpdatedAt(workAttendanceLog.getCreatedAt());
  318. workAttendanceLog.setUpdatedBy(workAttendanceLog.getCreatedBy());
  319. int result = workAttendanceLogService.insert(workAttendanceLog);
  320. }
  321. }
  322. }*/
  323. /**
  324. * 根据推送表的FlowMainPushId获取信息
  325. *
  326. * @param flowMainPushId
  327. * @return
  328. */
  329. @PostMapping(value = "getInfoByFlowMainPushId", produces = {"application/json;charset=UTF-8"})
  330. @ResponseBody
  331. public ApplyAddLxWorkIn getInfoByFlowMainPushId(String flowMainPushId) {
  332. ApplyAddLxWorkIn myApplyLxWorkIn = modelService.getInfoByFlowMainPushId(flowMainPushId);
  333. return myApplyLxWorkIn;
  334. }
  335. /**
  336. * 根据主表的FlowMainId获取信息
  337. *
  338. * @param flowMainId
  339. * @return
  340. */
  341. @PostMapping(value = "getInfoByFlowMainId", produces = {"application/json;charset=UTF-8"})
  342. @ResponseBody
  343. public ApplyAddLxWorkIn getInfoByFlowMainId(String flowMainId) {
  344. ApplyAddLxWorkIn myApplyLxWorkIn = modelService.getInfoByFlowMainId(flowMainId);
  345. if (myApplyLxWorkIn != null) {
  346. ProApproval proApproval = proApprovalService.selectByPrimaryKey(myApplyLxWorkIn.getApprovalId());
  347. myApplyLxWorkIn.setApproval(proApproval);
  348. ApplyWorkReceivableExample example = new ApplyWorkReceivableExample();
  349. example.createCriteria().andProidEqualTo(myApplyLxWorkIn.getProId());
  350. List<ApplyWorkReceivable> applyWorkReceivables = applyWorkReceivableService.selectByExample(example);
  351. myApplyLxWorkIn.setApplyWorkReceivables(applyWorkReceivables);
  352. }
  353. return myApplyLxWorkIn;
  354. }
  355. /**
  356. * 根据用户id获取用户姓名和部门名称,岗位信息
  357. *
  358. * @param userId
  359. * @return
  360. */
  361. // @PostMapping(value = "getUserInfoByUserId", produces = {"application/json;charset=UTF-8"})
  362. // @ResponseBody
  363. // public Map<String, Object> getUserInfoByUserId(String userId) {
  364. // if (StringUtils.isEmpty(userId)) {
  365. // userId = ShiroUtils.getUser().getId();
  366. // }
  367. // return modelService.getUserInfoByUserId(userId);
  368. // }
  369. //=====下面原生的=============================================================================================================
  370. // @PostMapping(value = "list",produces = {"application/json;charset=UTF-8"})
  371. // @ResponseBody
  372. // public Object list(Tablepar tablepar, ApplyAddWork model, DateTrans dt){
  373. // PageInfo<ApplyAddWork> page= modelService.list(tablepar,model,dt);
  374. // TableSplitResult<ApplyAddWork> result=new TableSplitResult<ApplyAddWork>(page.getPageNum(), page.getTotal(), page.getList());
  375. // return result;
  376. // }
  377. //
  378. // @PostMapping(value = "listAll",produces = {"application/json;charset=UTF-8"})
  379. // @ResponseBody
  380. // public Object listAll(ApplyAddWork model, DateTrans dt){
  381. // return modelService.listAll(model,dt);
  382. // }
  383. //
  384. // @PostMapping(value = "add",produces = {"application/json;charset=UTF-8"})
  385. // @ResponseBody
  386. // public AjaxResult add(ApplyAddWork record){
  387. // record.setCreatedAt(new Date());
  388. // int result = modelService.insert(record);
  389. // return result(result);
  390. // }
  391. //
  392. // @PostMapping(value = "remove/{id}",produces = {"application/json;charset=UTF-8"})
  393. // @ResponseBody
  394. // public AjaxResult remove(@PathVariable("id") String id){
  395. // int result = -1;//modelService.deleteByPrimaryKey(id);
  396. // return result(result);
  397. // }
  398. //
  399. // @PostMapping(value = "edit",produces = {"application/json;charset=UTF-8"})
  400. // @ResponseBody
  401. // public AjaxResult editSave(ApplyAddWork model){
  402. // int result = modelService.updateByPrimaryKeySelective(model);
  403. // return result(result);
  404. // }
  405. //
  406. // @PostMapping(value = "getById",produces = {"application/json;charset=UTF-8"})
  407. // @ResponseBody
  408. // public ApplyAddWork getById(String id) {
  409. // return modelService.selectByPrimaryKey(id);
  410. // }
  411. }