订单处理流程

chengzhenyu 8 years ago
parent
commit
fc2a05ec29

+ 1 - 0
app/src/main/java/ai/pai/lensman/activities/FeedbackActivity.java

@@ -90,6 +90,7 @@ public class FeedbackActivity extends BaseActivity implements View.OnClickListen
90 90
         }
91 91
         params.put("user_id",userId);
92 92
         params.put("feedback",feedback);
93
+        params.put("src",String.valueOf(1));
93 94
         new HttpPostTask(params).executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.FEEDBACK_URL);
94 95
         Toast.makeText(this,R.string.thank_feedback,Toast.LENGTH_SHORT).show();
95 96
         finish();

+ 225 - 14
app/src/main/java/ai/pai/lensman/service/OrderDealService.java

@@ -2,19 +2,38 @@ package ai.pai.lensman.service;
2 2
 
3 3
 import android.app.Service;
4 4
 import android.content.Intent;
5
+import android.os.AsyncTask;
5 6
 import android.os.Binder;
6 7
 import android.os.IBinder;
7 8
 
8 9
 import com.android.common.executors.ThreadExecutor;
10
+import com.android.common.utils.LogHelper;
9 11
 
12
+import org.json.JSONArray;
13
+import org.json.JSONObject;
14
+
15
+import java.io.File;
16
+import java.io.FileOutputStream;
17
+import java.io.InputStream;
18
+import java.net.HttpURLConnection;
19
+import java.net.URL;
20
+import java.util.ArrayList;
10 21
 import java.util.HashMap;
11 22
 
12 23
 import ai.pai.lensman.bean.OrderBean;
13
-import ai.pai.lensman.db.DBService;
14 24
 import ai.pai.lensman.db.Preferences;
25
+import ai.pai.lensman.utils.BoxUrlContainer;
26
+import ai.pai.lensman.utils.Constants;
15 27
 import ai.pai.lensman.utils.HttpPostTask;
28
+import ai.pai.lensman.utils.UrlContainer;
29
+
30
+public class OrderDealService extends Service {
31
+
32
+    private ArrayList<OrderBean> orderList;
33
+
34
+    private ArrayList<OrderBean> failedOrderList;
16 35
 
17
-public class OrderDealService extends Service{
36
+    private static final String TAG = "czy";
18 37
 
19 38
     @Override
20 39
     public IBinder onBind(Intent intent) {
@@ -23,46 +42,238 @@ public class OrderDealService extends Service{
23 42
 
24 43
     @Override
25 44
     public int onStartCommand(Intent intent, int flags, int startId) {
45
+        if(!isQueueEmpty()){
46
+            return START_STICKY;
47
+        }
26 48
         startQuery();
27 49
         return START_STICKY;
28 50
     }
29 51
 
30
-    private void startQuery(){
31
-        HashMap<String,String> params = new HashMap<>();
52
+    private void startQuery() {
53
+        HashMap<String, String> params = new HashMap<>();
32 54
         params.put("user_id", Preferences.getInstance().getLensManId());
33
-        new HttpPostTask(params){
34
-            OrderBean orderBean;
55
+        new HttpPostTask(params) {
56
+
35 57
             @Override
36 58
             protected boolean parseResponse(String response) {
37
-                orderBean = new OrderBean();
38
-                //TODO
39
-                return super.parseResponse(response);
59
+                LogHelper.d(TAG, "startQuery order list = " + response);
60
+                try {
61
+                    JSONObject json = new JSONObject(response);
62
+                    int status = json.getInt("status");
63
+                    if (status == 200) {
64
+                        JSONObject data = json.getJSONObject("data");
65
+                        JSONArray orders = data.getJSONArray("files");
66
+                        if (orders != null && orders.length() > 0) {
67
+                            orderList = new ArrayList<OrderBean>();
68
+                            for (int k = 0; k < orders.length(); k++) {
69
+                                JSONObject orderObj = orders.getJSONObject(k);
70
+                                OrderBean bean = new OrderBean();
71
+                                //TODO
72
+                                orderList.add(bean);
73
+                            }
74
+                        }
75
+                        return true;
76
+                    }
77
+                } catch (Exception e) {
78
+                    e.printStackTrace();
79
+                }
80
+                return false;
40 81
             }
41 82
 
42 83
             @Override
43 84
             protected void onPostSuccess() {
44 85
                 super.onPostSuccess();
45
-                onNewOrderArrived(orderBean);
86
+                dealOrder();
46 87
             }
47 88
 
48 89
             @Override
49 90
             protected void onPostFail() {
50 91
                 super.onPostFail();
51 92
             }
52
-        }.executeOnExecutor(ThreadExecutor.getInstance().getExecutor());
93
+        }.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.QUERY_ORIGIN_ORDER_URL);
94
+
95
+    }
96
+
97
+    private void dealOrder() {
98
+        if (!isQueueEmpty()){
99
+            OrderBean orderBean = orderList.get(0);
100
+            fetchOriginFromBox(orderBean);
101
+        }else{
102
+            startQuery();
103
+        }
104
+    }
105
+
106
+    private void fetchOriginFromBox(OrderBean orderBean){
107
+        HashMap<String, String> params = new HashMap<>();
108
+        params.put("lensman", Preferences.getInstance().getLensManId());
109
+        params.put("session",orderBean.photoBean.sessionId);
110
+        params.put("name",orderBean.photoBean.photoName);
111
+        new HttpPostTask(params){
112
+            OrderBean bean = new OrderBean();
113
+            @Override
114
+            protected boolean parseResponse(String response) {
115
+                LogHelper.d(TAG,"fetchOriginFromBox get response string = "+response);
116
+                try{
117
+                    JSONObject json = new JSONObject(response);
118
+                    int status = json.getInt("status");
119
+                    if(status == 200){
120
+                        JSONObject data = json.getJSONObject("data");
121
+                        //TODO
122
+                        }
123
+                        return true;
124
+                }catch (Exception e){
125
+                    e.printStackTrace();
126
+                }
127
+                return false;
128
+            }
129
+
130
+            @Override
131
+            protected void onPostFail() {
132
+                super.onPostFail();
133
+            }
134
+
135
+            @Override
136
+            protected void onPostSuccess() {
137
+                super.onPostSuccess();
138
+                new SavePhotoTask(bean).executeOnExecutor(ThreadExecutor.getInstance().getExecutor(),bean);
139
+            }
140
+        }.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(),BoxUrlContainer.FETCH_ORIGIN_URL);
53 141
 
54 142
     }
55 143
 
56
-    private void onNewOrderArrived(OrderBean bean){
57
-        DBService.getInstance().addOrderBean(bean);
144
+    private void uploadOrigin(OrderBean bean){
145
+        new UploadTask(bean).executeOnExecutor(ThreadExecutor.getInstance().getExecutor());
146
+    }
147
+
148
+    private boolean isQueueEmpty(){
149
+        return (orderList==null || orderList.size()==0);
58 150
     }
59 151
 
60 152
     public class OrderServiceBinder extends Binder {
61 153
 
62
-        public OrderDealService getService(){
154
+        public OrderDealService getService() {
63 155
             return OrderDealService.this;
64 156
         }
65 157
 
66 158
     }
67 159
 
160
+    class SavePhotoTask extends AsyncTask<OrderBean, Integer, Boolean> {
161
+
162
+        private OrderBean orderBean;
163
+        public SavePhotoTask(OrderBean bean){
164
+            this.orderBean = bean;
165
+        }
166
+
167
+        @Override
168
+        protected Boolean doInBackground(OrderBean... params) {
169
+            OrderBean photoBean = params[0];
170
+            String  path = BoxUrlContainer.PHOTO_PATH_PREFIX_URL+orderBean.photoBean.photoPath;
171
+            LogHelper.d(TAG,"保存照片到本地,图片链接地址为"+path);
172
+            FileOutputStream fOut = null;
173
+            HttpURLConnection conn = null;
174
+            InputStream inStream = null;
175
+            try {
176
+                URL url = new URL(path);
177
+                conn = (HttpURLConnection) url.openConnection();
178
+                conn.setConnectTimeout(5 * 1000);
179
+                conn.setRequestMethod("GET");
180
+                inStream = conn.getInputStream();
181
+                if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
182
+                    String dirPath = ai.pai.lensman.utils.Constants.APP_IMAGE_DIR + File.separator+orderBean.photoBean.sessionId+File.separator+ Constants.ORIGIN_DIR_NAME;
183
+                    File dir = new File(dirPath);
184
+                    dir.mkdirs();
185
+                    File file = new File(dir, orderBean.photoBean.photoName);
186
+                    fOut = new FileOutputStream(file);
187
+                    byte[] buffer = new byte[2048];
188
+                    int len ;
189
+                    while((len=inStream.read(buffer))!=-1){
190
+                        fOut.write(buffer,0,len);
191
+                        fOut.flush();
192
+                    }
193
+                    fOut.flush();
194
+                    LogHelper.d(TAG,"保存照片到本地,图片保存至"+file.getAbsolutePath()+"图片大小为"+file.length()+"字节\n\n");
195
+                }
196
+                return true;
197
+            } catch (Exception e) {
198
+                e.printStackTrace();
199
+            } finally {
200
+                try{
201
+                    inStream.close();
202
+                    conn.disconnect();
203
+                    fOut.close();
204
+                }catch (Exception e){
205
+                    e.printStackTrace();
206
+                }
207
+            }
208
+            return false;
209
+        }
210
+
211
+        @Override
212
+        protected void onPostExecute(Boolean result) {
213
+            super.onPostExecute(result);
214
+            if (result) {
215
+                uploadOrigin(orderBean);
216
+            }else{
217
+
218
+            }
219
+        }
220
+    }
221
+
222
+    public class UploadTask extends AsyncTask<Void, Integer, Boolean> {
223
+
224
+        private static final String TAG = "czy";
225
+        private OrderBean bean;
226
+
227
+        public UploadTask(OrderBean bean) {
228
+            this.bean = bean;
229
+        }
230
+
231
+        @Override
232
+        protected Boolean doInBackground(Void... params) {
233
+            for(int k = 0 ; k< 5;k++){
234
+                try {
235
+                    String dirPath = ai.pai.lensman.utils.Constants.APP_IMAGE_DIR + File.separator + bean.photoBean.sessionId
236
+                            + File.separator + ai.pai.lensman.utils.Constants.THUMBNAIL_DIR_NAME;
237
+                    File dir = new File(dirPath);
238
+                    dir.mkdirs();
239
+                    File photo = new File(dir, bean.photoBean.photoName);
240
+                    LogHelper.d(TAG, "上传照片 第"+k+"次尝试"+ bean);
241
+                    if (photo.exists() && photo.isFile()) {
242
+                        PhotoUploadUtils photoUploadUtils = new PhotoUploadUtils(UrlContainer.ORIGIN_PHOTO_UPLOAD_URL + "?timestamp=" + System.currentTimeMillis());
243
+                        photoUploadUtils.addFileParameter("photo", photo);
244
+                        photoUploadUtils.addTextParameter("user_id", bean.photoBean.lensmanId);
245
+                        photoUploadUtils.addTextParameter("session_id", bean.photoBean.sessionId);
246
+                        photoUploadUtils.addTextParameter("photo_id", String.valueOf(bean.photoBean.photoId));
247
+                        photoUploadUtils.addTextParameter("nickname",Preferences.getInstance().getUserName());
248
+
249
+                        String result = new String(photoUploadUtils.send(), "UTF-8");
250
+                        JSONObject resultObj = new JSONObject(result);
251
+                        if (resultObj.getInt("status") == 200) {
252
+                            LogHelper.d(TAG, "上传 UploadTask upload result ok ");
253
+                            return true;
254
+                        }
255
+                    } else {
256
+                        return false;
257
+                    }
258
+
259
+                } catch (Exception e) {
260
+                    LogHelper.d(TAG, "上传发生异常 UploadTask :" + bean + " error:" + e);
261
+                }
262
+            }
263
+            return false;
264
+        }
265
+
266
+        @Override
267
+        protected void onPostExecute(Boolean result) {
268
+            if (result) {
269
+                LogHelper.d(TAG, "上传 UploadTask " + bean + "  success ");
270
+                orderList.remove(bean);
271
+                dealOrder();
272
+            } else {
273
+                LogHelper.d(TAG, "上传 UploadTask " + bean + "  fail ");
274
+            }
275
+        }
276
+
277
+    }
278
+
68 279
 }

+ 11 - 0
app/src/main/java/ai/pai/lensman/utils/BoxUrlContainer.java

@@ -16,6 +16,15 @@ public class BoxUrlContainer {
16 16
 
17 17
     public static String PHOTO_PATH_PREFIX_URL = BASE_URL + "static/";
18 18
 
19
+    /**
20
+     * lensman  # 摄影师唯一标识
21
+     * session  # Session
22
+     * name  # fetch_thumbnail 返回
23
+     */
24
+    public static String FETCH_ORIGIN_URL = BASE_URL +"fetch_origin";
25
+
26
+
27
+
19 28
     public static void resetIPHost(String ip) {
20 29
         BOX_IP = ip;
21 30
 
@@ -30,6 +39,8 @@ public class BoxUrlContainer {
30 39
         FETCH_THUMBNAIL_URL = BASE_URL + "fetch_thumbnail";
31 40
 
32 41
         PHOTO_PATH_PREFIX_URL = BASE_URL + "static/";
42
+
43
+        FETCH_ORIGIN_URL = BASE_URL +"fetch_origin";
33 44
     }
34 45
 
35 46
 

+ 14 - 1
app/src/main/java/ai/pai/lensman/utils/UrlContainer.java

@@ -37,7 +37,20 @@ public class UrlContainer {
37 37
 
38 38
     public static final String BRIEFS_URL = HOST_URL+"l/brief";
39 39
 
40
-    public static final String QUERY_ORDER_URL = HOST_URL+"l/query";
40
+    /**
41
+     * user_id  # 用户唯一标识
42
+     */
43
+    public static final String QUERY_ORIGIN_ORDER_URL = HOST_URL+"l/origin_wanted";
44
+
45
+    /**
46
+     * user_id  # 用户唯一标识
47
+     nickname  # 用户昵称
48
+     session_id  # SESSION唯一标识
49
+     photo_id  # 照片唯一标识
50
+     photo  # @File 需要上传的照片
51
+     */
52
+    public static final String ORIGIN_PHOTO_UPLOAD_URL = HOST_URL+"l/origin_upload";
53
+
41 54
 
42 55
     public static final String FEEDBACK_URL = HOST_URL +"op/feedback";
43 56