钉钉考勤接口调用与OA系统数据对接(多线程版)

公司由原来的指纹打卡更换为钉钉打卡,需要钉钉和现有的OA考勤数据对接(合并钉钉打卡数据和OA上的请假,外出,出差数据),因为人数增减单线程定时任务数据抓取时间较长,做一下优化

1.线程池

class CountableThreadPool {private int threadNum;private AtomicInteger threadAlive = new AtomicInteger();private ReentrantLock reentrantLock = new ReentrantLock();private Condition condition = reentrantLock.newCondition();public CountableThreadPool(int threadNum) {this.threadNum = threadNum;this.executorService = Executors.newFixedThreadPool(threadNum);}public CountableThreadPool(int threadNum, ExecutorService executorService) {this.threadNum = threadNum;this.executorService = executorService;}public void setExecutorService(ExecutorService executorService) {this.executorService = executorService;}public int getThreadAlive() {return threadAlive.get();}public int getThreadNum() {return threadNum;}private ExecutorService executorService;public void execute(final Runnable runnable) {if (threadAlive.get() >= threadNum) {try {reentrantLock.lock();while (threadAlive.get() >= threadNum) {try {condition.await();} catch (InterruptedException e) {}}} finally {reentrantLock.unlock();}}threadAlive.incrementAndGet();executorService.execute(new Runnable() {@Overridepublic void run() {try {runnable.run();} finally {try {reentrantLock.lock();threadAlive.decrementAndGet();condition.signal();} finally {reentrantLock.unlock();}}}});}public boolean isShutdown() {return executorService.isShutdown();}public void shutdown() {executorService.shutdown();}
}

2.调用线程池,启用多线程定时任务

public class TimerTaskService extends TimerTask {CountableThreadPool threadPool;protected Logger logger = LoggerFactory.getLogger(getClass());// 待抓取队列LinkedBlockingQueue<String> taskQueue;// 抓取数量private final AtomicLong pageCount = new AtomicLong(0);//考勤数据整合public void processAttendance(String dingID_OaID_Name) {try {logger.info("OA数据同步开始!!!");AttendanceService attendanceService = (AttendanceService) ApplicationContextUtil.getBean("attendanceService");OaLeaveService oaLeaveService = (OaLeaveService) ApplicationContextUtil.getBean("oaLeaveService");OaYearLeaveService oaYearLeaveService = (OaYearLeaveService) ApplicationContextUtil.getBean("oaYearLeaveService");OaBusinessService oaBusinessService = (OaBusinessService) ApplicationContextUtil.getBean("oaBusinessService");OaGooutService oaGooutService = (OaGooutService) ApplicationContextUtil.getBean("oaGooutService");String flow_data=null;String[] split = dingID_OaID_Name.split("/");//更新oa信息String oa_id = split[1];//OAIDString ding_id = split[0];String user_name = split[2];//判断是否有OA账号if (null!=ding_id) {if (null==oa_id) {return;}else {//取OA未记录数据Map<String, Object> oaLeaveMap = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_507_copy1", "批准", "'"+"2019-08-01"+"'", "", 1, 5);Map<String, Object> oaLeaveMap1 = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_508_copy1", "批准", "'"+"2019-08-01"+"'", "", 1, 5);Map<String, Object> oaLeaveMap2 = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_512_copy1", "批准", "'"+"2019-08-01"+"'", "", 1, 5);Map<String, Object> oaYearLeaveMap = oaYearLeaveService.getOaYearLeaveList("0",oa_id,"values", "", "", "flow_data_535_copy1", "批准", "'"+"2019-08-01"+"'", "", 1, 5);Map<String, Object> oaBusinessMap = oaBusinessService.getOaBusinessList("0",oa_id, "values", "", "", "flow_data_103_copy1", "批准", "'"+"2019-08-01"+"'", "", 1, 5);Map<String, Object> oaGooutMap = oaGooutService.getOaGooutList("0",oa_id, "values", "", "", "flow_data_85_copy1", "批准", "'"+"2019-08-01"+"'", "", 1, 5);List<OaLeave> oaLeaveList =(List<OaLeave>) oaLeaveMap.get("rows");List<OaLeave> oaLeaveList1 =(List<OaLeave>) oaLeaveMap1.get("rows");List<OaLeave> oaLeaveList2 =(List<OaLeave>) oaLeaveMap2.get("rows");List<OaYearLeave> oaYearLeaveList =(List<OaYearLeave>) oaYearLeaveMap.get("rows");List<OaBusiness> oaBusinessList = (List<OaBusiness>) oaBusinessMap.get("rows");List<OaGoout> oaGooutList = (List<OaGoout>) oaGooutMap.get("rows");//请假信息if (oaLeaveList.isEmpty()&&oaLeaveList1.isEmpty()&&oaLeaveList2.isEmpty()&&oaYearLeaveList.isEmpty()&&oaBusinessList.isEmpty()&&oaGooutList.isEmpty()) {logger.info("没有请假信息!!!");}else {//构造打卡信息JSONObject getuserinfo = DingRecordSyncController.getuserinfo(ding_id);JSONArray departmentid = getuserinfo.getJSONArray("department");//部门idString department=null;if (null!=departmentid) {department = DingRecordSyncController.getdepartment(departmentid.getString(0));}//遍历请假出差外出信息if (!oaLeaveList.isEmpty()||!oaLeaveList1.isEmpty()||!oaLeaveList2.isEmpty()) {List<OaLeave> list2 = new ArrayList<OaLeave>();if (!oaLeaveList.isEmpty()) {list2=oaLeaveList;flow_data="flow_data_507";}else if (!oaLeaveList1.isEmpty()) {list2=oaLeaveList1;flow_data="flow_data_508";}else if (!oaLeaveList2.isEmpty()) {list2=oaLeaveList2;flow_data="flow_data_512";}for (int j = 0; j < list2.size(); j++) {OaLeave oaLeave = list2.get(j);String id = oaLeave.getId();String begin_date_type = oaLeave.getBegin_date_type();//开始时间的上下午String end_date_type = oaLeave.getEnd_date_type();//结束时间的上下午String begin_date = oaLeave.getBegin_date();//开始日期String end_date = oaLeave.getEnd_date();//结束日期String leave_name = oaLeave.getLeave_name();//请假类别String date_count = oaLeave.getDate_count();//请假时长if (null!=date_count&&date_count.equals("半")) {date_count="0.5";}if (null!=date_count&&date_count.equals("半天")) {date_count="0.5";}float count = Float.parseFloat(date_count);if (begin_date_type.equals("上午")) {if (count==0.5) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null));}if (flow_data.equals("flow_data_507")) {oaLeaveService.updateOaLeave(id,1);}else if (flow_data.equals("flow_data_508")) {oaLeaveService.updateOaLeave1(id,1);}else if (flow_data.equals("flow_data_512")) {oaLeaveService.updateOaLeave2(id,1);}continue;}else if (count==1) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setLeave_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));}if (flow_data.equals("flow_data_507")) {oaLeaveService.updateOaLeave(id,1);}else if (flow_data.equals("flow_data_508")) {oaLeaveService.updateOaLeave1(id,1);}else if (flow_data.equals("flow_data_512")) {oaLeaveService.updateOaLeave2(id,1);}continue;}else if (count>1) {if (end_date_type.equals("上午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setLeave_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));}if (DateUtil.compateDate(end_date, nextDate)>0) {do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setLeave_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>0);}Attendance attendance4 = attendanceService.getAttendance(ding_id, end_date);if (null!=attendance4&&attendance4.getAttendanceTime()!=null) {attendance4.setOnDuty1checkResult(leave_name);attendance4.setOffDuty1checkResult(leave_name);attendance4.setLeave_count(0.5f);attendanceService.updateAttendance(attendance4);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,end_date,null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null));}if (flow_data.equals("flow_data_507")) {oaLeaveService.updateOaLeave(id,1);}else if (flow_data.equals("flow_data_508")) {oaLeaveService.updateOaLeave1(id,1);}else if (flow_data.equals("flow_data_512")) {oaLeaveService.updateOaLeave2(id,1);}continue;}else if (end_date_type.equals("下午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setLeave_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setLeave_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>=0);if (flow_data.equals("flow_data_507")) {oaLeaveService.updateOaLeave(id,1);}else if (flow_data.equals("flow_data_508")) {oaLeaveService.updateOaLeave1(id,1);}else if (flow_data.equals("flow_data_512")) {oaLeaveService.updateOaLeave2(id,1);}continue;}}//开始时间是上午}else if (begin_date_type.equals("下午")) {if (count==0.5) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null));}if (flow_data.equals("flow_data_507")) {oaLeaveService.updateOaLeave(id,1);}else if (flow_data.equals("flow_data_508")) {oaLeaveService.updateOaLeave1(id,1);}else if (flow_data.equals("flow_data_512")) {oaLeaveService.updateOaLeave2(id,1);}continue;}else if (count==1) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null));}Attendance attendance3 = attendanceService.getAttendance(ding_id, DateUtil.getNextDate(begin_date));if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setLeave_count(0.5f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,DateUtil.getNextDate(begin_date),null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null));}if (flow_data.equals("flow_data_507")) {oaLeaveService.updateOaLeave(id,1);}else if (flow_data.equals("flow_data_508")) {oaLeaveService.updateOaLeave1(id,1);}else if (flow_data.equals("flow_data_512")) {oaLeaveService.updateOaLeave2(id,1);}continue;}else if (count>1) {if (end_date_type.equals("下午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setLeave_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>=0);if (flow_data.equals("flow_data_507")) {oaLeaveService.updateOaLeave(id,1);}else if (flow_data.equals("flow_data_508")) {oaLeaveService.updateOaLeave1(id,1);}else if (flow_data.equals("flow_data_512")) {oaLeaveService.updateOaLeave2(id,1);}continue;}else if (end_date_type.equals("上午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setLeave_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>0);Attendance attendance4 = attendanceService.getAttendance(ding_id, end_date);if (null!=attendance4&&attendance4.getAttendanceTime()!=null) {attendance4.setOnDuty1checkResult(leave_name);attendance4.setOffDuty1checkResult(leave_name);attendance4.setLeave_count(0.5f);attendanceService.updateAttendance(attendance4);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,end_date,null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null));}if (flow_data.equals("flow_data_507")) {oaLeaveService.updateOaLeave(id,1);}else if (flow_data.equals("flow_data_508")) {oaLeaveService.updateOaLeave1(id,1);}else if (flow_data.equals("flow_data_512")) {oaLeaveService.updateOaLeave2(id,1);}continue;}}//开始时间是下午}}}//年假if (!oaYearLeaveList.isEmpty()) {for (int j = 0; j < oaYearLeaveList.size(); j++) {OaYearLeave oaLeave = oaYearLeaveList.get(j);String id = oaLeave.getId();String begin_date_type = oaLeave.getBegin_date_type();//开始时间的上下午String end_date_type = oaLeave.getEnd_date_type();//结束时间的上下午String begin_date = oaLeave.getBegin_date();//开始日期String end_date = oaLeave.getEnd_date();//结束日期String leave_name = oaLeave.getLeave_name();//请假类别String date_count = oaLeave.getDate_count();//请假时长float count = Float.parseFloat(date_count);if (begin_date_type.equals("上午")) {if (count==0.5) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setYearLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,null,null,null,null,0.5f,null,null));}oaYearLeaveService.updateOaYearLeave(id,1);continue;}else if (count==1) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setYearLeave_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,1f,null,null));}oaYearLeaveService.updateOaYearLeave(id,1);continue;}else if (count>1) {if (end_date_type.equals("上午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setYearLeave_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,1f,null,null));}if (DateUtil.compateDate(end_date, nextDate)>0) {do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setYearLeave_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,1f,null,null));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>0);}Attendance attendance4 = attendanceService.getAttendance(ding_id, end_date);if (null!=attendance4&&attendance4.getAttendanceTime()!=null) {attendance4.setOnDuty1checkResult(leave_name);attendance4.setOffDuty1checkResult(leave_name);attendance4.setYearLeave_count(0.5f);attendanceService.updateAttendance(attendance4);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,end_date,null,leave_name,null,leave_name,null,null,null,null,null,0.5f,null,null));}oaYearLeaveService.updateOaYearLeave(id,1);continue;}else if (end_date_type.equals("下午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setYearLeave_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,1f,null,null));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setYearLeave_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,1f,null,null));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>=0);oaYearLeaveService.updateOaYearLeave(id,1);continue;}}//开始时间是上午}else if (begin_date_type.equals("下午")) {if (count==0.5) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setYearLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,null,0.5f,null,null));}oaYearLeaveService.updateOaYearLeave(id,1);continue;}else if (count==1) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setYearLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,null,0.5f,null,null));}Attendance attendance3 = attendanceService.getAttendance(ding_id, DateUtil.getNextDate(begin_date));if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setYearLeave_count(0.5f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,DateUtil.getNextDate(begin_date),null,leave_name,null,leave_name,null,null,null,null,null,0.5f,null,null));}oaYearLeaveService.updateOaYearLeave(id,1);continue;}else if (count>1) {if (end_date_type.equals("下午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setYearLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,null,0.5f,null,null));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setYearLeave_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,1f,null,null));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>=0);oaYearLeaveService.updateOaYearLeave(id,1);continue;}else if (end_date_type.equals("上午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setYearLeave_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,null,0.5f,null,null));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setYearLeave_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,1f,null,null));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>0);Attendance attendance4 = attendanceService.getAttendance(ding_id, end_date);if (null!=attendance4&&attendance4.getAttendanceTime()!=null) {attendance4.setOnDuty1checkResult(leave_name);attendance4.setOffDuty1checkResult(leave_name);attendance4.setYearLeave_count(0.5f);attendanceService.updateAttendance(attendance4);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,end_date,null,leave_name,null,leave_name,null,null,null,null,null,0.5f,null,null));}oaYearLeaveService.updateOaYearLeave(id,1);continue;}}//开始时间是下午}}}//出差if (!oaBusinessList.isEmpty()) {for (int j = 0; j < oaBusinessList.size(); j++) {OaBusiness oaBusiness = oaBusinessList.get(j);String id = oaBusiness.getId();String begin_date_type = oaBusiness.getBegin_date_type();//开始时间的上下午String end_date_type = oaBusiness.getEnd_date_type();//结束时间的上下午String begin_date = oaBusiness.getBegin_date();//开始日期String end_date = oaBusiness.getEnd_date();//结束日期String leave_name = "出差";//类别String date_count = oaBusiness.getDate_count();//请假时长float count = Float.parseFloat(date_count);if (begin_date_type.equals("上午")) {if (count==0.5) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setBussiness_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,null,null,null,null,null,null,0.5f));}oaBusinessService.updateBusiness(id, 1);continue;}else if (count==1) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setBussiness_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,null,null,1f));}oaBusinessService.updateBusiness(id, 1);continue;}else if (count>1) {if (end_date_type.equals("上午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setBussiness_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,null,null,1f));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setBussiness_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,null,null,1f));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>0);Attendance attendance4 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance4&&attendance4.getAttendanceTime()!=null) {attendance4.setOnDuty1checkResult(leave_name);attendance4.setOffDuty1checkResult(leave_name);attendance4.setBussiness_count(0.5f);attendanceService.updateAttendance(attendance4);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,null,null,null,null,null,null,0.5f));}oaBusinessService.updateBusiness(id, 1);continue;}else if (end_date_type.equals("下午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setBussiness_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,null,null,1f));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setBussiness_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,null,null,1f));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>=0);oaBusinessService.updateBusiness(id, 1);continue;}}//开始时间是上午}else if (begin_date_type.equals("下午")) {if (count==0.5) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setBussiness_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,null,null,null,0.5f));}oaBusinessService.updateBusiness(id, 1);continue;}else if (count==1) {Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setBussiness_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,null,null,null,0.5f));}Attendance attendance3 = attendanceService.getAttendance(ding_id, DateUtil.getNextDate(begin_date));if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setBussiness_count(0.5f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,DateUtil.getNextDate(begin_date),null,leave_name,null,leave_name,null,null,null,null,null,null,null,0.5f));}oaBusinessService.updateBusiness(id, 1);continue;}else if (count>1) {if (end_date_type.equals("下午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setBussiness_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,null,null,null,0.5f));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setBussiness_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,null,null,1f));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>=0);oaBusinessService.updateBusiness(id, 1);continue;}else if (end_date_type.equals("上午")) {String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setBussiness_count(0.5f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,null,null,null,0.5f));}do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setBussiness_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,null,null,1f));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>0);Attendance attendance4 = attendanceService.getAttendance(ding_id, end_date);if (null!=attendance4&&attendance4.getAttendanceTime()!=null) {attendance4.setOnDuty1checkResult(leave_name);attendance4.setOffDuty1checkResult(leave_name);attendance4.setBussiness_count(0.5f);attendanceService.updateAttendance(attendance4);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,null,null,null,null,null,null,05f));}oaBusinessService.updateBusiness(id, 1);continue;}}//开始时间是下午}}}//外出if (!oaGooutList.isEmpty()) {for (int j = 0; j < oaGooutList.size(); j++) {OaGoout oaGoout = oaGooutList.get(j);String id = oaGoout.getId();String begin_date_type = oaGoout.getBegin_date_type();//开始时间的上下午String end_date_type = oaGoout.getEnd_date_type();//结束时间的上下午String begin_date = oaGoout.getBegin_date();//开始日期String end_date = oaGoout.getEnd_date();//结束日期String leave_name = "外出";//类别String nextDate = DateUtil.getNextDate(begin_date);Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);if (null!=attendance2) {attendance2.setOnDuty1checkResult(leave_name);attendance2.setOnDuty2checkResult(leave_name);attendance2.setOffDuty1checkResult(leave_name);attendance2.setOffDuty2checkResult(leave_name);attendance2.setGoout_count(1f);attendanceService.updateAttendance(attendance2);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,null,1f,null));}if (DateUtil.compateDate(end_date, begin_date)>0) {do {Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {attendance3.setOnDuty1checkResult(leave_name);attendance3.setOnDuty2checkResult(leave_name);attendance3.setOffDuty1checkResult(leave_name);attendance3.setOffDuty2checkResult(leave_name);attendance3.setBussiness_count(1f);attendanceService.updateAttendance(attendance3);}else {attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,null,null,1f,null));}nextDate=DateUtil.getNextDate(nextDate);} while (DateUtil.compateDate(end_date, nextDate)>=0);}oaGooutService.updateGoout(id, 1);continue;}}}}}Attendance attendance2 = attendanceService.getAttendance(ding_id, DateUtil.getlastDate());if (null!=attendance2) {Float yearLeave_count = attendance2.getYearLeave_count();Float leave_count = attendance2.getLeave_count();String onDuty1checkResult = attendance2.getOnDuty1checkResult();String onDuty2checkResult = attendance2.getOnDuty2checkResult();Attendance attendance = DingRecordSyncController.getAttendances(ding_id);if (null!=leave_count&&leave_count==0.5) {if (null!=onDuty1checkResult&&onDuty1checkResult!="") {attendance2.setOnDuty2checkTime(attendance.getOnDuty2checkTime());attendance2.setOnDuty2checkResult(attendance.getOnDuty2checkResult());attendance2.setOffDuty2checkTime(attendance.getOffDuty2checkTime());attendance2.setOffDuty2checkResult(attendance.getOffDuty2checkResult());}else if (null!=onDuty2checkResult&&onDuty2checkResult!="") {attendance2.setOnDuty1checkTime(attendance.getOnDuty1checkTime());attendance2.setOnDuty1checkResult(attendance.getOnDuty1checkResult());attendance2.setOffDuty1checkTime(attendance.getOffDuty1checkTime());attendance2.setOffDuty1checkResult(attendance.getOffDuty1checkResult());}attendanceService.updateAttendance(attendance2);}if (null!=yearLeave_count&&yearLeave_count==0.5) {if (null!=onDuty1checkResult&&onDuty1checkResult!="") {attendance2.setOnDuty2checkTime(attendance.getOnDuty2checkTime());attendance2.setOnDuty2checkResult(attendance.getOnDuty2checkResult());attendance2.setOffDuty2checkTime(attendance.getOffDuty2checkTime());attendance2.setOffDuty2checkResult(attendance.getOffDuty2checkResult());}else if (null!=onDuty2checkResult&&onDuty2checkResult!="") {attendance2.setOnDuty1checkTime(attendance.getOnDuty1checkTime());attendance2.setOnDuty1checkResult(attendance.getOnDuty1checkResult());attendance2.setOffDuty1checkTime(attendance.getOffDuty1checkTime());attendance2.setOffDuty1checkResult(attendance.getOffDuty1checkResult());}attendanceService.updateAttendance(attendance2);}}//取钉钉打卡记录 Attendance attendance1 = DingRecordSyncController.getAttendances(ding_id);if (attendance1!=null&&attendance1.getName()!=null) {attendanceService.saveAttendance(attendance1); }} catch (Exception e) {e.printStackTrace();}finally {logger.info("OA数据同步结束!");}}@Overridepublic void run() {try {  UserService userService = (UserService) ApplicationContextUtil.getBean("userService");List<UserBean> list = userService.getuserlist();for (UserBean userBean : list) {this.taskQueue.add(userBean.getDing_id()+"/"+userBean.getUser_account()+"/"+userBean.getUser_name());}logger.info("钉钉数据抓取开始!!!");while (!Thread.currentThread().isInterrupted()) {final String request = taskQueue.poll();// 如果获取 request为空并且当前的线程采已经没有线程在运行if (request == null) {if (threadPool.getThreadAlive() == 0) {break;}} else {// 执行抓取任务threadPool.execute(new Runnable() {@Overridepublic void run() {try {processAttendance(request);logger.info(pageCount.toString());} catch (Exception e) {logger.error("process request " + request + " error", e);} finally {pageCount.incrementAndGet();}}});}}threadPool.shutdown();logger.info("钉钉数据抓取结束!!!", pageCount.get());} catch (Exception e) {e.printStackTrace();}}public TimerTaskService() {this.threadPool = new CountableThreadPool(3);this.taskQueue = new LinkedBlockingQueue<>();}
}
[源码](https://download.csdn.net/download/BinYanShao/12000832)

钉钉考勤接口调用与OA系统数据对接(多线程版)相关推荐

  1. 钉钉考勤接口调用与OA系统数据对接

    钉钉考勤接口调用与OA系统数据对接 公司由原来的指纹打卡更换为钉钉打卡,需要钉钉和现有的OA考勤数据对接(合并钉钉打卡数据和OA上的请假,外出,出差数据) 1.查看钉钉接口文档 https://din ...

  2. HQChart(C++)指标计算引擎-py接口类IHQData K线数据对接

    HQChart指标计算引擎-py接口类IHQData K线数据对接 IHQData 使用 K线接口 参数: 返回 交流 IHQData IHQData是一个行情数据调用接口类,所有指标计算用到的数据都 ...

  3. 数据同步智能化!利用ETLCloud自动化流程实现钉钉OA系统数据自动同步至数仓

    钉钉数据同步需求 钉钉是一款企业级通讯和协同办公应用软件,钉钉为企业提供包括聊天.通讯录.日程安排.考勤打卡.审批.通知公告.文件共享.会议等功能,很多企业都在使用钉钉. 很多情况下我们需要把钉钉的数 ...

  4. 如何实现高质量的系统数据对接/API接口整合集成方案?

    我们建立一个数字化系统可能会有跟别的系统进行数据对接的需要,而别人的数字化系统也有可能需要跟我们的系统进行数据对接,也可能我们开发了不同的网站,网站小应用之间需要进行数据对接.那么数据对接应该如何操作 ...

  5. JAVA实现两个系统数据对接

    前言 最近做了两个系统,现在有一个需求,需要做数据对接,这个有很多方法实现,我这里用的是接口对接.由于是第一次做这种功能,也踩了不少坑,所以在这里记录一下. 提示:以下是本篇文章正文内容,下面案例仅供 ...

  6. 免开发跨系统数据对接方案

    需求场景 由于产品业务发展,催生出了一个需求:线上平台与线下某些软件系统要实现数据对接和数据互传,并且不能影响软件系统的正常运行.其实很多互联网产品中都这样的需求,很多平台运营商吸引线下商家.客户入驻 ...

  7. 【电竞数据】接口调用范例代码-联赛数据

    联赛信息 GET /api/league 说明 该接口用来获取游戏下的联赛相关数据 当联赛信息发生变化时,破晓字节数据系统API接口会通过websocket推送变化数据,推送结构与拉取数据结构一致 当 ...

  8. 应用系统数据对接几种方案

    应用系统之间数据传输的几种方式 第一种方案:socket方式 Socket方式是最简单的交互方式.是典型才C/S交互模式.一台客户机,一台服务器. 服务器提供服务,通过IP地址和端口进行服务访问.而客 ...

  9. 对接钉钉审批_钉钉审批对接是什么-和钉钉审批对接相关的问题-阿里云开发者社区...

    关于 钉钉审批对接的搜索结果 问题 企业系统对接钉钉生成审批单,企业系统处理审批后,如何撤销钉钉审批单 公司erp系统与钉钉对接,erp发起审批后同步到钉钉生成审批实例,在erp中用户处理了审批,如何 ...

最新文章

  1. [HNOI2008 GT考试]
  2. Kali Linux 下渗透测试 | 3389 批量爆破神器 | hydra | 内网渗透测试
  3. 计算机打印机无法扫描,佳能MF4752打印机无法扫描文件怎么办?
  4. linux安装包管理(未完待续)
  5. CV新赛事:密集场景行人检测
  6. Octave入门基础
  7. Python读取文本文件
  8. 微服务升级_SpringCloud Alibaba工作笔记0013---SpringCloud Alibaba简介
  9. 如果手里有20万是放银行吃利息还是投资比较合适?
  10. day6 break continue for
  11. USB协议介绍二 传输
  12. c语言中的符号总结,C语言中的符号总结
  13. 地平线谭洪贺:AI芯片怎么降功耗?从ISSCC2017说起
  14. 海康网络摄像机的使用
  15. 【并发编程】Cond 基本用法和如何实现以及常见错误
  16. PHP实现word文档转html以及pdf
  17. python代码实现时间从12小时制到24小时制的转换
  18. 计算机教师格言座右铭,教师格言座右铭100句
  19. HBuilderX 安装教程
  20. 获取手机设备型号、系统版本、手机型号等信息

热门文章

  1. win+linux双系统实现efi共存(即通过linux启动界面切换系统)
  2. 读《深入浅出Nodejs-朴灵》笔记
  3. arctanx麦克劳林公式推导过程_半桥 LLC 基波分析和参数计算过程推导
  4. 各个认证记录及说明SRRC与CTA认证
  5. Recylerview刷新图片闪烁
  6. pikachu~~~验证码绕过(on client on server)
  7. XtraReport中改变文字方向
  8. 华为手机获取root权限
  9. 【微信小程序】 map 组件 callout 自定义气泡 (实实在在的讲解)
  10. 一键同步Elasticsearch,DataWorks数据集成同步解决方案上线!