Bitliker 9 anni fa
parent
commit
4d03be490b
24 ha cambiato i file con 1042 aggiunte e 411 eliminazioni
  1. 7 3
      WeiChat/src/main/AndroidManifest.xml
  2. 44 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/MeetEntity.java
  3. 93 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/Signin.java
  4. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/db/SQLiteHelper.java
  5. 149 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/SigninDao.java
  6. 125 123
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/base/EasyFragment.java
  7. 53 21
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/AddMeetingActivity.java
  8. 95 116
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/AlarmaActivity.java
  9. 20 14
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MeetDetailsActivity.java
  10. 7 6
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MeetingActivity.java
  11. 124 31
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAActivity.java
  12. 77 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/VisitActivity.java
  13. 0 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/alarmreceiver.java
  14. 2 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/db/DBOpenHelper.java
  15. 156 46
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/SigninFragment.java
  16. 8 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/CommonUtil.java
  17. 25 11
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/Constants.java
  18. 5 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/BaiduMapUtil.java
  19. 4 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/JsonUtils.java
  20. 5 5
      WeiChat/src/main/res/layout/activity_oa.xml
  21. 0 1
      WeiChat/src/main/res/layout/activity_oa__alarma.xml
  22. 15 5
      WeiChat/src/main/res/layout/activity_visit.xml
  23. 27 15
      WeiChat/src/main/res/layout/fragment_signin.xml
  24. 0 3
      WeiChat/src/main/res/layout/oa_mylistview_item.xml

+ 7 - 3
WeiChat/src/main/AndroidManifest.xml

@@ -424,9 +424,13 @@
         <activity
             android:name=".ui.erp.activity.oa.OutofficeActivity"
             android:label="外勤签到" />
-        <activity android:name=".ui.erp.activity.oa.MeetDetailsActivity" />
-        <activity android:name=".ui.erp.activity.oa.OARegisterActivity" />
-        android:launchMode="singleTask" />
+        <activity
+            android:name=".ui.erp.activity.oa.MeetDetailsActivity"
+            android:label="会议详情" />
+        <activity
+            android:name=".ui.erp.activity.oa.OARegisterActivity"
+            android:label="签到详情" />
+
         <activity android:name=".ui.erp.activity.crm.CustomerAddActivity" />
         <activity android:name=".ui.erp.activity.crm.CustomerDetailActivity" />
         <activity android:name=".ui.erp.activity.crm.CustomerListActivity" />

+ 44 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/MeetEntity.java

@@ -1,9 +1,12 @@
 package com.xzjmyk.pm.activity.bean.oa;
 
+import android.os.Parcel;
+import android.os.Parcelable;
+
 /**
  * Created by gongpm on 2016/7/25.
  */
-public class MeetEntity  {
+public class MeetEntity  implements Parcelable {
     private String ma_code;//编号
     private String ma_recorder;//发起人
     private String ma_starttime;//发起时间
@@ -18,6 +21,29 @@ public class MeetEntity  {
     public MeetEntity() {
     }
 
+    protected MeetEntity(Parcel in) {
+        ma_code = in.readString();
+        ma_recorder = in.readString();
+        ma_starttime = in.readString();
+        ma_endtime = in.readString();
+        ma_theme = in.readString();
+        ma_mrname = in.readString();
+        ma_id = in.readInt();
+        ma_stage = in.readString();
+    }
+
+    public static final Creator<MeetEntity> CREATOR = new Creator<MeetEntity>() {
+        @Override
+        public MeetEntity createFromParcel(Parcel in) {
+            return new MeetEntity(in);
+        }
+
+        @Override
+        public MeetEntity[] newArray(int size) {
+            return new MeetEntity[size];
+        }
+    };
+
     public String getMa_stage() {
         return ma_stage;
     }
@@ -81,4 +107,21 @@ public class MeetEntity  {
     public void setMa_id(int ma_id) {
         this.ma_id = ma_id;
     }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int i) {
+        parcel.writeString(ma_code);
+        parcel.writeString(ma_recorder);
+        parcel.writeString(ma_starttime);
+        parcel.writeString(ma_endtime);
+        parcel.writeString(ma_theme);
+        parcel.writeString(ma_mrname);
+        parcel.writeInt(ma_id);
+        parcel.writeString(ma_stage);
+    }
 }

+ 93 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/Signin.java

@@ -0,0 +1,93 @@
+package com.xzjmyk.pm.activity.bean.oa;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Created by gongpm on 2016/7/28.
+ */
+public class Signin implements Parcelable {
+
+    private String code;//员工编号
+    private String date;//签到日期
+    private String utime;//签到时间
+    private int signinNum;//签到次数
+    private String dtime;//下班签到时间
+    public Signin() {
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+
+    public String getUtime() {
+        return utime;
+    }
+
+    public void setUtime(String utime) {
+        this.utime = utime;
+    }
+
+    public int getSigninNum() {
+        return signinNum;
+    }
+
+    public void setSigninNum(int signinNum) {
+        this.signinNum = signinNum;
+    }
+
+    public String getDtime() {
+        return dtime;
+    }
+
+    public void setDtime(String dtime) {
+        this.dtime = dtime;
+    }
+
+
+    protected Signin(Parcel in) {
+        code = in.readString();
+        date = in.readString();
+        utime = in.readString();
+        signinNum = in.readInt();
+        dtime = in.readString();
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(code);
+        dest.writeString(date);
+        dest.writeString(utime);
+        dest.writeInt(signinNum);
+        dest.writeString(dtime);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Creator<Signin> CREATOR = new Creator<Signin>() {
+        @Override
+        public Signin createFromParcel(Parcel in) {
+            return new Signin(in);
+        }
+
+        @Override
+        public Signin[] newArray(int size) {
+            return new Signin[size];
+        }
+    };
+}

+ 1 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/db/SQLiteHelper.java

@@ -54,6 +54,7 @@ public class SQLiteHelper extends OrmLiteSqliteOpenHelper {
 			TableUtils.createTableIfNotExists(connSource, AuthCode.class);
 			TableUtils.createTableIfNotExists(connSource, MyPhoto.class);
 			TableUtils.createTableIfNotExists(connSource, CircleMessage.class);
+			TableUtils.createTableIfNotExists(connSource, CircleMessage.class);
 		} catch (SQLException e) {
 			e.printStackTrace();
 		}

+ 149 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/SigninDao.java

@@ -0,0 +1,149 @@
+package com.xzjmyk.pm.activity.db.dao;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.SQLException;
+import android.database.sqlite.SQLiteDatabase;
+import android.util.Log;
+
+import com.xzjmyk.pm.activity.bean.oa.Signin;
+import com.xzjmyk.pm.activity.ui.erp.db.DBOpenHelper;
+
+/**
+ * 签到时间表DAO
+ * Created by gongpm on 2016/7/28.
+ */
+public class SigninDao {
+    private static SigninDao instance = null;
+    private DBOpenHelper helper;
+    private String titleName = "Signin";
+
+    public static final SigninDao getInstance(Context context) {
+        if (instance == null) {
+            synchronized (UserDao.class) {
+                if (instance == null) {
+                    instance = new SigninDao(context);
+                }
+            }
+        }
+        return instance;
+    }
+
+    private SigninDao(Context context) {
+        helper = new DBOpenHelper(context);
+    }
+
+    private long insert(Signin bean) {
+        long k = -1;
+        SQLiteDatabase db = helper.getWritableDatabase();
+        ContentValues values = new ContentValues();
+        values.put("code", bean.getCode());
+        values.put("date", bean.getDate());
+        values.put("utime", bean.getUtime());
+        values.put("signinNum", 1);
+        values.put("dtime", bean.getDtime());
+        try {
+            k = db.insert(titleName, null, values);
+        } catch (SQLException e) {
+            Log.i("gongpengming", e.getMessage());
+            e.printStackTrace();
+        } finally {
+            values.clear();
+            db.close();
+        }
+        Log.i("gongpengming", k + "k=");
+        return k;
+    }
+
+    /**
+     * 更新为打卡状态
+     *
+     * @param bean 当进入这个表示
+     * @return 返回更新档行数
+     */
+    public long updata(Signin bean) {
+        long k;
+        //判断当天是否有数据
+        if (getDateStatus(bean.getCode(), bean.getDate())>0) {
+            Log.i("gongpengming", "如果上午已经打卡过了");
+            //如果上午已经打卡过了、就更新数据
+            k = updata(bean.getCode(), bean.getDate(), bean.getDtime());
+        } else {
+            Log.i("gongpengming", "如果没有打卡过");
+            //如果没有打卡过、就插入数据
+            k = insert(bean);
+        }
+        return k;
+    }
+
+    private long updata(String code, String date, String dtime) {
+        long k = -1;
+        SQLiteDatabase db = helper.getWritableDatabase();
+        ContentValues values = new ContentValues();
+        values.put("dtime", dtime);
+        values.put("signinNum", 2);
+        try {
+            String where = "date=? and code=?";
+            String[] args = {date, code};
+            k = db.update(titleName, values, where, args);
+        } catch (SQLException e) {
+            Log.i("gongpengming", e.getMessage());
+            e.printStackTrace();
+        } finally {
+            values.clear();
+            db.close();
+        }
+        return k;
+    }
+
+    public int getDateStatus(String code, String date) {
+        int k = 0;
+        SQLiteDatabase db = helper.getReadableDatabase();
+        String[] columns = {"code", "date", "utime", "signinNum", "dtime"};
+        Cursor values = null;
+        String select = "code=? and date=?";
+        String[] selectArgs = {code, date};
+        try {
+            values = db.query(titleName, columns, select, selectArgs, null, null, null);
+            if (values.moveToNext()) {
+                k = values.getInt(3);
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } finally {
+            if (values != null)
+                values.close();
+            db.close();
+        }
+        return k;
+    }
+
+    public Signin query(String code, String date) {
+        Signin bean = null;
+        SQLiteDatabase db = helper.getReadableDatabase();
+        Cursor values = null;
+        String select = "code=? and date=?";
+        String[] columns = {"code", "date", "utime", "signinNum", "dtime"};
+        String[] selectArgs = {code, date};
+        try {
+            values = db.query(titleName, columns, select, selectArgs, null, null, null);
+            while (values.moveToNext()) {
+                bean = new Signin();
+                bean.setCode(values.getString(0));
+                bean.setDate(values.getString(1));
+                bean.setUtime(values.getString(2));
+                bean.setSigninNum(values.getInt(3));
+                bean.setDtime(values.getString(4));
+            }
+        } catch (SQLException e) {
+            Log.i("gongpengming", e.getMessage());
+            e.printStackTrace();
+        } finally {
+            if (values != null)
+                values.close();
+            db.close();
+        }
+        return bean;
+    }
+}

+ 125 - 123
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/base/EasyFragment.java

@@ -11,133 +11,135 @@ import android.view.ViewGroup;
 import com.lidroid.xutils.ViewUtils;
 
 /**
- * 
  * @author Dean Tao
  * @version 1.0
  */
 public abstract class EasyFragment extends Fragment {
 
-	private View mRootView;
-
-	/**
-	 * 是否缓存视图
-	 * 
-	 * @return
-	 */
-	protected boolean cacheView() {
-		return true;
-	}
-
-	/**
-	 * 指定该Fragment的Layout id
-	 * 
-	 * @return
-	 */
-	protected abstract int inflateLayoutId();
-
-	/**
-	 * 代替onCreateView的回调
-	 * 
-	 * @param savedInstanceState
-	 * @param createView
-	 *            是否重新创建了视图,如果是,那么你需要重新findView来初始化子视图的引用等。
-	 */
-	protected abstract void onCreateView(Bundle savedInstanceState, boolean createView);
-
-	@Override
-	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-		Log.d("roamer", TAG() + " onCreateView");
-		boolean createView = true;
-		if (cacheView() && mRootView != null) {
-			ViewGroup parent = (ViewGroup) mRootView.getParent();
-			if (parent != null) {
-				parent.removeView(mRootView);
-			}
-			createView = false;
-		} else {
-			mRootView = inflater.inflate(inflateLayoutId(), container, false);
-			ViewUtils.inject(this,mRootView);
-		}
-		onCreateView(savedInstanceState, createView);
-		return mRootView;
-	}
-
-	public View findViewById(int id) {
-		if (mRootView != null) {
-			return mRootView.findViewById(id);
-		}
-		return null;
-	}
-
-	public View findViewWithTag(Object tag) {
-		if (mRootView != null) {
-			return mRootView.findViewWithTag(tag);
-		}
-		return null;
-	}
-
-	public String TAG() {
-		return this.getClass().getSimpleName();
-	}
-
-	@Override
-	public void onAttach(Activity activity) {
-		super.onAttach(activity);
-		Log.d("roamer", TAG() + " onAttach");
-	}
-
-	@Override
-	public void onCreate(Bundle savedInstanceState) {
-		super.onCreate(savedInstanceState);
-		Log.d("roamer", TAG() + " onCreate");
-	}
-
-	@Override
-	public void onActivityCreated(Bundle savedInstanceState) {
-		super.onActivityCreated(savedInstanceState);
-		Log.d("roamer", TAG() + " onActivityCreated");
-	}
-
-	@Override
-	public void onStart() {
-		super.onStart();
-		Log.d("roamer", TAG() + " onStart");
-	}
-
-	@Override
-	public void onResume() {
-		super.onResume();
-		Log.d("roamer", TAG() + " onResume");
-	}
-
-	@Override
-	public void onPause() {
-		super.onPause();
-		Log.d("roamer", TAG() + " onPause");
-	}
-
-	@Override
-	public void onStop() {
-		super.onStop();
-		Log.d("roamer", TAG() + " onStop");
-	}
-
-	@Override
-	public void onDestroyView() {
-		super.onDestroyView();
-		Log.d("roamer", TAG() + " onDestroyView");
-	}
-
-	@Override
-	public void onDestroy() {
-		super.onDestroy();
-		Log.d("roamer", TAG() + " onDestroy");
-	}
-
-	@Override
-	public void onDetach() {
-		super.onDetach();
-		Log.d("roamer", TAG() + " onDetach");
-	}
+    private View mRootView;
+
+    /**
+     * 是否缓存视图
+     *
+     * @return
+     */
+    protected boolean cacheView() {
+        return true;
+    }
+
+    /**
+     * 指定该Fragment的Layout id
+     *
+     * @return
+     */
+    protected abstract int inflateLayoutId();
+
+    /**
+     * 代替onCreateView的回调
+     *
+     * @param savedInstanceState
+     * @param createView         是否重新创建了视图,如果是,那么你需要重新findView来初始化子视图的引用等。
+     */
+    protected abstract void onCreateView(Bundle savedInstanceState, boolean createView);
+
+    public View getmRootView() {
+        return mRootView;
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        Log.d("roamer", TAG() + " onCreateView");
+        boolean createView = true;
+        if (cacheView() && mRootView != null) {
+            ViewGroup parent = (ViewGroup) mRootView.getParent();
+            if (parent != null) {
+                parent.removeView(mRootView);
+            }
+            createView = false;
+        } else {
+            mRootView = inflater.inflate(inflateLayoutId(), container, false);
+            ViewUtils.inject(this, mRootView);
+        }
+        onCreateView(savedInstanceState, createView);
+        return mRootView;
+    }
+
+    public View findViewById(int id) {
+        if (mRootView != null) {
+            return mRootView.findViewById(id);
+        }
+        return null;
+    }
+
+    public View findViewWithTag(Object tag) {
+        if (mRootView != null) {
+            return mRootView.findViewWithTag(tag);
+        }
+        return null;
+    }
+
+    public String TAG() {
+        return this.getClass().getSimpleName();
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        Log.d("roamer", TAG() + " onAttach");
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Log.d("roamer", TAG() + " onCreate");
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+        Log.d("roamer", TAG() + " onActivityCreated");
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+        Log.d("roamer", TAG() + " onStart");
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        Log.d("roamer", TAG() + " onResume");
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        Log.d("roamer", TAG() + " onPause");
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+        Log.d("roamer", TAG() + " onStop");
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        Log.d("roamer", TAG() + " onDestroyView");
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        Log.d("roamer", TAG() + " onDestroy");
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        Log.d("roamer", TAG() + " onDetach");
+    }
 
 }

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

@@ -84,11 +84,14 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
     private String baseUrl;
     private int request = 0x13;
     public static int resultCode = 0x14;
+    private final int codeWhat = 0x15;
+
     ArrayList<MeetUserEntity> entities = null;//成员
     private Handler handler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
             String message = (String) msg.getData().get("result");
+            Log.i("gongpengming", message);
             switch (msg.what) {
                 case whatSignin:
                     //TODO 创建会议成功  开始创建群组
@@ -106,6 +109,18 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
                 case whatAdd:
                     Log.i("gongpengming", "msg==whatAdd");
                     break;
+                case codeWhat:
+                    try {
+                        JSONObject json = new JSONObject(message);
+                        if (json.isNull("success") || json.getBoolean("success") || json.isNull("code")) {
+                            ToastUtil.showToast(ct, "业务繁忙,请稍后重试");
+                        } else {
+                            signinAble(json.getString("code"));
+                        }
+                    } catch (JSONException e) {
+                        e.printStackTrace();
+                    }
+                    break;
                 case Constants.HTTP_SUCCESS_INIT:
                     break;
                 case Constants.APP_SOCKETIMEOUTEXCEPTION:
@@ -216,7 +231,7 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
                 showDialog(false);
                 break;
             case R.id.bt_save:
-                signinAble();
+                getCodeByNet();
                 progressDialog.show();
                 break;
             case R.id.users_rl://选择参会人员
@@ -280,7 +295,7 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
     };
 
     //判断是否可以进行创建
-    private void signinAble() {
+    private void signinAble(String code) {
         if (StringUtils.isEmpty(name_et.getText().toString())) {
             ToastUtil.showToast(this, "会议名为空或格式不正确");
             return;
@@ -324,11 +339,12 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
                 builderId.append(";employee#" + entities.get(i).getImId());
             }
         }
-        Log.i("gongpengming", builderId.toString());
-        doSignin(builder.toString(), builderId.toString());
+        doSignin(builder.toString(), builderId.toString(), code);
         addRiCheng();
+
     }
 
+
     //TODO 待修改方案
     private void showDialog(final boolean isStart) {
         final AlertDialog dialog = new AlertDialog.Builder(this).create();
@@ -363,15 +379,31 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
         dialog.getWindow().setGravity(Gravity.CENTER);
     }
 
-    private void doSignin(String gruop, String ids) {
-        //获取网络数据
+
+    private void getCodeByNet() {
+        if (baseUrl == null) {
+            baseUrl = CommonUtil.getSharedPreferences(this, "erp_baseurl");
+        }
+        String url = baseUrl + "common/getCodeString.action";
+        final Map<String, Object> param = new HashMap<>();
+        String caller = "Meetingroomapply";
+        param.put("caller", caller);
+        param.put("type", 2);
+        param.put("sessionId", CommonUtil.getSharedPreferences(ct, "sessionId"));
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, param, handler, headers, codeWhat, null, null, "post");
+    }
+
+    //提交表单
+    private void doSignin(String gruop, String ids, String code) {
         if (baseUrl == null) {
             baseUrl = CommonUtil.getSharedPreferences(this, "erp_baseurl");
         }
         String url = baseUrl + "oa/meeting/saveMeetingroomapply.action";
         final Map<String, Object> param = new HashMap<>();
         MeetBean bean = new MeetBean();
-        bean.setMa_mrcode("2015120001");//TODO ??????这个参数是什么
+        bean.setMa_mrcode(code);//编号
         bean.setMa_mrname(name_et.getText().toString());
         bean.setMa_theme(name_et.getText().toString());
         bean.setMa_status("在录入");
@@ -395,27 +427,27 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
         ViewUtil.httpSendRequest(ct, url, param, handler, headers, whatSignin, null, null, "post");
     }
 
+    //为与会人员添加日程
     private void addRiCheng() {
-        //获取网络数据
         if (baseUrl == null) {
             baseUrl = CommonUtil.getSharedPreferences(this, "erp_baseurl");
         }
         String url = baseUrl + "common/saveCommon.action";
         final Map<String, Object> param = new HashMap<>();
         String formStore = "{" +
-                "\"ag_arrange\":" + "陈萍" +","+
-                "\"ag_atid\":" + "4633" +","+
-                "\"ag_type\":" + "重要" +","+
-                "\"ag_start\":" + "2016-07-20 09:16:04" +","+
-                "\"ag_end\":" + "2016-07-20 09:16:06" +","+
-                "\"ag_issecrecy\":" + "陈萍" +","+
-                "\"ag_title\":" + "测试" +","+
-                "\"ag_executor\":" + "陈萍" +","+
-                "\"ag_content\":" + "测试123" +","+
-                "\"ag_arrange_id\":" + "45" +","+
-                "\"ag_executor_id\":" + "1008885" +","+
-                "\"AG_PREDICT\":" + "" +","+
-                "\"AG_ISMESSAGE\":" + "" +","+
+                "\"ag_arrange\":" + "陈萍" + "," +
+                "\"ag_atid\":" + "4633" + "," +
+                "\"ag_type\":" + "重要" + "," +
+                "\"ag_start\":" + "2016-07-20 09:16:04" + "," +
+                "\"ag_end\":" + "2016-07-20 09:16:06" + "," +
+                "\"ag_issecrecy\":" + "陈萍" + "," +
+                "\"ag_title\":" + "测试" + "," +
+                "\"ag_executor\":" + "陈萍" + "," +
+                "\"ag_content\":" + "测试123" + "," +
+                "\"ag_arrange_id\":" + "45" + "," +
+                "\"ag_executor_id\":" + "1008885" + "," +
+                "\"AG_PREDICT\":" + "" + "," +
+                "\"AG_ISMESSAGE\":" + "" + "," +
                 "\"AG_ISWEEK\":" + "" +
                 "}";
         String caller = "Agenda";

+ 95 - 116
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/AlarmaActivity.java

@@ -16,7 +16,7 @@ import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.view.SwitchView;
-import com.xzjmyk.pm.activity.util.CalendarUtils;
+import com.xzjmyk.pm.activity.util.TimeUtils;
 
 import java.util.Calendar;
 
@@ -28,13 +28,20 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
     private TextView tv_alar;//上班时间
     @ViewInject(R.id.tv_ualar)
     private TextView tv_ualar;//下班时间
-    private int hh, mm;
-    private int uhh, umm;
+
+    private boolean isClick;//判断是否为提醒
     private AlarmaActivity ct;
-    public static String KEY_ALAR_ACTION = "KEY_ALAR_ACTION";
-    public static String KEY_UALAR_ACTION = "KEY_UALAR_ACTION";
+    private String uDateTime;
+    private String dDateTime;
+
+    private static String ALARMA_CLICK = "ALARMA_CLICK";//判断是否选中
+    public static String KEY_ALAR_ACTION = "KEY_ALAR_ACTION";//发送上班
+    public static String KEY_UALAR_ACTION = "KEY_UALAR_ACTION";//发送下班提醒
+
+    public static String KEY_ALAR_TIME = "KEY_ALAR_TIME";
+    public static String KEY_UALAR_TIME = "KEY_UALAR_TIME";
+
 
-    public static String KEY_ALAR_HH = "KEY_ALAR_HH";
     public static String KEY_ALAR_MM = "KEY_ALAR_MM";
     public static String KEY_UALAR_HH = "KEY_UALAR_HH";
     public static String KEY_UALAR_MM = "KEY_UALAR_MM";
@@ -46,41 +53,45 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
         setContentView(R.layout.activity_oa__alarma);
         ViewUtils.inject(this);
         ct = this;
-        init();
         initView();
     }
 
-    private void init() {
-        hh = CommonUtil.getSharedPreferencesInt(ct, KEY_ALAR_HH);
-        mm = CommonUtil.getSharedPreferencesInt(ct, KEY_ALAR_MM);
-        uhh = CommonUtil.getSharedPreferencesInt(ct, KEY_UALAR_HH);
-        umm = CommonUtil.getSharedPreferencesInt(ct, KEY_UALAR_MM);
-        if (hh == -1) hh = 8;
-        if (mm == -1) mm = 30;
-        if (uhh == -1) uhh = 18;
-        if (umm == -1) hh = 0;
-    }
-
     private void initView() {
         //初始化界面显示时间
-        setTextViewTime(hh, mm, tv_alar);
-        setTextViewTime(uhh, umm, tv_ualar);
         findViewById(R.id.image_alar).setOnClickListener(this);
         findViewById(R.id.image_ualar).setOnClickListener(this);
+        isClick = CommonUtil.getSharedPreferencesBoolean(ct, ALARMA_CLICK, false);
+        isalarma_sw.setChecked(isClick);
+        uDateTime = CommonUtil.getSharedPreferences(ct, KEY_ALAR_TIME);
+        dDateTime = CommonUtil.getSharedPreferences(ct, KEY_UALAR_TIME);
+        if (uDateTime == null) {
+            uDateTime = getTimeFormat(8, 30);
+        }
+        if (dDateTime == null) {
+            dDateTime = getTimeFormat(18, 0);
+        }
+        int[] u = getHourAndM(uDateTime);
+        int[] d = getHourAndM(dDateTime);
+        tv_alar.setText(u[0] + ":" + u[1]);
+        tv_ualar.setText(d[0] + ":" + d[1]);
+        if (isClick) {
+            startThread(isClick);
+        }
         isalarma_sw.setOnCheckedChangeListener(new SwitchView.OnCheckedChangeListener() {
             @Override
             public void onCheckedChanged(View view, boolean isChecked) {
+                CommonUtil.putSharedPreferencesBoolean(ct, ALARMA_CLICK, isChecked);
                 startThread(isChecked);
             }
         });
     }
 
-
     private void startThread(final boolean isChecked) {
         new Thread(new Runnable() {
             @Override
             public void run() {
                 if (isChecked) {
+                    unArmmanager();
                     initArmmanager();
                 } else {
                     unArmmanager();
@@ -92,47 +103,36 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
     //初始化提醒
     private void initArmmanager() {
         //先判断两个(上下班)的提醒那个距离当前时间最近
-        int year = 0, monthOfYear = 0, dayOfMonth = 0, hourOfDay = 0, minute = 0;
-        boolean isAlar = true;
-        //判断上班提醒时间设置是否超过了当前时间
-        if (isOverToday(true) && isOverToday(false)) {//当前时间都超过了设置的上班提醒时间和下班提醒时间
-            if (CalendarUtils.getCurrentDate() == CalendarUtils.getCurrentMaxNumOfMonth()) {//当当前日期等于这个月最大日期时候
-                dayOfMonth = 1;
-                if (CalendarUtils.getCurrentMonth() == 12) {//当 这个月为12月份 当当天又是最后一天时候
-                    monthOfYear = 1;
-                    year = CalendarUtils.getCurrentYear() + 1;
-                } else {
-                    monthOfYear = CalendarUtils.getCurrentMonth() + 1;
-                    year = CalendarUtils.getCurrentYear();
-                }
-            } else {
-                year = CalendarUtils.getCurrentYear();
-                monthOfYear = CalendarUtils.getCurrentMonth();
-                dayOfMonth = CalendarUtils.getCurrentDate() + 1;
-            }
-            hourOfDay = uhh;
-            minute = umm;
-            isAlar = true;
-        } else if (!(isOverToday(true))) {//上班提醒时间没超过当前时间(下班也肯定不会超过)==都没超过
-            year = CalendarUtils.getCurrentYear();
-            monthOfYear = CalendarUtils.getCurrentMonth();
-            dayOfMonth = CalendarUtils.getCurrentDate();
-            hourOfDay = hh;
-            minute = mm;
+        //将上下班时间设置为今天时间
+        Log.i("gongpengming", "uDateTime=" + uDateTime);
+        Log.i("gongpengming", "dDateTime=" + dDateTime);
+        int[] u = getHourAndM(uDateTime);
+        int[] d = getHourAndM(dDateTime);
+        uDateTime = getTimeFormat(u[0], u[1]);
+        dDateTime = getTimeFormat(d[0], d[1]);
+        Log.i("gongpengming", "uDateTime=" + uDateTime);
+        Log.i("gongpengming", "dDateTime=" + dDateTime);
+        //比较两个时间大小
+        long uLong = TimeUtils.f_str_2_long(uDateTime);
+        long dLong = TimeUtils.f_str_2_long(dDateTime);
+        long newLong = System.currentTimeMillis();
+        long dayLong = 1000 * 60 * 60 * 24;//一天的毫秒量
+        Calendar c = Calendar.getInstance();
+        boolean isAlar = false;
+        if (uLong > newLong) {//还没到上班打卡提醒时间
             isAlar = true;
-        } else if (isOverToday(true) && !isOverToday(false)) {//上班时间超过了  但是下班时间没有超过
-            year = CalendarUtils.getCurrentYear();
-            monthOfYear = CalendarUtils.getCurrentMonth();
-            dayOfMonth = CalendarUtils.getCurrentDate();
-            hourOfDay = uhh;
-            minute = umm;
+            c.setTimeInMillis(uLong);
+        } else if (dLong > newLong) {//过了上班提醒时间,但是没过下班提醒时间
+            isAlar = false;
+            c.setTimeInMillis(dLong);
+        } else if (dLong < newLong) {//今天的提醒时间已经过了
             isAlar = false;
+            c.setTimeInMillis(uLong + dayLong);
         }
-        Log.i("gongpengming", "minute=" + minute + "@@@hourOfDay=" + hourOfDay);
-        setArmmanager(year, monthOfYear, dayOfMonth, hourOfDay, minute, isAlar);
+        setArmmanager(c, isAlar);
     }
 
-    private void setArmmanager(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minute, boolean isAlar) {
+    private void setArmmanager(Calendar calendar, boolean isAlar) {
         //操作:发送一个广播,广播接收后Toast提示定时操作完成
         Intent intent = new Intent(AlarmaActivity.this, AlarmReceiver.class);
         String actionArg;
@@ -143,16 +143,9 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
         intent.setAction(actionArg);
         CommonUtil.setSharedPreferences(this, "ALARMA_ACTION", actionArg);
         AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
-        //设定一个五秒后的时间
         Calendar c = Calendar.getInstance();
-        c.set(Calendar.YEAR, year);
-        c.set(Calendar.MONTH, monthOfYear - 1);
-        c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
-        c.set(Calendar.HOUR_OF_DAY, hourOfDay);
-        c.set(Calendar.MINUTE, minute);
-        c.set(Calendar.SECOND, 0);
-        c.set(Calendar.MILLISECOND, 0);
-        alarm.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), getPendingIntent(intent));
+        c.setTimeInMillis(System.currentTimeMillis());
+        alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), getPendingIntent(intent));
     }
 
     private PendingIntent getPendingIntent(Intent intent) {
@@ -168,68 +161,54 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
         alarm.cancel(pi);
     }
 
-    //获取当前界面上时间
-    public void getHandM(boolean isAlar) {
-        if (isAlar) {
-            String[] alarBuffers = tv_alar.getText().toString().trim().split(":");
-            hh = Integer.parseInt(alarBuffers[0].trim());
-            mm = Integer.parseInt(alarBuffers[1].trim());
-        } else {
-            String[] ualarBuffers = tv_ualar.getText().toString().trim().split(":");
-            hh = Integer.parseInt(ualarBuffers[0].trim());
-            mm = Integer.parseInt(ualarBuffers[1].trim());
-        }
-    }
-
-    public boolean isOverToday(boolean isAlar) {
-        Calendar mCalendar = Calendar.getInstance();
-        mCalendar.setTimeInMillis(System.currentTimeMillis());
-        int mHour = mCalendar.get(Calendar.HOUR);
-        int mMinuts = mCalendar.get(Calendar.MINUTE);
-        if (isAlar) {
-            if (mHour < hh) {//小时大于
-                return false;
-            } else if (mHour == hh) {
-                if (mMinuts < mm) return false;
-                else return true;
-            } else return true;
-
-        } else {
-            if (mHour < uhh) {//小时大于
-                return false;
-            } else if (mHour == uhh) {
-                if (mMinuts < umm) return false;
-                else return true;
-            } else return true;
-        }
+    private int[] getHourAndM(String temp) {
+        int[] time = new int[2];
+        Calendar c = Calendar.getInstance();
+        c.setTimeInMillis(TimeUtils.f_str_2_long(temp));
+        time[0] = c.get(Calendar.HOUR_OF_DAY);
+        time[1] = c.get(Calendar.MINUTE);
+        Log.i("gongpengming", "time[0]=" + time[0] + "@@ time[1]=" + time[1]);
+        return time;
     }
 
-    private void setTextViewTime(int h, int m, TextView tv) {
-        Log.i("gongpengming", "h=" + h + "@@@m=" + m);
-        tv.setText((h < 10 ? "0" : "") + h + ":" + (m < 10 ? "0" : "") + m);
+    private String getTimeFormat(int hh, int mm) {
+        String h = (hh < 10 ? "0" : "") + hh;
+        String m = (mm < 10 ? "0" : "") + mm;
+        String temp = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + h + ":" + m + ":" + "00";
+        Log.i("gongpengming", temp);
+        return temp;
     }
 
-    //弹出时间选择框
+    /**
+     * 显示时间选择器
+     *
+     * @param tv     修改显示的Textview
+     * @param isAlar 是否是上班提醒
+     */
     private void showSelectDalog(final TextView tv, final boolean isAlar) {
+        Calendar calendar = Calendar.getInstance();
+        int hour = calendar.get(Calendar.HOUR_OF_DAY);
+        int minute = calendar.get(Calendar.MINUTE);
         TimePickerDialog dialog = new TimePickerDialog(AlarmaActivity.this, new TimePickerDialog.OnTimeSetListener() {
             @Override
             public void onTimeSet(TimePicker timePicker, int hh, int mm) {
-                setTextViewTime(hh, mm, tv);
+                String temp;
                 if (isAlar) {
-                    ct.hh = hh;
-                    ct.mm = mm;
-                    boolean a = CommonUtil.putSharedPreferencesInt(ct, KEY_ALAR_HH, hh);
-                    boolean b = CommonUtil.putSharedPreferencesInt(ct, KEY_ALAR_MM, mm);
-                    Log.i("gongpengming", "isAlara=" + a + "@@b=" + b + "@@hh=" + hh + "@@mm=" + mm);
+                    //上班提醒
+                    uDateTime = getTimeFormat(hh, mm);
+                    CommonUtil.setSharedPreferences(ct, KEY_ALAR_TIME, uDateTime);//保存上班签到的
+                    temp = uDateTime;
                 } else {
-                    ct.uhh = hh;
-                    ct.umm = mm;
-                    boolean a = CommonUtil.putSharedPreferencesInt(ct, KEY_UALAR_HH, uhh);
-                    boolean b = CommonUtil.putSharedPreferencesInt(ct, KEY_UALAR_MM, umm);
-                    Log.i("gongpengming", "uisAlara=" + a + "@@b=" + b + "@@hh=" + hh + "@@mm=" + mm);
+                    dDateTime = getTimeFormat(hh, mm);
+                    CommonUtil.setSharedPreferences(ct, KEY_UALAR_TIME, dDateTime);//保存下班签到的时间
+                    temp = dDateTime;
                 }
+                int[] u = getHourAndM(temp);
+                tv.setText((u[0] < 10 ? "0" : "") + u[0] + ":" + (u[1] < 10 ? "0" : "") + u[1]);
+                startThread(CommonUtil.getSharedPreferencesBoolean(ct, ALARMA_CLICK));
             }
-        }, 8, 00, true);
+
+        }, hour, minute, true);
         dialog.show();
     }
 

+ 20 - 14
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MeetDetailsActivity.java

@@ -11,6 +11,7 @@ import android.widget.TextView;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.bean.oa.MeetEntity;
 import com.xzjmyk.pm.activity.bean.oa.MeetingDocBean;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
@@ -35,6 +36,10 @@ public class MeetDetailsActivity extends BaseActivity implements View.OnClickLis
     private TextView user_tv;
     @ViewInject(R.id.oa_meeting_start)
     private TextView oa_meeting_start;
+    @ViewInject(R.id.oa_meeting_end_date)
+    private TextView oa_meeting_end_date;
+    @ViewInject(R.id.oa_meeting_end)
+    private TextView oa_meeting_end;
     @ViewInject(R.id.oa_meeting_start_date)
     private TextView oa_meeting_start_date;
     @ViewInject(R.id.status_tv)
@@ -66,6 +71,7 @@ public class MeetDetailsActivity extends BaseActivity implements View.OnClickLis
                     break;
                 case ENDMEET:
                     ToastUtil.showToast(ct, "会议结束成功");
+                    finish();
                     Log.i("gongpengming", "what==whatLoad");
                     break;
                 case SIGNNIN:
@@ -75,19 +81,18 @@ public class MeetDetailsActivity extends BaseActivity implements View.OnClickLis
             }
         }
     };
-    private String endTime;
-    private String startTime;
+    private MeetEntity entity;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_meet_details);
         ViewUtils.inject(this);
-        ma_id = getIntent().getIntExtra("id", 4864);
-        ma_code = getIntent().getStringExtra("code");
-        startTime = getIntent().getStringExtra("start");
-        endTime = getIntent().getStringExtra("end");
-        getSupportActionBar().setTitle("会议详情");
+        entity = getIntent().getParcelableExtra("data");
+        if (entity != null) {
+            ma_id = entity.getMa_id();
+            ma_code = entity.getMa_code();
+        }
         loadNetData();
         initView();
     }
@@ -108,12 +113,13 @@ public class MeetDetailsActivity extends BaseActivity implements View.OnClickLis
             name_tv.setText(object.getString("ma_theme"));
             addr_tv.setText(object.getString("mr_site"));
             user_tv.setText(object.getString("ma_recorder"));
-            String time = object.getString("ma_starttime");
-            long startLongTime = TimeUtils.f_str_2_long(time);
-            oa_meeting_start.setText(TimeUtils.ss_long_2_str(startLongTime));
+            long startLongTime = TimeUtils.f_str_2_long(entity.getMa_starttime());
+            oa_meeting_start.setText(TimeUtils.long2str(startLongTime, "MM月dd"));
             oa_meeting_start_date.setText(TimeUtils.long2str(startLongTime, "HH:mm"));
             String str;
-            long endLongTime = 0;
+            long endLongTime = TimeUtils.f_str_2_long(entity.getMa_endtime());
+            oa_meeting_end.setText(TimeUtils.long2str(startLongTime, "MM月dd"));
+            oa_meeting_end_date.setText(TimeUtils.long2str(startLongTime, "HH:mm"));
             if (System.currentTimeMillis() < startLongTime) {
                 str = "会议未开始";
             } else if (System.currentTimeMillis() < endLongTime) {
@@ -206,14 +212,14 @@ public class MeetDetailsActivity extends BaseActivity implements View.OnClickLis
                 bean.setMd_recorderdate("");
                 bean.setMd_status("再录入");
                 bean.setMd_title(name_tv.getText().toString());
-                bean.setMd_mtname(name_tv.getText().toString());
+                bean.setMd_mtname("");
                 bean.setMd_meetingname("");
                 bean.setMd_meetingcode("");
                 bean.setMd_mrcode("");
                 bean.setMd_mrname("");
-                bean.setMd_starttime(startTime);
+                bean.setMd_starttime(entity == null ? TimeUtils.f_long_2_str(System.currentTimeMillis()) : entity.getMa_starttime());
                 bean.setMd_statuscode("ENTERING");
-                bean.setMd_endtime(endTime);
+                bean.setMd_endtime(entity == null ? TimeUtils.f_long_2_str(System.currentTimeMillis()) : entity.getMa_endtime());
                 bean.setMd_group("陈虎");//数据返回
                 bean.setMd_attachs("");
                 bean.setMd_contents("jil");

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

@@ -97,12 +97,13 @@ public class MeetingActivity extends BaseActivity {
             public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                 Intent intent = new Intent(MeetingActivity.this, MeetDetailsActivity.class);
                 MeetEntity entity = entities.get((i - 1 < 0 ? 0 : (i - 1)));
-                String startTime = entity.getMa_starttime();
-                String endTime = entity.getMa_endtime();
-                intent.putExtra("code", entity.getMa_code());
-                intent.putExtra("id", entity.getMa_id());
-                intent.putExtra("start", startTime);
-                intent.putExtra("end", endTime);
+//                String startTime = entity.getMa_starttime();
+//                String endTime = entity.getMa_endtime();
+                intent.putExtra("data",entity);
+//                intent.putExtra("code", entity.getMa_code());
+//                intent.putExtra("id", entity.getMa_id());
+//                intent.putExtra("start", startTime);
+//                intent.putExtra("end", endTime);
                 startActivity(intent);
             }
         });

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

@@ -26,6 +26,7 @@ import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.ErpMenActivity;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.util.JsonUtils;
 import com.xzjmyk.pm.activity.util.ToastUtil;
 import com.xzjmyk.pm.activity.view.CalendarView;
 import com.xzjmyk.pm.activity.view.MyListView;
@@ -36,6 +37,7 @@ import org.json.JSONObject;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 
 public class OAActivity extends BaseActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener {
@@ -60,29 +62,61 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
     private TextView ok_scale;//完成比例
     @ViewInject(R.id.date_tv)
     private TextView date_tv;  //当前月份
-    //end improt View
-    //init
     private OAActivity activity;
     private String[] stateItems = {"状态", "确认中", "进行中", "已完成"};
     private String[] typeItems = {"类型", "任务", "日程", "拜访"};
     private String baseUrl;
     private PopupMenu poAddMenu;
+    private int typeWhat = -1;
     private final int whatVisit = 0x10, whatTask = 0x11, whatSchedule = 0x12;
     private final int whatTaskNum = 0x13;
     private Handler handler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
+            progressDialog.dismiss();
             String message = (String) msg.getData().get("result");
-            Log.i("gongpengming", message);
+            typeWhat = msg.what;
             switch (msg.what) {
                 case whatVisit:
                     Log.i("gongpengming", "拜访计划回调");
+                    try {
+                        JSONObject json = new JSONObject(message);
+                        if (json.isNull("success") || !json.getBoolean("success")) {
+                            ToastUtil.showToast(ct, "数据返回错误");
+                            return;
+                        }
+                        mapList = JsonUtils.parseListKeyMaps("visitplan", message);
+                        updateUI();
+                    } catch (JSONException e) {
+                        e.printStackTrace();
+                    }
                     break;
                 case whatTask:
-                    Log.i("gongpengming", "任务回调");
+                    try {
+                        JSONObject json = new JSONObject(message);
+                        if (json.isNull("success") || !json.getBoolean("success")) {
+                            ToastUtil.showToast(ct, "数据返回错误");
+                            return;
+                        }
+                        mapList = JsonUtils.parseListKeyMaps("taskMsg", message);
+                        updateUI();
+                    } catch (JSONException e) {
+                        e.printStackTrace();
+                    }
                     break;
                 case whatSchedule:
                     Log.i("gongpengming", "日程回调");
+                    try {
+                        JSONObject json = new JSONObject(message);
+                        if (json.isNull("success") || !json.getBoolean("success")) {
+                            ToastUtil.showToast(ct, "数据返回错误");
+                            return;
+                        }
+                        mapList = JsonUtils.parseListKeyMaps("scheduleMsg", message);
+                        updateUI();
+                    } catch (JSONException e) {
+                        e.printStackTrace();
+                    }
                     break;
                 case whatTaskNum:
                     try {
@@ -105,6 +139,8 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
         }
     };
     private String date;
+    private List<Map<String, Object>> mapList;
+    private MyListViewAdapter adapter;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -124,16 +160,9 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
         rootScrollView.requestDisallowInterceptTouchEvent(false);
         picker.setCalendarData(new Date());
         picker.setSelectMore(false);
-        picker.setOnDateClickListener(new CalendarView.OnDateClickListener() {
-            @Override
-            public void onDateClick(int year, int month, int day) {
-                date = year + "" + month + "" + day;
-                loadNetData(whatTaskNum);
-
-            }
-        });
         bindAdapterForSpinner();
-        listview.setAdapter(new MyListViewAdapter());
+        adapter = new MyListViewAdapter();
+        listview.setAdapter(adapter);
         rootScrollView.smoothScrollTo(0, 20);
         setListener();
 
@@ -141,6 +170,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
 
     //获取网络数据
     public void loadNetData(int what) {
+        progressDialog.show();
         //获取网络数据
         String url = baseUrl + "mobile/crm/getVisitPlan.action";
         String date = "";
@@ -179,6 +209,11 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
         ViewUtil.httpSendRequest(this, url, param, handler, headers, what, null, null, "get");
     }
 
+    private void updateUI() {
+        if (adapter == null)
+            adapter = new MyListViewAdapter();
+        adapter.setData(mapList);
+    }
 
     private void updateUI(int i, int completenum, int complrate, int notcomplnum) {
         //TODO 更改数据显示
@@ -202,19 +237,23 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
         findViewById(R.id.ll_meeting).setOnClickListener(this);
         findViewById(R.id.ll_worklog).setOnClickListener(this);
         findViewById(R.id.ll_subject).setOnClickListener(this);
-
         findViewById(R.id.attendance_ll).setOnClickListener(this);//考勤单据
         findViewById(R.id.borrowing_ll).setOnClickListener(this);
         findViewById(R.id.repayment_ll).setOnClickListener(this);//还款
         findViewById(R.id.ll_).setOnClickListener(this);
         findViewById(R.id.ll_attendance).setOnClickListener(this);
-
-
         findViewById(R.id.date_back_img).setOnClickListener(this);
         findViewById(R.id.date_next_img).setOnClickListener(this);
         findViewById(R.id.oa_img_infile).setOnClickListener(this);
         findViewById(R.id.staff_tv).setOnClickListener(this);
         findViewById(R.id.oa_img_add).setOnClickListener(this);
+        picker.setOnDateClickListener(new CalendarView.OnDateClickListener() {
+            @Override
+            public void onDateClick(int year, int month, int day) {
+                date = year + "" + month + "" + day;
+                loadNetData(whatTaskNum);
+            }
+        });
     }
 
     @Override
@@ -227,15 +266,23 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
                 Log.i("gongpengming", typeItems[i]);
                 switch (i) {
                     case 0:
-                        //TODO 选择为类型时
                         break;
                     case 1:
+                        if (mapList != null)
+                            mapList.clear();
+                        updateUI();
                         loadNetData(whatTask);
                         break;
                     case 2:
+                        if (mapList != null)
+                            mapList.clear();
+                        updateUI();
                         loadNetData(whatSchedule);
                         break;
                     case 3:
+                        if (mapList != null)
+                            mapList.clear();
+                        updateUI();
                         loadNetData(whatVisit);
                         break;
                 }
@@ -245,12 +292,10 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
 
     @Override
     public void onNothingSelected(AdapterView<?> adapterView) {
-
     }
 
     @Override
     public void onClick(View view) {
-        Intent it_scale = null;
         switch (view.getId()) {
             case R.id.oa_img_infile:  //筛选
                 break;
@@ -279,16 +324,12 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
                 break;
             case R.id.attendance_ll://考勤单据
                 startActivity(new Intent(activity, ErpMenActivity.class));
-
                 break;
             case R.id.borrowing_ll://借款申请
-
                 break;
             case R.id.repayment_ll://还款申请
-
                 break;
             case R.id.ll_://差旅费报销
-
                 break;
             case R.id.ll_attendance://考勤统计
                 startActivity(new Intent(activity, StatisticsActivity.class));
@@ -327,14 +368,24 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
     }
 
     class MyListViewAdapter extends BaseAdapter {
+        private List<Map<String, Object>> mapList;
+
+        public MyListViewAdapter() {
+        }
+
+        public void setData(List<Map<String, Object>> mapList) {
+            this.mapList = mapList;
+            notifyDataSetChanged();
+        }
+
         @Override
         public int getCount() {
-            return 10;
+            return mapList == null ? 0 : mapList.size();
         }
 
         @Override
         public Object getItem(int i) {
-            return null;
+            return mapList.get(i);
         }
 
         @Override
@@ -343,7 +394,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
         }
 
         @Override
-        public View getView(int i, View view, ViewGroup viewGroup) {
+        public View getView(final int i, View view, ViewGroup viewGroup) {
             Viewholder viewholder = null;
             if (view == null) {
                 viewholder = new Viewholder();
@@ -357,23 +408,65 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Ad
             } else {
                 viewholder = (Viewholder) view.getTag();
             }
-
-            bindItemData(viewholder);
+            bindItemData(viewholder, i);
             viewholder.item_doit_tv.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View view) {
-                    startActivityForResult(new Intent(activity, VisitActivity.class), 1);
+                    Intent intent = new Intent(activity, VisitActivity.class);
+                    intent.putExtra("id", (int) mapList.get(i).get("vp_id"));
+                    startActivityForResult(intent, 1);
                 }
             });
             return view;
         }
 
-        private void bindItemData(Viewholder viewholder) {
+        private void bindItemData(Viewholder viewholder, int postin) {
             //TODO 绑定数据
+            String name = "";
+            String addr = "";
+            String object = "";
+            String status = "";
+            if (typeWhat == whatSchedule) {
+                viewholder.item_doit_tv.setVisibility(View.GONE);
+                name = (String) mapList.get(postin).get("schetitle");
+                addr = "结束时间:" + mapList.get(postin).get("enddate");
+                object = (String) mapList.get(postin).get("handler");
+                if (mapList.get(postin).get("status") == null ||"null".equals(mapList.get(postin).get("status") + ""))
+                    status = "未完成";
+                else
+                    status = "" + mapList.get(postin).get("status");
+            } else if (typeWhat == whatTask) {
+                viewholder.item_doit_tv.setVisibility(View.GONE);
+                name = (String) mapList.get(postin).get("taskname");
+                addr = "结束时间:" + mapList.get(postin).get("enddate");
+                object = (String) mapList.get(postin).get("handler");
+                Log.i("gongpengming", mapList.get(postin).get("status") + "");
+                if (mapList.get(postin).get("status") == null || "null".equals(mapList.get(postin).get("status") + ""))
+                    status = "未完成";
+                else
+                    status = "" + mapList.get(postin).get("status");
+            } else {
+                viewholder.item_doit_tv.setVisibility(View.VISIBLE);
+                name = (String) mapList.get(postin).get("visitman");
+                addr = "" + mapList.get(postin).get("address");
+                object = mapList.get(postin).get("depart") + ">" + mapList.get(postin).get("custname");
+                if (mapList.get(postin).get("vp_status") == null || "null".equals(mapList.get(postin).get("vp_status") + ""))
+                    status = "未完成";
+                else
+                    status = "" + mapList.get(postin).get("vp_status");
+            }
+            viewholder.item_name_tv.setText(name);
+            viewholder.item_addr_tv.setText(addr);
+            viewholder.item_object_tv.setText(object);
+            viewholder.item_status_tv.setText(status);
         }
 
         class Viewholder {
-            TextView item_name_tv, item_addr_tv, item_object_tv, item_doit_tv, item_status_tv;
+            TextView item_name_tv,//名字
+                    item_addr_tv,//地址
+                    item_object_tv,//对象
+                    item_doit_tv,//去拜访按钮
+                    item_status_tv;//状态
         }
     }
 }

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

@@ -2,6 +2,8 @@ package com.xzjmyk.pm.activity.ui.erp.activity.oa;
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -13,24 +15,58 @@ import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.R;
 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 java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 //拜访页面
 public class VisitActivity extends BaseActivity {
-    private int resultCode = 0x01;
-    public static final int REQUESTCODE = 0x02;
 
     @ViewInject(R.id.location_tv)
     private TextView location_tv;
+    @ViewInject(R.id.time_tv)
+    private TextView time_tv;//拜访日期
+
+    private int resultCode = 0x01;
+    private int vp_id;
+    private String baseUrl;
+    private final int updataWhat = 0x11;
+    private final int loadWhat = 0x12;
+    private Handler handler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            String message = (String) msg.getData().get("result");
+            Log.i("gongpengming", message);
+            switch (msg.what) {
+                case updataWhat:
+                    break;
+                case loadWhat:
+                    updataUI();
+                    break;
+            }
+        }
+    };
+
+    private void updataUI() {
+        //获取网络数据后更新界面
+
+
+    }
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_visit);
         ViewUtils.inject(this);
+        vp_id = getIntent().getIntExtra("id", -1);
         initView();
     }
 
     private void initView() {
+        loadNetData();
         findViewById(R.id.location_rl).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
@@ -50,18 +86,55 @@ public class VisitActivity extends BaseActivity {
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.save:
-
+                updataVisit();
                 break;
         }
         return super.onOptionsItemSelected(item);
     }
 
+    //获取网络数据
+    private void loadNetData() {
+        progressDialog.show();
+        //获取网络数据
+        if (baseUrl == null) {
+            baseUrl = CommonUtil.getSharedPreferences(this, "erp_baseurl");
+        }
+        String url = baseUrl + "mobile/common/getPanel.action";
+        String em_code = CommonUtil.getSharedPreferences(ct, "erp_username");
+        String sessionId = CommonUtil.getSharedPreferences(ct, "sessionId");
+        final Map<String, Object> param = new HashMap<>();
+        String caller = "Meetingroomapply";
+        param.put("caller", caller);
+        param.put("emcode", em_code);
+        param.put("formCondition", "vp_id=" + vp_id);
+        param.put("gridCondition", "vp_id=" + vp_id);
+        param.put("sessionId", sessionId);
+        Log.i("gongpengming", url + "?emcode=" + em_code + "sessionId=" + sessionId);
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
+        ViewUtil.httpSendRequest(ct, url, param, handler, headers, loadWhat, null, null, "post");
+    }
+
+    //更新
+    private void updataVisit() {
+        if (baseUrl == null)
+            baseUrl = CommonUtil.getSharedPreferences(this, "erp_baseurl");
+        String url = baseUrl + "mobile/crm/updateVistPlan.action";
+        //获取网络数据
+        final Map<String, Object> param = new HashMap<>();
+        param.put("vp_id", vp_id);
+        param.put("sessionId", CommonUtil.getSharedPreferences(this, "sessionId"));
+        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
+        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(this, "sessionId"));
+        ViewUtil.httpSendRequest(this, url, param, handler, headers, updataWhat, null, null, "get");
+    }
+
     private PoiInfo myPoInfo;
 
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (data != null) {
-            if (this.resultCode == resultCode) {
+            if (this.resultCode == requestCode) {
                 if (resultCode == LocationMapActivity.REQUCODE) {
                     myPoInfo = data.getParcelableExtra(LocationMapActivity.REQUESTNAME);
                     location_tv.setText(myPoInfo.name);

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

@@ -20,7 +20,6 @@ public class AlarmReceiver extends BroadcastReceiver {
 
     @Override
     public void onReceive(Context context, Intent intent) {
-
         if (intent.getAction().equals(AlarmaActivity.KEY_ALAR_ACTION)) {//上班签到提醒
             String content = context.getResources().getString(R.string.alar_content);
             sendNotification(context, content, true);

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

@@ -33,6 +33,7 @@ public class DBOpenHelper extends SQLiteOpenHelper {
         db.execSQL(Constants.SQL_EMPLOYEES_CREATETABLE);
         db.execSQL(Constants.SQL_empdate_CREATETABLE);
         db.execSQL(Constants.SQL_B2B_MSG);
+        db.execSQL(Constants.OA_SIGNIN_TIME);//创建OA签到记录表
     }
 
     @Override
@@ -41,6 +42,7 @@ public class DBOpenHelper extends SQLiteOpenHelper {
         db.execSQL("DROP TABLE IF EXISTS EMPLOYEES");
         db.execSQL("DROP TABLE IF EXISTS empdate");
         db.execSQL("DROP TABLE IF EXISTS B2BMSG");
+        db.execSQL("DROP TABLE IF EXISTS Signin");
         onCreate(db);
     }
 

+ 156 - 46
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/SigninFragment.java

@@ -6,21 +6,24 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.util.Log;
 import android.view.Gravity;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.Button;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 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.MyApplication;
 import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.bean.oa.Signin;
 import com.xzjmyk.pm.activity.bean.oa.SigninBean;
+import com.xzjmyk.pm.activity.db.dao.SigninDao;
 import com.xzjmyk.pm.activity.ui.base.EasyFragment;
 import com.xzjmyk.pm.activity.ui.calendar.cons.DPMode;
 import com.xzjmyk.pm.activity.ui.calendar.utils.OnDatePickedListener;
@@ -32,6 +35,7 @@ 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.FlexJsonUtil;
+import com.xzjmyk.pm.activity.ui.tool.ThreadPool;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
 import com.xzjmyk.pm.activity.util.CalendarUtils;
 import com.xzjmyk.pm.activity.util.TimeUtils;
@@ -49,18 +53,45 @@ import java.util.Map;
  * Created by gongpm on 2016/7/5.
  */
 public class SigninFragment extends EasyFragment {
+    @ViewInject(R.id.location_tv)
+    private TextView location_tv;
+    @ViewInject(R.id.newtime_tv)
+    private TextView newtime_tv;
+    @ViewInject(R.id.time0fwork_tv)
+    private TextView time0fwork_tv;
+    @ViewInject(R.id.signin0fwork_tv)
+    private TextView signin0fwork_tv;
+    @ViewInject(R.id.time0fuwork_tv)
+    private TextView time0fuwork_tv;
+    @ViewInject(R.id.signin0fuwork_tv)
+    private TextView signin0fuwork_tv;
+    @ViewInject(R.id.untime_signin)
+    private TextView untime_signin;
+    @ViewInject(R.id.office_addr)
+    private TextView office_addr;
+    @ViewInject(R.id.unoffice_mm)
+    private TextView unoffice_mm;
+    @ViewInject(R.id.signin_btn)
+    private LinearLayout signin_btn;
+
+    private LatLng location;
+    private static final int NEW_TIME_WHAT = 0x10;
+    private final int whatLoad = 0x11;
+    private final int whatSignin = 0x12;
+    private final int thrad = 0x13;
+    private static final double X = 22.540551;
+    private static final double Y = 113.953345;
+
+
     private AlertDialog dateDialog;
     private SigninActivity ct;
-    private TextView location_tv;
+
     private int requcode = 0x11;
     private PoiInfo myPoInfo;
     private String baseUrl;
     private int uHH, uMM, dHH, dMM;//上下班的时分
     private int hh, mm;//距离时间
-    private final int whatLoad = 0x11;
-    private final int whatSignin = 0x12;
-    private final int thrad = 0x13;
-    private boolean isPlay = false;
+    private boolean isPlay = false;//是否已经签到
     private Handler handler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
@@ -86,29 +117,38 @@ public class SigninFragment extends EasyFragment {
                     }
                     break;
                 case whatSignin:
-                    Log.i("gongpengming", "msg.what == whatSignin");
                     long time = System.currentTimeMillis();
                     Calendar mCalendar = Calendar.getInstance();
                     mCalendar.setTimeInMillis(time);
-                    int mHour = mCalendar.get(Calendar.HOUR);
+                    int mHour = mCalendar.get(Calendar.HOUR_OF_DAY);
                     int mMin = mCalendar.get(Calendar.MINUTE);
                     int h = Math.abs(mHour - uHH);
                     int m = Math.abs(mHour - dHH);
                     String strTime = (mHour < 10 ? "0" : "") + mHour + ":" + (mMin < 10 ? "0" : "") + mMin;
-                    if (h < m) {
+                    int k = SigninDao.getInstance(ct).getDateStatus(em_code, TimeUtils.s_long_2_str(System.currentTimeMillis()));
+                    if (k == 0) {
                         signin0fwork_tv.setText(strTime);
+                        ToastUtil.showToast(ct, "上班打卡成功");
                     } else {
                         signin0fuwork_tv.setText(strTime);
+                        ToastUtil.showToast(ct, "下班打卡成功");
                     }
-                    isPlay = true;
-                    ToastUtil.showToast(ct, "签到成功");
-                    signinAble(false);
+                    Signin bean = new Signin();
+                    bean.setCode(em_code);
+                    bean.setDate(TimeUtils.s_long_2_str(System.currentTimeMillis()));
+                    bean.setDtime(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+                    bean.setUtime(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+                    SigninDao.getInstance(ct).updata(bean);
+                    signinAble(false);//关闭签到入口
                     break;
                 case thrad:
                     String str = message.getString("result");
                     if (str == null) return;
                     untime_signin.setText(str);
                     break;
+                case NEW_TIME_WHAT:
+                    newtime_tv.setText(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+                    break;
                 case Constants.HTTP_SUCCESS_INIT:
                     break;
                 case Constants.APP_SOCKETIMEOUTEXCEPTION:
@@ -116,8 +156,29 @@ public class SigninFragment extends EasyFragment {
             }
         }
     };
+    private String em_code;
+    long distanceTime = 60 * 1000 * 20;//允许提前20分钟签到
+
+    private void signinAble() {
+        int k = SigninDao.getInstance(ct).getDateStatus(em_code, TimeUtils.s_long_2_str(System.currentTimeMillis()));
+        if (k == 2) {
+            signinAble(false);
+        } else {
+            LatLng lalat = new LatLng(MyApplication.getInstance().getBdLocationHelper().getLatitude(),
+                    MyApplication.getInstance().getBdLocationHelper().getLongitude());
+            String str = BaiduMapUtil.getInstence().getDistance(lalat, location);
+            unoffice_mm.setText("距离考勤地点:" + str + "米");
+            if (BaiduMapUtil.getInstence().getDistanceD(lalat, location) < 500) {
+                //TODO 在允许的距离内签到
+                signinAble(true);
+            } else {
+                signinAble(false);
+            }
+        }
+    }
 
     private void signinAble(boolean b) {
+        isPlay = !b;
         signin_btn.setFocusable(b);
         signin_btn.setClickable(b);
         if (b) {
@@ -127,14 +188,6 @@ public class SigninFragment extends EasyFragment {
         }
     }
 
-    private TextView time0fwork_tv;
-    private TextView signin0fwork_tv;
-    private TextView time0fuwork_tv;
-    private TextView signin0fuwork_tv;
-    private TextView untime_signin;
-    private TextView office_addr;
-    private TextView unoffice_mm;
-    private Button signin_btn;
 
     @Override
     protected int inflateLayoutId() {
@@ -149,7 +202,7 @@ public class SigninFragment extends EasyFragment {
 
     //开启线程计算时间
     private void startThrad() {
-        new Thread(new Runnable() {
+        ThreadPool.getThreadPool().addTask(new Runnable() {
             @Override
             public void run() {
                 long time = System.currentTimeMillis();
@@ -158,7 +211,6 @@ public class SigninFragment extends EasyFragment {
                 int mHour = mCalendar.get(Calendar.HOUR);
                 int mMin = mCalendar.get(Calendar.MINUTE);
                 int mSecond = mCalendar.get(Calendar.SECOND);
-
                 if (mHour < uHH) {//当前时间在上班时间之前
                     beforeTheTime(mHour, mMin, mSecond);
                 } else if (mHour == uHH) {//
@@ -172,16 +224,12 @@ public class SigninFragment extends EasyFragment {
                 } else {//当前时间在上班时间和下班时间之后  当天打卡时间已过
                     sendHandle(-1, -1);
                 }
-
             }
-        }).start();
-
+        });
     }
 
     private void endTheTime(int mHour, int mMin, int mSecond) {
         try {
-            Log.i("gongpengming", "mHour=" + mHour + "@@mMin=" + mMin);
-            Log.i("gongpengming", "dHH=" + dHH + "@@dMM=" + dMM);
             int m = dMM - mMin;
             int h = dHH - mHour;
             while (true) {
@@ -248,6 +296,7 @@ public class SigninFragment extends EasyFragment {
     @Override
     protected void onCreateView(Bundle savedInstanceState, boolean createView) {
         setHasOptionsMenu(true);
+        ViewUtils.inject(getmRootView());
         long time = System.currentTimeMillis();
         ct.getSupportActionBar().setTitle(TimeUtils.day_long_2_str(time) + "  " + TimeUtils.getWeek(time));
         baseUrl = CommonUtil.getSharedPreferences(ct, "erp_baseurl");
@@ -260,19 +309,31 @@ public class SigninFragment extends EasyFragment {
         ct.progressDialog.show();
         //获取网络数据
         String url = baseUrl + "mobile/getWorkDate.action";
-        String em_code = CommonUtil.getSharedPreferences(ct, "erp_username");
+        if (em_code == null)
+            em_code = CommonUtil.getSharedPreferences(ct, "erp_username");
         int date = TimeUtils.int_long_2_str(System.currentTimeMillis());
         String sessionId = CommonUtil.getSharedPreferences(ct, "sessionId");
         final Map<String, Object> param = new HashMap<>();
         param.put("emcode", em_code);
         param.put("date", date);
         param.put("sessionId", sessionId);
-        Log.i("gongpengming", url + "?emcode=" + em_code + "&date=" + date + "sessionId=" + sessionId);
         LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
         headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
         ViewUtil.httpSendRequest(ct, url, param, handler, headers, whatLoad, null, null, "post");
     }
 
+    public String getLocation() {
+        String temp = location_tv.getText().toString();
+        String locationStr = "";
+        if (temp.length() > 8) {
+            locationStr = temp.substring(0, 7);
+        }
+        if (temp.length() <= 0) {
+            locationStr = "未捕获位置名称";
+        }
+        return locationStr;
+    }
+
     private void doSignin() {
         //获取网络数据
         String url = baseUrl + "mobile/saveCardLog.action";
@@ -283,7 +344,7 @@ public class SigninFragment extends EasyFragment {
         bean.setCl_emcode(CommonUtil.getSharedPreferences(ct, "erp_username"));
         bean.setCl_emname(MyApplication.getInstance().mLoginUser.getNickName());
         bean.setCl_time(TimeUtils.f_long_2_str(System.currentTimeMillis()));
-        bean.setCl_location("test地址");
+        bean.setCl_location(getLocation());
         bean.setCl_phone(MyApplication.getInstance().mLoginUser.getTelephone());
         String formStore = FlexJsonUtil.toJson(bean);
         String caller = "CardLog";
@@ -296,26 +357,48 @@ public class SigninFragment extends EasyFragment {
     }
 
     private void initView() {
-        //上班和签到时间
-        time0fwork_tv = (TextView) findViewById(R.id.time0fwork_tv);
-        signin0fwork_tv = (TextView) findViewById(R.id.signin0fwork_tv);
-        time0fuwork_tv = (TextView) findViewById(R.id.time0fuwork_tv);
-        signin0fuwork_tv = (TextView) findViewById(R.id.signin0fuwork_tv);
+        setListener();
+        location_tv.setText(MyApplication.getInstance().getBdLocationHelper().getAddress());
+        em_code = CommonUtil.getSharedPreferences(ct, "erp_username");
+        Signin bean = SigninDao.getInstance(ct).query(em_code, TimeUtils.s_long_2_str(System.currentTimeMillis()));
+        if (bean != null) {
+            if (bean.getSigninNum() >= 1) {
+                //只打一次卡
+                signin0fwork_tv.setText(TimeUtils.long2str(TimeUtils.f_str_2_long(bean.getUtime()), "HH:mm"));
+            }
+            if (bean.getSigninNum() == 2) {
+                signin0fuwork_tv.setText(TimeUtils.long2str(TimeUtils.f_str_2_long(bean.getDtime()), "HH:mm"));
+            }
+        }
+        //判断考勤距离
+        LatLng lalat = new LatLng(MyApplication.getInstance().getBdLocationHelper().getLatitude(),
+                MyApplication.getInstance().getBdLocationHelper().getLongitude());
+        String str = BaiduMapUtil.getInstence().getDistance(lalat, location);
+        unoffice_mm.setText("距离考勤地点:" + str + "米");
+        signinAble();
+    }
 
-        untime_signin = (TextView) findViewById(R.id.untime_signin);//距离考勤时间
-        office_addr = (TextView) findViewById(R.id.office_addr);//考勤地点
-        unoffice_mm = (TextView) findViewById(R.id.unoffice_mm);//区里考勤距离
-        signin_btn = (Button) findViewById(R.id.signin_btn);
+    private void setListener() {
+        ThreadPool.getThreadPool().addTask(new Runnable() {//开启线程进入时间显示
+            @Override
+            public void run() {
+                while (true) {
+                    if (isPlay) break;
+                    try {
+                        handler.sendEmptyMessage(NEW_TIME_WHAT);
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        });
         signin_btn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 doSignin();
             }
         });
-//        signin_btn.setClickable(false);
-//        signin_btn.setFocusable(false);
-        location_tv = (TextView) findViewById(R.id.location_tv);
-        location_tv.setText(MyApplication.getInstance().getBdLocationHelper().getAddress());
         findViewById(R.id.addr_rl).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
@@ -324,7 +407,6 @@ public class SigninFragment extends EasyFragment {
         });
     }
 
-
     private void showDateDalog() {
         //显示日期选择窗口
         if (dateDialog == null)
@@ -338,6 +420,7 @@ public class SigninFragment extends EasyFragment {
             @Override
             public void onDatePicked(String date) {
                 ct.getSupportActionBar().setTitle(TimeUtils.day_long_2_str(TimeUtils.s_str_2_long(date)) + "   " + TimeUtils.getWeek(date));
+                updataUIByDate(TimeUtils.day_long_2_str(TimeUtils.s_str_2_long(date)));
                 dateDialog.dismiss();
             }
         });
@@ -347,6 +430,31 @@ public class SigninFragment extends EasyFragment {
         dateDialog.getWindow().setGravity(Gravity.CENTER);
     }
 
+    private void updataUIByDate(String date) {
+        //当日期改变时候更新ui
+        if (!date.equals(TimeUtils.day_long_2_str(System.currentTimeMillis())))
+            signinAble(false);//选择时间非当日,不给签到
+        Signin bean = SigninDao.getInstance(ct).query(em_code, TimeUtils.s_long_2_str(System.currentTimeMillis()));
+        if (bean == null) {
+            signin0fwork_tv.setText("--:--");
+            signin0fuwork_tv.setText("--:--");
+            newtime_tv.setText(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+            return;
+        }
+        if (bean.getSigninNum() >= 1) {
+            signin0fwork_tv.setText(TimeUtils.long2str(TimeUtils.f_str_2_long(bean.getUtime()), "HH:mm"));
+            newtime_tv.setText(bean.getUtime());
+        }
+        if (bean.getSigninNum() == 2) {
+            signin0fuwork_tv.setText(TimeUtils.long2str(TimeUtils.f_str_2_long(bean.getDtime()), "HH:mm"));
+            newtime_tv.setText(bean.getDtime());
+        } else {
+            signin0fwork_tv.setText("--:--");
+            signin0fuwork_tv.setText("--:--");
+            newtime_tv.setText(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+        }
+    }
+
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         inflater.inflate(R.menu.menu_oa_signin, menu);
@@ -370,9 +478,11 @@ public class SigninFragment extends EasyFragment {
                 if (resultCode == LocationMapActivity.REQUCODE) {//地图选择返回
                     myPoInfo = data.getParcelableExtra(LocationMapActivity.REQUESTNAME);
                     location_tv.setText(myPoInfo.name);
-                    LatLng location = new LatLng(MyApplication.getInstance().getBdLocationHelper().getLatitude(), MyApplication.getInstance().getBdLocationHelper().getLongitude());
+                    if (location == null)
+                        location = new LatLng(X, Y);
                     String str = BaiduMapUtil.getInstence().getDistance(myPoInfo.location, location);
                     unoffice_mm.setText("距离考勤地点:" + str + "米");
+                    signinAble();
                 }
             }
         }

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

@@ -322,6 +322,14 @@ public class CommonUtil {
         return value;
     }
 
+    public static void putSharedPreferencesBoolean(Context ct, String key, boolean value) {
+        if (key == null) {
+            return;
+        }
+        SharedPreferences sPreferences = ct.getSharedPreferences(AppShareName, Context.MODE_PRIVATE);
+        sPreferences.edit().putBoolean(key, value).commit();
+    }
+
     public static long getSharedPreferencesLong(Context ct, String key) {
         if (key == null) {
             return 0;

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

@@ -46,8 +46,8 @@ public class Constants {
             + "or_flag varchar(50),"
             + "or_headmanname varchar(50),"
             + "or_headmancode varchar(50),"
-            + "or_remark integer"+
-           ")";
+            + "or_remark integer" +
+            ")";
     //组织架构 更新时间表
     public static final String SQL_empdate_CREATETABLE = "CREATE TABLE empdate "
             + "(id integer primary key autoincrement,"
@@ -65,8 +65,20 @@ public class Constants {
             + "b2b_master varchar(50)"
             + ")";
 
+    /**
+     * oa签到时间表
+     */
+    public static final String OA_SIGNIN_TIME = "CREATE TABLE Signin"
+            + "(code,"
+            + "date,"
+            + "utime,"
+            + "signinNum,"
+            + "dtime"
+            + ")";
+
     /**
      * 检测网络是否可用
+     *
      * @return
      */
     public static boolean isNetworkConnected(Context ct) {
@@ -75,6 +87,7 @@ public class Constants {
         NetworkInfo ni = cm.getActiveNetworkInfo();
         return ni != null && ni.isConnectedOrConnecting();
     }
+
     /**
      * @desc:获取erp的根路径
      * @author:Administrator on 2016/2/18 15:12
@@ -83,24 +96,25 @@ public class Constants {
         String baseUrl = CommonUtil.getSharedPreferences(ct, "erp_baseurl");
         return baseUrl;
     }
+
     /**
      * @desc:常量
      * @author:Administrator on 2016/5/13 10:21
      */
-    public final static int TYPE_CHAT_MANAGE=2;
-    public final static int TYPE_CHAT_All=1;
+    public final static int TYPE_CHAT_MANAGE = 2;
+    public final static int TYPE_CHAT_All = 1;
 
-   /**
+    /**
      * @desc:http 请求状态码
      * @author:Arison on 2016/7/18
      */
     public static final int HTTP_SUCCESS_INIT = 1;
-    public final static int APP_SOCKETIMEOUTEXCEPTION=99;//网络请求超时,错误,404响应
+    public final static int APP_SOCKETIMEOUTEXCEPTION = 99;//网络请求超时,错误,404响应
 
     public final static int LOAD_SUCCESS = 1;
-    public final static int SocketTimeoutException=0;//ERP登录成功
-    public final static int SUCCESS_LOGIN=3;//获取用户开通的平台信息
-    public final static int SUCCESS_B2B=4;//B2B登录成功
-    public final static int SUCCESS_ERP=5;//ERP登录成功
-    public final static int SUCCESS_INITDATA =7;
+    public final static int SocketTimeoutException = 0;//ERP登录成功
+    public final static int SUCCESS_LOGIN = 3;//获取用户开通的平台信息
+    public final static int SUCCESS_B2B = 4;//B2B登录成功
+    public final static int SUCCESS_ERP = 5;//ERP登录成功
+    public final static int SUCCESS_INITDATA = 7;
 }

+ 5 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/BaiduMapUtil.java

@@ -62,7 +62,11 @@ public class BaiduMapUtil implements OnGetPoiSearchResultListener {
         DecimalFormat df = new DecimalFormat(".##");
         return df.format(distance);
     }
-
+    //计算距离
+    public double getDistanceD(LatLng a, LatLng b) {
+        double distance = DistanceUtil.getDistance(a, b);
+        return distance;
+    }
     public String getDistance(double a1, double a2, double b1, double b2) {
         LatLng a = new LatLng(a1, a2);
         LatLng b = new LatLng(b1, b2);

+ 4 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/JsonUtils.java

@@ -22,14 +22,14 @@ public class JsonUtils {
      * @param json
      * @return
      */
-    public static List<Map<String, String>> parseListKeyMaps(String key, String json) {
-        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
+    public static List<Map<String, Object>> parseListKeyMaps(String key, String json) {
+        List<Map<String, Object>> list = new ArrayList<>();
         try {
             JSONObject jsonObject = new JSONObject(json);
             JSONArray jsonArray = jsonObject.getJSONArray(key);
             for (int i = 0; i < jsonArray.length(); i++) {
                 JSONObject jsonObject2 = jsonArray.getJSONObject(i);
-                Map<String, String> map = new HashMap<String, String>();
+                Map<String, Object> map = new HashMap<>();
                 Iterator<String> iterator = jsonObject2.keys();
                 while (iterator.hasNext()) {
                     String json_key = iterator.next();
@@ -37,7 +37,7 @@ public class JsonUtils {
                     if (json_value == null) {
                         json_value = "";
                     }
-                    map.put(json_key, "" + json_value);
+                    map.put(json_key, json_value);
                 }
                 list.add(map);
             }

+ 5 - 5
WeiChat/src/main/res/layout/activity_oa.xml

@@ -489,16 +489,16 @@
                 android:textSize="12sp" />
         </LinearLayout>
 
-        <!--<View-->
-        <!--android:layout_width="match_parent"-->
-        <!--android:layout_height="1px"-->
-        <!--android:background="@color/item_line"-->
-        <!--android:date_tv="match_parent" />-->
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1px"
+            android:background="@color/item_line" />
 
         <com.xzjmyk.pm.activity.view.MyListView
             android:id="@+id/oa_listview"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:layout_marginBottom="30dp"
             android:focusable="false"
             android:focusableInTouchMode="false" />
         />

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

@@ -23,7 +23,6 @@
         <com.xzjmyk.pm.activity.ui.erp.view.SwitchView
             android:id="@+id/isalarma_sw"
             android:layout_width="50dp"
-
             android:layout_height="35dp"
             android:layout_alignParentRight="true"
             android:layout_centerVertical="true" />

+ 15 - 5
WeiChat/src/main/res/layout/activity_visit.xml

@@ -86,6 +86,7 @@
                 android:drawableLeft="@drawable/oa_client"
                 android:gravity="center"
                 android:text="联系人" />
+
             <TextView
                 android:id="@+id/contact_tv"
                 style="@style/add_signin_tv_hine"
@@ -115,8 +116,8 @@
                 <TextView
                     style="@style/add_signin_tv_hine"
                     android:layout_alignParentRight="true"
-                    android:text="广东深圳市南山XXXX"
                     android:drawableRight="@drawable/oa_next"
+                    android:text="广东深圳市南山XXXX"
                     android:textColorLink="@null" />
             </RelativeLayout>
 
@@ -180,10 +181,19 @@
                 android:background="@drawable/oa_signin_tv_bg">
 
                 <EditText
-                    style="@style/add_signin_tv_main"
-                    android:gravity="center"
-                    android:minLines="3"
-                    android:text="备注: 请输入" />
+                    android:id="@+id/text_edit"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@+id/top_tag"
+                    android:background="@drawable/full_edit_bg"
+                    android:gravity="top"
+                    android:hint="请填写备注"
+                    android:inputType="textMultiLine"
+                    android:minHeight="150dp"
+                    android:padding="10dp"
+                    android:textColor="@color/black"
+                    android:textColorHint="@color/grey"
+                    android:textSize="16sp" />
             </RelativeLayout>
         </LinearLayout>
     </LinearLayout>

+ 27 - 15
WeiChat/src/main/res/layout/fragment_signin.xml

@@ -151,13 +151,8 @@
                 android:layout_height="match_parent"
                 android:drawableRight="@drawable/oa_next"
                 android:ellipsize="marquee"
-                android:focusable="true"
-                android:focusableInTouchMode="true"
                 android:gravity="right"
                 android:lines="1"
-                android:marqueeRepeatLimit="marquee_forever"
-                android:scrollHorizontally="true"
-                android:text="地址..."
                 android:textSize="@dimen/text_hine" />
         </LinearLayout>
 
@@ -175,13 +170,13 @@
                 android:id="@+id/office_addr"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:text="考勤地点:深圳优软科技" />
+                android:text="考勤地点:深圳优软科技有限公司" />
 
             <TextView
                 android:id="@+id/unoffice_mm"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:text="距离考勤地点:0 公里" />
+                android:text="距离考勤地点:" />
         </LinearLayout>
 
         <TextView
@@ -194,18 +189,35 @@
             android:textColor="@color/blue"
             android:visibility="gone" />
 
-        <Button
+        <LinearLayout
             android:id="@+id/signin_btn"
-            android:layout_width="100dp"
-            android:layout_height="100dp"
+            android:layout_width="150dp"
+            android:layout_height="150dp"
             android:layout_below="@+id/oa_range_addr_rl"
             android:layout_centerHorizontal="true"
             android:layout_marginTop="30dp"
-            android:background="@drawable/button_signin"
-            android:padding="20dp"
-            android:text="打卡"
-            android:textColor="@color/white"
-            android:textSize="20sp" />
+            android:background="@drawable/button_round_shape"
+            android:clickable="true"
+            android:gravity="center"
+            android:orientation="vertical"
+            android:padding="20dp">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="打卡"
+                android:textColor="@color/white"
+                android:textSize="@dimen/text_main" />
+
+            <TextView
+                android:id="@+id/newtime_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="10dp"
+                android:text="2016-11-11 hh:hh:hh"
+                android:textColor="@color/white"
+                android:textSize="@dimen/text_min" />
+        </LinearLayout>
 
         <LinearLayout
             android:id="@+id/ll_do"

+ 0 - 3
WeiChat/src/main/res/layout/oa_mylistview_item.xml

@@ -9,7 +9,6 @@
         android:id="@+id/item_name_tv"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="万宁超市(星游城)"
         android:textColor="@color/text_main"
         android:textSize="@dimen/text_main" />
 
@@ -32,7 +31,6 @@
         android:layout_marginTop="3dp"
         android:clickable="true"
         android:drawableLeft="@drawable/oa_signin"
-        android:text="深圳宝安中心,宝安路,268号宿舍"
         android:textColor="@color/text_hine"
         android:textSize="@dimen/text_hine" />
 
@@ -42,7 +40,6 @@
         android:layout_height="wrap_content"
         android:layout_below="@+id/item_addr_tv"
         android:layout_marginTop="5dp"
-        android:text="销售部》顺降龙"
         android:textColor="@color/text_hine"
         android:textSize="@dimen/text_hine" />