/** * Copyright © 2015-2020 JeePlus All rights reserved. */ package com.jeeplus.modules.leaveapply.service; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import com.google.common.collect.Maps; import com.jeeplus.common.json.AjaxJson; import com.jeeplus.common.utils.DateUtils; import com.jeeplus.common.utils.MenuStatusEnum; import com.jeeplus.common.utils.StringUtils; import com.jeeplus.modules.act.service.ActTaskService; import com.jeeplus.modules.leaveapply.dao.LeaveCountDao; import com.jeeplus.modules.leaveapply.dao.LeaveDetailDao; import com.jeeplus.modules.leaveapply.entity.LeaveCount; import com.jeeplus.modules.leaveapply.entity.LeaveDetail; import com.jeeplus.modules.leavetype.dao.LeaveTypeDao; import com.jeeplus.modules.leavetype.entity.LeaveType; import com.jeeplus.modules.serialnum.service.SerialNumTplService; import com.jeeplus.modules.sys.dao.OfficeDao; import com.jeeplus.modules.sys.dao.UserDao; import com.jeeplus.modules.sys.entity.Office; import com.jeeplus.modules.sys.entity.User; import com.jeeplus.modules.sys.utils.UserUtils; import com.jeeplus.modules.utils.ErrorCode; import com.jeeplus.modules.workactivity.dao.WorkActivityProcessDao; import com.jeeplus.modules.workactivity.entity.Activity; import com.jeeplus.modules.workactivity.entity.WorkActivityProcess; import com.jeeplus.modules.workactivity.service.ActivityService; import com.jeeplus.modules.workactivity.service.WorkActivityProcessService; import com.jeeplus.modules.workactivitymenu.entity.WorkActivityMenu; import com.jeeplus.modules.workactivitymenu.service.WorkActivityMenuService; import com.jeeplus.modules.workattendance.dao.WorkAttendanceInfoDao; import com.jeeplus.modules.workattendance.entity.WorkAttendanceInfo; import com.jeeplus.modules.workattendance.entity.WorkAttendanceMonth; import com.jeeplus.modules.workattendance.entity.WorkAttendanceRule; import com.jeeplus.modules.workattendance.service.WorkAttendanceInfoService; import com.jeeplus.modules.workattendance.service.WorkAttendanceRuleService; import com.jeeplus.modules.workborrowmangement.entity.WorkBorrowMangement; import com.jeeplus.modules.workcalendar.service.WorkCalendarService; import com.jeeplus.modules.workclientinfo.dao.WorkClientAttachmentDao; import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment; import com.jeeplus.modules.workitem.entity.WorkItem; import com.jeeplus.modules.workitemcollar.entity.WorkItemCollar; import com.jeeplus.modules.workitemcollar.entity.WorkItemCollarCatalog; import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify; import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService; import com.jeeplus.modules.workprojectnotify.util.UtilNotify; import com.jeeplus.modules.workstaff.dao.WorkStaffAchivesDao; import com.jeeplus.modules.workstaff.entity.WorkStaffBasicInfo; import org.activiti.engine.HistoryService; import org.activiti.engine.IdentityService; import org.activiti.engine.RuntimeService; import org.activiti.engine.runtime.ProcessInstance; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jeeplus.common.persistence.Page; import com.jeeplus.common.service.CrudService; import com.jeeplus.modules.leaveapply.entity.LeaveApply; import com.jeeplus.modules.leaveapply.dao.LeaveApplyDao; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 请假申请Service * @author ssrh * @version 2018-09-10 */ @Service @Transactional(readOnly = true) public class LeaveApplyService extends CrudService { @Autowired private WorkStaffAchivesDao workStaffAchivesDao; @Autowired private LeaveDetailDao leaveDetailDao; @Autowired private WorkProjectNotifyService workProjectNotifyService; @Autowired private IdentityService identityService; @Autowired private ActTaskService actTaskService; @Autowired private WorkActivityMenuService workActivityMenuService; @Autowired private RuntimeService runtimeService; @Autowired private WorkActivityProcessService workActivityProcessService; @Autowired private ActivityService activityService; @Autowired protected HistoryService historyService; @Autowired private WorkActivityProcessDao workActivityProcessDao; @Autowired private SerialNumTplService serialNumTplService; @Autowired private UserDao userDao; @Autowired private WorkCalendarService workCalendarService; @Autowired private OfficeDao officeDao; @Autowired @Lazy private WorkAttendanceInfoService workAttendanceInfoService; @Autowired @Lazy private WorkAttendanceRuleService workAttendanceRuleService; @Autowired private WorkClientAttachmentDao workClientAttachmentDao; @Autowired private WorkAttendanceInfoDao workAttendanceInfoDao; @Autowired private LeaveCountService leaveCountService; @Autowired private LeaveCountDao leaveCountDao; @Autowired private LeaveTypeDao leaveTypeDao; public LeaveApply get(String id) { LeaveApply leaveApply = super.get(id); if(leaveApply!=null){ //附件 WorkClientAttachment workClientAttachment = new WorkClientAttachment(); workClientAttachment.setAttachmentId(id); workClientAttachment.setAttachmentFlag("114"); leaveApply.setWorkAttachments(workClientAttachmentDao.findList(workClientAttachment)); } return leaveApply; } public List findList(LeaveApply leaveApply) { // leaveApply.setCreateBy(UserUtils.getUser()); leaveApply.getSqlMap().put("dsf", dataScopeFilter(leaveApply.getCurrentUser(), "o", "u","s", MenuStatusEnum.WORK_LEAVE.getValue())); return super.findList(leaveApply); } public LeaveApply getByStaffIdAndTime(String staffId, String time) { LeaveApply leaveApply = dao.getByStaffIdAndTime(staffId, time); return leaveApply; } public Page findPage(Page page, LeaveApply leaveApply) { leaveApply.setPage(page); page.setList(findList(leaveApply)); return page; } public List getCount() { WorkStaffBasicInfo workStaffBasicInfo = this.getBasicInfo(); LeaveApply leaveApply = new LeaveApply(); leaveApply.setBasicInfo(workStaffBasicInfo); List list = dao.getCount(leaveApply); return list; } //当前登录人档案 public WorkStaffBasicInfo getBasicInfo() { WorkStaffBasicInfo w = new WorkStaffBasicInfo(); w.setUserId(UserUtils.getUser().getId()); w.setCompany(UserUtils.getSelectCompany()); WorkStaffBasicInfo workStaffBasicInfo = workStaffAchivesDao.getBasicInfo(w); return workStaffBasicInfo; } //获取最后一次请假结束时间 public String getMaxTime(String staffId,String id) { return dao.getMaxTime(staffId,id); } //请假 @Transactional(readOnly = false) public void save(LeaveApply leaveApply) { super.save(leaveApply); updateLeaveDetail(leaveApply); updateFile(leaveApply); } //续假 @Transactional(readOnly = false) public void saveExtend(LeaveApply leaveApply) { super.save(leaveApply); updateExtendDetail(leaveApply); updateFile(leaveApply); } @Transactional(readOnly = false) public void updateFile(LeaveApply leaveApply) { //附件信息 for (WorkClientAttachment workClientAttachment : leaveApply.getWorkAttachments()) { if (workClientAttachment.getId() == null) { continue; } if (WorkClientAttachment.DEL_FLAG_NORMAL.equals(workClientAttachment.getDelFlag())) { workClientAttachment.setAttachmentId(leaveApply.getId()); workClientAttachment.setAttachmentFlag("114"); workClientAttachment.setAttachmentUser(UserUtils.getUser().getId()); if (StringUtils.isBlank(workClientAttachment.getId()) || "null".equals(workClientAttachment.getId())) { workClientAttachment.preInsert(); workClientAttachmentDao.insert(workClientAttachment); } else { workClientAttachment.preUpdate(); workClientAttachmentDao.update(workClientAttachment); } } else { workClientAttachmentDao.delete(workClientAttachment); } } } @Transactional(readOnly = false) public void updateLeaveDetail(LeaveApply leaveApply) { if (leaveApply.getLeaveDetailList() != null && leaveApply.getLeaveDetailList().size() > 0) { for (LeaveDetail leaveDetail : leaveApply.getLeaveDetailList()) { if (StringUtils.isBlank(leaveDetail.getId())) { leaveDetail.preInsert(); leaveDetail.setLeaveId(leaveApply.getId()); leaveDetail.setFlat("1");//请假 leaveDetail.setState("0");//请假 leaveDetail.setIsUse("0");//有效 leaveDetail.setRealDays(leaveDetail.getDays()); leaveDetail.setRealEndTime(leaveDetail.getEndTime()); leaveDetail.setRealEndType(leaveDetail.getEndType()); if (StringUtils.isNotBlank(leaveApply.getId())) { leaveDetailDao.insert(leaveDetail); } } else { if("1".equals(leaveDetail.getStartType())||"2".equals(leaveDetail.getStartType())){ leaveDetail.preUpdate(); leaveDetail.setLeaveId(leaveApply.getId()); if (StringUtils.isNotBlank(leaveApply.getId())) { leaveDetailDao.update(leaveDetail); } } } } } } @Transactional(readOnly = false) public void updateExtendDetail(LeaveApply leaveApply) { if (leaveApply.getLeaveDetailList() != null && leaveApply.getLeaveDetailList().size() > 0) { for (LeaveDetail leaveDetail : leaveApply.getLeaveDetailList()) { if (StringUtils.isBlank(leaveDetail.getId())) { leaveDetail.preInsert(); leaveDetail.setFlat("2");//续假 leaveDetail.setState("1");// leaveDetail.setIsUse("0");//有效 leaveDetail.setRealDays(leaveDetail.getDays()); leaveDetail.setRealEndTime(leaveDetail.getEndTime()); leaveDetail.setRealEndType(leaveDetail.getEndType()); leaveDetail.setLeaveId(leaveApply.getId()); if (StringUtils.isNotBlank(leaveApply.getId())) { leaveDetailDao.insert(leaveDetail); } } else { if("1".equals(leaveDetail.getStartType())||"2".equals(leaveDetail.getStartType())){ leaveDetail.preUpdate(); leaveDetail.setLeaveId(leaveApply.getId()); if (StringUtils.isNotBlank(leaveApply.getId())) { leaveDetailDao.update(leaveDetail); } } } } } } @Transactional(readOnly = false) public void delete(LeaveApply leaveApply) { super.delete(leaveApply); //删除子表数据 if (leaveApply.getLeaveDetailList() != null && leaveApply.getLeaveDetailList().size() > 0) { for (LeaveDetail leaveDetail : leaveApply.getLeaveDetailList()) { leaveDetailDao.delete(leaveDetail); } } WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); List users = workProjectNotifyService.readByNotifyId(notify); if (users != null && users.size() != 0) { for (User user : users) { UserUtils.pushMeIm(user.getId()); } } } @Transactional(readOnly = false) public String saveBorrow(LeaveApply leaveApply) { if (StringUtils.isBlank(leaveApply.getNo())) { leaveApply.setNo(serialNumTplService.genSerialNum(UserUtils.getUser().getCompany(), "30")); } if (StringUtils.isBlank(leaveApply.getOfficeId())) { leaveApply.setOfficeId(UserUtils.getSelectOffice().getId()); } if (leaveApply.getCompanyId() == null || StringUtils.isBlank(leaveApply.getCompanyId())) { leaveApply.setCompanyId(UserUtils.getSelectCompany().getId()); } this.save(leaveApply); return this.startAudit(leaveApply, leaveApply.getProcessInstanceId()); } /** * 请假启动审批流程 */ @Transactional(readOnly = false) public String startAudit(LeaveApply leaveApply, String processInstanceId) { try { Map variables = new HashMap(); identityService.setAuthenticatedUserId(leaveApply.getCurrentUser().getId()); User createUser = UserUtils.getUser(); String contentStr = "请假编号:" + leaveApply.getNo() + ",请假日期:" + DateUtils.formatDate(leaveApply.getApplyTime()); String titleStr = "请假人:" + userDao.get(leaveApply.getApplyer()).getName(); String businessKey = leaveApply.getId(); Office office = UserUtils.getSelectOffice(); WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("zzsql3125f1f194c8lz88a9miiii75090455", office); // 启动流程 String processType = workActivityMenu.getProcessType(); StringBuffer buffer = new StringBuffer(); Activity activity = new Activity(); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), null, leaveApply.getCompanyId(), titleStr, contentStr, "80", "0", "待审批", ""); List users = new ArrayList<>(); // 部门责任人 List bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy()); // 分管领导 List fgldList = UserUtils.getByRoleActivityEnname("fgld", 2, office.getId(), "25", leaveApply.getCreateBy()); // 总经理 List zjlList = UserUtils.getByRoleActivityEnname("zjl", 3, office.getId(), "25", leaveApply.getCreateBy()); if (StringUtils.isNotBlank(workActivityMenu.getId())) { workProjectNotify.setNotifyRole(""); workActivityMenu = workActivityMenuService.get(workActivityMenu.getId()); List activities = workActivityMenu.getActivities(); for (Activity a : activities) { String encount = a.getEncount(); String enlist = a.getEnlist(); if (a.getRole() != null && StringUtils.isNotBlank(a.getRole().getEnname())) { List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(), office.getId(), "25", leaveApply.getCreateBy()); if (enusers.size() == 0) { leaveApply.setStatus("1"); this.save(leaveApply); return "流程审批人不能为空,角色" + a.getRole().getName() + "下无用户,请联系管理员!"; } variables.put(enlist, enusers); variables.put(encount, enusers.size()); } if (a.getDelFlag().equals("0") && a.getCount() == 1) { activity = a; } } buffer.append(activity.getRole().getEnname()); if (activity != null && StringUtils.isNotBlank(activity.getId())) { //角色审批 if (StringUtils.isNotBlank(activity.getRole().getEnname())) { users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(), office.getId(), "25", leaveApply.getCreateBy()); } //人员审批 if (StringUtils.isNotBlank(activity.getUser().getId())) { users.add(activity.getUser()); } } workProjectNotify.setId(""); } else { variables.put("bmzrList", bmzrList); if (bmzrList.size() == 0) { leaveApply.setStatus("1"); this.save(leaveApply); } if (bmzrList.size() == 0) { return "流程审批人不能为空,角色业务部负责人下无用户,请联系管理员!"; } variables.put("bmzrCount", bmzrList.size()); processType = "leaveApply"; users.addAll(bmzrList); } // 向每个部门负责人发送审批通知 List userIds = new ArrayList<>(users.size()); for (User u : users) { userIds.add(u.getId()); workProjectNotify.setUser(u); workProjectNotify.setId(""); workProjectNotify.setNotifyRole("业务部负责人审批"); workProjectNotifyService.save(workProjectNotify); Map extras = new HashMap<>(); extras.put("type", "7002"); extras.put("procDefKey", "80"); extras.put("id", workProjectNotify.getId()); UserUtils.pushInfoToApp(titleStr, contentStr, extras, u.getId()); } UserUtils.pushIm(userIds, contentStr); variables.put("busId", businessKey); variables.put("type", processType); variables.put("title", "审批单:" + leaveApply.getNo());//设置标题; ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables); if (org.apache.commons.lang3.StringUtils.isNotBlank(processInstanceId)) { workActivityProcessService.updateProcessInstanceId(processInstance.getId(), processInstanceId); workActivityProcessService.deleteProcessInstanceId(processInstanceId); workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId); } List list = workActivityMenu.getActivities(); if (list != null && list.size() != 0) { workActivityProcessService.saveList(list, processInstance.getId()); } else { WorkActivityProcess workActivityProcess = new WorkActivityProcess(); workActivityProcess.setProcessKey(processType); workActivityProcess.setProcessInstanceId(processInstance.getId()); workActivityProcess.setCount(1); workActivityProcess.setIsApproval("0"); workActivityProcessService.insert(workActivityProcess); workActivityProcessService.insertAuditsByType(bmzrList, processInstance.getId(), 1, 1); double days=Double.parseDouble(leaveApply.getLongTime()); if(days>1){ workActivityProcess.setCount(2); workActivityProcess.setId(""); workActivityProcessService.save(workActivityProcess); workActivityProcessService.insertAuditsByType(fgldList,processInstance.getId(),2,0); } if(days>3){ workActivityProcess.setCount(3); workActivityProcess.setId(""); workActivityProcessService.save(workActivityProcess); workActivityProcessService.insertAuditsByType(zjlList,processInstance.getId(),3,0); } } leaveApply.setProcessInstanceId(processInstance.getId()); leaveApply.setStatus("2"); this.save(leaveApply); } catch (Exception e) { logger.error("启动审批流程异常:", e); return "启动审批流程异常:" + e.getMessage(); } return ""; } /** * 审核流程 */ @Transactional(readOnly = false) public String auditSave(LeaveApply leaveApply, List auditUsers) { double days=Double.parseDouble(leaveApply.getLongTime());//请假天数 // 对不同环节的业务逻辑进行操作 String taskDefKey = leaveApply.getAct().getTaskDefKey(); if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit")) { actTaskService.claim(leaveApply.getAct().getTaskId(), UserUtils.getUser().getId()); } else { leaveApply.getAct().setFlag("yes"); updateLeaveDetail(leaveApply); updateFile(leaveApply); } String comment = ""; if ("4".equals(leaveApply.getStatus())) { comment = ("yes".equals(leaveApply.getAct().getFlag()) ? "[重新申请] " : "[已撤销] "); } else { comment = ("yes".equals(leaveApply.getAct().getFlag()) ? "[同意] " : "[驳回] ") + leaveApply.getAct().getComment(); } //yes 的时候状态为审核通过 否则为未通过 //1 审核中 2 未通过 leaveApply.setStatus(("yes".equals(leaveApply.getAct().getFlag()) ? "2" : "4")); Map vars = Maps.newHashMap(); //业务逻辑对应的条件表达式 String exp = ""; String taskCount = ""; String notifyRole = ""; int key = 0; String enname = ""; String str = "请假编号:" + leaveApply.getNo() + ",请假日期:" + DateUtils.formatDate(leaveApply.getApplyTime()); User createUser = userDao.get(leaveApply.getCurrentUser()); String notifyTitle = "请假人:" + userDao.get(leaveApply.getApplyer()).getName(); List activitieList = activityService.getByProcessInstanceId(leaveApply.getProcessInstanceId()); WorkActivityMenu workActivityMenu = new WorkActivityMenu(); if (activitieList != null && activitieList.size() != 0) { workActivityMenu.setProcessType(activitieList.get(0).getProcessKey()); workActivityMenu.setActivities(activitieList); } WorkActivityProcess workActivityProcess = new WorkActivityProcess(); WorkActivityProcess selectProcess = new WorkActivityProcess(); selectProcess.setProcessInstanceId(leaveApply.getProcessInstanceId()); List workActivityProcesses = workActivityProcessService.findList(selectProcess); List activities = workActivityMenu.getActivities(); if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("leaveApply")) { key = 1; for (int i = 0; i < workActivityProcesses.size(); i++) { WorkActivityProcess activityProcess = workActivityProcesses.get(i); if (taskDefKey.equals(activityProcess.getActivityTask()) && !taskDefKey.equals("modifyApply")) { taskCount = activityProcess.getCount() + ""; workActivityProcess = activityProcess; if (!workActivityProcess.getIsApproval().equals("0")) { workActivityProcess.setId(""); } exp = "pass"; if (!"yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("4"); workActivityProcess.setIsApproval("2"); String returnBack = "-1"; for (Activity activity : activities) { if (activity.getCount() == activityProcess.getCount()) { notifyRole = activity.getName(); returnBack = activity.getReturnBack(); break; } } if (returnBack.equals("0")) { workActivityProcess.setId(""); } } else { workActivityProcess.setIsApproval("1"); } } else if (taskDefKey.equals("modifyApply")) { notifyRole = "调整请假信息"; taskCount = "0"; exp = "pass"; workActivityProcess.setId(""); workActivityProcess.setCount(0); if (!"yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("3"); workActivityProcess.setIsApproval("2"); } else { workActivityProcess.setIsApproval("1"); } break; } } } else { workActivityMenu.setProcessType("leaveApply"); for (int i = 0; i < workActivityProcesses.size(); i++) { WorkActivityProcess activityProcess = workActivityProcesses.get(i); String count = activityProcess.getCount() + ""; workActivityProcess = activityProcess; if (!workActivityProcess.getIsApproval().equals("0")) { workActivityProcess.setId(""); } // 审核环节 if ("bmzr".equals(taskDefKey) && count.contains("1")) { taskCount = "1"; exp = "pass"; if ("yes".equals(leaveApply.getAct().getFlag())) { leaveApply.getAct().setFlag("end"); notifyRole = "审批通过"; workActivityProcess.setIsApproval("1"); if(days>1){ leaveApply.getAct().setFlag("yes"); vars.put("fgldList", auditUsers); vars.put("fgldCount",auditUsers.size()); workActivityProcessService.insertAuditsByType(auditUsers,leaveApply.getProcessInstanceId(),2,1); notifyRole = "分管领导审核"; enname = "fgld"; } } else { notifyRole = "调整请假信息"; workActivityProcess.setIsApproval("2"); } break; } else if ("fgld".equals(taskDefKey) && count.contains("2")) { taskCount = "2"; exp = "pass"; if ("yes".equals(leaveApply.getAct().getFlag())) { leaveApply.getAct().setFlag("end"); notifyRole = "审批通过"; workActivityProcess.setIsApproval("1"); if(days>3){ leaveApply.getAct().setFlag("yes"); vars.put("zjlList", auditUsers); vars.put("zjlCount",auditUsers.size()); workActivityProcessService.insertAuditsByType(auditUsers,leaveApply.getProcessInstanceId(),3,1); notifyRole = "总经理审核"; enname = "zjl"; } } else { notifyRole = "调整请假信息"; workActivityProcess.setIsApproval("2"); } break; } else if ("zjl".equals(taskDefKey) && count.contains("3")) { taskCount = "3"; exp = "pass"; if ("yes".equals(leaveApply.getAct().getFlag())) { notifyRole = "审批通过"; workActivityProcess.setIsApproval("1"); } else { notifyRole = "调整请假信息"; workActivityProcess.setIsApproval("2"); } break; }else if ("modifyApply".equals(taskDefKey) && count.contains("0")) { notifyRole = "业务部负责人审批"; taskCount = "0"; exp = "pass"; workActivityProcess.setCount(0); enname = "bmzr"; Office office = UserUtils.getSelectOffice(); List bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy()); List fgldList = UserUtils.getByRoleActivityEnname("fgld", 2, office.getId(), "25", leaveApply.getCreateBy()); List zjlList = UserUtils.getByRoleActivityEnname("zjl", 3, office.getId(), "25", leaveApply.getCreateBy()); WorkActivityProcess workActivityProcess1 = new WorkActivityProcess(); workActivityProcess1.setProcessKey("leaveApply"); workActivityProcess1.setProcessInstanceId(leaveApply.getProcessInstanceId()); workActivityProcess1.setCount(1); workActivityProcess1.setIsApproval("0"); workActivityProcessService.insert(workActivityProcess1); workActivityProcessService.insertAuditsByType(bmzrList,leaveApply.getProcessInstanceId(), 1, 1); if(days>1){ workActivityProcess1.setCount(2); workActivityProcess1.setId(""); workActivityProcessService.save(workActivityProcess1); workActivityProcessService.insertAuditsByType(fgldList,leaveApply.getProcessInstanceId(),2,0); } if(days>3){ workActivityProcess1.setCount(3); workActivityProcess1.setId(""); workActivityProcessService.save(workActivityProcess1); workActivityProcessService.insertAuditsByType(zjlList,leaveApply.getProcessInstanceId(),3,0); } if (!"yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("3"); } break; } } } // 设置意见 leaveApply.getAct().setComment(("yes".equals(leaveApply.getAct().getFlag()) ? "[同意] " : "[驳回] ") + leaveApply.getAct().getComment()); leaveApply.preUpdate(); // 提交流程任务 vars.put(exp, leaveApply.getAct().getFlag()); vars.put("passs", true); if("end".equals(leaveApply.getAct().getFlag())){ leaveApply.getAct().setFlag("yes"); } workActivityProcessService.updateProcess(workActivityProcess, workActivityMenu, key, taskCount, leaveApply.getProcessInstanceId(), taskDefKey, "modifyApply", leaveApply.getAct().getFlag(), comment, activities); if("no".equals(leaveApply.getAct().getFlag())){ this.reject(leaveApply); } // 提交流程任务 actTaskService.complete(leaveApply.getAct().getTaskId(), leaveApply.getAct().getProcInsId(), leaveApply.getAct().getComment(), vars); boolean state = actTaskService.isProcessEnd(leaveApply.getAct().getProcInsId()); List users = new ArrayList<>(); List userList = new ArrayList<>(); if (!state) { users.add(leaveApply.getCreateBy()); if ("yes".equals(leaveApply.getAct().getFlag())||"end".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("5"); WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "80", "0", "待通知", notifyRole)); LeaveDetail detail=new LeaveDetail(); detail.setLeaveId(leaveApply.getId()); List leaveDetails = leaveDetailDao.findList(detail); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Office company = UserUtils.getSelectCompany(); User user = UserUtils.getByCompanyAndUserId(leaveApply.getApplyer(),company.getId()); WorkStaffBasicInfo workStaffBasicInfo = new WorkStaffBasicInfo(); workStaffBasicInfo.setUserId(leaveApply.getApplyer()); workStaffBasicInfo.setCompany(company); List workStaffAchives = workStaffAchivesDao.getByCompanyInfo(workStaffBasicInfo); WorkStaffBasicInfo workStaffAchive = new WorkStaffBasicInfo(); WorkAttendanceRule oaRule = new WorkAttendanceRule(); if (workStaffAchives!=null && workStaffAchives.size()!=0) { workStaffAchive = workStaffAchives.get(0); //依据公司和规则编号查询规则 oaRule = workAttendanceRuleService.findAttendanceRuleByCompany(workStaffAchive.getCompany().getId(), workStaffAchive.getUserId(), ""); if (oaRule == null || StringUtils.isBlank(oaRule.getId())) { oaRule = workAttendanceRuleService.findAttendanceRuleByCompany(workStaffAchive.getCompany().getId(), "", workStaffAchive.getOffice().getId()); } if (oaRule == null) { oaRule = new WorkAttendanceRule(); oaRule.setType("3"); } } Boolean status = false; SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); if (StringUtils.isNotBlank(oaRule.getId()) && StringUtils.isNotBlank(workStaffAchive.getId()) && leaveDetails!=null && leaveDetails.size()!=0){ for (LeaveDetail leaveDetail :leaveDetails){ Date stateTime = leaveDetail.getStartTime(); Date endTime = leaveDetail.getEndTime(); String startType = leaveDetail.getStartType(); String endType = leaveDetail.getEndType(); LeaveType leaveType = leaveDetail.getLeaveType(); /* int stateMonth = Integer.parseInt(stateTime.substring(5,7)); int endMonth = Integer.parseInt(endTime.substring(5,7));*/ List dates = findDates(stateTime,endTime); for (Date date:dates) { String time = sdf.format(date); int iholidays = workAttendanceInfoService.isHolidays(time); if (iholidays == 0 ||(iholidays != 0 && "1".equals(leaveType.getModel()))) { Integer dateInt = Integer.parseInt(sdf1.format(date)); int count = 3; if (sdf.format(date).equals(sdf.format(stateTime))) { if (startType.equals("2")) { count = 2; } } if (sdf.format(date).equals(sdf.format(endTime))) { if (endType.equals("1")) { count = 1; } } if (workStaffAchive.getWorkEndDate() != null) { String end = sdf1.format(workStaffAchive.getWorkEndDate()); if (Integer.parseInt(end) >= dateInt) { status = true; } } else { status = true; } int holidays = 0; if (status) { WorkAttendanceInfo workAttendanceInfo1 = new WorkAttendanceInfo(); WorkAttendanceInfo workAttendanceInfo2 = new WorkAttendanceInfo(); WorkAttendanceInfo workAttendanceInfo = new WorkAttendanceInfo(); workAttendanceInfo.setStaffId(workStaffAchive.getId()); workAttendanceInfo.setAttendanceDate(date); List workAttendanceInfos = workAttendanceInfoService.findList(workAttendanceInfo); if (workAttendanceInfos != null && workAttendanceInfos.size() != 0) { if (workAttendanceInfos.size() == 1) { if (workAttendanceInfos.get(0).getMorningAfternoon().equals("1")) { workAttendanceInfo1 = workAttendanceInfos.get(0); } else { workAttendanceInfo2 = workAttendanceInfos.get(0); } } else { if (workAttendanceInfos.get(0).getMorningAfternoon().equals("1")) { workAttendanceInfo2 = workAttendanceInfos.get(1); workAttendanceInfo1 = workAttendanceInfos.get(0); } else { workAttendanceInfo1 = workAttendanceInfos.get(1); workAttendanceInfo2 = workAttendanceInfos.get(0); } } } workAttendanceInfoService.saveInfo(oaRule, oaRule.getType(), workStaffAchive.getId(), user, date, time, null, "", "", "", "4", "4", "", holidays, null, "", leaveType.getIsAttendance(), leaveType.getIsSubsidized(), "", "", null, "", count, workAttendanceInfo1.getId(), workAttendanceInfo2.getId()); } } } } } } else { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); if (!"3".equals(leaveApply.getStatus())) { leaveApply.setStatus("4"); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "80", "0", "待通知", notifyRole)); } } workActivityProcessService.deleteProcessIdAuditUsers(leaveApply.getProcessInstanceId()); } else { if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("leaveApply")) { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); //users.addAll(userList); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), new User(), leaveApply.getCompanyId(), notifyTitle, str, "80", "0", "待审批", notifyRole); List workProjectNotifys = activityService.getByFlagAndTaskDefKeyList( activities, workProjectNotify, taskDefKey, leaveApply.getAct().getFlag(), taskCount, leaveApply.getCreateBy(), leaveApply.getOfficeId(), "80"); for (WorkProjectNotify workProjectNotify1 : workProjectNotifys) { users.add(workProjectNotify1.getUser()); workProjectNotify1.setId(""); workProjectNotify1.setIsNewRecord(false); workProjectNotifyService .save(workProjectNotify1); } } else { if (!"yes".equals(leaveApply.getAct().getFlag())) { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "80", "0", "重新申请", notifyRole)); users.add(leaveApply.getCreateBy()); } else { if (StringUtils.isNotBlank(enname)) { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); //users.addAll(userList1); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), new User(), leaveApply.getCompanyId(), notifyTitle, str, "80", "0", "待审批", notifyRole); users.addAll(auditUsers); for (User user1 : auditUsers) { workProjectNotify.setUser(user1); workProjectNotify.setId(""); workProjectNotify.setIsNewRecord(false); workProjectNotifyService.save(workProjectNotify); Map extras = new HashMap<>(); extras.put("type", "7002"); extras.put("procDefKey", "80"); extras.put("id", workProjectNotify.getId()); UserUtils.pushInfoToApp(notifyTitle, str, extras, user1.getId()); } } else { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); users.addAll(userList); users.add(leaveApply.getCreateBy()); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "80", "0", "重新申请", notifyRole)); } } } } if (users != null && users.size() != 0) { for (User u : users) { UserUtils.pushIm(u.getId(), str); } } if (userList != null && userList.size() != 0) { for (User u : userList) { UserUtils.pushMeIm(u.getId()); } } dao.update(leaveApply); return "保存审核意见成功!"; } @Transactional(readOnly = false) public void cancelProcess(String id) throws Exception { LeaveApply leaveApply = this.get(id); WorkActivityProcess process = new WorkActivityProcess(); process.setProcessInstanceId(leaveApply.getProcessInstanceId()); process.setIsApproval("0"); //List processList1 = workActivityProcessService.findByProcInsId(process); WorkActivityProcess workActivityProcess = new WorkActivityProcess(); workActivityProcess.setProcessInstanceId(leaveApply.getProcessInstanceId()); List processList = workActivityProcessService.findList(workActivityProcess); WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); List userList = workProjectNotifyService.readByNotifyId(notify); if (userList != null && userList.size() != 0) { for (User u : userList) { User user = UserUtils.get(u.getId()); UserUtils.pushIm(u.getId(), "请假人:" + user.getName() + ",请假编号:" + leaveApply.getNo() + " 强制撤销!"); } } if (processList != null && processList.size() > 0) { for (int i = 0; i < processList.size(); i++) { WorkActivityProcess p = processList.get(i); if (StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())) { p.setIsApproval("-1"); p.setDelFlag("1"); workActivityProcessDao.updateDelFlagAndIsApproval(p); } } WorkActivityProcess pro = new WorkActivityProcess(); pro.setId(""); pro.setDelFlag("0"); pro.preInsert(); pro.setRemarks("[强制撤销]"); pro.setProcessKey(processList.get(0).getProcessKey()); pro.setIsApproval("1"); pro.setProcessInstanceId(processList.get(0).getProcessInstanceId()); pro.setCount(0); workActivityProcessDao.insert(pro); //结束该流程,设为"撤销"状态月 LeaveApply leave = new LeaveApply(); leave.setId(id); leave.setStatus("3"); leave.setProcessInstanceId(leaveApply.getProcessInstanceId()); leave.preUpdate(); this.updateStateById(leave); actTaskService.endProcessInstance(leaveApply.getProcessInstanceId(), "请假申请-撤回"); } } private void updateStateById(LeaveApply leaveApply) { dao.updateProcessIdAndStatus(leaveApply); } @Transactional(readOnly = false) public String saveBack(LeaveApply leaveApply) { this.save(leaveApply); return this.startBack(leaveApply, leaveApply.getProcessInstanceId()); } @Transactional(readOnly = false) public String extendSave(LeaveApply leaveApply) { this.saveExtend(leaveApply); return this.extendSave(leaveApply, leaveApply.getProcessInstanceId()); } /** * 启动审批流程 */ @Transactional(readOnly = false) public String startBack(LeaveApply leaveApply, String processInstanceId) { try { Map variables = new HashMap(); identityService.setAuthenticatedUserId(leaveApply.getCurrentUser().getId()); User createUser = UserUtils.getUser(); String contentStr = "请假编号:" + leaveApply.getNo() + ",请假日期:" + DateUtils.formatDate(leaveApply.getApplyTime()); userDao.get(leaveApply.getApplyer()).getName(); String titleStr = "销假人:" + userDao.get(leaveApply.getApplyer()).getName(); String businessKey = leaveApply.getId(); Office office = UserUtils.getSelectOffice(); WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("zzsql3125f1f194c8lz88a9miiii75090477", office); // 启动流程 String processType = workActivityMenu.getProcessType(); StringBuffer buffer = new StringBuffer(); Activity activity = new Activity(); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), null, leaveApply.getCompanyId(), titleStr, contentStr, "81", "0", "待审批", "" ); List users = new ArrayList<>(); List bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy()); if (StringUtils.isNotBlank(workActivityMenu.getId())) { workProjectNotify.setNotifyRole(""); workActivityMenu = workActivityMenuService.get(workActivityMenu.getId()); List activities = workActivityMenu.getActivities(); for (Activity a : activities) { String encount = a.getEncount(); String enlist = a.getEnlist(); if (a.getRole() != null && StringUtils.isNotBlank(a.getRole().getEnname())) { List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(), office.getId(), "25", leaveApply.getCreateBy()); if (enusers.size() == 0) { leaveApply.setStatus("5"); this.save(leaveApply); return "流程审批人不能为空,角色" + a.getRole().getName() + "下无用户,请联系管理员!"; } variables.put(enlist, enusers); variables.put(encount, enusers.size()); } if (a.getDelFlag().equals("0") && a.getCount() == 1) { activity = a; } } buffer.append(activity.getRole().getEnname()); if (activity != null && StringUtils.isNotBlank(activity.getId())) { //角色审批 if (StringUtils.isNotBlank(activity.getRole().getEnname())) { users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(), office.getId(), "25", leaveApply.getCreateBy()); } //人员审批 if (StringUtils.isNotBlank(activity.getUser().getId())) { users.add(activity.getUser()); } } workProjectNotify.setId(""); } else { variables.put("bmzrList", bmzrList); if (bmzrList.size() == 0) { leaveApply.setStatus("5"); this.save(leaveApply); } if (bmzrList.size() == 0) { return "流程审批人不能为空,角色业务部负责人下无用户,请联系管理员!"; } variables.put("bmzrCount", bmzrList.size()); processType = "leaveBack"; users.addAll(bmzrList); } List userIds = new ArrayList<>(users.size()); for (User u : users) { userIds.add(u.getId()); workProjectNotify.setUser(u); workProjectNotify.setId(""); workProjectNotify.setNotifyRole("业务部负责人审批"); workProjectNotifyService.save(workProjectNotify); Map extras = new HashMap<>(); extras.put("type", "7002"); extras.put("procDefKey", "81"); extras.put("id", workProjectNotify.getId()); UserUtils.pushInfoToApp(titleStr, contentStr, extras, u.getId()); } UserUtils.pushIm(userIds, contentStr); variables.put("busId", businessKey); variables.put("type", processType); variables.put("title", "审批单:" + leaveApply.getNo());//设置标题; ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables); if (org.apache.commons.lang3.StringUtils.isNotBlank(processInstanceId)) { workActivityProcessService.updateProcessInstanceId(processInstance.getId(), processInstanceId); workActivityProcessService.deleteProcessInstanceId(processInstanceId); workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId); WorkActivityProcess pro = new WorkActivityProcess(); pro.setId(""); pro.setDelFlag("0"); pro.preInsert(); pro.setRemarks("销假申请"); pro.setProcessKey("leaveBack"); pro.setIsApproval("1"); pro.setProcessInstanceId(processInstance.getId()); pro.setCount(0); workActivityProcessDao.insert(pro); } List list = workActivityMenu.getActivities(); if (list != null && list.size() != 0) { workActivityProcessService.saveList(list, processInstance.getId()); } else { WorkActivityProcess workActivityProcess = new WorkActivityProcess(); workActivityProcess.setProcessKey(processType); workActivityProcess.setProcessInstanceId(processInstance.getId()); workActivityProcess.setCount(1); workActivityProcess.setIsApproval("0"); workActivityProcessService.insert(workActivityProcess); workActivityProcessService.insertAuditsByType(bmzrList, processInstance.getId(), 1, 1); } leaveApply.setProcessInstanceId(processInstance.getId()); leaveApply.setStatus("6"); this.save(leaveApply); workActivityProcessService.updateType(processInstance.getId(), "leaveBack"); } catch (Exception e) { logger.error("启动审批流程异常:", e); return "启动审批流程异常:" + e.getMessage(); } return ""; } /** * 销假审核流程 */ @Transactional(readOnly = false) public String auditBackSave(LeaveApply leaveApply, List auditUsers) { // 对不同环节的业务逻辑进行操作 String taskDefKey = leaveApply.getAct().getTaskDefKey(); if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit")) { actTaskService.claim(leaveApply.getAct().getTaskId(), UserUtils.getUser().getId()); } else { leaveApply.getAct().setFlag("yes"); } String comment = ""; if ("9".equals(leaveApply.getStatus())) { comment = ("yes".equals(leaveApply.getAct().getFlag()) ? "[重新申请] " : "[已撤销] "); } else { comment = ("yes".equals(leaveApply.getAct().getFlag()) ? "[同意] " : "[驳回] ") + leaveApply.getAct().getComment(); } //yes 的时候状态为审核通过 否则为未通过 //1 审核中 2 未通过 leaveApply.setStatus(("yes".equals(leaveApply.getAct().getFlag()) ? "6" : "9")); Map vars = Maps.newHashMap(); //业务逻辑对应的条件表达式 String exp = ""; String taskCount = ""; String notifyRole = ""; int key = 0; String enname = ""; String str = "请假编号:" + leaveApply.getNo() + ",请假日期:" + DateUtils.formatDate(leaveApply.getApplyTime()); User createUser = userDao.get(leaveApply.getCurrentUser()); String notifyTitle = "销假人:" + userDao.get(leaveApply.getApplyer()).getName(); List activitieList = activityService.getByProcessInstanceId(leaveApply.getProcessInstanceId()); WorkActivityMenu workActivityMenu = new WorkActivityMenu(); if (activitieList != null && activitieList.size() != 0) { workActivityMenu.setProcessType(activitieList.get(0).getProcessKey()); workActivityMenu.setActivities(activitieList); } WorkActivityProcess workActivityProcess = new WorkActivityProcess(); WorkActivityProcess selectProcess = new WorkActivityProcess(); selectProcess.setProcessInstanceId(leaveApply.getProcessInstanceId()); List workActivityProcesses = workActivityProcessService.findList(selectProcess); List activities = workActivityMenu.getActivities(); if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("leaveBack")) { key = 1; for (int i = 0; i < workActivityProcesses.size(); i++) { WorkActivityProcess activityProcess = workActivityProcesses.get(i); if (taskDefKey.equals(activityProcess.getActivityTask()) && !taskDefKey.equals("modifyApply")) { taskCount = activityProcess.getCount() + ""; workActivityProcess = activityProcess; if (!workActivityProcess.getIsApproval().equals("0")) { workActivityProcess.setId(""); } exp = "pass"; if (!"yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("9"); workActivityProcess.setIsApproval("2"); String returnBack = "-1"; for (Activity activity : activities) { if (activity.getCount() == activityProcess.getCount()) { notifyRole = activity.getName(); returnBack = activity.getReturnBack(); break; } } if (returnBack.equals("0")) { workActivityProcess.setId(""); } } else { workActivityProcess.setIsApproval("1"); } } else if (taskDefKey.equals("modifyApply")) { notifyRole = "调整请假信息"; taskCount = "0"; exp = "pass"; workActivityProcess.setId(""); workActivityProcess.setCount(0); if (!"yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("7"); workActivityProcess.setIsApproval("2"); } else { workActivityProcess.setIsApproval("1"); } break; } } } else { workActivityMenu.setProcessType("leaveBack"); for (int i = 0; i < workActivityProcesses.size(); i++) { WorkActivityProcess activityProcess = workActivityProcesses.get(i); String count = activityProcess.getCount() + ""; workActivityProcess = activityProcess; if (!workActivityProcess.getIsApproval().equals("0")) { workActivityProcess.setId(""); } // 审核环节 if ("bmzr".equals(taskDefKey) && count.contains("1")) { taskCount = "1"; exp = "pass"; if ("yes".equals(leaveApply.getAct().getFlag())) { notifyRole = "审批通过"; workActivityProcess.setIsApproval("1"); } else { notifyRole = "调整请假信息"; workActivityProcess.setIsApproval("2"); dao.updateBack(leaveApply); } break; } else if ("modifyApply".equals(taskDefKey) && count.contains("0")) { notifyRole = "业务部负责人审批"; taskCount = "0"; exp = "pass"; workActivityProcess.setCount(0); enname = "bmzr"; if (!"yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("7"); } break; } } } // 设置意见 leaveApply.getAct().setComment(("yes".equals(leaveApply.getAct().getFlag()) ? "[同意] " : "[驳回] ") + leaveApply.getAct().getComment()); leaveApply.preUpdate(); // 提交流程任务 vars.put(exp, "yes".equals(leaveApply.getAct().getFlag()) ? true : false); vars.put("passs", true); workActivityProcessService.updateProcess(workActivityProcess, workActivityMenu, key, taskCount, leaveApply.getProcessInstanceId(), taskDefKey, "modifyApply", leaveApply.getAct().getFlag(), comment, activities); // 提交流程任务 actTaskService.complete(leaveApply.getAct().getTaskId(), leaveApply.getAct().getProcInsId(), leaveApply.getAct().getComment(), vars); boolean state = actTaskService.isProcessEnd(leaveApply.getAct().getProcInsId()); List users = new ArrayList<>(); List userList = new ArrayList<>(); if (!state) { users.add(leaveApply.getCreateBy()); if ("yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("8"); WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "81", "0", "待通知", notifyRole)); LeaveDetail detail=new LeaveDetail(); detail.setLeaveId(leaveApply.getId()); List leaveDetails = leaveDetailDao.findList(detail); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); double back = Integer.parseInt(sdf1.format(leaveApply.getBackTime())); if("2".equals(leaveApply.getBackStartType())){ back=back+0.5; } for (LeaveDetail leaveDetail : leaveDetails) { Date stateTime = leaveDetail.getStartTime(); double start=Integer.parseInt(sdf1.format(stateTime)); Date endTime = leaveDetail.getEndTime(); double end=Integer.parseInt(sdf1.format(endTime)); String startType = leaveDetail.getStartType(); String endType = leaveDetail.getEndType(); if("2".equals(startType)){ start=start+0.5; } if("2".equals(endType)){ end=end+0.5; } if(back<=end&&back>=start){ //修改实际请假结束时间及請假時常 double d=0; if("2".equals(leaveDetail.getLeaveType().getModel())){//工作日 d=this.holidays(sdf.format(leaveDetail.getStartTime()), sdf.format(leaveApply.getBackTime()), leaveDetail.getStartType(), leaveApply.getBackStartType()); }else{ d=getDay(leaveDetail.getStartTime(),leaveApply.getBackTime(), leaveDetail.getStartType(),leaveApply.getBackStartType()); } leaveDetailDao.updateRealEndDate(leaveDetail.getId(),sdf.format(leaveApply.getBackTime()),leaveApply.getBackStartType(),String.valueOf(d)); leaveDetail.setRealEndTime(leaveApply.getBackTime()); this.saveLeaveCount(leaveDetail,d,leaveApply.getBasicInfo().getId()); }else if(back workStaffAchives = workStaffAchivesDao.getByCompanyInfo(workStaffBasicInfo); WorkStaffBasicInfo workStaffAchive = new WorkStaffBasicInfo(); WorkAttendanceRule oaRule = new WorkAttendanceRule(); if (workStaffAchives!=null && workStaffAchives.size()!=0) { workStaffAchive = workStaffAchives.get(0); //依据公司和规则编号查询规则 oaRule = workAttendanceRuleService.findAttendanceRuleByCompany(workStaffAchive.getCompany().getId(), workStaffAchive.getUserId(), ""); if (oaRule == null || StringUtils.isBlank(oaRule.getId())) { oaRule = workAttendanceRuleService.findAttendanceRuleByCompany(workStaffAchive.getCompany().getId(), "", workStaffAchive.getOffice().getId()); } if (oaRule == null) { oaRule = new WorkAttendanceRule(); oaRule.setType("3"); } } Boolean status = false; Integer backTime = Integer.parseInt(sdf1.format(leaveApply.getBackTime())); if (StringUtils.isNotBlank(oaRule.getId()) && StringUtils.isNotBlank(workStaffAchive.getId()) && leaveDetails!=null && leaveDetails.size()!=0) { for (LeaveDetail leaveDetail : leaveDetails) { Date stateTime = leaveDetail.getStartTime(); Date endTime = leaveDetail.getEndTime(); String startType = leaveDetail.getStartType(); String endType = leaveDetail.getEndType(); LeaveType leaveType = leaveDetail.getLeaveType(); /* int stateMonth = Integer.parseInt(stateTime.substring(5,7)); int endMonth = Integer.parseInt(endTime.substring(5,7));*/ List dates = findDates(stateTime, endTime); for (Date date : dates) { String time = sdf.format(date); int iholidays = workAttendanceInfoService.isHolidays(time); Integer dateInt = Integer.parseInt(sdf1.format(date)); if (iholidays == 0 || (iholidays != 0 && "1".equals(leaveType.getModel()))) { int count = 3; if (sdf.format(date).equals(sdf.format(stateTime))) { if (startType.equals("2")) { count = 2; } } if (sdf.format(date).equals(sdf.format(endTime))) { if (endType.equals("1")) { count = 1; } } if (workStaffAchive.getWorkEndDate() != null) { String end = sdf1.format(workStaffAchive.getWorkEndDate()); if (Integer.parseInt(end) >= dateInt) { status = true; } } else { status = true; } int holidays = 0; if (status) { WorkAttendanceInfo workAttendanceInfo1 = new WorkAttendanceInfo(); WorkAttendanceInfo workAttendanceInfo2 = new WorkAttendanceInfo(); WorkAttendanceInfo workAttendanceInfo = new WorkAttendanceInfo(); workAttendanceInfo.setStaffId(workStaffAchive.getId()); workAttendanceInfo.setAttendanceDate(date); List workAttendanceInfos = workAttendanceInfoService.findList(workAttendanceInfo); if (workAttendanceInfos != null && workAttendanceInfos.size() != 0) { if (workAttendanceInfos.size() == 1) { if (workAttendanceInfos.get(0).getMorningAfternoon().equals("1")) { workAttendanceInfo1 = workAttendanceInfos.get(0); } else { workAttendanceInfo2 = workAttendanceInfos.get(0); } } else { if (workAttendanceInfos.get(0).getMorningAfternoon().equals("1")) { workAttendanceInfo2 = workAttendanceInfos.get(1); workAttendanceInfo1 = workAttendanceInfos.get(0); } else { workAttendanceInfo1 = workAttendanceInfos.get(1); workAttendanceInfo2 = workAttendanceInfos.get(0); } } } if (dateInt>=backTime){ workAttendanceInfoService.saveInfo(oaRule, oaRule.getType(), workStaffAchive.getId(), user, date, time, null, "", "", "", "4", "4", "", holidays, null, "", leaveType.getIsAttendance(), leaveType.getIsSubsidized(), "", "", null, "", count, workAttendanceInfo1.getId(), workAttendanceInfo2.getId()); }else { workAttendanceInfoService.saveInfo(oaRule, oaRule.getType(), workStaffAchive.getId(), user, date, time, null, "", "", "", "4", "4", "", holidays, null, "", leaveType.getIsAttendance(), leaveType.getIsSubsidized(), "", "", null, "", count, workAttendanceInfo1.getId(), workAttendanceInfo2.getId()); } } } } } } } else { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); if (!"7".equals(leaveApply.getStatus())) { leaveApply.setStatus("9"); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "81", "0", "待通知", notifyRole)); } } workActivityProcessService.deleteProcessIdAuditUsers(leaveApply.getProcessInstanceId()); } else { if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("leaveBack")) { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); //users.addAll(userList); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), new User(), leaveApply.getCompanyId(), notifyTitle, str, "81", "0", "待审批", notifyRole); List workProjectNotifys = activityService.getByFlagAndTaskDefKeyList( activities, workProjectNotify, taskDefKey, leaveApply.getAct().getFlag(), taskCount, leaveApply.getCreateBy(), leaveApply.getOfficeId(), "81"); for (WorkProjectNotify workProjectNotify1 : workProjectNotifys) { users.add(workProjectNotify1.getUser()); workProjectNotify1.setId(""); workProjectNotify1.setIsNewRecord(false); workProjectNotifyService .save(workProjectNotify1); } } else { if (!"yes".equals(leaveApply.getAct().getFlag())) { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "81", "0", "重新申请", notifyRole)); users.add(leaveApply.getCreateBy()); } else { if (StringUtils.isNotBlank(enname)) { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); //users.addAll(userList1); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), new User(), leaveApply.getCompanyId(), notifyTitle, str, "81", "0", "待审批", notifyRole); users.addAll(auditUsers); for (User user1 : auditUsers) { workProjectNotify.setUser(user1); workProjectNotify.setId(""); workProjectNotify.setIsNewRecord(false); workProjectNotifyService.save(workProjectNotify); Map extras = new HashMap<>(); extras.put("type", "7002"); extras.put("procDefKey", "81"); extras.put("id", workProjectNotify.getId()); UserUtils.pushInfoToApp(notifyTitle, str, extras, user1.getId()); } } else { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); users.addAll(userList); users.add(leaveApply.getCreateBy()); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "81", "0", "重新申请", notifyRole)); } } } } if (users != null && users.size() != 0) { for (User u : users) { UserUtils.pushIm(u.getId(), str); } } if (userList != null && userList.size() != 0) { for (User u : userList) { UserUtils.pushMeIm(u.getId()); } } dao.update(leaveApply); return "保存审核意见成功!"; } @Transactional(readOnly = false) public void cancelProcessBack(String id) throws Exception { LeaveApply leaveApply = this.get(id); WorkActivityProcess process = new WorkActivityProcess(); process.setProcessInstanceId(leaveApply.getProcessInstanceId()); process.setIsApproval("0"); //List processList1 = workActivityProcessService.findByProcInsId(process); WorkActivityProcess workActivityProcess = new WorkActivityProcess(); workActivityProcess.setProcessInstanceId(leaveApply.getProcessInstanceId()); List processList = workActivityProcessService.findList(workActivityProcess); WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); List userList = workProjectNotifyService.readByNotifyId(notify); if (userList != null && userList.size() != 0) { for (User u : userList) { User user = UserUtils.get(u.getId()); UserUtils.pushIm(u.getId(), "销假人:" + user.getName() + ",请假编号:" + leaveApply.getNo() + " 强制撤销!"); } } if (processList != null && processList.size() > 0) { for (int i = 0; i < processList.size(); i++) { WorkActivityProcess p = processList.get(i); if (StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())) { p.setIsApproval("-1"); p.setDelFlag("1"); workActivityProcessDao.updateDelFlagAndIsApproval(p); } } WorkActivityProcess pro = new WorkActivityProcess(); pro.setId(""); pro.setDelFlag("0"); pro.preInsert(); pro.setRemarks("[强制撤销]"); pro.setProcessKey(processList.get(0).getProcessKey()); pro.setIsApproval("1"); pro.setProcessInstanceId(processList.get(0).getProcessInstanceId()); pro.setCount(0); workActivityProcessDao.insert(pro); //结束该流程,设为"撤销"状态月 LeaveApply leave = new LeaveApply(); leave.setId(id); leave.setStatus("7"); leave.setProcessInstanceId(leaveApply.getProcessInstanceId()); leave.preUpdate(); this.updateStateById(leave); actTaskService.endProcessInstance(leaveApply.getProcessInstanceId(), "销假申请-撤回"); dao.updateBack(leaveApply); } } @Transactional(readOnly = false) public void cancelProcessExtend(String id) throws Exception { LeaveApply leaveApply = this.get(id); WorkActivityProcess process = new WorkActivityProcess(); process.setProcessInstanceId(leaveApply.getProcessInstanceId()); process.setIsApproval("0"); //List processList1 = workActivityProcessService.findByProcInsId(process); WorkActivityProcess workActivityProcess = new WorkActivityProcess(); workActivityProcess.setProcessInstanceId(leaveApply.getProcessInstanceId()); List processList = workActivityProcessService.findList(workActivityProcess); WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); List userList = workProjectNotifyService.readByNotifyId(notify); if (userList != null && userList.size() != 0) { for (User u : userList) { User user = UserUtils.get(u.getId()); UserUtils.pushIm(u.getId(), "请假人:" + user.getName() + ",请假编号:" + leaveApply.getNo() + " 强制撤销!"); } } if (processList != null && processList.size() > 0) { for (int i = 0; i < processList.size(); i++) { WorkActivityProcess p = processList.get(i); if (StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())) { p.setIsApproval("-1"); p.setDelFlag("1"); workActivityProcessDao.updateDelFlagAndIsApproval(p); } } WorkActivityProcess pro = new WorkActivityProcess(); pro.setId(""); pro.setDelFlag("0"); pro.preInsert(); pro.setRemarks("[强制撤销]"); pro.setProcessKey(processList.get(0).getProcessKey()); pro.setIsApproval("1"); pro.setProcessInstanceId(processList.get(0).getProcessInstanceId()); pro.setCount(0); workActivityProcessDao.insert(pro); //结束该流程,设为"撤销"状态月 LeaveApply leave = new LeaveApply(); leave.setId(id); leave.setStatus("11"); leave.setProcessInstanceId(leaveApply.getProcessInstanceId()); leave.preUpdate(); this.updateStateById(leave); actTaskService.endProcessInstance(leaveApply.getProcessInstanceId(), "请假申请-撤回"); dao.updateLongTime(leaveApply); dao.deleteDetail(leaveApply); } } @Transactional(readOnly = false) public void reject(LeaveApply leaveApply){ WorkActivityProcess workActivityProcess = new WorkActivityProcess(); workActivityProcess.setProcessInstanceId(leaveApply.getProcessInstanceId()); List processList = workActivityProcessService.findList(workActivityProcess); if (processList != null && processList.size() > 0) { for (int i = 0; i < processList.size(); i++) { WorkActivityProcess p = processList.get(i); if (StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())&&! "modifyApply".equals(p.getActivityTask())) { workActivityProcessDao.delete(p); } } } workActivityProcessService.deleteProcessIdAuditUsers(leaveApply.getProcessInstanceId()); } /** * 启动审批流程 */ @Transactional(readOnly = false) public String extendSave(LeaveApply leaveApply, String processInstanceId) { try { double days=Double.parseDouble(leaveApply.getLongTime());//请假天数 Map variables = new HashMap(); identityService.setAuthenticatedUserId(leaveApply.getCurrentUser().getId()); User createUser = UserUtils.getUser(); String contentStr = "请假编号:" + leaveApply.getNo() + ",请假日期:" + DateUtils.formatDate(leaveApply.getApplyTime()); userDao.get(leaveApply.getApplyer()).getName(); String titleStr = "请假人:" + userDao.get(leaveApply.getApplyer()).getName(); String businessKey = leaveApply.getId(); Office office = UserUtils.getSelectOffice(); WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("zzsql3125f1f194c8lz88a9miiii75090499", office); // 启动流程 String processType = workActivityMenu.getProcessType(); StringBuffer buffer = new StringBuffer(); Activity activity = new Activity(); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), null, leaveApply.getCompanyId(), titleStr, contentStr, "82", "0", "待审批", "" ); List users = new ArrayList<>(); List bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy()); List fgldList = UserUtils.getByRoleActivityEnname("fgld", 2, office.getId(), "25", leaveApply.getCreateBy()); List zjlList = UserUtils.getByRoleActivityEnname("zjl", 3, office.getId(), "25", leaveApply.getCreateBy()); if (StringUtils.isNotBlank(workActivityMenu.getId())) { workProjectNotify.setNotifyRole(""); workActivityMenu = workActivityMenuService.get(workActivityMenu.getId()); List activities = workActivityMenu.getActivities(); for (Activity a : activities) { String encount = a.getEncount(); String enlist = a.getEnlist(); if (a.getRole() != null && StringUtils.isNotBlank(a.getRole().getEnname())) { List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(), office.getId(), "25", leaveApply.getCreateBy()); if (enusers.size() == 0) { leaveApply.setStatus("5"); this.saveExtend(leaveApply); return "流程审批人不能为空,角色" + a.getRole().getName() + "下无用户,请联系管理员!"; } variables.put(enlist, enusers); variables.put(encount, enusers.size()); } if (a.getDelFlag().equals("0") && a.getCount() == 1) { activity = a; } } buffer.append(activity.getRole().getEnname()); if (activity != null && StringUtils.isNotBlank(activity.getId())) { //角色审批 if (StringUtils.isNotBlank(activity.getRole().getEnname())) { users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(), office.getId(), "25", leaveApply.getCreateBy()); } //人员审批 if (StringUtils.isNotBlank(activity.getUser().getId())) { users.add(activity.getUser()); } } workProjectNotify.setId(""); } else { variables.put("bmzrList", bmzrList); if (bmzrList.size() == 0) { leaveApply.setStatus("5"); this.saveExtend(leaveApply); } if (bmzrList.size() == 0) { return "流程审批人不能为空,角色业务部负责人下无用户,请联系管理员!"; } variables.put("bmzrCount", bmzrList.size()); processType = "leaveExtend"; users.addAll(bmzrList); } List userIds = new ArrayList<>(users.size()); for (User u : users) { userIds.add(u.getId()); workProjectNotify.setUser(u); workProjectNotify.setId(""); workProjectNotify.setNotifyRole("业务部负责人审批"); workProjectNotifyService.save(workProjectNotify); Map extras = new HashMap<>(); extras.put("type", "7002"); extras.put("procDefKey", "82"); extras.put("id", workProjectNotify.getId()); UserUtils.pushInfoToApp(titleStr, contentStr, extras, u.getId()); } UserUtils.pushIm(userIds, contentStr); variables.put("busId", businessKey); variables.put("type", processType); variables.put("title", "审批单:" + leaveApply.getNo());//设置标题; ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables); if (org.apache.commons.lang3.StringUtils.isNotBlank(processInstanceId)) { workActivityProcessService.updateProcessInstanceId(processInstance.getId(), processInstanceId); workActivityProcessService.deleteProcessInstanceId(processInstanceId); workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId); WorkActivityProcess pro = new WorkActivityProcess(); pro.setId(""); pro.setDelFlag("0"); pro.preInsert(); pro.setRemarks("续假申请"); pro.setProcessKey("leaveExtend"); pro.setIsApproval("1"); pro.setProcessInstanceId(processInstance.getId()); pro.setCount(0); workActivityProcessDao.insert(pro); } List list = workActivityMenu.getActivities(); if (list != null && list.size() != 0) { workActivityProcessService.saveList(list, processInstance.getId()); } else { WorkActivityProcess workActivityProcess = new WorkActivityProcess(); workActivityProcess.setProcessKey(processType); workActivityProcess.setProcessInstanceId(processInstance.getId()); workActivityProcess.setCount(1); workActivityProcess.setIsApproval("0"); workActivityProcessService.insert(workActivityProcess); workActivityProcessService.insertAuditsByType(bmzrList, processInstance.getId(), 1, 1); if(days>1){ workActivityProcess.setCount(2); workActivityProcess.setId(""); workActivityProcessService.save(workActivityProcess); workActivityProcessService.insertAuditsByType(fgldList,processInstance.getId(),2,0); } if(days>3){ workActivityProcess.setCount(3); workActivityProcess.setId(""); workActivityProcessService.save(workActivityProcess); workActivityProcessService.insertAuditsByType(zjlList,processInstance.getId(),3,0); } } leaveApply.setProcessInstanceId(processInstance.getId()); leaveApply.setStatus("10"); this.saveExtend(leaveApply); workActivityProcessService.updateType(processInstance.getId(), "leaveExtend"); } catch (Exception e) { logger.error("启动审批流程异常:", e); return "启动审批流程异常:" + e.getMessage(); } return ""; } /** * 销假审核流程 */ @Transactional(readOnly = false) public String auditExtendSave(LeaveApply leaveApply, List auditUsers) { // 对不同环节的业务逻辑进行操作 double days=Double.parseDouble(leaveApply.getLongTime());//请假天数 String taskDefKey = leaveApply.getAct().getTaskDefKey(); if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit")) { actTaskService.claim(leaveApply.getAct().getTaskId(), UserUtils.getUser().getId()); } else { leaveApply.getAct().setFlag("yes"); updateExtendDetail(leaveApply); updateFile(leaveApply); } String comment = ""; if ("12".equals(leaveApply.getStatus())) { comment = ("yes".equals(leaveApply.getAct().getFlag()) ? "[重新申请] " : "[已撤销] "); } else { comment = ("yes".equals(leaveApply.getAct().getFlag()) ? "[同意] " : "[驳回] ") + leaveApply.getAct().getComment(); } //yes 的时候状态为审核通过 否则为未通过 //1 审核中 2 未通过 leaveApply.setStatus(("yes".equals(leaveApply.getAct().getFlag()) ? "10" : "12")); Map vars = Maps.newHashMap(); //业务逻辑对应的条件表达式 String exp = ""; String taskCount = ""; String notifyRole = ""; int key = 0; String enname = ""; String str = "请假编号:" + leaveApply.getNo() + ",请假日期:" + DateUtils.formatDate(leaveApply.getApplyTime()); User createUser = userDao.get(leaveApply.getCurrentUser()); String notifyTitle = "请假人:" + userDao.get(leaveApply.getApplyer()).getName(); List activitieList = activityService.getByProcessInstanceId(leaveApply.getProcessInstanceId()); WorkActivityMenu workActivityMenu = new WorkActivityMenu(); if (activitieList != null && activitieList.size() != 0) { workActivityMenu.setProcessType(activitieList.get(0).getProcessKey()); workActivityMenu.setActivities(activitieList); } WorkActivityProcess workActivityProcess = new WorkActivityProcess(); WorkActivityProcess selectProcess = new WorkActivityProcess(); selectProcess.setProcessInstanceId(leaveApply.getProcessInstanceId()); List workActivityProcesses = workActivityProcessService.findList(selectProcess); List activities = workActivityMenu.getActivities(); if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("leaveExtend")) { key = 1; for (int i = 0; i < workActivityProcesses.size(); i++) { WorkActivityProcess activityProcess = workActivityProcesses.get(i); if (taskDefKey.equals(activityProcess.getActivityTask()) && !taskDefKey.equals("modifyApply")) { taskCount = activityProcess.getCount() + ""; workActivityProcess = activityProcess; if (!workActivityProcess.getIsApproval().equals("0")) { workActivityProcess.setId(""); } exp = "pass"; if (!"yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("12"); workActivityProcess.setIsApproval("2"); String returnBack = "-1"; for (Activity activity : activities) { if (activity.getCount() == activityProcess.getCount()) { notifyRole = activity.getName(); returnBack = activity.getReturnBack(); break; } } if (returnBack.equals("0")) { workActivityProcess.setId(""); } } else { workActivityProcess.setIsApproval("1"); } } else if (taskDefKey.equals("modifyApply")) { notifyRole = "调整请假信息"; taskCount = "0"; exp = "pass"; workActivityProcess.setId(""); workActivityProcess.setCount(0); if (!"yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("11"); workActivityProcess.setIsApproval("2"); } else { workActivityProcess.setIsApproval("1"); } break; } } } else { workActivityMenu.setProcessType("leaveExtend"); for (int i = 0; i < workActivityProcesses.size(); i++) { WorkActivityProcess activityProcess = workActivityProcesses.get(i); String count = activityProcess.getCount() + ""; workActivityProcess = activityProcess; if (!workActivityProcess.getIsApproval().equals("0")) { workActivityProcess.setId(""); } // 审核环节 if ("bmzr".equals(taskDefKey) && count.contains("1")) { taskCount = "1"; exp = "pass"; if ("yes".equals(leaveApply.getAct().getFlag())) { leaveApply.getAct().setFlag("end"); notifyRole = "审批通过"; workActivityProcess.setIsApproval("1"); if(days>1){ leaveApply.getAct().setFlag("yes"); vars.put("fgldList", auditUsers); vars.put("fgldCount",auditUsers.size()); workActivityProcessService.insertAuditsByType(auditUsers,leaveApply.getProcessInstanceId(),2,1); notifyRole = "分管领导审核"; enname = "fgld"; } } else { notifyRole = "调整请假信息"; workActivityProcess.setIsApproval("2"); dao.updateLongTime(leaveApply); dao.deleteDetail(leaveApply); } break; } else if ("fgld".equals(taskDefKey) && count.contains("2")) { taskCount = "2"; exp = "pass"; if ("yes".equals(leaveApply.getAct().getFlag())) { leaveApply.getAct().setFlag("end"); notifyRole = "审批通过"; workActivityProcess.setIsApproval("1"); if(days>3){ leaveApply.getAct().setFlag("yes"); vars.put("zjlList", auditUsers); vars.put("zjlCount",auditUsers.size()); workActivityProcessService.insertAuditsByType(auditUsers,leaveApply.getProcessInstanceId(),3,1); notifyRole = "总经理审核"; enname = "zjl"; } } else { notifyRole = "调整请假信息"; workActivityProcess.setIsApproval("2"); dao.updateLongTime(leaveApply); dao.deleteDetail(leaveApply); } break; } else if ("zjl".equals(taskDefKey) && count.contains("3")) { taskCount = "3"; exp = "pass"; if ("yes".equals(leaveApply.getAct().getFlag())) { notifyRole = "审批通过"; workActivityProcess.setIsApproval("1"); } else { notifyRole = "调整请假信息"; workActivityProcess.setIsApproval("2"); dao.updateLongTime(leaveApply); dao.deleteDetail(leaveApply); } break; }else if ("modifyApply".equals(taskDefKey) && count.contains("0")) { notifyRole = "业务部负责人审批"; taskCount = "0"; exp = "pass"; workActivityProcess.setCount(0); enname = "bmzr"; Office office = UserUtils.getSelectOffice(); List bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy()); List fgldList = UserUtils.getByRoleActivityEnname("fgld", 2, office.getId(), "25", leaveApply.getCreateBy()); List zjlList = UserUtils.getByRoleActivityEnname("zjl", 3, office.getId(), "25", leaveApply.getCreateBy()); WorkActivityProcess workActivityProcess1 = new WorkActivityProcess(); workActivityProcess1.setProcessKey("leaveApply"); workActivityProcess1.setProcessInstanceId(leaveApply.getProcessInstanceId()); workActivityProcess1.setCount(1); workActivityProcess1.setIsApproval("0"); workActivityProcessService.insert(workActivityProcess1); workActivityProcessService.insertAuditsByType(bmzrList,leaveApply.getProcessInstanceId(), 1, 1); if(days>1){ workActivityProcess1.setCount(2); workActivityProcess1.setId(""); workActivityProcessService.save(workActivityProcess1); workActivityProcessService.insertAuditsByType(fgldList,leaveApply.getProcessInstanceId(),2,0); } if(days>3){ workActivityProcess1.setCount(3); workActivityProcess1.setId(""); workActivityProcessService.save(workActivityProcess1); workActivityProcessService.insertAuditsByType(zjlList,leaveApply.getProcessInstanceId(),3,0); } if (!"yes".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("11"); } break; } } } // 设置意见 leaveApply.getAct().setComment(("yes".equals(leaveApply.getAct().getFlag()) ? "[同意] " : "[驳回] ") + leaveApply.getAct().getComment()); leaveApply.preUpdate(); // 提交流程任务 vars.put(exp, leaveApply.getAct().getFlag()); vars.put("passs", true); if("end".equals(leaveApply.getAct().getFlag())){ leaveApply.getAct().setFlag("yes"); } workActivityProcessService.updateProcess(workActivityProcess, workActivityMenu, key, taskCount, leaveApply.getProcessInstanceId(), taskDefKey, "modifyApply", leaveApply.getAct().getFlag(), comment, activities); // 提交流程任务 if("no".equals(leaveApply.getAct().getFlag())){ this.reject(leaveApply); } actTaskService.complete(leaveApply.getAct().getTaskId(), leaveApply.getAct().getProcInsId(), leaveApply.getAct().getComment(), vars); boolean state = actTaskService.isProcessEnd(leaveApply.getAct().getProcInsId()); List users = new ArrayList<>(); List userList = new ArrayList<>(); if (!state) { users.add(leaveApply.getCreateBy()); if ("yes".equals(leaveApply.getAct().getFlag())||"end".equals(leaveApply.getAct().getFlag())) { leaveApply.setStatus("5"); WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "82", "0", "待通知", notifyRole)); LeaveDetail detail=new LeaveDetail(); detail.setLeaveId(leaveApply.getId()); List leaveDetails = leaveDetailDao.findList(detail); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Office company = UserUtils.getSelectCompany(); User user = UserUtils.getByCompanyAndUserId(leaveApply.getApplyer(),company.getId()); WorkStaffBasicInfo workStaffBasicInfo = new WorkStaffBasicInfo(); workStaffBasicInfo.setUserId(leaveApply.getApplyer()); workStaffBasicInfo.setCompany(company); List workStaffAchives = workStaffAchivesDao.getByCompanyInfo(workStaffBasicInfo); WorkStaffBasicInfo workStaffAchive = new WorkStaffBasicInfo(); WorkAttendanceRule oaRule = new WorkAttendanceRule(); if (workStaffAchives!=null && workStaffAchives.size()!=0) { workStaffAchive = workStaffAchives.get(0); //依据公司和规则编号查询规则 oaRule = workAttendanceRuleService.findAttendanceRuleByCompany(workStaffAchive.getCompany().getId(), workStaffAchive.getUserId(), ""); if (oaRule == null || StringUtils.isBlank(oaRule.getId())) { oaRule = workAttendanceRuleService.findAttendanceRuleByCompany(workStaffAchive.getCompany().getId(), "", workStaffAchive.getOffice().getId()); } if (oaRule == null) { oaRule = new WorkAttendanceRule(); oaRule.setType("3"); } } Boolean status = false; SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); if (StringUtils.isNotBlank(oaRule.getId()) && StringUtils.isNotBlank(workStaffAchive.getId()) && leaveDetails!=null && leaveDetails.size()!=0) { for (LeaveDetail leaveDetail : leaveDetails) { if (leaveDetail.getFlat().equals("2")) { Date stateTime = leaveDetail.getStartTime(); Date endTime = leaveDetail.getEndTime(); String startType = leaveDetail.getStartType(); String endType = leaveDetail.getEndType(); LeaveType leaveType = leaveDetail.getLeaveType(); /* int stateMonth = Integer.parseInt(stateTime.substring(5,7)); int endMonth = Integer.parseInt(endTime.substring(5,7));*/ List dates = findDates(stateTime, endTime); for (Date date : dates) { String time = sdf.format(date); int iholidays = workAttendanceInfoService.isHolidays(time); if (iholidays == 0 || (iholidays != 0 && "1".equals(leaveType.getModel()))) { Integer dateInt = Integer.parseInt(sdf1.format(date)); int count = 3; if (sdf.format(date).equals(sdf.format(stateTime))) { if (startType.equals("2")) { count = 2; } } if (sdf.format(date).equals(sdf.format(endTime))) { if (endType.equals("1")) { count = 1; } } if (workStaffAchive.getWorkEndDate() != null) { String end = sdf1.format(workStaffAchive.getWorkEndDate()); if (Integer.parseInt(end) >= dateInt) { status = true; } } else { status = true; } int holidays = 0; if (status) { WorkAttendanceInfo workAttendanceInfo1 = new WorkAttendanceInfo(); WorkAttendanceInfo workAttendanceInfo2 = new WorkAttendanceInfo(); WorkAttendanceInfo workAttendanceInfo = new WorkAttendanceInfo(); workAttendanceInfo.setStaffId(workStaffAchive.getId()); workAttendanceInfo.setAttendanceDate(date); List workAttendanceInfos = workAttendanceInfoService.findList(workAttendanceInfo); if (workAttendanceInfos != null && workAttendanceInfos.size() != 0) { if (workAttendanceInfos.size() == 1) { if (workAttendanceInfos.get(0).getMorningAfternoon().equals("1")) { workAttendanceInfo1 = workAttendanceInfos.get(0); } else { workAttendanceInfo2 = workAttendanceInfos.get(0); } } else { if (workAttendanceInfos.get(0).getMorningAfternoon().equals("1")) { workAttendanceInfo2 = workAttendanceInfos.get(1); workAttendanceInfo1 = workAttendanceInfos.get(0); } else { workAttendanceInfo1 = workAttendanceInfos.get(1); workAttendanceInfo2 = workAttendanceInfos.get(0); } } } workAttendanceInfoService.saveInfo(oaRule, oaRule.getType(), workStaffAchive.getId(), user, date, time, null, "", "", "", "4", "4", "", holidays, null, "", leaveType.getIsAttendance(), leaveType.getIsSubsidized(), "", "", null, "", count, workAttendanceInfo1.getId(), workAttendanceInfo2.getId()); } } } } } } //修改明细flat dao.updateDetailFlat(leaveApply); } else { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); if (!"11".equals(leaveApply.getStatus())) { leaveApply.setStatus("12"); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "82", "0", "待通知", notifyRole)); } } workActivityProcessService.deleteProcessIdAuditUsers(leaveApply.getProcessInstanceId()); } else { if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("leaveExtend")) { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); //users.addAll(userList); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), new User(), leaveApply.getCompanyId(), notifyTitle, str, "82", "0", "待审批", notifyRole); List workProjectNotifys = activityService.getByFlagAndTaskDefKeyList( activities, workProjectNotify, taskDefKey, leaveApply.getAct().getFlag(), taskCount, leaveApply.getCreateBy(), leaveApply.getOfficeId(), "82"); for (WorkProjectNotify workProjectNotify1 : workProjectNotifys) { users.add(workProjectNotify1.getUser()); workProjectNotify1.setId(""); workProjectNotify1.setIsNewRecord(false); workProjectNotifyService .save(workProjectNotify1); } } else { if (!"yes".equals(leaveApply.getAct().getFlag())) { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "82", "0", "重新申请", notifyRole)); users.add(leaveApply.getCreateBy()); } else { if (StringUtils.isNotBlank(enname)) { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); //users.addAll(userList1); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), new User(), leaveApply.getCompanyId(), notifyTitle, str, "82", "0", "待审批", notifyRole); users.addAll(auditUsers); for (User user1 : auditUsers) { workProjectNotify.setUser(user1); workProjectNotify.setId(""); workProjectNotify.setIsNewRecord(false); workProjectNotifyService.save(workProjectNotify); Map extras = new HashMap<>(); extras.put("type", "7002"); extras.put("procDefKey", "82"); extras.put("id", workProjectNotify.getId()); UserUtils.pushInfoToApp(notifyTitle, str, extras, user1.getId()); } } else { WorkProjectNotify notify = new WorkProjectNotify(); notify.setNotifyId(leaveApply.getId()); userList = workProjectNotifyService.readByNotifyId(notify); users.addAll(userList); users.add(leaveApply.getCreateBy()); workProjectNotifyService .save(UtilNotify .saveNotify(leaveApply.getId(), leaveApply.getCreateBy(), leaveApply.getCompanyId(), notifyTitle, str, "82", "0", "重新申请", notifyRole)); } } } } if (users != null && users.size() != 0) { for (User u : users) { UserUtils.pushIm(u.getId(), str); } } if (userList != null && userList.size() != 0) { for (User u : userList) { UserUtils.pushMeIm(u.getId()); } } this.saveExtend(leaveApply); dao.update(leaveApply); return "保存审核意见成功!"; } @Transactional(readOnly = false) public int startMonthTask(String firstDay, String lastDay) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd"); Date dBegin = null; Date dEnd=null; String year=lastDay.substring(0,4); AjaxJson ajaxJson = new AjaxJson(); workCalendarService.queryHoliday(year, ajaxJson); Map map = ajaxJson.getBody(); String holidays = map.get("holidays"); if(holidays==null||"".equals(holidays)){ return -1;//未发布法定节假日 } String workdays = map.get("workdays"); int count = 0; try { dBegin = sdf.parse(firstDay); dEnd = sdf.parse(lastDay); } catch (ParseException e) { e.printStackTrace(); } List lDate = findDates(dBegin, dEnd); for (Date d : lDate) { System.out.println(sf.format(d)); if (holidays.contains(sf.format(d))) { continue; } else if (workdays.contains(sf.format(d))) { count++; } else if (!this.isWeek(sf.format(d))) { count++; } } return count; } public static Boolean isWeek(String day) { SimpleDateFormat sdfDay = new SimpleDateFormat("yyyyMMdd"); Date date= null;//取时间 try { date = sdfDay.parse(day); Calendar calendar = new GregorianCalendar(); calendar.setTime(date); int week = calendar.get(Calendar.DAY_OF_WEEK)-1; if (week==0 || week==6){ return true; }else { return false; } } catch (ParseException e) { e.printStackTrace(); } return false; } public static List findDates(Date dBegin, Date dEnd) { List lDate = new ArrayList(); lDate.add(dBegin); Calendar calBegin = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calBegin.setTime(dBegin); Calendar calEnd = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calEnd.setTime(dEnd); // 测试此日期是否在指定日期之后 while (dEnd.after(calBegin.getTime())) { // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 calBegin.add(Calendar.DAY_OF_MONTH, 1); lDate.add(calBegin.getTime()); } return lDate; } public int findHisTime(LeaveApply leaveApply){ return dao.findHisTime(leaveApply); } public int findHisDate(LeaveApply leaveApply){ return dao.findHisDate(leaveApply); } public Page getMangePage(Page page, LeaveApply leaveApply) { leaveApply.setPage(page); List newList=new ArrayList(); List list=dao.getMange(leaveApply); if(list!=null&&list.size()>0){ for(LeaveApply leaveApply1:list){ LeaveApply leaveApply2=dao.getSumDays(leaveApply1.getStaffId()); leaveApply1.setSumDays(leaveApply2.getSumDays()); int count=dao.getResetState(leaveApply1.getStaffId()); if(count==0){ leaveApply1.setState("1"); }else{ leaveApply1.setState("0");//0未重置,1已重置 } newList.add(leaveApply1); } } page.setList(newList); return page; } @Transactional(readOnly = false) public void reset(String basicInfoId) { LeaveCount leaveCount=new LeaveCount(); leaveCount.setStaffId(basicInfoId); List list= leaveCountDao.findList(leaveCount); if(list!=null&&list.size()>0){ for(LeaveCount leaveCount1:list){ if("1".equals(leaveCount1.getLeaveType().getMethod())){ leaveCountDao.updateReset(leaveCount1.getId()); }else{ leaveCountDao.delete(leaveCount1); } } } } //时间验证 @Transactional(readOnly = false) public String validate(LeaveApply leaveApply){ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); WorkStaffBasicInfo workStaffBasicInfo=this.getBasicInfo(); List leaveDetails=leaveDetailDao.findHisList(workStaffBasicInfo.getId()); if(leaveApply.getLeaveDetailList()!=null&&leaveApply.getLeaveDetailList().size()>0){ List list=leaveApply.getLeaveDetailList(); leaveDetails.addAll(list); for(int j=0;j=start1&&start<=realEnd1)||(realEnd>=start1&&realEnd<=realEnd1) ||(start1>=start&&start1<=realEnd)||(realEnd1>=start&&realEnd1<=realEnd)){ return "请假时间存在重叠情况!"; } } } } } } } /*for(LeaveDetail leaveDetail:leaveApply.getLeaveDetailList()){ LeaveApply apply=new LeaveApply(); if(leaveApply.getId()!=null&&!"".equals(leaveApply.getId())){ apply.setId(leaveApply.getId()); } apply.setStartTime(leaveDetail.getStartTime()); apply.setEndTime(leaveDetail.getEndTime()); apply.setStaffId(workStaffBasicInfo.getId()); int count =this.findHisTime(apply); if(count>0){ if(leaveApply.getStatus()==null||"1".equals(leaveApply.getStatus())||"5".equals(leaveApply.getStatus())){ if("1".equals(type)){ leaveApply.setStatus("1"); this.save(leaveApply); }else if("2".equals(type)){ leaveApply.setStatus("5"); this.saveExtend(leaveApply); } } return "请假时间与历史请假时间存在重叠情况!"; } apply.setStartType(leaveDetail.getStartType()); apply.setEndType(leaveDetail.getEndType()); int count1 =this.findHisDate(apply); if(count1>0){ if(leaveApply.getStatus()==null||"1".equals(leaveApply.getStatus())||"5".equals(leaveApply.getStatus())){ if("1".equals(type)){ leaveApply.setStatus("1"); this.save(leaveApply); }else if("2".equals(type)){ leaveApply.setStatus("5"); this.saveExtend(leaveApply); } } return "请假时间与历史请假时间存在重叠情况!"; } }*/ } return ""; } //时间验证 @Transactional(readOnly = false) public String validateTime(Date startTime,String startType,Date endTime,String endType){ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); WorkStaffBasicInfo workStaffBasicInfo=this.getBasicInfo(); List leaveDetails=leaveDetailDao.findListValidateTime(workStaffBasicInfo.getId()); double start=Integer.parseInt(sdf1.format(startTime)); double end=Integer.parseInt(sdf1.format(endTime)); if("2".equals(startType)){ start=start+0.5; } if("2".equals(endType)){ end=end+0.5; } for(int i=0;i=start1&&start<=realEnd1)||(end>=start1&&end<=realEnd1) ||(start1>=start&&start1<=end)||(realEnd1>=start&&realEnd1<=end)){ return "请假时间存在重叠情况!"; } } return ""; } public double holidays(String startDate, String endDate, String startType,String endType) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd"); Date dBegin = null; Date dEnd=null; String year=endDate.substring(0,4); AjaxJson ajaxJson = new AjaxJson(); workCalendarService.queryHoliday(year, ajaxJson); Map map = ajaxJson.getBody(); String holidays = map.get("holidays"); String workdays = map.get("workdays"); int count = 0; try { dBegin = sdf.parse(startDate); dEnd = sdf.parse(endDate); } catch (ParseException e) { e.printStackTrace(); } List lDate = DateUtils.findDates(dBegin, dEnd); for (Date d : lDate) { System.out.println(sf.format(d)); if (holidays.contains(sf.format(d))) { continue; } else if (workdays.contains(sf.format(d))) { count++; } else if (!DateUtils.isWeek(sf.format(d))) { count++; } } double c=count-1; if(count!=0){ if("1".equals(startType) && "1".equals(endType) ){ c=c+0.5; }else if("1".equals(startType) && "2".equals(endType)){ c=c+1; }else if("2".equals(startType) && "2".equals(endType)){ c=c+0.5; } else if("2".equals(startType) && "1".equals(endType)){ c=c; } }else{ c=0; } return c; } public static double getDay(Date satrtDate,Date endDate,String startType,String endType) { double days = (double) ((endDate.getTime() - satrtDate.getTime()) / (1000*3600*24)); if("1".equals(startType) && "1".equals(endType)){ days=days+0.5; }else if("1".equals(startType) && "2".equals(endType)){ days=days+1; }else if("2".equals(startType) && "2".equals(endType)){ days=days+0.5; } else if("2".equals(startType) && "1".equals(endType)){ days=days; } return days; } public String getYear(int i){//获取上一年 Date date = new Date(); SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(date);//设置起时间 cal.add(Calendar.YEAR, i);//增加一年 return sdfYear.format(cal.getTime()); } public String getNextDay(String time){//获取下一天 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = sdf.parse(time); } catch (ParseException e) { e.printStackTrace(); } Calendar cal = Calendar.getInstance(); cal.setTime(date);//设置起时间 cal.add(Calendar.DATE, 1);//增加一天 return sdf.format(cal.getTime()); } public static void main(String[] args) { /* Date date = new Date(); SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); Calendar cal = Calendar.getInstance(); cal.setTime(date);//设置起时间 cal.add(Calendar.YEAR, -1);//增加一年 System.out.println("输出::"+sdfYear.format(cal.getTime()));*/ } //时间验证 @Transactional(readOnly = false) public void saveLeaveCount(LeaveDetail leaveDetail,double days,String staffId){ //请假统计详情 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf2 = new SimpleDateFormat("MMdd"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); Date nowDate=new Date(); String now=sdf2.format(nowDate); String start=sdf2.format(leaveDetail.getStartTime()); double d=Integer.parseInt(now); double s=Integer.parseInt(start); //获取系统参数 SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); String time= UserUtils.getSysParam("reset",UserUtils.getUser()); String m=""; String n=""; String lastYear=""; if(time!=null&&!"".equals(time)) { lastYear=this.getYear(-1)+"12"+time; m=sdfYear.format(nowDate)+"12"+time; n=sdfYear.format(nowDate)+"-12-"+time; }else{ lastYear=this.getYear(-1)+"1231"; m=sdfYear.format(nowDate)+"1231"; n=sdfYear.format(nowDate)+"-12-31"; } String year=""; double nextDays=0; year=sdfYear.format(nowDate); double start1=Integer.parseInt(sdf1.format(leaveDetail.getStartTime())); Date realEndTime1 = leaveDetail.getRealEndTime(); if(realEndTime1==null){ realEndTime1=leaveDetail.getEndTime(); } double realEnd1=Integer.parseInt(sdf1.format(realEndTime1)); String startType1 = leaveDetail.getStartType(); String realEndType1 = leaveDetail.getRealEndType(); if(realEndType1==null){ realEndType1=leaveDetail.getEndType(); } if("2".equals(startType1)){ start1=start1+0.5; } if("2".equals(realEndType1)){ realEnd1=realEnd1+0.5; } double resetTime=Integer.parseInt(m)+0.5; double lastResetTime=Integer.parseInt(lastYear)+0.5; if(start1<=resetTime&&start1>lastResetTime){ if(resetTime>start1&&start1 leaveCounts=leaveCountService.findList(leaveCount); if(leaveCounts!=null&&leaveCounts.size()>0){ LeaveCount leaveCount1=leaveCounts.get(0); double sum=Double.parseDouble(leaveCount1.getSums()); int count=Integer.parseInt(leaveCount1.getCounts()); leaveCount1.setCounts(String.valueOf(count+1)); leaveCount1.setSums(String.valueOf(sum+days)); leaveCount1.setUpdateDate(new Date()); leaveCount1.setResetState("0"); leaveCountDao.update(leaveCount1); }else{ LeaveCount leaveCount2=new LeaveCount(); leaveCount2.preInsert(); leaveCount2.setCreateBy(UserUtils.getUser()); leaveCount2.setUpdateDate(new Date()); leaveCount2.setCreateDate(new Date()); leaveCount2.setUpdateBy(UserUtils.getUser()); leaveCount2.setDelFlag("0"); leaveCount2.setStaffId(staffId); leaveCount2.setSums(String.valueOf(days)); leaveCount2.setCounts("1"); leaveCount2.setResetState("0");//未重置 leaveCount2.setLeaveTypeId(leaveDetail.getLeaveTypeId()); leaveCount2.setYear(year); leaveCountDao.insert(leaveCount2); } } } //请假管理重置定时方法 @Transactional(readOnly = false) public void resetTask() { SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); String date=DateFormatUtils.format(new Date(), "yyyy-MM-dd"); Date nowDate=new Date(); String nowYear=sdfYear.format(nowDate); LeaveCount l=new LeaveCount(); l.setYear(nowYear); l.setResetState("0"); List leaveCounts= leaveCountDao.findList(l); if(leaveCounts!=null&&leaveCounts.size()>0){ for(LeaveCount leaveCount:leaveCounts){ WorkStaffBasicInfo workStaffBasicInfo = workStaffAchivesDao.get(leaveCount.getStaffId()); User u=userDao.get(workStaffBasicInfo.getUserId()); String time= UserUtils.getSysParam("reset",u); if(time==null||"".equals(time)) { time=nowYear+"-12-31"; }else{ time=nowYear+"-12-"+time; } if(date.equals(time)){ if(Double.parseDouble(leaveCount.getLeaveType().getZero())>=Double.parseDouble(leaveCount.getSums()) ||"0".equals(leaveCount.getLeaveType().getZero())){ //统计下一年已经请假的天数 LeaveCount leaveCount2=new LeaveCount(); leaveCount2.preInsert(); leaveCount2.setCreateBy(u); leaveCount2.setUpdateDate(new Date()); leaveCount2.setCreateDate(new Date()); leaveCount2.setUpdateBy(u); leaveCount2.setDelFlag("0"); leaveCount2.setStaffId(leaveCount.getStaffId()); leaveCount2.setSums(String.valueOf(0)); leaveCount2.setCounts("1"); leaveCount2.setResetState("0");//未重置 leaveCount2.setLeaveTypeId(leaveCount.getLeaveTypeId()); leaveCount2.setYear(this.getYear(1)); leaveCountDao.insert(leaveCount2); /* if("1".equals(leaveCount1.getLeaveType().getMethod())){ leaveCountDao.updateReset(leaveCount1.getId()); }else{ leaveCountDao.delete(leaveCount1); }*/ } } } } } //请假管理重置定时方法 @Transactional(readOnly = false) public void backTask() { List leaveApplyList=dao.getBackTaskList(); if(leaveApplyList!=null&&leaveApplyList.size()>0){ for(LeaveApply leaveApply:leaveApplyList){ User applyer=userDao.get(leaveApply.getApplyer()); String param=UserUtils.getSysParam("backState",applyer); if("是".equals(param)){ LeaveDetail detail=new LeaveDetail(); detail.setLeaveId(leaveApply.getId()); List leaveDetails = leaveDetailDao.findList(detail); leaveApply.setLeaveDetailList(leaveDetails); leaveApply.setBackTime(new Date()); leaveApply.setBackStartType("2"); String processInstanceId=leaveApply.getProcessInstanceId(); try { Map variables = new HashMap(); identityService.setAuthenticatedUserId(leaveApply.getApplyer()); String contentStr = "请假编号:" + leaveApply.getNo() + ",请假日期:" + DateUtils.formatDate(leaveApply.getApplyTime()); String titleStr = "销假人:" + applyer.getName(); String businessKey = leaveApply.getId(); Office office = officeDao.get(leaveApply.getOfficeId()); WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("zzsql3125f1f194c8lz88a9miiii75090477", office); // 启动流程 String processType = workActivityMenu.getProcessType(); StringBuffer buffer = new StringBuffer(); Activity activity = new Activity(); WorkProjectNotify workProjectNotify = UtilNotify .saveNotify(leaveApply.getId(), null, leaveApply.getCompanyId(), titleStr, contentStr, "81", "0", "待审批", "" ); List users = new ArrayList<>(); List bmzrList = UserUtils.getByRoleActivityEnnameTask("bmzr", 2, office.getId(), "25", applyer); if (StringUtils.isNotBlank(workActivityMenu.getId())) { workProjectNotify.setNotifyRole(""); workActivityMenu = workActivityMenuService.get(workActivityMenu.getId()); List activities = workActivityMenu.getActivities(); for (Activity a : activities) { String encount = a.getEncount(); String enlist = a.getEnlist(); if (a.getRole() != null && StringUtils.isNotBlank(a.getRole().getEnname())) { List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(), office.getId(), "25", leaveApply.getCreateBy()); if (enusers.size() == 0) { leaveApply.setStatus("5"); this.save(leaveApply); } variables.put(enlist, enusers); variables.put(encount, enusers.size()); } if (a.getDelFlag().equals("0") && a.getCount() == 1) { activity = a; } } buffer.append(activity.getRole().getEnname()); if (activity != null && StringUtils.isNotBlank(activity.getId())) { //角色审批 if (StringUtils.isNotBlank(activity.getRole().getEnname())) { users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(), office.getId(), "25", leaveApply.getCreateBy()); } //人员审批 if (StringUtils.isNotBlank(activity.getUser().getId())) { users.add(activity.getUser()); } } workProjectNotify.setId(""); } else { variables.put("bmzrList", bmzrList); if (bmzrList.size() == 0) { leaveApply.setStatus("5"); this.save(leaveApply); } if (bmzrList.size() == 0) { System.out.println("系统自动发起销假:流程审批人不能为空,角色业务部负责人下无用户,请联系管理员!"); } variables.put("bmzrCount", bmzrList.size()); processType = "leaveBack"; users.addAll(bmzrList); } List userIds = new ArrayList<>(users.size()); for (User u : users) { userIds.add(u.getId()); workProjectNotify.setUser(u); workProjectNotify.setCreateBy(u); workProjectNotify.setUpdateBy(u); workProjectNotify.setId(""); workProjectNotify.setNotifyRole("业务部负责人审批"); workProjectNotifyService.save(workProjectNotify); Map extras = new HashMap<>(); extras.put("type", "7002"); extras.put("procDefKey", "81"); extras.put("id", workProjectNotify.getId()); UserUtils.pushInfoToApp(titleStr, contentStr, extras, u.getId()); } UserUtils.pushIm(userIds, contentStr); variables.put("busId", businessKey); variables.put("type", processType); variables.put("title", "审批单:" + leaveApply.getNo());//设置标题; ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables); if (org.apache.commons.lang3.StringUtils.isNotBlank(processInstanceId)) { workActivityProcessService.updateProcessInstanceId(processInstance.getId(), processInstanceId); workActivityProcessService.deleteProcessInstanceId(processInstanceId); workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId); WorkActivityProcess pro = new WorkActivityProcess(); pro.setId(""); pro.setDelFlag("0"); pro.preInsert(); pro.setRemarks("销假申请"); pro.setProcessKey("leaveBack"); pro.setIsApproval("1"); pro.setCreateBy(applyer); pro.setUpdateBy(applyer); pro.setProcessInstanceId(processInstance.getId()); pro.setCount(0); workActivityProcessDao.insert(pro); } List list = workActivityMenu.getActivities(); if (list != null && list.size() != 0) { workActivityProcessService.saveList(list, processInstance.getId()); } else { WorkActivityProcess workActivityProcess = new WorkActivityProcess(); workActivityProcess.setProcessKey(processType); workActivityProcess.setProcessInstanceId(processInstance.getId()); workActivityProcess.setCreateBy(applyer); workActivityProcess.setUpdateBy(applyer); workActivityProcess.setCount(1); workActivityProcess.setIsApproval("0"); workActivityProcessService.insert(workActivityProcess); workActivityProcessService.insertAuditsByType(bmzrList, processInstance.getId(), 1, 1); } leaveApply.setProcessInstanceId(processInstance.getId()); leaveApply.setStatus("6"); this.save(leaveApply); workActivityProcessService.updateType(processInstance.getId(), "leaveBack"); } catch (Exception e) { logger.error("启动审批流程异常:", e); } } } } } //验证上限天数 @Transactional(readOnly = false) public String validateSumDays(LeaveApply leaveApply){ if(leaveApply.getLeaveDetailList()!=null&&leaveApply.getLeaveDetailList().size()>0){ List list=leaveApply.getLeaveDetailList(); Map map=new HashMap(); for(int j=0;j