ProjarrangeDetailServiceImpl.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  1. package cn.com.lzt.projarrangedetail.service.impl;
  2. import cn.com.lzt.arrangeduty.service.ArrangeDutyServiceI;
  3. import cn.com.lzt.arrangedutyoperate.dto.ArrangeDutyOperateDto;
  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.service.CalendarServiceI;
  8. import cn.com.lzt.projarrangedetail.dao.ProjArrangeDetailAndUserMiniDao;
  9. import cn.com.lzt.projarrangedetail.dao.UserAndShiftMiniDao;
  10. import cn.com.lzt.projarrangedetail.dao.UserArrangeCalendarMiniDao;
  11. import cn.com.lzt.projarrangedetail.dto.ProjArrangeDetailAndUserDto;
  12. import cn.com.lzt.projarrangedetail.dto.UserAndShiftDto;
  13. import cn.com.lzt.projarrangedetail.dto.UserArrangeCalendarDto;
  14. import cn.com.lzt.projarrangedetail.entity.ProjarrangeDetailEntity;
  15. import cn.com.lzt.projarrangedetail.projectarrangecommonmethod.ProjectArrangeCommonMethod;
  16. import cn.com.lzt.projarrangedetail.service.ProjarrangeDetailServiceI;
  17. import cn.com.lzt.projarrangegeneral.entity.ProjArrangeGeneralEntity;
  18. import cn.com.lzt.projarrangegeneral.service.ProjArrangeGeneralServiceI;
  19. import cn.com.lzt.userarrangedetail.dto.UserArrangeDetailDto;
  20. import cn.com.lzt.userarrangedetail.service.UserArrangeDetailServiceI;
  21. import org.jeecgframework.core.common.model.json.AjaxJson;
  22. import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
  23. import org.jeecgframework.core.constant.Globals;
  24. import org.jeecgframework.core.util.ApplicationContextUtil;
  25. import org.jeecgframework.core.util.JeecgDataAutorUtils;
  26. import org.jeecgframework.core.util.MyClassLoader;
  27. import org.jeecgframework.core.util.StringUtil;
  28. import org.jeecgframework.minidao.annotation.Arguments;
  29. import org.jeecgframework.minidao.annotation.ResultType;
  30. import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter;
  31. import org.jeecgframework.web.system.service.SystemService;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.transaction.annotation.Transactional;
  35. import javax.validation.Validator;
  36. import java.io.Serializable;
  37. import java.util.*;
  38. @Service("projarrangeDetailService")
  39. @Transactional
  40. public class ProjarrangeDetailServiceImpl extends CommonServiceImpl implements ProjarrangeDetailServiceI {
  41. @Autowired
  42. ProjArrangeDetailAndUserMiniDao projArrangeDetailAndUserMiniDao;
  43. @Autowired
  44. UserArrangeCalendarMiniDao userArrangeCalendarMiniDao;
  45. //日历表
  46. @Autowired
  47. private CalendarServiceI calendarService;
  48. //员工排班详情表
  49. @Autowired
  50. private UserArrangeDetailServiceI userArrangeDetailService;
  51. //班次表
  52. @Autowired
  53. private ArrangeDutyServiceI arrangeDutyService;
  54. //项目排班总览表
  55. @Autowired
  56. private ProjArrangeGeneralServiceI projArrangeGeneralService;
  57. //排班操作表
  58. @Autowired
  59. private ArrangeDutyOperateServiceI arrangeDutyOperateService;
  60. @Autowired
  61. private SystemService systemService;
  62. @Autowired
  63. private Validator validator;
  64. //项目排班自己总结公共方法;
  65. //ProjectArrangeCommonMethod commonMethod;
  66. // 验证轮流值班是否可行
  67. @Autowired
  68. UserAndShiftMiniDao userAndShiftMiniDao;
  69. public void delete(ProjarrangeDetailEntity entity) throws Exception{
  70. super.delete(entity);
  71. //执行删除操作增强业务
  72. this.doDelBus(entity);
  73. }
  74. public Serializable save(ProjarrangeDetailEntity entity) throws Exception{
  75. Serializable t = super.save(entity);
  76. //执行新增操作增强业务
  77. this.doAddBus(entity);
  78. return t;
  79. }
  80. public void saveOrUpdate(ProjarrangeDetailEntity entity) throws Exception{
  81. super.saveOrUpdate(entity);
  82. //执行更新操作增强业务
  83. this.doUpdateBus(entity);
  84. }
  85. /**
  86. * 新增操作增强业务
  87. * @param t
  88. * @return
  89. */
  90. private void doAddBus(ProjarrangeDetailEntity t) throws Exception{
  91. //-----------------sql增强 start----------------------------
  92. //-----------------sql增强 end------------------------------
  93. //-----------------java增强 start---------------------------
  94. //-----------------java增强 end-----------------------------
  95. }
  96. /**
  97. * 更新操作增强业务
  98. * @param t
  99. * @return
  100. */
  101. private void doUpdateBus(ProjarrangeDetailEntity t) throws Exception{
  102. //-----------------sql增强 start----------------------------
  103. //-----------------sql增强 end------------------------------
  104. //-----------------java增强 start---------------------------
  105. //-----------------java增强 end-----------------------------
  106. }
  107. /**
  108. * 删除操作增强业务
  109. * @param id
  110. * @return
  111. */
  112. private void doDelBus(ProjarrangeDetailEntity t) throws Exception{
  113. //-----------------sql增强 start----------------------------
  114. //-----------------sql增强 end------------------------------
  115. //-----------------java增强 start---------------------------
  116. //-----------------java增强 end-----------------------------
  117. }
  118. private Map<String,Object> populationMap(ProjarrangeDetailEntity t){
  119. Map<String,Object> map = new HashMap<String,Object>();
  120. map.put("id", t.getId());
  121. map.put("yearmonth", t.getYearmonth());
  122. map.put("projarrange_generalid", t.getProjarrangeGeneralid());
  123. map.put("pid", t.getPid());
  124. map.put("pjt_postid", t.getPjtPostId());
  125. map.put("userid", t.getUserid());
  126. map.put("working_days", t.getWorkingDays());
  127. map.put("timeout_overtime_hours", t.getTimeOutOvertimeHours());
  128. map.put("country_overtime_hours", t.getCountryOvertimeHours());
  129. map.put("onduty_days", t.getOndutyDays());
  130. map.put("remark", t.getRemark());
  131. map.put("create_name", t.getCreateName());
  132. map.put("create_by", t.getCreateBy());
  133. map.put("create_date", t.getCreateDate());
  134. map.put("update_name", t.getUpdateName());
  135. map.put("update_by", t.getUpdateBy());
  136. map.put("update_date", t.getUpdateDate());
  137. map.put("sys_org_code", t.getSysOrgCode());
  138. map.put("sys_company_code", t.getSysCompanyCode());
  139. return map;
  140. }
  141. /**
  142. * 替换sql中的变量
  143. * @param sql
  144. * @param t
  145. * @return
  146. */
  147. public String replaceVal(String sql,ProjarrangeDetailEntity t){
  148. sql = sql.replace("#{id}",String.valueOf(t.getId()));
  149. sql = sql.replace("#{yearmonth}",String.valueOf(t.getYearmonth()));
  150. sql = sql.replace("#{pid}",String.valueOf(t.getPid()));
  151. sql = sql.replace("#{projarrange_generalid}",String.valueOf(t.getProjarrangeGeneralid()));
  152. sql = sql.replace("#{pjt_postid}",String.valueOf(t.getPjtPostId()));
  153. sql = sql.replace("#{userid}",String.valueOf(t.getUserid()));
  154. sql = sql.replace("#{working_days}",String.valueOf(t.getWorkingDays()));
  155. sql = sql.replace("#{timeout_overtime_hours}",String.valueOf(t.getTimeOutOvertimeHours()));
  156. sql = sql.replace("#{country_overtime_hours}",String.valueOf(t.getCountryOvertimeHours()));
  157. sql = sql.replace("#{onduty_days}",String.valueOf(t.getOndutyDays()));
  158. sql = sql.replace("#{remark}",String.valueOf(t.getRemark()));
  159. sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName()));
  160. sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy()));
  161. sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate()));
  162. sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName()));
  163. sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy()));
  164. sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate()));
  165. sql = sql.replace("#{sys_org_code}",String.valueOf(t.getSysOrgCode()));
  166. sql = sql.replace("#{sys_company_code}",String.valueOf(t.getSysCompanyCode()));
  167. sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
  168. return sql;
  169. }
  170. /**
  171. * 执行JAVA增强
  172. */
  173. private void executeJavaExtend(String cgJavaType,String cgJavaValue,Map<String,Object> data) throws Exception {
  174. if(StringUtil.isNotEmpty(cgJavaValue)){
  175. Object obj = null;
  176. try {
  177. if("class".equals(cgJavaType)){
  178. //因新增时已经校验了实例化是否可以成功,所以这块就不需要再做一次判断
  179. obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance();
  180. }else if("spring".equals(cgJavaType)){
  181. obj = ApplicationContextUtil.getContext().getBean(cgJavaValue);
  182. }
  183. if(obj instanceof CgformEnhanceJavaInter){
  184. CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj;
  185. javaInter.execute("t_bus_projarrange_detail",data);
  186. }
  187. } catch (Exception e) {
  188. e.printStackTrace();
  189. throw new Exception("执行JAVA增强出现异常!");
  190. }
  191. }
  192. }
  193. @Override
  194. public List<ProjArrangeDetailAndUserDto> getProjArrangeDetailAndUserByPIdYearMonth(
  195. ProjArrangeDetailAndUserDto projArrangeDetailAndUserDto, String authSql) {
  196. return projArrangeDetailAndUserMiniDao.getProjArrangeDetailAndUserByPIdYearMonth(projArrangeDetailAndUserDto, authSql);
  197. }
  198. @Override
  199. public List<UserArrangeCalendarDto> getUserArrangeCalendar(
  200. UserArrangeCalendarDto userArrangeCalendarDto,String authSql) {
  201. // TODO Auto-generated method stub
  202. return userArrangeCalendarMiniDao.getUserArrangeCalendar(userArrangeCalendarDto, authSql);
  203. }
  204. @Override
  205. public List<ProjArrangeDetailAndUserDto> getProjArrangeDetailAndUserByUserIdListYearMonth(
  206. ProjArrangeDetailAndUserDto projArrangeDetailAndUserDto,
  207. String authSql) {
  208. // TODO Auto-generated method stub
  209. return projArrangeDetailAndUserMiniDao.getProjArrangeDetailAndUserByUserIdListYearMonth(projArrangeDetailAndUserDto, authSql);
  210. }
  211. @Override
  212. public List<ArrangeDutyOperateDto> getArrangeDutyOperateData(String ids) {
  213. List<String> arrangeDutyOperateIdList=new ArrayList<String>();
  214. if(ids!=null&&ids.length()!=0){
  215. for (int i = 0; i < ids.split(",").length; i++) {
  216. arrangeDutyOperateIdList.add(ids.split(",")[i]);
  217. }
  218. }
  219. ArrangeDutyOperateDto arrangeDutyOperateDto=new ArrangeDutyOperateDto();
  220. arrangeDutyOperateDto.setArrangeDutyOperateIdList(arrangeDutyOperateIdList);
  221. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  222. List<ArrangeDutyOperateDto> arrangeDutyOperateDtoList = arrangeDutyOperateService.getArrangeDutyOperateDtoByListId(arrangeDutyOperateDto, authSql);
  223. return arrangeDutyOperateDtoList;
  224. }
  225. @Override
  226. public List<UserArrangeDetailDto> getMonthWorkByUserIdList(ArrangeDutyOperateDto arrangeDutyOperateDto, String yearmonth) {
  227. //根据月度查出前一个月最后一天日期id==
  228. CalendarAscDto calendarAscDto=new CalendarAscDto();
  229. String preYearMonth="";
  230. int year=Integer.parseInt(yearmonth.split("-")[0]);
  231. int month=Integer.parseInt(yearmonth.split("-")[1]);
  232. if(!yearmonth.split("-")[1].equals("01")){
  233. month=month-1;
  234. calendarAscDto.setYear(year);
  235. calendarAscDto.setMonth(month);
  236. }else{
  237. year=year-1;
  238. month=12;
  239. calendarAscDto.setYear(year);
  240. calendarAscDto.setMonth(month);
  241. }
  242. String strYear=String.valueOf(year);
  243. String strMonth=String.valueOf(month).length()==1?"0"+String.valueOf(month):String.valueOf(month);
  244. preYearMonth=strYear+"-"+strMonth;
  245. List<CalendarAscDto> calendarAscDtoListPrevMonth=getCalendar(calendarAscDto);
  246. if(calendarAscDtoListPrevMonth.size()==0){
  247. return null;
  248. }
  249. //根据月度查出日期id==
  250. //得到前一个月最后两天日历id
  251. List<String> calendarIdList=new ArrayList<String>();
  252. calendarIdList.add(calendarAscDtoListPrevMonth.get(calendarAscDtoListPrevMonth.size()-1).getId());
  253. //得到需要排班的所有用户id
  254. List<String> userIdList=ProjectArrangeCommonMethod.extractIdListByComma(arrangeDutyOperateDto.getUserid());
  255. UserArrangeDetailDto userArrangeDetailDto=new UserArrangeDetailDto();
  256. userArrangeDetailDto.setUserIdList(userIdList);
  257. userArrangeDetailDto.setCalendarIdList(calendarIdList);
  258. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  259. //得到已选择用户上个月所有信息;
  260. List<UserArrangeDetailDto> userArrangeDetailDtoList=new ArrayList<UserArrangeDetailDto>();
  261. userArrangeDetailDtoList=userArrangeDetailService.getMonthWorkByUserId(userArrangeDetailDto, authSql);
  262. for (int i = 0; i < userArrangeDetailDtoList.size(); i++) {
  263. userArrangeDetailDtoList.get(i).setPreMonthLastShiftType(userArrangeDetailDtoList.get(i).getDutyType());
  264. }
  265. calendarIdList.clear();
  266. calendarIdList.add(calendarAscDtoListPrevMonth.get(calendarAscDtoListPrevMonth.size()-2).getId());
  267. userArrangeDetailDto.setCalendarIdList(calendarIdList);
  268. List<UserArrangeDetailDto> userArrangeDetailDtoList2=userArrangeDetailService.getMonthWorkByUserId(userArrangeDetailDto, authSql);
  269. for (int i = 0; i < userArrangeDetailDtoList.size(); i++) {
  270. for (int j = 0; j < userArrangeDetailDtoList2.size(); j++) {
  271. if(userArrangeDetailDtoList.get(i).getUserid().equals(userArrangeDetailDtoList2.get(j).getUserid())){
  272. userArrangeDetailDtoList.get(i).setPreMonthLastSecondShiftType(userArrangeDetailDtoList2.get(j).getDutyType());
  273. }
  274. }
  275. }
  276. if(userArrangeDetailDtoList.size()==0){
  277. return null;
  278. }
  279. //查找上个月的运转方式==========
  280. //根据月度查询项目排班操作表数据
  281. StringBuffer hql = new StringBuffer(" from ArrangeDutyOperateEntity t where t.yearmonth=? ");
  282. List<ArrangeDutyOperateEntity> arrangeDutyOperateList = this.findHql(hql.toString()
  283. , preYearMonth);
  284. for (int i = 0; i < userArrangeDetailDtoList.size(); i++) {
  285. for (int j = 0; j < arrangeDutyOperateList.size(); j++) {
  286. List<String> arrangeDutyOperateUserIdList=ProjectArrangeCommonMethod.extractIdListByComma(arrangeDutyOperateList.get(j).getUserid());
  287. if(arrangeDutyOperateUserIdList.contains(userArrangeDetailDtoList.get(i).getUserid())){
  288. userArrangeDetailDtoList.get(i).setPreMonthRunWay(arrangeDutyOperateList.get(j).getRunway());
  289. break;
  290. }
  291. }
  292. }
  293. //查找上个月的运转方式==========
  294. return userArrangeDetailDtoList;
  295. }
  296. @Override
  297. public List<CalendarAscDto> getCalendar(CalendarAscDto calendarAscDto) {
  298. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  299. List<CalendarAscDto> list=calendarService.getCalendarAsc(calendarAscDto, authSql);
  300. return list;
  301. }
  302. /*@Override
  303. public AjaxJson saveOndutyArrangeDutyOperate(String onDutyOperateId,
  304. String yearmonth, String pid, String arrangeDutyStatus) {
  305. AjaxJson j = new AjaxJson();
  306. Map<String, Object> failMap=new HashMap<String, Object>();
  307. //根据月度排班操作页面的添加和编辑操作值班排班--
  308. if(onDutyOperateId!=null&&onDutyOperateId.length()>0){
  309. //查询值班操作表所有数据,并获得需要值班排班的数据
  310. StringBuffer hql = new StringBuffer(" FROM OnDutyOperateEntity odoe where odoe.yearmonth=? ");
  311. List<OnDutyOperateEntity> onDutyOperateEntityList = findHql(hql.toString(),yearmonth);
  312. List<OnDutyOperateEntity> onDutyOperateEntityListNew=new ArrayList<OnDutyOperateEntity>();
  313. List<String> onDutyOperateIdList=ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateId);
  314. for (int i = 0; i < onDutyOperateEntityList.size(); i++) {
  315. for (int k = 0; k < onDutyOperateIdList.size(); k++) {
  316. if(onDutyOperateIdList.get(k).equals(onDutyOperateEntityList.get(i).getId())){
  317. onDutyOperateEntityListNew.add(onDutyOperateEntityList.get(i));
  318. break;
  319. }
  320. }
  321. }
  322. for (int i = 0; i < onDutyOperateEntityListNew.size(); i++) {
  323. //根据月度查出日期id==
  324. CalendarAscDto calendarAscDto=new CalendarAscDto();
  325. calendarAscDto.setYear(Integer.parseInt(yearmonth.split("-")[0]));
  326. calendarAscDto.setMonth(Integer.parseInt(yearmonth.split("-")[1]));
  327. List<CalendarAscDto> calendarAscDtoList=getCalendar(calendarAscDto);
  328. List<CalendarAscDto> calendarAscDtoListNew=new ArrayList<CalendarAscDto>();
  329. //根据所选时间段并去除周一至周五
  330. for (int r = 0; r < calendarAscDtoList.size(); r++) {
  331. if(calendarAscDtoList.get(r).getDay()>=Integer.parseInt(onDutyOperateEntityListNew.get(i).getArrangeStime().split("-")[2])&&
  332. calendarAscDtoList.get(r).getDay()<=Integer.parseInt(onDutyOperateEntityListNew.get(i).getArrangeEtime().split("-")[2])){
  333. if(String.valueOf(calendarAscDtoList.get(r).getWeek()).equals(Globals.week_6)||String.valueOf(calendarAscDtoList.get(r).getWeek()).equals(Globals.week_7)){
  334. if(!calendarAscDtoList.get(r).getDtype().equals(Globals.dtype_2)){
  335. calendarAscDtoListNew.add(calendarAscDtoList.get(r));
  336. }
  337. }
  338. }
  339. }
  340. //根据月度查出日期id==
  341. //用户id
  342. List<String> userIdList = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateEntityListNew.get(i).getUserid());
  343. //查询项目排班详细表数据
  344. hql = new StringBuffer(" FROM ProjarrangeDetailEntity odoe where odoe.yearmonth=? ");
  345. List<ProjarrangeDetailEntity> projarrangeDetailEntityList = findHql(hql.toString(),yearmonth);
  346. List<ProjarrangeDetailEntity> projarrangeDetailEntityListNew=new ArrayList<ProjarrangeDetailEntity>();
  347. //匹配已经排班的用户
  348. for (int e = 0; e < projarrangeDetailEntityList.size(); e++) {
  349. for (int k = 0; k < userIdList.size(); k++) {
  350. if(userIdList.get(k).equals(projarrangeDetailEntityList.get(e).getUserid())){
  351. projarrangeDetailEntityListNew.add(projarrangeDetailEntityList.get(e));
  352. break;
  353. }
  354. }
  355. }
  356. //把班次id放入班次list中查询班次信息===================
  357. ArrangeDutyDto arrangeDutyDto=new ArrangeDutyDto();
  358. arrangeDutyDto.getArrangeDutyIdList().addAll(ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateEntityListNew.get(i).getShiftid()));
  359. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  360. List<ArrangeDutyDto> arrangeDutyDtoList = arrangeDutyService.getArrangeDutyByIdList(arrangeDutyDto, authSql);
  361. //轮流值班加班只有一个班次
  362. String shiftType=arrangeDutyDtoList.get(0).getDutyType();
  363. //把班次id放入班次list中查询班次信息====================
  364. //出勤时间
  365. String[] attendanceCycle=ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperateEntityListNew.get(i).getAttendanceCycle()).split(",");
  366. int ondutyDays;//值班
  367. BigDecimal timeOutOvertimeHours;//超时加班
  368. //BigDecimal countryOvertimeHours;//国定加班
  369. int x;//记录每天,一天一班次
  370. //循环班次人员
  371. for (int m = 0; m < projarrangeDetailEntityListNew.size(); m++) {
  372. j=checkOndutyArrangeOperate(projarrangeDetailEntityListNew.get(m),calendarAscDtoListNew,failMap);
  373. if(j.getAttributes().size()!=0){
  374. continue;
  375. }
  376. //countryOvertimeHours=BigDecimal.ZERO;
  377. timeOutOvertimeHours=projarrangeDetailEntityListNew.get(m).getTimeOutOvertimeHours();
  378. ondutyDays=0;
  379. x=0;
  380. Map<String, Object> myMap=new HashMap<String, Object>();
  381. //循环班次
  382. for (int n = 0; n < arrangeDutyDtoList.size(); n++) {
  383. //循环日期
  384. for (int l = x; l < calendarAscDtoListNew.size(); l++) {
  385. //循环出勤时间
  386. for (int k = 0; k < attendanceCycle.length; k++) {
  387. if(!calendarAscDtoList.get(i).getDtype().equals(Globals.dtype_2)&&calendarAscDtoListNew.get(l).getWeek().equals(attendanceCycle[k])){
  388. myMap.put(calendarAscDtoListNew.get(l).getId(), arrangeDutyDtoList.get(n).getId());
  389. if(arrangeDutyDtoList.get(n).getTimeOutOvertimeHours()!=null){
  390. timeOutOvertimeHours=timeOutOvertimeHours.add(arrangeDutyDtoList.get(n).getTimeOutOvertimeHours());
  391. }
  392. ondutyDays++;
  393. break;
  394. }
  395. }
  396. //如果这一天没有匹配出勤时间则为休息8e31bf3fb6e6473e9f89dcdb958b145b
  397. if(!myMap.containsKey(calendarAscDtoListNew.get(l).getId())){
  398. myMap.put(calendarAscDtoListNew.get(l).getId(), Globals.DUTYTYPE_xiuxi_id);
  399. --n;
  400. }
  401. x=l+1;
  402. break;
  403. }
  404. if(x!=calendarAscDtoListNew.size()){
  405. if(n== arrangeDutyDtoList.size()-1){
  406. n=-1;
  407. }
  408. }else{
  409. break;
  410. }
  411. }
  412. System.out.println(myMap);
  413. if(shiftType.equals(Globals.DUTYTYPE_jiaban)){
  414. if(timeOutOvertimeHours!=null){
  415. projarrangeDetailEntityListNew.get(m).setTimeOutOvertimeHours(timeOutOvertimeHours);
  416. if(projarrangeDetailEntityListNew.get(m).getCountryOvertimeHours()==null){
  417. projarrangeDetailEntityListNew.get(m).setCountryOvertimeHours(new BigDecimal("0"));
  418. }
  419. }
  420. }else if(shiftType.equals(Globals.DUTYTYPE_zhiban)){
  421. projarrangeDetailEntityListNew.get(m).setOndutyDays(new BigDecimal(ondutyDays));
  422. if(projarrangeDetailEntityListNew.get(m).getCountryOvertimeHours()==null){
  423. projarrangeDetailEntityListNew.get(m).setCountryOvertimeHours(new BigDecimal("0"));
  424. }
  425. }
  426. //projarrangeDetailEntityListNew.get(m).setCountryOvertimeHours(projarrangeDetailEntityListNew.get(m).getTimeOutOvertimeHours().add(countryOvertimeHours));
  427. try {
  428. //更新项目排班详细表
  429. this.saveOrUpdate(projarrangeDetailEntityListNew.get(m));
  430. } catch (Exception e) {
  431. // TODO Auto-generated catch block
  432. e.printStackTrace();
  433. }
  434. UserArrangeDetailEntity userArrangeDetailEntity=new UserArrangeDetailEntity();
  435. for (Entry<String,Object> entryParam : myMap.entrySet()) {
  436. //System.out.println("key="+entryParam.getKey()+",value="+entryParam.getValue());
  437. hql = new StringBuffer(" FROM UserArrangeDetailEntity uad where uad.calendarid=? and uad.projarrangeDetailid=? ");
  438. List<UserArrangeDetailEntity> userArrangeDetailEntityList = findHql(hql.toString(),entryParam.getKey(),projarrangeDetailEntityListNew.get(m).getId());
  439. userArrangeDetailEntity.setId(userArrangeDetailEntityList.get(0).getId());
  440. userArrangeDetailEntity.setCalendarid(entryParam.getKey());
  441. userArrangeDetailEntity.setShiftid(entryParam.getValue().toString());
  442. userArrangeDetailEntity.setProjarrangeDetailid(projarrangeDetailEntityListNew.get(m).getId());
  443. //更新员工排班详情表
  444. j=saveUserArrangeDetail(userArrangeDetailEntity);
  445. }
  446. }
  447. }
  448. }
  449. if(failMap.size()!=0){
  450. j.setMsg(failMap.get("failData")+"在所选日期范围已有排班");
  451. }
  452. return j;
  453. }*/
  454. /**
  455. * 轮流值班加班排班方法
  456. * 多个人批量循环排班
  457. * @author zbw
  458. * 2017-11-22
  459. * @return
  460. */
  461. /**
  462. * 轮流值班/加班验证
  463. * 是否在该时间段排过班
  464. * @author zbw
  465. * 2017-11-22
  466. * @param projarrangeDetailEntity
  467. * @param calendarAscDtoListNew
  468. * @param failMap
  469. * @return
  470. */
  471. public AjaxJson checkOndutyArrangeOperate(String projarrangeDetailid,List<CalendarAscDto> calendarAscDtoList,Map<String, Object> failMap){
  472. AjaxJson j = new AjaxJson();
  473. UserAndShiftDto userAndShiftDto=new UserAndShiftDto();
  474. userAndShiftDto.setProjarrangeDetailid(projarrangeDetailid);
  475. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  476. List<UserAndShiftDto> userAndShiftDtoList=getUserAndShift(userAndShiftDto, authSql);
  477. List<UserAndShiftDto> userAndShiftDtoListNew=new ArrayList<UserAndShiftDto>();
  478. for (int i = 0; i < userAndShiftDtoList.size(); i++) {
  479. for (int k = 0; k < calendarAscDtoList.size(); k++) {
  480. if(calendarAscDtoList.get(k).getId().equals(userAndShiftDtoList.get(i).getCalendarid())){
  481. userAndShiftDtoListNew.add(userAndShiftDtoList.get(i));
  482. break;
  483. }
  484. }
  485. }
  486. boolean flag= true;
  487. String realname="";
  488. for (int i = 0; i < userAndShiftDtoListNew.size(); i++) {
  489. realname=userAndShiftDtoListNew.get(0).getRealname();
  490. if(userAndShiftDtoListNew.get(i).getShiftType().equals(Globals.DUTYTYPE_CHANGBAN8H)
  491. ||userAndShiftDtoListNew.get(i).getShiftType().equals(Globals.DUTYTYPE_riban11h)
  492. ||userAndShiftDtoListNew.get(i).getShiftType().equals(Globals.DUTYTYPE_yeban115)
  493. ||userAndShiftDtoListNew.get(i).getShiftType().equals(Globals.DUTYTYPE_zhiban)
  494. ||userAndShiftDtoListNew.get(i).getShiftType().equals(Globals.DUTYTYPE_jiaban)){
  495. flag= false;
  496. }
  497. }
  498. if(flag==false){
  499. if(failMap.size()==0){
  500. failMap.put("failData", realname);
  501. }else{
  502. failMap.put("failData", failMap.get("failData")+","+realname);
  503. }
  504. }
  505. j.setAttributes(failMap);
  506. return j;
  507. }
  508. @Override
  509. @Arguments({ "userAndShiftDto", "authSql" })
  510. @ResultType(UserAndShiftDto.class)
  511. public List<UserAndShiftDto> getUserAndShift(
  512. UserAndShiftDto userAndShiftDto, String authSql) {
  513. // TODO Auto-generated method stub
  514. return userAndShiftMiniDao.getUserAndShift(userAndShiftDto, authSql);
  515. }
  516. @Override
  517. public AjaxJson checkMonthArrangeDutyStatus(String pid, String yearmonth) {
  518. AjaxJson j = new AjaxJson();
  519. String message="";
  520. StringBuffer hql = new StringBuffer(" from ProjArrangeGeneralEntity t where 1=1 ");
  521. hql.append(" and t.yearmonth =? and t.belongUnitid=? ");
  522. List<ProjArrangeGeneralEntity> projArrangeGeneralEntityList = projArrangeGeneralService.findHql(hql.toString(),yearmonth,pid);
  523. if(projArrangeGeneralEntityList.size()>0){
  524. if(projArrangeGeneralEntityList.get(0).getArrangeDutyStatus().equals(Globals.ARRANGESTATUS_0)){//未上报
  525. message="0";
  526. }else if(projArrangeGeneralEntityList.get(0).getArrangeDutyStatus().equals(Globals.ARRANGESTATUS_1)){//未确认
  527. message="1";
  528. }else if(projArrangeGeneralEntityList.get(0).getArrangeDutyStatus().equals(Globals.ARRANGESTATUS_2)){//已确认
  529. message="2";
  530. }
  531. }
  532. j.setMsg(message);
  533. return j;
  534. }
  535. }