OnDutyOperateServiceImpl.java 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040
  1. package cn.com.lzt.ondutyoperate.service.impl;
  2. import cn.com.lzt.arrangeduty.dto.ArrangeDutyDto;
  3. import cn.com.lzt.arrangeduty.entity.ArrangeDutyEntity;
  4. import cn.com.lzt.arrangeduty.service.ArrangeDutyServiceI;
  5. import cn.com.lzt.arrangedutyoperate.entity.ArrangeDutyOperateEntity;
  6. import cn.com.lzt.calendar.dto.CalendarAscDto;
  7. import cn.com.lzt.ondutyoperate.entity.OnDutyOperateEntity;
  8. import cn.com.lzt.ondutyoperate.service.OnDutyOperateServiceI;
  9. import cn.com.lzt.projarrangedetail.entity.ProjarrangeDetailEntity;
  10. import cn.com.lzt.projarrangedetail.projectarrangecommonmethod.ProjectArrangeCommonMethod;
  11. import cn.com.lzt.projarrangedetail.service.ProjarrangeDetailServiceI;
  12. import cn.com.lzt.userarrangedetail.entity.UserArrangeDetailEntity;
  13. import org.jeecgframework.core.common.exception.BusinessException;
  14. import org.jeecgframework.core.common.model.json.AjaxJson;
  15. import org.jeecgframework.core.common.service.CommonService;
  16. import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
  17. import org.jeecgframework.core.constant.Globals;
  18. import org.jeecgframework.core.util.*;
  19. import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter;
  20. import org.jeecgframework.web.system.pojo.base.DictEntity;
  21. import org.jeecgframework.web.system.service.SystemService;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import javax.validation.Validator;
  26. import java.io.Serializable;
  27. import java.math.BigDecimal;
  28. import java.util.*;
  29. @Service("onDutyOperateService")
  30. @Transactional
  31. public class OnDutyOperateServiceImpl extends CommonServiceImpl implements OnDutyOperateServiceI {
  32. @Autowired
  33. private SystemService systemService;
  34. @Autowired
  35. private Validator validator;
  36. //公共方法类
  37. @Autowired
  38. private CommonService commonService;
  39. //项目排班详细表
  40. @Autowired
  41. ProjarrangeDetailServiceI projarrangeDetailServiceI;
  42. //班次表
  43. @Autowired
  44. private ArrangeDutyServiceI arrangeDutyService;
  45. public void delete(OnDutyOperateEntity entity) throws Exception{
  46. super.delete(entity);
  47. //执行删除操作增强业务
  48. this.doDelBus(entity);
  49. }
  50. public Serializable save(OnDutyOperateEntity entity) throws Exception{
  51. Serializable t = super.save(entity);
  52. //执行新增操作增强业务
  53. this.doAddBus(entity);
  54. return t;
  55. }
  56. public void saveOrUpdate(OnDutyOperateEntity entity) throws Exception{
  57. super.saveOrUpdate(entity);
  58. //执行更新操作增强业务
  59. this.doUpdateBus(entity);
  60. }
  61. /**
  62. * 新增操作增强业务
  63. * @param t
  64. * @return
  65. */
  66. private void doAddBus(OnDutyOperateEntity t) throws Exception{
  67. //-----------------sql增强 start----------------------------
  68. //-----------------sql增强 end------------------------------
  69. //-----------------java增强 start---------------------------
  70. //-----------------java增强 end-----------------------------
  71. }
  72. /**
  73. * 更新操作增强业务
  74. * @param t
  75. * @return
  76. */
  77. private void doUpdateBus(OnDutyOperateEntity t) throws Exception{
  78. //-----------------sql增强 start----------------------------
  79. //-----------------sql增强 end------------------------------
  80. //-----------------java增强 start---------------------------
  81. //-----------------java增强 end-----------------------------
  82. }
  83. /**
  84. * 删除操作增强业务
  85. * @param id
  86. * @return
  87. */
  88. private void doDelBus(OnDutyOperateEntity t) throws Exception{
  89. //-----------------sql增强 start----------------------------
  90. //-----------------sql增强 end------------------------------
  91. //-----------------java增强 start---------------------------
  92. //-----------------java增强 end-----------------------------
  93. }
  94. private Map<String,Object> populationMap(OnDutyOperateEntity t){
  95. Map<String,Object> map = new HashMap<String,Object>();
  96. map.put("id", t.getId());
  97. map.put("pid", t.getPid());
  98. map.put("yearmonth", t.getYearmonth());
  99. map.put("shiftid", t.getShiftid());
  100. map.put("userid", t.getUserid());
  101. map.put("arrange_stime", t.getArrangeStime());
  102. map.put("arrange_etime", t.getArrangeEtime());
  103. map.put("everyday_people_num", t.getEverydayPeopleNum());
  104. map.put("attendance_cycle", t.getAttendanceCycle());
  105. map.put("create_name", t.getCreateName());
  106. map.put("create_by", t.getCreateBy());
  107. map.put("create_date", t.getCreateDate());
  108. map.put("update_name", t.getUpdateName());
  109. map.put("update_by", t.getUpdateBy());
  110. map.put("update_date", t.getUpdateDate());
  111. map.put("sys_org_code", t.getSysOrgCode());
  112. map.put("sys_company_code", t.getSysCompanyCode());
  113. return map;
  114. }
  115. /**
  116. * 替换sql中的变量
  117. * @param sql
  118. * @param t
  119. * @return
  120. */
  121. public String replaceVal(String sql,OnDutyOperateEntity t){
  122. sql = sql.replace("#{id}",String.valueOf(t.getId()));
  123. sql = sql.replace("#{pid}",String.valueOf(t.getPid()));
  124. sql = sql.replace("#{yearmonth}",String.valueOf(t.getYearmonth()));
  125. sql = sql.replace("#{shiftid}",String.valueOf(t.getShiftid()));
  126. sql = sql.replace("#{userid}",String.valueOf(t.getUserid()));
  127. sql = sql.replace("#{arrange_stime}",String.valueOf(t.getArrangeStime()));
  128. sql = sql.replace("#{arrange_etime}",String.valueOf(t.getArrangeEtime()));
  129. sql = sql.replace("#{everyday_people_num}",String.valueOf(t.getEverydayPeopleNum()));
  130. sql = sql.replace("#{attendance_cycle}",String.valueOf(t.getAttendanceCycle()));
  131. sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName()));
  132. sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy()));
  133. sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate()));
  134. sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName()));
  135. sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy()));
  136. sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate()));
  137. sql = sql.replace("#{sys_org_code}",String.valueOf(t.getSysOrgCode()));
  138. sql = sql.replace("#{sys_company_code}",String.valueOf(t.getSysCompanyCode()));
  139. sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
  140. return sql;
  141. }
  142. /**
  143. * 执行JAVA增强
  144. */
  145. private void executeJavaExtend(String cgJavaType,String cgJavaValue,Map<String,Object> data) throws Exception {
  146. if(StringUtil.isNotEmpty(cgJavaValue)){
  147. Object obj = null;
  148. try {
  149. if("class".equals(cgJavaType)){
  150. //因新增时已经校验了实例化是否可以成功,所以这块就不需要再做一次判断
  151. obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance();
  152. }else if("spring".equals(cgJavaType)){
  153. obj = ApplicationContextUtil.getContext().getBean(cgJavaValue);
  154. }
  155. if(obj instanceof CgformEnhanceJavaInter){
  156. CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj;
  157. javaInter.execute("t_bus_onduty_operate",data);
  158. }
  159. } catch (Exception e) {
  160. e.printStackTrace();
  161. throw new Exception("执行JAVA增强出现异常!");
  162. }
  163. }
  164. }
  165. @Override
  166. public AjaxJson saveOnDutyOperate(OnDutyOperateEntity onDutyOperate,String onDutyOperateId) {
  167. String message = null;
  168. AjaxJson j = new AjaxJson();
  169. message = "";
  170. j.setMsg(message);
  171. j=checkOnDutyOperate(onDutyOperate);
  172. if(j.getMsg().length()==0){
  173. List<String> arrangeDutyOperateIdList=ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateId);
  174. if (StringUtil.isNotEmpty(onDutyOperate.getId())) {
  175. OnDutyOperateEntity t = this.get(OnDutyOperateEntity.class, onDutyOperate.getId());
  176. if(t!=null){
  177. try {//数据存在,进行更新操作
  178. //判断是否是已存的id
  179. if(!arrangeDutyOperateIdList.contains(t.getId())){
  180. if(onDutyOperateId!=null&&onDutyOperateId.length()>0){
  181. onDutyOperateId=onDutyOperateId+","+t.getId();
  182. }else{
  183. onDutyOperateId=t.getId();
  184. }
  185. //返回编辑的id,方便值班排班==
  186. Map<String, Object> idMap=new HashMap<String, Object>();
  187. idMap.put("onDutyOperateId",onDutyOperateId );
  188. j.setAttributes(idMap);
  189. //返回编辑的id,方便值班排班==
  190. }
  191. /*List<String> userIdOldList=ProjectArrangeCommonMethod.extractIdListByComma(t.getUserid());
  192. List<String> userIdNewList=ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getUserid());
  193. userIdOldList.removeAll(userIdNewList);
  194. MyBeanUtils.copyBeanNotNull2Bean(onDutyOperate, t);
  195. this.saveOrUpdate(t);
  196. String deleteUserId="";
  197. for (int i = 0; i < userIdOldList.size(); i++) {
  198. if(deleteUserId.length()!=0){
  199. deleteUserId+=","+userIdOldList.get(i);
  200. }else{
  201. deleteUserId=userIdOldList.get(i);
  202. }
  203. }
  204. onDutyOperate.setUserid(deleteUserId);
  205. //删除值班操作表数据
  206. this.deleteUserArrangeDetail(onDutyOperate,pid);*/
  207. //删除值班操作表数据
  208. this.deleteUserArrangeDetail(t);
  209. MyBeanUtils.copyBeanNotNull2Bean(onDutyOperate, t);
  210. this.saveOrUpdate(t);
  211. systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
  212. message = "值班操作更新成功";
  213. } catch (Exception e) {
  214. e.printStackTrace();
  215. message = "值班操作更新失败";
  216. throw new BusinessException(e.getMessage());
  217. }
  218. }else{//数据不存在,进行添加操作
  219. try{
  220. onDutyOperate.setId("");
  221. this.save(onDutyOperate);
  222. if(onDutyOperateId!=null&&onDutyOperateId.length()>0){
  223. onDutyOperateId=onDutyOperateId+","+onDutyOperate.getId();
  224. }else{
  225. onDutyOperateId=onDutyOperate.getId();
  226. }
  227. //返回编辑的id,方便值班排班==
  228. Map<String, Object> idMap=new HashMap<String, Object>();
  229. idMap.put("onDutyOperateId",onDutyOperateId );
  230. j.setAttributes(idMap);
  231. //返回编辑的id,方便值班排班==
  232. systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
  233. message = "值班操作添加成功";
  234. }catch(Exception e){
  235. e.printStackTrace();
  236. message = "值班操作添加失败";
  237. throw new BusinessException(e.getMessage());
  238. }
  239. }
  240. } else {//数据不存在,进行添加操作
  241. try{
  242. this.save(onDutyOperate);
  243. if(onDutyOperateId!=null&&onDutyOperateId.length()>0){
  244. onDutyOperateId=onDutyOperateId+","+onDutyOperate.getId();
  245. }else{
  246. onDutyOperateId=onDutyOperate.getId();
  247. }
  248. //返回编辑的id,方便值班排班==
  249. Map<String, Object> idMap=new HashMap<String, Object>();
  250. idMap.put("onDutyOperateId",onDutyOperateId );
  251. j.setAttributes(idMap);
  252. //返回编辑的id,方便值班排班==
  253. systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
  254. message = "值班操作添加成功";
  255. }catch(Exception e){
  256. e.printStackTrace();
  257. message = "值班操作添加失败";
  258. throw new BusinessException(e.getMessage());
  259. }
  260. }
  261. j.setMsg(message);
  262. }
  263. return j;
  264. }
  265. @Override
  266. public AjaxJson checkOnDutyOperate(OnDutyOperateEntity onDutyOperate){
  267. AjaxJson j = new AjaxJson();
  268. String message="";
  269. //获取用户名称
  270. List<DictEntity> baseUserList=systemService.queryDict("t_s_base_user", "id", "realname");
  271. Map<String, String> baseUserMap=new HashMap<String, String>();
  272. for (int i = 0; i < baseUserList.size(); i++) {
  273. baseUserMap.put(baseUserList.get(i).getTypecode(), baseUserList.get(i).getTypename());
  274. }
  275. //1出勤时间
  276. List<String> attendanceCycleList=ProjectArrangeCommonMethod.extractIdListByComma(ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperate.getAttendanceCycle()));
  277. //1出勤时间
  278. Map<String, Object> failMap=new HashMap<String, Object>();
  279. // 轮流值班/加班保存校验
  280. //
  281. // 1.根据运转方式验证
  282. // 三班两运转和四班两运转一定不能轮流值班加班
  283. //
  284. // 2.根据值班操作表已有的数据判断所选时间段内是否已经排班冲突
  285. if(onDutyOperate.getPid()!=null&&onDutyOperate.getPid().length()!=0){
  286. onDutyOperate.setPid(onDutyOperate.getPid().split(",")[0]);
  287. }
  288. //用户idList
  289. List<String> onDutyOperateUserIdList = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getUserid());
  290. //根据月度查询项目排班操作表数据,然后对比userid获取运转方式
  291. StringBuffer hql = new StringBuffer(" FROM ArrangeDutyOperateEntity adoe where adoe.yearmonth=? and adoe.pid=? ");
  292. List<ArrangeDutyOperateEntity> arrangeDutyOperateEntityList = findHql(hql.toString(),onDutyOperate.getYearmonth(),onDutyOperate.getPid());
  293. for (int i = 0; i < onDutyOperateUserIdList.size(); i++) {
  294. for (int k = 0; k < arrangeDutyOperateEntityList.size(); k++) {
  295. List<String> arrangeDutyOperateList= ProjectArrangeCommonMethod.extractIdListByComma(arrangeDutyOperateEntityList.get(k).getUserid());
  296. if(arrangeDutyOperateList.contains(onDutyOperateUserIdList.get(i))){
  297. if(arrangeDutyOperateEntityList.get(k).getRunway().equals(Globals.o2o_wujiabanfei)
  298. ||arrangeDutyOperateEntityList.get(k).getRunway().equals(Globals.t2t_wujiabanfei)
  299. ||arrangeDutyOperateEntityList.get(k).getRunway().equals(Globals.t2o_jijiabanfei)){
  300. if(failMap.size()==0){
  301. failMap.put(arrangeDutyOperateEntityList.get(k).getRunway(), onDutyOperateUserIdList.get(i));
  302. }else{
  303. if(failMap.containsKey(arrangeDutyOperateEntityList.get(k).getRunway())){
  304. failMap.put(arrangeDutyOperateEntityList.get(k).getRunway(), failMap.get(arrangeDutyOperateEntityList.get(k).getRunway())+","+onDutyOperateUserIdList.get(i));
  305. }else{
  306. failMap.put(arrangeDutyOperateEntityList.get(k).getRunway(), onDutyOperateUserIdList.get(i));
  307. }
  308. }
  309. }
  310. break;
  311. }
  312. }
  313. }
  314. if(failMap.size()>0){
  315. for (Map.Entry<String, Object> m:failMap.entrySet()) {
  316. List<String> mapUserIdList= ProjectArrangeCommonMethod.extractIdListByComma(m.getValue().toString());
  317. if(message.length()==0){
  318. for (int k = 0; k < mapUserIdList.size(); k++) {
  319. if(message.length()==0){
  320. message=baseUserMap.get(mapUserIdList.get(k));
  321. }else{
  322. message+=","+baseUserMap.get(mapUserIdList.get(k));
  323. }
  324. }
  325. message+="运转方式为"+ProjectArrangeCommonMethod.getRunWayByCode(m.getKey())+",不能进行轮流值班/加班操作;";
  326. }else{
  327. for (int k = 0; k < mapUserIdList.size(); k++) {
  328. if(k==0){
  329. message+=baseUserMap.get(mapUserIdList.get(k));
  330. }else{
  331. message+=","+baseUserMap.get(mapUserIdList.get(k));
  332. }
  333. }
  334. message+="运转方式为"+ProjectArrangeCommonMethod.getRunWayByCode(m.getKey())+",不能进行轮流值班/加班操作;";
  335. }
  336. }
  337. j.setMsg(message);
  338. j.setSuccess(false);
  339. }else{
  340. //验证员工是否已经排班完成,所选时间段内
  341. //根据月度查出日期id==
  342. CalendarAscDto calendarAscDto=new CalendarAscDto();
  343. calendarAscDto.setYear(Integer.parseInt(onDutyOperate.getYearmonth().split("-")[0]));
  344. calendarAscDto.setMonth(Integer.parseInt(onDutyOperate.getYearmonth().split("-")[1]));
  345. List<CalendarAscDto> calendarAscDtoList=projarrangeDetailServiceI.getCalendar(calendarAscDto);
  346. List<CalendarAscDto> calendarAscDtoListOld=new ArrayList<CalendarAscDto>();
  347. if(onDutyOperate.getId()!=null&&onDutyOperate.getId().length()>0){
  348. //如果是编辑,先查时间段,不进行时间段内验证
  349. hql = new StringBuffer(" FROM OnDutyOperateEntity ooe where ooe.id=? ");
  350. List<OnDutyOperateEntity> onDutyOperateEntityListOld = findHql(hql.toString(),onDutyOperate.getId());
  351. if(onDutyOperateEntityListOld.size()>0){
  352. for (int r = 0; r < calendarAscDtoList.size(); r++) {
  353. if(calendarAscDtoList.get(r).getDay()>=Integer.parseInt(onDutyOperateEntityListOld.get(0).getArrangeStime().split("-")[2])&&
  354. calendarAscDtoList.get(r).getDay()<=Integer.parseInt(onDutyOperateEntityListOld.get(0).getArrangeEtime().split("-")[2])){
  355. for (int i = 0; i < attendanceCycleList.size(); i++) {
  356. if(String.valueOf(calendarAscDtoList.get(r).getWeek()).equals(attendanceCycleList.get(i))&&!calendarAscDtoList.get(r).getDtype().equals("2")){
  357. calendarAscDtoListOld.add(calendarAscDtoList.get(r));
  358. }
  359. }
  360. }
  361. }
  362. }
  363. }
  364. List<CalendarAscDto> calendarAscDtoListNew=new ArrayList<CalendarAscDto>();
  365. //根据所选时间段排过班的日期id
  366. for (int r = 0; r < calendarAscDtoList.size(); r++) {
  367. if(calendarAscDtoList.get(r).getDay()>=Integer.parseInt(onDutyOperate.getArrangeStime().split("-")[2])&&
  368. calendarAscDtoList.get(r).getDay()<=Integer.parseInt(onDutyOperate.getArrangeEtime().split("-")[2])){
  369. for (int i = 0; i < attendanceCycleList.size(); i++) {
  370. if(String.valueOf(calendarAscDtoList.get(r).getWeek()).equals(attendanceCycleList.get(i))&&!calendarAscDtoList.get(r).getDtype().equals("2")){
  371. calendarAscDtoListNew.add(calendarAscDtoList.get(r));
  372. }
  373. }
  374. }
  375. }
  376. calendarAscDtoListNew.removeAll(calendarAscDtoListOld);
  377. //根据月度查出日期id==
  378. for (int i = 0; i < onDutyOperateUserIdList.size(); i++) {
  379. //根据月度,项目id,用户id查询项目排班详细表和员工排班详情表
  380. ProjarrangeDetailEntity projarrangeDetailEntity=new ProjarrangeDetailEntity();
  381. projarrangeDetailEntity.setUserid(onDutyOperateUserIdList.get(i));
  382. projarrangeDetailEntity.setYearmonth(onDutyOperate.getYearmonth());
  383. //查询项目排班详细表
  384. hql = new StringBuffer(" FROM ProjarrangeDetailEntity pde where pde.yearmonth=? and pde.userid=? ");
  385. List<ProjarrangeDetailEntity> projarrangeDetailEntityList = findHql(hql.toString(),projarrangeDetailEntity.getYearmonth(),projarrangeDetailEntity.getUserid());
  386. UserArrangeDetailEntity userArrangeDetailEntity=new UserArrangeDetailEntity();
  387. userArrangeDetailEntity.setProjarrangeDetailid(projarrangeDetailEntityList.get(0).getId());
  388. //查询员工排班详情表
  389. hql = new StringBuffer(" FROM UserArrangeDetailEntity uade where uade.projarrangeDetailid=? ");
  390. List<UserArrangeDetailEntity> userArrangeDetailEntityList = findHql(hql.toString(),userArrangeDetailEntity.getProjarrangeDetailid());
  391. List<UserArrangeDetailEntity> userArrangeDetailEntityListNew =new ArrayList<UserArrangeDetailEntity>();
  392. for (int k = 0; k < calendarAscDtoListNew.size(); k++) {
  393. for (int l = 0; l < userArrangeDetailEntityList.size(); l++) {
  394. if(calendarAscDtoListNew.get(k).getId().equals(userArrangeDetailEntityList.get(l).getCalendarid())){
  395. userArrangeDetailEntityListNew.add(userArrangeDetailEntityList.get(l));
  396. }
  397. }
  398. }
  399. for (int k = 0; k < userArrangeDetailEntityListNew.size(); k++) {
  400. if(!userArrangeDetailEntityListNew.get(k).getShiftid().equals(arrangeDutyService.getDUTYTYPE_xiuxiId())){
  401. failMap.put(onDutyOperateUserIdList.get(i), "");
  402. }
  403. }
  404. }
  405. if(failMap.size()>0){
  406. for (Map.Entry<String, Object> m:failMap.entrySet()) {
  407. if (message.length()==0) {
  408. message=baseUserMap.get(m.getKey());
  409. }else {
  410. message+=","+baseUserMap.get(m.getKey());
  411. }
  412. }
  413. message+="所选时间段内已经有排班";
  414. j.setMsg(message);
  415. j.setSuccess(false);
  416. }else{
  417. //验证排班操作表中已经冲突,还未进行排班操作;
  418. hql = new StringBuffer(" FROM OnDutyOperateEntity ooe where ooe.yearmonth=? and ooe.pid=? ");
  419. //值班操作表
  420. List<OnDutyOperateEntity> onDutyOperateEntityList = findHql(hql.toString(),onDutyOperate.getYearmonth(),onDutyOperate.getPid());
  421. if(onDutyOperate.getId()!=null&&onDutyOperate.getId().length()>0){
  422. for (int i = 0; i < onDutyOperateEntityList.size(); i++) {
  423. if(onDutyOperateEntityList.get(i).getId().equals(onDutyOperate.getId())){
  424. onDutyOperateEntityList.remove(i);
  425. break;
  426. }
  427. }
  428. }
  429. for (int i = 0; i < onDutyOperateUserIdList.size(); i++) {
  430. for (int k = 0; k < onDutyOperateEntityList.size(); k++) {
  431. List<String> onDutyOperateUserIdListOld = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateEntityList.get(k).getUserid());
  432. if(onDutyOperateUserIdListOld.contains(onDutyOperateUserIdList.get(i))){
  433. //员工已经在值班加班操作表有数据
  434. //先获取重合的时间段
  435. String arrangeStartDay=onDutyOperate.getArrangeStime().split("-")[2];
  436. String arrangeEndDay=onDutyOperate.getArrangeEtime().split("-")[2];
  437. String arrangeStartDayOld=onDutyOperateEntityList.get(k).getArrangeStime().split("-")[2];
  438. String arrangeEndDayOld=onDutyOperateEntityList.get(k).getArrangeEtime().split("-")[2];
  439. List<String> arrangeTimeList=new ArrayList<String>();
  440. List<String> arrangeTimeOldList=new ArrayList<String>();
  441. arrangeTimeList.add(String.valueOf(Integer.parseInt(arrangeStartDay)));
  442. arrangeTimeList.add(String.valueOf(Integer.parseInt(arrangeEndDay)));
  443. int temNum=0;
  444. while(Integer.parseInt(arrangeStartDay)!=Integer.parseInt(arrangeEndDay)){
  445. arrangeStartDay=String.valueOf(Integer.parseInt(arrangeStartDay)+1);
  446. if(!arrangeTimeList.contains(arrangeStartDay)){
  447. arrangeTimeList.add(arrangeStartDay);
  448. }
  449. temNum++;
  450. if(temNum>35){
  451. break;
  452. }
  453. }
  454. arrangeTimeOldList.add(String.valueOf(Integer.parseInt(arrangeStartDayOld)));
  455. arrangeTimeOldList.add(String.valueOf(Integer.parseInt(arrangeEndDayOld)));
  456. temNum=0;
  457. while(Integer.parseInt(arrangeStartDayOld)!=Integer.parseInt(arrangeEndDayOld)){
  458. arrangeStartDayOld=String.valueOf(Integer.parseInt(arrangeStartDayOld)+1);
  459. if(!arrangeTimeOldList.contains(arrangeStartDayOld)){
  460. arrangeTimeOldList.add(arrangeStartDayOld);
  461. }
  462. temNum++;
  463. if(temNum>35){
  464. break;
  465. }
  466. }
  467. // List<String> superpositionList=new ArrayList<String>();
  468. arrangeTimeList.retainAll(arrangeTimeOldList);//获取重复的日期
  469. if(arrangeTimeList.size()>0){
  470. //当有重复日期,在判断出勤时间是否包含,<=即可
  471. List<String> attendanceCycleListOld=ProjectArrangeCommonMethod.extractIdListByComma(ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperateEntityList.get(k).getAttendanceCycle()));
  472. attendanceCycleListOld.retainAll(attendanceCycleList);
  473. if(attendanceCycleListOld.size()!=0){
  474. failMap.put(onDutyOperateUserIdList.get(i), "");
  475. }
  476. }
  477. }
  478. }
  479. }
  480. if(failMap.size()>0){
  481. for (Map.Entry<String, Object> m:failMap.entrySet()) {
  482. if (message.length()==0) {
  483. message=baseUserMap.get(m.getKey());
  484. }else {
  485. message+=","+baseUserMap.get(m.getKey());
  486. }
  487. }
  488. message+="所选时间段内已经有排班";
  489. j.setMsg(message);
  490. j.setSuccess(false);
  491. }
  492. }
  493. }
  494. j.setMsg(message);
  495. return j;
  496. }
  497. /*@Override
  498. public AjaxJson checkArrangeSETime(OnDutyOperateEntity onDutyOperate){
  499. String message = null;
  500. AjaxJson j = new AjaxJson();
  501. message="";
  502. j.setMsg(message);
  503. //存时间段已存在的用户id
  504. List<String> userIdListNew=new ArrayList<String>();
  505. List<String> userIdList = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getUserid());
  506. for (int i = 0; i < userIdList.size(); i++) {
  507. //因为用户id为多用户逗号分隔,先查出整个月的数据
  508. StringBuffer hql = new StringBuffer(" from OnDutyOperateEntity t where t.yearmonth= ? ");
  509. List<OnDutyOperateEntity> onDutyOperateEntityList = findHql(hql.toString(),onDutyOperate.getYearmonth());
  510. for (int k = 0; k < onDutyOperateEntityList.size(); k++) {
  511. if(onDutyOperate.getId()!=null&&onDutyOperate.getId().length()>0){
  512. if(!onDutyOperateEntityList.get(k).getId().equals(onDutyOperate.getId())){
  513. List<String> userIdListOld = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateEntityList.get(k).getUserid());
  514. if(userIdListOld.contains(userIdList.get(i))){
  515. String arrangeStartDay=onDutyOperate.getArrangeStime().split("-")[2];
  516. String arrangeEndDay=onDutyOperate.getArrangeEtime().split("-")[2];
  517. String arrangeStartDayOld=onDutyOperateEntityList.get(k).getArrangeStime().split("-")[2];
  518. String arrangeEndDayOld=onDutyOperateEntityList.get(k).getArrangeEtime().split("-")[2];
  519. List<String> arrangeTimeList=new ArrayList<String>();
  520. List<String> arrangeTimeOldList=new ArrayList<String>();
  521. arrangeTimeList.add(String.valueOf(Integer.parseInt(arrangeStartDay)));
  522. arrangeTimeList.add(String.valueOf(Integer.parseInt(arrangeEndDay)));
  523. int temNum=0;
  524. while(Integer.parseInt(arrangeStartDay)!=Integer.parseInt(arrangeEndDay)){
  525. arrangeStartDay=String.valueOf(Integer.parseInt(arrangeStartDay)+1);
  526. if(!arrangeTimeList.contains(arrangeStartDay)){
  527. arrangeTimeList.add(arrangeStartDay);
  528. }
  529. temNum++;
  530. if(temNum>35){
  531. break;
  532. }
  533. }
  534. arrangeTimeOldList.add(String.valueOf(Integer.parseInt(arrangeStartDayOld)));
  535. arrangeTimeOldList.add(String.valueOf(Integer.parseInt(arrangeEndDayOld)));
  536. temNum=0;
  537. while(Integer.parseInt(arrangeStartDayOld)!=Integer.parseInt(arrangeEndDayOld)){
  538. arrangeStartDayOld=String.valueOf(Integer.parseInt(arrangeStartDayOld)+1);
  539. if(!arrangeTimeOldList.contains(arrangeStartDayOld)){
  540. arrangeTimeOldList.add(arrangeStartDayOld);
  541. }
  542. temNum++;
  543. if(temNum>35){
  544. break;
  545. }
  546. }
  547. if(arrangeTimeList.contains(arrangeTimeOldList)||arrangeTimeOldList.contains(arrangeTimeList)){
  548. userIdListNew.add(userIdList.get(i));
  549. }
  550. int tempNum=arrangeTimeList.size();
  551. arrangeTimeList.removeAll(arrangeTimeOldList);
  552. if(arrangeTimeList.size()!=tempNum){
  553. if(!userIdListNew.contains(userIdList.get(i))){
  554. userIdListNew.add(userIdList.get(i));
  555. }
  556. }
  557. }
  558. }
  559. }else{
  560. List<String> userIdListOld = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateEntityList.get(k).getUserid());
  561. if(userIdListOld.contains(userIdList.get(i))){
  562. String arrangeStartDay=onDutyOperate.getArrangeStime().split("-")[2];
  563. String arrangeEndDay=onDutyOperate.getArrangeEtime().split("-")[2];
  564. String arrangeStartDayOld=onDutyOperateEntityList.get(k).getArrangeStime().split("-")[2];
  565. String arrangeEndDayOld=onDutyOperateEntityList.get(k).getArrangeEtime().split("-")[2];
  566. List<String> arrangeTimeList=new ArrayList<String>();
  567. List<String> arrangeTimeOldList=new ArrayList<String>();
  568. arrangeTimeList.add(arrangeStartDay);
  569. arrangeTimeList.add(arrangeEndDay);
  570. while(Integer.parseInt(arrangeStartDay)!=Integer.parseInt(arrangeEndDay)){
  571. arrangeStartDay=String.valueOf(Integer.parseInt(arrangeStartDay)+1);
  572. if(!arrangeTimeList.contains(arrangeStartDay)){
  573. arrangeTimeList.add(arrangeStartDay);
  574. }
  575. }
  576. arrangeTimeOldList.add(arrangeStartDayOld);
  577. arrangeTimeOldList.add(arrangeEndDayOld);
  578. while(Integer.parseInt(arrangeStartDayOld)!=Integer.parseInt(arrangeEndDayOld)){
  579. arrangeStartDayOld=String.valueOf(Integer.parseInt(arrangeStartDayOld)+1);
  580. if(!arrangeTimeOldList.contains(arrangeStartDayOld)){
  581. arrangeTimeOldList.add(arrangeStartDayOld);
  582. }
  583. }
  584. int tempNum=arrangeTimeList.size();
  585. arrangeTimeList.removeAll(arrangeTimeOldList);
  586. if(arrangeTimeList.size()!=tempNum){
  587. if(!userIdListNew.contains(userIdList.get(i))){
  588. userIdListNew.add(userIdList.get(i));
  589. }
  590. }
  591. }
  592. }
  593. }
  594. }
  595. if(userIdListNew.size()>0){
  596. //获取用户名称
  597. List<DictEntity> baseUserList=systemService.queryDict("t_s_base_user", "id", "realname");
  598. for (int i = 0; i < userIdListNew.size(); i++) {
  599. for (int k = 0; k < baseUserList.size(); k++) {
  600. if(baseUserList.get(k).getTypecode().equals(userIdListNew.get(i))){
  601. if(message.length()>0){
  602. message+=","+baseUserList.get(k).getTypename();
  603. }else{
  604. message=baseUserList.get(k).getTypename();
  605. }
  606. }
  607. }
  608. }
  609. }
  610. j.setMsg(message);
  611. return j;
  612. }*/
  613. @Override
  614. public AjaxJson deleteOnDutyOperate(OnDutyOperateEntity onDutyOperate,String pid){
  615. String message = null;
  616. AjaxJson j = new AjaxJson();
  617. onDutyOperate = systemService.getEntity(OnDutyOperateEntity.class, onDutyOperate.getId());
  618. message = "值班操作删除成功";
  619. try{
  620. //删除员工排班详情表的值班数据
  621. //值班类型项目排班详细表的值班天数要依次相减
  622. //加班类型项目排班详细表的超时加班要依次相减
  623. j=this.deleteUserArrangeDetail(onDutyOperate);
  624. this.delete(onDutyOperate);
  625. systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  626. }catch(Exception e){
  627. e.printStackTrace();
  628. message = "值班操作删除失败";
  629. throw new BusinessException(e.getMessage());
  630. }
  631. j.setMsg(message);
  632. return j;
  633. }
  634. @Override
  635. public AjaxJson deleteUserArrangeDetail(OnDutyOperateEntity onDutyOperate){
  636. AjaxJson j = new AjaxJson();
  637. // String userId=onDutyOperate.getUserid();
  638. String yearmonth=onDutyOperate.getYearmonth();
  639. //1出勤时间
  640. List<String> attendanceCycleList=ProjectArrangeCommonMethod.extractIdListByComma(ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperate.getAttendanceCycle()));
  641. //1出勤时间
  642. //2根据月度查出日期id
  643. CalendarAscDto calendarAscDto=new CalendarAscDto();
  644. calendarAscDto.setYear(Integer.parseInt(yearmonth.split("-")[0]));
  645. calendarAscDto.setMonth(Integer.parseInt(yearmonth.split("-")[1]));
  646. List<CalendarAscDto> calendarAscDtoListOld=projarrangeDetailServiceI.getCalendar(calendarAscDto);
  647. List<CalendarAscDto> calendarAscDtoList=new ArrayList<CalendarAscDto>();
  648. //根据所选时间段并去除周一至周五以及国家法定节假日
  649. //并根据出勤时间获取需要排班的日期id
  650. for (int r = 0; r < calendarAscDtoListOld.size(); r++) {
  651. if(calendarAscDtoListOld.get(r).getDay()>=Integer.parseInt(onDutyOperate.getArrangeStime().split("-")[2])&&
  652. calendarAscDtoListOld.get(r).getDay()<=Integer.parseInt(onDutyOperate.getArrangeEtime().split("-")[2])){
  653. if(!calendarAscDtoListOld.get(r).getDtype().equals(Globals.dtype_2)){
  654. if(attendanceCycleList.contains(calendarAscDtoListOld.get(r).getWeek())){
  655. calendarAscDtoList.add(calendarAscDtoListOld.get(r));
  656. }
  657. }
  658. }
  659. }
  660. //2根据月度查出日期id==
  661. //3根据用户id获取项目排班详细表数据
  662. //用户id
  663. List<String> userIdList = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getUserid());
  664. //查询项目排班详细表数据
  665. StringBuffer hql = new StringBuffer(" FROM ProjarrangeDetailEntity odoe where odoe.yearmonth=? and odoe.pid=? ");
  666. List<ProjarrangeDetailEntity> projarrangeDetailEntityListOld = findHql(hql.toString(),yearmonth,onDutyOperate.getPid());
  667. List<ProjarrangeDetailEntity> projarrangeDetailEntityList=new ArrayList<ProjarrangeDetailEntity>();
  668. //匹配已经排班的用户
  669. for (int e = 0; e < projarrangeDetailEntityListOld.size(); e++) {
  670. for (int k = 0; k < userIdList.size(); k++) {
  671. if(userIdList.get(k).equals(projarrangeDetailEntityListOld.get(e).getUserid())){
  672. projarrangeDetailEntityList.add(projarrangeDetailEntityListOld.get(e));
  673. break;
  674. }
  675. }
  676. }
  677. //3根据用户id获取项目排班详细表数据
  678. //4把班次id放入班次list中获取班次信息
  679. ArrangeDutyDto arrangeDutyDto=new ArrangeDutyDto();
  680. arrangeDutyDto.getArrangeDutyIdList().addAll(ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getShiftid()));
  681. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  682. List<ArrangeDutyDto> arrangeDutyDtoList = arrangeDutyService.getArrangeDutyByIdList(arrangeDutyDto, authSql);
  683. arrangeDutyDto=arrangeDutyDtoList.get(0);
  684. //4把班次id放入班次list中获取班次信息
  685. for (int i = 0; i < projarrangeDetailEntityList.size(); i++) {
  686. for (int k = 0; k < calendarAscDtoList.size(); k++) {
  687. if(arrangeDutyDto.getDutyType().equals(Globals.DUTYTYPE_zhiban)){
  688. if(projarrangeDetailEntityList.get(i).getOndutyDays().compareTo(new BigDecimal("0"))==1){
  689. projarrangeDetailEntityList.get(i).setOndutyDays(projarrangeDetailEntityList.get(i).getOndutyDays().subtract(new BigDecimal("1")));
  690. }
  691. }else if(arrangeDutyDto.getDutyType().equals(Globals.DUTYTYPE_jiaban)){
  692. if(arrangeDutyDto.getTimeOutOvertimeHours()!=null){
  693. if(projarrangeDetailEntityList.get(i).getTimeOutOvertimeHours().compareTo(arrangeDutyDto.getTimeOutOvertimeHours())==1){
  694. projarrangeDetailEntityList.get(i).setTimeOutOvertimeHours(projarrangeDetailEntityList.get(i).getTimeOutOvertimeHours().subtract(arrangeDutyDto.getTimeOutOvertimeHours()));
  695. }
  696. }
  697. }
  698. }
  699. //项目排班详细表保存
  700. this.saveOrUpdate(projarrangeDetailEntityList.get(i));
  701. //根据项目排班详细表的主键id查询员工排班详情表t_bus_user_arrange_detail
  702. hql = new StringBuffer(" from UserArrangeDetailEntity t where t.projarrangeDetailid =? ");
  703. List<UserArrangeDetailEntity> userArrangeDetailEntityList = findHql(hql.toString(),projarrangeDetailEntityList.get(i).getId());
  704. for (int k = 0; k < userArrangeDetailEntityList.size(); k++) {
  705. for (int m = 0; m < calendarAscDtoList.size(); m++) {
  706. if(userArrangeDetailEntityList.get(k).getCalendarid().equals(calendarAscDtoList.get(m).getId())){
  707. hql = new StringBuffer(" from ArrangeDutyEntity t where t.id =? ");
  708. List<ArrangeDutyEntity> arrangeDutyEntityList = findHql(hql.toString(),userArrangeDetailEntityList.get(k).getShiftid());
  709. if(arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_zhiban)||arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_jiaban)){
  710. //值班操作删除时把值班班次改为休息
  711. this.doUpdateUserArrangeDetail(userArrangeDetailEntityList.get(k));
  712. }
  713. }
  714. }
  715. }
  716. }
  717. return j;
  718. }
  719. /*@Override
  720. public AjaxJson deleteUserArrangeDetail(OnDutyOperateEntity onDutyOperate,String pid){
  721. AjaxJson j = new AjaxJson();
  722. String userId=onDutyOperate.getUserid();
  723. String yearmonth=onDutyOperate.getYearmonth();
  724. //出勤时间
  725. String[] attendanceCycle=ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperate.getAttendanceCycle()).split(",");
  726. //1出勤时间
  727. //String[] attendanceCycle=ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperateEntityList.get(i).getAttendanceCycle()).split(",");
  728. List<String> attendanceCycleList=ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getAttendanceCycle());
  729. //1出勤时间
  730. //根据月度查出日期id==
  731. CalendarAscDto calendarAscDto=new CalendarAscDto();
  732. calendarAscDto.setYear(Integer.parseInt(yearmonth.split("-")[0]));
  733. calendarAscDto.setMonth(Integer.parseInt(yearmonth.split("-")[1]));
  734. List<CalendarAscDto> calendarAscDtoList=projarrangeDetailServiceI.getCalendar(calendarAscDto);
  735. List<CalendarAscDto> calendarAscDtoListNew=new ArrayList<CalendarAscDto>();
  736. //根据所选时间段排过班的日期id
  737. for (int r = 0; r < calendarAscDtoList.size(); r++) {
  738. if(calendarAscDtoList.get(r).getDay()>=Integer.parseInt(onDutyOperate.getArrangeStime().split("-")[2])&&
  739. calendarAscDtoList.get(r).getDay()<=Integer.parseInt(onDutyOperate.getArrangeEtime().split("-")[2])){
  740. for (int i = 0; i < attendanceCycle.length; i++) {
  741. if(String.valueOf(calendarAscDtoList.get(r).getWeek()).equals(attendanceCycle[i])&&!calendarAscDtoList.get(r).getDtype().equals("2")){
  742. calendarAscDtoListNew.add(calendarAscDtoList.get(r));
  743. }
  744. }
  745. }
  746. }
  747. //根据月度查出日期id==
  748. //把班次id放入班次list中查询班次信息===================
  749. ArrangeDutyDto arrangeDutyDto=new ArrangeDutyDto();
  750. arrangeDutyDto.getArrangeDutyIdList().addAll(ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getShiftid()));
  751. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  752. List<ArrangeDutyDto> arrangeDutyDtoList = arrangeDutyService.getArrangeDutyByIdList(arrangeDutyDto, authSql);
  753. //轮流值班加班只有一个班次
  754. String shiftType=arrangeDutyDtoList.get(0).getDutyType();
  755. //把班次id放入班次list中查询班次信息====================
  756. BigDecimal ondutyDays=new BigDecimal(calendarAscDtoListNew.size());//值班
  757. BigDecimal timeOutOvertimeHours = BigDecimal.ZERO;//超时加班
  758. for (int i = 0; i < calendarAscDtoListNew.size(); i++) {
  759. if(arrangeDutyDtoList.get(0).getTimeOutOvertimeHours()!=null){
  760. timeOutOvertimeHours=timeOutOvertimeHours.add(arrangeDutyDtoList.get(0).getTimeOutOvertimeHours());
  761. }
  762. }
  763. if(userId!=null&&userId.length()>0){
  764. String[] userIdArr=userId.split(",");
  765. for (int k = 0; k < userIdArr.length; k++) {
  766. //根据用户员工id查询项目排班详细表数据t_bus_projarrange_detail
  767. StringBuffer hql = new StringBuffer(" from ProjarrangeDetailEntity t where t.userid = ? and t.yearmonth= ? ");
  768. List<ProjarrangeDetailEntity> projarrangeDetailEntityList = findHql(hql.toString(),userIdArr[k],yearmonth);
  769. for (int i = 0; i < projarrangeDetailEntityList.size(); i++) {
  770. if(shiftType.equals(Globals.DUTYTYPE_jiaban)){
  771. if(timeOutOvertimeHours!=null&&projarrangeDetailEntityList.get(i).getTimeOutOvertimeHours().compareTo(new BigDecimal("0"))==1){
  772. //加班类型项目排班详细表的超时加班要依次相减
  773. projarrangeDetailEntityList.get(i).setTimeOutOvertimeHours(projarrangeDetailEntityList.get(i).getTimeOutOvertimeHours().subtract(timeOutOvertimeHours));
  774. }
  775. }else if(shiftType.equals(Globals.DUTYTYPE_zhiban)){
  776. if(timeOutOvertimeHours!=null&&projarrangeDetailEntityList.get(i).getOndutyDays().compareTo(new BigDecimal("0"))==1){
  777. //值班类型项目排班详细表的值班天数要依次相减
  778. projarrangeDetailEntityList.get(i).setOndutyDays(projarrangeDetailEntityList.get(i).getOndutyDays().subtract(ondutyDays));
  779. }
  780. }
  781. this.saveOrUpdate(projarrangeDetailEntityList.get(i));
  782. //根据项目排班详细表的主键id查询员工排班详情表t_bus_user_arrange_detail
  783. hql = new StringBuffer(" from UserArrangeDetailEntity t where t.projarrangeDetailid = ? ");
  784. List<UserArrangeDetailEntity> userArrangeDetailEntityList = findHql(hql.toString(),projarrangeDetailEntityList.get(i).getId());
  785. for (int l = 0; l < userArrangeDetailEntityList.size(); l++) {
  786. hql = new StringBuffer(" from ArrangeDutyEntity t where t.id = ? ");
  787. List<ArrangeDutyEntity> arrangeDutyEntityList = findHql(hql.toString(),userArrangeDetailEntityList.get(l).getShiftid());
  788. if(arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_zhiban)||arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_jiaban)){
  789. //值班操作删除时把值班班次改为休息
  790. this.doUpdateUserArrangeDetail(userArrangeDetailEntityList.get(l));
  791. }
  792. }
  793. }
  794. }
  795. }
  796. return j;
  797. }*/
  798. /*@Override
  799. public AjaxJson deleteUserArrangeDetail(OnDutyOperateEntity onDutyOperate,String pid){
  800. AjaxJson j = new AjaxJson();
  801. String userId=onDutyOperate.getUserid();
  802. String yearmonth=onDutyOperate.getYearmonth();
  803. if(userId!=null&&userId.length()>0){
  804. String[] userIdArr=userId.split(",");
  805. for (int k = 0; k < userIdArr.length; k++) {
  806. //根据用户员工id查询项目排班详细表数据t_bus_projarrange_detail
  807. StringBuffer hql = new StringBuffer(" from ProjarrangeDetailEntity t where t.userid = ? and t.yearmonth= ? ");
  808. List<ProjarrangeDetailEntity> projarrangeDetailEntityList = findHql(hql.toString(),userIdArr[k],yearmonth);
  809. for (int i = 0; i < projarrangeDetailEntityList.size(); i++) {
  810. //值班类型项目排班详细表的值班天数设为0
  811. //加班类型项目排班详细表的超时加班要依次相减
  812. projarrangeDetailEntityList.get(i).setOndutyDays(new BigDecimal("0"));
  813. this.saveOrUpdate(projarrangeDetailEntityList.get(i));
  814. //根据项目排班详细表的主键id查询员工排班详情表t_bus_user_arrange_detail
  815. hql = new StringBuffer(" from UserArrangeDetailEntity t where t.projarrangeDetailid = ? ");
  816. List<UserArrangeDetailEntity> userArrangeDetailEntityList = findHql(hql.toString(),projarrangeDetailEntityList.get(i).getId());
  817. for (int l = 0; l < userArrangeDetailEntityList.size(); l++) {
  818. hql = new StringBuffer(" from ArrangeDutyEntity t where t.id = ? ");
  819. List<ArrangeDutyEntity> arrangeDutyEntityList = findHql(hql.toString(),userArrangeDetailEntityList.get(l).getShiftid());
  820. if(arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_zhiban)||arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_jiaban)){
  821. //值班操作删除时把值班班次改为休息
  822. this.doUpdateUserArrangeDetail(userArrangeDetailEntityList.get(l));
  823. }
  824. }
  825. }
  826. }
  827. }
  828. return j;
  829. }*/
  830. /**
  831. * 值班操作删除时把值班班次改为休息
  832. * 更新员工排班详情表
  833. *
  834. * @param ids
  835. * @return
  836. */
  837. @Override
  838. public AjaxJson doUpdateUserArrangeDetail(UserArrangeDetailEntity userArrangeDetail) {
  839. String message = null;
  840. AjaxJson j = new AjaxJson();
  841. message = "员工排班详情更新成功";
  842. UserArrangeDetailEntity t = get(UserArrangeDetailEntity.class, userArrangeDetail.getId());
  843. try {
  844. //拼接班次为休息的id
  845. userArrangeDetail.setShiftid(arrangeDutyService.getDUTYTYPE_xiuxiId());
  846. MyBeanUtils.copyBeanNotNull2Bean(userArrangeDetail, t);
  847. this.saveOrUpdate(t);
  848. systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
  849. } catch (Exception e) {
  850. e.printStackTrace();
  851. message = "员工排班详情更新失败";
  852. throw new BusinessException(e.getMessage());
  853. }
  854. j.setMsg(message);
  855. return j;
  856. }
  857. }