package cn.com.lzt.dingattendanceinfo.service.impl; import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.annotation.Resource; import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery; import org.jeecgframework.core.common.service.impl.CommonServiceImpl; import org.jeecgframework.core.util.ApplicationContextUtil; import org.jeecgframework.core.util.MyClassLoader; import org.jeecgframework.core.util.StringUtil; import org.jeecgframework.minidao.pojo.MiniDaoPage; import org.jeecgframework.tag.vo.datatable.SortDirection; import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import cn.com.lzt.attendancetemp.service.AttendanceTempTransactionalServiceI; import cn.com.lzt.dingattendanceinfo.dao.DingAttendanceInfoDao; import cn.com.lzt.dingattendanceinfo.entity.DingAttendanceinfoEntity; import cn.com.lzt.dingattendanceinfo.service.DingAttendanceinfoServiceI; import cn.com.lzt.dingattendanceinfo.service.dto.DingAttendanceinfoInDto; import cn.com.lzt.dingattendanceinfo.service.dto.DingAttendanceinfoOutDto; import cn.com.lzt.dingding.service.DingdingTransactionalService; import cn.com.lzt.userattendancedetail.dto.UserAttendanceDetailDto; @Service("dingAttendanceinfoService") @Transactional public class DingAttendanceinfoServiceImpl extends CommonServiceImpl implements DingAttendanceinfoServiceI { @Autowired private DingdingTransactionalService dingdingTransactionalService; @Autowired AttendanceTempTransactionalServiceI attendanceTempTransactionalService; @Resource DingAttendanceInfoDao dingAttendanceInfoDao; public void delete(DingAttendanceinfoEntity entity) throws Exception{ super.delete(entity); //执行删除操作增强业务 this.doDelBus(entity); } public Serializable save(DingAttendanceinfoEntity entity) throws Exception{ Serializable t = super.save(entity); //执行新增操作增强业务 this.doAddBus(entity); return t; } public void saveOrUpdate(DingAttendanceinfoEntity entity) throws Exception{ super.saveOrUpdate(entity); //执行更新操作增强业务 this.doUpdateBus(entity); } /** * 新增操作增强业务 * @param t * @return */ private void doAddBus(DingAttendanceinfoEntity t) throws Exception{ //-----------------sql增强 start---------------------------- //-----------------sql增强 end------------------------------ //-----------------java增强 start--------------------------- //-----------------java增强 end----------------------------- } /** * 更新操作增强业务 * @param t * @return */ private void doUpdateBus(DingAttendanceinfoEntity t) throws Exception{ //-----------------sql增强 start---------------------------- //-----------------sql增强 end------------------------------ //-----------------java增强 start--------------------------- //-----------------java增强 end----------------------------- } /** * 删除操作增强业务 * @param id * @return */ private void doDelBus(DingAttendanceinfoEntity t) throws Exception{ //-----------------sql增强 start---------------------------- //-----------------sql增强 end------------------------------ //-----------------java增强 start--------------------------- //-----------------java增强 end----------------------------- } private Map populationMap(DingAttendanceinfoEntity t){ Map map = new HashMap(); map.put("id", t.getId()); map.put("create_name", t.getCreateName()); map.put("create_by", t.getCreateBy()); map.put("create_date", t.getCreateDate()); map.put("update_name", t.getUpdateName()); map.put("update_by", t.getUpdateBy()); map.put("update_date", t.getUpdateDate()); map.put("sys_org_code", t.getSysOrgCode()); map.put("sys_company_code", t.getSysCompanyCode()); map.put("bpm_status", t.getBpmStatus()); map.put("user_id", t.getUserId()); map.put("user_code", t.getUserCode()); map.put("belong_unitid", t.getBelongUnitid()); map.put("attendance_date", t.getAttendanceDate()); map.put("attendance_time", t.getAttendanceTime()); map.put("ding_uniqueid", t.getDingUniqueid()); map.put("realname", t.getRealname()); map.put("is_dispose", t.getIsDispose()); return map; } /** * 替换sql中的变量 * @param sql * @param t * @return */ public String replaceVal(String sql,DingAttendanceinfoEntity t){ sql = sql.replace("#{id}",String.valueOf(t.getId())); sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName())); sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy())); sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate())); sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName())); sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy())); sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate())); sql = sql.replace("#{sys_org_code}",String.valueOf(t.getSysOrgCode())); sql = sql.replace("#{sys_company_code}",String.valueOf(t.getSysCompanyCode())); sql = sql.replace("#{bpm_status}",String.valueOf(t.getBpmStatus())); sql = sql.replace("#{user_id}",String.valueOf(t.getUserId())); sql = sql.replace("#{user_code}",String.valueOf(t.getUserCode())); sql = sql.replace("#{belong_unitid}",String.valueOf(t.getBelongUnitid())); sql = sql.replace("#{attendance_date}",String.valueOf(t.getAttendanceDate())); sql = sql.replace("#{attendance_time}",String.valueOf(t.getAttendanceTime())); sql = sql.replace("#{ding_uniqueid}",String.valueOf(t.getDingUniqueid())); sql = sql.replace("#{realname}",String.valueOf(t.getRealname())); sql = sql.replace("#{is_dispose}",String.valueOf(t.getIsDispose())); sql = sql.replace("#{UUID}",UUID.randomUUID().toString()); return sql; } /** * 执行JAVA增强 */ private void executeJavaExtend(String cgJavaType,String cgJavaValue,Map data) throws Exception { if(StringUtil.isNotEmpty(cgJavaValue)){ Object obj = null; try { if("class".equals(cgJavaType)){ //因新增时已经校验了实例化是否可以成功,所以这块就不需要再做一次判断 obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance(); }else if("spring".equals(cgJavaType)){ obj = ApplicationContextUtil.getContext().getBean(cgJavaValue); } if(obj instanceof CgformEnhanceJavaInter){ CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj; javaInter.execute("t_bus_ding_attendanceinfo",data); } } catch (Exception e) { e.printStackTrace(); throw new Exception("执行JAVA增强出现异常!"); } } } /** * 钉钉考勤原始数据检索 * @param inDto * @param page * @param rows * @param authSql * @param sortorder * @return 钉钉考勤原始数据 */ @Override public MiniDaoPage getDingAttendanceInfoList( DingAttendanceinfoInDto inDto, int page, int rows, String authSql, String sortorder) { MiniDaoPage datagridList = dingAttendanceInfoDao.dataGrid(inDto, page, rows, authSql,sortorder); return datagridList; } @Override public List getDingAttendanceinfoEntities( UserAttendanceDetailDto dto) throws Exception { List resultlist = new ArrayList(); Date curdate = dto.getYmdDate(); Calendar calendar = Calendar.getInstance(); calendar.setTime(curdate); calendar.add(Calendar.DATE, 2); Date tomdate = calendar.getTime(); CriteriaQuery cq = new CriteriaQuery(DingAttendanceinfoEntity.class); cq.eq("userId", dto.getUserid()); cq.add(); cq.between("attendanceTime", curdate, tomdate); cq.add(); cq.addOrder("attendanceTime", SortDirection.asc); cq.add(); resultlist = getListByCriteriaQuery(cq, false); return resultlist; } @Override public List getDingAttendanceinfoEntitiesInOneMonth( String userid, Date curdate) throws Exception { List resultlist = new ArrayList(); // Date curdate = dto.getYmdDate(); Calendar startcalendar = Calendar.getInstance(); startcalendar.setTime(curdate); startcalendar.set(Calendar.DATE, 1); startcalendar.add(Calendar.DATE, -1); Calendar calendar = Calendar.getInstance(); calendar.setTime(curdate); calendar.add(Calendar.DATE, 32); Date tomdate = calendar.getTime(); CriteriaQuery cq = new CriteriaQuery(DingAttendanceinfoEntity.class); cq.eq("userId", userid); cq.add(); cq.between("attendanceTime", startcalendar.getTime(), tomdate); cq.add(); cq.addOrder("attendanceTime", SortDirection.asc); cq.add(); resultlist = getListByCriteriaQuery(cq, false); return resultlist; } /** * 获取考勤原始数据,分析原始数据到实时查看表 */ @Override public void signRecordSynchronization() { long start1 = System.currentTimeMillis(); // 同步所有人员的考勤记录到钉钉考勤原始信息表 1221 同步至clock表,不再做后两步 dingdingTransactionalService.signRecordSynchronization(null,null); long start2 = System.currentTimeMillis(); System.out.println("signRecordSynchronization cost: " + (start2-start1)); /*// 处理钉钉考勤原始记录表中的数据到考勤实时查看表 attendanceTempTransactionalService.attendanceTempSynchronization(null); long start3 = System.currentTimeMillis(); System.out.println("attendanceTempSynchronization cost: " + (start3-start2)); // 考勤实时查看分析考勤状态 attendanceTempTransactionalService.SetAttendanceStatusAndWarning(null); long end = System.currentTimeMillis(); System.out.println("SetAttendanceStatusAndWarning cost: " + (end-start3));*/ } /** * 初始化第二天的所有人的考勤实时查看基础数据 */ @Override public void attendanceTempInit() { Date date = new Date(new Date().getTime() + 1000 * 60 * 60 * 24); // 根据用户将每天的实时查看数据初始化 attendanceTempTransactionalService.attendanceTempInit(date); } }