1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950 |
- /**
- * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> 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<LeaveApplyDao, LeaveApply> {
- @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<LeaveApply> 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<LeaveApply> findPage(Page<LeaveApply> page, LeaveApply leaveApply) {
- leaveApply.setPage(page);
- page.setList(findList(leaveApply));
- return page;
- }
- public List<LeaveApply> getCount() {
- WorkStaffBasicInfo workStaffBasicInfo = this.getBasicInfo();
- LeaveApply leaveApply = new LeaveApply();
- leaveApply.setBasicInfo(workStaffBasicInfo);
- List<LeaveApply> 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<User> 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<String, Object> variables = new HashMap<String, Object>();
- 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<User> users = new ArrayList<>();
- // 部门责任人
- List<User> bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy());
- // 分管领导
- List<User> fgldList = UserUtils.getByRoleActivityEnname("fgld", 2, office.getId(), "25", leaveApply.getCreateBy());
- // 总经理
- List<User> zjlList = UserUtils.getByRoleActivityEnname("zjl", 3, office.getId(), "25", leaveApply.getCreateBy());
- if (StringUtils.isNotBlank(workActivityMenu.getId())) {
- workProjectNotify.setNotifyRole("");
- workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
- List<Activity> 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<String> userIds = new ArrayList<>(users.size());
- for (User u : users) {
- userIds.add(u.getId());
- workProjectNotify.setUser(u);
- workProjectNotify.setId("");
- workProjectNotify.setNotifyRole("业务部负责人审批");
- workProjectNotifyService.save(workProjectNotify);
- Map<String, Object> 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<Activity> 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<User> 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<String, Object> 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<Activity> 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<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
- List<Activity> 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<User> bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy());
- List<User> fgldList = UserUtils.getByRoleActivityEnname("fgld", 2, office.getId(), "25", leaveApply.getCreateBy());
- List<User> 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<User> users = new ArrayList<>();
- List<User> 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<LeaveDetail> 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<WorkStaffBasicInfo> 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<Date> 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<WorkAttendanceInfo> 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<WorkProjectNotify> 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<String, Object> 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<WorkActivityProcess> processList1 = workActivityProcessService.findByProcInsId(process);
- WorkActivityProcess workActivityProcess = new WorkActivityProcess();
- workActivityProcess.setProcessInstanceId(leaveApply.getProcessInstanceId());
- List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
- WorkProjectNotify notify = new WorkProjectNotify();
- notify.setNotifyId(leaveApply.getId());
- List<User> 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<String, Object> variables = new HashMap<String, Object>();
- 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<User> users = new ArrayList<>();
- List<User> bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy());
- if (StringUtils.isNotBlank(workActivityMenu.getId())) {
- workProjectNotify.setNotifyRole("");
- workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
- List<Activity> 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<String> userIds = new ArrayList<>(users.size());
- for (User u : users) {
- userIds.add(u.getId());
- workProjectNotify.setUser(u);
- workProjectNotify.setId("");
- workProjectNotify.setNotifyRole("业务部负责人审批");
- workProjectNotifyService.save(workProjectNotify);
- Map<String, Object> 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<Activity> 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<User> 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<String, Object> 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<Activity> 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<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
- List<Activity> 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<User> users = new ArrayList<>();
- List<User> 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<LeaveDetail> 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<start){
- //修改是否有效
- leaveDetailDao.updateIsUse(leaveDetail.getId());
- }else{
- this.saveLeaveCount(leaveDetail,Double.parseDouble(leaveDetail.getDays()),leaveApply.getBasicInfo().getId());
- }
- }
- Office company = UserUtils.getSelectCompany();
- User user = UserUtils.getByCompanyAndUserId(leaveApply.getApplyer(),company.getId());
- WorkStaffBasicInfo workStaffBasicInfo = new WorkStaffBasicInfo();
- workStaffBasicInfo.setUserId(leaveApply.getApplyer());
- workStaffBasicInfo.setCompany(company);
- List<WorkStaffBasicInfo> 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<Date> 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<WorkAttendanceInfo> 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<WorkProjectNotify> 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<String, Object> 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<WorkActivityProcess> processList1 = workActivityProcessService.findByProcInsId(process);
- WorkActivityProcess workActivityProcess = new WorkActivityProcess();
- workActivityProcess.setProcessInstanceId(leaveApply.getProcessInstanceId());
- List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
- WorkProjectNotify notify = new WorkProjectNotify();
- notify.setNotifyId(leaveApply.getId());
- List<User> 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<WorkActivityProcess> processList1 = workActivityProcessService.findByProcInsId(process);
- WorkActivityProcess workActivityProcess = new WorkActivityProcess();
- workActivityProcess.setProcessInstanceId(leaveApply.getProcessInstanceId());
- List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
- WorkProjectNotify notify = new WorkProjectNotify();
- notify.setNotifyId(leaveApply.getId());
- List<User> 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<WorkActivityProcess> 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<String, Object> variables = new HashMap<String, Object>();
- 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<User> users = new ArrayList<>();
- List<User> bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy());
- List<User> fgldList = UserUtils.getByRoleActivityEnname("fgld", 2, office.getId(), "25", leaveApply.getCreateBy());
- List<User> zjlList = UserUtils.getByRoleActivityEnname("zjl", 3, office.getId(), "25", leaveApply.getCreateBy());
- if (StringUtils.isNotBlank(workActivityMenu.getId())) {
- workProjectNotify.setNotifyRole("");
- workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
- List<Activity> 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<String> userIds = new ArrayList<>(users.size());
- for (User u : users) {
- userIds.add(u.getId());
- workProjectNotify.setUser(u);
- workProjectNotify.setId("");
- workProjectNotify.setNotifyRole("业务部负责人审批");
- workProjectNotifyService.save(workProjectNotify);
- Map<String, Object> 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<Activity> 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<User> 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<String, Object> 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<Activity> 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<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
- List<Activity> 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<User> bmzrList = UserUtils.getByRoleActivityEnname("bmzr", 2, office.getId(), "25", leaveApply.getCreateBy());
- List<User> fgldList = UserUtils.getByRoleActivityEnname("fgld", 2, office.getId(), "25", leaveApply.getCreateBy());
- List<User> 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<User> users = new ArrayList<>();
- List<User> 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<LeaveDetail> 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<WorkStaffBasicInfo> 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<Date> 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<WorkAttendanceInfo> 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<WorkProjectNotify> 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<String, Object> 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<String, String> 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<Date> 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<Date> 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<LeaveApply> getMangePage(Page<LeaveApply> page, LeaveApply leaveApply) {
- leaveApply.setPage(page);
- List newList=new ArrayList();
- List<LeaveApply> 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<LeaveCount> 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<LeaveDetail> leaveDetails=leaveDetailDao.findHisList(workStaffBasicInfo.getId());
- if(leaveApply.getLeaveDetailList()!=null&&leaveApply.getLeaveDetailList().size()>0){
- List<LeaveDetail> list=leaveApply.getLeaveDetailList();
- leaveDetails.addAll(list);
- for(int j=0;j<list.size();j++){
- LeaveDetail leaveDetail=list.get(j);
- if(leaveDetail.getLeaveType()!=null&&!"1".equals(leaveDetail.getDelFlag())){
- leaveDetail.setRealEndTime(leaveDetail.getEndTime());
- leaveDetail.setRealEndType(leaveDetail.getEndType());
- Date stateTime = leaveDetail.getStartTime();
- double start=Integer.parseInt(sdf1.format(stateTime));
- Date realEndTime = leaveDetail.getRealEndTime();
- double realEnd=Integer.parseInt(sdf1.format(realEndTime));
- String startType = leaveDetail.getStartType();
- String realEndType = leaveDetail.getRealEndType();
- if("2".equals(startType)){
- start=start+0.5;
- }
- if("2".equals(realEndType)){
- realEnd=realEnd+0.5;
- }
- for(int i=0;i<leaveDetails.size();i++){
- LeaveDetail detail=leaveDetails.get(i);
- if(detail.getLeaveType()!=null&&!"1".equals(detail.getDelFlag())){
- Date stateTime1 = detail.getStartTime();
- double start1=Integer.parseInt(sdf1.format(stateTime1));
- Date realEndTime1 = detail.getRealEndTime();
- if(realEndTime1==null){
- realEndTime1=detail.getEndTime();
- }
- double realEnd1=Integer.parseInt(sdf1.format(realEndTime1));
- String startType1 = detail.getStartType();
- String realEndType1 = detail.getRealEndType();
- if(realEndType1==null){
- realEndType1=detail.getEndType();
- }
- if("2".equals(startType1)){
- start1=start1+0.5;
- }
- if("2".equals(realEndType1)){
- realEnd1=realEnd1+0.5;
- }
- if(detail.getId()!=null&&leaveDetail.getId()!=null){
- if(!detail.getId().equals(leaveDetail.getId())){
- if((start>=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<LeaveDetail> 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<leaveDetails.size();i++){
- LeaveDetail detail=leaveDetails.get(i);
- Date stateTime1 = detail.getStartTime();
- double start1=Integer.parseInt(sdf1.format(stateTime1));
- Date realEndTime1 = detail.getRealEndTime();
- if(realEndTime1==null){
- realEndTime1=detail.getEndTime();
- }
- double realEnd1=Integer.parseInt(sdf1.format(realEndTime1));
- String startType1 = detail.getStartType();
- String realEndType1 = detail.getRealEndType();
- if(realEndType1==null){
- realEndType1=detail.getEndType();
- }
- if("2".equals(startType1)){
- start1=start1+0.5;
- }
- if("2".equals(realEndType1)){
- realEnd1=realEnd1+0.5;
- }
- if((start>=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<String, String> 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<Date> 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<realEnd1){
- if("2".equals(leaveDetail.getLeaveType().getModel())){//工作日
- days=this.holidays(sdf.format(leaveDetail.getStartTime()),
- n,
- leaveDetail.getStartType(),
- "2");
- nextDays=this.holidays(this.getNextDay(n),
- sdf.format(realEndTime1),
- "1",
- realEndType1);
- }else{
- try {
- days=getDay(leaveDetail.getStartTime(),sdf.parse(n), leaveDetail.getStartType(),"2");
- nextDays=getDay(sdf.parse(this.getNextDay(n)),realEndTime1, "1",realEndType1);
- } catch (ParseException e) {
- e.printStackTrace();
- }
- }
- }
- LeaveCount leaveCount=new LeaveCount();
- leaveCount.setStaffId(staffId);
- leaveCount.setLeaveTypeId(leaveDetail.getLeaveTypeId());
- leaveCount.setYear(year);
- List<LeaveCount> 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<LeaveCount> 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<LeaveApply> 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<LeaveDetail> leaveDetails = leaveDetailDao.findList(detail);
- leaveApply.setLeaveDetailList(leaveDetails);
- leaveApply.setBackTime(new Date());
- leaveApply.setBackStartType("2");
- String processInstanceId=leaveApply.getProcessInstanceId();
- try {
- Map<String, Object> variables = new HashMap<String, Object>();
- 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<User> users = new ArrayList<>();
- List<User> bmzrList = UserUtils.getByRoleActivityEnnameTask("bmzr", 2, office.getId(), "25", applyer);
- if (StringUtils.isNotBlank(workActivityMenu.getId())) {
- workProjectNotify.setNotifyRole("");
- workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
- List<Activity> 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<String> 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<String, Object> 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<Activity> 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<LeaveDetail> list=leaveApply.getLeaveDetailList();
- Map<String,String> map=new HashMap<String,String>();
- for(int j=0;j<list.size();j++){
- LeaveDetail leaveDetail=list.get(j);
- if(leaveDetail.getLeaveType()!=null&&!"1".equals(leaveDetail.getDelFlag())){
- String typeId=leaveDetail.getLeaveType().getId();
- if(map.containsKey(typeId)){
- double day= Double.parseDouble(map.get(typeId).toString())+Double.parseDouble(leaveDetail.getDays());
- map.put(typeId,String.valueOf(day));
- }else{
- map.put(typeId,leaveDetail.getDays());
- }
- }
- }
- for(String key : map.keySet()){
- String value = map.get(key);
- LeaveType leaveType=leaveTypeDao.get(key);
- if("1".equals(leaveType.getMaxDays())){//无上限
- continue;
- }
- //单次或一次性
- if("3".equals(leaveType.getMethod())||"4".equals(leaveType.getMethod())){
- if(Double.parseDouble(leaveType.getSetDays())<Double.parseDouble(value)){
- return leaveType.getName()+":超过上限天数!";
- }
- }else if("2".equals(leaveType.getMethod())){//单次累计
- // 查询历史天数
- String sumDay=leaveDetailDao.sumday(key,leaveApply.getId());
- double d=Double.parseDouble(sumDay)+Double.parseDouble(value);
- if(Double.parseDouble(leaveType.getSetDays())<d){
- return leaveType.getName()+":超过上限天数!";
- }
- }else if("1".equals(leaveType.getMethod())){//年度累计
- // 查询历史天数
- //待定。。。。。。。。。。。。。
- //。。。。。。。。。。。。。
- }
- }
- }
- return "";
- }
- }
|