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

     

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

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

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

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

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

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

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

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

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

    3. 页面嵌套

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

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

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

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

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

    展开全文
  • 钉钉考勤接口调用与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

    展开全文
  • 这个操作是与****系统进行数据接口的对接,本系统向****系统传递几个参数,****系统接收并返回值。 目录 post请求方式 @Service层 工具类ResultUtil pom需要添加的依赖 get请求方式 另一种 OkHttpClient 方式...

    这个操作是与****系统进行数据接口的对接,本系统向****系统传递几个参数,****系统接收并返回值。

    目录

    post请求方式

    @Service层

    工具类ResultUtil

    pom需要添加的依赖

    get请求方式

    另一种 OkHttpClient 方式


    post请求方式


    @Service层

    /*
    *
    * 预约结果查看
    * 返回操作结果
    * ResultUtil是单独封装的用来处理返回结果的一个工具类  根据自己的需求来实现吧
    *     大体三个code msg data 错误error方法 和成功的  success方法
    * */
    //    OpinionApplyResultInfoParamPojo 你要传递的参数 单独建一个实体类 下面需要用到
        public Object getOpinionApplyResult(OpinionApplyResultInfoParamPojo oaripp) throws IOException {
            if(oaripp.equals(null)||oaripp==null){
                return ResultUtil.error(-1,"请求数据为空");
            }else if(oaripp.getVehicleNo().equals(null)||(oaripp.getVehicleNo().length()<7)||oaripp.getVehicleNo()==null){
                return ResultUtil.error(-1,"车牌号格式不正确");
            }
            String key = "123456";
            String user = "test";
    //    你所需要的接口url
            String url = "http://services.sdyzgl.com/....1.0";
    // paramValue 将要传的参数拼接起来。拼接规则 讲属性名按26字母的先后拼接 P在T的前面T在V的前面
            String paramValue = oaripp.getPlateColorCode() + oaripp.getTransCertificateCode() + oaripp.getVehicleNo();
            byte[] hmac = new HmacUtils(HmacAlgorithms.HMAC_SHA_1, key).hmac(paramValue);
            //将你要传递参数(直接将实体类放进去)进行json编码 变为json格式 
            String param = JSON.toJSONString(oaripp);
            String hmacZ = Hex.encodeHexString(hmac);
            param = param.substring(0, param.length() - 1) + ",\"userCode\":\"" + user + "\",\"hmac\":\"" + hmacZ + "\"}";//转义处理
            System.out.println(param + "----param");
            //与****系统交互,获取****信息交换接口
            URL restURL = new URL(url);
            PrintWriter out = null;//输出信息
            //打开和url之间的连接
            HttpURLConnection conn = (HttpURLConnection) restURL.openConnection();
            //请求方式
            conn.setRequestMethod("POST");
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
            conn.setRequestProperty("Content-Type", "application/json");
            //设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post与get的 不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
    //  此处为post请求 故设为true 默认为 false
            conn.setDoOutput(true);
            conn.setDoInput(true);
            out = new PrintWriter(conn.getOutputStream());
            //发送请求参数即数据
            out.write(param);
            //缓冲数据
            out.flush();
            int code = conn.getResponseCode();
            System.out.println(code+"----code");
    
            InputStream is = null;
    // ****系统返回信息  将返回信息封装为一个实体类 进行json解码,这里返回的是一组数据,所以使用list
            List<ApplyRuseltBakcMessagePojo> list = new ArrayList<>();
            if (code != 200) { // 非正常响应
                System.out.println("非正常响应");
                is = conn.getErrorStream();   //获取错误
                //构造一个字符流缓存
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String str = "";
                while ((str = br.readLine()) != null) {
                    System.out.println(str + "-----------str");
    //将****系统的返回值封装为单独的ErrorParamPojo实体类,进行json解码 获得****系统返回回来的值
    //需要与****系统开发人员沟通
                    ErrorParamPojo yze = JSON.parseObject(str, ErrorParamPojo.class);
                    // 根据返回值进行返回提示信息
                    if (yze != null) {
                        is.close();
                        conn.disconnect();
                        if ("100055".equals(yze.getErrorCode())) {
                            业务处理
                        } else if ("100042".equals(yze.getErrorCode())) {
                            业务处理
                        } else if ("100204".equals(yze.getErrorCode())) {
                            业务处理
                        }
                    }
                }
            } else {
    //正常响应操作
                is = conn.getInputStream();
                //构造一个字符流缓存
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String str = "";
                while ((str = br.readLine()) != null) {
                    System.out.println(str+"----str");
    //将返回值解码为json格式
                    list = JSON.parseObject(str, ArrayList.class);
                    System.out.println(list.toString()+"----list.tostring()");
    
                    //关闭流
                    is.close();
                    //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
                    conn.disconnect();
    
                    return ResultUtil.success(list);
                }
            }
            //关闭流
            is.close();
            //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
            conn.disconnect();
            return ResultUtil.error(-1,"未知错误");
        }

     实体类、不用说。需要传啥或获取啥返回值就封装那些属性 get  set方法

    工具类ResultUtil

    public class ResultUtil {
    
        /** 执行成功 **/
        public  static Result success(Object object){
            Result result = new Result();
            result.setCode(0);
            result.setMsg("成功");
            result.setData(object);
            return result;
        }
    
        /** 执行成功  返回空对象 **/
        public  static  Result success(){
            return success(null);
        }
    
        /** 执行失败 **/
        public  static  Result error(Integer code,String msg){
            Result result = new Result();
            result.setCode(code);
            result.setMsg(msg);
            return result;
        }
    
    }
    
    
    
    
    
    
    
    
    public class Result<T> {
        /**  错误码  **/
        private Integer code;
    
        /**  提示信息 **/
        private String msg;
    
        /**  返回对象 具体内容 **/
        private T data;
    
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    }

    pom需要添加的依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.12</version>
            </dependency>
            <!-- 以上为常用的spring boot所需要的依赖-->
            <!-- 以下为fastjson json对象处理所需要的依赖-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.47</version>
            </dependency><!--commons codec-->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.11</version>
            </dependency>
        </dependencies>
    

    get请求方式

    get方式则是直接将数据放到url后面

    URL url = new URL("http://localhost:8080/Servlet/do_login.do?username=test&password=123456");

    网上的一个例子

    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    /**
     * GET请求示例
     * 
     * @author 小明
     *
     */
    public class GetDemo {
    
        public static void main(String[] args) {
            try {
                // 1. 得到访问地址的URL
                URL url = new URL(
                        "http://localhost:8080/Servlet/do_login.do?username=test&password=123456");
                // 2. 得到网络访问对象java.net.HttpURLConnection
                HttpURLConnection connection = (HttpURLConnection) url
                        .openConnection();
                /* 3. 设置请求参数(过期时间,输入、输出流、访问方式),以流的形式进行连接 */
                // 设置是否向HttpURLConnection输出
                connection.setDoOutput(false);
                // 设置是否从httpUrlConnection读入
                connection.setDoInput(true);
                // 设置请求方式
                connection.setRequestMethod("GET");
                // 设置是否使用缓存
                connection.setUseCaches(true);
                // 设置此 HttpURLConnection 实例是否应该自动执行 HTTP 重定向
                connection.setInstanceFollowRedirects(true);
                // 设置超时时间
                connection.setConnectTimeout(3000);
                // 连接
                connection.connect();
                // 4. 得到响应状态码的返回值 responseCode
                int code = connection.getResponseCode();
                // 5. 如果返回值正常,数据在网络中是以流的形式得到服务端返回的数据
                String msg = "";
                if (code == 200) { // 正常响应
                    // 从流中读取响应信息
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(connection.getInputStream()));
                    String line = null;
    
                    while ((line = reader.readLine()) != null) { // 循环从流中读取
                        msg += line + "\n";
                    }
                    reader.close(); // 关闭流
                }
                // 6. 断开连接,释放资源
                connection.disconnect();
    
                // 显示响应结果
                System.out.println(msg);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    这种方式在idea中启动服务一切正常。当使用tomcat部署项目时候,对方接口接收参数出现中文乱码问题。用了很多方式都没有解决,不知有没有大佬可以解决 ,代码中向****系统接口传参设置了 utf-8,tomcat 也设置了utf-8(server.xml 配置 这是配置的tomcat中文乱码)

    点击   另一种 OkHttpClient 方式

     

     

    展开全文
  • https通讯会自己进行数据加密,那RSA这些加密算法是要自己写?证书验签名又该怎么实现呢?求教大神
  • ERP系统与PLC数据对接方法

    千次阅读 2016-11-28 22:03:00
    ERP作为企业的信息管理系统得到广泛应用,ERP偏向于财务信息的管理,而企业的生产的作业数据大都存在于PLC等生产过程控制系统中,这样导致ERP中的财务、订单、进出货等信息无法与生产过程系统连通,从而导致生产计划...
  • 两个服务器上的数据库分别为数据库a和数据库b,这两台服务器上的数据库的表结构不一样,是两个系统的数据库,我们使用的数据库是sqlservice,请问下怎么实现这两个数据库的数据对接,希望大神们给下实现方案和思路
  • 上一种方式HttpURLConnection方式出现了点问题,就是在idea中启动服务一切正常。当时用tomcat部署项目时候,对方接口接收参数出现中文乱码问题。用了很多方式都没有解决,不知有没有大佬可以解决 引入依赖 &...
  • IT系统对接方案汇总

    千次阅读 2021-02-07 09:28:46
    如果系统之间存在权限限制或技术限制,可采用接口以保证数据的安全和对接的规范性等等,不同的场景下有不同对接方案,以下对常用的对接方案做出汇总。 技术方案 接口 接口对接方式是比较常用,且安全规范的传输...
  • 列举系统对接技术的几种常见方式

    千次阅读 2019-09-18 05:21:02
    系统对接最常见的方式是接口方式,运气好的情况下,能够顺利对接,但是接口对接方式常需花费大量时间协调各个软件厂商。 因此当前各行业数据孤岛林立,对接业务软件或者是获取软件中的数据存在较大困难,尤其是CS软件...
  • 数据对接—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
    系统对接 各个方案
  • 老版本是通过云端数据的,现在要改成通过webservice获取数据。应该怎么改哪些地方
  • 应该有很多有这个需求的,表单系统可以对接第三方接口进行数据校验,校验第三方接口的数据 比如(学校活动报名系统、成绩查询系统、身份证校验查询、游戏数据采集)
  • 如上图,这是笔者画的一个车联网数据对接示意图。TSP左边部分是主机厂相关生产管理系统,TSP右边部分是相关销售售后管理系统,TSP正上方的CP/SP代表的是所有外部资源供应商(包括MNO),TSP正下方代表的是手机端和车端...
  • 系统对接的痛点

    2019-09-22 04:46:00
    对接数据是什么? 对接数据的流向是什么? 对接数据的时效性是什么? 对接的正确性如何保证? 对接的一致性如何保证? 系统间的传递如何保证? 传递间的性能如何保证? 传递间的安全如何保证? 为了满足...
  • 费控系统对接用友NC

    千次阅读 2019-10-13 10:24:50
    费控系统对接用友NC 付款凭证同步 应用场景:在费控系统中完成支付后,将财务凭证自动同步至用友NC系统,避免二次操作,提高人效及自动化程度,保证数据一致性。 技术实现:中间件调用费控系统的资金支付单相关...
  • 信息系统的普及应用导致原有系统间的信息孤岛需要通过系统间接口进行数据交互,信息交互的接口常见有以下几种: (1)数据库交互:服务方提供表或存储过程,由调用方控制commit或rollback。 (2)文件交互:双方对请求...
  • 如果将银行的收付款单能够批量导入用友,自动生成用友的收付款凭证,我们做了多年的用友软件实施和开发工作,针对财务提出来的这种普遍的问题,我们实现了银行接口和用友对接,实现将收款单的数据按照财务的规则...
  • 大家好,最近要做一个系统平台对接的这个接口问题,第一次尝试,双方采用的http webservice对接,utf-8字符编码,返回的数据是json格式,通过对方提供的URL把数据post推送出去,有没有谁做过?求代码参考下
  • 目前普遍采用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接口的...
  • 采集各种工业设备数据,通过串口(RS485/RS232)、网口、WiFi等方式采集设备数据后,自动存入数据库,对接工业现场上层ERP、MES等应用层业务软件系统。 2方案技术架构 功能:支持西门子的plc,modbus tcp,modbus ...

空空如也

空空如也

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

不同系统数据对接方式