DingAttendanceinfoServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. package cn.com.lzt.dingattendanceinfo.service.impl;
  2. import java.io.Serializable;
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.UUID;
  10. import javax.annotation.Resource;
  11. import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
  12. import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
  13. import org.jeecgframework.core.util.ApplicationContextUtil;
  14. import org.jeecgframework.core.util.MyClassLoader;
  15. import org.jeecgframework.core.util.StringUtil;
  16. import org.jeecgframework.minidao.pojo.MiniDaoPage;
  17. import org.jeecgframework.tag.vo.datatable.SortDirection;
  18. import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import cn.com.lzt.attendancetemp.service.AttendanceTempTransactionalServiceI;
  23. import cn.com.lzt.dingattendanceinfo.dao.DingAttendanceInfoDao;
  24. import cn.com.lzt.dingattendanceinfo.entity.DingAttendanceinfoEntity;
  25. import cn.com.lzt.dingattendanceinfo.service.DingAttendanceinfoServiceI;
  26. import cn.com.lzt.dingattendanceinfo.service.dto.DingAttendanceinfoInDto;
  27. import cn.com.lzt.dingattendanceinfo.service.dto.DingAttendanceinfoOutDto;
  28. import cn.com.lzt.dingding.service.DingdingTransactionalService;
  29. import cn.com.lzt.userattendancedetail.dto.UserAttendanceDetailDto;
  30. @Service("dingAttendanceinfoService")
  31. @Transactional
  32. public class DingAttendanceinfoServiceImpl extends CommonServiceImpl implements DingAttendanceinfoServiceI {
  33. @Autowired
  34. private DingdingTransactionalService dingdingTransactionalService;
  35. @Autowired
  36. AttendanceTempTransactionalServiceI attendanceTempTransactionalService;
  37. @Resource
  38. DingAttendanceInfoDao dingAttendanceInfoDao;
  39. public void delete(DingAttendanceinfoEntity entity) throws Exception{
  40. super.delete(entity);
  41. //执行删除操作增强业务
  42. this.doDelBus(entity);
  43. }
  44. public Serializable save(DingAttendanceinfoEntity entity) throws Exception{
  45. Serializable t = super.save(entity);
  46. //执行新增操作增强业务
  47. this.doAddBus(entity);
  48. return t;
  49. }
  50. public void saveOrUpdate(DingAttendanceinfoEntity entity) throws Exception{
  51. super.saveOrUpdate(entity);
  52. //执行更新操作增强业务
  53. this.doUpdateBus(entity);
  54. }
  55. /**
  56. * 新增操作增强业务
  57. * @param t
  58. * @return
  59. */
  60. private void doAddBus(DingAttendanceinfoEntity t) throws Exception{
  61. //-----------------sql增强 start----------------------------
  62. //-----------------sql增强 end------------------------------
  63. //-----------------java增强 start---------------------------
  64. //-----------------java增强 end-----------------------------
  65. }
  66. /**
  67. * 更新操作增强业务
  68. * @param t
  69. * @return
  70. */
  71. private void doUpdateBus(DingAttendanceinfoEntity t) throws Exception{
  72. //-----------------sql增强 start----------------------------
  73. //-----------------sql增强 end------------------------------
  74. //-----------------java增强 start---------------------------
  75. //-----------------java增强 end-----------------------------
  76. }
  77. /**
  78. * 删除操作增强业务
  79. * @param id
  80. * @return
  81. */
  82. private void doDelBus(DingAttendanceinfoEntity t) throws Exception{
  83. //-----------------sql增强 start----------------------------
  84. //-----------------sql增强 end------------------------------
  85. //-----------------java增强 start---------------------------
  86. //-----------------java增强 end-----------------------------
  87. }
  88. private Map<String,Object> populationMap(DingAttendanceinfoEntity t){
  89. Map<String,Object> map = new HashMap<String,Object>();
  90. map.put("id", t.getId());
  91. map.put("create_name", t.getCreateName());
  92. map.put("create_by", t.getCreateBy());
  93. map.put("create_date", t.getCreateDate());
  94. map.put("update_name", t.getUpdateName());
  95. map.put("update_by", t.getUpdateBy());
  96. map.put("update_date", t.getUpdateDate());
  97. map.put("sys_org_code", t.getSysOrgCode());
  98. map.put("sys_company_code", t.getSysCompanyCode());
  99. map.put("bpm_status", t.getBpmStatus());
  100. map.put("user_id", t.getUserId());
  101. map.put("user_code", t.getUserCode());
  102. map.put("belong_unitid", t.getBelongUnitid());
  103. map.put("attendance_date", t.getAttendanceDate());
  104. map.put("attendance_time", t.getAttendanceTime());
  105. map.put("ding_uniqueid", t.getDingUniqueid());
  106. map.put("realname", t.getRealname());
  107. map.put("is_dispose", t.getIsDispose());
  108. return map;
  109. }
  110. /**
  111. * 替换sql中的变量
  112. * @param sql
  113. * @param t
  114. * @return
  115. */
  116. public String replaceVal(String sql,DingAttendanceinfoEntity t){
  117. sql = sql.replace("#{id}",String.valueOf(t.getId()));
  118. sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName()));
  119. sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy()));
  120. sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate()));
  121. sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName()));
  122. sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy()));
  123. sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate()));
  124. sql = sql.replace("#{sys_org_code}",String.valueOf(t.getSysOrgCode()));
  125. sql = sql.replace("#{sys_company_code}",String.valueOf(t.getSysCompanyCode()));
  126. sql = sql.replace("#{bpm_status}",String.valueOf(t.getBpmStatus()));
  127. sql = sql.replace("#{user_id}",String.valueOf(t.getUserId()));
  128. sql = sql.replace("#{user_code}",String.valueOf(t.getUserCode()));
  129. sql = sql.replace("#{belong_unitid}",String.valueOf(t.getBelongUnitid()));
  130. sql = sql.replace("#{attendance_date}",String.valueOf(t.getAttendanceDate()));
  131. sql = sql.replace("#{attendance_time}",String.valueOf(t.getAttendanceTime()));
  132. sql = sql.replace("#{ding_uniqueid}",String.valueOf(t.getDingUniqueid()));
  133. sql = sql.replace("#{realname}",String.valueOf(t.getRealname()));
  134. sql = sql.replace("#{is_dispose}",String.valueOf(t.getIsDispose()));
  135. sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
  136. return sql;
  137. }
  138. /**
  139. * 执行JAVA增强
  140. */
  141. private void executeJavaExtend(String cgJavaType,String cgJavaValue,Map<String,Object> data) throws Exception {
  142. if(StringUtil.isNotEmpty(cgJavaValue)){
  143. Object obj = null;
  144. try {
  145. if("class".equals(cgJavaType)){
  146. //因新增时已经校验了实例化是否可以成功,所以这块就不需要再做一次判断
  147. obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance();
  148. }else if("spring".equals(cgJavaType)){
  149. obj = ApplicationContextUtil.getContext().getBean(cgJavaValue);
  150. }
  151. if(obj instanceof CgformEnhanceJavaInter){
  152. CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj;
  153. javaInter.execute("t_bus_ding_attendanceinfo",data);
  154. }
  155. } catch (Exception e) {
  156. e.printStackTrace();
  157. throw new Exception("执行JAVA增强出现异常!");
  158. }
  159. }
  160. }
  161. /**
  162. * 钉钉考勤原始数据检索
  163. * @param inDto
  164. * @param page
  165. * @param rows
  166. * @param authSql
  167. * @param sortorder
  168. * @return 钉钉考勤原始数据
  169. */
  170. @Override
  171. public MiniDaoPage<DingAttendanceinfoOutDto> getDingAttendanceInfoList(
  172. DingAttendanceinfoInDto inDto, int page, int rows, String authSql,
  173. String sortorder) {
  174. MiniDaoPage<DingAttendanceinfoOutDto> datagridList = dingAttendanceInfoDao.dataGrid(inDto, page, rows, authSql,sortorder);
  175. return datagridList;
  176. }
  177. @Override
  178. public List<DingAttendanceinfoEntity> getDingAttendanceinfoEntities(
  179. UserAttendanceDetailDto dto) throws Exception {
  180. List<DingAttendanceinfoEntity> resultlist = new ArrayList<DingAttendanceinfoEntity>();
  181. Date curdate = dto.getYmdDate();
  182. Calendar calendar = Calendar.getInstance();
  183. calendar.setTime(curdate);
  184. calendar.add(Calendar.DATE, 2);
  185. Date tomdate = calendar.getTime();
  186. CriteriaQuery cq = new CriteriaQuery(DingAttendanceinfoEntity.class);
  187. cq.eq("userId", dto.getUserid());
  188. cq.add();
  189. cq.between("attendanceTime", curdate, tomdate);
  190. cq.add();
  191. cq.addOrder("attendanceTime", SortDirection.asc);
  192. cq.add();
  193. resultlist = getListByCriteriaQuery(cq, false);
  194. return resultlist;
  195. }
  196. @Override
  197. public List<DingAttendanceinfoEntity> getDingAttendanceinfoEntitiesInOneMonth(
  198. String userid, Date curdate) throws Exception {
  199. List<DingAttendanceinfoEntity> resultlist = new ArrayList<DingAttendanceinfoEntity>();
  200. // Date curdate = dto.getYmdDate();
  201. Calendar startcalendar = Calendar.getInstance();
  202. startcalendar.setTime(curdate);
  203. startcalendar.set(Calendar.DATE, 1);
  204. startcalendar.add(Calendar.DATE, -1);
  205. Calendar calendar = Calendar.getInstance();
  206. calendar.setTime(curdate);
  207. calendar.add(Calendar.DATE, 32);
  208. Date tomdate = calendar.getTime();
  209. CriteriaQuery cq = new CriteriaQuery(DingAttendanceinfoEntity.class);
  210. cq.eq("userId", userid);
  211. cq.add();
  212. cq.between("attendanceTime", startcalendar.getTime(), tomdate);
  213. cq.add();
  214. cq.addOrder("attendanceTime", SortDirection.asc);
  215. cq.add();
  216. resultlist = getListByCriteriaQuery(cq, false);
  217. return resultlist;
  218. }
  219. /**
  220. * 获取考勤原始数据,分析原始数据到实时查看表
  221. */
  222. @Override
  223. public void signRecordSynchronization() {
  224. long start1 = System.currentTimeMillis();
  225. // 同步所有人员的考勤记录到钉钉考勤原始信息表 1221 同步至clock表,不再做后两步
  226. dingdingTransactionalService.signRecordSynchronization(null,null);
  227. long start2 = System.currentTimeMillis();
  228. System.out.println("signRecordSynchronization cost: " + (start2-start1));
  229. /*// 处理钉钉考勤原始记录表中的数据到考勤实时查看表
  230. attendanceTempTransactionalService.attendanceTempSynchronization(null);
  231. long start3 = System.currentTimeMillis();
  232. System.out.println("attendanceTempSynchronization cost: " + (start3-start2));
  233. // 考勤实时查看分析考勤状态
  234. attendanceTempTransactionalService.SetAttendanceStatusAndWarning(null);
  235. long end = System.currentTimeMillis();
  236. System.out.println("SetAttendanceStatusAndWarning cost: " + (end-start3));*/
  237. }
  238. /**
  239. * 初始化第二天的所有人的考勤实时查看基础数据
  240. */
  241. @Override
  242. public void attendanceTempInit() {
  243. Date date = new Date(new Date().getTime() + 1000 * 60 * 60 * 24);
  244. // 根据用户将每天的实时查看数据初始化
  245. attendanceTempTransactionalService.attendanceTempInit(date);
  246. }
  247. }