精华内容
下载资源
问答
  • 钉钉考勤接口调用与OA系统数据对接

    千次阅读 2019-11-18 11:32:10
    钉钉考勤接口调用与OA系统数据对接 公司由原来的指纹打卡更换为钉钉打卡,需要钉钉和现有的OA考勤数据对接(合并钉钉打卡数据和OA上的请假,外出,出差数据) 1.查看钉钉接口文档 ... 2.项目搭建引入钉钉开发SDK ...

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

    公司由原来的指纹打卡更换为钉钉打卡,需要钉钉和现有的OA考勤数据对接(合并钉钉打卡数据和OA上的请假,外出,出差数据)

    1.查看钉钉接口文档
    https://ding-doc.dingtalk.com/doc#/serverapi2/gh60vz
    详细接口说明
    2.项目搭建引入钉钉开发SDK
    SDK下载
    3.获取钉钉考勤数据存储服务器数据库(调整存储格式)
    //测试
    public static void main(String[] args) throws Exception {
    Date date = new Date();
    DateFormat format_getHours = new SimpleDateFormat(“HH:mm:ss”);
    String currentDate = new SimpleDateFormat(“yyyy-MM-dd”).format(date);
    String yesterday = getPreDayOrAfterDay(currentDate, -1);
    String workDateFrom = yesterday + " " + “01:00:00”;
    String workDateTo = yesterday + " " + “23:00:00”;
    //新逻辑
    List asList = Arrays.asList(“1”,“2”,“3”);
    List Attendances = new ArrayList();
    for (int i = 0; i < asList.size(); i++) {
    Attendance Attendance = new Attendance();
    Attendance.setUserId(asList.get(i));
    JSONObject getuserinfo = getuserinfo(asList.get(i));//获取用户详情
    String name = getuserinfo.getString(“name”);//姓名
    Attendance.setName(name);
    JSONArray departmentid = getuserinfo.getJSONArray(“department”);//部门id
    Attendance.setDepartment(getdepartment(departmentid.getString(0)));//获取部门名称
    Attendance.setAttendanceTime(yesterday);//设置打卡时间
    JSONObject Json = getattendance(asList.get(i),workDateFrom,workDateTo);//获取打卡结果
    JSONArray recordresult = Json.getJSONArray(“recordresult”);
    for (int j = 0; j < recordresult.size(); j++) {
    JSONObject record = recordresult.getJSONObject(j);
    String checkType = record.getString(“checkType”);//上下班
    String locationResult = record.getString(“locationResult”);//位置结果
    if (null!=locationResult) {
    switch (locationResult) {
    case “Normal”:
    locationResult=DingConstant.locationResult_Normal;
    break;
    case “Outside”:
    locationResult=DingConstant.locationResult_Outside;
    break;
    case “NotSigned”:
    locationResult=DingConstant.locationResult_NotSigned;
    break;
    }
    }

            	  String timeResult = record.getString("timeResult");//打卡结果
            	  if (null!=timeResult) {
    	        		switch (timeResult) {
    	  				case "Normal":
    	  					timeResult=DingConstant.timeResult_Normal;
    	  					break;
    	  				case "Early":
    	  					timeResult=DingConstant.timeResult_Early;
    	  					break;
    	  				case "Late":
    	  					timeResult=DingConstant.timeResult_Late;
    	  				case "NotSigned":
    	  					timeResult=DingConstant.timeResult_NotSigned;
    	  					break;
    	  				}
    	          }
            	  String userCheckTime = getHours(record.getString("userCheckTime"));//打卡时间
            	  String onDuty1checkTime = Attendance.getOnDuty1checkTime();
            	  String onDuty1checkResult = Attendance.getOnDuty1checkResult();
            	  String offDuty1checkResult = Attendance.getOffDuty1checkResult();
            	  String offDuty1checkTime = Attendance.getOffDuty1checkTime();
            	  String offDuty2checkResult = Attendance.getOffDuty2checkResult();
            	  String offDuty2checkTime = Attendance.getOffDuty2checkTime();
            	  String onDuty2checkResult = Attendance.getOnDuty2checkResult();
            	  String onDuty2checkTime = Attendance.getOnDuty2checkTime();
            	  if (checkType!=null) {
            		  if (checkType.equals("OnDuty")) {
            			  if (null==onDuty1checkTime&&null==onDuty1checkResult) {
        	        		  Attendance.setOnDuty1checkTime(userCheckTime);
        	        		  if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
    							
        	        			  Attendance.setOnDuty1checkResult(locationResult);	        		  
        	        		  }else {
    							
        	        			  Attendance.setOnDuty1checkResult(timeResult);	        		  
        	        		  }
        	        		  continue;
        	        	  }else if (null==onDuty2checkTime&&null==onDuty2checkResult) {
        	        		  if (format_getHours.parse(userCheckTime).getTime()<format_getHours.parse(onDuty1checkTime).getTime()) {
        	        			  Attendance.setOnDuty2checkTime(onDuty1checkTime);
        	        			  Attendance.setOnDuty2checkResult(onDuty1checkResult);	        		  
        	        			  Attendance.setOnDuty1checkTime(userCheckTime);
        	        			  if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
      								
    	    	        			  Attendance.setOnDuty1checkResult(locationResult);	        		  
    	    	        		  }else {
    								
    	    	        			  Attendance.setOnDuty1checkResult(timeResult);	        		  
    	    	        		  }
        	        		  }else {
        	        			  Attendance.setOnDuty2checkTime(userCheckTime);
    	    	        		  if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
    									
    	    	        			  Attendance.setOnDuty2checkResult(locationResult);	        		  
    	    	        		  }else {
    								
    	    	        			  Attendance.setOnDuty2checkResult(timeResult);	        		  
    	    	        		  }
        	        		  }
        	        		  continue;
        	        	  }
            		  }else if (checkType.equals("OffDuty")) {
            			  if (null==offDuty1checkTime&&null==offDuty1checkResult) {
        	        		  Attendance.setOffDuty1checkTime(userCheckTime);
        	        		  if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
    								
        	        			  Attendance.setOffDuty1checkResult(locationResult);	        		  
        	        		  }else {
    							
        	        			  Attendance.setOffDuty1checkResult(timeResult);	        		  
        	        		  }
        	        		  continue;
        	        	  }else if (null==offDuty2checkTime&&null==offDuty2checkResult) {
        	        		  if (format_getHours.parse(userCheckTime).getTime()<format_getHours.parse(offDuty1checkTime).getTime()) {
        	        			  Attendance.setOffDuty2checkTime(offDuty1checkTime);
        	        			  Attendance.setOffDuty2checkResult(offDuty1checkResult);	        		  
        	        			  Attendance.setOffDuty1checkTime(userCheckTime);
        	        			  if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
    									
    	    	        			  Attendance.setOffDuty1checkResult(locationResult);	        		  
    	    	        		  }else {
    								
    	    	        			  Attendance.setOffDuty1checkResult(timeResult);	        		  
    	    	        		  }
        	        		  }else {
        	        			  Attendance.setOffDuty2checkTime(userCheckTime);
    	    	        		  if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
    									
    	    	        			  Attendance.setOffDuty2checkResult(locationResult);	        		  
    	    	        		  }else {
    								
    	    	        			  Attendance.setOffDuty2checkResult(timeResult);	        		  
    	    	        		  }
        	        		  }
        	        		  continue;
        	        	  }
            		  }
            	  }
            	  
              }
              System.out.println(Attendance.toString());
              Attendances.add(Attendance);
    	  }
    	  
    	  
    }
    

    4.合并OA数据
    public void run() {
    try {
    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”);
    UserService userService = (UserService) ApplicationContextUtil.getBean(“userService”);

    		List<UserBean> list = userService.getuserlist();
    		String flow_data=null;
    		
    		//更新oa信息
    		for (int i = 0; i < list.size(); i++) {
    			UserBean userBean = list.get(i);
    			String oa_id = userBean.getUser_account();//OAID
    			String ding_id = userBean.getDing_id();//dingdingID
    			String user_name = userBean.getUser_name();
    			//判断是否有OA账号
    		if (null!=ding_id) {
    			if (null==oa_id) {
    				continue;
    			}else {
    				//取OA未记录数据
    				Map<String, Object> oaLeaveMap = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_507", "批准", "'"+"2019-08-01"+"'", "", 1, 5);
    				Map<String, Object> oaLeaveMap1 = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_508", "批准", "'"+"2019-08-01"+"'", "", 1, 5);
    				Map<String, Object> oaLeaveMap2 = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_512", "批准", "'"+"2019-08-01"+"'", "", 1, 5);
    				Map<String, Object> oaYearLeaveMap = oaYearLeaveService.getOaYearLeaveList("0",oa_id,"values", "", "", "flow_data_535", "批准", "'"+"2019-08-01"+"'", "", 1, 5);
    				Map<String, Object> oaBusinessMap = oaBusinessService.getOaBusinessList("0",oa_id, "values", "", "", "flow_data_103", "批准", "'"+"2019-08-01"+"'", "", 1, 5);
    				Map<String, Object> oaGooutMap = oaGooutService.getOaGooutList("0",oa_id, "values", "", "", "flow_data_85", "批准", "'"+"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()) {
    					continue;
    				}else {
    					//构造打卡信息
    					  JSONObject getuserinfo = DingRecordSyncController.getuserinfo(ding_id);
    					  JSONArray departmentid = getuserinfo.getJSONArray("department");//部门id
    					  String department=null;
    					  if (null==departmentid) {
    						  continue;
    					  }else {
    						  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;
    									}
    								}//开始时间是下午
    							}
    						}
    					}
    

    5.添加定时任务
    public class TimerManager {
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
    public TimerManager() {
    Calendar calendar = Calendar.getInstance();

    calendar.set(Calendar.HOUR_OF_DAY, 02);
    calendar.set(Calendar.MINUTE, 10);
    calendar.set(Calendar.SECOND, 00);

    Date date = calendar.getTime();
    if (date.before(new Date())) {
    date = this.addDay(date, 1);
    }
    Timer timer = new Timer();
    TimerTaskService task = new TimerTaskService();
    timer.schedule(task, date, PERIOD_DAY);
    }

    private Date addDay(Date date, int num) {
    Calendar startDT = Calendar.getInstance();
    startDT.setTime(date);
    startDT.add(Calendar.DAY_OF_MONTH, num);
    return startDT.getTime();
    }
    }
    Copyright © 2019 shaoyanbin All Rights Reserved

    展开全文
  • 一个商城系统和多个卖家系统 现在需要做卖家在商城中有了新的订单时 在该卖家系统中也生成一条订单信息 这个数据对接的过程需要用啥技术解决 给点思路
  • 应用系统数据对接几种方案

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

    应用系统之间数据传输的几种方式


    第一种方案:socket方式


       Socket方式是最简单的交互方式。是典型才C/S交互模式。一台客户机,一台服务器。
    服务器提供服务,通过IP地址和端口进行服务访问。而客户机通过连接服务器指定的端口进行消息交互。
    其中传输协议可以是TCP/UDP 协议。而服务器和约定了请求报文格式和响应报文格式。
    如图一所示




    目前我们常用的http调用,java远程调用,webservices 都是采用的这种方式,只不过不同的就是传输协议以及报文格式。
    这种方式的优点:
    1 易于编程,目前java提供了多种框架,屏蔽了底层通信细节以及数据传输转换细节。
    2 容易控制权限。通过传输层协议https,加密传输的数据,使得安全性提高 
    3 通用性比较强,无论客户端是.net架构,java,python 都是可以的。尤其是webservice规范,
     使得服务变得通用
    这种方式的缺点:
    1 服务器和客户端必须同时工作,当服务器端不可用的时候,整个数据交互是不可进行。
    2 当传输数据量比较大的时候,严重占用网络带宽,可能导致连接超时。使得在数据量交互的时候,服务变的很不可靠。


    第二种方案:ftp/文件共享服务器方式

    对于大数据量的交互,采用这种文件的交互方式最适合不过了。系统A和系统B约定文件服务器地址,文件命名规则,文件内容格式等内容,通过上传文件到文件服务器进行数据交互。
    文件命名规则,文件内容格式等内容,通过上传文件到文件服务器进行数据交互。


    最典型的应用场景是批量处理数据:例如系统A把今天12点之前把要处理的数据生成到一个文件,
    系统B第二天凌晨1点进行处理,处理完成之后,把处理结果生成到一个文件,系统A 12点在进行
    结果处理。这种状况经常发生在A是事物处理型系统,对响应要求比较高,不适合做数据分析型
    的工作,而系统B是后台系统,对处理能力要求比较高,适合做批量任务系统。

    这种方式的优点:
    1 在数据量大的情况下,可以通过文件传输,不会超时,不占用网络带宽。 
    2 方案简单,避免了网络传输,网络协议相关的概念。
    这种方案的缺点:
    1 不太适合做实时类的业务  
    2 必须有共同的文件服务器,文件服务器这里面存在风险。因为文件可能被篡改,删除,或者存在泄密等。  
    3 必须约定文件数据的格式,当改变文件格式的时候,需要各个系统都同步做修改。

    第三种方案:数据库共享数据方式

    系统A和系统B通过连接同一个数据库服务器的同一张表进行数据交换。当系统A请求系统B
    处理数据的时候,系统A Insert一条数据,系统B select 系统A插入的数据进行处理。


    这种方式的优点:
    1 相比文件方式传输来说,因为使用的同一个数据库,交互更加简单。  
    2由于数据库提供相当做的操作,比如更新,回滚等。交互方式比较灵活, 而且通过数据库的事务机制,可以做成可靠性的数据交换。
    这种方式的缺点:
    1 当连接B的系统越来越多的时候,由于数据库的连接池是有限的,
    导致每个系统分配到的连接不会很多,当系统越来越多的时候,可能导致无可用的数据库连接

    2 一般情况,来自两个不同公司的系统,不太会开放自己的数据库给对方连接,因为这样会有安全性影响

    第四种方案:message方式

    Java消息服务(Java Message Service)是message数据传输的典型的实现方式。
    系统A和系统B通过一个消息服务器进行数据交换。系统A发送消息到消息服务器,
    如果系统B订阅系统A发送过来的消息,消息服务器会消息推送给B。双方约定消
    息格式即可。目前市场上有很多开源的jms消息中间件,比如  ActiveMQ, OpenJMS 。


    这种方式的优点:
    1 由于jms定义了规范,有很多的开源的消息中间件可以选择,而且比较通用。接入起来相对也比较简单  
    2 通过消息方式比较灵活,可以采取同步,异步,可靠性的消息处理,消息中间件也可以独立出来部署。
    这种方式的缺点:
    1 学习jms相关的基础知识,消息中间件的具体配置,以及实现的细节对于开发人员来说还是有一点学习成本的  
    2 在大数据量的情况下,消息可能会产生积压,导致消息延迟,消息丢失,甚至消息中间件崩溃。


    下面具体来分析一个场景,来看看系统之间数据传输的应用  场景 目前业务人员需要导入一个   大文件到系统A,

    系统A保存文件信息,而文件里面的明细信息需要导入到系统B进行分析,当系统B分析完成之后,

    需要把分析结果通知系统A。


    A 系统A先保存文件到文件服务器。
    B 系统A 通过webservice 调用系统B提供的服务器,把需要处理的文件名发送到系统B。
    由于文件很大,需要处理很长时间,所以B不及时处理文件,而是保存需要处理的文件
    名到数据库,通过后台定时调度机制去处理。所以B接收请求成功,立刻返回系统A成功
    C 系统B定时查询数据库记录,通过记录查找文件路径,找到文件进行处理。这个过程很长。 
    D 系统B处理完成之后发送消息给系统A,告知系统A文件处理完成。 

    E 系统A 接收到系统B请求来的消息,进行展示任务结果

    转自:http://blog.csdn.net/yanmh007/article/details/78590409

    展开全文
  • https通讯会自己进行数据加密,那RSA这些加密算法是要自己写?证书验签名又该怎么实现呢?求教大神
  • 从理论上来说,大数据分析应用,接入不同数据源的数据,搭建大数据模型,对数据进行多角度的深度发掘,可以应用在各行各业。 通常,我们提及的大数据,即指数据量巨大,也指数据来源众多。不难理解,数据源是大数据...

    从理论上来说,大数据分析应用,接入不同数据源的数据,搭建大数据模型,对数据进行多角度的深度发掘,可以应用在各行各业。
    通常,我们提及的大数据,即指数据量巨大,也指数据来源众多。不难理解,数据源是大数据应用的“基础设施”,没有数据就不会有大数据,就没有人工智能,也没有机器学习、深度挖掘等,包括数据层面的应用。
    现今大数据应用分析的真实情况何如?
    现阶段的实践应用发现,因为不同的数据被存放在不同的软件系统中,数据存在的数据库属于后台,形成一个个数据孤岛,比如淘宝、京东、银行系统、社保系统、各企业部门软件系统等数据库里面,数据资源犹如一潭潭相互隔离的“死水”,没有形成有效的流动互通,数据被困在孤岛(软件)内,缺乏生机。在这里插入图片描述
    例如在一个产品生产类企业中,存在着多个不同的部门,如采购部门、生产部门、销售部门、研发部门等。原本各部门之间应该互通信息共同制定生产计划,如果信息不互通的话,可能会出现采购部门不考虑生产部门的需要盲目采购等不利于企业正常发展的操作。在这个环境中,各独立部门即不同的信息孤岛。
    例子很小,但不难看出,要想大数据的价值真正被发挥与体系,首先要打破数据孤岛的局限性。
    如何打破数据孤岛,完成不同软件之间的数据对接?
    传统打通数据孤岛的方式是多采用接口方式,即与原来的软件厂商协调接口,从软件系统的数据库调取数据,实现跨软件系统的数据对接,这一方法存在三大问题:
    第一、成本高。原软件厂商掌握数据库权限和数据字典,获取数据只能请求软件厂商开放接口,原软件厂商占据绝对话语权,所以现实中往往会出现接口费用高的情况。
    第二、耗时长。如果因为原软件厂商倒闭,或原软件系统开发团队离职,数据字典丢失,获取数据要研究分析数据库,是一项高时间、高人力成本的事情。
    第三、协调难。不同软件系统分属不同软件,如果涉及软件系统多,则需要逐一找到各软件厂商协调配合,难度可想而知。
    数据采集获取的市场需求大,既然找软件厂商开发接口打破数据孤岛,存在获取难度大。可否另辟蹊径,避开软件厂商,不用考虑数据库,直接从客户端界面寻求采集对接数据的方法?在这里插入图片描述
    因为几乎所有有价值的数据都会展示给人看,即有价值数据几乎都会在软件系统的客户端界面让人看到,比如我们打开客户端软件、打开网站就能直接看到、找到数据,我们要调取数据,其实不需要通过软件厂商开放接口,直接一个用户名和密码,就可以直接采集、调阅、存储、分析等。
    101数据采集基于该思维方式,进行产品研发与设计。使用101数据采集从软件界面直接采集软件系统的数据,并开放各种API接口,解决不同软件系统数据对接问题,不需要原软件厂商的配合,不通过数据库,也避免了传统解决方法接口协调对接困难。加之其兼容性很强,Windows平台运行的软件系统几乎都适用,不需要高安全权限,不需要改动原有软件系统,有客户端软件的用户账号登录权限即可,无论是技术问题还是商务问题,都得到了很好的解决。

    展开全文
  • 呼叫中心接口对接的方式多样,主要分为三类,此篇文章主要分析这三种方式的优缺点,企业可以根据实际情况考虑和呼叫中心对接的方式。 1.通过直接操作数据库的方式,将对方指定的数据导入呼叫中心系统。 为安全性和...

     

    呼叫中心接口对接的方式多样,主要分为三类,此篇文章主要分析这三种方式的优缺点,企业可以根据实际情况考虑和呼叫中心对接的方式。

    1. 通过直接操作数据库的方式,将对方指定的数据导入呼叫中心系统。

    为安全性和数据完整性的考虑,最好由对方系统技术人员提供数据源。此方式往往用于对数据时效性要求不高的场景。

    优点:工作量相对较小、效率较高。

    缺点:灵活性不好,对数据库技术要求高。

    2.通过程序接口进行数据交互

    双方协商数据对接方式和接口,出具开发文档,由双方人员在彼此系统内按接口要求编写程序,以实现数据对接。此方式往往于对数据时效性要求高或数据有双向交互的场景。

    优点:方便灵活,可进行复杂的业务处理。

    缺点:工作量较大,集成调试难度大。

    3. 页面嵌套

    当第三方系统已无技术支持、无人了解和维护时。迫不得已才使用的方法。但仍然会有登陆和跨域的问题。

    优点:工作量小、不需要对方专业的技术人员支持。

    缺点:灵活性差、用户体验不好。

    这几种呼叫中心对接方式,都有各自的优缺点。普遍的都是使用这三种,技术要不停的更新,才能研发出更多更适合的呼叫中心接口,便利每一个企业,让呼叫中心和各大企业的通讯连接,让世界心连心。

    转载于:https://www.cnblogs.com/babaihu/p/10622704.html

    展开全文
  • ERP系统与PLC数据对接方法

    千次阅读 2016-11-28 22:03:00
    ERP作为企业的信息管理系统得到广泛应用,ERP偏向于财务信息的管理,而企业的生产的作业数据大都存在于PLC等生产过程控制系统中,这样导致ERP中的财务、订单、进出货等信息无法与生产过程系统连通,从而导致生产计划...
  • 两个服务器上的数据库分别为数据库a和数据库b,这两台服务器上的数据库的表结构不一样,是两个系统的数据库,我们使用的数据库是sqlservice,请问下怎么实现这两个数据库的数据对接,希望大神们给下实现方案和思路
  • 数据对接—kettle使用之一

    千次阅读 2018-03-20 17:36:50
    转载自:https://yq.aliyun.com/articles/38089?spm=a2c4e.11163080.searchblog.28.1a6a2ec1P1lHzh需求: 你有没有遇到过不同数据库之间数据对接的需求,比如:mysql数据库里的数据要保存到oracle数据库里,或者是...
  • 系统对接 各个方案

    万次阅读 2015-11-26 11:53:22
    系统对接 各个方案
  • IT系统对接方案汇总

    千次阅读 2021-02-07 09:28:46
    如果系统之间存在权限限制或技术限制,可采用接口以保证数据的安全和对接的规范性等等,不同的场景下有不同对接方案,以下对常用的对接方案做出汇总。 技术方案 接口 接口对接方式是比较常用,且安全规范的传输...
  • 这个操作是与****系统进行数据接口的对接,本系统向****系统传递几个参数,****系统接收并返回值。 目录 post请求方式 @Service层 工具类ResultUtil pom需要添加的依赖 get请求方式 另一种 OkHttpClient 方式...
  • 系统对接最常见的方式是接口方式,运气好的情况下,能够顺利对接,但是接口对接方式常需花费大量时间协调各个软件厂商。 除了软件接口,是否还有其他方式,小编总结了几种常见的数据采集技术供大家参考...
  • 应该有很多有这个需求的,表单系统可以对接第三方接口进行数据校验,校验第三方接口的数据 比如(学校活动报名系统、成绩查询系统、身份证校验查询、游戏数据采集)
  • 如上图,这是笔者画的一个车联网数据对接示意图。TSP左边部分是主机厂相关生产管理系统,TSP右边部分是相关销售售后管理系统,TSP正上方的CP/SP代表的是所有外部资源供应商(包括MNO),TSP正下方代表的是手机端和车端...
  • 费控系统对接用友NC

    千次阅读 2019-10-13 10:24:50
    费控系统对接用友NC 付款凭证同步 应用场景:在费控系统中完成支付后,将财务凭证自动同步至用友NC系统,避免二次操作,提高人效及自动化程度,保证数据一致性。 技术实现:中间件调用费控系统的资金支付单相关...
  • 大家好,最近要做一个系统平台对接的这个接口问题,第一次尝试,双方采用的http webservice对接,utf-8字符编码,返回的数据是json格式,通过对方提供的URL把数据post推送出去,有没有谁做过?求代码参考下
  • 系统对接的痛点

    2019-09-22 04:46:00
    对接数据是什么? 对接数据的流向是什么? 对接数据的时效性是什么? 对接的正确性如何保证? 对接的一致性如何保证? 系统间的传递如何保证? 传递间的性能如何保证? 传递间的安全如何保证? 为了满足...
  • 目前普遍采用SSL协议中相关算法进行传输层的加密,通常是对称的摘要算法(配合证书通过https进行数据对接),或者使用VPN(IPSEC VPN、SSL VPN、MPLS VPN)进行传输甚至专用电路MSTP。 2. 身份认证 目前普遍...
  • 如果将银行的收付款单能够批量导入用友,自动生成用友的收付款凭证,我们做了多年的用友软件实施和开发工作,针对财务提出来的这种普遍的问题,我们实现了银行接口和用友对接,实现将收款单的数据按照财务的规则...
  • 如何使用数据接口平台对接天气数据前言找到合适的数据平台接口的对接测试接口购买接口编写服务端代码 前言 在制作天气查询小程序的过程中,最核心的就是天气的数据,这些数据在各大天气网都能找到,但是不能被我们小...
  • 多个单体软件的应用,肯定就会涉及到不同软件直接数据对接的问题。这次计划应用的电子采购系统也同样遇到了这个问题,在这夜里与大家共同探讨一下系统数据对接的问题。 由于历史原因,原有应用的财务系统采用了...
  • OA系统与eHR系统对接方案
  • 医院叫号系统与his系统对接(二)

    千次阅读 2019-03-26 16:52:05
    1.要和his系统信息对接 但人家厂家又不给提供接口,只能自己写,真心想直接刷表 ,走形式: 首先得写一个单独的webservice 提供数据,供此项目调用,没写过,简单查了一些资料了解:WebService接口与HTTP接口的...
  • 目录: 正文:一、 对接前1、 明确对接目的 系统对接往往是由一方发起(发起方),另一方配合(配合方)协作的过程,在系统对接的最开始,需要由发起方阐述清楚此次对接的目的,然后双方就目的没有异议的话,...
  • 上一种方式 HttpURLConnection方式 出现了点问题,就是在idea中启动服务一切正常。当时用tomcat部署项目时候,对方接口接收参数出现中文...与其他系统接口对接(java),json格式数据传递···HttpURLConnection方式
  • WMS系统对接OMS接口经验

    万次阅读 2016-08-04 13:38:55
    WMS对接OMS是实现电商平台重要的一环,这里将本人从WMS对接OMS过程中好的经验进行一个简单的总结。本篇以库存同步为例: 1.定义规范 对外接口处理:严格定义接口说明,调用双方接口提供方和调用方。 内部逻辑处理:...
  • 泛微OA对接费控系统

    千次阅读 2019-10-13 10:26:26
    泛微OA对接费控系统 待付款的单据信息同步 应用场景:把泛微OA中已经完成审批、处于待支付状态的日常报销单、差旅报销单、合同付款单同步至费控系统,出纳可以在费控系统中直接发起支付,无需手工录入资金支付单。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,555
精华内容 37,422
关键字:

不同系统数据对接