ProjarrangeDetailController.java 85 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126
  1. package cn.com.lzt.projarrangedetail.controller;
  2. import cn.com.lzt.arrangeduty.entity.ArrangeDutyEntity;
  3. import cn.com.lzt.arrangeduty.service.ArrangeDutyServiceI;
  4. import cn.com.lzt.arrangedutyoperate.entity.ArrangeDutyOperateEntity;
  5. import cn.com.lzt.arrangedutyoperate.service.ArrangeDutyOperateServiceI;
  6. import cn.com.lzt.calendar.dto.CalendarAscDto;
  7. import cn.com.lzt.calendar.entity.CalendarEntity;
  8. import cn.com.lzt.calendar.service.CalendarServiceI;
  9. import cn.com.lzt.common.util.uuid.GetUUID;
  10. import cn.com.lzt.dialogDeal.service.UserDepartOrgDealServiceI;
  11. import cn.com.lzt.excel.HGLExcelConstant;
  12. import cn.com.lzt.excel.HGLExcelImportUtils;
  13. import cn.com.lzt.excel.entity.HGLExcelResult;
  14. import cn.com.lzt.projarrangedetail.dao.ProjArrangeDetailAndUserMiniDao;
  15. import cn.com.lzt.projarrangedetail.dto.ProjArrangeDetailAndUserDto;
  16. import cn.com.lzt.projarrangedetail.dto.UserArrangeCalendarDto;
  17. import cn.com.lzt.projarrangedetail.entity.ProjarrangeDetailEntity;
  18. import cn.com.lzt.projarrangedetail.service.ArrangeDutyAndOndutyServiceI;
  19. import cn.com.lzt.projarrangedetail.service.ProjarrangeDetailServiceI;
  20. import cn.com.lzt.projarrangegeneral.entity.ProjArrangeGeneralEntity;
  21. import cn.com.lzt.projarrangegeneral.service.ProjArrangeGeneralServiceI;
  22. import cn.com.lzt.projectpostdetail.entity.ProjectPostDetailEntity;
  23. import cn.com.lzt.tools.HGLDateUtils;
  24. import cn.com.lzt.userarrangedetail.entity.UserArrangeDetailHistoryEntity;
  25. import cn.com.lzt.userarrangedetail.service.UserArrangeDetailServiceI;
  26. import cn.com.lzt.useroptions.entity.TBusUserOptionsEntity;
  27. import cn.com.lzt.useroptions.service.TBusUserOptionsServiceI;
  28. import net.sf.json.JSONArray;
  29. import org.apache.commons.lang3.StringUtils;
  30. import org.apache.log4j.Logger;
  31. import org.jeecgframework.core.beanvalidator.BeanValidators;
  32. import org.jeecgframework.core.common.controller.BaseController;
  33. import org.jeecgframework.core.common.exception.BusinessException;
  34. import org.jeecgframework.core.common.model.json.AjaxJson;
  35. import org.jeecgframework.core.common.model.json.DataGrid;
  36. import org.jeecgframework.core.constant.Globals;
  37. import org.jeecgframework.core.util.*;
  38. import org.jeecgframework.poi.excel.entity.ExportParams;
  39. import org.jeecgframework.poi.excel.entity.ImportParams;
  40. import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
  41. import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
  42. import org.jeecgframework.poi.excel.entity.vo.MapExcelConstants;
  43. import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
  44. import org.jeecgframework.tag.core.easyui.TagUtil;
  45. import org.jeecgframework.web.system.pojo.base.DictEntity;
  46. import org.jeecgframework.web.system.pojo.base.TSDepart;
  47. import org.jeecgframework.web.system.pojo.base.TSUser;
  48. import org.jeecgframework.web.system.service.SystemService;
  49. import org.springframework.beans.factory.annotation.Autowired;
  50. import org.springframework.http.HttpHeaders;
  51. import org.springframework.http.HttpStatus;
  52. import org.springframework.http.MediaType;
  53. import org.springframework.http.ResponseEntity;
  54. import org.springframework.stereotype.Controller;
  55. import org.springframework.ui.ModelMap;
  56. import org.springframework.web.bind.annotation.*;
  57. import org.springframework.web.multipart.MultipartFile;
  58. import org.springframework.web.multipart.MultipartHttpServletRequest;
  59. import org.springframework.web.servlet.ModelAndView;
  60. import org.springframework.web.util.UriComponentsBuilder;
  61. import javax.servlet.http.HttpServletRequest;
  62. import javax.servlet.http.HttpServletResponse;
  63. import javax.servlet.http.HttpSession;
  64. import javax.validation.ConstraintViolation;
  65. import javax.validation.Validator;
  66. import java.io.IOException;
  67. import java.net.URI;
  68. import java.text.SimpleDateFormat;
  69. import java.util.*;
  70. import java.util.Map.Entry;
  71. /**
  72. * @Title: Controller
  73. * @Description: 项目排班详细表
  74. * @author onlineGenerator
  75. * @date 2017-10-24 10:52:56
  76. * @version V1.0
  77. *
  78. */
  79. @Controller
  80. @RequestMapping("/projarrangeDetailController")
  81. public class ProjarrangeDetailController extends BaseController {
  82. /**
  83. * Logger for this class
  84. */
  85. private static final Logger logger = Logger.getLogger(ProjarrangeDetailController.class);
  86. //项目排班详细表
  87. @Autowired
  88. private ProjarrangeDetailServiceI projarrangeDetailService;
  89. @Autowired
  90. private SystemService systemService;
  91. @Autowired
  92. private Validator validator;
  93. @Autowired
  94. private TBusUserOptionsServiceI userOptionsService;
  95. //日历表
  96. @Autowired
  97. private CalendarServiceI calendarService;
  98. //员工排班详情表
  99. @Autowired
  100. private UserArrangeDetailServiceI userArrangeDetailService;
  101. //班次表
  102. @Autowired
  103. private ArrangeDutyServiceI arrangeDutyService;
  104. //项目排班总览表
  105. @Autowired
  106. private ProjArrangeGeneralServiceI projArrangeGeneralService;
  107. //排班操作表
  108. @Autowired
  109. private ArrangeDutyOperateServiceI arrangeDutyOperateService;
  110. //排班总方法页
  111. @Autowired
  112. private ArrangeDutyAndOndutyServiceI arrangeDutyAndOndutyServiceI;
  113. //项目排班自己总结公共方法;
  114. //ProjectArrangeCommonMethod commonMethod;
  115. // 用户和项目关系处理
  116. @Autowired
  117. UserDepartOrgDealServiceI userDepartOrgDealServiceI;
  118. @Autowired
  119. ProjArrangeDetailAndUserMiniDao projDao;
  120. /**
  121. * 项目排班详细表列表 页面跳转
  122. * @author zbw
  123. * 2017-11-24
  124. * @param request
  125. * @param calendarAscDto
  126. * @return
  127. */
  128. @RequestMapping(params = "list")
  129. public ModelAndView list(HttpServletRequest request,CalendarAscDto calendarAscDto) {
  130. String pid=request.getParameter("pid");
  131. String[] pidArr = null;
  132. String[] weekStr = new String[] {"一","二","三","四","五","六","日"};
  133. HttpSession session = ContextHolderUtils.getSession();
  134. TSUser tuser = (TSUser)session.getAttribute("LOCAL_CLINET_USER");
  135. try {
  136. if(pid!=null){
  137. pidArr=pid.split(",");
  138. if(pidArr != null && pidArr.length>0) {
  139. userOptionsService.saveUserOptions(tuser.getId(), pid, Globals.USER_OPTIONS_TYPE_PROJECT);
  140. }
  141. }else {
  142. TBusUserOptionsEntity options = userOptionsService.getOptionsByUserID(tuser.getId(), Globals.USER_OPTIONS_TYPE_PROJECT, true);
  143. if(options != null) {
  144. pid = options.getOptionId();
  145. pidArr= new String[1];
  146. pidArr[0] = pid;
  147. }
  148. }
  149. } catch (Exception e) {
  150. e.printStackTrace();
  151. org.jeecgframework.core.util.LogUtil.error(e.getMessage());
  152. }
  153. if(calendarAscDto.getYear()==null&&calendarAscDto.getMonth()==null){
  154. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyy-MM");
  155. String[] dateNumber=simpleDateFormat.format(new Date()).split("-");
  156. calendarAscDto.setYear(Integer.parseInt(dateNumber[0]));
  157. calendarAscDto.setMonth(Integer.parseInt(dateNumber[1]));
  158. }
  159. List<CalendarAscDto> listCalendar=projarrangeDetailService.getCalendar(calendarAscDto);
  160. List<HashMap<String, Object>> titlelist = new ArrayList<HashMap<String, Object>>();
  161. //日期列名字符串即主键id
  162. String calendaridStr="";
  163. //日期列名字符串即主键id+星期几
  164. String specialCalendar="[{";
  165. for (int i =0;i<listCalendar.size();i++) {
  166. if(specialCalendar.length()!=2){
  167. specialCalendar+=",'"+listCalendar.get(i).getId()+"':'"+listCalendar.get(i).getWeek()+"'";
  168. }else{
  169. specialCalendar+="'"+listCalendar.get(i).getId()+"':'"+listCalendar.get(i).getWeek()+"'";
  170. }
  171. if(calendaridStr.length()!=0){
  172. calendaridStr+=","+listCalendar.get(i).getId();
  173. }else{
  174. calendaridStr=listCalendar.get(i).getId();
  175. }
  176. HashMap<String, Object> map = new HashMap<String, Object>();
  177. String monthTemp = String.valueOf(listCalendar.get(i).getMonth());
  178. String dayTemp = String.valueOf(listCalendar.get(i).getDay());
  179. String weekTemp = null;
  180. if((listCalendar.get(i).getWeek() != null)){
  181. int weekInt= -1;
  182. try {
  183. weekInt =Integer.parseInt(listCalendar.get(i).getWeek());
  184. }catch(Exception e) {}
  185. if(weekInt > 0 && weekInt < 8) {
  186. weekTemp = weekStr[weekInt-1];
  187. }
  188. }
  189. if(weekTemp == null) {
  190. map.put("title", monthTemp+"月"+dayTemp+"日");
  191. }else {
  192. map.put("title", monthTemp+"月"+dayTemp+"日"+" 星期"+weekTemp+"");
  193. }
  194. /*map.put("field", String.valueOf(listCalendar.get(i).getYear())+
  195. String.valueOf(listCalendar.get(i).getMonth())+String.valueOf(listCalendar.get(i).getDay()));*/
  196. map.put("field", listCalendar.get(i).getId());
  197. titlelist.add(map);
  198. }
  199. specialCalendar += "}]";
  200. request.setAttribute("specialCalendar",specialCalendar);
  201. String tempMonth=String.valueOf(calendarAscDto.getMonth()).length()==1?"0"+String.valueOf(calendarAscDto.getMonth()):String.valueOf(calendarAscDto.getMonth());
  202. String yearmonth=String.valueOf(calendarAscDto.getYear())+"-"+tempMonth;
  203. request.setAttribute("calendaridStr",calendaridStr);
  204. request.setAttribute("titlelist",titlelist);
  205. request.setAttribute("yearmonth",yearmonth);
  206. request.setAttribute("usernamesearch",request.getParameter("usernamesearch"));
  207. if(pidArr!=null){
  208. String id=pidArr[0];
  209. TSDepart dePart = this.systemService.getEntity(TSDepart.class, id);
  210. request.setAttribute("pid",id);
  211. request.setAttribute("departname",dePart.getDepartname());
  212. }else{
  213. request.setAttribute("pid",pid);
  214. request.setAttribute("departname",null);
  215. }
  216. return new ModelAndView("cn/com/lzt/projarrangedetail/projarrangeDetailList");
  217. }
  218. /**
  219. * 项目排班详细表列表 页面跳转
  220. * @author zbw
  221. * 2017-11-24
  222. * @param request
  223. * @param calendarAscDto
  224. * @return
  225. */
  226. @RequestMapping(params = "listAll")
  227. public ModelAndView listAll(HttpServletRequest request,CalendarAscDto calendarAscDto) {
  228. String pid=request.getParameter("pid");
  229. String[] pidArr = null;
  230. String[] weekStr = new String[] {"一","二","三","四","五","六","日"};
  231. HttpSession session = ContextHolderUtils.getSession();
  232. TSUser tuser = (TSUser)session.getAttribute("LOCAL_CLINET_USER");
  233. try {
  234. if(pid!=null){
  235. pidArr=pid.split(",");
  236. if(pidArr != null && pidArr.length>0) {
  237. userOptionsService.saveUserOptions(tuser.getId(), pid, Globals.USER_OPTIONS_TYPE_PROJECT);
  238. }
  239. }else {
  240. TBusUserOptionsEntity options = userOptionsService.getOptionsByUserID(tuser.getId(), Globals.USER_OPTIONS_TYPE_PROJECT, true);
  241. if(options != null) {
  242. pid = options.getOptionId();
  243. pidArr= new String[1];
  244. pidArr[0] = pid;
  245. }
  246. }
  247. } catch (Exception e) {
  248. e.printStackTrace();
  249. org.jeecgframework.core.util.LogUtil.error(e.getMessage());
  250. }
  251. if(calendarAscDto.getYear()==null&&calendarAscDto.getMonth()==null){
  252. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyy-MM");
  253. String[] dateNumber=simpleDateFormat.format(new Date()).split("-");
  254. calendarAscDto.setYear(Integer.parseInt(dateNumber[0]));
  255. calendarAscDto.setMonth(Integer.parseInt(dateNumber[1]));
  256. }
  257. List<CalendarAscDto> listCalendar=projarrangeDetailService.getCalendar(calendarAscDto);
  258. List<HashMap<String, Object>> titlelist = new ArrayList<HashMap<String, Object>>();
  259. //日期列名字符串即主键id
  260. String calendaridStr="";
  261. //日期列名字符串即主键id+星期几
  262. String specialCalendar="[{";
  263. for (int i =0;i<listCalendar.size();i++) {
  264. if(specialCalendar.length()!=2){
  265. specialCalendar+=",'"+listCalendar.get(i).getId()+"':'"+listCalendar.get(i).getWeek()+"'";
  266. }else{
  267. specialCalendar+="'"+listCalendar.get(i).getId()+"':'"+listCalendar.get(i).getWeek()+"'";
  268. }
  269. if(calendaridStr.length()!=0){
  270. calendaridStr+=","+listCalendar.get(i).getId();
  271. }else{
  272. calendaridStr=listCalendar.get(i).getId();
  273. }
  274. HashMap<String, Object> map = new HashMap<String, Object>();
  275. String monthTemp = String.valueOf(listCalendar.get(i).getMonth());
  276. String dayTemp = String.valueOf(listCalendar.get(i).getDay());
  277. String weekTemp = null;
  278. if((listCalendar.get(i).getWeek() != null)){
  279. int weekInt= -1;
  280. try {
  281. weekInt =Integer.parseInt(listCalendar.get(i).getWeek());
  282. }catch(Exception e) {}
  283. if(weekInt > 0 && weekInt < 8) {
  284. weekTemp = weekStr[weekInt-1];
  285. }
  286. }
  287. if(weekTemp == null) {
  288. map.put("title", monthTemp+"月"+dayTemp+"日");
  289. }else {
  290. map.put("title", monthTemp+"月"+dayTemp+"日"+" 星期"+weekTemp+"");
  291. }
  292. /*map.put("field", String.valueOf(listCalendar.get(i).getYear())+
  293. String.valueOf(listCalendar.get(i).getMonth())+String.valueOf(listCalendar.get(i).getDay()));*/
  294. map.put("field", listCalendar.get(i).getId());
  295. titlelist.add(map);
  296. }
  297. specialCalendar += "}]";
  298. request.setAttribute("specialCalendar",specialCalendar);
  299. String tempMonth=String.valueOf(calendarAscDto.getMonth()).length()==1?"0"+String.valueOf(calendarAscDto.getMonth()):String.valueOf(calendarAscDto.getMonth());
  300. String yearmonth=String.valueOf(calendarAscDto.getYear())+"-"+tempMonth;
  301. request.setAttribute("calendaridStr",calendaridStr);
  302. request.setAttribute("titlelist",titlelist);
  303. request.setAttribute("yearmonth",yearmonth);
  304. request.setAttribute("usernamesearch",request.getParameter("usernamesearch"));
  305. if(pidArr!=null){
  306. String id=pidArr[0];
  307. TSDepart dePart = this.systemService.getEntity(TSDepart.class, id);
  308. request.setAttribute("pid",id);
  309. request.setAttribute("departname",dePart.getDepartname());
  310. }else{
  311. request.setAttribute("pid",pid);
  312. request.setAttribute("departname",null);
  313. }
  314. return new ModelAndView("cn/com/lzt/projarrangedetail/projarrangeDetailAllList");
  315. }
  316. /**
  317. * 排班审核查看详细 页面跳转
  318. *
  319. * @return
  320. */
  321. @RequestMapping(params = "generalDetailList")
  322. public ModelAndView generalDetailList(HttpServletRequest request,CalendarAscDto calendarAscDto) {
  323. String projarrangegeneralId=calendarAscDto.getId();
  324. calendarAscDto.setId("");
  325. String pid=request.getParameter("pid");
  326. String[] pidArr = null;
  327. String[] weekStr = new String[] {"一","二","三","四","五","六","日"};
  328. if(pid!=null){
  329. pidArr=pid.split(",");
  330. }
  331. if(calendarAscDto.getYear()==null&&calendarAscDto.getMonth()==null){
  332. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyy-MM");
  333. String[] dateNumber=simpleDateFormat.format(new Date()).split("-");
  334. calendarAscDto.setYear(Integer.parseInt(dateNumber[0]));
  335. calendarAscDto.setMonth(Integer.parseInt(dateNumber[1]));
  336. }
  337. List<CalendarAscDto> listCalendar=projarrangeDetailService.getCalendar(calendarAscDto);
  338. List<HashMap<String, Object>> titlelist = new ArrayList<HashMap<String, Object>>();
  339. //日期列名字符串即主键id
  340. String calendaridStr="";
  341. //日期列名字符串即主键id+星期几
  342. String specialCalendar="[{";
  343. for (int i=0;i<listCalendar.size();i++) {
  344. if(specialCalendar.length()!=2){
  345. specialCalendar+=",'"+listCalendar.get(i).getId()+"':'"+listCalendar.get(i).getWeek()+"'";
  346. }else{
  347. specialCalendar+="'"+listCalendar.get(i).getId()+"':'"+listCalendar.get(i).getWeek()+"'";
  348. }
  349. if(calendaridStr.length()!=0){
  350. calendaridStr+=","+listCalendar.get(i).getId();
  351. }else{
  352. calendaridStr=listCalendar.get(i).getId();
  353. }
  354. HashMap<String, Object> map = new HashMap<String, Object>();
  355. String monthTemp = String.valueOf(listCalendar.get(i).getMonth());
  356. String dayTemp = String.valueOf(listCalendar.get(i).getDay());
  357. String weekTemp = null;
  358. if((listCalendar.get(i).getWeek() != null)){
  359. int weekInt= -1;
  360. try {
  361. weekInt =Integer.parseInt(listCalendar.get(i).getWeek());
  362. }catch(Exception e) {}
  363. if(weekInt > 0 && weekInt < 8) {
  364. weekTemp = weekStr[weekInt-1];
  365. }
  366. }
  367. if(weekTemp == null) {
  368. map.put("title", monthTemp+"月"+dayTemp+"日");
  369. }else {
  370. map.put("title", monthTemp+"月"+dayTemp+"日"+" 星期"+weekTemp+"");
  371. }
  372. /*map.put("field", String.valueOf(listCalendar.get(i).getYear())+
  373. String.valueOf(listCalendar.get(i).getMonth())+String.valueOf(listCalendar.get(i).getDay()));*/
  374. map.put("field", listCalendar.get(i).getId());
  375. titlelist.add(map);
  376. }
  377. specialCalendar+="}]";
  378. request.setAttribute("specialCalendar",specialCalendar);
  379. String tempMonth=String.valueOf(calendarAscDto.getMonth()).length()==1?"0"+String.valueOf(calendarAscDto.getMonth()):String.valueOf(calendarAscDto.getMonth());
  380. String yearmonth=String.valueOf(calendarAscDto.getYear())+"-"+tempMonth;
  381. request.setAttribute("calendaridStr",calendaridStr);
  382. request.setAttribute("titlelist",titlelist);
  383. request.setAttribute("yearmonth",yearmonth);
  384. if(pidArr!=null){
  385. String id=pidArr[0];
  386. TSDepart dePart = this.systemService.getEntity(TSDepart.class, id);
  387. request.setAttribute("pid",pidArr[0]);
  388. request.setAttribute("departname",dePart.getDepartname());
  389. }else{
  390. request.setAttribute("pid",pid);
  391. request.setAttribute("departname",null);
  392. }
  393. //审核表Id
  394. request.setAttribute("projarrangegeneralId",projarrangegeneralId);
  395. return new ModelAndView("cn/com/lzt/projarrangegeneral/generalDetailList");
  396. }
  397. /**
  398. * 员工排班上报数据主页面
  399. * easyui AJAX请求数据
  400. *
  401. * @param request
  402. * @param response
  403. * @param dataGrid
  404. * @param user
  405. */
  406. @RequestMapping(params = "datagrid")
  407. public void datagrid(ProjArrangeDetailAndUserDto projArrangeDetailAndUserDto,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  408. long start = System.currentTimeMillis();
  409. UserArrangeCalendarDto userArrangeCalendarDto=new UserArrangeCalendarDto();
  410. int s=dataGrid.getField().indexOf("userid")+7;
  411. int e=dataGrid.getField().indexOf("workingDays")-1;
  412. //日期列名数组即主键id
  413. String[] calendaridArr=dataGrid.getField().substring(s, e).split(",");
  414. //String calendarid="";
  415. List<String> calendaridList=new ArrayList<String>();
  416. for (int i = 0; i < calendaridArr.length; i++) {
  417. calendaridList.add(calendaridArr[i]);
  418. }
  419. if(calendaridList.size()>0){
  420. userArrangeCalendarDto.setCalendaridList(calendaridList);
  421. }
  422. projArrangeDetailAndUserDto.setYearmonth(request.getParameter("yearmonth"));
  423. String pid=request.getParameter("pid");
  424. if(pid!=null&&pid.length()>0){
  425. pid=pid.split(",")[0];
  426. }
  427. projArrangeDetailAndUserDto.setPid(pid);
  428. projArrangeDetailAndUserDto.setUserName(request.getParameter("usernamesearch"));
  429. //包括该项目id
  430. //根据项目id查询所有子节点id
  431. List<String> ChildIdList=userDepartOrgDealServiceI.getChildIdByProjectDepartId(pid);
  432. projArrangeDetailAndUserDto.setChildDepartIdList(ChildIdList);
  433. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  434. //查询项目排班详细表数据
  435. List<ProjArrangeDetailAndUserDto> projArrangeDetailAndUserDtolist = projarrangeDetailService.getProjArrangeDetailAndUserByPIdYearMonth(
  436. projArrangeDetailAndUserDto,authSql);
  437. dataGrid.setResults(projArrangeDetailAndUserDtolist);
  438. //班次名称如果被删除,则不用拼接此条数据
  439. //只查询启用的数据
  440. StringBuffer hql = new StringBuffer(" from ArrangeDutyEntity t where delete_flag <> '1' ");
  441. List<ArrangeDutyEntity> arrangeDutyEntityList = arrangeDutyService.findHql(hql.toString());
  442. List<String> shiftIdList=new ArrayList<String>();
  443. for (int i = 0; i < arrangeDutyEntityList.size(); i++) {
  444. shiftIdList.add(arrangeDutyEntityList.get(i).getId());
  445. }
  446. @SuppressWarnings("unchecked")
  447. List<ProjArrangeDetailAndUserDto> projectPostUserMiniDaoDtolistNew = dataGrid.getResults();
  448. Map<String,Map<String,Object>> extMap = new HashMap<String, Map<String,Object>>();
  449. for(ProjArrangeDetailAndUserDto temp:projectPostUserMiniDaoDtolistNew){
  450. if(temp.getId()!=null){
  451. Map<String, Object> m = new HashMap<String, Object>();
  452. userArrangeCalendarDto.setProjarrangeDetailid(temp.getId());
  453. //查询员工排班详情表数据
  454. List<UserArrangeCalendarDto> userArrangeCalendarMiniDaoDtolist = getUserArrangeD(userArrangeCalendarDto);
  455. for (int i = 0; i < calendaridArr.length; i++) {
  456. for (int j = 0; j < userArrangeCalendarMiniDaoDtolist.size(); j++) {
  457. if(calendaridArr[i].equals(userArrangeCalendarMiniDaoDtolist.get(j).getCalendarid())){
  458. if(shiftIdList.contains(userArrangeCalendarMiniDaoDtolist.get(j).getShiftid())){
  459. m.put(calendaridArr[i], userArrangeCalendarMiniDaoDtolist.get(j).getShiftid());
  460. }/*else if(shiftIdListDT.contains(userArrangeCalendarMiniDaoDtolist.get(j).getShiftid())){
  461. m.put(calendaridArr[i], shiftIdMapDT.get(userArrangeCalendarMiniDaoDtolist.get(j).getShiftid()));
  462. }*/
  463. }
  464. }
  465. }
  466. extMap.put(temp.getId(), m);
  467. }else{
  468. Map<String, Object> m0 = new HashMap<String, Object>();
  469. //String myId=String.valueOf((int)(Math.random()*100));
  470. String myId=GetUUID.generate();
  471. temp.setId(myId);
  472. extMap.put(temp.getId(), m0);
  473. }
  474. }
  475. long end = System.currentTimeMillis();
  476. //System.out.println(end-start);
  477. if(extMap.size()==0){
  478. TagUtil.datagrid(response, dataGrid);
  479. }else{
  480. TagUtil.datagrid(response, dataGrid,extMap);
  481. }
  482. }
  483. /**
  484. * 员工排班上报数据主页面
  485. * easyui AJAX请求数据
  486. *
  487. * @param request
  488. * @param response
  489. * @param dataGrid
  490. * @param user
  491. */
  492. @RequestMapping(params = "datagridAll")
  493. public void datagridAll(ProjArrangeDetailAndUserDto projArrangeDetailAndUserDto,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  494. long start = System.currentTimeMillis();
  495. UserArrangeCalendarDto userArrangeCalendarDto=new UserArrangeCalendarDto();
  496. int s=dataGrid.getField().indexOf("userid")+7;
  497. int e=dataGrid.getField().indexOf("workingDays")-1;
  498. //日期列名数组即主键id
  499. String[] calendaridArr=dataGrid.getField().substring(s, e).split(",");
  500. //String calendarid="";
  501. List<String> calendaridList=new ArrayList<String>();
  502. for (int i = 0; i < calendaridArr.length; i++) {
  503. calendaridList.add(calendaridArr[i]);
  504. }
  505. if(calendaridList.size()>0){
  506. userArrangeCalendarDto.setCalendaridList(calendaridList);
  507. }
  508. projArrangeDetailAndUserDto.setYearmonth(request.getParameter("yearmonth"));
  509. String pid=request.getParameter("pid");
  510. if(pid!=null&&pid.length()>0){
  511. pid=pid.split(",")[0];
  512. }
  513. projArrangeDetailAndUserDto.setPid(pid);
  514. projArrangeDetailAndUserDto.setUserName(request.getParameter("usernamesearch"));
  515. //包括该项目id
  516. //根据项目id查询所有子节点id
  517. List<String> ChildIdList=userDepartOrgDealServiceI.getChildIdByProjectDepartId(pid);
  518. projArrangeDetailAndUserDto.setChildDepartIdList(ChildIdList);
  519. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  520. //查询项目排班详细表数据
  521. List<ProjArrangeDetailAndUserDto> projArrangeDetailAndUserDtolist = projarrangeDetailService.getProjArrangeDetailAndUserByPIdYearMonth(
  522. projArrangeDetailAndUserDto,authSql);
  523. dataGrid.setResults(projArrangeDetailAndUserDtolist);
  524. //班次名称如果被删除,则不用拼接此条数据
  525. //只查询启用的数据
  526. StringBuffer hql = new StringBuffer(" from ArrangeDutyEntity t where delete_flag <> '1' ");
  527. List<ArrangeDutyEntity> arrangeDutyEntityList = arrangeDutyService.findHql(hql.toString());
  528. List<String> shiftIdList=new ArrayList<String>();
  529. for (int i = 0; i < arrangeDutyEntityList.size(); i++) {
  530. shiftIdList.add(arrangeDutyEntityList.get(i).getId());
  531. }
  532. @SuppressWarnings("unchecked")
  533. List<ProjArrangeDetailAndUserDto> projectPostUserMiniDaoDtolistNew=dataGrid.getResults();
  534. Map<String,Map<String,Object>> extMap = new HashMap<String, Map<String,Object>>();
  535. for(ProjArrangeDetailAndUserDto temp:projectPostUserMiniDaoDtolistNew){
  536. if(temp.getId()!=null){
  537. Map<String, Object> m = new HashMap<String, Object>();
  538. userArrangeCalendarDto.setProjarrangeDetailid(temp.getId());
  539. //查询员工排班详情表数据
  540. List<UserArrangeCalendarDto> userArrangeCalendarMiniDaoDtolist=getUserArrangeD(userArrangeCalendarDto);
  541. for (int i = 0; i < calendaridArr.length; i++) {
  542. for (int j = 0; j < userArrangeCalendarMiniDaoDtolist.size(); j++) {
  543. if(calendaridArr[i].equals(userArrangeCalendarMiniDaoDtolist.get(j).getCalendarid())){
  544. if(shiftIdList.contains(userArrangeCalendarMiniDaoDtolist.get(j).getShiftid())){
  545. m.put(calendaridArr[i], userArrangeCalendarMiniDaoDtolist.get(j).getShiftid());
  546. }/*else if(shiftIdListDT.contains(userArrangeCalendarMiniDaoDtolist.get(j).getShiftid())){
  547. m.put(calendaridArr[i], shiftIdMapDT.get(userArrangeCalendarMiniDaoDtolist.get(j).getShiftid()));
  548. }*/
  549. }
  550. }
  551. }
  552. extMap.put(temp.getId(), m);
  553. }else{
  554. Map<String, Object> m0 = new HashMap<String, Object>();
  555. //String myId=String.valueOf((int)(Math.random()*100));
  556. String myId=GetUUID.generate();
  557. temp.setId(myId);
  558. extMap.put(temp.getId(), m0);
  559. }
  560. }
  561. long end = System.currentTimeMillis();
  562. //System.out.println(end-start);
  563. if(extMap.size()==0){
  564. TagUtil.datagrid(response, dataGrid);
  565. }else{
  566. TagUtil.datagrid(response, dataGrid,extMap);
  567. }
  568. }
  569. /**
  570. * 查询员工排班详情表
  571. * @author zbw
  572. * 2017-10-26
  573. * @param userArrangeCalendarMiniDaoDto
  574. * @return
  575. */
  576. @RequestMapping(params = "getUserArrangeD")
  577. @ResponseBody
  578. public List<UserArrangeCalendarDto> getUserArrangeD(UserArrangeCalendarDto userArrangeCalendarDto) {
  579. //AjaxJson j = new AjaxJson();
  580. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  581. List<UserArrangeCalendarDto> userArrangeCalendarDtolist = projarrangeDetailService.getUserArrangeCalendar(
  582. userArrangeCalendarDto,authSql);
  583. return userArrangeCalendarDtolist;
  584. }
  585. /**
  586. * 删除项目排班详细表
  587. *
  588. * @return
  589. */
  590. @RequestMapping(params = "doDel")
  591. @ResponseBody
  592. public AjaxJson doDel(ProjarrangeDetailEntity projarrangeDetail, HttpServletRequest request) {
  593. String message = null;
  594. AjaxJson j = new AjaxJson();
  595. projarrangeDetail = systemService.getEntity(ProjarrangeDetailEntity.class, projarrangeDetail.getId());
  596. message = "项目排班详细删除成功";
  597. try{
  598. projarrangeDetailService.delete(projarrangeDetail);
  599. systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  600. }catch(Exception e){
  601. e.printStackTrace();
  602. message = "项目排班详细删除失败";
  603. throw new BusinessException(e.getMessage());
  604. }
  605. j.setMsg(message);
  606. return j;
  607. }
  608. /**
  609. * 批量删除项目排班详细表
  610. *
  611. * @return
  612. */
  613. @RequestMapping(params = "doBatchDel")
  614. @ResponseBody
  615. public AjaxJson doBatchDel(String ids,HttpServletRequest request){
  616. String message = null;
  617. AjaxJson j = new AjaxJson();
  618. message = "项目排班详细删除成功";
  619. try{
  620. for(String id:ids.split(",")){
  621. ProjarrangeDetailEntity projarrangeDetail = systemService.getEntity(ProjarrangeDetailEntity.class,
  622. id
  623. );
  624. projarrangeDetailService.delete(projarrangeDetail);
  625. systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  626. }
  627. }catch(Exception e){
  628. e.printStackTrace();
  629. message = "项目排班详细删除失败";
  630. throw new BusinessException(e.getMessage());
  631. }
  632. j.setMsg(message);
  633. return j;
  634. }
  635. /**
  636. * 添加项目排班详细表
  637. *
  638. * @param ids
  639. * @return
  640. */
  641. @RequestMapping(params = "doAdd")
  642. @ResponseBody
  643. public AjaxJson doAdd(ProjarrangeDetailEntity projarrangeDetail, HttpServletRequest request) {
  644. String message = null;
  645. AjaxJson j = new AjaxJson();
  646. message = "项目排班详细添加成功";
  647. try{
  648. projarrangeDetailService.save(projarrangeDetail);
  649. systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
  650. }catch(Exception e){
  651. e.printStackTrace();
  652. message = "项目排班详细添加失败";
  653. throw new BusinessException(e.getMessage());
  654. }
  655. j.setMsg(message);
  656. return j;
  657. }
  658. /**
  659. * 更新项目排班详细表
  660. *
  661. * @param ids
  662. * @return
  663. */
  664. @RequestMapping(params = "doUpdate")
  665. @ResponseBody
  666. public AjaxJson doUpdate(ProjarrangeDetailEntity projarrangeDetail, HttpServletRequest request) {
  667. String message = null;
  668. AjaxJson j = new AjaxJson();
  669. message = "项目排班详细更新成功";
  670. ProjarrangeDetailEntity t = projarrangeDetailService.get(ProjarrangeDetailEntity.class, projarrangeDetail.getId());
  671. try {
  672. MyBeanUtils.copyBeanNotNull2Bean(projarrangeDetail, t);
  673. projarrangeDetailService.saveOrUpdate(t);
  674. systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
  675. } catch (Exception e) {
  676. e.printStackTrace();
  677. message = "项目排班详细更新失败";
  678. throw new BusinessException(e.getMessage());
  679. }
  680. j.setMsg(message);
  681. return j;
  682. }
  683. /**
  684. * 项目排班详细表新增页面跳转
  685. *
  686. * @return
  687. */
  688. @RequestMapping(params = "goAdd")
  689. public ModelAndView goAdd(ProjarrangeDetailEntity projarrangeDetail, HttpServletRequest req) {
  690. if (StringUtil.isNotEmpty(projarrangeDetail.getId())) {
  691. projarrangeDetail = projarrangeDetailService.getEntity(ProjarrangeDetailEntity.class, projarrangeDetail.getId());
  692. req.setAttribute("projarrangeDetailPage", projarrangeDetail);
  693. }
  694. return new ModelAndView("cn/com/lzt/projarrangedetail/projarrangeDetail-add");
  695. }
  696. /**
  697. * 项目排班详细表编辑页面跳转
  698. *
  699. * @return
  700. */
  701. @RequestMapping(params = "goUpdate")
  702. public ModelAndView goUpdate(ProjarrangeDetailEntity projarrangeDetail, HttpServletRequest req) {
  703. if (StringUtil.isNotEmpty(projarrangeDetail.getId())) {
  704. projarrangeDetail = projarrangeDetailService.getEntity(ProjarrangeDetailEntity.class, projarrangeDetail.getId());
  705. req.setAttribute("projarrangeDetailPage", projarrangeDetail);
  706. }
  707. return new ModelAndView("cn/com/lzt/projarrangedetail/projarrangeDetail-update");
  708. }
  709. /**
  710. * 导入功能跳转
  711. *
  712. * @return
  713. */
  714. @RequestMapping(params = "upload")
  715. public ModelAndView upload(HttpServletRequest req) {
  716. req.setAttribute("controller_name","projarrangeDetailController");
  717. return new ModelAndView("common/upload/pub_excel_upload");
  718. }
  719. /**
  720. * 导出excel
  721. *
  722. * @param request
  723. * @param response
  724. */
  725. @RequestMapping(params = "exportXls")
  726. public String exportXls(ProjarrangeDetailEntity projarrangeDetail,HttpServletRequest request,HttpServletResponse response
  727. , DataGrid dataGrid,ModelMap modelMap) {
  728. //获取用户名称
  729. List<DictEntity> baseUserList=systemService.queryDict("t_s_base_user", "id", "realname");
  730. Map<String, String> baseUserMap=new HashMap<String, String>();
  731. for (int i = 0; i < baseUserList.size(); i++) {
  732. baseUserMap.put(baseUserList.get(i).getTypecode(), baseUserList.get(i).getTypename());
  733. }
  734. //获取班次名称
  735. List<DictEntity> arrangeDutyList=systemService.queryDict("t_bus_arrange_duty", "id", "duty_name");
  736. Map<String, String> arrangeDutyMap=new HashMap<String, String>();
  737. for (int i = 0; i < arrangeDutyList.size(); i++) {
  738. arrangeDutyMap.put(arrangeDutyList.get(i).getTypecode(), arrangeDutyList.get(i).getTypename());
  739. }
  740. //获取项目岗位名称
  741. List<DictEntity> projectPostDetailList=systemService.queryDict("t_bus_project_post_detail", "id", "ptj_post_name");
  742. Map<String, String> projectPostDetailMap=new HashMap<String, String>();
  743. for (int i = 0; i < projectPostDetailList.size(); i++) {
  744. projectPostDetailMap.put(projectPostDetailList.get(i).getTypecode(), projectPostDetailList.get(i).getTypename());
  745. }
  746. //获取项目名称
  747. List<DictEntity> departList=systemService.queryDict("t_s_depart", "id", "departname");
  748. Map<String, String> departMap=new HashMap<String, String>();
  749. for (int i = 0; i < departList.size(); i++) {
  750. departMap.put(departList.get(i).getTypecode(), departList.get(i).getTypename());
  751. }
  752. String[] weekStr = new String[] {"一","二","三","四","五","六","日"};
  753. //日历id
  754. List<String> calendaridList=new ArrayList<String>();
  755. //标题 该list中用于存储标题的信息,每一个ExcelExportEntity 表示一列,根据List 的入栈顺序,由左至右,一次排序
  756. List<ExcelExportEntity> entityList = new ArrayList<ExcelExportEntity>();
  757. String yearmonth=projarrangeDetail.getYearmonth();;
  758. CalendarAscDto calendarAscDto=new CalendarAscDto();
  759. if(projarrangeDetail.getYearmonth()!=null&&projarrangeDetail.getYearmonth().length()>0){
  760. if(yearmonth.indexOf(",")!=-1){
  761. yearmonth=projarrangeDetail.getYearmonth().split(",")[0];
  762. }
  763. calendarAscDto.setYear(Integer.parseInt(yearmonth.split("-")[0]));
  764. calendarAscDto.setMonth(Integer.parseInt(yearmonth.split("-")[1]));
  765. }else{
  766. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyy-MM");
  767. String[] dateNumber=simpleDateFormat.format(new Date()).split("-");
  768. calendarAscDto.setYear(Integer.parseInt(dateNumber[0]));
  769. calendarAscDto.setMonth(Integer.parseInt(dateNumber[1]));
  770. }
  771. List<CalendarAscDto> calendarAscDtoList=projarrangeDetailService.getCalendar(calendarAscDto);
  772. ExcelExportEntity head1=new ExcelExportEntity("项目名称", "pid", 15);
  773. entityList.add(head1);
  774. ExcelExportEntity head2=new ExcelExportEntity("月度", "yearmonth", 15);
  775. entityList.add(head2);
  776. ExcelExportEntity head3=new ExcelExportEntity("项目岗位", "pjtPostId", 15);
  777. entityList.add(head3);
  778. ExcelExportEntity head4=new ExcelExportEntity("员工姓名", "userid", 15);
  779. entityList.add(head4);
  780. for (int i = 0; i < calendarAscDtoList.size(); i++) {
  781. String monthTemp = String.valueOf(calendarAscDtoList.get(i).getMonth());
  782. String dayTemp = String.valueOf(calendarAscDtoList.get(i).getDay());
  783. String weekTemp = null;
  784. if((calendarAscDtoList.get(i).getWeek() != null)){
  785. int weekInt= -1;
  786. try {
  787. weekInt =Integer.parseInt(calendarAscDtoList.get(i).getWeek());
  788. }catch(Exception e) {}
  789. if(weekInt > 0 && weekInt < 8) {
  790. weekTemp = weekStr[weekInt-1];
  791. }
  792. }
  793. String headstr = null;
  794. if(weekTemp == null) {
  795. headstr = monthTemp+"月"+dayTemp+"日";
  796. }else {
  797. headstr = monthTemp+"月"+dayTemp+"日"+" 星期"+weekTemp+"";
  798. }
  799. ExcelExportEntity head= new ExcelExportEntity(headstr, calendarAscDtoList.get(i).getId(), 15);
  800. entityList.add(head);
  801. calendaridList.add(calendarAscDtoList.get(i).getId());
  802. }
  803. ExcelExportEntity head5=new ExcelExportEntity("上班天数(日)", "workingDays", 15);
  804. entityList.add(head5);
  805. ExcelExportEntity head6=new ExcelExportEntity("超时加班(小时)", "timeOutOvertimeHours", 15);
  806. entityList.add(head6);
  807. ExcelExportEntity head7=new ExcelExportEntity("国定加班(小时)", "countryOvertimeHours", 15);
  808. entityList.add(head7);
  809. ExcelExportEntity head8=new ExcelExportEntity("值班天数(日)", "ondutyDays", 15);
  810. entityList.add(head8);
  811. ExcelExportEntity head9=new ExcelExportEntity("备注", "remark", 15);
  812. entityList.add(head9);
  813. //组建数据集
  814. List<Map<String,Object>> dataResult = new ArrayList<Map<String,Object>>();
  815. String pid=projarrangeDetail.getPid();
  816. if(pid.equals(",")){
  817. pid=null;
  818. }
  819. if(pid!=null&&pid.split(",").length>0){
  820. pid=pid.split(",")[0];
  821. }
  822. //班次名称如果被删除,则不用拼接此条数据
  823. //只查询启用的数据
  824. StringBuffer hql = new StringBuffer(" from ArrangeDutyEntity t where delete_flag <> '1' ");
  825. List<ArrangeDutyEntity> arrangeDutyEntityList = arrangeDutyService.findHql(hql.toString());
  826. List<String> shiftIdList=new ArrayList<String>();
  827. for (int i = 0; i < arrangeDutyEntityList.size(); i++) {
  828. shiftIdList.add(arrangeDutyEntityList.get(i).getId());
  829. }
  830. String projectname = departMap.get(pid);
  831. //包括该项目id
  832. //根据项目id查询所有子节点id
  833. List<String> ChildIdList=userDepartOrgDealServiceI.getChildIdByProjectDepartId(pid);
  834. ProjArrangeDetailAndUserDto projArrangeDetailAndUserDto=new ProjArrangeDetailAndUserDto();
  835. projArrangeDetailAndUserDto.setChildDepartIdList(ChildIdList);
  836. projArrangeDetailAndUserDto.setYearmonth(yearmonth);
  837. projArrangeDetailAndUserDto.setPid(pid);
  838. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  839. //查询项目排班详细表数据
  840. List<ProjArrangeDetailAndUserDto> projArrangeDetailAndUserDtolist = projarrangeDetailService.getProjArrangeDetailAndUserByPIdYearMonth(
  841. projArrangeDetailAndUserDto,authSql);
  842. UserArrangeCalendarDto userArrangeCalendarDto=new UserArrangeCalendarDto();
  843. for(int i=0;i<projArrangeDetailAndUserDtolist.size();i++){
  844. Map<String, Object> map = new HashMap<String, Object>();
  845. map.put("pid", departMap.get(projArrangeDetailAndUserDtolist.get(i).getPid()));
  846. map.put("yearmonth", projArrangeDetailAndUserDtolist.get(i).getYearmonth());
  847. map.put("pjtPostId", projectPostDetailMap.get(projArrangeDetailAndUserDtolist.get(i).getPjtPostId()));
  848. map.put("userid", baseUserMap.get(projArrangeDetailAndUserDtolist.get(i).getUserid()));
  849. map.put("workingDays", projArrangeDetailAndUserDtolist.get(i).getWorkingDays());
  850. map.put("timeOutOvertimeHours", projArrangeDetailAndUserDtolist.get(i).getTimeOutOvertimeHours());
  851. map.put("countryOvertimeHours", projArrangeDetailAndUserDtolist.get(i).getCountryOvertimeHours());
  852. map.put("ondutyDays", projArrangeDetailAndUserDtolist.get(i).getOndutyDays());
  853. map.put("remark", projArrangeDetailAndUserDtolist.get(i).getRemark());
  854. if(projArrangeDetailAndUserDtolist.get(i).getId()!=null){
  855. userArrangeCalendarDto.setProjarrangeDetailid(projArrangeDetailAndUserDtolist.get(i).getId());
  856. userArrangeCalendarDto.setCalendaridList(calendaridList);
  857. //查询员工排班详情表数据
  858. List<UserArrangeCalendarDto> userArrangeCalendarDtolist=getUserArrangeD(userArrangeCalendarDto);
  859. for (int m = 0; m < calendarAscDtoList.size(); m++) {
  860. for (int k = 0; k < userArrangeCalendarDtolist.size(); k++) {
  861. if(calendarAscDtoList.get(m).getId().equals(userArrangeCalendarDtolist.get(k).getCalendarid())){
  862. if(shiftIdList.contains(userArrangeCalendarDtolist.get(k).getShiftid())){
  863. map.put(calendarAscDtoList.get(m).getId(), arrangeDutyMap.get(userArrangeCalendarDtolist.get(k).getShiftid()));
  864. }
  865. }
  866. }
  867. }
  868. }
  869. dataResult.add(map);
  870. }
  871. /*for(ProjArrangeDetailAndUserDto projArrangeDetailAndUser:projArrangeDetailAndUserDtolist){
  872. Map<String, Object> map = new HashMap<String, Object>();
  873. map.put("pid", departMap.get(projArrangeDetailAndUser.getPid()));
  874. map.put("yearmonth", projArrangeDetailAndUser.getYearmonth());
  875. map.put("pjtPostId", projectPostDetailMap.get(projArrangeDetailAndUser.getPjtPostId()));
  876. map.put("userid", baseUserMap.get(projArrangeDetailAndUser.getUserid()));
  877. map.put("workingDays", projArrangeDetailAndUser.getWorkingDays());
  878. map.put("timeOutOvertimeHours", projArrangeDetailAndUser.getTimeOutOvertimeHours());
  879. map.put("countryOvertimeHours", projArrangeDetailAndUser.getCountryOvertimeHours());
  880. map.put("ondutyDays", projArrangeDetailAndUser.getOndutyDays());
  881. map.put("remark", projArrangeDetailAndUser.getRemark());
  882. if(projArrangeDetailAndUser.getId()!=null){
  883. userArrangeCalendarDto.setProjarrangeDetailid(projArrangeDetailAndUser.getId());
  884. userArrangeCalendarDto.setCalendaridList(calendaridList);
  885. //查询员工排班详情表数据
  886. List<UserArrangeCalendarDto> userArrangeCalendarDtolist=getUserArrangeD(userArrangeCalendarDto);
  887. for (int i = 0; i < calendarAscDtoList.size(); i++) {
  888. for (int j = 0; j < userArrangeCalendarDtolist.size(); j++) {
  889. if(calendarAscDtoList.get(i).getId().equals(userArrangeCalendarDtolist.get(j).getCalendarid())){
  890. if(shiftIdList.contains(userArrangeCalendarDtolist.get(j).getShiftid())){
  891. map.put(calendarAscDtoList.get(i).getId(), arrangeDutyMap.get(userArrangeCalendarDtolist.get(j).getShiftid()));
  892. }
  893. }
  894. }
  895. }
  896. }
  897. dataResult.add(map);
  898. }*/
  899. modelMap.put(MapExcelConstants.ENTITY_LIST, entityList);
  900. modelMap.put(MapExcelConstants.MAP_LIST, dataResult);
  901. modelMap.put(NormalExcelConstants.FILE_NAME,"项目排班详细-"+projectname);
  902. modelMap.put(NormalExcelConstants.PARAMS,new ExportParams("项目排班详细列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(),
  903. "导出信息"));
  904. // return NormalExcelConstants.JEECG_EXCEL_VIEW;
  905. // return MapExcelConstants.JEECG_MAP_EXCEL_VIEW;
  906. return "hglexcelview";
  907. }
  908. /**
  909. * 导出excel模板
  910. *
  911. * @param request
  912. * @param response
  913. */
  914. @RequestMapping(params = "exportXlsTemplate")
  915. public String exportXlsTemplateForArrange(ProjarrangeDetailEntity projarrangeDetail,HttpServletRequest request,HttpServletResponse response
  916. , DataGrid dataGrid,ModelMap modelMap) {
  917. String pid=projarrangeDetail.getPid();
  918. if(pid.equals(",")){
  919. pid=null;
  920. }
  921. if(pid!=null&&pid.split(",").length>0){
  922. pid=pid.split(",")[0];
  923. }
  924. //获取项目名称
  925. TSDepart depart = systemService.findUniqueByProperty(TSDepart.class, "id", pid);
  926. String[] weekStr = new String[] {"一","二","三","四","五","六","日"};
  927. //日历id
  928. List<String> calendaridList=new ArrayList<String>();
  929. //标题 该list中用于存储标题的信息,每一个ExcelExportEntity 表示一列,根据List 的入栈顺序,由左至右,一次排序
  930. List<ExcelExportEntity> entityList = new ArrayList<ExcelExportEntity>();
  931. String yearmonth=projarrangeDetail.getYearmonth();;
  932. CalendarAscDto calendarAscDto=new CalendarAscDto();
  933. if(projarrangeDetail.getYearmonth()!=null&&projarrangeDetail.getYearmonth().length()>0){
  934. if(yearmonth.indexOf(",")!=-1){
  935. yearmonth=projarrangeDetail.getYearmonth().split(",")[0];
  936. }
  937. calendarAscDto.setYear(Integer.parseInt(yearmonth.split("-")[0]));
  938. calendarAscDto.setMonth(Integer.parseInt(yearmonth.split("-")[1]));
  939. }else{
  940. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyy-MM");
  941. String[] dateNumber=simpleDateFormat.format(new Date()).split("-");
  942. calendarAscDto.setYear(Integer.parseInt(dateNumber[0]));
  943. calendarAscDto.setMonth(Integer.parseInt(dateNumber[1]));
  944. }
  945. List<CalendarAscDto> calendarAscDtoList=projarrangeDetailService.getCalendar(calendarAscDto);
  946. ExcelExportEntity head1=new ExcelExportEntity("项目名称", "pid", 15);
  947. entityList.add(head1);
  948. ExcelExportEntity head2=new ExcelExportEntity("月度", "yearmonth", 15);
  949. entityList.add(head2);
  950. ExcelExportEntity head3=new ExcelExportEntity("项目岗位", "pjtPostId", 15);
  951. entityList.add(head3);
  952. ExcelExportEntity head4=new ExcelExportEntity("员工姓名", "userid", 15);
  953. entityList.add(head4);
  954. for (int i = 0; i < calendarAscDtoList.size(); i++) {
  955. String monthTemp = String.valueOf(calendarAscDtoList.get(i).getMonth());
  956. String dayTemp = String.valueOf(calendarAscDtoList.get(i).getDay());
  957. String weekTemp = null;
  958. if((calendarAscDtoList.get(i).getWeek() != null)){
  959. int weekInt= -1;
  960. try {
  961. weekInt =Integer.parseInt(calendarAscDtoList.get(i).getWeek());
  962. }catch(Exception e) {}
  963. if(weekInt > 0 && weekInt < 8) {
  964. weekTemp = weekStr[weekInt-1];
  965. }
  966. }
  967. String headstr = null;
  968. if(weekTemp == null) {
  969. headstr = monthTemp+"月"+dayTemp+"日";
  970. }else {
  971. headstr = monthTemp+"月"+dayTemp+"日"+" 星期"+weekTemp+"";
  972. }
  973. ExcelExportEntity head= new ExcelExportEntity(headstr, calendarAscDtoList.get(i).getId(), 15);
  974. entityList.add(head);
  975. calendaridList.add(calendarAscDtoList.get(i).getId());
  976. }
  977. //组建数据集
  978. List<Map<String,Object>> dataResult = new ArrayList<Map<String,Object>>();
  979. String hqlDute = " from ArrangeDutyEntity where pid =? or pid is null and delete_flag <> '1' ";
  980. List<ArrangeDutyEntity> pArrangeList = systemService.findHql(hqlDute, pid);
  981. List<String> pArrangeNamelist = new ArrayList<String>();
  982. for(ArrangeDutyEntity arrange : pArrangeList) {
  983. pArrangeNamelist.add(arrange.getDutyName());
  984. }
  985. String projectname = depart.getDepartname();
  986. //包括该项目id
  987. //根据项目id查询所有子节点id
  988. List<String> ChildIdList=userDepartOrgDealServiceI.getChildIdByProjectDepartId(pid);
  989. ProjArrangeDetailAndUserDto projArrangeDetailAndUserDto=new ProjArrangeDetailAndUserDto();
  990. projArrangeDetailAndUserDto.setChildDepartIdList(ChildIdList);
  991. projArrangeDetailAndUserDto.setYearmonth(yearmonth);
  992. projArrangeDetailAndUserDto.setPid(pid);
  993. //获取最新的人员与岗位匹配数据,预置到模板中
  994. String projPostHistory = "SELECT\n" +
  995. " detail.userid as userid ,post.ptj_post_name as postname\n" +
  996. "FROM\n" +
  997. " (\n" +
  998. " SELECT\n" +
  999. " userid,max(yearmonth) as yearmonth\n" +
  1000. " FROM\n" +
  1001. " t_bus_projarrange_detail detail\n" +
  1002. " WHERE\n" +
  1003. " detail.pid =? \n" +
  1004. " group by userid )temp \n" +
  1005. "left join t_bus_projarrange_detail detail on temp.userid = detail.userid and temp.yearmonth = detail.yearmonth \n" +
  1006. " left join t_bus_project_post_detail post on post.id = detail.pjt_postid";
  1007. List<Map<String,Object>> userPostRes = systemService.findForJdbc(projPostHistory,pid);
  1008. HashMap<String,String> userPostMap = new HashMap<String, String>();
  1009. for(Map<String,Object> userPost : userPostRes){
  1010. userPostMap.put(userPost.get("userid").toString(), userPost.get("postname").toString());
  1011. }
  1012. //查询此项目所有当前在职人员
  1013. //人员姓名+身份证后四位,避免重复
  1014. String userSql =
  1015. "select user.id as userid, concat(realname,right(idcard,4)) as realname \n" +
  1016. "from t_s_base_user user left join t_s_user su on su.id = user.id \n" +
  1017. "left join t_s_user_org uorg on user.id = uorg.user_id and uorg.ifpluralism = '0'\n" +
  1018. "left join t_s_depart depart on depart.id = uorg.org_id\n" +
  1019. "left join t_s_depart pdepart on pdepart.id = depart.parentdepartid\n" +
  1020. "LEFT JOIN t_bus_user_personnel up ON up.userid = user.id \n"+
  1021. "where up.position_status in ('1','2') and user.delete_flag = '0' and (pdepart.id =? or depart.id = ? ) "
  1022. + "order by convert(user.realname using gbk) collate gbk_Chinese_ci asc";
  1023. List<Map<String,Object>> userRes = systemService.findForJdbc(userSql, pid,pid);
  1024. for(Map<String,Object> oneUser : userRes){
  1025. Map<String, Object> map = new HashMap<String, Object>();
  1026. map.put("pid", depart.getDepartname());
  1027. map.put("yearmonth", yearmonth);
  1028. map.put("pjtPostId", userPostMap.get(oneUser.get("userid").toString()));
  1029. map.put("userid", oneUser.get("realname"));
  1030. dataResult.add(map);
  1031. }
  1032. //查询项目所有岗位设置,做数据验证
  1033. String hqlPost = " from ProjectPostDetailEntity where pid =? and delete_flag <> '1' ";
  1034. List<ProjectPostDetailEntity> postList = systemService.findHql(hqlPost, pid);
  1035. List<String> postNameList = new ArrayList<String>();
  1036. for(ProjectPostDetailEntity post : postList) {
  1037. postNameList.add(post.getPtjPostName());
  1038. }
  1039. List<Map<String,Object>> validParamMap = new ArrayList<Map<String,Object>>();
  1040. Map<String,Object> paramArrange = new HashMap<String, Object>();
  1041. paramArrange.put(HGLExcelConstant.VALIDTIONSTRS, pArrangeNamelist);
  1042. paramArrange.put(HGLExcelConstant.FIRSTROW,3);
  1043. paramArrange.put(HGLExcelConstant.FIRSTCOL,4);
  1044. paramArrange.put(HGLExcelConstant.ENDROW,dataResult.size()+2);
  1045. paramArrange.put(HGLExcelConstant.ENDCOL,entityList.size()-1);
  1046. validParamMap.add(paramArrange);
  1047. Map<String,Object> paramPost = new HashMap<String, Object>();
  1048. paramPost.put(HGLExcelConstant.VALIDTIONSTRS, postNameList);
  1049. paramPost.put(HGLExcelConstant.FIRSTROW,3);
  1050. paramPost.put(HGLExcelConstant.FIRSTCOL,2);
  1051. paramPost.put(HGLExcelConstant.ENDROW,dataResult.size()+2);
  1052. paramPost.put(HGLExcelConstant.ENDCOL,2);
  1053. validParamMap.add(paramPost);
  1054. //
  1055. // modelMap.put(HGLExcelConstant.VALIDTIONSTRS, pArrangeNamelist);
  1056. // modelMap.put(HGLExcelConstant.FIRSTROW,3);
  1057. // modelMap.put(HGLExcelConstant.FIRSTCOL,4);
  1058. // modelMap.put(HGLExcelConstant.ENDROW,dataResult.size()+2);
  1059. // modelMap.put(HGLExcelConstant.ENDCOL,entityList.size()-1);
  1060. modelMap.put(HGLExcelConstant.VALIDPARAM, validParamMap);
  1061. modelMap.put(HGLExcelConstant.CHECKPARAM,yearmonth);
  1062. modelMap.put(MapExcelConstants.ENTITY_LIST, entityList);
  1063. modelMap.put(MapExcelConstants.MAP_LIST, dataResult);
  1064. modelMap.put(NormalExcelConstants.FILE_NAME,"项目排班模板-"+projectname+"-"+yearmonth);
  1065. ExportParams exportp = new ExportParams("项目排班模板-"+projectname+"-"+yearmonth, "导出人:"+ResourceUtil.getSessionUser().getRealName(),
  1066. "导出信息");
  1067. exportp.setType(ExcelType.XSSF);
  1068. modelMap.put(NormalExcelConstants.PARAMS,exportp);
  1069. return HGLExcelConstant.HGL_MAP_EXCEL_VIEW;
  1070. }
  1071. /**
  1072. * 导出excel 使模板
  1073. *
  1074. * @param request
  1075. * @param response
  1076. */
  1077. @RequestMapping(params = "exportXlsByT")
  1078. public String exportXlsByT(ProjarrangeDetailEntity projarrangeDetail,HttpServletRequest request,HttpServletResponse response
  1079. , DataGrid dataGrid,ModelMap modelMap) {
  1080. modelMap.put(NormalExcelConstants.FILE_NAME,"项目排班详细");
  1081. modelMap.put(NormalExcelConstants.CLASS,ProjarrangeDetailEntity.class);
  1082. modelMap.put(NormalExcelConstants.PARAMS,new ExportParams("项目排班详细列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(),
  1083. "导出信息"));
  1084. modelMap.put(NormalExcelConstants.DATA_LIST,new ArrayList());
  1085. return NormalExcelConstants.JEECG_EXCEL_VIEW;
  1086. }
  1087. @SuppressWarnings("unchecked")
  1088. @RequestMapping(params = "importExcel", method = RequestMethod.POST)
  1089. @ResponseBody
  1090. public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
  1091. AjaxJson j = new AjaxJson();
  1092. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  1093. Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
  1094. for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
  1095. MultipartFile file = entity.getValue();// 获取上传文件对象
  1096. ImportParams params = new ImportParams();
  1097. params.setTitleRows(2);
  1098. params.setHeadRows(1);
  1099. params.setNeedSave(true);
  1100. try {
  1101. String checkMsg = HGLExcelImportUtils.getCheckMsg(file.getInputStream(), 2, 0, 0);
  1102. if(checkMsg.equals("false")) {
  1103. j.setMsg("文件校验失败,必须上传系统导出的excel模板,请点击【导出排班模板】排班后再上传");
  1104. j.setSuccess(false);
  1105. return j;
  1106. }
  1107. HGLExcelResult exceldata = HGLExcelImportUtils.getDataFromExcel(file.getInputStream(), 2, 1);
  1108. String month = exceldata.getDataList().get(0).get(1);
  1109. if(!month.equals(checkMsg)) {
  1110. j.setMsg("文件月份校验失败,请先选择【排班月度】后点击【导出排班模板】,然后排班上传文件");
  1111. j.setSuccess(false);
  1112. return j;
  1113. }
  1114. TSDepart depart = systemService.findUniqueByProperty(TSDepart.class, "departname", exceldata.getDataList().get(0).get(0));
  1115. String pid = depart.getId();
  1116. if(depart == null) {
  1117. j.setMsg("项目名称错误,无法匹配系统所属部门档案");
  1118. j.setSuccess(false);
  1119. return j;
  1120. }
  1121. List<ProjArrangeGeneralEntity> proGeneralL = systemService.findHql(
  1122. " from ProjArrangeGeneralEntity where belongUnitid =? and yearmonth = ? ", pid,month);
  1123. // List<String> headList = exceldata.getHeaderList();
  1124. ProjArrangeGeneralEntity projGeneral = null;
  1125. if(proGeneralL.size() > 0) {
  1126. projGeneral = proGeneralL.get(0);
  1127. if(projGeneral.getArrangeDutyStatus().equals(Globals.ARRANGESTATUS_2)) {
  1128. j.setSuccess(false);
  1129. j.setMsg("文件导入失败,排班已上报,不允许修改");
  1130. return j;
  1131. }
  1132. }
  1133. TSUser user = ResourceUtil.getSessionUser();
  1134. List<Map<String,Object>> res = systemService.findForJdbc(
  1135. "select count(*) count from t_s_user_org uo where uo.user_id =? and uo.org_id = ? ",user.getId(),pid);
  1136. if((Long)res.get(0).get("count") == 0) {
  1137. j.setSuccess(false);
  1138. j.setMsg("文件导入失败,用户【"+user.getRealName()+"】没有项目【"+depart.getDepartname()+"】管理权限,不允许导入");
  1139. return j;
  1140. }
  1141. //缓存项目岗位
  1142. String hqlPost = " from ProjectPostDetailEntity where pid =? and delete_flag <> '1' ";
  1143. List<ProjectPostDetailEntity> postList = systemService.findHql(hqlPost, pid);
  1144. Map<String, String> projectPostDetailMap=new HashMap<String, String>();
  1145. Map<String, Integer> postdutyNumMap=new HashMap<String, Integer>();
  1146. for(ProjectPostDetailEntity post : postList) {
  1147. projectPostDetailMap.put(post.getPtjPostName(), post.getId());
  1148. postdutyNumMap.put(post.getPtjPostName(), post.getNeedNumber());
  1149. }
  1150. //缓存班次map
  1151. String hqlDute = " from ArrangeDutyEntity where pid =? or pid is null and delete_flag <> '1' ";
  1152. List<ArrangeDutyEntity> pArrangeList = systemService.findHql(hqlDute, pid);
  1153. HashMap<String,String> pArrangeMap = new HashMap<String, String>();
  1154. for(ArrangeDutyEntity arrange : pArrangeList) {
  1155. pArrangeMap.put(arrange.getDutyName(), arrange.getId());
  1156. }
  1157. String checkResult = checkArrange(exceldata,pArrangeMap,projectPostDetailMap,postdutyNumMap);
  1158. if(StringUtils.isNotEmpty(checkResult)) {
  1159. j.setSuccess(false);
  1160. j.setMsg("文件导入失败,排班内容错误,清单如下:<br>"+checkResult);
  1161. return j;
  1162. }
  1163. //缓存日历,把excel中的所有日历都查询出来
  1164. HashMap<String, String> calMap = new HashMap<String, String>();
  1165. for(int i = 0 ; i < exceldata.getHeaderList().size(); i++) {
  1166. String colTitle = exceldata.getHeaderList().get(i);
  1167. if(colTitle.indexOf("月") > -1 && colTitle.indexOf("日") > -1) {
  1168. String titleMonth = colTitle.substring(0, colTitle.indexOf("月"));
  1169. String titleDay = colTitle.substring(colTitle.indexOf("月")+1, colTitle.indexOf("日"));
  1170. List<CalendarEntity> calList = systemService.findHql(
  1171. " from CalendarEntity where month =? and year =? and day =? ",
  1172. Integer.parseInt(titleMonth) ,Integer.parseInt(month.substring(0,4)),Integer.parseInt(titleDay));
  1173. calMap.put(colTitle,calList.get(0).getId());
  1174. }
  1175. }
  1176. //缓存项目人员
  1177. HashMap<String,String> userMap = new HashMap<String, String>();
  1178. String userSql = "select user.id as userid, concat(realname,right(idcard,4)) as realname \n" +
  1179. "from t_s_base_user user left join t_s_user su on su.id = user.id \n" +
  1180. "left join t_s_user_org uorg on user.id = uorg.user_id and uorg.ifpluralism = '0'\n" +
  1181. "left join t_s_depart depart on depart.id = uorg.org_id\n" +
  1182. "left join t_s_depart pdepart on pdepart.id = depart.parentdepartid\n" +
  1183. "LEFT JOIN t_bus_user_personnel up ON up.userid = user.id \n"+
  1184. "where up.position_status in ('1','2') and user.delete_flag = '0' and pdepart.id =? or depart.id =? ";
  1185. List<Map<String,Object>> userRes = systemService.findForJdbc(userSql, pid,pid);
  1186. for(Map<String,Object> oneRes :userRes) {
  1187. userMap.put(oneRes.get("realname").toString(),oneRes.get("userid").toString());
  1188. }
  1189. // List<ProjArrangeGeneralEntity> proGeneralL = systemService.findHql(" from ProjArrangeGeneralEntity where belongUnitid = ? and yearmonth = ?", pid,month);
  1190. List<String> headList = exceldata.getHeaderList();
  1191. if(null != projGeneral) {
  1192. // projGeneral = proGeneralL.get(0);
  1193. // if(!projGeneral.getArrangeDutyStatus().equals(Globals.ARRANGESTATUS_0)) {
  1194. // j.setSuccess(false);
  1195. // j.setMsg("文件导入失败,排班已上报,不允许修改");
  1196. // return j;
  1197. // }
  1198. List<ProjarrangeDetailEntity> details = systemService.findByProperty(ProjarrangeDetailEntity.class, "projarrangeGeneralid", projGeneral.getId());
  1199. HashMap<String ,ProjarrangeDetailEntity> projMap = new HashMap<String, ProjarrangeDetailEntity>();
  1200. for(ProjarrangeDetailEntity projentity : details) {
  1201. projMap.put(projentity.getUserid(), projentity);
  1202. }
  1203. for(List<String> data: exceldata.getDataList()) {
  1204. Map<String, Object> myMap = new HashMap<String, Object>();
  1205. for(int i = 4 ; i < data.size(); i++) {
  1206. if(!pArrangeMap.containsKey(data.get(i)))
  1207. continue;
  1208. myMap.put(calMap.get(headList.get(i)), pArrangeMap.get(data.get(i)));
  1209. }
  1210. if(projMap.get(userMap.get(data.get(3))) != null ){
  1211. ProjarrangeDetailEntity projarrangeDetailEntity=arrangeDutyAndOndutyServiceI.getDayAndTimeFO(projMap.get(userMap.get(data.get(3))),myMap);
  1212. arrangeDutyAndOndutyServiceI.saveProjarrangeDetail(projarrangeDetailEntity, myMap, Globals.ARRANGESTATUS_0);
  1213. }else if(userMap.containsKey(data.get(3))) {
  1214. importSaveDetail(projGeneral, userMap, projectPostDetailMap, data, calMap, pArrangeMap, month, pid, headList);
  1215. }
  1216. }
  1217. }else {
  1218. String xiuxi = arrangeDutyService.getDUTYTYPE_xiuxiId();
  1219. //没有排班
  1220. projGeneral = new ProjArrangeGeneralEntity();
  1221. projGeneral.setBelongUnitid(pid);
  1222. projGeneral.setYearmonth(month);
  1223. projGeneral.setArrangeDutyStatus("0");
  1224. systemService.save(projGeneral);
  1225. for(List<String> data: exceldata.getDataList()) {
  1226. if(userMap.containsKey(data.get(3))) {
  1227. importSaveDetail(projGeneral, userMap, projectPostDetailMap, data, calMap, pArrangeMap, month, pid, headList);
  1228. }
  1229. }
  1230. }
  1231. j.setMsg("文件导入成功!");
  1232. } catch (Exception e) {
  1233. j.setMsg("文件导入失败!");
  1234. logger.error(ExceptionUtil.getExceptionMessage(e));
  1235. }finally{
  1236. try {
  1237. file.getInputStream().close();
  1238. } catch (IOException e) {
  1239. e.printStackTrace();
  1240. }
  1241. }
  1242. }
  1243. return j;
  1244. }
  1245. private void importSaveDetail(ProjArrangeGeneralEntity projGeneral, HashMap<String,String> userMap,Map<String, String> projectPostDetailMap,
  1246. List<String> data,HashMap<String, String> calMap,HashMap<String,String> pArrangeMap,String month,String pid, List<String>headList) throws Exception {
  1247. ProjarrangeDetailEntity projentity = new ProjarrangeDetailEntity();
  1248. projentity.setProjarrangeGeneralid(projGeneral.getId());
  1249. projentity.setPjtPostId(projectPostDetailMap.get(data.get(2)));
  1250. projentity.setUserid(userMap.get(data.get(3)));
  1251. projentity.setYearmonth(month);
  1252. projentity.setPid(pid);
  1253. Map<String, Object> myMap = new HashMap<String, Object>();
  1254. for(int i = 4 ; i < data.size(); i++) {
  1255. if(!pArrangeMap.containsKey(data.get(i)))
  1256. continue;
  1257. myMap.put(calMap.get(headList.get(i)), pArrangeMap.get(data.get(i)));
  1258. }
  1259. //
  1260. projentity=arrangeDutyAndOndutyServiceI.getDayAndTimeFO(projentity,myMap);
  1261. arrangeDutyAndOndutyServiceI.saveProjarrangeDetail(projentity, myMap, Globals.ARRANGESTATUS_0);
  1262. }
  1263. /**
  1264. * 校验必输项
  1265. * 检查是否超出岗位设置人数限制
  1266. * */
  1267. private String checkArrange(HGLExcelResult exceldata,Map<String,String> arrangeMap,Map<String,String> postMap,Map<String, Integer> postdutyNumMap) {
  1268. StringBuffer unFormatStr = new StringBuffer();
  1269. List<String> headList = exceldata.getHeaderList();
  1270. List<List<String>> dataList = exceldata.getDataList();
  1271. for(int i = 0 ; i < dataList.size() ; i++) {
  1272. List<String> arrangeData = dataList.get(i);
  1273. for(int j = 4; j < arrangeData.size(); j ++) {
  1274. if(StringUtils.isEmpty(arrangeData.get(j))) {
  1275. unFormatStr.append("【"+arrangeData.get(3)+"】"+headList.get(j)+"未排班;<br>");
  1276. }
  1277. else if(!arrangeMap.containsKey(arrangeData.get(j))) {
  1278. unFormatStr.append("【"+arrangeData.get(3)+"】"+headList.get(j)+"班次【"+arrangeData.get(j)+"】不存在;<br>");
  1279. }
  1280. }
  1281. if(StringUtils.isEmpty(arrangeData.get(2))) {
  1282. unFormatStr.append("【"+arrangeData.get(3)+"】项目岗位不能为空;<br>");
  1283. }
  1284. else if(!postMap.containsKey(arrangeData.get(2))) {
  1285. unFormatStr.append("【"+arrangeData.get(3)+"】项目岗位【"+arrangeData.get(2)+"】不存在;<br>");
  1286. }else{
  1287. postdutyNumMap.put(arrangeData.get(2), postdutyNumMap.get(arrangeData.get(2))-1);
  1288. }
  1289. }
  1290. for (Entry<String,Integer> post : postdutyNumMap.entrySet()) {
  1291. if(post.getValue() < 0) {
  1292. unFormatStr.append("【"+post.getKey()+"】项目岗位超出岗位编制人数<br>");
  1293. }
  1294. }
  1295. return unFormatStr.toString();
  1296. }
  1297. @RequestMapping(method = RequestMethod.GET)
  1298. @ResponseBody
  1299. public List<ProjarrangeDetailEntity> list() {
  1300. List<ProjarrangeDetailEntity> listProjarrangeDetails=projarrangeDetailService.getList(ProjarrangeDetailEntity.class);
  1301. return listProjarrangeDetails;
  1302. }
  1303. @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  1304. @ResponseBody
  1305. public ResponseEntity<?> get(@PathVariable("id") String id) {
  1306. ProjarrangeDetailEntity task = projarrangeDetailService.get(ProjarrangeDetailEntity.class, id);
  1307. if (task == null) {
  1308. return new ResponseEntity(HttpStatus.NOT_FOUND);
  1309. }
  1310. return new ResponseEntity(task, HttpStatus.OK);
  1311. }
  1312. @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
  1313. @ResponseBody
  1314. public ResponseEntity<?> create(@RequestBody ProjarrangeDetailEntity projarrangeDetail, UriComponentsBuilder uriBuilder) {
  1315. //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息.
  1316. Set<ConstraintViolation<ProjarrangeDetailEntity>> failures = validator.validate(projarrangeDetail);
  1317. if (!failures.isEmpty()) {
  1318. return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
  1319. }
  1320. //保存
  1321. try{
  1322. projarrangeDetailService.save(projarrangeDetail);
  1323. } catch (Exception e) {
  1324. e.printStackTrace();
  1325. return new ResponseEntity(HttpStatus.NO_CONTENT);
  1326. }
  1327. //按照Restful风格约定,创建指向新任务的url, 也可以直接返回id或对象.
  1328. String id = projarrangeDetail.getId();
  1329. URI uri = uriBuilder.path("/rest/projarrangeDetailController/" + id).build().toUri();
  1330. HttpHeaders headers = new HttpHeaders();
  1331. headers.setLocation(uri);
  1332. return new ResponseEntity(headers, HttpStatus.CREATED);
  1333. }
  1334. @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
  1335. public ResponseEntity<?> update(@RequestBody ProjarrangeDetailEntity projarrangeDetail) {
  1336. //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息.
  1337. Set<ConstraintViolation<ProjarrangeDetailEntity>> failures = validator.validate(projarrangeDetail);
  1338. if (!failures.isEmpty()) {
  1339. return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
  1340. }
  1341. //保存
  1342. try{
  1343. projarrangeDetailService.saveOrUpdate(projarrangeDetail);
  1344. } catch (Exception e) {
  1345. e.printStackTrace();
  1346. return new ResponseEntity(HttpStatus.NO_CONTENT);
  1347. }
  1348. //按Restful约定,返回204状态码, 无内容. 也可以返回200状态码.
  1349. return new ResponseEntity(HttpStatus.NO_CONTENT);
  1350. }
  1351. @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
  1352. @ResponseStatus(HttpStatus.NO_CONTENT)
  1353. public void delete(@PathVariable("id") String id) {
  1354. projarrangeDetailService.deleteEntityById(ProjarrangeDetailEntity.class, id);
  1355. }
  1356. /**
  1357. * 前端获取日历表json数据
  1358. * @author zbw
  1359. * 2017-10-24
  1360. * @param calendar
  1361. * @param request
  1362. * @param response
  1363. * @return
  1364. */
  1365. /*@RequestMapping(params = "getCalendar")
  1366. @ResponseBody
  1367. public AjaxJson getCalendar(CalendarEntity calendar, HttpServletRequest request, HttpServletResponse response) {
  1368. AjaxJson j = new AjaxJson();
  1369. DataGrid dataGrid=new DataGrid();
  1370. dataGrid.setField("id,year,month,day,week,createName,createBy,createDate,updateName,updateBy,updateDate,sysOrgCode,sysCompanyCode,");
  1371. CriteriaQuery cq = new CriteriaQuery(CalendarEntity.class,dataGrid);
  1372. //查询条件组装器
  1373. //org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, calendar, request.getParameterMap());
  1374. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, calendar, request.getParameterMap());
  1375. try{
  1376. //自定义追加查询条件
  1377. cq.eq("year", calendar.getYear());
  1378. cq.eq("month", calendar.getMonth());
  1379. //排序
  1380. Map<String, Object> map = new HashMap<String, Object>();
  1381. map.put("day", "asc");
  1382. cq.setOrder(map);
  1383. //排序
  1384. }catch (Exception e) {
  1385. throw new BusinessException(e.getMessage());
  1386. }
  1387. cq.add();
  1388. List<CalendarEntity> list=this.calendarService.getDataGridReturn(cq, true).getRows();
  1389. Map<String, Object> myMap=new HashMap<String, Object>();
  1390. myMap.put("0", list);
  1391. j.setAttributes(myMap);
  1392. return j;
  1393. }*/
  1394. /**
  1395. * 员工排班保存总方法
  1396. *
  1397. * @author zbw
  1398. * 2017-10-28
  1399. * @param strmap
  1400. * @param calendaridStr
  1401. * @param request
  1402. * @param response
  1403. * @return
  1404. */
  1405. /*国定加班时长计算规则
  1406. 1.节假日区分=国定
  1407. 1.1国定加班时长=基准工时相加
  1408. //1.2轮流加班班次时(轮流加班值班国家法定节假日不会出现,所以不考虑)
  1409. 超时加班时长计算规则
  1410. 2.1.超时加班时长=月度国定节假日以外所有班次的基准工时-月度法定工作日天数*8
  1411. 2.2.轮流加班班次时:超时加班时长相加
  1412. 值班天数计算规则
  1413. 值班天数=班次类型为值班时天数相加
  1414. 3上班天数计算规则
  1415. 3.1上班天数=班次类型为常班,日班,夜班时天数相加*/
  1416. @RequestMapping(params = "saveRows")
  1417. @ResponseBody
  1418. public AjaxJson saveRows(String strmap,String calendaridStr,String yearmonth,String pid,String arrangeDutyStatus,
  1419. HttpServletRequest request, HttpServletResponse response){
  1420. AjaxJson j = new AjaxJson();
  1421. if(pid!=null&&pid.length()>0){
  1422. pid=pid.split(",")[0];
  1423. }
  1424. JSONArray jsonArray = JSONArray.fromObject(strmap); // 首先把字符串转成 JSONArray 对象
  1425. for (int k = 0; k < jsonArray.size(); k++) {
  1426. //每一行的键值数据
  1427. Map<String, Object> map=jsonArray.getJSONObject(k);
  1428. //日期calendarId
  1429. String[] calendaridArr=calendaridStr.split(",");
  1430. //List<String> calendarIdList=extractIdListByComma(calendaridStr);
  1431. //只有日期和班次键值数据
  1432. Map<String, Object> myMap=new HashMap<String, Object>();
  1433. //所有班次信息
  1434. //List<String> shiftList=new ArrayList<String>();
  1435. for (int i = 0; i < calendaridArr.length; i++) {
  1436. for (Entry<String,Object> entryParam : map.entrySet()) {
  1437. //System.out.println("key="+entryParam.getKey()+",value="+entryParam.getValue());
  1438. if(entryParam.getKey().equals(calendaridArr[i])){
  1439. myMap.put(entryParam.getKey(), entryParam.getValue());
  1440. //shiftList.add(entryParam.getValue().toString());
  1441. }
  1442. }
  1443. }
  1444. ProjarrangeDetailEntity projarrangeDetailEntity=new ProjarrangeDetailEntity();
  1445. projarrangeDetailEntity.setId(map.get("id").toString());
  1446. projarrangeDetailEntity.setPjtPostId(map.get("pjtPostId").toString());
  1447. projarrangeDetailEntity.setUserid(map.get("userid").toString());
  1448. projarrangeDetailEntity.setYearmonth(yearmonth);
  1449. projarrangeDetailEntity.setPid(pid);
  1450. try {
  1451. //天数和时间算法
  1452. projarrangeDetailEntity=arrangeDutyAndOndutyServiceI.getDayAndTimeFO(projarrangeDetailEntity,myMap);
  1453. //项目排班详细表保存新增/更新的行数据
  1454. j=arrangeDutyAndOndutyServiceI.saveProjarrangeDetail(projarrangeDetailEntity,myMap,arrangeDutyStatus);
  1455. } catch (Exception e) {
  1456. // TODO Auto-generated catch block
  1457. e.printStackTrace();
  1458. }
  1459. }
  1460. return j;
  1461. }
  1462. /**
  1463. * 验证班次停用启用状态
  1464. * @author zbw
  1465. * 2017-12-11
  1466. * @param strmap
  1467. * @param request
  1468. * @param response
  1469. * @return
  1470. */
  1471. @RequestMapping(params = "checkShiftStatus")
  1472. @ResponseBody
  1473. public AjaxJson checkShiftStatus(String strmap,
  1474. HttpServletRequest request, HttpServletResponse response){
  1475. AjaxJson j = new AjaxJson();
  1476. List<String> shiftIdList=new ArrayList<String>();
  1477. JSONArray jsonArray = JSONArray.fromObject(strmap); // 首先把字符串转成 JSONArray 对象
  1478. for (int k = 0; k < jsonArray.size(); k++) {
  1479. //每一行的键值数据
  1480. Map<String, Object> map=jsonArray.getJSONObject(k);
  1481. for (Entry<String,Object> entryParam : map.entrySet()) {
  1482. //System.out.println("key="+entryParam.getKey()+",value="+entryParam.getValue());
  1483. if(!shiftIdList.contains(entryParam.getValue().toString())){
  1484. shiftIdList.add(entryParam.getValue().toString());
  1485. }
  1486. }
  1487. }
  1488. //班次名称查询只查询删除和停用的数据
  1489. StringBuffer hql = new StringBuffer(" from ArrangeDutyEntity t where status = '1' ");
  1490. List<ArrangeDutyEntity> arrangeDutyEntityListDT = arrangeDutyService.findHql(hql.toString());
  1491. List<String> shiftIdListDT=new ArrayList<String>();
  1492. Map<String, Object> shiftIdMapDT=new HashMap<String, Object>();
  1493. for (int i = 0; i < arrangeDutyEntityListDT.size(); i++) {
  1494. shiftIdListDT.add(arrangeDutyEntityListDT.get(i).getId());
  1495. shiftIdMapDT.put(arrangeDutyEntityListDT.get(i).getId(), arrangeDutyEntityListDT.get(i).getDutyName());
  1496. }
  1497. String msg="";
  1498. for (int i = 0; i < shiftIdList.size(); i++) {
  1499. if(shiftIdListDT.contains(shiftIdList.get(i))){
  1500. if(msg.length()!=0){
  1501. msg+=","+shiftIdMapDT.get(shiftIdList.get(i)).toString();
  1502. }else{
  1503. msg=shiftIdMapDT.get(shiftIdList.get(i)).toString();
  1504. }
  1505. }
  1506. }
  1507. if(msg.length()!=0){
  1508. msg+="为停用状态";
  1509. j.setMsg(msg);
  1510. j.setSuccess(false);
  1511. }
  1512. return j;
  1513. }
  1514. /**
  1515. * 上报总方法
  1516. * @author zbw
  1517. * 2017-12-8
  1518. * @param yearmonth
  1519. * @param pid
  1520. * @param request
  1521. * @param response
  1522. * @return
  1523. */
  1524. @RequestMapping(params = "putOutProjarrange")
  1525. @ResponseBody
  1526. public AjaxJson putOutProjarrange(String yearmonth,String pid,
  1527. HttpServletRequest request, HttpServletResponse response){
  1528. AjaxJson j = new AjaxJson();
  1529. if(pid!=null&&pid.length()>0){
  1530. pid=pid.split(",")[0];
  1531. }
  1532. TSUser tSUser=ResourceUtil.getSessionUser();
  1533. try {
  1534. //查询项目排班总览表数据
  1535. StringBuffer hql = new StringBuffer(" FROM ProjArrangeGeneralEntity where belongUnitid=? and yearmonth=? ");
  1536. List<ProjArrangeGeneralEntity> projArrangeGeneralEntityList = systemService.findHql(hql.toString(),pid,yearmonth);
  1537. if(projArrangeGeneralEntityList.size()>0){
  1538. //查询项目排班详细表数据计算排班人数
  1539. hql = new StringBuffer(" FROM ProjarrangeDetailEntity where pid=? and yearmonth=? ");
  1540. List<ProjarrangeDetailEntity> projarrangeDetailEntityList = systemService.findHql(hql.toString(),pid,yearmonth);
  1541. projArrangeGeneralEntityList.get(0).setPeopleQuantity(projarrangeDetailEntityList.size());
  1542. projArrangeGeneralEntityList.get(0).setArrangeDutyStatus(Globals.ARRANGESTATUS_1);
  1543. projArrangeGeneralEntityList.get(0).setReporterId(tSUser.getId());
  1544. }
  1545. systemService.saveOrUpdate(projArrangeGeneralEntityList.get(0));
  1546. j.setSuccess(true);
  1547. j.setMsg("操作成功");
  1548. } catch (Exception e) {
  1549. j.setMsg("操作失败");
  1550. j.setSuccess(false);
  1551. e.printStackTrace();
  1552. }
  1553. return j;
  1554. }
  1555. /**
  1556. * 月度排班总方法;
  1557. * @author zbw
  1558. * 2017-11-7
  1559. * @param arrangeDutyOperateId
  1560. * @param yearmonth
  1561. * @param pid
  1562. * @param arrangeDutyStatus
  1563. * @return
  1564. */
  1565. @RequestMapping(params = "saveMonthArrangeDutyOperate")
  1566. @ResponseBody
  1567. public AjaxJson saveMonthArrangeDutyOperate(String arrangeDutyOperateId,String yearmonth,String pid,String arrangeDutyStatus){
  1568. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyy-MM-dd HH:mm:ss ms");
  1569. AjaxJson j = new AjaxJson();
  1570. if(pid!=null&&pid.length()>0){
  1571. pid=pid.split(",")[0];
  1572. }
  1573. try {
  1574. long start = System.currentTimeMillis();
  1575. System.out.println(simpleDateFormat.format(new Date()));
  1576. j=arrangeDutyAndOndutyServiceI.saveMonthArrangeDutyOperate(arrangeDutyOperateId, yearmonth, pid, arrangeDutyStatus);
  1577. long end = System.currentTimeMillis();
  1578. System.out.println(end-start);
  1579. } catch (Exception e) {
  1580. // TODO Auto-generated catch block
  1581. e.printStackTrace();
  1582. j.setMsg("操作失败");
  1583. j.setSuccess(false);
  1584. // throw new BusinessException(e.getMessage());
  1585. }
  1586. return j;
  1587. }
  1588. /**
  1589. * 轮流值班排班总方法;
  1590. * @author zbw
  1591. * 2017-11-7
  1592. * @param arrangeDutyOperateId
  1593. * @param yearmonth
  1594. * @param pid
  1595. * @param arrangeDutyStatus
  1596. * @return
  1597. */
  1598. @RequestMapping(params = "saveOndutyArrangeDutyOperate")
  1599. @ResponseBody
  1600. public AjaxJson saveOndutyArrangeDutyOperate(String onDutyOperateId,String yearmonth,String pid,String arrangeDutyStatus){
  1601. AjaxJson j = new AjaxJson();
  1602. if(pid!=null&&pid.length()>0){
  1603. pid=pid.split(",")[0];
  1604. }
  1605. try {
  1606. j=arrangeDutyAndOndutyServiceI.saveOndutyArrangeDutyOperate(onDutyOperateId, yearmonth, pid, arrangeDutyStatus);
  1607. } catch (Exception e) {
  1608. // TODO Auto-generated catch block
  1609. e.printStackTrace();
  1610. j.setSuccess(false);
  1611. }
  1612. return j;
  1613. }
  1614. /**
  1615. * 异步验证是否已经上报,若已确认的话不能再次上报
  1616. * @author zbw
  1617. * 2017-11-28
  1618. * @param pid
  1619. * @param yearmonth
  1620. * @return
  1621. */
  1622. @RequestMapping(params = "checkMonthArrangeDutyStatus")
  1623. @ResponseBody
  1624. public AjaxJson checkMonthArrangeDutyStatus(String pid,String yearmonth){
  1625. AjaxJson j = new AjaxJson();
  1626. if(pid!=null&&pid.length()>0){
  1627. pid=pid.split(",")[0];
  1628. }
  1629. j=projarrangeDetailService.checkMonthArrangeDutyStatus(pid, yearmonth);
  1630. return j;
  1631. }
  1632. /**
  1633. * 月度排班总方法;
  1634. * @author zbw
  1635. * 2017-11-7
  1636. * @param arrangeDutyOperateId
  1637. * @param yearmonth
  1638. * @param pid
  1639. * @param arrangeDutyStatus
  1640. * @return
  1641. */
  1642. /*@RequestMapping(params = "saveMonthArrangeDutyOperate")
  1643. @ResponseBody
  1644. public AjaxJson saveOnDutyOperate(String onDutyOperateId,String yearmonth,String pid,String arrangeDutyStatus){
  1645. AjaxJson j = new AjaxJson();
  1646. if(pid!=null&&pid.length()>0){
  1647. pid=pid.split(",")[0];
  1648. }
  1649. j=projarrangeDetailService.saveMonthArrangeDutyOperate(onDutyOperateId, yearmonth, pid, arrangeDutyStatus);
  1650. return j;
  1651. }*/
  1652. /**
  1653. * 异步判断是否可以行编辑
  1654. * @author zbw
  1655. * 2017-11-12
  1656. * @param projarrangeDetailEntity
  1657. * @return
  1658. */
  1659. @RequestMapping(params = "getCheckEdit")
  1660. @ResponseBody
  1661. public AjaxJson getCheckEdit(ProjarrangeDetailEntity projarrangeDetailEntity){
  1662. AjaxJson j = new AjaxJson();
  1663. //根据主键id和月度查询项目排班详细表数据
  1664. StringBuffer hql = new StringBuffer(" from ProjarrangeDetailEntity t where t.id=? and t.yearmonth=? ");
  1665. List<ProjarrangeDetailEntity> projarrangeDetailList = projarrangeDetailService.findHql(hql.toString()
  1666. , projarrangeDetailEntity.getId(),projarrangeDetailEntity.getYearmonth());
  1667. boolean flag=false;
  1668. String runWay="";
  1669. if(projarrangeDetailList.size()!=0){
  1670. String userId=projarrangeDetailList.get(0).getUserid();
  1671. //根据月度查询项目排班操作表数据
  1672. hql = new StringBuffer(" from ArrangeDutyOperateEntity t where t.yearmonth=? ");
  1673. List<ArrangeDutyOperateEntity> arrangeDutyOperateList = projarrangeDetailService.findHql(hql.toString()
  1674. , projarrangeDetailEntity.getYearmonth());
  1675. for (int i = 0; i < arrangeDutyOperateList.size(); i++) {
  1676. List<String> userIdList = extractIdListByComma(arrangeDutyOperateList.get(i).getUserid());
  1677. if(userIdList.contains(userId)){
  1678. // if(arrangeDutyOperateList.get(i).getRunway().equals(Globals.other_jijiabanfei)||
  1679. // arrangeDutyOperateList.get(i).getRunway().equals(Globals.other_wujiabanfei)||
  1680. // arrangeDutyOperateList.get(i).getRunway().equals(Globals.f2t_jijiabanfei)||
  1681. // arrangeDutyOperateList.get(i).getRunway().equals(Globals.f2t_wujiabanfei)){
  1682. // flag=true;
  1683. // break;
  1684. // }else{
  1685. // runWay=ProjectArrangeCommonMethod.getRunWayByCode(arrangeDutyOperateList.get(i).getRunway());
  1686. // flag=false;
  1687. // break;
  1688. // }
  1689. flag=true;
  1690. break;
  1691. }else{
  1692. runWay="无";
  1693. flag=false;
  1694. }
  1695. }
  1696. }else{
  1697. runWay="无";
  1698. flag=false;
  1699. }
  1700. if(flag==false){
  1701. if(runWay=="无"){
  1702. j.setMsg("通过Excel导入的排班不能进行修改,请到Excel排班模板中修改后导入");
  1703. }else{
  1704. j.setMsg("当前员工运转方式为'"+runWay+"',不可以编辑班次。");
  1705. }
  1706. j.setSuccess(false);
  1707. }
  1708. return j;
  1709. }
  1710. /**
  1711. * 复制上个月的月度排班
  1712. * PS:
  1713. * 1、只复制运转方式为做五休二的排班
  1714. * */
  1715. @RequestMapping(params = "copyLastMonthArrange")
  1716. @ResponseBody
  1717. public AjaxJson copyLastMonthArrange(String yearmonth,String pid,
  1718. HttpServletRequest request, HttpServletResponse response){
  1719. AjaxJson j = new AjaxJson();
  1720. if(StringUtil.isEmpty(pid) || StringUtil.isEmpty(yearmonth)){
  1721. j.setMsg("项目以及排班月度不能为空。");
  1722. j.setSuccess(false);
  1723. return j;
  1724. }
  1725. // StringBuffer hql = new StringBuffer(" from ArrangeDutyOperateEntity t where runway in ('").append(Globals.f2t_jijiabanfei)
  1726. // .append("','").append(Globals.f2t_wujiabanfei).append("')");
  1727. // hql.append(" and t.yearmonth = ? and t.pid =? ");
  1728. List<ArrangeDutyOperateEntity> curMonthArrangeDutyOptList = projDao.getArrangeDutyOperate4CopyLastMonth(yearmonth, pid);
  1729. if(curMonthArrangeDutyOptList.size() > 0) {
  1730. j.setMsg("本月做五休二运转方式已经进行了排班,不能复制上月排班");
  1731. j.setSuccess(false);
  1732. return j;
  1733. }
  1734. // TSUser tSUser=ResourceUtil.getSessionUser();
  1735. try {
  1736. String lastMonth = HGLDateUtils.addDateMonth(yearmonth, -1);
  1737. // 先查询上个月的做五休二方式的排班list
  1738. List<ArrangeDutyOperateEntity> lastMonthArrangeDutyOptList = projDao.getArrangeDutyOperate4CopyLastMonth(lastMonth,pid);
  1739. String checkRet = checkUserConfig(lastMonthArrangeDutyOptList);
  1740. if(StringUtils.isNotEmpty(checkRet)) {
  1741. j.setMsg("复制排班失败,"+checkRet);
  1742. j.setSuccess(false);
  1743. return j;
  1744. }
  1745. String arrangeDutyOperateIds = "";
  1746. for( ArrangeDutyOperateEntity optEntity : lastMonthArrangeDutyOptList) {
  1747. //清空原id,表示此条记录为新增
  1748. optEntity.setId(null);
  1749. optEntity.setYearmonth(yearmonth);
  1750. // ArrangeDutyOperateEntity t = new ArrangeDutyOperateEntity();
  1751. // MyBeanUtils.copyBeanNotNull2Bean(optEntity, t);
  1752. AjaxJson aj = arrangeDutyOperateService.saveArrangeDutyOperate(optEntity,"1",arrangeDutyOperateIds);
  1753. //把新增的排班oprate ID记录下来,为后续生成排班做准备
  1754. arrangeDutyOperateIds = aj.getAttributes().get("arrangeDutyOperateId").toString();
  1755. }
  1756. saveMonthArrangeDutyOperate(arrangeDutyOperateIds, yearmonth, pid, "0");
  1757. j.setSuccess(true);
  1758. j.setMsg("操作成功");
  1759. } catch (Exception e) {
  1760. j.setMsg("操作失败");
  1761. j.setSuccess(false);
  1762. e.printStackTrace();
  1763. }
  1764. return j;
  1765. }
  1766. private String checkUserConfig(List<ArrangeDutyOperateEntity> lastMonthArrangeDutyOptList ) {
  1767. String ret = "";
  1768. if(lastMonthArrangeDutyOptList == null || lastMonthArrangeDutyOptList.size() == 0)
  1769. return ret;
  1770. List<Map<String, Object>> postConfig = systemService.findForJdbc("select id,ptj_post_name, need_number ,pid "
  1771. + "from t_bus_project_post_detail where pid =? and delete_flag = 0 ",
  1772. lastMonthArrangeDutyOptList.get(0).getPid());
  1773. HashMap<String,Integer> configCountMap = new HashMap<String, Integer>();
  1774. HashMap<String,Integer> arrangeCountMap = new HashMap<String, Integer>();
  1775. HashMap<String,String> postNameMap = new HashMap<String, String>();
  1776. for (Map<String, Object> map : postConfig) {
  1777. postNameMap.put(map.get("id").toString(), map.get("ptj_post_name").toString());
  1778. configCountMap.put(map.get("id").toString(), Integer.valueOf( map.get("need_number").toString()));
  1779. }
  1780. // for (ArrangeDutyOperateEntity operate : lastMonthArrangeDutyOptList) {
  1781. // if(configCountMap.get(operate.getPjtPostId()) >= operate.getDeployPeopleNum()) {
  1782. // configCountMap.put(operate.getPjtPostId(), configCountMap.get(operate.getPjtPostId()) - operate.getDeployPeopleNum());
  1783. // }else {
  1784. // ret = "岗位【"+postNameMap.get(operate.getPjtPostId())+"】排班人数超过项目岗位编制人数,请联系人力资源部";
  1785. // return ret;
  1786. // }
  1787. // }
  1788. for (ArrangeDutyOperateEntity operate : lastMonthArrangeDutyOptList) {
  1789. arrangeCountMap.put(operate.getPjtPostId(),
  1790. arrangeCountMap.containsKey(operate.getPjtPostId())
  1791. ? arrangeCountMap.get(operate.getPjtPostId()) + operate.getDeployPeopleNum()
  1792. : operate.getDeployPeopleNum());
  1793. }
  1794. //检查岗位配置中各岗位配置数量,是否超出
  1795. for (Entry<String, Integer> arrange : arrangeCountMap.entrySet()) {
  1796. if(configCountMap.get(arrange.getKey()) < arrange.getValue()) {
  1797. ret += String.format("<br>岗位【%s】,复制排班人数%d人,项目岗位编制人数%d人;", postNameMap.get(arrange.getKey()),arrange.getValue(),configCountMap.get(arrange.getKey())) ;
  1798. }
  1799. }
  1800. return StringUtils.isNotEmpty(ret)
  1801. ? "以下岗位超出编制,请联系人力资源部:"+ret
  1802. :"";
  1803. }
  1804. @RequestMapping(params = "redoArrange")
  1805. @ResponseBody
  1806. public AjaxJson redoArrange(String yearmonth,String pid,
  1807. HttpServletRequest request, HttpServletResponse response){
  1808. //检查是否可以恢复
  1809. AjaxJson j = checkRedo(yearmonth, pid);
  1810. if(!j.isSuccess())
  1811. return j;
  1812. TSDepart depart = systemService.findUniqueByProperty(TSDepart.class, "id", pid);
  1813. try {
  1814. ProjArrangeDetailAndUserDto paramDto = new ProjArrangeDetailAndUserDto();
  1815. //查询项目排班详细表数据
  1816. List<ProjarrangeDetailEntity> projArrangeDetaillist = systemService.findHql(
  1817. " FROM ProjarrangeDetailEntity where pid =? and yearmonth=? ", pid,yearmonth);
  1818. projarrangeDetailService.getProjArrangeDetailAndUserByPIdYearMonth(
  1819. paramDto,null);
  1820. for(ProjarrangeDetailEntity projDetail: projArrangeDetaillist){
  1821. //查询员工排班历史详情表数据(历史只保留了一份)
  1822. List<UserArrangeDetailHistoryEntity> historyList = systemService.findHql(" FROM UserArrangeDetailHistoryEntity where projarrangeDetailid = ?", projDetail.getId());
  1823. Map<String,Object> caldutyMap = new HashMap<String, Object>();
  1824. for(UserArrangeDetailHistoryEntity history:historyList) {
  1825. caldutyMap.put(history.getCalendarid(),history.getShiftid());
  1826. }
  1827. projDetail=arrangeDutyAndOndutyServiceI.getDayAndTimeFO(projDetail,caldutyMap);
  1828. arrangeDutyAndOndutyServiceI.saveProjarrangeDetail(projDetail, caldutyMap, Globals.ARRANGESTATUS_0,false);
  1829. }
  1830. String message = "成功恢复项目【"+depart.getDepartname()+"】【"+yearmonth+"】月度排班";
  1831. j.setSuccess(true);
  1832. j.setMsg(message);
  1833. systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
  1834. } catch (Exception e) {
  1835. j.setMsg("操作失败");
  1836. j.setSuccess(false);
  1837. e.printStackTrace();
  1838. }
  1839. return j;
  1840. }
  1841. private AjaxJson checkRedo(String yearmonth,String pid) {
  1842. AjaxJson j = new AjaxJson();
  1843. if(StringUtil.isEmpty(pid) || StringUtil.isEmpty(yearmonth)){
  1844. j.setMsg("项目以及排班月度不能为空。");
  1845. j.setSuccess(false);
  1846. return j;
  1847. }
  1848. List<ProjArrangeGeneralEntity> projArrangeGenerallist = systemService.findHql(
  1849. " FROM ProjArrangeGeneralEntity where belongUnitid =? and yearmonth=? ", pid,yearmonth);
  1850. if(projArrangeGenerallist.size() == 0) {
  1851. j.setMsg("当前项目月度【"+yearmonth+"】未排班,无可恢复数据");
  1852. j.setSuccess(false);
  1853. return j;
  1854. }
  1855. if(projArrangeGenerallist.get(0).getArrangeDutyStatus().equals(Globals.ARRANGESTATUS_2)) {
  1856. j.setMsg("当前项目月度【"+yearmonth+"】排班已上报,不能恢复");
  1857. j.setSuccess(false);
  1858. return j;
  1859. }
  1860. return j;
  1861. }
  1862. /**
  1863. * 用户选择机构列表跳转页面
  1864. * 项目名称选择
  1865. * @return
  1866. */
  1867. /*@RequestMapping(params = "departZTreeSelect")
  1868. public String departZTreeSelect(HttpServletRequest req) {
  1869. req.setAttribute("orgIds", req.getParameter("orgIds"));
  1870. return "cn/com/lzt/projarrangedetail/departZTreeSelect";
  1871. }*/
  1872. //update--start--by:jg_renjie--at:20160318 for:#942 【组件封装】组织机构弹出模式,目前是列表,得改造成树方式
  1873. //update-start--Author: os_renjie Date:20160529 for:TASK #1056 【bug】用户编辑,弹出组织机构,默认没选中
  1874. /*@RequestMapping(params = "getDepartZTreeInfo")
  1875. @ResponseBody
  1876. public AjaxJson getDepartZTreeInfo(HttpServletRequest request, HttpServletResponse response){
  1877. AjaxJson j = new AjaxJson();
  1878. String orgIds = request.getParameter("orgIds");
  1879. String[] ids = new String[]{};
  1880. if(StringUtils.isNotBlank(orgIds)){
  1881. orgIds = orgIds.substring(0, orgIds.length()-1);
  1882. ids = orgIds.split("\\,");
  1883. }
  1884. String parentid = request.getParameter("parentid");
  1885. List<TSDepart> tSDeparts = new ArrayList<TSDepart>();
  1886. StringBuffer hql = new StringBuffer(" from TSDepart t where 1=1 ");
  1887. if(StringUtils.isNotBlank(parentid)){
  1888. TSDepart dePart = this.systemService.getEntity(TSDepart.class, parentid);
  1889. hql.append(" and TSPDepart = ?");
  1890. tSDeparts = this.systemService.findHql(hql.toString(), dePart);
  1891. } else {
  1892. hql.append(" and t.orgType = ?");
  1893. tSDeparts = this.systemService.findHql(hql.toString(), "1");
  1894. }
  1895. List<Map<String,Object>> dateList = new ArrayList<Map<String,Object>>();
  1896. if(tSDeparts.size()>0){
  1897. Map<String,Object> map = null;
  1898. String sql = null;
  1899. Object[] params = null;
  1900. for(TSDepart depart:tSDeparts){
  1901. map = new HashMap<String,Object>();
  1902. map.put("id", depart.getId());
  1903. map.put("name", depart.getDepartname());
  1904. if(ids.length>0){
  1905. for(String id:ids){
  1906. if(id.equals(depart.getId())){
  1907. map.put("checked", true);
  1908. }
  1909. }
  1910. }
  1911. if(StringUtils.isNotBlank(parentid)){
  1912. map.put("pId", parentid);
  1913. } else{
  1914. map.put("pId", "1");
  1915. }
  1916. //根据id判断是否有子节点
  1917. sql = "select count(1) from t_s_depart t where t.parentdepartid = ?";
  1918. params = new Object[]{depart.getId()};
  1919. long count = this.systemService.getCountForJdbcParam(sql, params);
  1920. if(count>0){
  1921. map.put("isParent",true);
  1922. }
  1923. dateList.add(map);
  1924. }
  1925. }
  1926. net.sf.json.JSONArray jsonArray = net.sf.json.JSONArray.fromObject(dateList);
  1927. j.setMsg(jsonArray.toString());
  1928. return j;
  1929. }*/
  1930. //update-start--Author: os_renjie Date:20160529 for:TASK #1056 【bug】用户编辑,弹出组织机构,默认没选中
  1931. //update--end--by:jg_renjie--at:20160318 for:#942 【组件封装】组织机构弹出模式,目前是列表,得改造成树方式
  1932. }