要做的東西很莫名其妙 可以說是數據互通的一個接口吧 當本地有表單提交后 處理一下數據 發送給另一個公司的接口
在表單提交的存庫的controller里 直接處理數據 封裝 並發送就完事了 .
然而領導叫我寫一個接口...接收數據 處理 並發送. 到最后又改成用觸發器的方式 然而寫觸發器的並不會用它發送http請求 我只能用Spring的定時任務 讀取數據庫的更新狀態 並且處理數據 發送到那個公司的接口里
這是httpclient的示例
1 public class HttpClinet { 2 3 public static String doPost(Object object ) { 4 5 String responseJson = null; 6 //獲得http客戶端 7 CloseableHttpClient httpClient = HttpClientBuilder.create().build(); 8 //創建post請求 9 //處理參數 10 String uri = null; 11 try{ 12 uri ="http://10.145.1.12:80/promo/api/approval/todoItem?sourceID=XZBZ&secretKey=OHzwIVM6"; 13 14 15 }catch (Exception e){ 16 e.printStackTrace(); 17 } 18 19 HttpPost httpPost = new HttpPost(uri); 20 21 22 //將對象轉換成json字符串 然后存入entity中 請求body 23 System.out.println(JSON.toJSONString(object)); 24 StringEntity entity = new StringEntity(JSON.toJSONString(object),"UTF-8"); 25 26 //將json字符串放入請求body中 27 httpPost.setEntity(entity); 28 29 //設置請求頭 30 httpPost.setHeader("Content-Type","application/json;charset=utf-8"); 31 32 //獲取response模型 33 34 CloseableHttpResponse response = null; 35 try { 36 //發送post請求后 由response模型接收 37 response = httpClient.execute(httpPost); 38 //從響應模型中獲取body 39 HttpEntity responseEntity = response.getEntity(); 40 41 42 responseJson = EntityUtils.toString(responseEntity); 43 44 if(responseEntity != null){ 45 System.out.println("相應內容為:" + responseJson); 46 } 47 }catch (Exception e){ 48 e.printStackTrace(); 49 }finally { 50 try { 51 if (httpClient != null){ 52 httpClient.close(); 53 }if (response != null){ 54 response.close(); 55 } 56 }catch (Exception e){ 57 e.printStackTrace(); 58 } 59 } 60 return responseJson; 61 62 } 63 }
這是定時任務(非quartz)
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <!-- mybatis配置 --> <import resource="classpath:applicationContext-mybatis.xml"/> <task:annotation-driven /> <context:component-scan base-package="com.litsoft.workflowApi.task"/>
任務的具體方法
@Component public class SendDataTask { @Autowired WorkFlowService workFlowServiceImpl; //首次推送待審 @Scheduled(cron = "0 */1 * * * ?") // 間隔一分鍾執行 public void taskCycle() throws UnsupportedEncodingException { //第一次推送任務(產生任務),產生新任務則產生審批人,還需要取消掉沒有認領任務的審批人的消息 List<ToDoTaskModel> list = workFlowServiceImpl.getToDoTaskInfoBySendStatus("0","100"); ToDoTaskModel toDoTaskModel = new ToDoTaskModel(); for (int i = 0; i < list.size(); i++) { toDoTaskModel = list.get(i); //自拼title //根據workflowID 判斷拼接url String taskID = toDoTaskModel.getTaskID(); String realTaskID = ChangeTaskIDUitl.changeTaskIDUitl(taskID); String workflowID = toDoTaskModel.getWorkflowID(); String docID = toDoTaskModel.getDocID(); String title = "您有一條新的待審任務" + toDoTaskModel.getTodoTitle() +"等待審批"; String taskStatus = "1"; String submitorID = toDoTaskModel.getSubmitorID(); String loginName = workFlowServiceImpl.getLoginName(submitorID); String submitorName = toDoTaskModel.getSubmitorName(); String submitDateTime = toDoTaskModel.getSubmitDateTime(); String openUrl = null; String beforeUrl = "http://oa20.cctv.com/"; String afterUrl = "/myWork/workWait/gwWeChatWait.do?instanceId="; //5合同 if(workflowID.equals("5")){ openUrl = beforeUrl + "HT_WeChat" + afterUrl +docID +"&workflowId="+workflowID; }else{ openUrl = beforeUrl + "GW_WeChat" + afterUrl +docID +"&workflowId="+workflowID; } String sendStatus = toDoTaskModel.getSendStatus(); //查詢審批人的真實ID //根據docid 和taskstatus =40 來查審批者的submitorID 然后根據這個來查真實工號 //獲取數據庫查詢的 當前審批層級信息 List<ThisLevelInfoModel> tlist = toDoTaskModel.getThisLevelInfoList(); //new一個移動端要的格式的模型 List<ApproverPOJO> approverList = new ArrayList<ApproverPOJO>(); ApproverPOJO approverPOJO = new ApproverPOJO(); for (int j = 0; j < tlist.size(); j++) { String realApproverID = workFlowServiceImpl.getLoginName(tlist.get(j).getApproverID()); approverPOJO.setDocID(tlist.get(j).getDocID()); approverPOJO.setApproverName(tlist.get(j).getApproverName()); approverPOJO.setApproverID(realApproverID); approverList.add(approverPOJO); } //ToDoTaskPOJO里的最高層對象(list(模型)) ThisLevelInfoPOJO thisLevelInfoPOJO = new ThisLevelInfoPOJO(); thisLevelInfoPOJO.setApproverList(approverList); ToDoTaskPOJO toDoTaskPOJO = new ToDoTaskPOJO(realTaskID,workflowID,docID,title,taskStatus, loginName,submitorName,submitDateTime,openUrl,sendStatus,thisLevelInfoPOJO); JSONObject jsonObject= JSONObject.fromObject(toDoTaskPOJO); String jsonStr = HttpClinet.doPost(jsonObject); JSONObject jsonCode = JSONObject.fromObject(jsonStr); if("0".equals(jsonCode.get("errCode"))) { //這要加判斷? 是否是終審人? 條件:提交人工號=審核人工號時 該審批層級未最終審批???? //或者終審層級 有沒有審核人 如果沒有 移動端返回錯誤碼 if (workFlowServiceImpl.isFirstSend() == 1) { workFlowServiceImpl.updateSendStatus("2", taskID); }else{ workFlowServiceImpl.updateSendStatus("1", taskID);} }else if("當前層級待審人不能為空".equals(jsonCode.get("errDesc"))){ workFlowServiceImpl.updateSendStatus("1", taskID); } /*_____________________________________________________________________________________*/ //查詢舊表該docID下的所有taskID 並將(taskID和docID)插入新表 //先查詢docID下所有的taskID List<String> taskIDList = new ArrayList<String>(); taskIDList = workFlowServiceImpl.selectAllByDocID(docID); for (int j = 0; j < taskIDList.size(); j++) { //想新表插入所有taskID和docID workFlowServiceImpl.creatAllInfo(taskIDList.get(j), docID); } TaskStatusPOJO taskStatusPOJO = new TaskStatusPOJO(); //查詢新表和舊表 對比 舊表不存在二新表存在的taskID 通過第二個url推送給WeChat端,刪掉消息 List<String> invalidList = new ArrayList<String>(); invalidList = workFlowServiceImpl.SelectInvalidApprover(); String invalidTaskID = null; for (int j = 0; j < invalidList.size(); j++) { invalidTaskID = ChangeTaskIDUitl.changeTaskIDUitl(invalidList.get(j)); taskStatusPOJO.setTaskID(invalidTaskID); taskStatusPOJO.setTaskStatus("2"); JSONObject jsonObj= JSONObject.fromObject(taskStatusPOJO); HttpSecondSend.doPost(jsonObj); } } //第二個接口 告訴當前待辦人審批完結 List<TaskStatusPOJO> secondList = workFlowServiceImpl.getNewStatus("1","100"); TaskStatusPOJO taskStatusPOJO = new TaskStatusPOJO(); for (int i = 0; i < secondList.size(); i++) { String dID = secondList.get(i).getTaskID(); String docID = secondList.get(i).getOnlyDocID(); String realTaskID =ChangeTaskIDUitl.changeTaskIDUitl(workFlowServiceImpl.getTrueTaskID(docID)); taskStatusPOJO.setTaskID(realTaskID); taskStatusPOJO.setTaskStatus("2"); JSONObject jsonObject= JSONObject.fromObject(taskStatusPOJO); String Str = HttpSecondSend.doPost(jsonObject); JSONObject json = JSONObject.fromObject(Str); if ("0".equals(json.get("errCode"))) { workFlowServiceImpl.updateSendStatus("2", dID); } } } }
其實這個東西很簡單 只是需求變三變 從提交表單給我發數據 到用觸發器給我發http請求(json串 自己處理數據) 再到最后 我只能去數據庫自己查 自己處理數據 自己發
並且 里邊的業務邏輯 超級煩人 我剛到並不熟悉 中間處理數據 和實現 待辦事項完結的 哪個字段 廢了好久 其實這個任務真正完成的時間 也就是三天,包括狂加班