瀏覽代碼

Merge branch 'developer' of https://gitlab.com/Arisono/SkWeiChat-Baidu into fix_bug

Arison 9 年之前
父節點
當前提交
ac155e9ce0
共有 70 個文件被更改,包括 2933 次插入1151 次删除
  1. 1 1
      WeiChat/build.gradle
  2. 15 10
      WeiChat/src/main/AndroidManifest.xml
  3. 103 10
      WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/WorkDailyAdapter.java
  4. 18 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/WorkDailyBean.java
  5. 9 25
      WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/MissionDao.java
  6. 11 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/WorkModelDao.java
  7. 26 47
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/CommonDocDetailsActivity.java
  8. 0 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/NoticesActivity.java
  9. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/DataFormDetailActivity.java
  10. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/FormListSelectActivity.java
  11. 110 123
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/DailydetailsActivity.java
  12. 16 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/DestinationActivity.java
  13. 15 23
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/LocationMapActivity.java
  14. 27 21
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/LocationSearchActivity.java
  15. 247 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionActivity.java
  16. 2 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionPlanActivity.java
  17. 4 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAActivity.java
  18. 2 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OutofficeSetActivity.java
  19. 17 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/TestActivity.java
  20. 39 17
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkActivity.java
  21. 88 53
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkDailyAddActivity.java
  22. 119 25
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkDailyShowActivity.java
  23. 152 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/MissionAdapter.java
  24. 39 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/WorkAdapter.java
  25. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/db/DBOpenHelper.java
  26. 78 42
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/MissionModel.java
  27. 331 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/MissionPresenter.java
  28. 112 43
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/WorkPresenter.java
  29. 25 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IAutoErp.java
  30. 17 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IMission.java
  31. 24 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IMissionPresenter.java
  32. 0 16
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IMissionViewPresenter.java
  33. 0 15
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IWork.java
  34. 9 12
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IWorkPresenter.java
  35. 4 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IWorkView.java
  36. 0 5
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/CommonInterfaceUtil.java
  37. 6 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/Constants.java
  38. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/StringUtils.java
  39. 204 106
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/AutoErpService.java
  40. 722 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/AutoErpSigninUitl.java
  41. 0 406
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/CacheAutoUtil.java
  42. 29 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/ReckonAutoUtil.java
  43. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/auto/AlarmService.java
  44. 1 5
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/auto/HttpHandler.java
  45. 47 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/view/MyScrollview.java
  46. 0 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/SettingActivity.java
  47. 13 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/BaiduMapUtil.java
  48. 2 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/crouton/Crouton.java
  49. 二進制
      WeiChat/src/main/res/drawable-hdpi/icon_date_nor.png
  50. 二進制
      WeiChat/src/main/res/drawable-xhdpi/add_address.png
  51. 二進制
      WeiChat/src/main/res/drawable-xhdpi/icon_all_mission.png
  52. 二進制
      WeiChat/src/main/res/drawable-xhdpi/icon_date_nor.png
  53. 二進制
      WeiChat/src/main/res/drawable-xhdpi/icon_emind.png
  54. 二進制
      WeiChat/src/main/res/drawable-xhdpi/icon_last_missiom.png
  55. 二進制
      WeiChat/src/main/res/drawable-xxhdpi/add_address.png
  56. 二進制
      WeiChat/src/main/res/drawable-xxhdpi/icon_all_mission.png
  57. 二進制
      WeiChat/src/main/res/drawable-xxhdpi/icon_date_nor.png
  58. 二進制
      WeiChat/src/main/res/drawable-xxhdpi/icon_emind.png
  59. 二進制
      WeiChat/src/main/res/drawable-xxhdpi/icon_last_missiom.png
  60. 0 1
      WeiChat/src/main/res/layout/activity_location_search.xml
  61. 1 0
      WeiChat/src/main/res/layout/activity_map_location.xml
  62. 53 0
      WeiChat/src/main/res/layout/activity_mission.xml
  63. 1 1
      WeiChat/src/main/res/layout/activity_work.xml
  64. 57 75
      WeiChat/src/main/res/layout/activity_workdaily_detail.xml
  65. 11 0
      WeiChat/src/main/res/layout/item_activity_workdaily.xml
  66. 45 14
      WeiChat/src/main/res/layout/item_aims_base.xml
  67. 3 7
      WeiChat/src/main/res/layout/item_location_ls.xml
  68. 67 0
      WeiChat/src/main/res/layout/item_mission.xml
  69. 1 1
      WeiChat/src/main/res/values/colors.xml
  70. 2 2
      WeiChat/src/main/res/values/gpm_values.xml

+ 1 - 1
WeiChat/build.gradle

@@ -13,7 +13,7 @@ android {
     }
     signingConfigs {
         config {
-            storeFile file('C:/Users/Arison/Desktop/applicationsignname[20150409]')
+            storeFile file('D:/config/applicationsignname[20150409]')
             storePassword '13237658359'
             keyAlias 'jie-20150409'
             keyPassword '13237658359'

+ 15 - 10
WeiChat/src/main/AndroidManifest.xml

@@ -140,8 +140,9 @@
             </intent-filter>
         </activity>
         <!-- 登录模块 -->
-        <activity android:name=".ui.account.LoginActivity"
-            android:windowSoftInputMode="adjustPan"/>
+        <activity
+            android:name=".ui.account.LoginActivity"
+            android:windowSoftInputMode="adjustPan" />
         <activity android:name=".ui.account.LoginHistoryActivity" />
         <activity android:name=".ui.account.DataDownloadActivity" />
         <activity android:name=".ui.account.RegisterActivity" />
@@ -782,13 +783,13 @@
             android:name=".ui.erp.activity.oa.DestinationActivity"
             android:label="@string/activity_select_aims" />
         <!-- 动态表单 -->
-        <activity android:name=".ui.erp.activity.form.DataFormDetailActivity"
-          
-            android:hardwareAccelerated="false"/>
-        <activity android:name=".ui.erp.activity.form.DataFormFieldActivity" 
-           />
-        <activity android:name=".ui.erp.activity.form.FormListSelectActivity"
-            android:launchMode="singleTask"/>
+        <activity
+            android:name=".ui.erp.activity.form.DataFormDetailActivity"
+            android:hardwareAccelerated="false" />
+        <activity android:name=".ui.erp.activity.form.DataFormFieldActivity" />
+        <activity
+            android:name=".ui.erp.activity.form.FormListSelectActivity"
+            android:launchMode="singleTask" />
         <activity
             android:name=".ui.erp.activity.oa.WorkActivity"
             android:label="@string/activity_signing" />
@@ -796,7 +797,11 @@
         <service
             android:name=".ui.erp.util.attendance.AutoErpService"
             android:enabled="true"
-            android:exported="true"/>
+            android:exported="true" />
+
+        <activity
+            android:name=".ui.erp.activity.oa.MissionActivity"
+            android:label="@string/activity_mission_plan" />
     </application>
 
 </manifest>

+ 103 - 10
WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/WorkDailyAdapter.java

@@ -2,24 +2,44 @@
 package com.xzjmyk.pm.activity.adapter;
 
 import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
 import android.graphics.Color;
+import android.os.Handler;
+import android.os.Message;
+import android.support.v7.app.AlertDialog;
+import android.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.TextView;
+import android.widget.Toast;
 
+import com.alibaba.fastjson.JSON;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.bean.oa.WorkDailyBean;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.WorkDailyShowActivity;
+import com.xzjmyk.pm.activity.ui.erp.fragment.WorksFragment;
+import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 
+import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by FANGlh on 2016/11/1.
  */
 public class WorkDailyAdapter extends BaseAdapter {
+    private static final int DELETE_DOC_REQUEST_SUCCESSFULLY = 1219;
     private List<WorkDailyBean> mWorkDailyBeanList;
     private Context mContext;
+    private int mPosition;
 
     //获取上下文对象
     public WorkDailyAdapter(Context mContext) {
@@ -51,7 +71,7 @@ public class WorkDailyAdapter extends BaseAdapter {
     }
 
     @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
+    public View getView(final int position, View convertView, ViewGroup parent) {
         ViewHolder viewHolder = null;
         if (convertView == null){
             convertView = View.inflate(mContext, R.layout.item_activity_workdaily,null);
@@ -59,31 +79,104 @@ public class WorkDailyAdapter extends BaseAdapter {
             viewHolder.WorkDailyDate = (TextView) convertView.findViewById(R.id.item_activity_workdaily_time_tv);
             viewHolder.WorkDailySummary = (TextView) convertView.findViewById(R.id.item_activity_workdaily_summary_tv);
             viewHolder.WorkDailyStatus = (TextView) convertView.findViewById(R.id.item_activity_workdaily_status);
+            viewHolder.WorkDailyDelete = (TextView) convertView.findViewById(R.id.unsubmit_delete_tv);
             convertView.setTag(viewHolder);
         }else {
             viewHolder = (ViewHolder) convertView.getTag();
         }
 
-    //时间返回为空时显示今日时间
+        //时间返回为空时显示今日时间
       /*  if(mWorkDailyBeanList.get(position).getWD_DATE() == null){
             viewHolder.WorkDailyDate.setText(TimeUtils.s_long_2_str(System.currentTimeMillis()));
         }else{*/
-            viewHolder.WorkDailyDate.setText(mWorkDailyBeanList.get(position).getWD_DATE());
-       // }
+        viewHolder.WorkDailyDate.setText(mWorkDailyBeanList.get(position).getWD_DATE());
+        // }
         //为日报列表界面赋值(状态,总结),注意已审批和待审批的字体颜色
-        if(mWorkDailyBeanList.get(position).getSTATUS().equals("已审批")){
+        if(!TextUtils.isEmpty(mWorkDailyBeanList.get(position).getWD_STATUS()) &&
+                mWorkDailyBeanList.get(position).getWD_STATUS().equals("已审核")){
             viewHolder.WorkDailyStatus.setTextColor(mContext.getResources().getColor(R.color.approval));
-        }else {
+            viewHolder.WorkDailyStatus.setText("已审批");
+            viewHolder.WorkDailyDelete.setVisibility(View.GONE);
+        }else if (!TextUtils.isEmpty(mWorkDailyBeanList.get(position).getWD_STATUS()) &&
+                mWorkDailyBeanList.get(position).getWD_STATUS().equals("已提交")){
             viewHolder.WorkDailyStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
+            viewHolder.WorkDailyStatus.setText("待审批");
+            viewHolder.WorkDailyDelete.setVisibility(View.GONE);
+        }else if(!TextUtils.isEmpty(mWorkDailyBeanList.get(position).getWD_STATUS()) &&
+                mWorkDailyBeanList.get(position).getWD_STATUS().equals("在录入")){
+            viewHolder.WorkDailyStatus.setTextColor(mContext.getResources().getColor(R.color.done_approval));
+            viewHolder.WorkDailyStatus.setText("未提交");
+            viewHolder.WorkDailyDelete.setVisibility(View.VISIBLE);
         }
-        viewHolder.WorkDailyStatus.setText(mWorkDailyBeanList.get(position).getSTATUS());
         viewHolder.WorkDailySummary.setText(mWorkDailyBeanList.get(position).getWD_COMMENT());
+        viewHolder.WorkDailyDelete.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+
+                    new AlertDialog
+                            .Builder(mContext)
+                            .setTitle("温馨提示")
+                            .setMessage("\t\t确认删除该条已保存单据?")
+                            .setNegativeButton("取消", null)
+                            .setPositiveButton("确认", new DialogInterface.OnClickListener() {
+                                @Override
+                                public void onClick(DialogInterface dialog, int which) {
+                                    String mCaller = "WorkDaily";
+                                    int mkeyValue = mWorkDailyBeanList.get(position).getWD_ID();
+                                    mPosition = position;
+                                    dodelete(mCaller, mkeyValue);
+                                }
+                            }).show();
+                }
+        });
+
         return convertView;
     }
 
+    private void dodelete(String mCaller, int mkeyValue) {
+        String url = CommonUtil.getSharedPreferences(mContext, "erp_baseurl") + "/mobile/commondelete.action";
+        Map<String, Object> formStoreMap = new HashMap<>();
+        HashMap<String, Object> params = new HashMap<>();
+        params.put("caller", mCaller);
+        params.put("id", mkeyValue);
+        Log.i("dodeleted", mkeyValue + "");
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(mContext, "sessionId"));
+        LogUtil.prinlnLongMsg("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(mContext, "sessionId"));
+        ViewUtil.httpSendRequest(mContext, url, params, handler, headers, DELETE_DOC_REQUEST_SUCCESSFULLY, null, null, "get");
+    }
+    private Handler handler = new Handler(){
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+
+            switch (msg.what){
+                case DELETE_DOC_REQUEST_SUCCESSFULLY:
+                    if (!StringUtils.isEmpty(msg.getData().getString("result"))){
+                        String delete_result = msg.getData().getString("result");
+                        LogUtil.prinlnLongMsg("delete_result", delete_result);
+                        if (JSON.parseObject(delete_result).containsKey("success") && JSON.parseObject(delete_result).getBoolean("success")) {
+                            Toast.makeText(mContext, "工作日报删除成功", Toast.LENGTH_LONG).show();
+                            mWorkDailyBeanList.remove(mPosition);
+                            notifyDataSetChanged();
+                        }
+                    }
+                    break;
+
+                default:
+                    if (msg.getData() != null) {
+                        if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
+                            Toast.makeText(mContext, msg.getData().getString("result"), Toast.LENGTH_LONG).show();
+                        }
+                    }
+                    break;
+            }
+        }
+    };
     class ViewHolder{
-         TextView WorkDailyDate;
-         TextView WorkDailySummary;
-         TextView WorkDailyStatus;
+        TextView WorkDailyDate;
+        TextView WorkDailySummary;
+        TextView WorkDailyStatus;
+        TextView WorkDailyDelete;
     }
 }

+ 18 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/WorkDailyBean.java

@@ -14,6 +14,24 @@ public class WorkDailyBean {
     private int RN; //
     private String WD_PLAN;//明日工作计划
     private String WD_EXPERIENCE;//工作心得
+    private  String WD_STATUS; //准确的状态,在录入、待审批、已审核
+    private String WD_CONTEXT;//已完成工作内容
+
+    public String getWD_CONTEXT() {
+        return WD_CONTEXT;
+    }
+
+    public void setWD_CONTEXT(String WD_CONTEXT) {
+        this.WD_CONTEXT = WD_CONTEXT;
+    }
+
+    public String getWD_STATUS() {
+        return WD_STATUS;
+    }
+
+    public void setWD_STATUS(String WD_STATUS) {
+        this.WD_STATUS = WD_STATUS;
+    }
 
     public int getWD_ID() {
         return WD_ID;

+ 9 - 25
WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/MissionDao.java

@@ -79,7 +79,8 @@ public class MissionDao {
             if (StringUtils.isEmpty(master) || StringUtils.isEmpty(emcode)) return missions;
             db = helper.getReadableDatabase();
             String[] columns = {"id", "company", "companyAddr",
-                    "latitude", "longitude", "visittime", "realvisitTime", "realLeaveTime", "status"};
+                    "latitude", "longitude", "visittime", "realvisitTime",
+                    "realLeaveTime", "status", "distance", "location", "recorddate"};
             String selection = "master =? and emcode=? and date=?";
             String[] selecttionArg = {master, emcode, date};
             cursor = db.query(tibleName, columns, selection, selecttionArg, null, null, null);
@@ -98,6 +99,9 @@ public class MissionDao {
                 mission.setRealTime(cursor.getString(6));
                 mission.setRealLeave(cursor.getString(7));
                 mission.setStatus(cursor.getInt(8));
+                mission.setDistance(cursor.getDouble(9));
+                mission.setLocation(cursor.getString(10));
+                mission.setRecorddate(cursor.getString(11));
                 missions.add(mission);
             }
         } catch (android.database.SQLException e) {
@@ -114,27 +118,6 @@ public class MissionDao {
     }
 
 
-    //更新或是创建一个数据
-    public boolean updataOrCreate(MissionModel mission) {
-        if (mission == null) return false;
-        if (mission.getStatus() > 0) {//更新
-            return updata(mission);
-        } else {//创建
-            return insert(mission);
-        }
-    }
-
-//    public boolean updataOrCreate(List<MissionPlanEntity> entities) {
-//        List<MissionPlanEntity> chche = queryByEnCode();
-//        if (ListUtils.isEmpty(chche)) return insertAll(entities);
-//        else {
-//
-//
-//        }
-//        return insertAll(entities);
-//    }
-
-
     public boolean updataOrCreate(List<MissionModel> entities) {
         if (ListUtils.isEmpty(entities)) return false;
         show("updataOrCreate");
@@ -151,7 +134,6 @@ public class MissionDao {
                 show("MissionPlanEntity");
                 //对象为空或是拜访时间没有情况下不插入数据库
                 if (mission == null || StringUtils.isEmpty(mission.getVisitTime())) {
-                    show("进来的是这打上");
                     continue;
                 }
                 values = new ContentValues();
@@ -167,9 +149,11 @@ public class MissionDao {
                 values.put("visittime", mission.getVisitTime());
                 values.put("realvisitTime", mission.getRealTime());
                 values.put("realLeaveTime", mission.getRealLeave());
-                values.put("status", 0);
+                values.put("distance", mission.getDistance());
+                values.put("location", mission.getLocation());
+                values.put("recorddate", mission.getRecorddate());
                 values.put("date", getDateByString(mission.getVisitTime()));//拜访日期
-                i = db.insert(tibleName, null, values);
+                i = db.insert(tibleName, "status", values);
                 if (i == -1) {
                     String where = "master=? and emcode=? and id=? ";
                     String[] whereArgs = {master, emcode, String.valueOf(mission.getId())};

+ 11 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/WorkModelDao.java

@@ -11,6 +11,7 @@ import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.tool.ThreadUtil;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 
 import java.util.ArrayList;
@@ -37,6 +38,16 @@ public class WorkModelDao {
     private WorkModelDao() {
     }
 
+    public boolean insteByThread(final List<WorkModel> models) {
+        ThreadUtil.getInstance().addTask(new Runnable() {
+            @Override
+            public void run() {
+                createOrUpdata(models);
+            }
+        });
+        return false;
+    }
+
     /**
      * 从网络下载数据并添加到数据库
      *

+ 26 - 47
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/CommonDocDetailsActivity.java

@@ -67,9 +67,9 @@ public class CommonDocDetailsActivity extends BaseActivity {
     private TextView status_tv;
     private MyListView appflow_lv;
     private int mNoc = 1;
-    private final static int COMMON_DOC_AF_REQUEST = 1101;
-    private final static int COMMON_DOC_MSG_REQUEST = 1102;
-    private static final int DELETE_DOC_REQUEST = 1103;
+    private final static int COMMON_DOC_AF_REQUEST = 1125;
+    private final static int COMMON_DOC_MSG_REQUEST = 1126;
+    private static final int DELETE_DOC_REQUEST = 1127;
     private EmptyLayout mEmptyLayput_approvalflow;
     private CommonDocApprovalFlowAdapter mCommonDocApprovalFlowAdapter;
     private CommonApprovalFlowBean mCommonApprovalFlowBean;
@@ -99,6 +99,7 @@ public class CommonDocDetailsActivity extends BaseActivity {
     private String em_number;
     private String type_emcode;
     private String real_status;
+    private String emCode;
 
 
     @Override
@@ -169,9 +170,12 @@ public class CommonDocDetailsActivity extends BaseActivity {
         final Intent intent = getIntent();
         mCaller = intent.getStringExtra("caller");
         mkeyValue = intent.getIntExtra("keyValue", -1);
+        real_status = intent.getStringExtra("status");
         Log.i("mCaller", mCaller);
         Log.isLoggable("keyValue", mkeyValue);
+        Log.i("real_status", real_status);
 
+        SetComDocStatus(real_status);
         //当获取到正确的单据caller和单据id时
         if (!TextUtils.isEmpty(mCaller) && mkeyValue != -1) {
             if ("Ask4Leave".equals(mCaller)) {
@@ -286,16 +290,15 @@ public class CommonDocDetailsActivity extends BaseActivity {
                     }
                     break;
                 case Constants.APP_SOCKETIMEOUTEXCEPTION:
-                    Toast.makeText(CommonDocDetailsActivity.this, msg.getData().getString("result"), Toast.LENGTH_LONG).show();
+//                    Toast.makeText(CommonDocDetailsActivity.this, msg.getData().getString("result"), Toast.LENGTH_LONG).show();
                     if(!TextUtils.isEmpty(real_status) && real_status.equals("已审核")){
                         commondoc_sv.setVisibility(View.VISIBLE);
                         resanddel_ll.setVisibility(View.GONE);
                     }else if (!TextUtils.isEmpty(real_status) && real_status.equals("已提交")){
                         commondoc_sv.setVisibility(View.VISIBLE);
-                        resanddel_ll.setVisibility(View.VISIBLE);
                     }
-                    break;
 
+                    break;
             }
         }
     };
@@ -340,7 +343,6 @@ public class CommonDocDetailsActivity extends BaseActivity {
                 resanddel_ll.setVisibility(View.GONE);
             } else {
                 commondoc_sv.setVisibility(View.VISIBLE);
-                resanddel_ll.setVisibility(View.VISIBLE);
                 mCommonDocMainMsgAdapter.setFormdataBeans(formdataArray);
                 if (griddataArray == null) {
                     secondmsg_ll.setVisibility(View.GONE);
@@ -382,13 +384,13 @@ public class CommonDocDetailsActivity extends BaseActivity {
                             getapplypeomsg(em_number);
 
                             //申请单据的审批,提交,录入状态获取
-                            if ((!TextUtils.isEmpty(fd_field) && fd_field.equals("va_status")) ||
-                                    (!TextUtils.isEmpty(fd_field) && fd_field.equals("wo_status")) ||
-                                    (!TextUtils.isEmpty(fd_field) && fd_field.equals("sa_status")) ||
-                                    (!TextUtils.isEmpty(fd_field) && fd_field.equals("fp_status"))){
-                                real_status = formdataArray.getJSONObject(0).getString(fd_field);
-                                SetComDocStatus(real_status);
-                            }
+//                            if ((!TextUtils.isEmpty(fd_field) && fd_field.equals("va_status")) ||
+//                                    (!TextUtils.isEmpty(fd_field) && fd_field.equals("wo_status")) ||
+//                                    (!TextUtils.isEmpty(fd_field) && fd_field.equals("sa_status")) ||
+//                                    (!TextUtils.isEmpty(fd_field) && fd_field.equals("fp_status"))){
+//                                real_status = formdataArray.getJSONObject(0).getString(fd_field);
+//                                SetComDocStatus(real_status);
+//                            }
                         }
                         mCommonDocMainMsgAdapter.setmFormconfigsBean(mFormconfigsBean);
                         main_msg_lv.setAdapter(mCommonDocMainMsgAdapter);
@@ -474,7 +476,15 @@ public class CommonDocDetailsActivity extends BaseActivity {
                     for (int i = 0; i < mCommonApprovalFlowBean.getData().size(); i++) {
                         if (manager == null) manager = new DBManager(mContext);
                         String whichsys = CommonUtil.getSharedPreferences(mContext, "erp_master");
-                        String emCode = mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMAN();
+                        emCode = mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMAN();
+//                        if (mCommonApprovalFlowBean.getProcesss() != null){
+//                            int pronum = mCommonApprovalFlowBean.getProcesss().size();
+//                            if (i<pronum && mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealMan() !=null){
+//                                emCode = mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealMan();
+//                            }
+//                        }else {
+//                            emCode = mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMAN();
+//                        }
                         try {
                             if (emCode.contains(",")) {
 //                                im_ids.add("");
@@ -486,7 +496,7 @@ public class CommonDocDetailsActivity extends BaseActivity {
                             e.printStackTrace();
                         }
 
-                        String[] selectionArgs = {emCode == null ? "":emCode, whichsys};
+                        String[] selectionArgs = {emCode == null ? "": emCode, whichsys};
                         String selection = "em_code=? and whichsys=? ";
                         //获取数据库数据
                         try {
@@ -518,7 +528,6 @@ public class CommonDocDetailsActivity extends BaseActivity {
 
         getemcodefromAF();
     }
-
     /**
      * 申请单据申请人emcode,从审批流数据获取
      */
@@ -531,34 +540,6 @@ public class CommonDocDetailsActivity extends BaseActivity {
 //                name_tv.setText(mCommonApprovalFlowBean.getProcesss().get(0).getJp_launcherName());  //申请人姓名 从process获取
                 getapplypeomsg(em_number);
             }
-           /* if (!ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())) {
-                int data_num = mCommonApprovalFlowBean.getData().size();
-                int nodes_num = mCommonApprovalFlowBean.getNodes().size();
-                String app_status = mCommonApprovalFlowBean.getNodes().get(nodes_num - 1).getJn_dealResult();
-                if ((nodes_num == data_num && nodes_num > 0) &&
-                        mCommonApprovalFlowBean.getNodes().get(data_num - 1).getJn_dealResult() != null &&
-                        mCommonApprovalFlowBean.getNodes().get(data_num - 1).getJn_dealResult().equals("同意")) {
-                    status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.approval));
-                    status_tv.setText("已审批");
-                } else {
-                    status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.no_approval));
-                    status_tv.setText("待审批");
-                }
-            } else {
-                status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.no_approval));
-                status_tv.setText("待审批");
-            }
-
-        } else if (ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss())
-                && ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())
-                && ListUtils.isEmpty(mCommonApprovalFlowBean.getData())) {
-
-            status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.titleBlue));
-            status_tv.setText("未提交");
-
-        } else {
-            status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.no_approval));
-            status_tv.setText("待审批");*/
         }
 
         // 当单据未提交 未触发审批流时,默认静态显示申请人的信息
@@ -593,8 +574,6 @@ public class CommonDocDetailsActivity extends BaseActivity {
             approval_ll.setVisibility(View.GONE);
         } else {
             approval_ll.setVisibility(View.GONE);
-            resanddel_ll.setVisibility(View.VISIBLE);
-
             resubmit_ll.setOnClickListener(new View.OnClickListener() { // 重新提交
                 @Override
                 public void onClick(View v) {

+ 0 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/NoticesActivity.java

@@ -118,7 +118,6 @@ public class NoticesActivity extends BaseActivity {
         });
     }
 
-
     @Override
     public void onBackPressed() {
         sendResult();

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/DataFormDetailActivity.java

@@ -390,7 +390,8 @@ public class DataFormDetailActivity extends BaseActivity implements View.OnClick
                                     if (mContext==null)return;
                                     startActivity(new Intent(mContext, CommonDocDetailsActivity.class)
                                             .putExtra("caller", caller)
-                                            .putExtra("keyValue", va_id));
+                                            .putExtra("keyValue", va_id)
+                                            .putExtra("status","已提交"));
                                     click_btn.setEnabled(true);
                                     finish();
                                     overridePendingTransition(R.anim.anim_activity_in, R.anim.anim_activity_out);

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/form/FormListSelectActivity.java

@@ -402,7 +402,8 @@ public class FormListSelectActivity extends BaseActivity implements View.OnClick
                     startActivity(new Intent(mContext,
                             CommonDocDetailsActivity.class)
                             .putExtra("caller", caller)
-                            .putExtra("keyValue", keyId));
+                            .putExtra("keyValue", keyId)
+                            .putExtra("status",status));
                 }
   
             }

+ 110 - 123
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/DailydetailsActivity.java

@@ -6,6 +6,7 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.support.v7.app.AlertDialog;
+import android.text.Html;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Menu;
@@ -22,7 +23,6 @@ import com.xzjmyk.pm.activity.adapter.DailyDetailsApprovalFlowAdapter;
 import com.xzjmyk.pm.activity.adapter.DailyDetailsWorkTaskAdapter;
 import com.xzjmyk.pm.activity.bean.oa.CommonApprovalFlowBean;
 import com.xzjmyk.pm.activity.bean.oa.WorkTaskBean;
-import com.xzjmyk.pm.activity.ui.MainActivity;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.db.DBManager;
 import com.xzjmyk.pm.activity.ui.erp.entity.EmployeesEntity;
@@ -50,6 +50,8 @@ import java.util.Map;
 public class DailydetailsActivity extends BaseActivity {
     private static final int DAILY_REFORSUB_SUCCESSFULLY = 1209;
     private static final int DAILY_REFORDELETE_SUCCESSFULLY = 1214;
+    public static final int DELETE_SUCCEED = 1219;
+    private static final int REFORDELETE_DOC_REQUEST_SUCCESSFULLY = 1220;
     private TextView wdd_data;
     private TextView wdd_status;
     private TextView wdd_summary;
@@ -59,9 +61,7 @@ public class DailydetailsActivity extends BaseActivity {
     private String summary;
     private String plan;
     private String experience;
-    private String status;
-    private MyListView complete_tasklv;
-    private MyListView uncomplete_tasklv;
+    private String wd_status;
     private MyListView approval_flowlv;
     private LinearLayout plan_ll;
     private LinearLayout experience_ll;
@@ -72,7 +72,6 @@ public class DailydetailsActivity extends BaseActivity {
     private List<WorkTaskBean> mWorkTaskBeanList;
     private EmptyLayout mEmptyLayput_approvalflow;
     private EmptyLayout mEmptyLayput_Task;
-    private TextView no_task;
     private int mkeyValue;
     private String mCaller = "WorkDaily";
     private int mNoc = 1 ;
@@ -110,6 +109,7 @@ public class DailydetailsActivity extends BaseActivity {
                                     .putExtra("rs_summary", summary)
                                     .putExtra("rs_plan", plan)
                                     .putExtra("rs_experience", experience)
+                                    .putExtra("rs_donetask",donetask)
                                     .putExtra("resubmit", "resubmit"));
                             Log.i("doresubmit_id", mkeyValue + "");
                             finish();
@@ -121,11 +121,21 @@ public class DailydetailsActivity extends BaseActivity {
                         if (!StringUtils.isEmpty(msg.getData().getString("result"))){
                             String resfordelete_result = msg.getData().getString("result");
                             LogUtil.prinlnLongMsg("RESUBMITTED_message", resfordelete_result);
-//                            Toast.makeText(ct, "工作日报反提交成功", Toast.LENGTH_SHORT).show();
                             dodelete(mCaller, mkeyValue);
                         }
                     }
                     break;
+                case REFORDELETE_DOC_REQUEST_SUCCESSFULLY:
+                    if(msg.getData() != null){
+                        if (!StringUtils.isEmpty(msg.getData().getString("result"))){
+                            String delete_result = msg.getData().getString("result");
+                            LogUtil.prinlnLongMsg("refordelete_result", delete_result);
+                            if (JSON.parseObject(delete_result).containsKey("success") && JSON.parseObject(delete_result).getBoolean("success")) {
+                                dodelete(mCaller,mkeyValue);
+                            }
+                        }
+                    }
+                    break;
                 case DELETE_DOC_REQUEST_SUCCESSFULLY:
                     if(msg.getData() != null){
                         if (!StringUtils.isEmpty(msg.getData().getString("result"))){
@@ -133,13 +143,18 @@ public class DailydetailsActivity extends BaseActivity {
                             LogUtil.prinlnLongMsg("delete_result", delete_result);
                             if (JSON.parseObject(delete_result).containsKey("success") && JSON.parseObject(delete_result).getBoolean("success")) {
                                 Toast.makeText(ct, "工作日报删除成功", Toast.LENGTH_LONG).show();
-                                if (!TextUtils.isEmpty(fromwhere) && fromwhere.equals("dailylist")){
-                                    finish();
-                                }else {
-                                    startActivity(new Intent(activity,WorkDailyShowActivity.class));
+//                                    startActivity(new Intent(activity,WorkDailyShowActivity.class)
+//                                    .putExtra("fromwhere","delete_succeed"));
+
+                                if (!TextUtils.isEmpty(fromwhere) && "submitdaily".equals(fromwhere)){
+                                    startActivity(new Intent(DailydetailsActivity.this,WorkDailyShowActivity.class));
                                     finish();
+                                }else if (!TextUtils.isEmpty(fromwhere) && "dailylist".equals(fromwhere)){
+                                    Intent intent = new Intent();
+                                    intent.putExtra("delete_succeed","");
+                                    setResult(DELETE_SUCCEED,intent);
+                                    DailydetailsActivity.this.finish();
                                 }
-
                             }
                         }
                     }
@@ -155,6 +170,13 @@ public class DailydetailsActivity extends BaseActivity {
         }
     };
     private String submittype;
+    private TextView resubmit_tv;
+    private LinearLayout done_task_ll;
+    private TextView done_task_tv;
+    private LinearLayout undo_task_ll;
+    private TextView undo_task_tv;
+    private String emCode;
+    private String donetask;
 
     /**
      * 日报审批流获取并处理
@@ -181,7 +203,14 @@ public class DailydetailsActivity extends BaseActivity {
                     for (int i = 0; i < mCommonApprovalFlowBean.getData().size(); i++) {
                         if (manager == null) manager = new DBManager(mContext);
                         String whichsys = CommonUtil.getSharedPreferences(mContext, "erp_master");
-                        String emCode = mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMAN();
+                        emCode = mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMAN();
+//                        if (mCommonApprovalFlowBean.getProcesss() != null  &&
+//                                i < mCommonApprovalFlowBean.getProcesss().size() &&
+//                                    mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealMan() !=null){
+//                            emCode = mCommonApprovalFlowBean.getProcesss().get(i).getJp_nodeDealMan();
+//                        }else {
+//                            emCode = mCommonApprovalFlowBean.getData().get(i).getJP_NODEDEALMAN();
+//                        }
                         if( emCode.contains(",")){
                             String str[] = emCode.split(",");
                             emCode = str[0];
@@ -191,7 +220,7 @@ public class DailydetailsActivity extends BaseActivity {
 
                         // 当处理当在Pc端不填写工作总结保存或提交时,在手机端查看详情界面这里出引起闪退:try 已解决
                         try {
-                            String[] selectionArgs = {emCode == null ? "":emCode, whichsys};
+                            String[] selectionArgs = {emCode == null ? "": emCode, whichsys};
                             String selection = "em_code=? and whichsys=? ";
                             //获取数据库数据
                             EmployeesEntity bean = manager.selectForEmployee(selectionArgs, selection);
@@ -216,30 +245,30 @@ public class DailydetailsActivity extends BaseActivity {
                 mDailyDetailsApprovalFlowAdapter.setmCommonApprovalFlowBean(mCommonApprovalFlowBean);
                 approval_flowlv.setAdapter(mDailyDetailsApprovalFlowAdapter);
 
-                int nodesnum = mCommonApprovalFlowBean.getNodes().size();
-                int datanum = mCommonApprovalFlowBean.getData().size();
-                if(nodesnum > 0 && datanum > 0 && nodesnum == datanum){
-                    if(mCommonApprovalFlowBean.getNodes().get(nodesnum-1).getJn_dealResult().equals("同意")){
-                        wdd_status.setTextColor(getApplicationContext().getResources().getColor(R.color.approval));
-                        wdd_status.setText("已审批");
-                        resanddel_ll.setVisibility(View.GONE);
-                    }
-                }
-                try{
-                    // 当保存数据但未提交时的解决方案
-                    submittype = new String();
-                    if(mCommonApprovalFlowBean.getData().size() == 0 &&
-                            mCommonApprovalFlowBean.getNodes().size() == 0 &&
-                            mCommonApprovalFlowBean.getProcesss().size() == 0 &&
-                            !status.equals("已审批")){
-                        wdd_status.setTextColor(mContext.getResources().getColor(R.color.done_approval));
-                        wdd_status.setText("未提交");
-                        resanddel_ll.setVisibility(View.VISIBLE);
-                        submittype = "unsubmit";  //未提交状态
-                    }
-                }catch (Exception e){
-                    e.printStackTrace();
-                }
+//                int nodesnum = mCommonApprovalFlowBean.getNodes().size();
+//                int datanum = mCommonApprovalFlowBean.getData().size();
+//                if(nodesnum > 0 && datanum > 0 && nodesnum == datanum){
+//                    if(mCommonApprovalFlowBean.getNodes().get(nodesnum-1).getJn_dealResult().equals("同意")){
+//                        wdd_status.setTextColor(getApplicationContext().getResources().getColor(R.color.approval));
+//                        wdd_status.setText("已审批");
+//                        resanddel_ll.setVisibility(View.GONE);
+//                    }
+//                }
+//                try{
+//                    // 当保存数据但未提交时的解决方案
+//                    submittype = new String();
+//                    if(mCommonApprovalFlowBean.getData().size() == 0 &&
+//                            mCommonApprovalFlowBean.getNodes().size() == 0 &&
+//                            mCommonApprovalFlowBean.getProcesss().size() == 0 &&
+//                            !status.equals("已审批")){
+//                        wdd_status.setTextColor(mContext.getResources().getColor(R.color.done_approval));
+//                        wdd_status.setText("未提交");
+//                        resanddel_ll.setVisibility(View.VISIBLE);
+//                        submittype = "unsubmit";  //未提交状态
+//                    }
+//                }catch (Exception e){
+//                    e.printStackTrace();
+//                }
 
             }
 
@@ -267,45 +296,25 @@ public class DailydetailsActivity extends BaseActivity {
         wdd_status = (TextView) findViewById(R.id.work_daily_detail_status_tv);
         plan_ll = (LinearLayout) findViewById(R.id.work_daily_detail_plan_ll);
         experience_ll = (LinearLayout) findViewById(R.id.work_daily_detail_experience_ll);
-        complete_tasklv = (MyListView) findViewById(R.id.work_daily_detail_completedtask_lv);
-        uncomplete_tasklv = (MyListView) findViewById(R.id.work_daily_detail_uncompletedtask_lv);
         approval_flowlv = (MyListView) findViewById(R.id.work_daily_detail_approval_flow_lv);
-        no_task = (TextView) findViewById(R.id.work_daily_detail_no_task);
-        addDaily = (TextView) findViewById(R.id.work_daily_detail_back_to_add);
         unsubmit_iv = (ImageView) findViewById(R.id.work_daily_unsubmit_iv);
         resanddel_ll = (LinearLayout) findViewById(R.id.item_common_docui_res_and_del_ll);
         resubmit_ll = (LinearLayout) findViewById(R.id.common_docui_resubmit_ll);
         delete_ll = (LinearLayout) findViewById(R.id.common_docui_delete_ll);
+        resubmit_tv = (TextView) findViewById(R.id.common_docui_resubmit_tv);
+        done_task_ll = (LinearLayout) findViewById(R.id.work_daily_detail_donetask_ll);
+        done_task_tv = (TextView) findViewById(R.id.work_daily_detail_donetask_tv);
+        undo_task_ll = (LinearLayout) findViewById(R.id.work_daily_detail_undotask_ll);
+        undo_task_tv = (TextView) findViewById(R.id.work_daily_detail_undotask_tv);
 
-        //加载审批流的适配器
         mEmptyLayput_approvalflow = new EmptyLayout(this, approval_flowlv);
         mEmptyLayput_approvalflow.setShowEmptyButton(false);
         mEmptyLayput_approvalflow.setShowErrorButton(false);
         mEmptyLayput_approvalflow.setShowLoadingButton(false);
+        //加载审批流的适配器
         mCommonApprovalFlowBean = new CommonApprovalFlowBean();
         mDailyDetailsApprovalFlowAdapter = new DailyDetailsApprovalFlowAdapter(this);
 
-
-        //加载我的任务的适配器
-        mEmptyLayput_Task = new EmptyLayout(this, complete_tasklv);
-        mEmptyLayput_Task.setShowEmptyButton(false);
-        mEmptyLayput_Task.setShowErrorButton(false);
-        mEmptyLayput_Task.setShowLoadingButton(false);
-        mWorkTaskBeanList = new ArrayList<>();
-        mDailyDetailsWorkTaskAdapter = new DailyDetailsWorkTaskAdapter(this);
-//        if (mWorkTaskBeanList.isEmpty()) {
-//            task_rl.setVisibility(View.GONE);
-//        } else {
-        no_task.setVisibility(View.GONE);
-        for(int i = 0;i<5;i++){
-            WorkTaskBean workTaskBean =new WorkTaskBean();
-            mWorkTaskBeanList.add(workTaskBean);
-        }
-        mDailyDetailsWorkTaskAdapter.setmWorkTaskBeanList(mWorkTaskBeanList);
-        complete_tasklv.setAdapter(mDailyDetailsWorkTaskAdapter);
-//        }
-
-
         manager = new DBManager(this);
         im_ids =new ArrayList<>();
 
@@ -403,7 +412,7 @@ public class DailydetailsActivity extends BaseActivity {
         if (retype.equals("reforsub")){  //反提交之重新提交请求
             ViewUtil.httpSendRequest(this, resubmit_url, params, handler, headers, DAILY_REFORSUB_SUCCESSFULLY, null, null, "post");
         }else if (retype.equals("refordelete")){ //反提交之删除请求
-            ViewUtil.httpSendRequest(this, resubmit_url, params, handler, headers, DAILY_REFORDELETE_SUCCESSFULLY, null, null, "post");
+            ViewUtil.httpSendRequest(this, resubmit_url, params, handler, headers, REFORDELETE_DOC_REQUEST_SUCCESSFULLY, null, null, "post");
         }
     }
 
@@ -412,7 +421,9 @@ public class DailydetailsActivity extends BaseActivity {
         final Intent intent = getIntent();
         date = intent.getStringExtra("Date");
         summary = intent.getStringExtra("Content");
-        status = intent.getStringExtra("Status");
+        if (!TextUtils.isEmpty(intent.getStringExtra("WD_Status"))){
+            wd_status = intent.getStringExtra("WD_Status");
+        }
         mkeyValue = intent.getIntExtra("ID", -1); Log.i("first_mkeyValue",mkeyValue + "");
         fromwhere = intent.getStringExtra("fromwhere");
         if (!TextUtils.isEmpty(intent.getStringExtra("Plan"))) {
@@ -425,23 +436,34 @@ public class DailydetailsActivity extends BaseActivity {
         } else {
             experience_ll.setVisibility(View.GONE);
         }
-//        if (!TextUtils.isEmpty(summary) && !TextUtils.isEmpty(status) && !TextUtils.isEmpty(date)) {
-            wdd_data.setText(date);
-            wdd_summary.setText(summary);
-            if(status.equals("已审批")){
-                wdd_status.setTextColor(mContext.getResources().getColor(R.color.approval));
-                resanddel_ll.setVisibility(View.GONE);
-            }else if (status.equals("待审批")){
-                wdd_status.setTextColor(mContext.getResources().getColor(R.color.no_approval));
-            }
-            wdd_status.setText(status);
+        if (!TextUtils.isEmpty(intent.getStringExtra("Donetask"))){
+            done_task_ll.setVisibility(View.VISIBLE);
+            done_task_tv.setText(Html.fromHtml(intent.getStringExtra("Donetask")));
+            donetask = intent.getStringExtra("Donetask");
+        }else {
+            done_task_ll.setVisibility(View.GONE);
+        }
+        wdd_data.setText(date);
+        wdd_summary.setText(summary);
+        if(wd_status.equals("已审核")){
+            wdd_status.setTextColor(mContext.getResources().getColor(R.color.approval));
+            wdd_status.setText("已审批");
+            resanddel_ll.setVisibility(View.GONE);
+        }else if (wd_status.equals("已提交")){
+            wdd_status.setTextColor(mContext.getResources().getColor(R.color.no_approval));
+            wdd_status.setText("待审批");
+            resanddel_ll.setVisibility(View.VISIBLE);
+        }else if (wd_status.equals("在录入")){
+            wdd_status.setTextColor(mContext.getResources().getColor(R.color.done_approval));
+            wdd_status.setText("未提交");
+            resanddel_ll.setVisibility(View.VISIBLE);
+            submittype = "unsubmit";
+            resubmit_tv.setText("提交");
+        }
+
+        wdd_plan.setText(plan);
+        wdd_experience.setText(experience);
 
-            wdd_plan.setText(plan);
-            wdd_experience.setText(experience);
-//        } else {
-//            Toast.makeText(this, "数据异常", Toast.LENGTH_LONG).show();
-//            finish();    //这里就是处理在后台错误情况下传回错的数据才会执行该finish语句,否则永不执行
-//        }
 
         // 当获取到正确的单据caller和单据id时 请求获取审批流数据
         if(!TextUtils.isEmpty(mCaller)&&mkeyValue!= -1){
@@ -498,44 +520,11 @@ public class DailydetailsActivity extends BaseActivity {
     }
 
     /**
-     *  兼容data[]审批人信息为空的情况,UAS部门这里data全部异常,!!
+     *  兼容data[]审批人信息为空的情况,UAS部门这里data全部异常,!! ,仅仅对日报审批流这样处理了,通用单据没兼容
      *  nodesnum = datanum && 最终已审批状态显示
      * @param mCommonApprovalFlowBean
      */
     private void Showflownodata(CommonApprovalFlowBean mCommonApprovalFlowBean) {
-        if (ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())
-                && ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss())
-                && ListUtils.isEmpty(mCommonApprovalFlowBean.getData())){
-            try{
-                // 当保存数据但未提交时的解决方案
-                if(mCommonApprovalFlowBean.getData().size() == 0 &&
-                        mCommonApprovalFlowBean.getNodes().size() == 0 &&
-                        mCommonApprovalFlowBean.getProcesss().size() == 0 &&
-                        !status.equals("已审批")){
-                    wdd_status.setTextColor(mContext.getResources().getColor(R.color.done_approval));
-                    wdd_status.setText("未提交");
-                    resanddel_ll.setVisibility(View.VISIBLE);
-
-                   /* unsubmit_iv.setVisibility(View.GONE);
-                    unsubmit_iv.setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            Intent intent = new Intent(activity,WorkDailyAddActivity.class);
-                            intent.putExtra("UC_Summary",summary);
-                            intent.putExtra("UC_Plan",plan);
-                            intent.putExtra("UC_Experience",experience);
-                            intent.putExtra("id",mkeyValue);
-                            intent.putExtra("resubmit","UCsubmit");
-                            startActivity(intent);
-                            finish();
-                        }
-                    });*/
-
-                }
-            }catch (Exception e){
-                e.printStackTrace();
-            }
-        }
 
         if(!ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())
                 && !ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss())
@@ -550,7 +539,6 @@ public class DailydetailsActivity extends BaseActivity {
                     String whichsys = CommonUtil.getSharedPreferences(mContext, "erp_master");
                     String emCode = mCommonApprovalFlowBean.getNodes().get(i).getJn_dealManId();
                     if (emCode.contains(",")) {
-//                                        im_ids.add("");
                         String str[] = emCode.split(",");
                         emCode = str[0];
                         ToastMessage("多人审批,头像已显示为首个");   //该情况只有在测试账号情况下出现
@@ -567,20 +555,19 @@ public class DailydetailsActivity extends BaseActivity {
                             im_ids.add(imId);
                         } else {
                             im_ids.add("");
-//                                            ToastMessage("审批流头像获取异常,已显示为默认");
                         }
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
-            }
+                }
                 Log.i("imids", im_ids.toString());
-            mDailyDetailsApprovalFlowAdapter.setIm_ids(im_ids);
+                mDailyDetailsApprovalFlowAdapter.setIm_ids(im_ids);
 
-            // 设置数据之前先通过数据库获取到所有的imid保存到内存中
-            mDailyDetailsApprovalFlowAdapter.setmCommonApprovalFlowBean(mCommonApprovalFlowBean);
-            approval_flowlv.setAdapter(mDailyDetailsApprovalFlowAdapter);
+                // 设置数据之前先通过数据库获取到所有的imid保存到内存中
+                mDailyDetailsApprovalFlowAdapter.setmCommonApprovalFlowBean(mCommonApprovalFlowBean);
+                approval_flowlv.setAdapter(mDailyDetailsApprovalFlowAdapter);
 
-        }else {
+            }else {
                 mEmptyLayput_approvalflow.showEmpty();
             }
         }

+ 16 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/DestinationActivity.java

@@ -106,7 +106,7 @@ public class DestinationActivity extends BaseActivity {
                         showList.add(e);
                     }
                 }
-                if (!StringUtils.isEmpty(str) && ListUtils.isEmpty(showList) && !ListUtils.isEmpty(allList)) {
+                if (!StringUtils.isEmpty(str) && ListUtils.isEmpty(showList)) {
                     MissionModel empty = new MissionModel();
                     empty.setCompanyName(str);
                     empty.setStatus(2);
@@ -165,7 +165,7 @@ public class DestinationActivity extends BaseActivity {
         final Map<String, Object> param = new HashMap<>();
         param.put("condition", "1=1");
         param.put("pageIndex", pager);
-        param.put("pageSize", 20);
+        param.put("pageSize", 1000);
         LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
         headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(this, "sessionId"));
         ViewUtil.httpSendRequest(this, url, param, handler, headers, 0x11, null, null, "post");
@@ -259,10 +259,11 @@ public class DestinationActivity extends BaseActivity {
             }
             String company = entity.getCompanyName();
             if (!StringUtils.isEmpty(company) && entity.getStatus() == 2) {
-                String text = "将 " + company + " 加入常用地址";
+                String text = "将 " + company;
                 int start = text.indexOf(company.charAt(0));
                 SpannableStringBuilder style = new SpannableStringBuilder(text);
-                style.setSpan(new TextAppearanceSpan(MyApplication.getInstance(), R.style.text_color), start, company.length() + start, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+                style.setSpan(new TextAppearanceSpan(MyApplication.getInstance(), R.style.text_color),
+                        start, company.length() + start, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                 holder.add_tv.setText(style);
                 holder.add_tv.setOnClickListener(new View.OnClickListener() {
                     @Override
@@ -277,9 +278,9 @@ public class DestinationActivity extends BaseActivity {
             if (entity.getStatus() != 2) {
                 holder.company_tv.setText(getNotNull(entity.getCompanyName()));
                 holder.companyaddr_tv.setText(getNotNull(entity.getCompanyAddr()));
-                holder.visit_num_tv.setText("拜访次数:" + entity.getVisitcount());
-                holder.last_time_tv.setText("上次拜访时间:" + entity.getVisitTime());
-                holder.long_tv.setText("距离:" + BaiduMapUtil.getInstence().getDistance(entity.getLatLng()) + "m");
+                holder.visit_num_tv.setText("总拜访 " + entity.getVisitcount() + "次");
+                holder.last_time_tv.setText("上次拜访 " + getLastime(entity.getVisitTime()));
+                holder.long_tv.setText(BaiduMapUtil.getInstence().getDistance(entity.getLatLng()) + "m");
             }
             return view;
         }
@@ -298,6 +299,14 @@ public class DestinationActivity extends BaseActivity {
 
         }
 
+        private String getLastime(String time) {
+            if (StringUtils.isEmpty(time)) return "";
+            try {
+                return TimeUtils.s_long_2_str(TimeUtils.f_str_2_long(time));
+            } catch (Exception e) {
+                return "";
+            }
+        }
     }
 
     private String getNotNull(String str) {

+ 15 - 23
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/LocationMapActivity.java

@@ -5,14 +5,13 @@ import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
-import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
-import android.widget.CheckBox;
 import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.baidu.mapapi.map.MapView;
@@ -39,6 +38,7 @@ import java.util.List;
  * 2、参数:1、title(标题String) 2、style(主题 int) 3、Single(是否单选 boolean) 7、qzone_select_add (工作圈定位设置自定义标题String)
  * 4、search(是否有搜索框 boolean) 5、resultcode(返回码 int) 6、type(搜索方式int 1.搜索附近 2.搜索地名)
  */
+@Deprecated
 public class LocationMapActivity extends BaseActivity implements OnGetPoiSearchResultListener {
     public static final int REQUCODE = 0x103;  //返回码
     public static final int HIDDEN_REQUCODE = 0x104;
@@ -55,6 +55,7 @@ public class LocationMapActivity extends BaseActivity implements OnGetPoiSearchR
     private TextView hidden_location_tv;
     private LinearLayout qzone_map_ll;
     private TextView location_city_tv;
+    private RelativeLayout search_rl;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -64,7 +65,7 @@ public class LocationMapActivity extends BaseActivity implements OnGetPoiSearchR
         location = getIntent().getIntExtra("data", 500);
 
         String qzone_select_add = getIntent().getStringExtra("qzone_select_add");
-        if (!TextUtils.isEmpty(qzone_select_add) && qzone_select_add.equals("qzone_select_add")){
+        if (!TextUtils.isEmpty(qzone_select_add) && qzone_select_add.equals("qzone_select_add")) {
             getSupportActionBar().setTitle("选择位置");
         }
         init();
@@ -106,8 +107,9 @@ public class LocationMapActivity extends BaseActivity implements OnGetPoiSearchR
         BaiduMapUtil.getInstence().setMapViewPoint(mapView, point);
         adapter = new LocationMapAdapter();
         listView.setAdapter(adapter);
-        if (!TextUtils.isEmpty(getIntent().getStringExtra("qzoneaddr"))){
+        if (!TextUtils.isEmpty(getIntent().getStringExtra("qzoneaddr"))) {
             mapView.setVisibility(View.GONE);
+            search_rl.setVisibility(View.GONE);
         }
         //选择
         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@@ -149,19 +151,20 @@ public class LocationMapActivity extends BaseActivity implements OnGetPoiSearchR
     }
 
     private void init() {
+        search_rl = (RelativeLayout) findViewById(R.id.search_rl);
         hidden_location_tv = (TextView) findViewById(R.id.hidden_location_tv);
         qzone_map_ll = (LinearLayout) findViewById(R.id.qzone_map_ll);
         location_city_tv = (TextView) findViewById(R.id.location_city_tv);
         String addr = new String();
-        if (!TextUtils.isEmpty(getIntent().getStringExtra("qzoneaddr"))){
+        if (!TextUtils.isEmpty(getIntent().getStringExtra("qzoneaddr"))) {
             addr = getIntent().getStringExtra("qzoneaddr");
             qzone_map_ll.setVisibility(View.VISIBLE);
 
-            Log.i("qzoneaddr",getIntent().getStringExtra("qzoneaddr"));
-            if (!TextUtils.isEmpty(MyApplication.getInstance().getBdLocationHelper().getCityName())){
+            Log.i("qzoneaddr", getIntent().getStringExtra("qzoneaddr"));
+            if (!TextUtils.isEmpty(MyApplication.getInstance().getBdLocationHelper().getCityName())) {
                 location_city_tv.setText(MyApplication.getInstance().getBdLocationHelper().getCityName());
             }
-        }else if (!TextUtils.isEmpty(getIntent().getStringExtra("addr"))){
+        } else if (!TextUtils.isEmpty(getIntent().getStringExtra("addr"))) {
             addr = getIntent().getStringExtra("addr");
 //            qzone_map_ll.setVisibility(View.GONE);
         }
@@ -227,26 +230,20 @@ public class LocationMapActivity extends BaseActivity implements OnGetPoiSearchR
                 holder = new ViewHolder();
                 holder.address_tv = (TextView) view.findViewById(R.id.address_tv);
                 holder.name_tv = (TextView) view.findViewById(R.id.name_tv);
-                holder.select_rb = (CheckBox) view.findViewById(R.id.select_rb);
+                holder.distance_tv = (TextView) view.findViewById(R.id.distance_tv);
                 view.setTag(holder);
             } else {
                 holder = (ViewHolder) view.getTag();
             }
             holder.address_tv.setText(listData.get(i).address);
             holder.name_tv.setText(listData.get(i).name);
-            if (selectItem == i) {
-                holder.select_rb.setChecked(true);
-            } else {
-                holder.select_rb.setChecked(false);
-            }
-            holder.select_rb.setClickable(false);
-            holder.select_rb.setFocusable(false);
+            holder.distance_tv.setText(BaiduMapUtil.getInstence().
+                    getDistance(listData.get(i).location) + "m");
             return view;
         }
 
         class ViewHolder {
-            TextView name_tv, address_tv;
-            CheckBox select_rb;
+            TextView name_tv, address_tv, distance_tv;
         }
     }
 
@@ -255,11 +252,6 @@ public class LocationMapActivity extends BaseActivity implements OnGetPoiSearchR
         super.onDestroy();
     }
 
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-//        getMenuInflater().inflate(R.menu.menu_visit_save, menu);
-        return super.onCreateOptionsMenu(menu);
-    }
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {

+ 27 - 21
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/LocationSearchActivity.java

@@ -3,7 +3,6 @@ package com.xzjmyk.pm.activity.ui.erp.activity.oa;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.Editable;
-import android.text.TextWatcher;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -11,7 +10,6 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
-import android.widget.CheckBox;
 import android.widget.EditText;
 import android.widget.ListView;
 import android.widget.RelativeLayout;
@@ -28,6 +26,7 @@ import com.xzjmyk.pm.activity.BdLocationHelper;
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.entity.EditChangeListener;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
@@ -35,8 +34,6 @@ import com.xzjmyk.pm.activity.util.BaiduMapUtil;
 import java.util.ArrayList;
 import java.util.List;
 
-import static android.view.View.GONE;
-
 /**
  * 检索地址列表
  * 1.外勤签到、打卡签到、会议详情
@@ -47,7 +44,7 @@ import static android.view.View.GONE;
  * <p>
  * 公共:
  * 1、title(标题String) 2、style(主题 int)
- * 3、single(是否单选 boolean) 4、search(是否有搜索框 boolean)
+ * 3、latlng(对比距离的位置)   l 4、search(是否有搜索框 boolean)
  * 5、resultCode(返回码 int) 6、resultName(返回key String )
  */
 public class LocationSearchActivity extends BaseActivity {
@@ -72,6 +69,7 @@ public class LocationSearchActivity extends BaseActivity {
     private List<PoiInfo> listData;  //周围地址主体;列表
     private ArrayList<PoiInfo> selectedData;//选择状态的数据 多选下使用
     private LatLng latLng;//当前位置
+    private LatLng companyLat;//当前位置
     private BdLocationHelper locationHelper;
     private int pageNum = 0;
     private LocationAdapter adapter;
@@ -122,6 +120,11 @@ public class LocationSearchActivity extends BaseActivity {
         search = intent.getBooleanExtra("search", false);
         resultCode = intent.getIntExtra("resultCode", 0x20);
         resultName = intent.getStringExtra("resultName");
+        companyLat = intent.getParcelableExtra("latlng");
+        if (companyLat == null) {
+            companyLat = new LatLng(MyApplication.getInstance().getBdLocationHelper().getLatitude(),
+                    MyApplication.getInstance().getBdLocationHelper().getLongitude());
+        }
         if (StringUtils.isEmpty(resultName)) resultName = "resultName";
         type = intent.getIntExtra("type", 1);
         radius = intent.getIntExtra("radius", 1000);
@@ -164,15 +167,7 @@ public class LocationSearchActivity extends BaseActivity {
     }
 
     private void initEvent() {
-        search_edit.addTextChangedListener(new TextWatcher() {
-            @Override
-            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
-            }
-
-            @Override
-            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
-            }
-
+        search_edit.addTextChangedListener(new EditChangeListener() {
             @Override
             public void afterTextChanged(Editable editable) {
                 if (editable == null) return;
@@ -184,10 +179,17 @@ public class LocationSearchActivity extends BaseActivity {
                     if (isOK)
                         chche.add(e);
                 }
-                if (ListUtils.isEmpty(chche)) return;
-                adapter.setListData(chche);
+                if (ListUtils.isEmpty(chche)) {//如果数据为空,就获取输入的地址对应的数据
+                    if (type == 2) {
+                        loadDataByCity(key);
+                    }
+                    return;
+                } else {
+                    adapter.setListData(chche);
+                }
             }
         });
+
         listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
@@ -199,7 +201,12 @@ public class LocationSearchActivity extends BaseActivity {
     }
 
     private void loadDataByCity() {
+        loadDataByCity(StringUtils.isEmpty(keyWork) ? "" : keyWork);
+    }
+
+    private void loadDataByCity(String keyWork) {
         BaiduMapUtil.getInstence().searchByInput(keyWork, pageNum, listener);
+
     }
 
     private void loadDataByNeer() {
@@ -263,21 +270,20 @@ public class LocationSearchActivity extends BaseActivity {
                 holder = new ViewHolder();
                 holder.address_tv = (TextView) view.findViewById(R.id.address_tv);
                 holder.name_tv = (TextView) view.findViewById(R.id.name_tv);
-                holder.select_rb = (CheckBox) view.findViewById(R.id.select_rb);
+                holder.distance_tv = (TextView) view.findViewById(R.id.distance_tv);
                 view.setTag(holder);
             } else {
                 holder = (ViewHolder) view.getTag();
             }
             holder.address_tv.setText(listData.get(i).address);
             holder.name_tv.setText(listData.get(i).name);
-            holder.select_rb.setVisibility(single ? GONE : View.VISIBLE);
-            //TODO 当前值存在单选情况,多选到使用时候再做
+            holder.distance_tv.setText(BaiduMapUtil.getInstence().
+                    getDistance(listData.get(i).location, companyLat) + " m");
             return view;
         }
 
         class ViewHolder {
-            TextView name_tv, address_tv;
-            CheckBox select_rb;
+            TextView name_tv, address_tv, distance_tv;
         }
     }
 }

+ 247 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionActivity.java

@@ -0,0 +1,247 @@
+package com.xzjmyk.pm.activity.ui.erp.activity.oa;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.RecyclerView;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+
+import com.baidu.mapapi.model.LatLng;
+import com.baidu.mapapi.search.core.PoiInfo;
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.ViewInject;
+import com.xzjmyk.pm.activity.AppConfig;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.base.BaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.adapter.MissionAdapter;
+import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
+import com.xzjmyk.pm.activity.ui.erp.presenter.MissionPresenter;
+import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IMission;
+import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IMissionPresenter;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.auto.AlarmService;
+import com.xzjmyk.pm.activity.util.BaiduMapUtil;
+import com.xzjmyk.pm.activity.util.PreferenceUtils;
+import com.xzjmyk.pm.activity.util.TimeUtils;
+import com.xzjmyk.pm.activity.view.MostLinearLayoutManager;
+import com.xzjmyk.pm.activity.view.crouton.Crouton;
+
+import java.util.List;
+
+
+public class MissionActivity extends BaseActivity implements View.OnClickListener, IMission, MissionAdapter.OnitemClickListener {
+    @ViewInject(R.id.recycler)
+    private RecyclerView recycler;
+
+    public int position;//调转指针
+    private IMissionPresenter presenter;
+    private MissionAdapter adapter;
+    private int flag;
+    private boolean adminStatus;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_mission);
+        ViewUtils.inject(this);
+        initView();
+        initEvent();
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.menu_outoffice, menu);
+        return super.onCreateOptionsMenu(menu);
+    }
+
+    @Override
+    public void onBackPressed() {
+        endActivity();
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == android.R.id.home) {
+            endActivity();
+            return true;
+        } else if (item.getItemId() == R.id.title) {
+            Intent intent = new Intent(ct, MissionSetActivity.class);
+            intent.putExtra(AppConfig.IS_ADMIN, adminStatus);
+            startActivityForResult(intent, 0x20);
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    private void initEvent() {
+        findViewById(R.id.click_btn).setOnClickListener(this);
+        findViewById(R.id.additem_tv).setOnClickListener(this);
+    }
+
+    private void initView() {
+        if (getIntent() != null)
+            flag = getIntent().getIntExtra("flag", 0);
+        adminStatus = getIntent() == null ? false : getIntent().getBooleanExtra(AppConfig.IS_ADMIN, false);
+        adapter = new MissionAdapter(this, this);
+        recycler.setLayoutManager(new MostLinearLayoutManager(ct));
+        recycler.setAdapter(adapter);
+        presenter = new MissionPresenter(this);
+        presenter.start();
+    }
+
+
+    private void endActivity() {
+        //更新外勤计划 TODO 先这样定 后期修改缓存方式
+        sendBroadcast(new Intent(AlarmService.UPDATA_MISSION_PLAN));
+        boolean isAuto = PreferenceUtils.getBoolean(AppConfig.AUTO_MISSION, false);
+        if (isAuto) {
+            setResult(0x20);
+            finish();
+        } else {
+            if (flag == 1) {
+                //启动手动外勤
+                Intent intent = new Intent(ct, OutofficeActivity.class);
+                intent.putExtra(AppConfig.IS_ADMIN, true);//上传管理员状态
+                startActivity(intent);
+                finish();
+            } else if (flag == 2) {
+                setResult(0x20);
+                finish();
+            }
+        }
+    }
+
+    @Override
+    public void showLoading() {
+        progressDialog.show();
+    }
+
+    @Override
+    public void dimssLoading() {
+        if (progressDialog.isShowing())
+            progressDialog.dismiss();
+    }
+
+    @Override
+    public void showToast(String message, int colorId) {
+        Crouton.showToast(ct, message, colorId);
+    }
+
+    @Override
+    public void showToast(int reId, int colorId) {
+        Crouton.showToast(ct, reId, colorId);
+    }
+
+    @Override
+    public void showModels(List<MissionModel> models) {
+        if (adapter != null) {
+            adapter.setModels(models);
+            adapter.notifyDataSetChanged();
+        } else {//容错
+            adapter = new MissionAdapter(this, this);
+            recycler.setLayoutManager(new MostLinearLayoutManager(ct));
+            recycler.setAdapter(adapter);
+        }
+    }
+
+    @Override
+    public void changModelStatus(int status, int postion) {
+        if (ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= postion) return;
+        adapter.getModels().get(postion).setStatus(status);
+        adapter.notifyItemChanged(postion);
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.additem_tv:
+                presenter.addEmptyModel();
+                break;
+            case R.id.click_btn:
+                presenter.submit(adapter.getModels());
+                break;
+        }
+    }
+
+
+    @Override
+    public void click(final int position, MissionModel model, View view) {
+        Intent intent = null;
+        MissionActivity.this.position = position;
+        switch (view.getId()) {
+            case R.id.item_company_tv://选择公司名称
+                if (model == null || model.getStatus() == 1) return;
+                intent = new Intent(ct, DestinationActivity.class);
+                startActivityForResult(intent, 0x20);
+                break;
+            case R.id.item_companyaddr_tv://选择公司地址
+                if (model == null || model.getStatus() == 1) return;
+                String company = model.getCompanyName();
+                intent = new Intent(ct, LocationSearchActivity.class);
+                intent.putExtra("type", 2);
+                intent.putExtra("keyWork", company);
+                intent.putExtra("title", "选择地址");
+                intent.putExtra("single", true);
+                intent.putExtra("resultCode", 0x20);
+                intent.putExtra("resultName", "resultName");
+                startActivityForResult(intent, 0x21);
+                break;
+            case R.id.item_delete_tv://删除选项
+                adapter.getModels().remove(position);
+                adapter.notifyItemRemoved(position);
+                adapter.notifyItemRangeChanged(position, adapter.getModels().size());
+                break;
+            case R.id.item_reckontime_tv://预计到达时间
+                if (model == null || model.getStatus() == 1) return;
+                TimeUtils.showDateDialog(MissionActivity.this, new TimeUtils.OnSelectListener() {
+                    @Override
+                    public void callBack(String time) {
+                        adapter.getModels().get(position).setVisitTime(time);
+                        adapter.notifyItemChanged(position);
+                    }
+                });
+                break;
+        }
+    }
+
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (resultCode != 0x20 || data == null) return;
+        if (requestCode == 0x20) {//选择公司
+            MissionModel entity = data.getParcelableExtra("data");
+            if (entity == null) return;
+            if (ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= position)
+                return;
+            adapter.getModels().get(position).setCompanyName(StringUtils.isEmpty(entity.getCompanyName()) ? "" : entity.getCompanyName());
+            adapter.getModels().get(position).setCompanyAddr(StringUtils.isEmpty(entity.getCompanyAddr()) ? "" : entity.getCompanyAddr());
+            adapter.getModels().get(position).setVisitcount(1 + entity.getVisitcount());
+            adapter.getModels().get(position).setLatLng(entity.getLatLng());
+            adapter.getModels().get(position).setDistance(BaiduMapUtil.getInstence().distance(adapter.getModels().get(position).getLatLng()
+                    , new LatLng(MyApplication.getInstance().getBdLocationHelper().getLatitude(),
+                            MyApplication.getInstance().getBdLocationHelper().getLongitude())));
+            adapter.notifyItemChanged(position);
+        } else if (requestCode == 0x21) {//选择地址
+            PoiInfo info = data.getParcelableExtra("resultName");
+            if (info == null) {
+                return;
+            } else {
+                String distance = BaiduMapUtil.getInstence().getDistance(info.location);
+                if (StringUtils.isEmpty(distance)) return;
+                if (ListUtils.isEmpty(adapter.getModels()) || adapter.getModels().size() <= position)
+                    return;
+                if (StringUtils.isEmpty(adapter.getModels().get(position).getCompanyName()))
+                    adapter.getModels().get(position).setCompanyName(info.name);
+                adapter.getModels().get(position).setCompanyAddr(info.address);
+                adapter.getModels().get(position).setLatLng(info.location);
+                adapter.getModels().get(position).setDistance(BaiduMapUtil.getInstence().distance(adapter.getModels().get(position).getLatLng()
+                        , new LatLng(MyApplication.getInstance().getBdLocationHelper().getLatitude(),
+                                MyApplication.getInstance().getBdLocationHelper().getLongitude())));
+                adapter.notifyItemChanged(position);
+            }
+        }
+
+    }
+}

+ 2 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionPlanActivity.java

@@ -284,6 +284,8 @@ public class MissionPlanActivity extends BaseActivity implements View.OnClickLis
         });
     }
 
+
+
     //获取外勤计划接口
     private void loadOutPlan() {
         progressDialog.show();

+ 4 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAActivity.java

@@ -748,14 +748,15 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
                 startActivityForResult(intent, 0x11);
                 break;
             case R.id.signin://打卡签到
-                startActivity(new Intent(activity, SigninActivity.class));
-//                startActivity(new Intent(activity, WorkActivity.class));
+//                startActivity(new Intent(activity, SigninActivity.class));
+                startActivity(new Intent(activity, WorkActivity.class));
                 break;
             case R.id.outoffice:  //外勤签到
                 boolean is = PreferenceUtils.getBoolean(AppConfig.AUTO_MISSION, false);
                 Log.i("gongpengming", "isAuto=" + is);
                 if (is && AppConfig.IS_MISSION) {
-                    intent = new Intent(activity, MissionPlanActivity.class);
+//                    intent = new Intent(activity, MissionPlanActivity.class);
+                    intent = new Intent(activity, MissionActivity.class);
                     intent.putExtra("flag", 1);
                 } else {
                     intent = new Intent(activity, OutofficeActivity.class);
@@ -765,7 +766,6 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
                 break;
             case R.id.meeting://会议管理
                 startActivity(new Intent(activity, MeetingActivity.class));
-//                startActivity(new Intent(activity, SigninActivity.class));
                 break;
             case R.id.worklog://工作日志
                 startActivity(new Intent(activity, WorkDailyAddActivity.class));

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OutofficeSetActivity.java

@@ -124,7 +124,7 @@ public class OutofficeSetActivity extends BaseActivity {
 
 
     private void initview() {
-        mission_rl.setVisibility( AppConfig.IS_MISSION? View.VISIBLE : View.GONE);
+        mission_rl.setVisibility(AppConfig.IS_MISSION ? View.VISIBLE : View.GONE);
         Intent intent = getIntent();
         if (intent != null) {
             isImage.setChecked(intent.getBooleanExtra("isImage", false));
@@ -219,7 +219,7 @@ public class OutofficeSetActivity extends BaseActivity {
             @Override
             public void result(int code, String result) {
                 if (isAuto) {
-                    Intent intent = new Intent(ct, MissionPlanActivity.class);
+                    Intent intent = new Intent(ct, MissionActivity.class);
                     intent.putExtra("flag", 2);
                     intent.putExtra(AppConfig.IS_ADMIN, true);//上传管理员状态
                     startActivityForResult(intent, 0x20);

+ 17 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/TestActivity.java

@@ -1,6 +1,5 @@
 package com.xzjmyk.pm.activity.ui.erp.activity.oa;
 
-import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -15,9 +14,11 @@ import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.AppConfig;
 import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.db.dao.MissionDao;
 import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.entity.ErrorEntity;
+import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
 import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
@@ -66,7 +67,6 @@ public class TestActivity extends BaseActivity implements View.OnClickListener {
                         show("getOffTime" + m.getOffTime());
                         show("getWorkStart" + m.getWorkStart());
                         show("getWorkSignin" + m.getWorkSignin());
-
                         show("getOffTime" + m.getOffTime());
                         show("getOffSignin" + m.getOffSignin());
                         show("getOffend" + m.getOffend());
@@ -76,7 +76,21 @@ public class TestActivity extends BaseActivity implements View.OnClickListener {
                 }
                 break;
             case R.id.test_btn:
-                startActivity(new Intent(ct, WorkActivity.class));
+                List<MissionModel> models = MissionDao.getInstance().queryByEnCode();
+                if (ListUtils.isEmpty(models)) {
+                    show("models  为空");
+                } else {
+                    for (MissionModel m : models) {
+                        show("getCompanyName" + m.getCompanyName());
+                        show("getCompanyAddr" + m.getCompanyAddr());
+                        show("getStatus" + m.getStatus());
+                        show("getLocation" + m.getLocation());
+                        show("getDistance" + m.getDistance());
+                        show("getRecorddate" + m.getRecorddate());
+                        show("getVisitTime" + m.getVisitTime());
+                        show("__________________________________");
+                    }
+                }
                 break;
         }
     }

+ 39 - 17
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkActivity.java

@@ -11,6 +11,7 @@ import android.view.View;
 import android.widget.TextView;
 
 import com.afollestad.materialdialogs.MaterialDialog;
+import com.baidu.mapapi.model.LatLng;
 import com.baidu.mapapi.search.core.PoiInfo;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
@@ -19,7 +20,6 @@ import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.adapter.WorkAdapter;
 import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
 import com.xzjmyk.pm.activity.ui.erp.presenter.WorkPresenter;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkPresenter;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkView;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
@@ -55,9 +55,12 @@ public class WorkActivity extends BaseActivity implements View.OnClickListener,
     private WorkAdapter adapter;
 
     private boolean isToday = true;
-    private IWorkPresenter presenter;
+    private WorkPresenter presenter;
     private String macAddress;
     private String macError;//变更mac地址
+    private long selectTime;
+    private List<PoiInfo> pois;
+    private LatLng latLng;
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
@@ -86,14 +89,14 @@ public class WorkActivity extends BaseActivity implements View.OnClickListener,
     }
 
     private void initView() {
+        selectTime = System.currentTimeMillis();
         getMac();
-        presenter = new WorkPresenter(this);
+        presenter = new WorkPresenter(this, macAddress);
         adapter = new WorkAdapter(ct);
         listview.setLayoutManager(new LinearLayoutManager(ct));
         listview.setAdapter(adapter);
-        presenter.startForUi();
+        presenter.start();
         date_tv.setText(TimeUtils.long2str(System.currentTimeMillis(), "yyyy年MM月dd日") + TimeUtils.getWeek(System.currentTimeMillis()));
-
         findViewById(R.id.signin_btn).setOnClickListener(this);
         findViewById(R.id.unoffice_).setOnClickListener(this);
         date_tv.setOnClickListener(this);
@@ -126,7 +129,7 @@ public class WorkActivity extends BaseActivity implements View.OnClickListener,
 
     @Override
     public void showModel(List<WorkModel> models) {
-        adapter.setModels(isToday, models);
+        adapter.setModels(isToday, selectTime, models);
     }
 
     @Override
@@ -169,6 +172,17 @@ public class WorkActivity extends BaseActivity implements View.OnClickListener,
         dialog.show();
     }
 
+    @Override
+    public void setPois(List<PoiInfo> pois, LatLng latLng) {
+        this.pois = pois;
+        this.latLng = latLng;
+    }
+
+    @Override
+    public void setErrorMac(String message) {
+        macError = message;
+    }
+
 
     @Override
     public void showToast(String message, int colorId) {
@@ -192,14 +206,19 @@ public class WorkActivity extends BaseActivity implements View.OnClickListener,
                 showDateDialog();
                 break;
             case R.id.unoffice_:
-                Intent intent = new Intent(ct, LocationSearchActivity.class);
-                intent.putExtra("type", 1);
-                intent.putExtra("title", "地点微调");
-                intent.putExtra("single", true);
-                intent.putExtra("radius", 300);
-                intent.putExtra("resultCode", ADDRESS_CHANGE);
-                intent.putExtra("resultName", "resultName");
-                startActivityForResult(intent, ADDRESS_CHANGE);
+                if (ListUtils.isEmpty(pois)) {
+                    Crouton.showToast(ct, "距离太远,无法微调至有效打卡范围", R.color.load_message);
+                } else {
+                    Intent intent = new Intent(ct, LocationSearchActivity.class);
+                    intent.putExtra("type", 1);
+                    intent.putExtra("title", "地点微调");
+                    intent.putExtra("single", true);
+                    intent.putExtra("radius", 300);
+                    intent.putExtra("latlng", latLng);
+                    intent.putExtra("resultCode", ADDRESS_CHANGE);
+                    intent.putExtra("resultName", "resultName");
+                    startActivityForResult(intent, ADDRESS_CHANGE);
+                }
                 break;
         }
     }
@@ -214,10 +233,10 @@ public class WorkActivity extends BaseActivity implements View.OnClickListener,
             @Override
             public void setTime(String year, String month, String day) {
                 String time = year + "-" + month + "-" + day;
-                long timeMi = TimeUtils.s_str_2_long(time);
+                selectTime = TimeUtils.s_str_2_long(time);
                 isToday = time.equals(TimeUtils.s_long_2_str(System.currentTimeMillis())) ? true : false;
-                date_tv.setText(year + "年" + month + "月" + day + "日  " + TimeUtils.getWeek(timeMi));
-                presenter.loadWorkData(timeMi);
+                date_tv.setText(year + "年" + month + "月" + day + "日  " + TimeUtils.getWeek(selectTime));
+                presenter.loadWorkData(selectTime);
             }
         });
         picker.show();
@@ -266,6 +285,9 @@ public class WorkActivity extends BaseActivity implements View.OnClickListener,
         } else if (adapter == null || ListUtils.isEmpty(adapter.getModels())) {
             Crouton.showToast(this, R.string.not_work_message, R.color.load_warning);
             return false;
+        } else if (!StringUtils.isEmpty(macError)) {
+            Crouton.showToast(this, macError, R.color.load_warning);
+            return false;
         }
         return true;
     }

+ 88 - 53
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkDailyAddActivity.java

@@ -48,6 +48,7 @@ public class WorkDailyAddActivity extends BaseActivity {
     private static final int CLEAR_AF_UPDATE_DOC_STATE = 1208;
     private static final int DAILY_RESUBMITTED_SUCCESSFULLY = 1209;  //反提交请求成功后返回
     private static final int LAST_SUBMIT_SUCCESSFULLY = 1210;
+    private static final int GRAB_JOB_CONTENT = 1219;
     private FormEditText add_summary;
     private ImageView share_experience;
     private boolean imOk = false;
@@ -61,19 +62,12 @@ public class WorkDailyAddActivity extends BaseActivity {
     private TextView add_experience;
     private String resubmit;
     private Button add_submit;
+    private String wd_finishedtask;
+    private String wd_unfinishedtask;
     private Handler handler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
             switch (msg.what) {
-                case 0x11:
-                    imOk = true;
-                    if (erpOk) {
-                        setResult(0x22, new Intent());
-                        isSbmit = false;
-                        startActivity(new Intent(activity, WorkDailyShowActivity.class));
-                        jumptododetail(mkeyValue);
-                    }
-                    break;
                 case DAILY_SUBMITTED_SUCCESSFULLY:
                     if (msg.getData() != null) {
                         if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
@@ -82,19 +76,19 @@ public class WorkDailyAddActivity extends BaseActivity {
                             if (JSON.parseObject(result).containsKey("success") && JSON.parseObject(result).getBoolean("success")) {
                                 Toast.makeText(ct, "工作日报提交成功", Toast.LENGTH_SHORT).show();
                                 try {
-                                    JSONObject resultJsonObject = new JSONObject(result);
-                                    JSONArray data_message_list = resultJsonObject.getJSONArray("data");
-                                    JSONObject data_first_message = data_message_list.getJSONObject(0);
-                                    mkeyValue = data_first_message.getInt("WD_ID");
+                                    mkeyValue= new JSONObject(result).getJSONArray("data").getJSONObject(0).getInt("WD_ID");
+                                    wd_finishedtask = new JSONObject(result).getJSONArray("data").getJSONObject(0).getString("WD_CONTEXT");
+                                    wd_unfinishedtask = new JSONObject(result).getJSONArray("data").getJSONObject(0).getString("WD_UNFINISHEDTASK");
                                     Log.i("First_mkeyValue", mkeyValue + " ");
-//                                    or  mkeyValue= new JSONObject(result).getJSONObject("data").getInt("WD_ID");
+                                    Log.i("wd_context",wd_finishedtask);
+                                    Log.i("wd_context",wd_unfinishedtask);
                                 } catch (JSONException e) {
                                     e.printStackTrace();
                                 }
-                                jumptododetail(mkeyValue);
+                                doGrabJobContent(mkeyValue);
                                 if (imOk) {
                                     isSbmit = false;
-                                    jumptododetail(mkeyValue);
+                                    doGrabJobContent(mkeyValue);
                                 }
 
                             } else {
@@ -109,7 +103,8 @@ public class WorkDailyAddActivity extends BaseActivity {
                             String result = msg.getData().getString("result");
                             LogUtil.prinlnLongMsg("updata_message", result);
                             if (JSON.parseObject(result).containsKey("success") && JSON.parseObject(result).getBoolean("success")) {
-                                if (!TextUtils.isEmpty(resubmit) && resubmit.equals("resubmit")) {
+                                if ((!TextUtils.isEmpty(resubmit) && resubmit.equals("resubmit")) ||
+                                        (!TextUtils.isEmpty(resubmit) && resubmit.equals("unsub_tosub"))) {
                                     ToastMessage("工作日报更新成功");
 
                                     // 更新之后再提交覆盖之前同id单据
@@ -131,13 +126,40 @@ public class WorkDailyAddActivity extends BaseActivity {
                     if (msg.getData() != null) {
                         if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
                             String result = msg.getData().getString("result");
-                            LogUtil.prinlnLongMsg("LAST_SUBMIT_message", result);
-                            Toast.makeText(ct, "工作日报重新提交成功", Toast.LENGTH_SHORT).show();
-                            jumptododetail(mkeyValue);
-//                            startActivity(new Intent(activity,DailydetailsActivity.class)
-//                                    .putExtra("caller", "WorkDaily")
-//                                    .putExtra("ID",mkeyValue)
-//                                    .putExtra("resadd","resadd"));
+                            if (JSON.parseObject(result).containsKey("success") && JSON.parseObject(result).getBoolean("success")) {
+                                LogUtil.prinlnLongMsg("LAST_SUBMIT_message", result);
+                                Toast.makeText(ct, "工作日报重新提交成功", Toast.LENGTH_SHORT).show();
+                                try {
+                                    wd_finishedtask = new JSONObject(result).getJSONArray("data").getJSONObject(0).getString("WD_CONTEXT");
+                                    wd_unfinishedtask = new JSONObject(result).getJSONArray("data").getJSONObject(0).getString("WD_UNFINISHEDTASK");
+                                } catch (JSONException e) {
+                                    e.printStackTrace();
+                                }
+                                doGrabJobContent(mkeyValue);
+                            } else {
+                                Crouton.makeText(ct, "工作日报重新提交失败");
+                            }
+
+                        }
+                    }
+                    break;
+                case GRAB_JOB_CONTENT:
+                    if (msg.getData() != null) {
+                        if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
+                            String result = msg.getData().getString("result");
+                            LogUtil.prinlnLongMsg("GRAB_JOB_CONTENT", result);
+                            if (!TextUtils.isEmpty(wd_finishedtask) || !TextUtils.isEmpty(wd_unfinishedtask)){
+                                ToastMessage("工作内容抓取成功");
+                            }else {
+                                ToastMessage("无工作内容");
+                            }
+                            new Handler().postDelayed(new Runnable() {
+                                @Override
+                                public void run() {
+                                    jumptododetail(mkeyValue); //延时跳转,确认抓取成功
+                                }
+                            },2000);
+
                         }
                     }
                     break;
@@ -151,6 +173,20 @@ public class WorkDailyAddActivity extends BaseActivity {
             }
         }
     };
+
+
+    public void doGrabJobContent(int mkeyValue) {
+        //跳转之前抓取工作内容
+        String url = CommonUtil.getSharedPreferences(ct, "erp_baseurl") + "/oa/persontask/catchWorkContent.action";
+        HashMap<String, Object> params = new HashMap<>();
+        params.put("caller", "WorkDaily");
+        params.put("id", mkeyValue);
+        LogUtil.d(JSON.toJSONString(params));
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(this, url, params, handler, headers, GRAB_JOB_CONTENT, null, null, "post");
+    }
+
     private String last_change_experience;
     private String last_change_plan;
     private String last_change_summary;
@@ -162,9 +198,11 @@ public class WorkDailyAddActivity extends BaseActivity {
         intent.putExtra("ID", mkeyValue);
         intent.putExtra("fromwhere", "submitdaily");
         intent.putExtra("Content", add_summary.getText().toString());
-        intent.putExtra("Status", "待审批");
+        intent.putExtra("WD_Status", "已提交");
         intent.putExtra("Plan", add_plan.getText().toString());
         intent.putExtra("Experience", add_experience.getText().toString());
+        intent.putExtra("Donetask",wd_finishedtask);
+        intent.putExtra("Undotask",wd_unfinishedtask);
         startActivity(intent);
         finish();
     }
@@ -178,7 +216,7 @@ public class WorkDailyAddActivity extends BaseActivity {
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         menu.clear();
-        if ( !TextUtils.isEmpty(resubmit) && resubmit.equals("resubmit")){
+        if ( !TextUtils.isEmpty(resubmit) && (resubmit.equals("resubmit") || resubmit.equals("unsub_tosub")) ){
 
         }else {
             getMenuInflater().inflate(R.menu.menu_list, menu);
@@ -211,11 +249,13 @@ public class WorkDailyAddActivity extends BaseActivity {
                         .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                             @Override
                             public void onClick(DialogInterface dialog, int which) {
+                               startActivity(new Intent(WorkDailyAddActivity.this,OAActivity.class));
                                 finish();
                             }
                         }).show();
-            } else {
-//                onFinishOa.onFinish();
+            }
+            else {
+                startActivity(new Intent(WorkDailyAddActivity.this,OAActivity.class));
                 finish();
             }
         }
@@ -235,11 +275,13 @@ public class WorkDailyAddActivity extends BaseActivity {
                     .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialog, int which) {
+                            startActivity(new Intent(WorkDailyAddActivity.this,OAActivity.class));
                             finish();
                         }
                     }).show();
         } else {
-            super.onBackPressed();
+            startActivity(new Intent(WorkDailyAddActivity.this,OAActivity.class));
+            finish();
         }
 
     }
@@ -319,29 +361,13 @@ public class WorkDailyAddActivity extends BaseActivity {
 
         Intent intent = getIntent();
         resubmit = intent.getStringExtra("resubmit");
-        // 判断有没从详情界面返回的 未提交单据的数据
-        if (!TextUtils.isEmpty(resubmit) && resubmit.equals("UCsubmit")){
-            add_submit.setText("重新提交");
-            if (intent.getStringExtra("UC_Summary") != null) {
-                add_summary.setText(intent.getStringExtra("UC_Summary"));
-            } else {
-                add_summary.setText("");
-            }
-            if (intent.getStringExtra("UC_Plan") != null) {
-                add_plan.setText(intent.getStringExtra("UC_Plan"));
-            } else {
-                add_plan.setText("");
+        // 判断有没从列表界面、详情界面返回的重新提交的数据
+        if (!TextUtils.isEmpty(resubmit)) {
+            if (resubmit.equals("unsub_tosub")){
+                add_submit.setText("提交");
+            }else if(resubmit.equals("resubmit")){
+                add_submit.setText("重新提交");
             }
-            if (intent.getStringExtra("UC_Experience") != null) {
-                add_experience.setText(intent.getStringExtra("UC_Experience"));
-            } else {
-                add_experience.setText("");
-            }
-        }
-
-        // 判断有没从详情界面返回的 重新提交的数据
-        if (!TextUtils.isEmpty(resubmit) && resubmit.equals("resubmit")) {
-            add_submit.setText("重新提交");
             if (!TextUtils.isEmpty(intent.getStringExtra("rs_summary"))) {
                 add_summary.setText(intent.getStringExtra("rs_summary"));
             }
@@ -356,6 +382,14 @@ public class WorkDailyAddActivity extends BaseActivity {
             } else {
                 add_experience.setText("");
             }
+
+            if (!TextUtils.isEmpty(intent.getStringExtra("rs_donetask"))){
+                wd_finishedtask = intent.getStringExtra("rs_donetask");
+            }
+//            if (!TextUtils.isEmpty(intent.getStringExtra("rs_undotask"))){
+//                wd_unfinishedtask = intent.getStringExtra("rs_undotask");
+//            }
+
         }
         mkeyValue = intent.getIntExtra("id", 0);
         Log.i("resubmit_mkeyValue", mkeyValue + "");
@@ -427,7 +461,7 @@ public class WorkDailyAddActivity extends BaseActivity {
     private void sendWorkDailyByErp(String s1, String s2, String s3) {
         //执行重新提交之更改单据状态操作
         if ((!TextUtils.isEmpty(resubmit) && resubmit.equals("resubmit") && mkeyValue != 0) ||
-                (!TextUtils.isEmpty(resubmit) && resubmit.equals("UCsubmit"))) {
+                (!TextUtils.isEmpty(resubmit) && resubmit.equals("unsub_tosub")&& mkeyValue != 0)) {
             String sb_summary = string2Json(last_change_summary);
             String sb_plan = string2Json(last_change_plan);
             String sb_experience = string2Json(last_change_experience);
@@ -451,6 +485,7 @@ public class WorkDailyAddActivity extends BaseActivity {
             Log.i("flhupdatedaily: ", formStore2);
 
         } else {
+            // 执行第一次直接提交
             s1 = string2Json(s1);
             s2 = string2Json(s2);
             s3 = string2Json(s3);
@@ -459,7 +494,7 @@ public class WorkDailyAddActivity extends BaseActivity {
             formStoreMap.put("wd_comment", s1);
             formStoreMap.put("wd_plan", s2);
             formStoreMap.put("wd_experience", s3);
-            // 第一次直接提交接口
+
             String url = CommonUtil.getSharedPreferences(ct, "erp_baseurl") + "mobile/addWorkReport.action";
             HashMap<String, Object> params = new HashMap<>();
             String formStore = StringUtils.mapToJson(formStoreMap);

+ 119 - 25
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkDailyShowActivity.java

@@ -1,19 +1,23 @@
 package com.xzjmyk.pm.activity.ui.erp.activity.oa;
 
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.support.v7.app.AlertDialog;
 import android.text.Editable;
 import android.text.TextUtils;
 import android.text.TextWatcher;
+import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.AdapterView;
 import android.widget.ListView;
+import android.widget.Toast;
 
 import com.alibaba.fastjson.JSON;
 import com.handmark.pulltorefresh.library.PullToRefreshBase;
@@ -25,7 +29,9 @@ import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.Constants;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.ui.erp.view.EmptyLayout;
 import com.xzjmyk.pm.activity.view.ClearEditText;
 
@@ -45,6 +51,7 @@ import java.util.regex.Pattern;
  * Created by FANGlh on 2016/11/1.
  */
 public class WorkDailyShowActivity extends BaseActivity {
+    private static final int DELETE_DOC_REQUEST_SUCCESSFULLY = 1219;
     private ClearEditText mSearchEt;
     private PullToRefreshListView mPullToRefreshListView;
     private int mCurrentPage = 1;
@@ -52,14 +59,14 @@ public class WorkDailyShowActivity extends BaseActivity {
     private WorkDailyAdapter mWorkDailyAdapter;
     private List<WorkDailyBean> mWorkDailyList;  //实体类一般以Bean或Entity结尾
     public EmptyLayout mEmptyLayout;
+    private int mPosition;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         initView();
         initData();
-
-
+        super.onResume();
     }
 
     public void initView() {
@@ -79,7 +86,6 @@ public class WorkDailyShowActivity extends BaseActivity {
         mWorkDailyAdapter.setmWorkDailyBeanList(mWorkDailyList);
         mPullToRefreshListView.getRefreshableView().setAdapter(mWorkDailyAdapter);
 
-
         mSearchEt.addTextChangedListener(new TextWatcher() {
             @Override
             public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -101,7 +107,7 @@ public class WorkDailyShowActivity extends BaseActivity {
                 if (mWorkDailyList == null || mWorkDailyList.size() <= 0) {
                     mEmptyLayout.showEmpty();
                     return;
-                }else{
+                } else {
                     for (WorkDailyBean wd : mWorkDailyList) {
                         boolean b = getResult(wd.getWD_DATE() + wd.getWD_COMMENT() + wd.getSTATUS(), strChche.trim());
                         if (b) {
@@ -111,23 +117,60 @@ public class WorkDailyShowActivity extends BaseActivity {
                 }
 
                 mWorkDailyAdapter.setmWorkDailyBeanList(chche);
-                mPullToRefreshListView.setAdapter(mWorkDailyAdapter);
-//                mWorkDailyAdapter.notifyDataSetChanged();
+//                mPullToRefreshListView.setAdapter(mWorkDailyAdapter);
+                mWorkDailyAdapter.notifyDataSetChanged();
             }
         });
         mPullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
+
+        //长按item弹出删除未提交对话框
+       /* mPullToRefreshListView.getRefreshableView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
+            @Override
+            public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
+                mPosition = (int) parent.getItemIdAtPosition(position);
+                if (mWorkDailyList.get(position).getWD_STATUS().equals("在录入")){
+                    new AlertDialog
+                            .Builder(mContext)
+                            .setTitle("温馨提示")
+                            .setMessage("\t\t确认删除该条已保存单据?")
+                            .setNegativeButton("取消", null)
+                            .setPositiveButton("确认", new DialogInterface.OnClickListener() {
+                                @Override
+                                public void onClick(DialogInterface dialog, int which) {
+                                    String mCaller = "WorkDaily";
+                                    int mkeyValue = mWorkDailyList.get(position).getWD_ID();
+                                    dodelete(mCaller, mkeyValue);
+                                }
+                            }).show();
+                }
+
+                return true;
+            }
+        });*/
         mPullToRefreshListView.getRefreshableView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                Intent intent = new Intent(WorkDailyShowActivity.this, DailydetailsActivity.class);
-                intent.putExtra("ID",mWorkDailyList.get(position==0?0:(position-1)).getWD_ID());
-                intent.putExtra("Date",mWorkDailyList.get(position==0?0:(position-1)).getWD_DATE());
-                intent.putExtra("Content", mWorkDailyList.get(position==0?0:(position-1)).getWD_COMMENT());
-                intent.putExtra("Status", mWorkDailyList.get(position==0?0:(position-1)).getSTATUS());
-                intent.putExtra("Plan", mWorkDailyList.get(position==0?0:(position - 1)).getWD_PLAN());
-                intent.putExtra("Experience",mWorkDailyList.get(position==0?0:(position - 1)).getWD_EXPERIENCE());
-                intent.putExtra("fromwhere","dailylist");
-                startActivity(intent);
+                mPosition = (int) parent.getItemIdAtPosition(position);
+                if (!TextUtils.isEmpty(mWorkDailyList.get(position-1).getWD_STATUS())
+                        && mWorkDailyList.get(position-1).getWD_STATUS().equals("在录入")){  //列表中在录入状态直接跳到新增界面
+                    startActivity(new Intent(activity, WorkDailyAddActivity.class)
+                            .putExtra("id", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_ID())
+                            .putExtra("rs_summary", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_COMMENT())
+                            .putExtra("rs_plan", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_PLAN())
+                            .putExtra("rs_experience", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_EXPERIENCE())
+                            .putExtra("resubmit", "unsub_tosub"));
+                }else {
+                    Intent intent = new Intent(WorkDailyShowActivity.this, DailydetailsActivity.class);
+                    intent.putExtra("ID", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_ID());
+                    intent.putExtra("Date", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_DATE());
+                    intent.putExtra("Content", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_COMMENT());
+                    intent.putExtra("WD_Status", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_STATUS());
+                    intent.putExtra("Plan", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_PLAN());
+                    intent.putExtra("Experience", mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_EXPERIENCE());
+                    intent.putExtra("Donetask",mWorkDailyList.get(position == 0 ? 0 : (position - 1)).getWD_CONTEXT());
+                    intent.putExtra("fromwhere", "dailylist");
+                    startActivityForResult(intent, 1219);
+                }
             }
         });
         mPullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@@ -145,6 +188,48 @@ public class WorkDailyShowActivity extends BaseActivity {
         });
     }
 
+    private void dodelete(String mCaller, int mkeyValue) {
+        String url = CommonUtil.getSharedPreferences(ct, "erp_baseurl") + "/mobile/commondelete.action";
+        Map<String, Object> formStoreMap = new HashMap<>();
+        HashMap<String, Object> params = new HashMap<>();
+        params.put("caller", mCaller);
+        params.put("id", mkeyValue);
+        Log.i("dodeleted", mkeyValue + "");
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        LogUtil.prinlnLongMsg("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(this, url, params, handler, headers, DELETE_DOC_REQUEST_SUCCESSFULLY, null, null, "get");
+    }
+
+    private Handler handler = new Handler(){
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+
+            switch (msg.what){
+                case DELETE_DOC_REQUEST_SUCCESSFULLY:
+                    if (!StringUtils.isEmpty(msg.getData().getString("result"))){
+                        String delete_result = msg.getData().getString("result");
+                        LogUtil.prinlnLongMsg("delete_result", delete_result);
+                        if (JSON.parseObject(delete_result).containsKey("success") && JSON.parseObject(delete_result).getBoolean("success")) {
+                            Toast.makeText(mContext, "工作日报删除成功", Toast.LENGTH_LONG).show();
+                            mWorkDailyList.remove(mPosition);
+                            mWorkDailyAdapter.notifyDataSetChanged();
+                        }
+                    }
+                    break;
+
+                default:
+                    if (msg.getData() != null) {
+                        if (!StringUtils.isEmpty(msg.getData().getString("result"))) {
+                            Toast.makeText(mContext, msg.getData().getString("result"), Toast.LENGTH_LONG).show();
+                        }
+                    }
+                    break;
+            }
+        }
+    };
+
     //正则
     private static boolean getResult(String text, String str) {
         Pattern p = Pattern.compile(str);
@@ -174,8 +259,9 @@ public class WorkDailyShowActivity extends BaseActivity {
             putDownInput();
             final  Intent intent = getIntent();
             if (!TextUtils.isEmpty(intent.getStringExtra("fromwhere"))
-                    && (intent.getStringExtra("fromwhere").equals("submitdaily") ||
-                    intent.getStringExtra("fromwhere").equals("dodaily"))){
+                    && ((intent.getStringExtra("fromwhere").equals("submitdaily") ||
+                    intent.getStringExtra("fromwhere").equals("dodaily")) ||
+                    intent.getStringExtra("fromwhere").equals("delete_succeed"))){
                 startActivity(new Intent(activity,OAActivity.class));
                 finish();
             }else {
@@ -189,11 +275,12 @@ public class WorkDailyShowActivity extends BaseActivity {
     @Override
     public void onBackPressed() {
         final  Intent intent = getIntent();
-        if (!TextUtils.isEmpty(intent.getStringExtra("fromwhere"))
-                && (intent.getStringExtra("fromwhere").equals("submitdaily") ||
-                intent.getStringExtra("fromwhere").equals("dodaily"))){
-            startActivity(new Intent(activity,OAActivity.class));
-            finish();
+        if (!TextUtils.isEmpty(intent.getStringExtra("fromwhere")) &&
+              (intent.getStringExtra("fromwhere").equals("submitdaily") ||
+                    intent.getStringExtra("fromwhere").equals("dodaily")||
+                    intent.getStringExtra("fromwhere").equals("delete_succeed"))){
+                startActivity(new Intent(activity,OAActivity.class));
+                finish();
         }else {
             finish();
         }
@@ -211,7 +298,7 @@ public class WorkDailyShowActivity extends BaseActivity {
                         ToastMessage("加载完毕");
                     }
                     String result = msg.getData().getString("result");
-                    LogUtil.prinlnLongMsg("handleMessage: ", result);
+                    LogUtil.prinlnLongMsg("dailylist: ", result);
                     // TODO: 2016/11/1 json数据解析
                     mPullToRefreshListView.setVisibility(View.VISIBLE);
                     mPullToRefreshListView.onRefreshComplete();
@@ -224,10 +311,9 @@ public class WorkDailyShowActivity extends BaseActivity {
                             mEmptyLayout.showEmpty();
                         } else {
                           //  Log.i("aaaaa",dailydataArray.toString());
-                            mWorkDailyList.addAll(JSON.parseArray(dailydataArray.toString(),WorkDailyBean.class));
+                            mWorkDailyList.addAll(JSON.parseArray(dailydataArray.toString(), WorkDailyBean.class));
                             mWorkDailyAdapter.setmWorkDailyBeanList(mWorkDailyList);
                             mWorkDailyAdapter.notifyDataSetChanged();
-
                         }
                     } catch (JSONException e) {
                         e.printStackTrace();
@@ -238,6 +324,14 @@ public class WorkDailyShowActivity extends BaseActivity {
         }
     };
 
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+       if (resultCode == DailydetailsActivity.DELETE_SUCCEED){
+           mWorkDailyList.remove(mPosition);
+           mWorkDailyAdapter.notifyDataSetChanged();
+       }
+    }
+
     private void putDownInput() {
         InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
         imm.hideSoftInputFromWindow(mSearchEt.getWindowToken(), 0);

+ 152 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/MissionAdapter.java

@@ -0,0 +1,152 @@
+package com.xzjmyk.pm.activity.ui.erp.adapter;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.base.BaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2016/12/19.
+ */
+
+public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.BaseViewHolder> {
+    private BaseActivity ct;
+    private List<MissionModel> models;
+    private OnitemClickListener onitemClickListener;
+
+    public MissionAdapter(BaseActivity ct, OnitemClickListener onitemClickListener) {
+        this.ct = ct;
+        this.onitemClickListener = onitemClickListener;
+    }
+
+    public List<MissionModel> getModels() {
+        return models;
+    }
+
+    public void setModels(List<MissionModel> models) {
+        this.models = models;
+    }
+
+    @Override
+    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        View view = LayoutInflater.from(ct).inflate(R.layout.item_mission, parent, false);
+        return new BaseViewHolder(view);
+    }
+
+    @Override
+    public void onBindViewHolder(BaseViewHolder holder, int position) {
+        if (holder instanceof BaseViewHolder) {
+            try {
+                initView(holder, position);
+                initEvent(holder, position);
+            } catch (Exception e) {
+            }
+        }
+    }
+
+    private void initView(BaseViewHolder holder, int position) {
+        MissionModel entity = models.get(position);
+        if (entity == null) return;
+        holder.item_title_tv.setText("目的地 " + (position + 1));
+        holder.item_delete_tv.setVisibility(entity.getStatus() != 1 ? View.VISIBLE : View.GONE);
+        if (entity.getLatLng() != null) {
+            holder.item_length_tv.setText(entity.getDistance() + "米");
+        } else {
+            holder.item_length_tv.setText("");
+        }
+        holder.item_reckontime_tv.setText(getStringNotNull(entity.getVisitTime()));
+        holder.item_realtime_tv.setText(getStringNotNull(entity.getRealTime()));
+        holder.item_realleave_tv.setText(getStringNotNull(entity.getRealLeave()));
+        holder.item_company_tv.setText(getStringNotNull(entity.getCompanyName()));
+        holder.item_companyaddr_tv.setText(getStringNotNull(entity.getCompanyAddr()));
+        holder.item_time_tv.setText(getStringNotNull(entity.getRecorddate()));
+        holder.item_location_tv.setText(getStringNotNull(entity.getLocation()));
+    }
+
+    private void initEvent(final BaseViewHolder holder, final int position) {
+        holder.item_company_tv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                if (onitemClickListener != null) {
+                    onitemClickListener.click(position, models.get(position), holder.item_company_tv);
+                }
+            }
+        });
+        holder.item_companyaddr_tv.setOnClickListener(new View.OnClickListener() {
+
+            @Override
+            public void onClick(View view) {
+                if (onitemClickListener != null) {
+                    onitemClickListener.click(position, models.get(position), holder.item_companyaddr_tv);
+                }
+            }
+        });
+        holder.item_delete_tv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                if (onitemClickListener != null) {
+                    onitemClickListener.click(position, models.get(position), holder.item_delete_tv);
+                }
+            }
+        });
+        holder.item_reckontime_tv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                if (onitemClickListener != null) {
+                    onitemClickListener.click(position, models.get(position), holder.item_reckontime_tv);
+                }
+            }
+        });
+    }
+
+
+    @Override
+    public int getItemCount() {
+        return ListUtils.isEmpty(models) ? 0 : models.size();
+    }
+
+    class BaseViewHolder extends RecyclerView.ViewHolder {
+        TextView item_title_tv,//标题
+                item_delete_tv,//删除按钮
+                item_length_tv,//里程
+                item_reckontime_tv,//预计到达时间
+                item_realtime_tv,//实际到达时间
+                item_realleave_tv,//实际离开时间
+                item_companyaddr_tv,//公司地址
+                item_location_tv,//创建地点
+                item_time_tv,//创建时间
+                item_company_tv;//公司名称
+
+        public BaseViewHolder(View itemView) {
+            super(itemView);
+            item_title_tv = (TextView) itemView.findViewById(R.id.item_title_tv);//标题
+            item_delete_tv = (TextView) itemView.findViewById(R.id.item_delete_tv);
+            item_length_tv = (TextView) itemView.findViewById(R.id.item_length_tv);
+            item_reckontime_tv = (TextView) itemView.findViewById(R.id.item_reckontime_tv);
+            item_realtime_tv = (TextView) itemView.findViewById(R.id.item_realtime_tv);
+            item_realleave_tv = (TextView) itemView.findViewById(R.id.item_realleave_tv);
+            item_company_tv = (TextView) itemView.findViewById(R.id.item_company_tv);
+            item_companyaddr_tv = (TextView) itemView.findViewById(R.id.item_companyaddr_tv);
+            item_location_tv = (TextView) itemView.findViewById(R.id.item_location_tv);
+            item_time_tv = (TextView) itemView.findViewById(R.id.item_time_tv);
+        }
+    }
+
+    private String getStringNotNull(String str) {
+        if (StringUtils.isEmpty(str)) return "";
+        return str;
+    }
+
+    public interface OnitemClickListener {
+        void click(int position, MissionModel model, View view);
+    }
+}

+ 39 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/WorkAdapter.java

@@ -1,6 +1,7 @@
 package com.xzjmyk.pm.activity.ui.erp.adapter;
 
 import android.content.Context;
+import android.content.Intent;
 import android.support.v7.widget.RecyclerView;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -10,6 +11,7 @@ import android.widget.TextView;
 
 import com.xzjmyk.pm.activity.AppConfig;
 import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.ChangeMobileActivity;
 import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
@@ -26,6 +28,7 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
     private Context ct;
     private boolean isToday;
     private String newTime;
+    private long seletTime;
 
     public WorkAdapter(Context ct) {
         this.ct = ct;
@@ -35,13 +38,12 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
 
     public List<WorkModel> getModels() {
         return models;
-
-
     }
 
-    public void setModels(boolean isToday, List<WorkModel> models) {
+    public void setModels(boolean isToday, long seletTime, List<WorkModel> models) {
         this.models = models;
         this.isToday = isToday;
+        this.seletTime = seletTime;
         newTime = TimeUtils.long2str(System.currentTimeMillis(), "HH:mm");
         notifyDataSetChanged();
     }
@@ -55,12 +57,13 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
     @Override
     public void onBindViewHolder(WorkAdapter.ViewHoler holder, int position) {
         try {
-            WorkModel model = models.get(position);
+            final WorkModel model = models.get(position);
             holder.work_time.setText(getNull(model.getWorkTime()));
             holder.work_signin.setText(getNull(model.getWorkSignin()));
             holder.off_time.setText(getNull(model.getOffTime()));
             holder.off_signin.setText(getNull(model.getOffSignin()));
             //处理迟到、早退、缺勤
+
             String workTag = null;
             if (StringUtils.isEmpty(model.getWorkSignin())) {
                 if (newTime.compareTo(model.getWorkend()) > 0) {
@@ -75,7 +78,6 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
             } else if (model.getWorkSignin().compareTo(model.getWorkTime()) > 0) {
                 workTag = "迟到";
             }
-
             if (StringUtils.isEmpty(workTag)) {
                 holder.work_tag.setVisibility(View.GONE);
                 holder.work_supple.setVisibility(View.GONE);
@@ -84,15 +86,26 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
                 holder.work_tag.setVisibility(View.VISIBLE);
                 if ("缺勤".equals(workTag)) {
                     holder.work_supple.setVisibility(View.VISIBLE);
+                    holder.work_supple.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View view) {
+                            Intent intent = new Intent(ct, ChangeMobileActivity.class);
+                            intent.putExtra("type", 2);
+                            if (seletTime > 0)
+                                intent.putExtra("date", TimeUtils.s_long_2_str(seletTime));
+                            intent.putExtra("tag", model.getWorkTime());
+                            intent.putExtra("macAddress", getTimeForHHmm(model.getWorkTime()));
+                            ct.startActivity(intent);
+                        }
+                    });
                 } else {
                     holder.off_supple.setVisibility(View.GONE);
                 }
             }
 
             String offTag = null;
-
             if (StringUtils.isEmpty(model.getOffSignin())) {
-                if (StringUtils.isEmpty(model.getOffend()) && newTime.compareTo(model.getOffend()) > 0) {
+                if (!StringUtils.isEmpty(model.getOffend()) && newTime.compareTo(model.getOffend()) > 0) {
                     //缺勤(没有签到,同时当前时间大于上班时间后90分钟)
                     offTag = "缺勤";
                 }
@@ -113,6 +126,18 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
                 holder.off_tag.setVisibility(View.VISIBLE);
                 if ("缺勤".equals(offTag)) {
                     holder.off_supple.setVisibility(View.VISIBLE);
+                    holder.off_supple.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View view) {
+                            Intent intent = new Intent(ct, ChangeMobileActivity.class);
+                            intent.putExtra("type", 2);
+                            if (seletTime > 0)
+                                intent.putExtra("date", TimeUtils.s_long_2_str(seletTime));
+                            intent.putExtra("tag", model.getOffTime());
+                            intent.putExtra("macAddress", getTimeForHHmm(model.getOffTime()));
+                            ct.startActivity(intent);
+                        }
+                    });
                 } else {
                     holder.off_supple.setVisibility(View.GONE);
                 }
@@ -188,6 +213,11 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
 
     }
 
+    private String getTimeForHHmm(String hhmm) {
+        if (StringUtils.isEmpty(hhmm)) return "";
+        return TimeUtils.s_long_2_str(seletTime) + " " + TimeUtils.getWeek(seletTime) + " " + hhmm;
+    }
+
     private String getNull(String str) {
         if (StringUtils.isEmpty(str)) return "";
         return str;
@@ -201,4 +231,6 @@ public class WorkAdapter extends RecyclerView.Adapter<WorkAdapter.ViewHoler> {
 
         }
     }
+
+
 }

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/db/DBOpenHelper.java

@@ -13,7 +13,7 @@ import com.xzjmyk.pm.activity.ui.erp.util.Constants;
  */
 public class DBOpenHelper extends SQLiteOpenHelper {
 
-    private static final int DATABASE_VERSION = 64;//数据库版本号(每添加一个表要增加版本号)
+    private static final int DATABASE_VERSION = 65;//数据库版本号(每添加一个表要增加版本号)
     public static String dataBaseName = "erp.db";//数据库名称
     public Context context;
 

+ 78 - 42
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/MissionModel.java

@@ -21,9 +21,67 @@ public class MissionModel implements Parcelable {
     private int visitcount;//拜访次数
     private int status;//状态  1.已提交  0.未提交  (数据库中 0.未进行  1.进行中  2.已完成  )
 
+    //update by 2016/12/19
+    private double distance;
+    private String location;
+    private String recorddate;
+
+
     public MissionModel() {
     }
 
+    protected MissionModel(Parcel in) {
+        id = in.readInt();
+        code = in.readString();
+        companyName = in.readString();
+        companyAddr = in.readString();
+        date = in.readString();
+        visitTime = in.readString();
+        realTime = in.readString();
+        realLeave = in.readString();
+        latLng = in.readParcelable(LatLng.class.getClassLoader());
+        visitcount = in.readInt();
+        distance = in.readDouble();
+        location = in.readString();
+        recorddate = in.readString();
+        status = in.readInt();
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(id);
+        dest.writeString(code);
+        dest.writeString(companyName);
+        dest.writeString(companyAddr);
+        dest.writeString(date);
+        dest.writeString(visitTime);
+        dest.writeString(realTime);
+        dest.writeString(realLeave);
+        dest.writeParcelable(latLng, flags);
+        dest.writeInt(visitcount);
+        dest.writeDouble(distance);
+        dest.writeString(location);
+        dest.writeString(recorddate);
+        dest.writeInt(status);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Creator<MissionModel> CREATOR = new Creator<MissionModel>() {
+        @Override
+        public MissionModel createFromParcel(Parcel in) {
+            return new MissionModel(in);
+        }
+
+        @Override
+        public MissionModel[] newArray(int size) {
+            return new MissionModel[size];
+        }
+    };
+
     public int getId() {
         return id;
     }
@@ -104,57 +162,35 @@ public class MissionModel implements Parcelable {
         this.visitcount = visitcount;
     }
 
-    public int getStatus() {
-        return status;
+    public double getDistance() {
+        return distance;
     }
 
-    public void setStatus(int status) {
-        this.status = status;
+    public void setDistance(double distance) {
+        this.distance = distance;
     }
 
-    protected MissionModel(Parcel in) {
-        id = in.readInt();
-        code = in.readString();
-        companyName = in.readString();
-        companyAddr = in.readString();
-        date = in.readString();
-        visitTime = in.readString();
-        realTime = in.readString();
-        realLeave = in.readString();
-        latLng = in.readParcelable(LatLng.class.getClassLoader());
-        visitcount = in.readInt();
-        status = in.readInt();
+    public String getLocation() {
+        return location;
     }
 
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(id);
-        dest.writeString(code);
-        dest.writeString(companyName);
-        dest.writeString(companyAddr);
-        dest.writeString(date);
-        dest.writeString(visitTime);
-        dest.writeString(realTime);
-        dest.writeString(realLeave);
-        dest.writeParcelable(latLng, flags);
-        dest.writeInt(visitcount);
-        dest.writeInt(status);
+    public void setLocation(String location) {
+        this.location = location;
     }
 
-    @Override
-    public int describeContents() {
-        return 0;
+    public String getRecorddate() {
+        return recorddate;
     }
 
-    public static final Creator<MissionModel> CREATOR = new Creator<MissionModel>() {
-        @Override
-        public MissionModel createFromParcel(Parcel in) {
-            return new MissionModel(in);
-        }
+    public void setRecorddate(String recorddate) {
+        this.recorddate = recorddate;
+    }
 
-        @Override
-        public MissionModel[] newArray(int size) {
-            return new MissionModel[size];
-        }
-    };
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
 }

+ 331 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/MissionPresenter.java

@@ -0,0 +1,331 @@
+package com.xzjmyk.pm.activity.ui.erp.presenter;
+
+import android.content.Context;
+import android.os.Bundle;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baidu.mapapi.model.LatLng;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.db.dao.MissionDao;
+import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
+import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IMission;
+import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IMissionPresenter;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonInterfaceUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.auto.HttpHandler;
+import com.xzjmyk.pm.activity.ui.tool.ThreadUtil;
+import com.xzjmyk.pm.activity.util.BaiduMapUtil;
+import com.xzjmyk.pm.activity.util.TimeUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * Created by Bitliker on 2016/12/19.
+ */
+
+public class MissionPresenter implements IMissionPresenter, HttpHandler.OnResultListener {
+    private final int LOAD_PLAN = 0x11;
+    private final int SAVE_PLAN = 0x12;
+    private final int SAVE_ADDRESS = 0x13;
+    private IMission iMission;
+    private List<MissionModel> models;
+
+
+    public MissionPresenter(IMission iMission) {
+        this.iMission = iMission;
+        models = new ArrayList<>();
+    }
+
+    /**
+     * 1.下拉数据或是从数据库获取数据(修改返回id后先数据库再网络,当前先网络再数据库)
+     * 2.保存数据
+     */
+    @Override
+    public void start() {
+        if (iMission != null) {
+            addEntity(models);
+            iMission.showModels(models);
+            iMission.showLoading();
+        }
+        loadMissionPlan();
+    }
+
+    @Override
+    public void addEmptyModel() {
+        if (iMission != null) {
+            addEntity(models);
+            iMission.showModels(models);
+        }
+    }
+
+    @Override
+    public void submit(List<MissionModel> models) {
+        if (!MyApplication.getInstance().isNetworkActive()) {
+            if (iMission != null) iMission.showToast(R.string.networks_out, R.color.load_warning);
+            return;
+        }
+        CommonInterfaceUtil idUtil = new CommonInterfaceUtil();
+        if (ListUtils.isEmpty(models)) return;
+        for (int i = 0; i < models.size(); i++) {
+            MissionModel e = models.get(i);
+            if (canSubmit(e, i + 1)) {
+                savePlan2Net(e, i, idUtil);
+            }
+        }
+    }
+
+    /**
+     * 保存拜访计划
+     *
+     * @param mode    对象
+     * @param postion 指针
+     * @param idUtil  id、code获取工具类
+     */
+    private void savePlan2Net(final MissionModel mode, final int postion, final CommonInterfaceUtil idUtil) {
+        idUtil.getIdByNet("MOBILE_OUTPLAN_SEQ", new CommonInterfaceUtil.OnResultListener() {
+            @Override
+            public void result(int code, String result) {
+                try {
+                    if (StringUtils.isEmpty(result)) {
+                        if (iMission != null) iMission.showToast("获取id错误", R.color.load_warning);
+                        return;
+                    }
+                    final int id = Integer.valueOf(result);
+                    idUtil.getCodeByNet("MOBILE_OUTPLAN", new CommonInterfaceUtil.OnResultListener() {
+                        @Override
+                        public void result(int code, String result) {
+                            if (StringUtils.isEmpty(result)) {
+                                iMission.showToast("获取编号错误", R.color.load_warning);
+                                return;
+                            }
+                            savePlan2Net(id, result, mode, postion);
+                        }
+                    });
+                } catch (Exception e) {
+
+                }
+            }
+        });
+    }
+
+
+    //保存外勤计划接口
+    private void savePlan2Net(int id, String code, MissionModel entity, int position) {
+        //获取网络数据
+        if (iMission != null) iMission.showLoading();
+        Context ct = MyApplication.getInstance();
+        Map<String, Object> param = new HashMap<>();
+        Map<String, Object> formStore = new HashMap<>();
+        Map<String, Object> params = new HashMap<>();
+        String name = CommonUtil.getSharedPreferences(ct, "erp_emname");
+        if (StringUtils.isEmpty(name)) {
+            name = MyApplication.getInstance().mLoginUser.getNickName();
+        }
+        /***formStore***/
+        formStore.put("mp_id", id);//请求的id MOBILE_OUTPLAN_SEQ
+        formStore.put("mp_code", code);//请求的id MOBILE_OUTPLAN_SEQ
+        formStore.put("mp_visittime", entity.getVisitTime());
+        formStore.put("mp_recorder", name);//用户名
+        formStore.put("mp_recordercode", CommonUtil.getSharedPreferences(ct, "erp_username"));//编号
+        formStore.put("mp_address", MyApplication.getInstance().getBdLocationHelper().getAddress());//当前地址
+        /***params***/
+        params.put("mpd_detno", position + 1);
+        params.put("mpd_id", "");
+        params.put("mpd_distance", BaiduMapUtil.getInstence().getDistance(entity.getLatLng()));
+        params.put("mpd_arrivedate", entity.getVisitTime());
+        params.put("mpd_mpid", id);
+        params.put("mpd_company", entity.getCompanyName());
+        params.put("mpd_address", entity.getCompanyAddr());
+        param.put("caller", "lp");
+
+        /******update by 2016/12/19**************/
+        params.put("mpd_location", entity.getLocation());
+        params.put("mpd_recorddate", entity.getRecorddate());
+
+        param.put("formStore", StringUtils.mapToJson(formStore));
+        param.put("param", "[" + StringUtils.mapToJson(params) + "]");
+        Bundle bundle = new Bundle();
+        bundle.putInt("position", position);
+        HttpHandler.getInstance().loadERPByNet(SAVE_PLAN, "mobile/addOutPlan.action", param, bundle, this);
+        saveOutAddress(entity);
+    }
+
+
+    //保存外勤计划目的地
+    private void saveOutAddress(MissionModel entity) {
+        if (entity.getLatLng() == null || entity.getLatLng().latitude == 0 || entity.getLatLng().longitude == 0) {
+            if (iMission != null) iMission.showToast("当前单号地址非法,无法保存", R.color.load_warning);
+            return;
+        }
+        //获取网络数据
+        Map<String, Object> param = new HashMap<>();
+        Map<String, Object> formStore = new HashMap<>();
+        param.put("caller", "lp");
+        /***formStore***/
+//        formStore.put("Md_id", "");//请求的id MOBILE_OUTPLAN_SEQ
+        formStore.put("Md_company", entity.getCompanyName());//拜访公司
+        String length = entity.getCompanyAddr();
+        if (length.length() >= 200)
+            length = length.substring(0, 190);
+        formStore.put("Md_address", length);//拜访地址
+        formStore.put("Md_visitcount", 1);//固定为1,由后台加1
+        formStore.put("Md_visittime", entity.getVisitTime());//预计时间
+        formStore.put("Md_longitude", entity.getLatLng().longitude);//经度
+        formStore.put("Md_latitude", entity.getLatLng().latitude);//纬度
+        param.put("formStore", StringUtils.mapToJson(formStore));
+        Bundle bundle = new Bundle();
+        HttpHandler.getInstance().loadERPByNet(SAVE_ADDRESS, "mobile/addOutAddress.action", param, bundle, this);
+    }
+
+
+    private boolean canSubmit(MissionModel e, int i) {
+        if (e == null) return false;
+        else if (e.getStatus() == 1) {
+            return false;
+        } else if (StringUtils.isEmpty(e.getCompanyName())) {
+            if (iMission != null) iMission.showToast("您的目的地" + i + "公司名未填", R.color.load_warning);
+            return false;
+        } else if (StringUtils.isEmpty(e.getCompanyAddr())) {
+            if (iMission != null) iMission.showToast("您的目的地" + i + "公司地址未填", R.color.load_warning);
+            return false;
+        } else if (e.getLatLng() == null) {
+            return false;
+        } else if (StringUtils.isEmpty(e.getVisitTime())) {
+            if (iMission != null) iMission.showToast("您的 目的地" + i + "预计时间未填", R.color.load_warning);
+            return false;
+        }
+        return true;
+    }
+
+
+    //获取外勤计划列表
+    public void loadMissionPlan() {
+        Map<String, Object> param = new HashMap<>();
+        param.put("emcode",
+                CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        HttpHandler.getInstance().loadERPByNet(LOAD_PLAN, "mobile/mobileoutplan.action", param, null, this);
+    }
+
+
+    @Override
+    public void result(int what, boolean isJSON, String message, Bundle bundle) {
+        try {
+            if (isJSON) {
+                JSONObject object = JSON.parseObject(message);
+                switch (what) {
+                    case LOAD_PLAN:
+                        JSONArray array = null;
+                        if (object.get("data") instanceof JSONArray) {
+                            array = object.getJSONArray("data");
+                        } else if (object.get("success") instanceof JSONArray) {
+                            array = object.getJSONArray("success");
+                        }
+                        handlerData(array);
+                        break;
+                    case SAVE_PLAN:
+                        if (iMission != null) iMission.dimssLoading();
+                        int position = bundle.getInt("position", -1);//成功保存第几个目标
+                        if (iMission != null) iMission.showToast("保存成功", R.color.load_submit);
+                        if (iMission != null) {
+                            iMission.changModelStatus(1, position);
+                        }
+                        break;
+                }
+            }
+        } catch (Exception e) {
+            if (iMission != null) iMission.dimssLoading();
+        }
+    }
+
+    @Override
+    public void error(int what, int statuCode, String message, Bundle bundle) {
+        String showMessage = StringUtils.getChinese(message);
+        if (iMission != null) iMission.dimssLoading();
+        if (StringUtils.isEmpty(showMessage)) return;
+        if (iMission != null) iMission.showToast(showMessage, R.color.load_error);
+    }
+
+
+    /**
+     * 解析处理外勤计划列表并保存到数据库
+     *
+     * @param array
+     */
+    private void handlerData(JSONArray array) throws Exception {
+        if (ListUtils.isEmpty(array)) {
+            if (iMission != null) {
+                iMission.dimssLoading();
+                iMission.showModels(models);
+            }
+            return; //获取到拜访计划数据
+        } else {
+            JSONObject object = null;
+            MissionModel entity = null;
+            final List<MissionModel> entities = new ArrayList<>();
+            for (int i = 0; i < array.size(); i++) {
+                object = array.getJSONObject(i);
+                entity = new MissionModel();
+                entity.setId(object.getInteger("MPD_ID"));
+                entity.setCompanyName(object.getString("MPD_COMPANY"));
+                entity.setCompanyAddr(object.getString("MPD_ADDRESS"));
+                double longitude = object.getDoubleValue("MD_LONGITUDE");
+                double latitude = object.getDoubleValue("MD_LATITUDE");
+                if (longitude > 0 && latitude > 0) {
+                    entity.setLatLng(new LatLng(latitude, longitude));
+                }
+                if (object.containsKey("MPD_ARRIVEDATE")) {
+                    entity.setVisitTime(object.getString("MPD_ARRIVEDATE"));
+                } else if (object.containsKey("TO_CHAR(MPD_ARRIVEDATE,'YYYY-MM-DDHH24:MI:SS')")) {
+                    entity.setVisitTime(object.getString("TO_CHAR(MPD_ARRIVEDATE,'YYYY-MM-DDHH24:MI:SS')"));
+                }
+                try {
+                    long mpd_actdate = object.getLongValue("MPD_ACTDATE");
+                    long mpd_outdate = object.getLongValue("MPD_OUTDATE");
+                    if (mpd_actdate != 0)
+                        entity.setRealTime(TimeUtils.f_long_2_str(mpd_actdate));
+                    if (mpd_outdate != 0)
+                        entity.setRealLeave(TimeUtils.f_long_2_str(mpd_outdate));
+                } catch (Exception e) {
+                }
+                entity.setStatus(1);
+                //TODO 添加时间和位置数据
+                entity.setDistance(object.getDoubleValue("MPD_DISTANCE"));
+                entity.setLocation(object.getString("MPD_LOCATION"));
+                entity.setRecorddate(object.getString("MPD_RECORDDATE"));
+                entities.add(entity);
+            }
+            if (!ListUtils.isEmpty(entities))
+                models = entities;
+        }
+        setModels();
+    }
+
+    private void setModels() {
+        if (iMission != null) {
+            iMission.dimssLoading();
+            iMission.showModels(models);
+        }
+        ThreadUtil.getInstance().addTask(new Runnable() {
+            @Override
+            public void run() {
+                MissionDao.getInstance().updataOrCreate(models);
+            }
+        });
+    }
+
+    private void addEntity(List<MissionModel> entitys) {
+        MissionModel entity = new MissionModel();
+        entity.setLocation(MyApplication.getInstance().getBdLocationHelper().getName());//当前位置
+        entity.setRecorddate(TimeUtils.f_long_2_str(System.currentTimeMillis()));//当前时间
+        entitys.add(entity);
+    }
+}

+ 112 - 43
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/WorkPresenter.java

@@ -6,14 +6,16 @@ import android.util.Log;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baidu.mapapi.model.LatLng;
 import com.baidu.mapapi.search.core.PoiInfo;
+import com.baidu.mapapi.search.core.SearchResult;
+import com.baidu.mapapi.search.poi.PoiResult;
 import com.xzjmyk.pm.activity.AppConfig;
 import com.xzjmyk.pm.activity.BdLocationHelper;
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
 import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWork;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkPresenter;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkView;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonInterfaceUtil;
@@ -31,6 +33,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static com.xzjmyk.pm.activity.util.BaiduMapUtil.getInstence;
+
 /**
  * 班次的管理器,先不处理数据库数据
  * Created by Bitliker on 2016/12/12.
@@ -51,21 +55,20 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
     private double companyLatitude;
     private double companyLongitude;
     private int companyDistance;
-    private boolean isMacInNet;//服务器上是否有mac地址
+    private boolean isMacInNet = false;//服务器上是否有mac地址
     private boolean isSubmiting = false;
     private CommonInterfaceUtil util;
+    private List<PoiInfo> pois;
 
+    private String macAddress;
 
-    private IWorkView iWorkView;
-    private IWork iWork;
 
-    public WorkPresenter(IWork iWork) {
-        this.iWork = iWork;
-    }
+    private IWorkView iWorkView;
 
-    public WorkPresenter(IWorkView iWorkView) {
+    public WorkPresenter(IWorkView iWorkView, String macAddress) {
         this.iWorkView = iWorkView;
-        isMacInNet = true;
+        this.macAddress = macAddress;
+        getMacByNet();
     }
 
 
@@ -87,6 +90,16 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
         HttpHandler.getInstance().loadERPByNet(WORK_LOG, "mobile/oa/workdata.action", param, bundle, this);
     }
 
+    //判断mac地址是否已经上传
+    private void getMacByNet() {
+        //获取网络数据
+        Map<String, Object> param = new HashMap<>();
+        param.put("macaddress", macAddress);
+        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        HttpHandler.getInstance().loadERPByNet(LOAD_MAC, "mobile/queryMobileMac.action",
+                param, null, this);
+    }
+
 
     private void validatorMac(ArrayList<WorkModel> models, String macAddress) {
         Map<String, Object> param = new HashMap<>();
@@ -123,7 +136,7 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
     }
 
     //设置位置信息
-    private void setBaiduLocation() {
+    private void setBaiduLocation() throws Exception {
         longitude = MyApplication.getInstance().getBdLocationHelper().getLongitude();
         latitude = MyApplication.getInstance().getBdLocationHelper().getLatitude();
         loaction = MyApplication.getInstance().getBdLocationHelper().getName();
@@ -131,12 +144,13 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
         if (iWorkView == null) return;
         iWorkView.showDistance(getDistance());
         iWorkView.showLocation(address);
+
     }
 
     //获取与公司距离
     private String getDistance() {
         try {
-            String dis = BaiduMapUtil.getInstence().getDistance(companyLongitude, companyLatitude, latitude, longitude);
+            String dis = getInstence().getDistance(companyLongitude, companyLatitude, latitude, longitude);
             distance = Double.valueOf(dis);
             if (StringUtils.isEmpty(dis)) return "";
             return "约" + dis + "米";
@@ -145,6 +159,28 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
         }
     }
 
+    private void getPoi() {
+        final LatLng compayLng = new LatLng(companyLatitude, companyLongitude);
+        final LatLng latLng = new LatLng(latitude, longitude);
+        BaiduMapUtil.getInstence().getNearInfo(500, 20, latLng,
+                "公司", new BaiduMapUtil.OnSearchPoiListener() {
+                    @Override
+                    public void result(SearchResult result) {
+                        if (result instanceof PoiResult) {
+                            pois = ((PoiResult) result).getAllPoi();
+                            if (ListUtils.isEmpty(pois)) return;
+                            for (int i = 0; i < pois.size(); i++) {
+                                double dis = BaiduMapUtil.getInstence().distance(latLng, pois.get(i).location);
+                                if (companyDistance < dis) {
+                                    pois.remove(i);
+                                    i--;
+                                }
+                            }
+                            if (iWorkView != null) iWorkView.setPois(pois, compayLng);
+                        }
+                    }
+                });
+    }
 
     /**
      * 处理打卡签到
@@ -169,6 +205,7 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
             companyDistance = object.getIntValue("distance");
         }
         try {
+            getPoi();
             PreferenceUtils.putInt("distance", companyDistance);
             PreferenceUtils.putFloat("longitude", (float) companyLongitude);
             PreferenceUtils.putFloat("latitude", (float) companyLatitude);
@@ -240,7 +277,6 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
         } catch (Exception e) {
             e.printStackTrace();
         }
-
         models.add(model);
     }
 
@@ -253,18 +289,15 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
      * @param logTime 日期时间戳
      * @throws Exception
      */
-    private void handlerWorkLog(boolean isJSON, String message, ArrayList<WorkModel> models, long logTime) throws Exception {
+    private void handlerWorkLog(boolean isJSON, String message, final ArrayList<WorkModel> models, long logTime) throws Exception {
         if (!isJSON || ListUtils.isEmpty(models)) {
-            if (iWorkView != null)
-                iWorkView.showModel(models);
+            showModels(models, logTime);
             return;
         }
         JSONObject object = JSON.parseObject(message);
         JSONArray listdata = object.getJSONArray("listdata");
         if (ListUtils.isEmpty(listdata)) {
-            //TODO 数据为空,容错处理
-            if (iWorkView != null)
-                iWorkView.showModel(models);
+            showModels(models, logTime);
             log("ListUtils.isEmpty(listdata) 数据为空,容错处理");
             return;
         }
@@ -292,19 +325,33 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
                 }
             }
         }
+
+        showModels(models, logTime);
+    }
+
+    private void showModels(final List<WorkModel> models, long longTime) {
+        //页面显示
         if (iWorkView != null) {
             iWorkView.showModel(models);
             iWorkView.dimssLoading();
-        } else if (iWork != null && !ListUtils.isEmpty(models)) {
-            final List<WorkModel> finaModels = models;
+        }
+
+        //下拉数据后保存到数据库
+        if (!ListUtils.isEmpty(models) &&
+                TimeUtils.s_long_2_str(longTime).equals(TimeUtils.s_long_2_str(System.currentTimeMillis()))) {
+            //当天日期数据
             ThreadUtil.getInstance().addTask(new Runnable() {
                 @Override
                 public void run() {
-                    boolean save = WorkModelDao.getInstance().createOrUpdata(finaModels);
-                    iWork.saveStatus(save);
+                    List<WorkModel> saveModels = new ArrayList<>();
+                    for (WorkModel e : models)
+                        saveModels.add(e);
+                    WorkModelDao.getInstance().createOrUpdata(saveModels);
+
                 }
             });
         }
+
     }
 
     /**
@@ -331,7 +378,6 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
                 iWorkView.showToast(R.string.too_long, R.color.load_warning);
             return false;
         }
-
         return true;
     }
 
@@ -360,23 +406,23 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
      *********************************/
 
     @Override
-    public void startForSave() {
-        loadWorkData(System.currentTimeMillis());
-    }
-
-    @Override
-    public void startForUi() {
-        MyApplication.getInstance().getBdLocationHelper().setListener(new BdLocationHelper.OnBaiduResultListener() {
-            @Override
-            public void result(boolean isOk) {
-                if (!isChangPoi)
-                    setBaiduLocation();
-            }
-        });
+    public void start() {
+        if (iWorkView != null) {
+            MyApplication.getInstance().getBdLocationHelper().setListener(new BdLocationHelper.OnBaiduResultListener() {
+                @Override
+                public void result(boolean isOk) {
+                    if (!isChangPoi)
+                        try {
+                            setBaiduLocation();
+                        } catch (Exception e) {
+                            if (e != null) log("startForUi Exception=" + e.getMessage());
+                        }
+                }
+            });
+        }
         loadWorkData(System.currentTimeMillis());
     }
 
-    @Override
     public void loadWorkData(long time) {
         if (iWorkView != null)
             iWorkView.showLoading();
@@ -401,13 +447,23 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
         }
     }
 
-    @Override
+
+    /**
+     * 提交打卡
+     *
+     * @param models     班次以及打卡记录数据
+     * @param macAddress mac地址
+     */
     public void submitWork(ArrayList<WorkModel> models, String macAddress) {
         validatorMac(models, macAddress);
     }
 
 
-    @Override
+    /**
+     * 更改位置信息
+     *
+     * @param poi 位置信息
+     */
     public void changPoi(PoiInfo poi) {
         isChangPoi = true;
         loaction = StringUtils.isEmpty(poi.name) ? "" : poi.name;//位置名称
@@ -437,7 +493,6 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
                     handlerWorkLog(isJSON, message, models, logTime);
                     break;
                 case MAC_VAL://判断mac地址
-                    isMacInNet = true;
                     if (isJSON && JSON.parseObject(message).containsKey("success") &&
                             JSON.parseObject(message).getBoolean("success")) {
                         getUtil().getCodeByNet("CardLog", new CommonInterfaceUtil.OnResultListener() {
@@ -487,9 +542,23 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
 
     @Override
     public void error(int what, int statuCode, String message, Bundle bundle) {
-        log("what" + what);
-        log("statuCode" + statuCode);
-        log("message" + message);
+
+        try {
+            if (StringUtils.isInclude(message, "该设备不是考勤打卡常用设备")) {
+                if (iWorkView != null) iWorkView.showErrorMac();
+            } else if (StringUtils.isInclude(message, "设备正处于申请变更绑定阶段")) {
+                if (iWorkView != null) {
+                    iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
+                    iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_changing));
+                }
+            } else {
+                String mes = StringUtils.getChinese(message);
+                if (!StringUtils.isEmpty(mes) && iWorkView != null)
+                    iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
+            }
+        } catch (Exception e) {
+            if (e != null) log("error Exception =" + e.getMessage());
+        }
     }
 
 

+ 25 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IAutoErp.java

@@ -0,0 +1,25 @@
+package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
+
+/**
+ * 自动签到回调
+ * Created by Bitliker on 2016/12/16.
+ */
+public interface IAutoErp {
+
+    /**
+     * 签到成功
+     *
+     * @param type   1.内勤签到  2.外勤签到
+     * @param saveOk 是否保存到数据库成功
+     */
+    void success(int type, boolean saveOk);
+
+
+    /**
+     * 签到失败
+     *
+     * @param type    1.内勤签到  2.外勤签到
+     * @param message 失败信息
+     */
+    void failure(int type, String message);
+}

+ 17 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IMission.java

@@ -0,0 +1,17 @@
+package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
+
+import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
+
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2016/12/19.
+ */
+
+public interface IMission extends HttpImp {
+
+    void showModels(List<MissionModel> models);
+
+    void changModelStatus(int status, int postion);
+
+}

+ 24 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IMissionPresenter.java

@@ -0,0 +1,24 @@
+package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
+
+import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
+
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2016/12/16.
+ */
+
+public interface IMissionPresenter {
+    /**
+     * 1.从网络下拉数据
+     * 2.将数据保存到数据库
+     * 3.从数据库取出数据
+     */
+
+    void start();//1.从网上下拉数据   保存数据
+
+    void addEmptyModel();//添加一个单据
+
+    void submit(List<MissionModel> models);
+
+}

+ 0 - 16
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IMissionViewPresenter.java

@@ -1,16 +0,0 @@
-package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
-
-import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
-
-import java.util.List;
-
-/**
- * Created by Bitliker on 2016/12/16.
- */
-
-public interface IMissionViewPresenter extends HttpImp {
-
-    void showModel(List<MissionModel> models);
-
-
-}

+ 0 - 15
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IWork.java

@@ -1,15 +0,0 @@
-package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
-
-/**
- * 班次接口,没有View层
- * Created by Bitliker on 2016/12/16.
- */
-
-public interface IWork {
-
-    /**
-     * 保存状态
-     * @param update
-     */
-    void saveStatus(boolean update);
-}

+ 9 - 12
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IWorkPresenter.java

@@ -1,6 +1,5 @@
 package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
 
-import com.baidu.mapapi.search.core.PoiInfo;
 import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
 
 import java.util.ArrayList;
@@ -11,20 +10,18 @@ import java.util.ArrayList;
 
 public interface IWorkPresenter {
 
-    void startForSave();
-    void startForUi();
-    /**
-     * 获取班次
-     *
-     * @param time 日期时间戳
-     */
-    void loadWorkData(long time);
 
-    void submit(ArrayList<WorkModel> models, String macAddress);
+    void start();
 
-    void submitWork(ArrayList<WorkModel> models, String macAddress);
+//    void loadWorkData(long time);//下拉班次,只有打卡界面才有
 
-    void changPoi(PoiInfo poi);
+    void submit(ArrayList<WorkModel> models, String macAddress);//提交,判断重复打卡
+
+
+
+//    void submitWork(ArrayList<WorkModel> models, String macAddress);//提交,不用判断重复打卡   只有打卡界面才用
+
+//    void changPoi(PoiInfo poi);//只有打卡界面才有
 
 
 }

+ 4 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IWorkView.java

@@ -1,5 +1,7 @@
 package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
 
+import com.baidu.mapapi.model.LatLng;
+import com.baidu.mapapi.search.core.PoiInfo;
 import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
 
 import java.util.List;
@@ -19,5 +21,7 @@ public interface IWorkView extends HttpImp {
 
     void showErrorMac();
 
+    void setPois(List<PoiInfo> pois, LatLng latLng);
 
+    void setErrorMac(String message);
 }

+ 0 - 5
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/CommonInterfaceUtil.java

@@ -13,14 +13,11 @@ import com.xzjmyk.pm.activity.db.dao.ErrorMagDao;
 import com.xzjmyk.pm.activity.ui.erp.entity.ErrorEntity;
 import com.xzjmyk.pm.activity.util.PreferenceUtils;
 import com.xzjmyk.pm.activity.util.TimeUtils;
-import com.xzjmyk.pm.activity.view.crouton.Crouton;
 
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-import static com.xzjmyk.pm.activity.ui.erp.net.ViewUtil.ct;
-
 /**
  * 多用接口
  * Created by Bitliker on 2016/12/2.
@@ -52,8 +49,6 @@ public class CommonInterfaceUtil {
                             int id = JSON.parseObject(message).getInteger("id");
                             if (onResultListener != null)
                                 onResultListener.result(status, String.valueOf(id));
-                        } else {
-                            Crouton.makeText(ct, "获取id错误");
                         }
                         break;
                     case OUT_SET_WHAT:

+ 6 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/Constants.java

@@ -185,7 +185,7 @@ public class Constants {
             + ")";
     //外勤计划表
     public static final String TABLE_MISSION = "CREATE TABLE mission ("
-            + "id integer UNIQUE,"
+            + "id integer UNIQUE,"//id  唯一不可重复
             + "status integer,"//状态  1.结束   2.进行中
             + "master  varchar(20)," //员工账套
             + "emcode  varchar(20)," //员工编号
@@ -197,7 +197,11 @@ public class Constants {
             + "date varchar(50),"//日期 yyyy-MM-dd
             + "visittime varchar(50),"//预计到达时间 yyyy-MM-dd HH:mm:ss
             + "realvisitTime varchar(50),"//实际到达时间yyyy-MM-dd HH:mm:ss
-            + "realLeaveTime varchar(50)"//实际离开时间yyyy-MM-dd HH:mm:ss
+            + "realLeaveTime varchar(50),"//实际离开时间yyyy-MM-dd HH:mm:ss
+            //update by 2016/12/19
+            + "distance Double,"//距离  米
+            + "location varchar(50),"//录入位置
+            + "recorddate varchar(50)"//录入时间yyyy-MM-dd HH:mm:ss
             + ")";
 
     /**

+ 1 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/StringUtils.java

@@ -68,6 +68,7 @@ public class StringUtils {
     }
     //Bitliker 从字符串中取出中文字符
     public static String getChinese(String chche) {
+        if (StringUtils.isEmpty(chche))return "";
         String reg = "[^\u4e00-\u9fa5]";
         return chche.replaceAll(reg, "");
     }

+ 204 - 106
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/AutoErpService.java

@@ -1,40 +1,42 @@
 package com.xzjmyk.pm.activity.ui.erp.util.attendance;
 
-import android.annotation.TargetApi;
 import android.app.Service;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.os.AsyncTask;
-import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
+import android.os.Message;
 import android.util.Log;
 
 import com.xzjmyk.pm.activity.AppConfig;
 import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.db.dao.MissionDao;
 import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.WorkActivity;
 import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
 import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
-import com.xzjmyk.pm.activity.ui.erp.presenter.WorkPresenter;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWork;
-import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkPresenter;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonInterfaceUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.auto.NotificationManage;
+import com.xzjmyk.pm.activity.ui.tool.ThreadUtil;
+import com.xzjmyk.pm.activity.util.PreferenceUtils;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-
-import static com.xzjmyk.pm.activity.util.PreferenceUtils.getBoolean;
 
 /**
  * 自动Erp服务,开启线程
  */
-public class AutoErpService extends Service  {
+public class AutoErpService extends Service {
+    public static final String SAVE_WORK_ACTION = "SAVE_WORK_ACTION";
+    public static final String SAVE_MISSION_ACTION = "SAVE_MISSION_ACTION";
+    public static final String LOAD_MISSION = "LOAD_MISSION";
+
     public static final int STATUS_SIGNING = 0x11;//自动打卡
     public static final int STATUS_WORK_ALARM = 0x12;//上班提醒
     public static final int STATUS_OFF_ALARM = 0x13;//下班提醒
@@ -42,18 +44,73 @@ public class AutoErpService extends Service  {
     public static final int STATUS_LEAVE_ALARM = 0x15;//离开提醒
 
 
-    private ReckonAutoUtil reckonAutoUtil;
+    private ReckonAutoUtil reckonAutoUtil;//计算工具
+    private NotificationManage notificationManage;//通知管理器
+
+
     private boolean isAlarm;//是否打卡提醒
     private boolean isAuto;//是否自动打卡
-    private long intervalTime = 1 * 60 * 1000;//计算循环的时间
-    private int iter = 0;
-    private final String[] flags = {
 
+    private final long MINUTE = 60 * 1000;//一分钟的时间戳
+    private long workInterval = MINUTE;//计算循环的时间
+    private long missionInterval = 2 * MINUTE;//计算循环的时间
+    private AutoErpSigninUitl signinUitl;
+
+    private final String[] flags = {
+            SAVE_WORK_ACTION, SAVE_MISSION_ACTION, LOAD_MISSION
     };
+    private Handler handler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            Bundle bundle = msg.getData();
+            switch (msg.what) {
+                case STATUS_SIGNING://自动打卡
+                    if (bundle != null) {
+                        //TODO 打卡
+                        WorkModel model = bundle.getParcelable("data");
+                        signinUitl.signinWork(model);
+                    }
+                    break;
+                case STATUS_WORK_ALARM://上班提醒
+                    getNotificationManage().sendNotification(MyApplication.getInstance(),
+                            "上班时间快到了,请及时打卡", WorkActivity.class);
+                    break;
+                case STATUS_OFF_ALARM://下班提醒
+                    getNotificationManage().sendNotification(MyApplication.getInstance(),
+                            "下班时间已到了,请及时打卡", WorkActivity.class);
+                    break;
+                case STATUS_MISSION://外勤签到
+                    MissionModel model = bundle.getParcelable("data");
+                    signinUitl.signinMissio(model);
+                    break;
+                case STATUS_LEAVE_ALARM://内勤离开提醒
+                    getNotificationManage().sendNotification(MyApplication.getInstance(),
+                            R.string.outoff_work, WorkActivity.class);
+                    break;
+            }
+        }
+    };
+
+    private boolean isWorkRuning = false;
+    private boolean isMissionRuning = false;
+
     private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
+            try {
+                if (intent == null || StringUtils.isEmpty(intent.getAction())) return;
+                if (intent.getAction().equals(SAVE_WORK_ACTION)) {
+                    if (!isWorkRuning)
+                        startWorkTask();
+                } else if (intent.getAction().equals(SAVE_MISSION_ACTION)) {
+                    if (!isMissionRuning)
+                        startMissionTask();
+                } else if (intent.getAction().equals(LOAD_MISSION)) {
+                    signinUitl.loadMissionPlan();
+                }
+            } catch (Exception e) {
 
+            }
         }
     };
 
@@ -66,10 +123,10 @@ public class AutoErpService extends Service  {
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         try {
-            initBroadcast();
-            initDB();
-            init();
-            initTask();
+            initBroadcast();//初始化广播接受器
+            initDB();//初始化数据库数据,1.删除昨天数据   2.下拉当天数据
+            init();//初始化
+            initTask();//初始化任务
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -96,12 +153,116 @@ public class AutoErpService extends Service  {
 
     /**
      * 初始化任务
+     * 1.判断任务是否应该启动
+     * 2.启动任务
      */
-    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
     private void initTask() throws Exception {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
-            new AutoAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-        else new AutoAsyncTask().execute();
+
+    }
+
+
+    /**
+     * 开启自动打卡和提醒任务
+     * 在获取打卡列表之后,
+     *
+     * @throws Exception
+     */
+    private void startWorkTask() throws Exception {
+        log("startWorkTask");
+        isWorkRuning = true;
+        ThreadUtil.getInstance().addTask(new Runnable() {
+            @Override
+            public void run() {
+                while (true) {
+                    try {
+                        if (!isCanWork()) {
+                            isWorkRuning = false;
+                            break;
+                        }
+                        if (isAuto) {
+                            WorkModel model = getReckonAutoUtil().reckonAutoWork();
+                            if (model != null) {
+                                log("符合打卡");
+                                //TODO 符合打卡
+                                Message message = handler.obtainMessage();
+                                message.what = STATUS_SIGNING;
+                                Bundle bundle = new Bundle();
+                                bundle.putParcelable("data", model);
+                                message.setData(bundle);
+                                handler.sendMessage(message);
+                            }
+                        } else if (isAlarm) {//提醒  1.离开办公室 2.上班提醒   3.下班提醒
+                            int type = getReckonAutoUtil().reckonAlarm(isAlarm, workInterval);
+                            if (type == 1) {
+                                //TODO 符合离开办公室提醒
+                                handler.sendEmptyMessage(STATUS_LEAVE_ALARM);
+                            } else if (type == 2) {
+                                //TODO 符合上班提醒
+                                handler.sendEmptyMessage(STATUS_WORK_ALARM);
+                            } else if (type == 3) {
+                                //TODO 符合下班提醒
+                                handler.sendEmptyMessage(STATUS_OFF_ALARM);
+                            }
+                        }
+                        Thread.sleep(workInterval);
+                    } catch (InterruptedException e) {
+                        if (e != null)
+                            log("startWorkTask InterruptedException=" + e.getMessage());
+                    } catch (Exception e) {
+                        if (e != null)
+                            log("startWorkTask Exception=" + e.getMessage());
+                    }
+                }
+            }
+        });
+
+    }
+
+    /**
+     * 开启自动外勤任务
+     * 在获取外勤计划列表之后
+     *
+     * @throws Exception
+     */
+    private void startMissionTask() throws Exception {
+        log("startMissionTask");
+        isMissionRuning = true;
+        ThreadUtil.getInstance().addTask(new Runnable() {
+            @Override
+            public void run() {
+                while (true) {
+                    try {
+                        if (!isCanMission()) {
+                            isMissionRuning = false;
+                            break;
+                        }
+                        List<MissionModel> plans = MissionDao.getInstance().queryByEnCode();
+                        log("自动外勤 plans==" + (ListUtils.isEmpty(plans) ? 0 : plans.size()));
+                        //符合外勤判断
+                        //判断是否自动外勤
+                        boolean isAuto = PreferenceUtils.getBoolean(AppConfig.AUTO_MISSION, false);
+                        if (isAuto) {
+                            MissionModel mission = getReckonAutoUtil().reckonMission(plans);
+                            if (mission != null) {//TODO 符合外勤签到
+                                Message message = handler.obtainMessage();
+                                message.what = STATUS_MISSION;
+                                Bundle bundle = new Bundle();
+                                bundle.putParcelable("data", mission);
+                                message.setData(bundle);
+                                handler.sendMessage(message);
+                            }
+                        }
+                        Thread.sleep(missionInterval);
+                    } catch (InterruptedException e) {
+                        if (e != null)
+                            log("startWorkTask InterruptedException=" + e.getMessage());
+                    } catch (Exception e) {
+                        if (e != null)
+                            log("startWorkTask Exception=" + e.getMessage());
+                    }
+                }
+            }
+        });
     }
 
     /**
@@ -112,23 +273,20 @@ public class AutoErpService extends Service  {
         try {
             WorkModelDao.getInstance().clearAll(System.currentTimeMillis() - 24 * 60 * 60 * 1000);
             MissionDao.getInstance().clearAll(System.currentTimeMillis() - 24 * 60 * 60 * 1000);
-            IWorkPresenter presenter = new WorkPresenter(new IWork() {
-                @Override
-                public void saveStatus(boolean update) {
-                    Log.i("gongpengming", "进来了=" + update);
-                }
-            });
-            presenter.startForSave();
         } catch (Exception e) {
             if (e != null)
                 log("initDB Exception=" + e.getMessage());
         }
+        try {//TODO 缓存数据
+
+        } catch (Exception e) {
+
+        }
     }
 
-    /**
-     * 初始化网络请求
-     */
+
     private void init() {
+        signinUitl = new AutoErpSigninUitl();
         initWork();
         initMission();
     }
@@ -138,8 +296,9 @@ public class AutoErpService extends Service  {
         commonInterfaceUtil.getOutSetInfo(new CommonInterfaceUtil.OnResultListener() {
             @Override
             public void result(int code, String result) {
-                boolean isNeedAutoOut = getBoolean(AppConfig.AUTO_MISSION, false);
+                boolean isNeedAutoOut = PreferenceUtils.getBoolean(AppConfig.AUTO_MISSION, false);
                 if (isNeedAutoOut) {
+                    signinUitl.loadMissionPlan();
                 } else {
                     try {
                         //如果不是自动外勤,清空数据库今天的数据
@@ -161,6 +320,7 @@ public class AutoErpService extends Service  {
         isAuto = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.AUTO_SIGNIN, true);
         if (isAlarm || isAuto) {
             //TODO 下拉班次数据和是否本机账号
+            signinUitl.loadWorkData();
         } else {
             try {
                 //如果不是自动打卡和提醒,清空数据库今天的数据
@@ -173,78 +333,6 @@ public class AutoErpService extends Service  {
     }
 
 
-
-
-    //开启异步任务
-    private class AutoAsyncTask extends AsyncTask<Void, Map<String, Object>, Void> {
-        @Override
-        protected Void doInBackground(Void... voids) {
-            try {
-                while (true) {
-                    Map<String, Object> map = null;
-                    if (isCanMission()) {
-                        List<MissionModel> plans = MissionDao.getInstance().queryByEnCode();
-                        if (iter % 6 == 0 && !ListUtils.isEmpty(plans)) {
-                            log("自动外勤");
-                            //符合外勤判断
-                            //判断是否自动外勤
-                            boolean isAuto = getBoolean(AppConfig.AUTO_MISSION, false);
-                            if (isAuto) {
-                                MissionModel mission = getReckonAutoUtil().reckonMission(plans);
-                                if (mission != null) {
-                                    map.clear();
-                                    map.put("type", STATUS_MISSION);
-                                    map.put("data", mission);
-                                    publishProgress(map);
-                                }
-                            }
-                        }
-                    }
-                    if (isCanWork()) {
-                        if (isAuto) {
-                            WorkModel model = getReckonAutoUtil().reckonAutoWork();
-                            if (model != null) {
-                                //TODO 打卡
-                                map = new HashMap<>();
-                                map.put("type", STATUS_SIGNING);
-                                map.put("data", model);
-                                publishProgress(map);
-                            }
-                        } else if (isAlarm) {
-                            int type = getReckonAutoUtil().reckonAlarm(intervalTime);
-                            if (type == 1) {
-                                map = new HashMap<>();
-                                map.put("type", STATUS_LEAVE_ALARM);
-                                publishProgress(map);
-                            } else if (type == 2) {
-                                map = new HashMap<>();
-                                map.put("type", STATUS_WORK_ALARM);
-                                publishProgress(map);
-                            } else if (type == 2) {
-                                map = new HashMap<>();
-                                map.put("type", STATUS_OFF_ALARM);
-                                publishProgress(map);
-                            }
-                        }
-                    }
-                    iter++;
-                    Thread.sleep(intervalTime);
-                }
-            } catch (Exception e) {
-                if (e != null)
-                    log("AutoAsyncTask Exception=" + e.getMessage());
-            } finally {
-                return null;
-            }
-
-        }
-
-        @Override
-        protected void onProgressUpdate(Map<String, Object>... values) {
-            super.onProgressUpdate(values);
-        }
-    }
-
     private ReckonAutoUtil getReckonAutoUtil() {
         if (reckonAutoUtil == null) reckonAutoUtil = new ReckonAutoUtil();
         return reckonAutoUtil;
@@ -258,6 +346,16 @@ public class AutoErpService extends Service  {
         return true;
     }
 
+    /**
+     * start handler date
+     */
+    //防止空值
+    private NotificationManage getNotificationManage() {
+        if (notificationManage == null)
+            notificationManage = new NotificationManage();
+        return notificationManage;
+    }
+
     /**
      * 打印信息方法
      *

+ 722 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/AutoErpSigninUitl.java

@@ -0,0 +1,722 @@
+package com.xzjmyk.pm.activity.ui.erp.util.attendance;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baidu.mapapi.model.LatLng;
+import com.baidu.mapapi.search.route.DrivingRouteLine;
+import com.baidu.mapapi.search.route.DrivingRouteResult;
+import com.xzjmyk.pm.activity.AppConfig;
+import com.xzjmyk.pm.activity.BdLocationHelper;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.db.dao.MissionDao;
+import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
+import com.xzjmyk.pm.activity.ui.MainActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.MissionActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.OutSigninOKActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.WorkActivity;
+import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
+import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonInterfaceUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.auto.HttpHandler;
+import com.xzjmyk.pm.activity.ui.erp.util.auto.NotificationManage;
+import com.xzjmyk.pm.activity.ui.erp.util.baidu.OnGetDrivingRouteResult;
+import com.xzjmyk.pm.activity.ui.tool.ThreadUtil;
+import com.xzjmyk.pm.activity.util.BaiduMapUtil;
+import com.xzjmyk.pm.activity.util.MacAndIDUtil;
+import com.xzjmyk.pm.activity.util.PreferenceUtils;
+import com.xzjmyk.pm.activity.util.TimeUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.xzjmyk.pm.activity.ui.erp.util.CommonUtil.getSharedPreferences;
+
+/**
+ * 负责签到   内外勤
+ * Created by Bitliker on 2016/12/20.
+ */
+public class AutoErpSigninUitl implements HttpHandler.OnResultListener {
+
+    private final int MAC_VAL = 0x11;//判断mac地址
+    private final int SIGNING = 0x12;//内勤签到
+    private final int LOAD_WORKLOG = 0x13;//打卡列表
+    private final int SIGNIN_MISSION = 0x14;//外勤签到
+    private final int HAVE_OUT_PLAN = 0x15;//还有未拜访外勤计划
+
+    private final int WORK_DATA = 0x16;//内勤列表
+    private final int WORK_LOG = 0x17;//下拉列表时候的获取打卡列表
+    private final int LOAD_PLAN = 0x18;
+
+    private NotificationManage notificationManage;
+
+    public AutoErpSigninUitl() {
+        notificationManage = new NotificationManage();
+    }
+
+    /**
+     * 签到内勤
+     *
+     * @param model 签到班次对象
+     */
+    public void signinWork(WorkModel model) {
+        //1.判读mac地址是否符合     3.签到
+        MacAndIDUtil util = new MacAndIDUtil();
+        String macAddress = util.getMac(MyApplication.getInstance());
+        if (StringUtils.isEmpty(macAddress)) {
+            return;
+        }
+        validatorMac(model, macAddress);
+    }
+
+    /**
+     * 签到外勤
+     *
+     * @param model 签到对象
+     */
+    public void signinMissio(MissionModel model) {
+        if (model == null) return;
+        Context ct = MyApplication.getInstance();
+        if (!MyApplication.getInstance().isNetworkActive()) {
+            notificationManage.sendNotification(ct, R.string.out_net_signin, OutSigninOKActivity.class);
+        }
+        Map<String, Object> param = new HashMap<>();
+        Map<String, Object> formStore = new HashMap<>();
+        String emconde = CommonUtil.getSharedPreferences(ct, "erp_username");
+        String name = CommonUtil.getSharedPreferences(ct, "erp_emname");
+        if (StringUtils.isEmpty(name))
+            name = MyApplication.getInstance().mLoginUser.getNickName();
+        formStore.put("mo_address", model.getCompanyAddr());//TODO 当前地址
+        formStore.put("mo_mancode", emconde);//人员编号
+        formStore.put("mo_man", name);//人员编号
+        formStore.put("mo_remark", "自动外勤签到");//备注
+        formStore.put("mo_company", model.getCompanyName());//TODO 当前公司
+        param.put("caller", "Mobile_outsign");
+        param.put("mpd_id", model.getId());
+        param.put("formStore", StringUtils.mapToJson(formStore));
+        Bundle bundle = new Bundle();
+        bundle.putParcelable("data", model);
+        HttpHandler.getInstance().loadERPByNet(SIGNIN_MISSION, "mobile/addAutoSign.action",
+                param, bundle, this);
+    }
+
+
+    private void validatorMac(WorkModel model, String macAddress) {
+        Map<String, Object> param = new HashMap<>();
+        param.put("macAddress", macAddress);
+        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bundle = new Bundle();
+        bundle.putParcelable("data", model);
+        HttpHandler.getInstance().loadERPByNet(MAC_VAL, "mobile/addMobileMac.action",
+                param, bundle, this);
+    }
+
+
+    //签到
+    private void signinWork(Bundle bunder, String code) {
+        Context ct = MyApplication.getInstance();
+        Map<String, Object> param = new HashMap<>();
+        Map<String, Object> form = new HashMap<>();
+        form.put("cl_code", code);
+        form.put("cl_phone", MyApplication.getInstance().mLoginUser.getTelephone());
+        form.put("cl_emcode", getSharedPreferences(ct, "erp_username"));
+        String emname = getSharedPreferences(ct, "erp_emname");
+        if (StringUtils.isEmpty(emname)) {
+            emname = MyApplication.getInstance().mLoginUser.getNickName().trim();
+        }
+        form.put("cl_emname", emname);
+        boolean isp = isPlay(form);
+        if (!isp) {
+            return;//不符合打卡
+        }
+        String formStore = StringUtils.mapToJson(form);
+        param.put("caller", "CardLog");
+        param.put("formStore", formStore);
+        param.put("emcode", getSharedPreferences(ct, "erp_username"));
+        HttpHandler.getInstance().loadERPByNet(SIGNING, "mobile/saveCardLog.action",
+                param, bunder, this);
+    }
+
+
+    /*判断是否符合打卡*/
+    private boolean isPlay(Map<String, Object> form) {
+        try {
+            //判断是否符合打卡
+            BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
+            form.put("cl_address", helper.getAddress());
+            form.put("cl_location", helper.getName());
+            int comDistance = PreferenceUtils.getInt("distance", 0);
+            float distance = BaiduMapUtil.getInstence().getDistance();
+            if (comDistance < distance) {
+                //TODO 规定地址<实际地址  不符合
+                //判断是否有外勤
+                boolean isOutPlan = PreferenceUtils.getBoolean(AppConfig.HAVE_OUT_PLAN, false);
+                if (!isOutPlan) {
+                    //TODO 没有自动外勤
+                }
+                return false;
+            } else {
+                form.put("cl_distance", distance);
+                return true;
+            }
+        } catch (NullPointerException e) {
+            return false;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    //获取打卡记录
+    private void loadLog(Bundle bunder) throws Exception {
+        String date = TimeUtils.s_long_2_str(System.currentTimeMillis());
+        //获取网络数据
+        Map<String, Object> param = new HashMap<>();
+        String code = getSharedPreferences(MyApplication.getInstance(), "erp_username");
+        param.put("currentMaster", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        param.put("page", 1);
+        param.put("pageSize", 1);
+        param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
+        param.put("caller", "CardLog");
+        param.put("emcode", code);
+        param.put("master", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        HttpHandler.getInstance().loadERPByNet(LOAD_WORKLOG, "mobile/oa/workdata.action",
+                param, bunder, this);
+    }
+
+    //获取是否有外勤计划
+    public void loadIsMission(MissionModel model) {
+        Map<String, Object> param = new HashMap<>();
+        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bunder = new Bundle();
+        bunder.putParcelable("data", model);
+        HttpHandler.getInstance().loadERPByNet(HAVE_OUT_PLAN, "mobile/yesornoplan.action",
+                param, bunder, this);
+    }
+
+
+    /*****************
+     * 下拉列表
+     ***********************/
+    /**
+     * 下拉内勤数据
+     */
+    public void loadWorkData() {
+        Map<String, Object> param = new HashMap<>();
+        param.put("date", TimeUtils.int_long_2_str(System.currentTimeMillis()));
+        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bundle = new Bundle();
+        HttpHandler.getInstance().loadERPByNet(WORK_DATA, "mobile/getWorkDate.action", param, bundle, this);
+    }
+
+    private void loadLog(ArrayList<WorkModel> models) {
+        String date = TimeUtils.s_long_2_str(System.currentTimeMillis());
+        //获取网络数据
+        Map<String, Object> param = new HashMap<>();
+        String code = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
+        param.put("currentMaster", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        param.put("page", 1);
+        param.put("pageSize", 100);
+        param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
+        param.put("caller", "CardLog");
+        param.put("emcode", code);
+        param.put("master", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        Bundle bundle = new Bundle();
+        bundle.putParcelableArrayList("models", models);
+        HttpHandler.getInstance().loadERPByNet(WORK_LOG, "mobile/oa/workdata.action", param, bundle, this);
+    }
+
+    //获取外勤计划列表
+    public void loadMissionPlan() {
+        Map<String, Object> param = new HashMap<>();
+        param.put("emcode",
+                CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        HttpHandler.getInstance().loadERPByNet(LOAD_PLAN, "mobile/mobileoutplan.action", param, null, this);
+    }
+
+    @Override
+    public void result(int what, boolean isJSON, String message, final Bundle bundle) {
+        try {
+            switch (what) {
+                case MAC_VAL://判断mac地址
+                    if (isJSON && JSON.parseObject(message).containsKey("success") &&
+                            JSON.parseObject(message).getBoolean("success")) {
+                        CommonInterfaceUtil util = new CommonInterfaceUtil();
+                        util.getCodeByNet("CardLog", new CommonInterfaceUtil.OnResultListener() {
+                            @Override
+                            public void result(int code, String result) {
+                                signinWork(bundle, result);
+                            }
+                        });
+                    }
+                    break;
+                case SIGNING:
+                    loadLog(bundle);
+                    break;
+                case LOAD_WORKLOG:
+                    if (isJSON && JSON.parseObject(message).containsKey("listdata")) {
+                        saveSignin2DB(bundle, JSON.parseObject(message).getJSONArray("listdata"));
+                    }
+                    break;
+                case SIGNIN_MISSION:
+                    if (isJSON) {
+                        if (JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
+                            //成功  更新数据库
+                            if (bundle == null) return;
+                            MissionModel mission = bundle.getParcelable("data");
+                            if (mission == null) return;
+                            updataMissonDB(mission);
+                        }
+                    }
+                    break;
+                case HAVE_OUT_PLAN:
+                    if (!isJSON) return;
+                    JSONObject object = JSON.parseObject(message);
+                    if (!object.containsKey("success") || !object.getBoolean("success")) return;
+                    if (object.containsKey("isOffline")) {
+                        int isOffline = Integer.valueOf(object.getString("isOffline"));
+                        //当判断到外勤计划为有值  1.外勤计划有  2.自动外勤
+                        if (bundle != null && bundle.getParcelable("data") != null) {
+                            MissionModel model = bundle.getParcelable("data");
+                            if (model == null) {
+                                log("model==null");
+                                return;
+                            }
+                            boolean saveOk = MissionDao.getInstance().updata(model);
+                            if (isOffline > 0) {//还有外勤计划
+                                if (saveOk)
+                                    notificationManage.sendNotification(MyApplication.getInstance(),
+                                            "对" + model.getCompanyName() + "外勤签退成功", MissionActivity.class);
+                            } else {//没有外勤计划
+                                endMission(model, saveOk);
+                            }
+                        }
+                    }
+                case WORK_DATA://打卡班次
+                    handlerWorkData(isJSON, message);
+                    break;
+                case WORK_LOG://
+                    ArrayList<WorkModel> models = null;
+                    if (bundle != null) models = bundle.getParcelableArrayList("models");
+                    handlerWorkLog(isJSON, message, models);
+                    break;
+                case LOAD_PLAN:
+                    JSONArray array = null;
+                    if (isJSON && JSON.parseObject(message).get("data") instanceof JSONArray) {
+                        array = JSON.parseObject(message).getJSONArray("data");
+                    } else if (JSON.parseObject(message).get("success") instanceof JSONArray) {
+                        array = JSON.parseObject(message).getJSONArray("success");
+                    }
+                    handlerData(array);
+                    break;
+                default:
+                    break;
+            }
+        } catch (Exception e) {
+            if (e != null)
+                log("result=" + e.getMessage());
+        }
+
+
+    }
+
+    @Override
+    public void error(int what, int statuCode, String message, Bundle bundle) {
+
+    }
+
+    /**
+     * 外勤签到签退处理
+     * 1.签退:status==1&&离开范围之内==》mission.setStatus(2) ,先把状态设置位2在传进来签退
+     * 2.签到:在范围之内,status不做任何改变 传进来签到
+     *
+     * @param mission 传进来的对象
+     * @throws Exception
+     */
+    private void updataMissonDB(MissionModel mission) throws Exception {
+        //更新数据库
+        if (mission == null) return;//如果数据库没有,一般不会出现这样的情况
+        if (mission.getStatus() == 2) {//进来签退
+            Log.i("gongpengming", "进来签退");
+            mission.setRealLeave(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+            loadIsMission(mission);
+        } else {//签到
+            Log.i("gongpengming", "签到");
+            mission.setRealTime(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+            if (mission.getStatus() != 1) {
+                mission.setStatus(1);//说明没有打过卡  TODO 可以通过判断签到时间是否存在来判断是否提示签到
+                boolean saveOk = MissionDao.getInstance().updata(mission);
+                if (saveOk)
+                    notificationManage.sendNotification(MyApplication.getInstance(), "外勤签到成功",
+                            MissionActivity.class);
+            }
+        }
+    }
+
+    /**
+     * 外勤签退后判断时候还有外勤计划,如果没有,判断是否符合返回公司  返回提示请返回公司签到
+     *
+     * @param model
+     * @param saveOk
+     * @throws Exception
+     */
+    private void endMission(final MissionModel model, final boolean saveOk) throws Exception {
+        //TODO 英唐大厦应该改为公司名称
+        BaiduMapUtil.getInstence().getDrivingRoute(MyApplication.getInstance().
+                getBdLocationHelper().getCityName(), MyApplication.getInstance().
+                getBdLocationHelper().getName(), "英唐大厦", new OnGetDrivingRouteResult() {
+            @Override
+            public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
+                List<DrivingRouteLine> list = drivingRouteResult.getRouteLines();
+                if (ListUtils.isEmpty(list)) {//获取路线列表为空
+                    if (saveOk)
+                        notificationManage.sendNotification(MyApplication.getInstance(), "对" + model.getCompanyName() + "外勤签退成功",
+                                MissionActivity.class);
+                    return;
+                }
+                int minTime = 0;
+                for (DrivingRouteLine e : list) {//TODO 获取最优最快路线及时间
+                    if (minTime == 0 || minTime > e.getDuration()) {
+                        minTime = e.getDuration();
+                    }
+                }
+                log("最短时间为" + minTime);
+                //获取使用时间为。。。。
+                //当前时间
+                List<WorkModel> models = WorkModelDao.getInstance().query(true);
+                if (ListUtils.isEmpty(models)) {
+                    log("数据库中的班次为空的");
+                    if (saveOk)
+                        notificationManage.sendNotification(MyApplication.getInstance(),
+                                "对" + model.getCompanyName() + "外勤签退成功", MissionActivity.class);
+                    return;
+                }
+                String lastTime = null;
+                for (WorkModel e : models) {
+                    if (StringUtils.isEmpty(e.getOffTime())) continue;
+                    if (StringUtils.isEmpty(lastTime) || e.getOffTime().compareTo(lastTime) > 0)
+                        lastTime = e.getOffTime();
+                }
+                if (StringUtils.isEmpty(lastTime)) {
+                    if (saveOk)
+                        notificationManage.sendNotification(MyApplication.getInstance(),
+                                "对" + model.getCompanyName() + "外勤签退成功", MissionActivity.class);
+                    return;
+                }
+                int time = getTime(lastTime);
+                log("与下班时间相差" + time);
+                int deTime = PreferenceUtils.getInt(AppConfig.AUTO_MISSION_TIME, 10);
+                if ((minTime + deTime * 60) < time) {
+                    notificationManage.sendNotification(MyApplication.getInstance(),
+                            "外勤签退成功,您还有时间返回公司,请回公司签到", MainActivity.class);
+                } else {
+                    Log.i("gongpengming", "时间不符合");
+                    if (saveOk)
+                        notificationManage.sendNotification(MyApplication.getInstance(),
+                                "外勤签退成功,当天任务已结束", MissionActivity.class);
+                }
+            }
+        });
+    }
+
+    //保存到数据库
+    private void saveSignin2DB(Bundle bundle, JSONArray array) throws Exception {
+        WorkModel model = null;
+        if (bundle != null && bundle.getParcelable("data") != null) {
+            model = bundle.getParcelable("data");
+        } else {
+            List<WorkModel> models = WorkModelDao.getInstance().query(false);
+            if (ListUtils.isEmpty(models)) return;
+            String time = TimeUtils.long2str(System.currentTimeMillis(), "HH:mm");
+            for (WorkModel m : models) {
+                //当前时间位于该班次之间
+                if (m.getWorkStart().compareTo(time) < 0 && m.getOffend().compareTo(time) > 0) {
+                    model = m;
+                    break;
+                }
+            }
+        }
+        //取最后一个
+        JSONObject object = array.getJSONObject(array.size() - 1);
+        String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
+        time = TimeUtils.clearDay(time);//获取到的
+        if (StringUtils.isEmpty(time) || model == null) return;
+        if (StringUtils.isEmpty(model.getWorkSignin()) && model.getWorkStart().compareTo(time) < 0
+                && model.getWorkTime().compareTo(time) > 0) {
+            model.setWorkSignin(time);
+            long i = WorkModelDao.getInstance().update(model);
+            notificationManage.sendNotification(MyApplication.getInstance(),
+                    R.string.auto_signin, WorkActivity.class);
+        } else if (StringUtils.isEmpty(model.getOffSignin()) && model.getOffTime().compareTo(time) < 0
+                && model.getOffend().compareTo(time) > 0) {
+            model.setOffSignin(time);
+            long i = WorkModelDao.getInstance().update(model);
+            notificationManage.sendNotification(MyApplication.getInstance(),
+                    R.string.auto_signin, WorkActivity.class);
+        }
+    }
+
+    private void log(String message) {
+        try {
+            if (!AppConfig.DEBUG || StringUtils.isEmpty(message)) return;
+            Log.i("gongpengming", message);
+        } catch (Exception e) {
+            if (e != null)
+                Log.i("gongpengming", "show Exception" + e.getMessage());
+        }
+    }
+
+
+    /**
+     * 处理打卡签到
+     *
+     * @param isJSON
+     * @param message
+     */
+    private void handlerWorkData(boolean isJSON, String message) throws Exception {
+        if (!isJSON) {
+            return;
+        }
+        JSONObject object = JSON.parseObject(message);
+        boolean comaddressset = object.getBooleanValue("comaddressset");
+        double companyLongitude = 0;
+        double companyLatitude = 0;
+        int companyDistance = 0;
+        if (comaddressset) {
+            companyLongitude = object.getDoubleValue("longitude");
+            companyLatitude = object.getDoubleValue("latitude");
+            companyDistance = object.getIntValue("distance");
+        }
+        try {
+            PreferenceUtils.putInt("distance", companyDistance);
+            PreferenceUtils.putFloat("longitude", (float) companyLongitude);
+            PreferenceUtils.putFloat("latitude", (float) companyLatitude);
+        } catch (ClassCastException e) {
+            if (e != null)
+                log("handlerWorkData ClassCastException=" + e.getMessage());
+        } catch (Exception e) {
+            if (e != null)
+                log("handlerWorkData Exception=" + e.getMessage());
+        }
+        ArrayList<WorkModel> models = new ArrayList<>();
+        if (object.containsKey("wd_degree")) {//有排班
+            if (object.containsKey("Class1")) {
+                handlerByClass(models, object.getJSONObject("Class1"));
+            }
+            if (object.containsKey("Class2")) {
+                handlerByClass(models, object.getJSONObject("Class2"));
+            }
+            if (object.containsKey("Class3")) {
+                handlerByClass(models, object.getJSONObject("Class3"));
+            }
+        }
+        if (ListUtils.isEmpty(models)) {
+            return;
+        }
+        loadLog(models);
+    }
+
+    /**
+     * 处理班次情况,简化代码  分开函数
+     *
+     * @param models
+     * @param object
+     */
+    private void handlerByClass(ArrayList<WorkModel> models, JSONObject object) {
+        String wd_onbeg = object.getString("wd_onbeg");
+        String wd_onduty = object.getString("wd_onduty");
+        String wd_offduty = object.getString("wd_offduty");
+        String wd_offend = object.getString("wd_offend");
+        if (StringUtils.isEmpty(wd_onbeg)
+                || StringUtils.isEmpty(wd_onduty)
+                || StringUtils.isEmpty(wd_offduty)
+                || StringUtils.isEmpty(wd_offend)) return;
+        WorkModel model = new WorkModel();
+        model.setWorkStart(wd_onbeg);
+        model.setWorkTime(wd_onduty);
+        String rangeTime = null;
+        try {
+            rangeTime = getStartAndEndTime(true, wd_onduty);
+            if (!StringUtils.isEmpty(rangeTime)) {
+                model.setWorkend(rangeTime);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        model.setOffTime(wd_offduty);
+        model.setOffend(wd_offend);
+        try {
+            rangeTime = getStartAndEndTime(false, wd_offduty);
+            if (!StringUtils.isEmpty(rangeTime)) {
+                model.setOffStart(rangeTime);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        models.add(model);
+    }
+
+    /**
+     * 处理打卡签到列表,建议在线程钟使用
+     *
+     * @param isJSON  是否是json数据
+     * @param message 返回信息
+     * @param models  获取班次信息时候的数据
+     * @throws Exception
+     */
+    private void handlerWorkLog(boolean isJSON, String message, final ArrayList<WorkModel> models) throws Exception {
+        if (!isJSON || ListUtils.isEmpty(models)) {
+            return;
+        }
+        JSONObject object = JSON.parseObject(message);
+        JSONArray listdata = object.getJSONArray("listdata");
+        if (ListUtils.isEmpty(listdata)) {
+            log("ListUtils.isEmpty(listdata) 数据为空,容错处理");
+            return;
+        }
+        String timeLog = null;
+        for (int i = 0; i < listdata.size(); i++) {
+            timeLog = getMinTime(listdata.getJSONObject(i).getString("cl_time"));
+            for (int j = 0; j < models.size(); j++) {
+                WorkModel e = models.get(j);
+                if (StringUtils.isEmpty(e.getWorkStart()) || StringUtils.isEmpty(e.getWorkTime()) ||
+                        StringUtils.isEmpty(e.getOffend()) || StringUtils.isEmpty(e.getOffTime()))
+                    continue;
+                if (e.getWorkStart().compareTo(timeLog) <= 0 && e.getOffend().compareTo(timeLog) >= 0) {
+                    //符合该班次
+                    if (e.getWorkend().compareTo(timeLog) >= 0) {
+                        if (StringUtils.isEmpty(e.getWorkSignin()) || e.getWorkSignin().compareTo(timeLog) >= 0) {
+                            models.get(j).setWorkSignin(timeLog);
+                        }
+                    }
+                    if (e.getOffStart().compareTo(timeLog) <= 0) {
+                        if (StringUtils.isEmpty(e.getOffSignin()) || e.getOffSignin().compareTo(timeLog) <= 0) {
+                            models.get(j).setOffSignin(timeLog);
+                        }
+                    }
+                    break;
+                }
+            }
+        }
+        //下拉数据后保存到数据库
+        if (!ListUtils.isEmpty(models)) {
+            //当天日期数据
+            ThreadUtil.getInstance().addTask(new Runnable() {
+                @Override
+                public void run() {
+                    List<WorkModel> saveModels = new ArrayList<>();
+                    for (WorkModel e : models)
+                        saveModels.add(e);
+                    boolean saveOK = WorkModelDao.getInstance().createOrUpdata(saveModels);
+                    //TODO 保存成功知会服务
+                    if (saveOK) {
+                        Intent intent = new Intent();
+                        intent.setAction(AutoErpService.SAVE_WORK_ACTION);
+                        MyApplication.getInstance().sendBroadcast(intent);
+                    }
+                }
+            });
+        }
+    }
+
+
+    /**
+     * 解析处理外勤计划列表并保存到数据库
+     *
+     * @param array
+     */
+    private void handlerData(JSONArray array) throws Exception {
+        if (ListUtils.isEmpty(array)) {
+            return; //获取到拜访计划数据
+        } else {
+            JSONObject object = null;
+            MissionModel entity = null;
+            final List<MissionModel> entities = new ArrayList<>();
+            for (int i = 0; i < array.size(); i++) {
+                object = array.getJSONObject(i);
+                entity = new MissionModel();
+                entity.setId(object.getInteger("MPD_ID"));
+                entity.setCompanyName(object.getString("MPD_COMPANY"));
+                entity.setCompanyAddr(object.getString("MPD_ADDRESS"));
+                double longitude = object.getDoubleValue("MD_LONGITUDE");
+                double latitude = object.getDoubleValue("MD_LATITUDE");
+                if (longitude > 0 && latitude > 0) {
+                    entity.setLatLng(new LatLng(latitude, longitude));
+                }
+                if (object.containsKey("MPD_ARRIVEDATE")) {
+                    entity.setVisitTime(object.getString("MPD_ARRIVEDATE"));
+                } else if (object.containsKey("TO_CHAR(MPD_ARRIVEDATE,'YYYY-MM-DDHH24:MI:SS')")) {
+                    entity.setVisitTime(object.getString("TO_CHAR(MPD_ARRIVEDATE,'YYYY-MM-DDHH24:MI:SS')"));
+                }
+                try {
+                    long mpd_actdate = object.getLongValue("MPD_ACTDATE");
+                    long mpd_outdate = object.getLongValue("MPD_OUTDATE");
+                    if (mpd_actdate != 0)
+                        entity.setRealTime(TimeUtils.f_long_2_str(mpd_actdate));
+                    if (mpd_outdate != 0)
+                        entity.setRealLeave(TimeUtils.f_long_2_str(mpd_outdate));
+                } catch (Exception e) {
+                }
+                entity.setStatus(1);
+                entity.setDistance(object.getDoubleValue("MPD_DISTANCE"));
+                entity.setLocation(object.getString("MPD_LOCATION"));
+                entity.setRecorddate(object.getString("MPD_RECORDDATE"));
+                entities.add(entity);
+            }
+            if (!ListUtils.isEmpty(entities)) {
+                //TODO 保存到数据库
+                ThreadUtil.getInstance().addTask(new Runnable() {
+                    @Override
+                    public void run() {
+                        boolean saveOk = MissionDao.getInstance().updataOrCreate(entities);
+                        if (saveOk) {
+                            Intent intent = new Intent();
+                            intent.setAction(AutoErpService.SAVE_MISSION_ACTION);
+                            MyApplication.getInstance().sendBroadcast(intent);
+                        }
+                    }
+                });
+            }
+        }
+    }
+
+    /**
+     * 获取截至时间
+     *
+     * @param isWork   是否上班
+     * @param workTime 时间 (上班时间||下班时间)
+     * @return 服务器没有给的时间
+     */
+    private String getStartAndEndTime(boolean isWork, String workTime) throws Exception {
+        long dayTime = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + workTime + ":00");//获取当前天的workTime
+        long time = isWork ? dayTime + 90 * 60 * 1000 : dayTime - 90 * 60 * 1000;
+        return TimeUtils.long2str(time, "HH:mm");
+    }
+
+    private String getMinTime(String time) {
+        if (StringUtils.isEmpty(time)) {
+            return "";
+        } else {
+            return TimeUtils.long2str(TimeUtils.f_str_2_long(time), "HH:mm");
+        }
+    }
+
+    //获取当前时间鱼下班时间的差
+    private int getTime(String lastTime) {
+        long time = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis())
+                + " " + lastTime + ":00");
+        long time2 = time - System.currentTimeMillis();
+        if (time < 0) return 0;
+        return (int) (time2 / 1000);
+    }
+}

+ 0 - 406
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/CacheAutoUtil.java

@@ -1,406 +0,0 @@
-package com.xzjmyk.pm.activity.ui.erp.util.attendance;
-
-import android.os.Bundle;
-import android.util.Log;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.baidu.mapapi.model.LatLng;
-import com.xzjmyk.pm.activity.AppConfig;
-import com.xzjmyk.pm.activity.MyApplication;
-import com.xzjmyk.pm.activity.db.dao.MissionDao;
-import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
-import com.xzjmyk.pm.activity.ui.erp.model.MissionModel;
-import com.xzjmyk.pm.activity.ui.erp.model.WorkModel;
-import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
-import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
-import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
-import com.xzjmyk.pm.activity.ui.erp.util.auto.HttpHandler;
-import com.xzjmyk.pm.activity.util.MacAndIDUtil;
-import com.xzjmyk.pm.activity.util.PreferenceUtils;
-import com.xzjmyk.pm.activity.util.TimeUtils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.xzjmyk.pm.activity.ui.erp.util.CommonUtil.getSharedPreferences;
-import static com.xzjmyk.pm.activity.util.TimeUtils.s_long_2_str;
-
-/**
- * 缓存自动考勤数据
- * Created by Bitliker on 2016/12/9.
- */
-public class CacheAutoUtil implements HttpHandler.OnResultListener {
-    private final int WORK_DATA = 0x11;//打卡班次
-    private final int WORK_LOG = 0x12;//打卡列表
-    private final int MAC_VAL = 0x13;//判断mac地址
-    private final int HAVE_OUT_PLAN = 0x14;//判断是否还有外勤
-    private final int LOAD_PLAN = 0x15;//外勤计划
-    private OnLoadListener onLoadListener;
-
-    public CacheAutoUtil(OnLoadListener onLoadListener) {
-        this.onLoadListener = onLoadListener;
-    }
-
-    @Override
-    public void result(int what, boolean isJSON, String message, Bundle bundle) {
-        try {
-            if (isJSON) {
-                JSONObject object = JSON.parseObject(message);
-                handlerSuccess(what, object, bundle);
-            } else {
-                //TODO 返回不是json数据的情况
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    public void error(int what, int statuCode, String message, Bundle bundle) {
-        try {
-            //TODO 返回错误时候
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 获取打卡班次,为了自动打卡,只缓存当天的数据 net
-     */
-    public void loadWorkData() {
-        Map<String, Object> param = new HashMap<>();
-        param.put("date", TimeUtils.int_long_2_str(System.currentTimeMillis()));
-        param.put("emcode", getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-        Bundle bundle = new Bundle();
-        HttpHandler.getInstance().loadERPByNet(WORK_DATA, "mobile/getWorkDate.action", param, bundle, this);
-    }
-
-
-    private void loadLog(ArrayList<WorkModel> models, long time) {
-        String date = s_long_2_str(time);
-        //获取网络数据
-        Map<String, Object> param = new HashMap<>();
-        String code = getSharedPreferences(MyApplication.getInstance(), "erp_username");
-        param.put("currentMaster", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
-        param.put("page", 1);
-        param.put("pageSize", 100);
-        param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
-        param.put("caller", "CardLog");
-        param.put("emcode", code);
-        param.put("master", getSharedPreferences(MyApplication.getInstance(), "erp_master"));
-        Bundle bundle = new Bundle();
-        bundle.putParcelableArrayList("models", models);
-        bundle.putLong("time", time);
-        HttpHandler.getInstance().loadERPByNet(WORK_LOG, "mobile/oa/workdata.action", param, bundle, this);
-    }
-
-    /**
-     * 判断mac地址是否符合 net
-     */
-    public void validatorMac() {
-        //获取网络数据
-        MacAndIDUtil util = new MacAndIDUtil();
-        Map<String, Object> param = new HashMap<>();
-        param.put("macAddress", util.getMac(MyApplication.getInstance()));
-        param.put("emcode", getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-        HttpHandler.getInstance().
-                loadERPByNet(MAC_VAL, "mobile/addMobileMac.action", param, null, this);
-    }
-
-    /**
-     * 获取是否有外勤计划 net
-     */
-    public void loadhasMission() {
-        Map<String, Object> param = new HashMap<>();
-        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-        HttpHandler.getInstance().
-                loadERPByNet(HAVE_OUT_PLAN, "mobile/yesornoplan.action", param, null, this);
-    }
-
-    /**
-     * 获取外勤计划列表 net
-     */
-    public void loadMissionPlan() {
-        Map<String, Object> param = new HashMap<>();
-        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-        HttpHandler.getInstance().
-                loadERPByNet(LOAD_PLAN, "mobile/mobileoutplan.action", param, null, this);
-    }
-
-    /*****************
-     * 处理数据
-     ********************/
-
-    /**
-     * 当访问网络获取数据成功
-     *
-     * @param what   请求标识
-     * @param object json对象
-     * @param bundle bundle对象
-     * @throws Exception
-     */
-    private void handlerSuccess(int what, JSONObject object, Bundle bundle) throws Exception {
-        switch (what) {
-            case WORK_DATA://打卡班次
-                handlerWorkData(object);
-                break;
-            case WORK_LOG://打卡列表
-                ArrayList<WorkModel> models = null;
-                if (bundle != null) models = bundle.getParcelableArrayList("models");
-                handlerWorkLog(object, models);
-                break;
-            case MAC_VAL://判断mac地址
-                String emcode = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
-                PreferenceUtils.putBoolean("MAC" + emcode, true);
-                break;
-            case HAVE_OUT_PLAN://判断是否还有外勤
-                if (!object.containsKey("success") || !object.getBoolean("success")) return;
-                if (object.containsKey("isOffline")) {
-                    int isOffline = Integer.valueOf(object.getString("isOffline"));
-                    //当判断到外勤计划为有值  1.外勤计划有  2.自动外勤
-                    PreferenceUtils.putBoolean(AppConfig.HAVE_OUT_PLAN, isOffline > 0);
-                }
-                break;
-            case LOAD_PLAN://外勤计划
-                JSONArray array = null;
-                if (object.get("data") instanceof JSONArray) {
-                    array = object.getJSONArray("data");
-                } else if (object.get("success") instanceof JSONArray) {
-                    array = object.getJSONArray("success");
-                }
-                handlerMission(array);
-                break;
-        }
-    }
-
-
-    /**
-     * 处理打卡签到
-     *
-     * @param object json对象
-     */
-    private void handlerWorkData(JSONObject object) throws Exception {
-        double longitude = 0, latitude = 0;
-        int distance = 0;
-        boolean comaddressset = object.getBooleanValue("comaddressset");
-        if (comaddressset) {
-            longitude = object.getDoubleValue("longitude");
-            latitude = object.getDoubleValue("latitude");
-            distance = object.getIntValue("distance");
-        }
-        try {
-            PreferenceUtils.putInt("distance", distance);
-            PreferenceUtils.putFloat("longitude", (float) longitude);
-            PreferenceUtils.putFloat("latitude", (float) latitude);
-        } catch (ClassCastException e) {
-            if (e != null)
-                log("handlerWorkData ClassCastException=" + e.getMessage());
-        } catch (Exception e) {
-            if (e != null)
-                log("handlerWorkData Exception=" + e.getMessage());
-        }
-
-
-        ArrayList<WorkModel> models = new ArrayList<>();
-        if (object.containsKey("wd_degree")) {//有排班
-            if (object.containsKey("Class1")) {
-                handlerByClass(models, object.getJSONObject("Class1"));
-            }
-            if (object.containsKey("Class2")) {
-                handlerByClass(models, object.getJSONObject("Class2"));
-            }
-            if (object.containsKey("Class3")) {
-                handlerByClass(models, object.getJSONObject("Class3"));
-            }
-        }
-        if (ListUtils.isEmpty(models)) {
-            return;
-        }
-        loadLog(models, System.currentTimeMillis());
-    }
-
-    /**
-     * 处理班次情况,简化代码  分开函数
-     *
-     * @param models
-     * @param object
-     */
-    private void handlerByClass(ArrayList<WorkModel> models, JSONObject object) {
-        String wd_onbeg = object.getString("wd_onbeg");
-        String wd_onduty = object.getString("wd_onduty");
-        String wd_offduty = object.getString("wd_offduty");
-        String wd_offend = object.getString("wd_offend");
-        if (StringUtils.isEmpty(wd_onbeg)
-                || StringUtils.isEmpty(wd_onduty)
-                || StringUtils.isEmpty(wd_offduty)
-                || StringUtils.isEmpty(wd_offend)) return;
-        WorkModel model = new WorkModel();
-        model.setWorkStart(wd_onbeg);
-        model.setWorkTime(wd_onduty);
-        String rangeTime = null;
-        try {
-            rangeTime = getStartAndEndTime(true, wd_onduty);
-            if (!StringUtils.isEmpty(rangeTime)) {
-                model.setWorkend(rangeTime);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        model.setOffTime(wd_offduty);
-        model.setOffend(wd_offend);
-        try {
-            rangeTime = getStartAndEndTime(false, wd_offduty);
-            if (!StringUtils.isEmpty(rangeTime)) {
-                model.setOffStart(rangeTime);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        models.add(model);
-    }
-
-    /**
-     * 处理打卡签到列表,建议在线程钟使用
-     *
-     * @param models 获取班次信息时候的数据
-     * @throws Exception
-     */
-    private void handlerWorkLog(JSONObject object, ArrayList<WorkModel> models) throws Exception {
-        JSONArray listdata = object.getJSONArray("listdata");
-        if (ListUtils.isEmpty(listdata)) {
-            //TODO 数据为空,容错处理
-            log("ListUtils.isEmpty(listdata) 数据为空,容错处理");
-            return;
-        }
-        String timeLog = null;
-        for (int i = 0; i < listdata.size(); i++) {
-            timeLog = getMinTime(listdata.getJSONObject(i).getString("cl_time"));
-            for (int j = 0; j < models.size(); j++) {
-                WorkModel e = models.get(j);
-                if (StringUtils.isEmpty(e.getWorkStart()) || StringUtils.isEmpty(e.getWorkTime()) ||
-                        StringUtils.isEmpty(e.getOffend()) || StringUtils.isEmpty(e.getOffTime()))
-                    continue;
-                if (e.getWorkStart().compareTo(timeLog) <= 0 && e.getOffend().compareTo(timeLog) >= 0) {
-                    //符合该班次
-                    if (e.getWorkend().compareTo(timeLog) >= 0) {
-                        if (StringUtils.isEmpty(e.getWorkSignin()) || e.getWorkSignin().compareTo(timeLog) >= 0) {
-                            models.get(j).setWorkSignin(timeLog);
-                        }
-                    }
-                    if (e.getOffStart().compareTo(timeLog) <= 0) {
-                        if (StringUtils.isEmpty(e.getOffSignin()) || e.getOffSignin().compareTo(timeLog) <= 0) {
-                            models.get(j).setOffSignin(timeLog);
-                        }
-                    }
-                    break;
-                }
-            }
-        }
-        //保存数据库
-        WorkModelDao.getInstance().createOrUpdata(models);
-    }
-
-    /**
-     * 解析处理外勤计划列表并保存到数据库
-     *
-     * @param array
-     */
-    private void handlerMission(JSONArray array) throws Exception {
-        if (ListUtils.isEmpty(array)) {
-            //TODO 外勤计划列表为空情况
-            return; //获取到拜访计划数据
-        }
-        JSONObject object = null;
-        MissionModel entity = null;
-        List<MissionModel> entities = new ArrayList<>();
-        for (int i = 0; i < array.size(); i++) {
-            object = array.getJSONObject(i);
-            entity = new MissionModel();
-            entity.setId(object.getInteger("MPD_ID"));
-            entity.setCompanyName(object.getString("MPD_COMPANY"));
-            entity.setCompanyAddr(object.getString("MPD_ADDRESS"));
-            double longitude = object.getDoubleValue("MD_LONGITUDE");
-            double latitude = object.getDoubleValue("MD_LATITUDE");
-            if (longitude > 0 && latitude > 0) {
-                entity.setLatLng(new LatLng(latitude, longitude));
-            }
-            if (object.containsKey("MPD_ARRIVEDATE")) {
-                entity.setVisitTime(object.getString("MPD_ARRIVEDATE"));
-            } else if (object.containsKey("TO_CHAR(MPD_ARRIVEDATE,'YYYY-MM-DDHH24:MI:SS')")) {
-                entity.setVisitTime(object.getString("TO_CHAR(MPD_ARRIVEDATE,'YYYY-MM-DDHH24:MI:SS')"));
-            }
-            try {
-                long mpd_actdate = object.getLongValue("MPD_ACTDATE");
-                long mpd_outdate = object.getLongValue("MPD_OUTDATE");
-                if (mpd_actdate != 0)
-                    entity.setRealTime(TimeUtils.f_long_2_str(mpd_actdate));
-                if (mpd_outdate != 0)
-                    entity.setRealLeave(TimeUtils.f_long_2_str(mpd_outdate));
-            } catch (Exception e) {
-            }
-            entity.setStatus(0);
-            entities.add(entity);
-        }
-        if (!ListUtils.isEmpty(entities))
-            MissionDao.getInstance().updataOrCreate(entities);
-
-    }
-
-
-    /**
-     * 获取截至时间
-     *
-     * @param isWork   是否上班
-     * @param workTime 时间 (上班时间||下班时间)
-     * @return 服务器没有给的时间
-     */
-    private String getStartAndEndTime(boolean isWork, String workTime) throws Exception {
-        long dayTime = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + workTime + ":00");//获取当前天的workTime
-        long time = isWork ? dayTime + 90 * 60 * 1000 : dayTime - 90 * 60 * 1000;
-        return TimeUtils.long2str(time, "HH:mm");
-    }
-
-
-    private String getMinTime(String time) {
-        if (StringUtils.isEmpty(time)) {
-            return "";
-        } else {
-            return TimeUtils.long2str(TimeUtils.f_str_2_long(time), "HH:mm");
-        }
-    }
-
-
-    public interface OnLoadListener {
-        /**
-         * 下拉正确时候
-         *
-         * @param saveOk 是否保存成功
-         * @param flag   标识位
-         */
-        void loadOk(boolean saveOk, int flag);
-
-        /**
-         * 处理错误情况
-         *
-         * @param flag    标识位
-         * @param message 错误原因
-         */
-        void loadError(int flag, String message);
-    }
-
-    private void log(String message) {
-        try {
-            if (!AppConfig.DEBUG || StringUtils.isEmpty(message)) return;
-            Log.i("gongpengming", message);
-        } catch (Exception e) {
-            if (e != null)
-                Log.i("gongpengming", "show Exception" + e.getMessage());
-        }
-    }
-}

+ 29 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/attendance/ReckonAutoUtil.java

@@ -54,7 +54,6 @@ public class ReckonAutoUtil {
                 if (minDistance <= 0 || minDistance > distance) {//2.如果第一个不存在,判断获取最近的位置
                     minDistance = distance;
                     minBean = e;
-                    minBean.setStatus(1);
                 }
             }
         }
@@ -65,7 +64,7 @@ public class ReckonAutoUtil {
     /**
      * 计算自动打卡
      */
-    public WorkModel reckonAutoWork() throws Exception{
+    public WorkModel reckonAutoWork() throws Exception {
         WorkModel model = getPlaceWork();
         if (model == null) return null;
         if (StringUtils.isEmpty(model.getWorkStart()) || StringUtils.isEmpty(model.getWorkTime()) ||
@@ -74,24 +73,47 @@ public class ReckonAutoUtil {
             return null;
         long workStart = getTimeByHHmm(model.getWorkStart());
         long workEnd = getTimeByHHmm(model.getWorkTime());
+
         long offStart = getTimeByHHmm(model.getOffTime());
         long offEnd = getTimeByHHmm(model.getOffend());
-        if ((workStart < System.currentTimeMillis() && workEnd > System.currentTimeMillis()) ||
-                (offStart < System.currentTimeMillis() && offEnd > System.currentTimeMillis()))
-            return model;
+        if (workStart < System.currentTimeMillis() && workEnd > System.currentTimeMillis()) {
+            int comDistance = PreferenceUtils.getInt(MyApplication.getInstance(), "distance", 0);//规定距离
+            if (comDistance == 0) {
+                //TODO  公司距离为空
+                return null;
+            }
+            //公司规定范围 大于当前位置范围
+            boolean is = comDistance > BaiduMapUtil.getInstence().getDistance() &&
+                    StringUtils.isEmpty(model.getWorkSignin());
+            if (is)
+                return model;
+        } else if (offStart < System.currentTimeMillis() && offEnd > System.currentTimeMillis()) {
+            int comDistance = PreferenceUtils.getInt(MyApplication.getInstance(), "distance", 0);//规定距离
+            if (comDistance == 0) {
+                //TODO  公司距离为空
+                return null;
+            }
+            //公司规定范围 大于当前位置范围
+            boolean is = comDistance > BaiduMapUtil.getInstence().getDistance() &&
+                    StringUtils.isEmpty(model.getOffSignin());
+            if (is)
+                return model;
+        }
         return null;
     }
 
     /**
      * 计算是否符合提醒
      *
-     * @param intervalTime
+     * @param isAlarm      是否开启提醒
+     * @param intervalTime 轮回时间
      * @return
      */
-    public int reckonAlarm(long intervalTime) {
+    public int reckonAlarm(boolean isAlarm, long intervalTime) {
         WorkModel model = getPlaceWork();
         if (model == null) return 0;
         if (isOutoffWork(model)) return 1;
+        if (!isAlarm) return 0;
         long time = getWorkAlarm(model);
         if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= intervalTime) {
             model.setWorkAlarm(true);

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/auto/AlarmService.java

@@ -251,7 +251,8 @@ public class AlarmService extends Service {
                         util.signinMission(bean);
                         break;
                     case STATUS_LEAVE_ALARM://离开办公室提醒
-                        getNotificationManage().sendNotification(MyApplication.getInstance(), R.string.outoff_work, SigninActivity.class);
+                        getNotificationManage().sendNotification(MyApplication.getInstance(),
+                                R.string.outoff_work, SigninActivity.class);
 //                        MissionPlanEntity bean1 = (MissionPlanEntity) map.get("data");
 //                        updateDB(bean1.getId(), 3);
 //                        getNotificationManage().sendNotification(MyApplication.getInstance(),

+ 1 - 5
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/auto/HttpHandler.java

@@ -25,11 +25,9 @@ import static android.os.Message.obtain;
 public class HttpHandler extends Handler {
 
     private static HttpHandler instance;
-    private String baseUrl = null;
     private JsonValidator validator = null;
 
     private HttpHandler() {
-        baseUrl = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_baseurl");
         validator = new JsonValidator();
     }
 
@@ -72,9 +70,7 @@ public class HttpHandler extends Handler {
     public void loadERPByNet(int what, String action, Map<String, Object> param, Bundle bundle, OnResultListener listener) {
         LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
         headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(MyApplication.getInstance(), "sessionId"));
-        if (StringUtils.isEmpty(baseUrl))
-            baseUrl = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_baseurl");
-        String url = baseUrl + action;
+        String url = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_baseurl") + action;
         if (bundle == null)
             bundle = new Bundle();
         if (listener != null)

+ 47 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/view/MyScrollview.java

@@ -0,0 +1,47 @@
+package com.xzjmyk.pm.activity.ui.erp.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.ViewConfiguration;
+import android.widget.ScrollView;
+
+/**
+ * 屏蔽 滑动事件
+ * Created by fc on 2015/7/16.
+ */
+public class MyScrollview extends ScrollView {
+    private int downY;
+    private int mTouchSlop;
+
+    public MyScrollview(Context context) {
+        super(context);
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+    }
+
+    public MyScrollview(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+    }
+
+    public MyScrollview(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent e) {
+        int action = e.getAction();
+        switch (action) {
+            case MotionEvent.ACTION_DOWN:
+                downY = (int) e.getRawY();
+                break;
+            case MotionEvent.ACTION_MOVE:
+                int moveY = (int) e.getRawY();
+                if (Math.abs(moveY - downY) > mTouchSlop) {
+                    return true;
+                }
+        }
+        return super.onInterceptTouchEvent(e);
+    }
+}

+ 0 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/SettingActivity.java

@@ -226,8 +226,6 @@ public class SettingActivity extends ActionBackActivity implements View.OnClickL
         VideoFileDao.getInstance().deleteAllVideoFile(
                 VideoFileDao.getInstance().getVideoFiles(
                         MyApplication.getInstance().mLoginUser.getUserId()));
-//        new ClearCacheAsyncTaska(filePath).execute(true);
-        new ClearCacheAsyncTaska(filePath).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,true);
         if (Build.VERSION.SDK_INT >= 11)
             new ClearCacheAsyncTaska(filePath).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,true);
         else

+ 13 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/BaiduMapUtil.java

@@ -85,6 +85,16 @@ public class BaiduMapUtil {
         return df.format(distance);
     }
 
+    public double distance(LatLng a, LatLng b) {
+        try {
+            DecimalFormat df = new DecimalFormat(".##");
+            double dis = Math.abs(DistanceUtil.getDistance(a, b));
+            return Double.valueOf(df.format(dis));
+        } catch (Exception e) {
+            return 0;
+        }
+    }
+
     //与当前位置的距离
     public String getDistance(LatLng a) {
         if (a == null) return "0";
@@ -267,8 +277,8 @@ public class BaiduMapUtil {
                 .from(stNode)
                 .to(enNode));
         Log.i("gongpengming", "进来了的");
-        Log.i("gongpengming", "from="+from);
-        Log.i("gongpengming", "to="+to);
+        Log.i("gongpengming", "from=" + from);
+        Log.i("gongpengming", "to=" + to);
     }
 
 
@@ -281,6 +291,7 @@ public class BaiduMapUtil {
                 .from(stNode)
                 .to(enNode));
     }
+
     //获取周围位置监听器
     private OnGetRoutePlanResultListener onGetRoutePlanResultListener = new OnGetRoutePlanResultListener() {
         @Override

+ 2 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/crouton/Crouton.java

@@ -40,6 +40,7 @@ import android.widget.TextView;
 
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 
 import static android.R.attr.id;
 
@@ -191,13 +192,10 @@ public final class Crouton {
     public static void showToast(Context ct, int id, int color) {
         if (ct instanceof Activity)
             makeText((Activity) ct, id, ct.getResources().getColor(color), 1000).show();
-
-
-
     }
 
     public static void showToast(Context ct, String message, int color) {
-        if (ct instanceof Activity)
+        if (ct instanceof Activity && !StringUtils.isEmpty(message))
             makeText((Activity) ct, message, ct.getResources().getColor(color), 1000).show();
     }
 

二進制
WeiChat/src/main/res/drawable-hdpi/icon_date_nor.png


二進制
WeiChat/src/main/res/drawable-xhdpi/add_address.png


二進制
WeiChat/src/main/res/drawable-xhdpi/icon_all_mission.png


二進制
WeiChat/src/main/res/drawable-xhdpi/icon_date_nor.png


二進制
WeiChat/src/main/res/drawable-xhdpi/icon_emind.png


二進制
WeiChat/src/main/res/drawable-xhdpi/icon_last_missiom.png


二進制
WeiChat/src/main/res/drawable-xxhdpi/add_address.png


二進制
WeiChat/src/main/res/drawable-xxhdpi/icon_all_mission.png


二進制
WeiChat/src/main/res/drawable-xxhdpi/icon_date_nor.png


二進制
WeiChat/src/main/res/drawable-xxhdpi/icon_emind.png


二進制
WeiChat/src/main/res/drawable-xxhdpi/icon_last_missiom.png


+ 0 - 1
WeiChat/src/main/res/layout/activity_location_search.xml

@@ -12,7 +12,6 @@
         android:id="@+id/search_rl"
         android:layout_width="match_parent"
         android:layout_height="48dp"
-        android:visibility="gone"
         android:background="@drawable/bg_bar"
         android:focusable="true"
         android:focusableInTouchMode="true"

+ 1 - 0
WeiChat/src/main/res/layout/activity_map_location.xml

@@ -6,6 +6,7 @@
     android:orientation="vertical"
     tools:context=".ui.erp.activity.oa.LocationMapActivity">
     <RelativeLayout
+        android:id="@id/search_rl"
         android:layout_width="match_parent"
         android:layout_height="48dp"
         android:background="@drawable/bg_bar"

+ 53 - 0
WeiChat/src/main/res/layout/activity_mission.xml

@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.xzjmyk.pm.activity.ui.erp.view.MyScrollview xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/activity_mission_plan"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="com.xzjmyk.pm.activity.ui.erp.activity.oa.MissionPlanActivity">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
+        android:orientation="vertical">
+
+
+
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/recycler"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+        <TextView
+            android:id="@+id/additem_tv"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/misson_item_height"
+            android:gravity="center"
+            android:text="@string/add_mission_plan"
+            android:textColor="@color/button_focus" />
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="2px"
+            android:background="@color/item_line" />
+
+        <Button
+            android:id="@+id/click_btn"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@+id/info"
+            android:layout_marginBottom="150dp"
+            android:layout_marginLeft="10dp"
+            android:layout_marginRight="10dp"
+            android:layout_marginTop="20dp"
+            android:background="@drawable/bg_bule_btn"
+            android:padding="10dp"
+            android:text="@string/updata"
+            android:textColor="@color/white"
+            android:textSize="@dimen/text_main" />
+    </LinearLayout>
+
+
+</com.xzjmyk.pm.activity.ui.erp.view.MyScrollview>

+ 1 - 1
WeiChat/src/main/res/layout/activity_work.xml

@@ -10,7 +10,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="@color/item_line"
-        android:drawableLeft="@drawable/new_addr"
+        android:drawableLeft="@drawable/icon_date_nor"
         android:drawablePadding="10dp"
         android:drawableRight="@drawable/oa_next"
         android:padding="5dp"

+ 57 - 75
WeiChat/src/main/res/layout/activity_workdaily_detail.xml

@@ -120,12 +120,10 @@
                     style="@style/form_relative_right_text1"
                     android:textColor="#575757"
                     android:text="计划啦"/>
-
-
                 </LinearLayout>
 
                 <LinearLayout
-                    android:id="@+id/work_daily_detail_experience_ll"
+                        android:id="@+id/work_daily_detail_experience_ll"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
                         android:orientation="vertical"
@@ -144,102 +142,86 @@
                         android:textColor="#575757"
                         />
 
-                <TextView
-                    android:id="@+id/work_daily_detail_experience_tv"
-                    style="@style/form_relative_right_text1"
-                    android:textColor="#575757"
-                    android:text="心得啦"
-                    />
-                        <View
-                            android:layout_width="match_parent"
-                            android:layout_height="@dimen/line"
-                            android:background="@color/item_line"
-                            android:layout_marginRight="5dp"
-                            android:visibility="gone"/>
+                    <TextView
+                        android:id="@+id/work_daily_detail_experience_tv"
+                        style="@style/form_relative_right_text1"
+                        android:textColor="#575757"
+                        android:text="心得啦"
+                        />
+
                  </LinearLayout>
                 </LinearLayout>
+
                 <LinearLayout
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:orientation="vertical"
-                    android:visibility="visible">
-                    <LinearLayout
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:orientation="vertical"
-                        android:background="#f6f5f5"
-                        android:visibility="gone">
-                <TextView
+                    android:id="@+id/work_daily_detail_donetask_ll"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:text="已完成任务"
-                    android:layout_marginLeft="10dp"
-                    android:layout_marginTop="5dp"
-                    android:textSize="18sp"
-                    android:textColor="#575757"
+                    android:orientation="vertical"
                     android:visibility="visible"
-                    />
-                <TextView
-                    android:id="@+id/work_daily_detail_no_task"
-                    style="@style/form_relative_right_text1"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="今天暂无分配工作任务"
                     android:layout_marginLeft="10dp"
-                    android:textColor="#575757"
-                    android:visibility="visible"
-                    />
+                    android:layout_marginRight="10dp">
+                    <View
+                        android:layout_width="match_parent"
+                        android:layout_height="@dimen/line"
+                        android:background="@color/item_line"
+                        android:layout_marginRight="5dp"/>
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="已完成任务"
+                        android:layout_marginTop="5dp"
+                        android:textSize="18sp"
+                        android:textColor="#575757"
+                        />
+
+                    <TextView
+                        android:id="@+id/work_daily_detail_donetask_tv"
+                        style="@style/form_relative_right_text1"
+                        android:textColor="#575757"
+                        android:text="工作任务"
+                        android:minHeight="10dp"
+                        />
 
+                </LinearLayout>
 
-                <com.xzjmyk.pm.activity.view.MyListView
-                    android:id="@+id/work_daily_detail_completedtask_lv"
+                <LinearLayout
+                    android:id="@+id/work_daily_detail_undotask_ll"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:background="#f6f5f5"
-                    android:visibility="visible">
-                </com.xzjmyk.pm.activity.view.MyListView>
-
-                    <TextView
+                    android:orientation="vertical"
+                    android:visibility="gone"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginRight="10dp"
+                    >
+                    <View
                         android:layout_width="match_parent"
+                        android:layout_height="@dimen/line"
+                        android:background="@color/item_line"
+                        android:layout_marginRight="5dp"/>
+                    <TextView
+                        android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:text="未完成任务"
-                        android:layout_marginLeft="10dp"
                         android:layout_marginTop="5dp"
                         android:textSize="18sp"
                         android:textColor="#575757"
-                        android:visibility="visible"
                         />
 
-                    <com.xzjmyk.pm.activity.view.MyListView
-                        android:id="@+id/work_daily_detail_uncompletedtask_lv"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:background="#f6f5f5"
-                        android:visibility="visible">
-                    </com.xzjmyk.pm.activity.view.MyListView>
-                        <View
-                            android:layout_width="match_parent"
-                            android:layout_height="5dp"
-                            android:background="#EBE9E9"
-                            android:layout_marginTop="5dp"
-                            android:visibility="visible"/>
-                        </LinearLayout>
+                    <TextView
+                        android:id="@+id/work_daily_detail_undotask_tv"
+                        style="@style/form_relative_right_text1"
+                        android:textColor="#575757"
+                        android:text="未完成任务"
+                        />
 
+                </LinearLayout>
                     <View
                         android:layout_width="match_parent"
                         android:layout_height="10dp"
                         android:background="@color/black_gray"
-                        android:layout_marginTop="5dp"
+                        android:layout_marginTop="1dp"
                         android:visibility="visible"/>
-                    <TextView
-                        android:id="@+id/work_daily_detail_back_to_add"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:textSize="16sp"
-                        android:text="没提交?快点我去提交"
-                        android:layout_marginLeft="20dp"
-                        android:layout_marginTop="5dp"
-                        android:visibility="gone"/>
+
 
                 <com.xzjmyk.pm.activity.view.MyListView
                     android:id="@+id/work_daily_detail_approval_flow_lv"
@@ -250,7 +232,7 @@
                     >
                 </com.xzjmyk.pm.activity.view.MyListView>
 
-                 </LinearLayout>
+
              </LinearLayout>
         </LinearLayout>
     </com.xzjmyk.pm.activity.ui.erp.view.CustomerScrollView>

+ 11 - 0
WeiChat/src/main/res/layout/item_activity_workdaily.xml

@@ -81,6 +81,17 @@
         android:textSize="14sp"
         android:textColor="#575757"
         />
+
+    <TextView
+        android:id="@+id/unsubmit_delete_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="删 除"
+        android:textColor="@color/titleBlue"
+        android:layout_gravity="right"
+        android:layout_marginRight="10dp"
+        android:visibility="visible"
+        android:layout_marginBottom="5dp"/>
 </LinearLayout>
     <View
         android:layout_width="match_parent"

+ 45 - 14
WeiChat/src/main/res/layout/item_aims_base.xml

@@ -8,7 +8,8 @@
         android:id="@+id/content"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:padding="@dimen/misson_item_pl">
+        android:padding="@dimen/misson_item_pl"
+        android:visibility="gone">
 
         <TextView
             android:id="@+id/long_tv"
@@ -49,6 +50,7 @@
             android:layout_alignBottom="@+id/visit_num_tv"
             android:layout_alignParentLeft="true"
             android:layout_alignParentStart="true"
+            android:drawableLeft="@drawable/icon_last_missiom"
             android:textColor="@color/text_hine"
             android:textSize="@dimen/text_hine" />
 
@@ -60,6 +62,7 @@
             android:layout_marginLeft="30dp"
             android:layout_marginTop="5dp"
             android:layout_toRightOf="@id/last_time_tv"
+            android:drawableLeft="@drawable/icon_all_mission"
             android:textColor="@color/text_hine"
             android:textSize="@dimen/text_hine" />
     </RelativeLayout>
@@ -68,22 +71,33 @@
         android:id="@+id/empty"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:background="@color/item_line"
         android:orientation="vertical">
 
-        <TextView
+        <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="50dp"
-            android:background="@color/item_line"
+            android:layout_height="wrap_content"
             android:gravity="center"
-            android:text="没有符合条件的结果"
-            android:textColor="@color/text_main" />
+            android:padding="10dp">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="40dp"
+                android:layout_gravity="center"
+                android:drawableLeft="@drawable/icon_emind"
+                android:gravity="center"
+                android:text="没有符合条件的结果" />
+        </LinearLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="20dp"
+            android:background="#ebe9e9" />
 
         <RelativeLayout
             android:id="@+id/add_rl"
             android:layout_width="match_parent"
-            android:layout_height="50dp"
-            android:layout_marginTop="20dp"
-            android:background="@color/item_color1"
+            android:layout_height="wrap_content"
             android:padding="10dp">
 
             <ImageView
@@ -91,19 +105,36 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_alignParentRight="true"
-                android:layout_centerVertical="true"
+                android:layout_marginTop="12dp"
                 android:src="@drawable/oa_next" />
 
+            <ImageView
+                android:id="@+id/home_tag"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:src="@drawable/add_address" />
+
             <TextView
                 android:id="@+id/add_tv"
                 android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:layout_alignParentLeft="true"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="5dp"
                 android:layout_toLeftOf="@id/add_tag"
+                android:layout_toRightOf="@id/home_tag"
                 android:gravity="center|left"
-                android:text="aaaaa"
-                android:textColor="@color/text_main" />
+                android:textColor="@color/text_main"
+                android:textSize="@dimen/text_main" />
 
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignLeft="@id/add_tv"
+                android:layout_below="@id/add_tv"
+                android:layout_marginTop="3dp"
+                android:layout_toLeftOf="@id/add_tag"
+                android:layout_toRightOf="@id/home_tag"
+                android:text="加入常用地址"
+                android:textSize="@dimen/text_main" />
 
         </RelativeLayout>
     </LinearLayout>

+ 3 - 7
WeiChat/src/main/res/layout/item_location_ls.xml

@@ -2,9 +2,8 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:padding="5dp"
     android:background="@drawable/selector_me_menu_item_bg"
-    >
+    android:padding="5dp">
 
     <TextView
         android:id="@+id/name_tv"
@@ -24,13 +23,10 @@
         android:textColor="@color/text_hine"
         android:textSize="@dimen/text_hine" />
 
-    <CheckBox
-        android:id="@+id/select_rb"
+    <TextView
+        android:id="@+id/distance_tv"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
-        android:button="@null"
-        android:drawableLeft="@drawable/oa_rb_button_bg"
-        android:focusable="false"
         android:padding="10dp" />
 </RelativeLayout>

+ 67 - 0
WeiChat/src/main/res/layout/item_mission.xml

@@ -33,6 +33,73 @@
             android:textSize="@dimen/text_main" />
     </RelativeLayout>
 
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="@dimen/misson_item_height"
+        android:paddingLeft="@dimen/misson_item_pl"
+        android:paddingRight="@dimen/misson_item_pr">
+
+        <TextView
+            android:id="@+id/time_tag"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:text="创建时间"
+            android:textColor="@color/text_main"
+            android:textSize="@dimen/text_main" />
+
+
+        <TextView
+            android:id="@+id/item_time_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_alignParentRight="true"
+            android:layout_toRightOf="@id/time_tag"
+            android:ellipsize="end"
+            android:gravity="center|right"
+            android:maxLines="2"
+            android:textColor="@color/text_hine"
+            android:textSize="@dimen/text_hine" />
+    </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="2px"
+        android:background="@color/item_line" />
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="@dimen/misson_item_height"
+        android:paddingLeft="@dimen/misson_item_pl"
+        android:paddingRight="@dimen/misson_item_pr">
+
+        <TextView
+            android:id="@+id/location_tag"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:text="创建地点"
+            android:textColor="@color/text_main"
+            android:textSize="@dimen/text_main" />
+
+
+        <TextView
+            android:id="@+id/item_location_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_alignParentRight="true"
+            android:layout_toRightOf="@id/location_tag"
+            android:ellipsize="end"
+            android:gravity="center|right"
+            android:maxLines="2"
+            android:textColor="@color/text_hine"
+            android:textSize="@dimen/text_hine" />
+    </RelativeLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="2px"
+        android:background="@color/item_line" />
 
     <RelativeLayout
         android:layout_width="wrap_content"

+ 1 - 1
WeiChat/src/main/res/values/colors.xml

@@ -22,7 +22,7 @@
     <color name="load_submit">#11CD6E</color><!--下拉成功、提交成功-->
     <color name="load_error">#A6ff4444</color><!--下拉失败、提交成功-->
     <color name="load_warning">#D0A233</color>
-    <color name="load_ok">#809b9797</color>
+    <color name="load_message">#A6454A4B</color>
 
     <color name="oa_outoffice">#3ac29e</color>
     <color name="meeting">#d79147</color>

+ 2 - 2
WeiChat/src/main/res/values/gpm_values.xml

@@ -117,7 +117,7 @@
     <dimen name="drawable_padding">5dp</dimen>
 
     <style name="text_color">  
-        <item name="android:textColor">@color/red</item>
-        <item name="android:textSize">25sp</item>
+        <item name="android:textColor">#268508</item>
+        <item name="android:textSize">@dimen/text_main</item>
     </style>
 </resources>