UserAttendanceTotalServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. package cn.com.lzt.userattendancetotal.service.impl;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
  8. import org.jeecgframework.core.common.model.json.DataGrid;
  9. import org.jeecgframework.core.common.model.json.DataGridReturn;
  10. import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
  11. import org.jeecgframework.core.constant.Globals;
  12. import org.jeecgframework.core.util.ListUtils;
  13. import org.jeecgframework.core.util.ResourceUtil;
  14. import org.jeecgframework.core.util.StringUtil;
  15. import org.jeecgframework.core.util.oConvertUtils;
  16. import org.jeecgframework.minidao.pojo.MiniDaoPage;
  17. import org.jeecgframework.tag.vo.datatable.SortDirection;
  18. import org.jeecgframework.web.system.pojo.base.TSBaseUser;
  19. import org.jeecgframework.web.system.pojo.base.TSUser;
  20. import org.jeecgframework.web.system.service.DepartServiceI;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import cn.com.lzt.dialogDeal.service.UserDepartOrgDealServiceI;
  25. import cn.com.lzt.dingattendanceinfo.entity.DingAttendanceinfoEntity;
  26. import cn.com.lzt.personnelbasearchivesmanage.dao.PersonnelBaseArchivesManageDao;
  27. import cn.com.lzt.personnelbasearchivesmanage.dto.PersonnelBaseArchivesManageInDto;
  28. import cn.com.lzt.personnelbasearchivesmanage.dto.PersonnelBaseArchivesManageOutDto;
  29. import cn.com.lzt.personnelbasearchivesmanage.entity.PersonnelBaseArchivesManageEntity;
  30. import cn.com.lzt.personnelbasearchivesmanage.service.PersonnelBaseArchivesManageServiceI;
  31. import cn.com.lzt.projarrangedetail.entity.ProjarrangeDetailEntity;
  32. import cn.com.lzt.userattendancedetail.entity.UserAttendanceDetailEntity;
  33. import cn.com.lzt.userattendancedetail.service.UserAttendanceDetailServiceI;
  34. import cn.com.lzt.userattendancetotal.dao.UserAttendanceTotalDao;
  35. import cn.com.lzt.userattendancetotal.entity.UserAttendanceTotalEntity;
  36. import cn.com.lzt.userattendancetotal.service.UserAttendanceTotalServiceI;
  37. @Service("userAttendanceTotalService")
  38. @Transactional
  39. public class UserAttendanceTotalServiceImpl extends CommonServiceImpl implements
  40. UserAttendanceTotalServiceI {
  41. @Autowired
  42. private UserAttendanceTotalDao userAttendanceTotalDao;
  43. @Autowired
  44. private PersonnelBaseArchivesManageServiceI personnelBaseArchivesManageService;
  45. @Autowired
  46. private UserAttendanceDetailServiceI userAttendanceDetailService;
  47. @Autowired
  48. private DepartServiceI departService;
  49. // 用户和项目关系
  50. @Autowired
  51. private UserDepartOrgDealServiceI userDepartOrgDealServiceI;
  52. @Autowired
  53. PersonnelBaseArchivesManageDao personnelBaseArchivesManageDao;
  54. //如果同一个月份数据定时任务再次启动, 需要将 未上报且 未调整的 删除掉重新计算, 其他的不进行覆盖
  55. @Override
  56. public void insertUserAttendanceTotalByyearmonth(String userid, String yearmonth)throws Exception {
  57. if (oConvertUtils.isEmpty(yearmonth) || oConvertUtils.isEmpty(userid)) {
  58. return;
  59. }
  60. // userAttendanceTotalDao.updateExpiredUserAttendanceDetailByUserId(userid,yearmonth);
  61. // userAttendanceTotalDao.updateExpiredUserAttendanceTotalByUserId(userid,yearmonth);
  62. List<Object> Obj2Delete = new ArrayList<>();
  63. CriteriaQuery cq = new CriteriaQuery(UserAttendanceTotalEntity.class);
  64. cq.eq("userId", userid);
  65. cq.add();
  66. cq.eq("yearmonth", yearmonth);
  67. cq.add();
  68. List<UserAttendanceTotalEntity> userAttendanceTotalEntities = getListByCriteriaQuery(
  69. cq, false);
  70. //如果同一个月份数据定时任务再次启动, 需要将[del--> 未上报且 未调整的]【全部的库中已有的】 删除掉重新计算, del--->其他的不进行覆盖
  71. if (!ListUtils.isNullOrEmpty(userAttendanceTotalEntities)) {
  72. for (UserAttendanceTotalEntity entry:userAttendanceTotalEntities) {
  73. List<UserAttendanceDetailEntity> userAttendanceDetailEntities =
  74. findByProperty(UserAttendanceDetailEntity.class, "attendanceId", entry.getId());
  75. Obj2Delete.addAll(userAttendanceDetailEntities);
  76. Obj2Delete.add(entry);
  77. }
  78. }
  79. UserAttendanceTotalEntity userAttendanceTotalEntity = new UserAttendanceTotalEntity();
  80. userAttendanceTotalEntity.setYearmonth(yearmonth);
  81. userAttendanceTotalEntity.setUserId(userid);
  82. if (oConvertUtils.isNotEmpty(userid)) {
  83. TSUser user = findUniqueByProperty(TSUser.class, "id", userid);
  84. if (oConvertUtils.isNotEmpty(user)&&oConvertUtils.isNotEmpty(user.getUserNum())) {
  85. userAttendanceTotalEntity.setUserCode(user.getUserNum() );
  86. }
  87. }
  88. String departid = getUserDepaertId(userid);
  89. List<String> pidlist = null;
  90. String piddddd = null;
  91. if (oConvertUtils.isNotEmpty(departid)) {
  92. //FIXME 如果获取的是多个项目id 的时候 如何处理
  93. pidlist = userDepartOrgDealServiceI.getProjectDepartId(departid);
  94. if (!ListUtils.isNullOrEmpty(pidlist)) {
  95. for (String pidd: pidlist) {
  96. piddddd = pidd;
  97. }
  98. }
  99. }
  100. userAttendanceTotalEntity.setDepartid(departid);
  101. userAttendanceTotalEntity.setPid(piddddd);
  102. userAttendanceTotalEntity.setAdjustRecord(Globals.ATTENDANCE_ADJUST_STATUS_0);
  103. userAttendanceTotalEntity.setAttendanceStatus(Globals.ATTENDANCE_REPORT_STATUS_0);
  104. List<PersonnelBaseArchivesManageEntity> perEntities = findByProperty(PersonnelBaseArchivesManageEntity.class, "userid", userid);
  105. PersonnelBaseArchivesManageEntity perEntity = null;
  106. if (!ListUtils.isNullOrEmpty(perEntities)) {
  107. for (PersonnelBaseArchivesManageEntity entity:perEntities) {
  108. perEntity = entity;
  109. }
  110. }
  111. if (perEntity!=null) {
  112. userAttendanceTotalEntity.setInPostid(perEntity.getInPostid());
  113. }
  114. userAttendanceTotalEntity.setConfirmStatus(Globals.ARRANGESTATUS_0);
  115. save(userAttendanceTotalEntity);
  116. // 计算某个人的考勤
  117. userAttendanceDetailService.saveOrUpdateUserAttendanceDetailEntitis(userAttendanceTotalEntity);
  118. deleteAllEntitie(Obj2Delete);
  119. }
  120. @Override
  121. public void insertUserAttendanceTotalByyearmonth(String yearmonth) throws Exception {
  122. if (oConvertUtils.isEmpty(yearmonth)) {
  123. return;
  124. }
  125. long s = System.currentTimeMillis();
  126. List<Object> Obj2Delete = new ArrayList<>();
  127. CriteriaQuery cq1 = new CriteriaQuery(ProjarrangeDetailEntity.class);
  128. cq1.eq("yearmonth", yearmonth);
  129. cq1.add();
  130. List<ProjarrangeDetailEntity> projarrangeDetailEntities = getListByCriteriaQuery(cq1, false);
  131. List<UserAttendanceTotalEntity> savelist = new ArrayList<UserAttendanceTotalEntity>();
  132. HashMap<String, HashMap<String, Object>> hm_cache = new HashMap<>();
  133. if (!ListUtils.isNullOrEmpty(projarrangeDetailEntities)) {
  134. for (ProjarrangeDetailEntity person : projarrangeDetailEntities) {
  135. //当前员工在当前月份没有记录
  136. UserAttendanceTotalEntity userAttendanceTotalEntity = new UserAttendanceTotalEntity();
  137. userAttendanceTotalEntity.setYearmonth(yearmonth);
  138. userAttendanceTotalEntity.setUserId(person.getUserid());
  139. if (oConvertUtils.isNotEmpty(person.getUserid())) {
  140. PersonnelBaseArchivesManageOutDto personnelBaseArchives = getPersonnelBaseArchivesManageOutDtoWithCache(hm_cache,person.getUserid());
  141. if (oConvertUtils.isNotEmpty(personnelBaseArchives)) {
  142. userAttendanceTotalEntity.setUserCode(personnelBaseArchives.getUserNum() );
  143. String departid = personnelBaseArchives.getOrgId();
  144. String piddddd = personnelBaseArchives.getGlcId();
  145. userAttendanceTotalEntity.setDepartid(departid);
  146. userAttendanceTotalEntity.setPid(piddddd);
  147. userAttendanceTotalEntity.setAdjustRecord(Globals.ATTENDANCE_ADJUST_STATUS_0);
  148. userAttendanceTotalEntity.setAttendanceStatus(Globals.ATTENDANCE_REPORT_STATUS_0);
  149. userAttendanceTotalEntity.setInPostid(personnelBaseArchives.getInPostid());
  150. userAttendanceTotalEntity.setConfirmStatus(Globals.ARRANGESTATUS_0);
  151. savelist.add(userAttendanceTotalEntity);
  152. }
  153. }
  154. }
  155. }
  156. long e00 = System.currentTimeMillis();
  157. System.out.println("get projarrangeDetailEntities costs: " + (e00-s) + "ms");
  158. List<UserAttendanceTotalEntity> userAttendanceTotalEntities = getUserAttendanceTotalEntitiesWithCache(hm_cache,yearmonth);
  159. long e01 = System.currentTimeMillis();
  160. System.out.println("get userAttendanceTotalEntities costs: " + (e01-e00) + "ms");
  161. //如果同一个月份数据定时任务再次启动, 需要将[del--> 未上报且 未调整的]【全部的库中已有的】 删除掉重新计算, del--->其他的不进行覆盖
  162. List<UserAttendanceDetailEntity> userAttendanceDetailEntities = getUserAttendanceDetailEntitiesWithCache(hm_cache,yearmonth);
  163. long e02 = System.currentTimeMillis();
  164. System.out.println("get userAttendanceDetailEntities costs: " + (e02-e01) + "ms");
  165. Obj2Delete.addAll(userAttendanceDetailEntities);
  166. Obj2Delete.addAll(userAttendanceTotalEntities);
  167. long e1 = System.currentTimeMillis();
  168. //根据用户的员工考勤合计信息, 计算每一个员工在这个月内的每天的考勤信息
  169. batchSave(savelist);
  170. long e2 = System.currentTimeMillis();
  171. System.out.println("deal batchSave costs: " + (e2-e1) + "ms");
  172. userAttendanceDetailService.saveOrUpdateUserAttendanceDetailEntitis(savelist);
  173. long e3 = System.currentTimeMillis();
  174. System.out.println("deal saveOrUpdateUserAttendanceDetailEntitis costs: " + (e3-e2) + "ms");
  175. deleteAllEntitie(Obj2Delete);
  176. long e4 = System.currentTimeMillis();
  177. System.out.println("deal deleteAllEntitie costs: " + (e4-e3) + "ms");
  178. }
  179. /**
  180. * @param hm_cache
  181. * @param userid
  182. * @return
  183. */
  184. private PersonnelBaseArchivesManageOutDto getPersonnelBaseArchivesManageOutDtoWithCache(HashMap<String, HashMap<String, Object>> hm_cache, String userid) {
  185. HashMap<String, Object> hm_personCache = hm_cache.get("getPersonnelBaseArchivesManageOutDtoWithCache");
  186. if(hm_personCache == null ||hm_personCache.isEmpty()) {
  187. hm_personCache = new HashMap<String, Object>();
  188. List<PersonnelBaseArchivesManageOutDto> listDB = personnelBaseArchivesManageDao.getAllEntities().getResults();
  189. for(PersonnelBaseArchivesManageOutDto person : listDB) {
  190. hm_personCache.put(person.getUserId(), person);
  191. }
  192. hm_cache.put("getPersonnelBaseArchivesManageOutDtoWithCache", hm_personCache);
  193. }
  194. return (PersonnelBaseArchivesManageOutDto)hm_personCache.get(userid);
  195. }
  196. /**
  197. * @param hm_cache
  198. * @param yearmonth
  199. * @return
  200. */
  201. private List<UserAttendanceDetailEntity> getUserAttendanceDetailEntitiesWithCache(HashMap<String, HashMap<String, Object>> hm_cache, String yearmonth) {
  202. // String hql = "from UserAttendanceDetailEntity where ymdDate like '" +yearmonth+"%'";
  203. List<UserAttendanceDetailEntity> entitiesFromDB = new ArrayList<UserAttendanceDetailEntity>();
  204. String hql = "select id from t_bus_user_attendance_detail "
  205. + "where ymd_date like '"+ yearmonth +"%'";
  206. List<Map<String, Object>> mapList=new ArrayList<Map<String, Object>>();
  207. mapList = findForJdbc(hql, null);
  208. for(Map<String, Object> map : mapList) {
  209. UserAttendanceDetailEntity entity = new UserAttendanceDetailEntity();
  210. entity.setId(map.get("id").toString());
  211. entitiesFromDB.add(entity);
  212. }
  213. // for(UserAttendanceDetailEntity entity : entitiesFromDB) {
  214. // String attendanceIdInEntity = entity.getAttendanceId();
  215. // if(hm.containsKey(attendanceIdInEntity)) {
  216. // List<UserAttendanceDetailEntity> entitylist = (List<UserAttendanceDetailEntity>)hm.get(attendanceIdInEntity);
  217. // entitylist.add(entity);
  218. // }else {
  219. // List<UserAttendanceDetailEntity> newlist = new ArrayList<>();
  220. // newlist.add(entity);
  221. // hm.put(attendanceIdInEntity, newlist);
  222. // }
  223. // }
  224. // List<UserAttendanceDetailEntity> allList = (List<UserAttendanceDetailEntity>)hm.get(atendanceId);
  225. return entitiesFromDB;
  226. }
  227. /**
  228. * @param hm_cache
  229. * @param yearmonth
  230. * @return
  231. */
  232. private List<UserAttendanceTotalEntity> getUserAttendanceTotalEntitiesWithCache(HashMap<String, HashMap<String, Object>> hm_cache, String yearmonth) {
  233. // HashMap<String, Object> hm = hm_cache.get("getUserAttendanceTotalEntitiesWithCache");
  234. // if(hm == null) {
  235. // hm = new HashMap<>();
  236. // hm_cache.put("getUserAttendanceTotalEntitiesWithCache", hm);
  237. // CriteriaQuery cq = new CriteriaQuery(UserAttendanceTotalEntity.class);
  238. // cq.eq("yearmonth", yearmonth);
  239. // cq.add();
  240. // List<UserAttendanceTotalEntity> entitiesFromDB = getListByCriteriaQuery(cq, false);
  241. // for(UserAttendanceTotalEntity entity : entitiesFromDB) {
  242. // String userInEntity = entity.getUserId();
  243. // if(hm.containsKey(userInEntity)) {
  244. // List<UserAttendanceTotalEntity> entitylist = (List<UserAttendanceTotalEntity>)hm.get(userInEntity);
  245. // entitylist.add(entity);
  246. // }else {
  247. // List<UserAttendanceTotalEntity> newlist = new ArrayList<>();
  248. // newlist.add(entity);
  249. // hm.put(userInEntity, newlist);
  250. // }
  251. // }
  252. // }
  253. List<UserAttendanceTotalEntity> entitiesFromDB = new ArrayList<UserAttendanceTotalEntity>();
  254. String hql = "select id from t_bus_user_attendance_total "
  255. + "where yearmonth = '"+ yearmonth +"'";
  256. List<Map<String, Object>> mapList=new ArrayList<Map<String, Object>>();
  257. mapList = findForJdbc(hql, null);
  258. for(Map<String, Object> map : mapList) {
  259. UserAttendanceTotalEntity entity = new UserAttendanceTotalEntity();
  260. entity.setId(map.get("id").toString());
  261. entitiesFromDB.add(entity);
  262. }
  263. return entitiesFromDB;
  264. }
  265. /**
  266. * @param hm_personCache
  267. * @param userid
  268. * @return
  269. */
  270. private List<PersonnelBaseArchivesManageEntity> getPersonnelBaseArchivesManageEntitysWithCache(
  271. HashMap<String, List<PersonnelBaseArchivesManageEntity>> hm_personCache, String userid) {
  272. if(hm_personCache.isEmpty()) {
  273. String hql = "from PersonnelBaseArchivesManageEntity where 1=1";
  274. List<PersonnelBaseArchivesManageEntity> listDB = findHql(hql);
  275. for(PersonnelBaseArchivesManageEntity person : listDB) {
  276. if(hm_personCache.containsKey(person.getUserid())) {
  277. hm_personCache.get(person.getUserid()).add(person);
  278. }else {
  279. List<PersonnelBaseArchivesManageEntity> newlist = new ArrayList<>();
  280. newlist.add(person);
  281. hm_personCache.put(person.getUserid(), newlist);
  282. }
  283. }
  284. }
  285. return hm_personCache.get(userid);
  286. }
  287. /**
  288. * 获取当前员工所在项目
  289. * @author hualong.zhao
  290. * @date 2017-11-28
  291. * @param userid
  292. * @return
  293. */
  294. private String getUserDepaertId(String userid) {
  295. String depaertId = null;
  296. if (oConvertUtils.isNotEmpty(userid)) {
  297. TSBaseUser user = get(TSBaseUser.class, userid);
  298. if (oConvertUtils.isNotEmpty(user)&&oConvertUtils.isNotEmpty(user.getUserName())) {
  299. PersonnelBaseArchivesManageInDto inDto = new PersonnelBaseArchivesManageInDto();
  300. inDto.setId(user.getId());
  301. MiniDaoPage<PersonnelBaseArchivesManageOutDto> resultlist =
  302. personnelBaseArchivesManageService.getPersonnelBaseArchivesManageList(inDto,1,10
  303. ,null,null);
  304. List<PersonnelBaseArchivesManageOutDto> list = resultlist.getResults();
  305. if (!ListUtils.isNullOrEmpty(list)) {
  306. for (PersonnelBaseArchivesManageOutDto dto : list) {
  307. depaertId = dto.getOrgId();
  308. }
  309. }
  310. }
  311. }
  312. return depaertId;
  313. }
  314. @Override
  315. public void getAttendanceTotalDtos(UserAttendanceTotalEntity userAttendanceTotal, DataGrid dataGrid) {
  316. List<String> pids = new ArrayList<>();
  317. List<String> userid = new ArrayList<>();
  318. boolean confirmStatusnotZero = false;
  319. if (oConvertUtils.isNotEmpty(userAttendanceTotal.getConfirmor())) {
  320. confirmStatusnotZero = true ;
  321. userAttendanceTotal.setConfirmor(null);
  322. }
  323. if (oConvertUtils.isNotEmpty(userAttendanceTotal.getDepartid())) {
  324. // userAttendanceTotal.setPid(userAttendanceTotal.getDepartid());
  325. pids = departService.getDePartIdAndallSonDepartIds(userAttendanceTotal.getDepartid());
  326. // pids.remove(userAttendanceTotal.getDepartid());
  327. userAttendanceTotal.setDepartid(null);
  328. }else {
  329. dataGrid.setObj("nodepartid");
  330. }
  331. if (oConvertUtils.isNotEmpty(userAttendanceTotal.getUserId())) {
  332. CriteriaQuery usercq = new CriteriaQuery(TSBaseUser.class);
  333. usercq.like("realName", "%"+userAttendanceTotal.getUserId()+"%");
  334. usercq.add();
  335. List<TSBaseUser> userlist = getListByCriteriaQuery(usercq, false);
  336. if (!ListUtils.isNullOrEmpty(userlist)) {
  337. for (TSBaseUser user:userlist) {
  338. userid.add(user.getId());
  339. }
  340. userAttendanceTotal.setUserId(null);
  341. }else {
  342. }
  343. }
  344. if (!ListUtils.isNullOrEmpty(pids)) {
  345. userAttendanceTotal.setDepartid(null);
  346. CriteriaQuery cq = new CriteriaQuery(UserAttendanceTotalEntity.class, dataGrid);
  347. //查询条件组装器
  348. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, userAttendanceTotal);
  349. cq.add();
  350. if (!ListUtils.isNullOrEmpty(pids)) {
  351. cq.in("departid", pids.toArray());
  352. cq.add();
  353. }
  354. if (!ListUtils.isNullOrEmpty(userid)) {
  355. cq.in("userId", userid.toArray());
  356. cq.add();
  357. }
  358. if (confirmStatusnotZero) {
  359. cq.notEq("confirmStatus", Globals.ATTENDANCE_REPORT_STATUS_0);
  360. cq.add();
  361. }
  362. boolean isOffset = true ;
  363. if ("exportXls".equals(oConvertUtils.getString(dataGrid.getObj()))) {
  364. isOffset = false;
  365. }
  366. String sort = dataGrid.getSort(); // 排序对象
  367. if (StringUtil.isEmpty(sort)) {
  368. Map<String, Object> orderMap = new HashMap<String, Object>();
  369. orderMap.put("userCode", SortDirection.asc);
  370. cq.setOrder(orderMap);
  371. }
  372. DataGridReturn dr =getDataGridReturn(cq, isOffset);
  373. List l = dr.getRows();
  374. }else {
  375. List<UserAttendanceTotalEntity> resultlist = new ArrayList<>();
  376. dataGrid.setResults(resultlist);
  377. }
  378. }
  379. @Override
  380. public void doBatchAudit(String ids,String confirmStatus) throws Exception {
  381. for(String id:ids.split(",")){
  382. if (oConvertUtils.isNotEmpty(id)) {
  383. UserAttendanceTotalEntity userAttendanceTotal = getEntity(UserAttendanceTotalEntity.class,id);
  384. if (oConvertUtils.isNotEmpty(userAttendanceTotal)) {
  385. userAttendanceTotal.setConfirmStatus(confirmStatus);
  386. userAttendanceTotal.setConfirmDate(new Date());
  387. String confirmor = ResourceUtil.getSessionUser().getId();
  388. userAttendanceTotal.setConfirmor(confirmor);
  389. saveOrUpdate(userAttendanceTotal);
  390. }
  391. }
  392. }
  393. }
  394. @Override
  395. public void doBatchReport(String ids) throws Exception {
  396. for(String id:ids.split(",")){
  397. if (oConvertUtils.isNotEmpty(id)) {
  398. UserAttendanceTotalEntity userAttendanceTotal = getEntity(UserAttendanceTotalEntity.class,id);
  399. if (oConvertUtils.isNotEmpty(userAttendanceTotal)) {
  400. userAttendanceTotal.setConfirmStatus(Globals.ARRANGESTATUS_1);
  401. saveOrUpdate(userAttendanceTotal);
  402. }
  403. }
  404. }
  405. }
  406. @Override
  407. public List<UserAttendanceTotalEntity> getByuserid(String userid, String monthly) {
  408. return userAttendanceTotalDao.getByuserid(userid, monthly);
  409. }
  410. }