Browse Source

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

Arison 9 years ago
parent
commit
afa9d25379
41 changed files with 936 additions and 952 deletions
  1. 1 1
      WeiChat/build.gradle
  2. 0 21
      WeiChat/src/main/java/com/xzjmyk/pm/activity/BdLocationHelper.java
  3. 7 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/ComGriddataInsideAdapter.java
  4. 11 9
      WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/CommonDocApprovalFlowAdapter.java
  5. 9 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/CommonDocMainMsgAdapter.java
  6. 108 79
      WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/DailyDetailsApprovalFlowAdapter.java
  7. 0 163
      WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/WorkDailyApprovalFlowAdapter.java
  8. 121 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/ErrorMagDao.java
  9. 46 9
      WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/MissionDao.java
  10. 6 6
      WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/SigninDao.java
  11. 2 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/TableConstantDao.java
  12. 0 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/SplashActivity.java
  13. 23 13
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/CommonDocDetailsActivity.java
  14. 6 58
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/AlarmaActivity.java
  15. 62 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/DailydetailsActivity.java
  16. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionPlanActivity.java
  17. 2 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAActivity.java
  18. 7 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OutLogListActivity.java
  19. 83 64
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/TestActivity.java
  20. 4 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/db/DBOpenHelper.java
  21. 44 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/entity/ErrorEntity.java
  22. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/entity/MissionPlanEntity.java
  23. 14 9
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/SigninFragment.java
  24. 7 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/Constants.java
  25. 8 5
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/SigninUtil.java
  26. 162 179
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmManage.java
  27. 40 20
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmService.java
  28. 0 245
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/IAlarmManage.java
  29. 6 5
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/Subscription2Activity.java
  30. 77 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/view/EmptyRecyclerView.java
  31. BIN
      WeiChat/src/main/res/drawable-xxhdpi/avatar_normal.png
  32. BIN
      WeiChat/src/main/res/drawable-xxhdpi/icon_work_home.png
  33. BIN
      WeiChat/src/main/res/drawable-xxhdpi/icon_work_home1.png
  34. BIN
      WeiChat/src/main/res/drawable-xxhdpi/work_home.png
  35. 0 1
      WeiChat/src/main/res/layout/activity_common_docui.xml
  36. 11 7
      WeiChat/src/main/res/layout/activity_subscription2.xml
  37. 20 24
      WeiChat/src/main/res/layout/activity_test.xml
  38. 36 0
      WeiChat/src/main/res/layout/item_error_mag.xml
  39. 7 4
      WeiChat/src/main/res/layout/recycler_empty_view.xml
  40. 2 2
      WeiChat/src/main/res/menu/menu_work_home.xml
  41. 2 2
      WeiChat/src/main/res/values/strings.xml

+ 1 - 1
WeiChat/build.gradle

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

+ 0 - 21
WeiChat/src/main/java/com/xzjmyk/pm/activity/BdLocationHelper.java

@@ -9,7 +9,6 @@ import com.baidu.location.LocationClient;
 import com.baidu.location.LocationClientOption;
 import com.baidu.location.Poi;
 import com.xzjmyk.pm.activity.sp.LocationSp;
-import com.xzjmyk.pm.activity.ui.erp.util.alarm.AlarmManage;
 
 import java.util.List;
 
@@ -30,7 +29,6 @@ public class BdLocationHelper {
     private List<Poi> pois;
     private int scanSpan = 20 * 1000;
     private long oldTime = 0;
-    private AlarmManage manage;
 
     BdLocationHelper(Context context) {
         mContext = context;
@@ -143,31 +141,12 @@ public class BdLocationHelper {
             if (listener != null) {
                 listener.result(true);
             }
-//            reckonAlarm();
         }
     };
 
     private static final long INTERVAL_TIME = 60000;//间隔时间
     private int type = 1;//1.内勤  2.外勤
 
-    /*计算提醒*/
-    private void reckonAlarm() {
-        if (oldTime != 0 && (System.currentTimeMillis() - oldTime) < INTERVAL_TIME) {//不在规定时间刷新,不记录数据
-            return;
-        }
-        oldTime = System.currentTimeMillis();
-        switch (type) {
-            case 1:
-                if (manage == null)
-                    manage = new AlarmManage();
-                manage.reckonNextAlarm();
-                break;
-            case 2:
-                //TODO 外勤签到
-
-                break;
-        }
-    }
 
 
     public String getName() {

+ 7 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/ComGriddataInsideAdapter.java

@@ -80,8 +80,13 @@ public class ComGriddataInsideAdapter extends BaseAdapter {
             viewHolder.list_tv.setText(mGridconfigsBean.get(position).getDG_CAPTION());
             try {
                 if (griddataBeans.getString(mGridconfigsBean.get(position).getDG_FIELD()) != null) {
-                    viewHolder.value_tv.setText(griddataBeans.getString(mGridconfigsBean.get(position).getDG_FIELD()));
-                    Log.i("mmm",mGridconfigsBean.get(position).getDG_FIELD());
+                    if (!griddataBeans.getString(mGridconfigsBean.get(position).getDG_FIELD()).equals("null")){
+                        viewHolder.value_tv.setText(griddataBeans.getString(mGridconfigsBean.get(position).getDG_FIELD()));
+                        Log.i("mmm",mGridconfigsBean.get(position).getDG_FIELD());
+                    }else {
+                        viewHolder.value_tv.setText("");
+                    }
+
                 } else {
                     viewHolder.value_tv.setText("");
                 }
@@ -94,7 +99,6 @@ public class ComGriddataInsideAdapter extends BaseAdapter {
     }
 
     class ViewHolder {
-        TextView detail_title;
         TextView list_tv;
         TextView value_tv;
 

+ 11 - 9
WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/CommonDocApprovalFlowAdapter.java

@@ -87,12 +87,11 @@ public class CommonDocApprovalFlowAdapter extends BaseAdapter {
         int datanum = mCommonApprovalFlowBean.getData().size();
         int processnum = mCommonApprovalFlowBean.getProcesss().size();
         viewHolder.AppFlowName.setText(mCommonApprovalFlowBean.getData().get(getCount() - position - 1).getJP_NODEDEALMANNAME());
-        LogUtil.d(JSON.toJSONString(im_ids));
         if (im_ids == null || im_ids.get(getCount() - position - 1).equals("")
-                ||im_ids.get(getCount() - position - 1).equals("0")) {
+                || im_ids.get(getCount() - position - 1).equals("0")) {
            // viewHolder.AppFlowPhoto.setImageDrawable(new BitmapDrawable());
             String imageUri = "drawable://" + R.drawable.common_header_boy;
-            AvatarHelper.getInstance().display(imageUri, viewHolder.AppFlowPhoto, true);
+            AvatarHelper.getInstance().display(imageUri,viewHolder.AppFlowPhoto,true);
 
         } else {
 //            ImageLoader.getInstance().displayImage(url, viewHolder.AppFlowPhoto, MyApplication.mAvatarRoundImageOptions);
@@ -122,11 +121,12 @@ public class CommonDocApprovalFlowAdapter extends BaseAdapter {
 
                     final int i = position - (datanum - nodesnum);
                     //当有审批时判断有没有审批语
-                    if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_dealResult() != null &&
-                            mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_nodeDescription() != null) {
+                    if (mCommonApprovalFlowBean.getNodes().get(datanum -position -1).getJn_dealResult() != null &&
+                            mCommonApprovalFlowBean.getNodes().get(datanum -position -1).getJn_nodeDescription() != null) {
                         viewHolder.AppFlowDescriptionll.setVisibility(View.VISIBLE);
                         viewHolder.AppFlowDescriptiontv.setTextColor(mContext.getResources().getColor(R.color.done_approval));
-                        viewHolder.AppFlowDescriptiontv.setText("( " + mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_nodeDescription().toString() + " )");
+                        viewHolder.AppFlowDescriptiontv.setText("( " + mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_nodeDescription().toString() + " )");
+                        final String des_msg = mCommonApprovalFlowBean.getNodes().get(datanum -position -1).getJn_nodeDescription().toString();
                         viewHolder.AppFlowDescriptionll.setOnClickListener(new View.OnClickListener() {
                             //点击查看详细批语
                             @Override
@@ -134,18 +134,20 @@ public class CommonDocApprovalFlowAdapter extends BaseAdapter {
                                 new AlertDialog
                                         .Builder(mContext)
                                         .setTitle("审批语详情")
-                                        .setMessage("\t" + mCommonApprovalFlowBean.getNodes().get(i).getJn_nodeDescription().toString())
+                                        .setMessage("\t" + des_msg)
                                         .setPositiveButton("确定", null)
                                         .show();
                             }
                         });
-                    } else if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_dealResult().equals("不同意")) {
+                    }else {
+                        viewHolder.AppFlowDescriptiontv.setText("");
+                    }
+                }else if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_dealResult().equals("不同意")) {
                         viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
                         viewHolder.AppFlowStatus.setText("不同意");
                         viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
                         viewHolder.AppFlowTime.setText(mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_dealTime());
                     }
-                }
             } else if (position == (datanum - nodesnum - 1)) { //当前待处理的节点(nodes里面将要统计的数据)
                 if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum - 1)).getJn_dealResult().equals("同意")) {
                     viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);

+ 9 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/CommonDocMainMsgAdapter.java

@@ -77,10 +77,15 @@ public class CommonDocMainMsgAdapter extends BaseAdapter {
                 viewHolder.docmainmsg_list.setText(mFormconfigsBean.get(position).getFD_CAPTION());
                     try {
                         if (formdataBeans.getJSONObject(0).getString(mFormconfigsBean.get(position).getFD_FIELD()) != null) {
-                            Log.i("VALUE",mFormconfigsBean.get(position).getFD_FIELD().toString());
-                            viewHolder.docmainmsg_value.setText(formdataBeans.getJSONObject(0)
-                                    .getString(mFormconfigsBean.get(position).getFD_FIELD().toString()));
-                        } else {
+                            if (!formdataBeans.getJSONObject(0).getString(mFormconfigsBean.get(position).getFD_FIELD()).equals("null")){
+                                Log.i("VALUE",mFormconfigsBean.get(position).getFD_FIELD().toString());
+                                viewHolder.docmainmsg_value.setText(formdataBeans.getJSONObject(0)
+                                        .getString(mFormconfigsBean.get(position).getFD_FIELD().toString()));
+                            }else {
+                                viewHolder.docmainmsg_value.setText("");
+                            }
+
+                        } else  {
                             viewHolder.docmainmsg_value.setText("");
                         }
                     } catch (JSONException e) {

+ 108 - 79
WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/DailyDetailsApprovalFlowAdapter.java

@@ -23,6 +23,7 @@ import com.xzjmyk.pm.activity.helper.AvatarHelper;
 import com.xzjmyk.pm.activity.ui.erp.db.DBManager;
 import com.xzjmyk.pm.activity.ui.erp.entity.EmployeesEntity;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.util.ToastUtil;
 
 import java.util.List;
@@ -59,12 +60,20 @@ public class DailyDetailsApprovalFlowAdapter extends BaseAdapter {
     }
 
     public int getCount() {
-        return mCommonApprovalFlowBean == null ? 0 : mCommonApprovalFlowBean.getData().size();
+        if (ListUtils.isEmpty(mCommonApprovalFlowBean.getData())){
+            return mCommonApprovalFlowBean == null ? 0 : mCommonApprovalFlowBean.getNodes().size();
+        }else{
+            return mCommonApprovalFlowBean == null ? 0 : mCommonApprovalFlowBean.getData().size();
+        }
     }
 
     @Override
     public Object getItem(int position) {
-        return mCommonApprovalFlowBean.getData().get(position);
+        if (ListUtils.isEmpty(mCommonApprovalFlowBean.getData())){
+            return mCommonApprovalFlowBean.getNodes().get(position);
+        }else {
+            return mCommonApprovalFlowBean.getData().get(position);
+        }
     }
 
     @Override
@@ -92,90 +101,110 @@ public class DailyDetailsApprovalFlowAdapter extends BaseAdapter {
         }
 
         //ToDo 日报详情审批流过程显示,逻辑比较繁琐
+       if (!ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())   // TODO 兼容某些情况下data[]审批人信息为空的情况
+               && !ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss())
+               && mCommonApprovalFlowBean.getCurrentnode().getNodename() !=null
+               && ListUtils.isEmpty( mCommonApprovalFlowBean.getData())){
+           if (im_ids == null || im_ids.get(getCount() - position - 1).equals("")
+                   || im_ids.get(getCount() - position - 1).equals("0")) {
+               // viewHolder.AppFlowPhoto.setImageDrawable(new BitmapDrawable());
+               String imageUri = "drawable://" + R.drawable.common_header_boy;
+               AvatarHelper.getInstance().display(imageUri, viewHolder.AppFlowPhoto, true);
 
-        //获取 已审批节点数量 和总审批节点数
-        final int nodesnum = mCommonApprovalFlowBean.getNodes().size();
-        int datanum = mCommonApprovalFlowBean.getData().size();
-        int processnum = mCommonApprovalFlowBean.getProcesss().size();
-        viewHolder.AppFlowName.setText(mCommonApprovalFlowBean.getData().get(getCount() - position - 1).getJP_NODEDEALMANNAME());
-        if (im_ids != null ) {
-            if ( im_ids.get(getCount() - position - 1).equals("")){
-                Resources r = mContext.getResources();
-                String url = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"
-                        + r.getResourcePackageName(R.drawable.common_header_boy) + "://"
-                        + r.getResourceTypeName(R.drawable.common_header_boy) + "://"
-                        + r.getResourceEntryName(R.drawable.common_header_boy)).toString();
-                ImageLoader.getInstance().displayImage(url, viewHolder.AppFlowPhoto, MyApplication.mAvatarRoundImageOptions);
-            }
+           } else {
+//            ImageLoader.getInstance().displayImage(url, viewHolder.AppFlowPhoto, MyApplication.mAvatarRoundImageOptions);
+               AvatarHelper.getInstance().display(im_ids.get(getCount() - position - 1), viewHolder.AppFlowPhoto, true, false);//显示圆角图片
+
+           }
+           viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.done_approval));
+           viewHolder.AppFlowStatus.setText("已审批");
+           viewHolder.AppFlowName.setText(mCommonApprovalFlowBean.getNodes().get(getCount() - position - 1).getJn_dealManName());
+           viewHolder.AppFlowTime.setText(mCommonApprovalFlowBean.getNodes()
+                   .get(mCommonApprovalFlowBean.getNodes().size() - position - 1).getJn_dealTime());
+           viewHolder.AppFlowNode.setImageResource(R.drawable.node_finished3);
+       }else {
+           //获取 已审批节点数量 和总审批节点数
+           final int nodesnum = mCommonApprovalFlowBean.getNodes().size();
+           final int datanum = mCommonApprovalFlowBean.getData().size();
+           int processnum = mCommonApprovalFlowBean.getProcesss().size();
+           viewHolder.AppFlowName.setText(mCommonApprovalFlowBean.getData().get(getCount() - position - 1).getJP_NODEDEALMANNAME());
 
-            else {
+           if (im_ids == null || im_ids.get(getCount() - position - 1).equals("")
+                   || im_ids.get(getCount() - position - 1).equals("0")) {
+               // viewHolder.AppFlowPhoto.setImageDrawable(new BitmapDrawable());
+               String imageUri = "drawable://" + R.drawable.common_header_boy;
+               AvatarHelper.getInstance().display(imageUri, viewHolder.AppFlowPhoto, true);
+
+           } else {
 //            ImageLoader.getInstance().displayImage(url, viewHolder.AppFlowPhoto, MyApplication.mAvatarRoundImageOptions);
-                AvatarHelper.getInstance().display(im_ids.get(getCount() - position - 1), viewHolder.AppFlowPhoto, true, false);//显示圆角图片
-            }
+               AvatarHelper.getInstance().display(im_ids.get(getCount() - position - 1), viewHolder.AppFlowPhoto, true, false);//显示圆角图片
 
-        }
+           }
 
-       // TODO  审批流倒序排列
-        if (nodesnum == 0) {
-            if (mCommonApprovalFlowBean.getCurrentnode().getNodename()
-                    .equals(mCommonApprovalFlowBean.getData().get(getCount() - position - 1).getJP_NODENAME())) {
-                viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
-                viewHolder.AppFlowStatus.setText("待审批");
-                viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
-                viewHolder.AppFlowTime.setText("");
-            } else {
-                viewHolder.AppFlowStatus.setText("");
-                viewHolder.AppFlowNode.setImageResource(R.drawable.node_none3);
-            }
-        } else {
-            if (position > (datanum - nodesnum - 1)) { //已走过审批流的节点
-                if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_dealResult().equals("同意")) {
-                    viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.done_approval));
-                    viewHolder.AppFlowStatus.setText("已审批");
-                    viewHolder.AppFlowNode.setImageResource(R.drawable.node_finished3);
-                    viewHolder.AppFlowTime.setText(mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_dealTime());
-
-                    final int i = position - (datanum - nodesnum);
-                    //当有审批时判断有没有审批语
-                    if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_dealResult() != null &&
-                            mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_nodeDescription() != null) {
-                        viewHolder.AppFlowDescriptionll.setVisibility(View.VISIBLE);
-                        viewHolder.AppFlowDescriptiontv.setTextColor(mContext.getResources().getColor(R.color.done_approval));
-                        viewHolder.AppFlowDescriptiontv.setText("( " + mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_nodeDescription().toString() + " )");
-                        viewHolder.AppFlowDescriptionll.setOnClickListener(new View.OnClickListener() {
-                            //点击查看详细批语
-                            @Override
-                            public void onClick(View v) {
-                                new AlertDialog
-                                        .Builder(mContext)
-                                        .setTitle("审批语详情")
-                                        .setMessage("\t" + mCommonApprovalFlowBean.getNodes().get(i).getJn_nodeDescription().toString())
-                                        .setPositiveButton("确定", null)
-                                        .show();
-                            }
-                        });
-                } else if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_dealResult().equals("不同意")) {
-                        viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
-                        viewHolder.AppFlowStatus.setText("不同意");
-                        viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
-                        viewHolder.AppFlowTime.setText(mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_dealTime());
-                    }
-                }
-            } else if (position == (datanum - nodesnum - 1)) { //当前待处理的节点(nodes里面将要统计的数据)
-                    if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum - 1)).getJn_dealResult().equals("同意")) {
-                        viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
-                        viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
-                        viewHolder.AppFlowStatus.setText("待审批");
-                        viewHolder.AppFlowTime.setText("");
-                    }
-            } else if (position < (datanum - nodesnum - 1)) {    //未走过审批流的节点
-                    viewHolder.AppFlowStatus.setText("");
-                    viewHolder.AppFlowNode.setImageResource(R.drawable.node_none3);
-                    viewHolder.AppFlowTime.setText("");
-            }
-        }
+           // TODO  审批流倒序排列
+           if (nodesnum == 0) {
+               if (mCommonApprovalFlowBean.getCurrentnode().getNodename()
+                       .equals(mCommonApprovalFlowBean.getData().get(getCount() - position - 1).getJP_NODENAME())) {
+                   viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
+                   viewHolder.AppFlowStatus.setText("待审批");
+                   viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
+                   viewHolder.AppFlowTime.setText("");
+               } else {
+                   viewHolder.AppFlowStatus.setText("");
+                   viewHolder.AppFlowNode.setImageResource(R.drawable.node_none3);
+               }
+           } else {
+               if (position > (datanum - nodesnum - 1)) { //已走过审批流的节点
+                   if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_dealResult().equals("同意")) {
+                       viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.done_approval));
+                       viewHolder.AppFlowStatus.setText("已审批");
+                       viewHolder.AppFlowNode.setImageResource(R.drawable.node_finished3);
+                       viewHolder.AppFlowTime.setText(mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_dealTime());
+
+                       //当有审批时判断有没有审批语
+                       if (mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_dealResult() != null &&
+                               mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_nodeDescription() != null) {
+                           viewHolder.AppFlowDescriptionll.setVisibility(View.VISIBLE);
+                           viewHolder.AppFlowDescriptiontv.setTextColor(mContext.getResources().getColor(R.color.done_approval));
+                           viewHolder.AppFlowDescriptiontv.setText("( " + mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_nodeDescription().toString() + " )");
+                           final String des_msg = mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_nodeDescription().toString();
+                           viewHolder.AppFlowDescriptionll.setOnClickListener(new View.OnClickListener() {
+                               //点击查看详细批语
+                               @Override
+                               public void onClick(View v) {
+                                   new AlertDialog
+                                           .Builder(mContext)
+                                           .setTitle("审批语详情")
+                                           .setMessage("\t" + des_msg)
+                                           .setPositiveButton("确定", null)
+                                           .show();
+                               }
+                           });
+                       } else {
+                           viewHolder.AppFlowDescriptiontv.setText("");
+                       }
+                   } else if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum)).getJn_dealResult().equals("不同意")) {
+                       viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
+                       viewHolder.AppFlowStatus.setText("不同意");
+                       viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
+                       viewHolder.AppFlowTime.setText(mCommonApprovalFlowBean.getNodes().get(datanum - position - 1).getJn_dealTime());
+                   }
 
+               } else if (position == (datanum - nodesnum - 1)) { //当前待处理的节点(nodes里面将要统计的数据)
+                   if (mCommonApprovalFlowBean.getNodes().get(position - (datanum - nodesnum - 1)).getJn_dealResult().equals("同意")) {
+                       viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
+                       viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
+                       viewHolder.AppFlowStatus.setText("待审批");
+                       viewHolder.AppFlowTime.setText("");
+                   }
+               } else if (position < (datanum - nodesnum - 1)) {    //未走过审批流的节点
+                   viewHolder.AppFlowStatus.setText("");
+                   viewHolder.AppFlowNode.setImageResource(R.drawable.node_none3);
+                   viewHolder.AppFlowTime.setText("");
+               }
+           }
 
+       }
         //TODO 审批流顺序排列
         /*
         审批流顺序排列

+ 0 - 163
WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/WorkDailyApprovalFlowAdapter.java

@@ -1,163 +0,0 @@
-package com.xzjmyk.pm.activity.adapter;
-
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.bean.oa.CommonApprovalFlowBean;
-import com.xzjmyk.pm.activity.ui.erp.db.DBManager;
-
-import java.util.List;
-
-
-/**
- * Created by FANGlh on 2016/11/4.
- */
-public class WorkDailyApprovalFlowAdapter extends BaseAdapter {
-    private CommonApprovalFlowBean mCommonApprovalFlowBean;
-    private Context mContext;
-    DBManager manager;
-
-    public WorkDailyApprovalFlowAdapter(Context mContext) {
-        manager = new DBManager(mContext);
-        this.mContext = mContext;
-
-
-    }
-
-    public CommonApprovalFlowBean getmCommonApprovalFlowBean() {
-        return mCommonApprovalFlowBean;
-    }
-
-    public void setmCommonApprovalFlowBean(CommonApprovalFlowBean mCommonApprovalFlowBeanList) {
-        this.mCommonApprovalFlowBean = mCommonApprovalFlowBeanList;
-    }
-
-    public int getCount() {
-        return mCommonApprovalFlowBean == null ? 0 : mCommonApprovalFlowBean.getData().size();
-    }
-
-    @Override
-    public Object getItem(int position) {
-        return mCommonApprovalFlowBean.getData().get(position);
-    }
-
-    @Override
-    public long getItemId(int position) {
-
-        return position;
-    }
-
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
-        ViewHolder viewHolder = null;
-        if (convertView == null) {
-            convertView = View.inflate(mContext, R.layout.item_daily_details_approval_flow, null);
-            viewHolder = new ViewHolder();
-            viewHolder.AppFlowNode = (ImageView) convertView.findViewById(R.id.item_daily_details_approval_flow_node_img);
-            viewHolder.AppFlowPhoto = (ImageView) convertView.findViewById(R.id.item_daily_details_approval_flow_photo_img);
-            viewHolder.AppFlowName = (TextView) convertView.findViewById(R.id.item_daily_details_approval_flow_name_tv);
-            viewHolder.AppFlowStatus = (TextView) convertView.findViewById(R.id.item_daily_details_approval_flow_status_tv);
-            viewHolder.AppFlowTime = (TextView) convertView.findViewById(R.id.item_daily_details_approval_flow_time_tv);
-            viewHolder.AppFlowDescriptionll = (LinearLayout) convertView.findViewById(R.id.Description_ll);
-            viewHolder.AppFlowDescriptiontv = (TextView) convertView.findViewById(R.id.item_daily_details_approval_flow_statusDescription_tv);
-            convertView.setTag(viewHolder);
-        } else {
-            viewHolder = (ViewHolder) convertView.getTag();
-        }
-
-        //ToDo 单据详情审批流过程显示,逻辑比较繁琐
-
-        //获取 已审批节点数量 和总审批节点数
-        int nodesnum = mCommonApprovalFlowBean.getNodes().size();
-        int datanum = mCommonApprovalFlowBean.getData().size();
-        viewHolder.AppFlowName.setText(mCommonApprovalFlowBean.getData().get(position).getJP_NODEDEALMANNAME());
-        //当审批流为空时默认第一个审批人为审批节点
-        if(mCommonApprovalFlowBean.getNodes() == null ||nodesnum <= 0){
-           viewHolder.AppFlowTime.setText(null);
-            viewHolder.AppFlowStatus.setText(null);
-            viewHolder.AppFlowName.setText(mCommonApprovalFlowBean.getData().get(position).getJP_NODEDEALMANNAME());
-            if(position == 0){
-                viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
-                viewHolder.AppFlowStatus.setText("待审批");
-                viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
-            }
-        }else{
-            if (position < nodesnum && datanum > 0){
-                String approval_status = mCommonApprovalFlowBean.getNodes().get(position).getJn_dealResult();
-                if (!approval_status.isEmpty() && approval_status.equals("同意")) {
-                    viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.done_approval));
-                    viewHolder.AppFlowStatus.setText("已审批");
-                    viewHolder.AppFlowNode.setImageResource(R.drawable.node_finished3);
-                    viewHolder.AppFlowTime.setText(mCommonApprovalFlowBean.getNodes().get(position).getJn_dealTime());
-                    if(mCommonApprovalFlowBean.getNodes().get(position).getJn_nodeDescription() != null){
-                        viewHolder.AppFlowDescriptionll.setVisibility(View.VISIBLE);
-                        viewHolder.AppFlowDescriptiontv.setText(mCommonApprovalFlowBean.getNodes().get(position).getJn_nodeDescription().toString());
-                    }
-                }
-
-                else if(!approval_status.isEmpty() && approval_status.equals("不同意")){
-                    viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
-                    viewHolder.AppFlowStatus.setText("不同意");
-                    viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
-                    viewHolder.AppFlowTime.setText(mCommonApprovalFlowBean.getNodes().get(position).getJn_dealTime());
-                }
-
-                else if(position == (nodesnum -1)) {
-
-                }
-
-                //当节点为none状态是gone掉默认审批状态和时间
-                else {
-                    viewHolder.AppFlowStatus.setText(null);
-                    viewHolder.AppFlowTime.setText(null);
-                    viewHolder.AppFlowNode.setImageResource(R.drawable.node_none3);
-                }
-            } //当节点是待审批状态时
-            else if(position == nodesnum && position <=datanum && mCommonApprovalFlowBean.getData().get(position).getJP_NODENAME().equals(mCommonApprovalFlowBean.getCurrentnode().getNodename())){
-                viewHolder.AppFlowStatus.setTextColor(mContext.getResources().getColor(R.color.no_approval));
-                viewHolder.AppFlowStatus.setText("待审批");
-                viewHolder.AppFlowNode.setImageResource(R.drawable.node_wait3);
-            }
-
-            //TODO 从im获取头像
-       /* try {
-            if (manager == null) manager = new DBManager(mContext);
-            String whichsys = CommonUtil.getSharedPreferences(mContext, "erp_master");
-            String emCode = mCommonApprovalFlowBean.get(position).getJn_dealManId();
-            String[] selectionArgs = {emCode, whichsys};
-            String selection = "em_code=? and whichsys=?";
-            //获取数据库数据
-            EmployeesEntity bean = manager.selectForEmployee(selectionArgs, selection);
-            if (bean!=null){
-                String imId = String.valueOf(bean.getEm_IMID());
-                Log.i("todo", "imId=" + imId);
-                AvatarHelper.getInstance().displayAvatar(imId, viewHolder.AppFlowPhoto, true);
-            }
-
-        } catch (Exception e) {
-
-
-        }*/
-            }
-
-
-        return convertView;
-    }
-
-    class ViewHolder {
-        ImageView AppFlowNode;
-        ImageView AppFlowPhoto;
-        TextView AppFlowName;
-        TextView AppFlowStatus;
-        TextView AppFlowTime;
-        LinearLayout AppFlowDescriptionll;
-        TextView AppFlowDescriptiontv;
-
-    }
-}

+ 121 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/ErrorMagDao.java

@@ -0,0 +1,121 @@
+package com.xzjmyk.pm.activity.db.dao;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.SQLException;
+import android.database.sqlite.SQLiteDatabase;
+import android.util.Log;
+
+import com.xzjmyk.pm.activity.AppConfig;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.ui.erp.db.DBOpenHelper;
+import com.xzjmyk.pm.activity.ui.erp.entity.ErrorEntity;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.util.TimeUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2016/12/1.
+ */
+
+public class ErrorMagDao {
+    private static ErrorMagDao instance;
+    private DBOpenHelper helper = null;
+    private String tibleName = "error_mag";
+
+    public static ErrorMagDao getInstance() {
+        if (instance == null) {
+            instance = new ErrorMagDao();
+        }
+        return instance;
+    }
+
+    private ErrorMagDao() {
+        helper = new DBOpenHelper(MyApplication.getInstance());
+    }
+
+    //获取当天全部数据
+    public List<ErrorEntity> queryAll() {
+        SQLiteDatabase db = null;
+        Cursor cursor = null;
+        List<ErrorEntity> beans = null;
+        try {
+            helper = new DBOpenHelper(MyApplication.getInstance());
+            db = helper.getReadableDatabase();
+            String[] columns = {"id", "time", "title", "msg"};
+            String selection = null;
+            String[] selecttionArg = null;
+            cursor = db.query(tibleName, columns, selection, selecttionArg, null, null, null);
+            ErrorEntity bean = null;
+            beans = new ArrayList<>();
+            while (cursor.moveToNext()) {
+                bean = new ErrorEntity();
+                bean.setId(cursor.getInt(0));
+                bean.setTime(cursor.getString(1));
+                bean.setTitle(cursor.getString(2));
+                bean.setMsg(cursor.getString(3));
+                beans.add(bean);
+            }
+        } catch (SQLException e) {
+            show("SQLException=" + e.getMessage());
+        } catch (Exception e) {
+            show("Exception=" + e.getMessage());
+        } finally {
+            if (db != null)
+                db.close();
+            if (cursor != null)
+                cursor.close();
+            return beans;
+        }
+    }
+
+    //插入一个数据
+    public boolean insert(ErrorEntity bean) {
+        delete(bean);
+        SQLiteDatabase db = null;
+        long i = 0;
+        try {
+            helper = new DBOpenHelper(MyApplication.getInstance());
+            db = helper.getWritableDatabase();
+            ContentValues values = new ContentValues();
+            values.put("time", bean.getTime());
+            values.put("title", bean.getTitle());
+            values.put("msg", bean.getMsg());
+            i = db.insert(tibleName, null, values);
+        } catch (SQLException e) {
+            show("SQLException=" + e.getMessage());
+        } catch (Exception e) {
+            show("Exception=" + e.getMessage());
+        } finally {
+            if (db != null)
+                db.close();
+            return i > 0;
+        }
+    }
+
+    private void delete(ErrorEntity bean) {
+        SQLiteDatabase db = null;
+        long i = 0;
+        try {
+            db = helper.getWritableDatabase();
+            String time = TimeUtils.f_long_2_str(TimeUtils.f_str_2_long(bean.getTime()) - 60 * 60 * 1000);//前面1小时
+            String where = "time < ?";
+            String[] whereArg = {time};
+            db.delete(tibleName, where, whereArg);
+        } catch (SQLException e) {
+            show("SQLException=" + e.getMessage());
+        } catch (Exception e) {
+            show("Exception=" + e.getMessage());
+        } finally {
+            if (db != null)
+                db.close();
+        }
+    }
+
+    private void show(String str) {
+        if (StringUtils.isEmpty(str) || !AppConfig.DEBUG) return;
+        Log.i("gongpengming", str);
+    }
+}

+ 46 - 9
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/MissionDao.java → WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/MissionDao.java

@@ -1,8 +1,7 @@
-package com.xzjmyk.pm.activity.ui.erp.adapter;
+package com.xzjmyk.pm.activity.db.dao;
 
 import android.content.ContentValues;
 import android.database.Cursor;
-import android.database.SQLException;
 import android.database.sqlite.SQLiteDatabase;
 import android.util.Log;
 
@@ -26,14 +25,50 @@ import java.util.List;
 public class MissionDao {
     private DBOpenHelper helper = null;
     private String tibleName = "mission";
+    private static MissionDao instance;
+
+    public static MissionDao getInstance() {
+        if (instance == null) {
+            synchronized (MissionDao.class) {
+                instance = new MissionDao();
+            }
+        }
+        return instance;
+    }
 
     public MissionDao() {
-        helper = new DBOpenHelper(MyApplication.getInstance());
 
     }
 
+
+    public boolean upStatus(int id, int status) {
+        helper = new DBOpenHelper(MyApplication.getInstance());
+        SQLiteDatabase db = null;
+        long i = 0;
+        try {
+            String master = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master");
+            String emcode = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
+            if (StringUtils.isEmpty(master) || StringUtils.isEmpty(emcode)) return false;
+            db = helper.getWritableDatabase();
+            ContentValues values = new ContentValues();
+            values.put("status",status);
+            String where = "master=? and emcode=? and id=? ";
+            String[] whereArgs = {master, emcode, String.valueOf(id)};
+            i = db.update(tibleName, values, where, whereArgs);
+        } catch (android.database.SQLException e) {
+            show("SQLException=" + e.getMessage());
+        } catch (Exception e) {
+            show("Exception=" + e.getMessage());
+        } finally {
+            if (db != null)
+                db.close();
+            return i > 0;
+        }
+    }
+
     //获取当天全部数据
     public List<MissionPlanEntity> queryByEnCode() {
+        helper = new DBOpenHelper(MyApplication.getInstance());
         SQLiteDatabase db = null;
         Cursor cursor = null;
         List<MissionPlanEntity> missions = null;
@@ -65,7 +100,7 @@ public class MissionDao {
                 mission.setStatus(cursor.getInt(8));
                 missions.add(mission);
             }
-        } catch (SQLException e) {
+        } catch (android.database.SQLException e) {
             show("SQLException=" + e.getMessage());
         } catch (Exception e) {
             show("Exception=" + e.getMessage());
@@ -82,6 +117,7 @@ public class MissionDao {
     //更新或是创建一个数据
     public boolean updataOrCreate(MissionPlanEntity mission) {
         if (mission == null) return false;
+        helper = new DBOpenHelper(MyApplication.getInstance());
         if (mission.getStatus() > 0) {//更新
             return updata(mission);
         } else {//创建
@@ -90,6 +126,7 @@ public class MissionDao {
     }
 
     public boolean updataOrCreate(List<MissionPlanEntity> entities) {
+        helper = new DBOpenHelper(MyApplication.getInstance());
         return insertAll(entities);
     }
 
@@ -130,7 +167,7 @@ public class MissionDao {
                 show("i====" + i);
             }
             db.setTransactionSuccessful();
-        } catch (SQLException e) {
+        } catch (android.database.SQLException e) {
             show("SQLException=" + e.getMessage());
         } catch (Exception e) {
             show("Exception=" + e.getMessage());
@@ -159,7 +196,7 @@ public class MissionDao {
                 i = db.delete(tibleName, where, whereArg);
             }
             db.setTransactionSuccessful();
-        } catch (SQLException e) {
+        } catch (android.database.SQLException e) {
             show("SQLException=" + e.getMessage());
         } catch (Exception e) {
             show("Exception=" + e.getMessage());
@@ -191,7 +228,7 @@ public class MissionDao {
             String where = "master=? and emcode=? and id=? ";
             String[] whereArgs = {master, emcode, String.valueOf(mission.getId())};
             i = db.update(tibleName, values, where, whereArgs);
-        } catch (SQLException e) {
+        } catch (android.database.SQLException e) {
             show("SQLException=" + e.getMessage());
         } catch (Exception e) {
             show("Exception=" + e.getMessage());
@@ -227,7 +264,7 @@ public class MissionDao {
             values.put("status", 0);
             values.put("date", getDateByString(mission.getVisitTime()));//拜访日期
             i = db.insert(tibleName, null, values);
-        } catch (SQLException e) {
+        } catch (android.database.SQLException e) {
             show("SQLException=" + e.getMessage());
         } catch (Exception e) {
             show("Exception=" + e.getMessage());
@@ -250,4 +287,4 @@ public class MissionDao {
         return TimeUtils.s_long_2_str(TimeUtils.f_str_2_long(date));
     }
 
-}
+}

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

@@ -56,12 +56,12 @@ public class SigninDao {
             values.put("workTime", bean.getWorkTime());
             values.put("master", master);
             values.put("offTime", bean.getOffTime());
-            if (StringUtils.isEmpty(bean.getWorkSignin()) || bean.getWorkSignin().compareTo(bean.getWorkTime()) > 0) {
+            if (StringUtils.isEmpty(bean.getWorkSignin()) || bean.getWorkSignin().compareTo(bean.getWorkTime()) >= 0) {
                 values.put("workSignin", "");
             } else {
                 values.put("workSignin", bean.getWorkSignin());
             }
-            if (StringUtils.isEmpty(bean.getOffSignin()) || bean.getOffSignin().compareTo(bean.getOffTime()) < 0) {
+            if (StringUtils.isEmpty(bean.getOffSignin()) || bean.getOffSignin().compareTo(bean.getOffTime()) <= 0) {
                 values.put("offSignin", "");
             } else {
                 values.put("offSignin", bean.getOffSignin());
@@ -74,11 +74,11 @@ public class SigninDao {
             String[] whereArgs = {emCode, master, bean.getStartTime(), bean.getEndTime()};
             item = db.update(titleName, values, where, whereArgs);
         } catch (SQLException e) {
-            testShow("SQLException="+e.getMessage());
+            testShow("SQLException=" + e.getMessage());
             e.printStackTrace();
             return false;
         } catch (Exception e) {
-            testShow("Exception="+e.getMessage());
+            testShow("Exception=" + e.getMessage());
             e.printStackTrace();
             return false;
         } finally {
@@ -225,8 +225,8 @@ public class SigninDao {
     }
 
 
-    private void testShow( String message) {
+    private void testShow(String message) {
         if (!AppConfig.DEBUG || StringUtils.isEmpty(message)) return;
-        Log.i("gongpengming",  message);
+        Log.i("gongpengming", message);
     }
 }

+ 2 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/db/dao/TableConstantDao.java

@@ -76,5 +76,6 @@ public class TableConstantDao {
 		return null;
 	}
 
-	
+
+
 }

+ 0 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/SplashActivity.java

@@ -28,7 +28,6 @@ import com.xzjmyk.pm.activity.ui.account.RegisterActivity;
 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.LogUtil;
-import com.xzjmyk.pm.activity.ui.erp.util.alarm.AlarmManage;
 import com.xzjmyk.pm.activity.util.DeviceInfoUtil;
 import com.xzjmyk.pm.activity.util.Md5Util;
 import com.xzjmyk.pm.activity.volley.ObjectResult;
@@ -74,9 +73,6 @@ public class SplashActivity extends BaseActivity {
             }
         });
         mSelectLv.setVisibility(View.INVISIBLE);
-        //TODO gongpengming 先关闭
-//        AlarmManage manage = new AlarmManage();
-//        manage.setSigninAlarm(this);
         initConfig();// 初始化配置
         
 

+ 23 - 13
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/CommonDocDetailsActivity.java

@@ -369,10 +369,10 @@ public class CommonDocDetailsActivity extends BaseActivity {
                               im_ids.add(imId);
                           } else {
                               im_ids.add("");
-                              ToastMessage("审批流头像获取异常,已显示为默认");
+//                              ToastMessage("审批流头像获取异常,已显示为默认");
                           }
-                          Log.i("imids", im_ids.toString());
                           mCommonDocApprovalFlowAdapter.setIm_ids(im_ids);
+                          Log.i("afimids", im_ids.toString());
                       }catch (Exception e){
                           e.printStackTrace();
                       }
@@ -395,18 +395,21 @@ public class CommonDocDetailsActivity extends BaseActivity {
      */
     public void ShowApplyPeoMsg() {
         // TODO 当单据是提交状态 触发审批流时获取
-            if (!ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes()) && !ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss())) {
+            if ( !ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss())) {
                 String em_number = mCommonApprovalFlowBean.getProcesss().get(0).getJp_launcherId();   //申请人编号 从process获取
                 name_tv.setText(mCommonApprovalFlowBean.getProcesss().get(0).getJp_launcherName());  //申请人姓名 从process获取
-                int data_num = mCommonApprovalFlowBean.getData().size();
-                int nodes_num = mCommonApprovalFlowBean.getNodes().size();
-                String app_status = mCommonApprovalFlowBean.getNodes().get(nodes_num - 1).getJn_dealResult();
-                if ((nodes_num == data_num && nodes_num > 0) &&
-                        mCommonApprovalFlowBean.getNodes().get(data_num - 1).getJn_dealResult() != null &&
-                        mCommonApprovalFlowBean.getNodes().get(data_num - 1).getJn_dealResult().equals("同意")) {
-                    status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.approval));
-                    status_tv.setText("已审批");
-                } else {
+                if (!ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())){
+                    int data_num = mCommonApprovalFlowBean.getData().size();
+                    int nodes_num = mCommonApprovalFlowBean.getNodes().size();
+                    String app_status = mCommonApprovalFlowBean.getNodes().get(nodes_num - 1).getJn_dealResult();
+                    if ((nodes_num == data_num && nodes_num > 0) &&
+                            mCommonApprovalFlowBean.getNodes().get(data_num - 1).getJn_dealResult() != null &&
+                            mCommonApprovalFlowBean.getNodes().get(data_num - 1).getJn_dealResult().equals("同意")) {
+                        status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.approval));
+                        status_tv.setText("已审批");
+                    }
+                }
+                else {
                     status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.no_approval));
                     status_tv.setText("待审批");
                 }
@@ -440,7 +443,14 @@ public class CommonDocDetailsActivity extends BaseActivity {
                       e.printStackTrace();
                   }
                 }
-            } else {
+            } else if (ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss())
+                    && ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())
+                    && ListUtils.isEmpty(mCommonApprovalFlowBean.getData())){
+
+                status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.titleBlue));
+                status_tv.setText("未提交");
+              
+            }else {
                 status_tv.setTextColor(getApplicationContext().getResources().getColor(R.color.no_approval));
                 status_tv.setText("待审批");
             }

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

@@ -4,28 +4,20 @@ import android.annotation.TargetApi;
 import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
 import android.view.View;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
-import com.alibaba.fastjson.JSON;
 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.SelectBean;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
-import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.ui.erp.view.SwitchView;
-import com.xzjmyk.pm.activity.view.crouton.Crouton;
 
 import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -48,26 +40,7 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
     private RelativeLayout ualar_rl;//下班时间
     @ViewInject(R.id.alar_rl)
     private RelativeLayout alar_rl;
-    private boolean isAlarm;//判断是否为提醒
-    private boolean isAuto;//判断是否为自动
-    private String macAddress;
-    private boolean isMe = false;
-
-    private Handler handler = new Handler() {
-        @Override
-        public void handleMessage(Message msg) {
-            if (msg.what == 0x10) {
-                String message = msg.getData().getString("result");
-                if (JSON.parseObject(message).containsKey("success") && JSON.parseObject(message).getBoolean("success")) {
-                    isMe = true;
-                }
-            } else {
-                auto_signin_sw.setChecked(false);
-                auto_signin_sw.setIsClickAble(false);
-                CommonUtil.setSharedPreferences(ct, AUTO_SIGNIN, false);
-            }
-        }
-    };
+
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -78,12 +51,8 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
     }
 
     private void initView() {
-        if (getIntent() != null) {
-            macAddress = getIntent().getStringExtra("macAddress");
-        }
-        validatorMac();
-        isAlarm = CommonUtil.getSharedPreferencesBoolean(ct, ALARMA_CLICK, false);
-        isAuto = CommonUtil.getSharedPreferencesBoolean(ct, AUTO_SIGNIN, false);
+        boolean isAlarm = CommonUtil.getSharedPreferencesBoolean(ct, ALARMA_CLICK, false);
+        boolean isAuto = CommonUtil.getSharedPreferencesBoolean(ct, AUTO_SIGNIN, true);
         isalarma_sw.setChecked(isAlarm);
         auto_signin_sw.setChecked(isAuto);
         setTextColor(isAlarm);
@@ -98,24 +67,8 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
 
     }
 
-    private void validatorMac() {
-        if (StringUtils.isEmpty(macAddress)) return;
-        Map<String, Object> param = new HashMap<>();
-        param.put("macAddress", macAddress);
-        String url = CommonUtil.getSharedPreferences(ct, "erp_baseurl") + "mobile/addMobileMac.action";
-        param.put("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
-        param.put("master", CommonUtil.getSharedPreferences(ct, "erp_master"));
-        param.put("sessionUser", CommonUtil.getSharedPreferences(ct, "erp_username"));
-        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, 0x10, null, null, "get");
-    }
-
-
     @Override
     public void onClick(View view) {
-        if (!isAlarm) return;
         String pre = null;
         String[] time = getResources().getStringArray(R.array.alarm_time);
         int requestCode = 0;
@@ -152,16 +105,11 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
     public void onCheckedChanged(View view, boolean isChecked) {
         switch (view.getId()) {
             case R.id.isalarma_sw:
-                isAlarm = isChecked;
                 CommonUtil.setSharedPreferences(ct, ALARMA_CLICK, isChecked);
                 setTextColor(isChecked);
                 break;
             case R.id.auto_signin_sw:
-                if (isChecked && !isMe) {//不是我的手机
-                    Crouton.makeText(ct, "该设备不是考勤打卡常用设备");
-                    auto_signin_sw.setChecked(false);
-                } else
-                    CommonUtil.setSharedPreferences(ct, AUTO_SIGNIN, isChecked);
+                CommonUtil.setSharedPreferences(ct, AUTO_SIGNIN, isChecked);
                 break;
         }
     }
@@ -198,8 +146,8 @@ public class AlarmaActivity extends BaseActivity implements View.OnClickListener
 
     @TargetApi(Build.VERSION_CODES.HONEYCOMB)
     public void setTextColor(boolean clicked) {
-        tv_alar.setFocusable(clicked);
-        tv_ualar.setFocusable(clicked);
+        alar_rl.setClickable(clicked);
+        ualar_rl.setClickable(clicked);
         if (Build.VERSION.SDK_INT >= 9) {
             if (clicked) {
                 alar_rl.setAlpha(1f);

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

@@ -28,6 +28,7 @@ import com.xzjmyk.pm.activity.ui.erp.fragment.WorksFragment;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.Constants;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
 import com.xzjmyk.pm.activity.ui.erp.view.EmptyLayout;
 import com.xzjmyk.pm.activity.view.MyListView;
@@ -63,7 +64,6 @@ public class DailydetailsActivity extends BaseActivity {
     private DailyDetailsApprovalFlowAdapter mDailyDetailsApprovalFlowAdapter;
     private DailyDetailsWorkTaskAdapter mDailyDetailsWorkTaskAdapter;
     private CommonApprovalFlowBean mCommonApprovalFlowBean;
-    private CommonApprovalFlowBean.CurrentnodeBean currentnode;
 
     private List<WorkTaskBean> mWorkTaskBeanList;
     private EmptyLayout mEmptyLayput_approvalflow;
@@ -75,8 +75,8 @@ public class DailydetailsActivity extends BaseActivity {
     private final static int APPROVAL_FLOW_NODE = 102;
     private DBManager manager;
     private List<String> im_ids;
-    private TextView addDaily;
     private ImageView unsubmit_iv;
+    private TextView addDaily;
 
 
     @Override
@@ -210,7 +210,7 @@ public class DailydetailsActivity extends BaseActivity {
             switch(msg.what){
                 case APPROVAL_FLOW_NODE:
                     String result = msg.getData().getString("result");
-                    LogUtil.prinlnLongMsg("approvelnodemsg", result);
+                    LogUtil.prinlnLongMsg("wdaf_result", result);
                     try{
                         JSONObject resultJsonObject = new JSONObject(result);
                         //JSONArray dailynodeArray = resultJsonObject.getJSONArray("nodes");
@@ -220,8 +220,9 @@ public class DailydetailsActivity extends BaseActivity {
                             mCommonApprovalFlowBean = JSON.parseObject(resultJsonObject.toString(), CommonApprovalFlowBean.class);
                             LogUtil.prinlnLongMsg("mCommonApprovalFlowBean", mCommonApprovalFlowBean.toString());
                             if(mCommonApprovalFlowBean.getData().size()<=0 ){
-                                mEmptyLayput_approvalflow.showEmpty();
-                                ToastMessage("日报审批流数据获取异常");
+                                Showflownodata(mCommonApprovalFlowBean);
+//                                mEmptyLayput_approvalflow.showEmpty();
+//                                ToastMessage("日报审批流数据获取异常");
                             }else {
                                 //TODO 从im获取头像
                                 for (int i = 0; i < mCommonApprovalFlowBean.getData().size(); i++) {
@@ -248,7 +249,7 @@ public class DailydetailsActivity extends BaseActivity {
                                             im_ids.add(imId);
                                         }else {
                                             im_ids.add("");
-                                            ToastMessage("审批流头像获取异常,已显示为默认");
+//                                            ToastMessage("审批流头像获取异常,已显示为默认");
                                         }
                                     }catch (Exception e){
                                         e.printStackTrace();
@@ -267,7 +268,7 @@ public class DailydetailsActivity extends BaseActivity {
                             int datanum = mCommonApprovalFlowBean.getData().size();
                             if(nodesnum > 0 && datanum > 0 && nodesnum == datanum){
                                 if(mCommonApprovalFlowBean.getNodes().get(nodesnum-1).getJn_dealResult().equals("同意")){
-                                    wdd_status.setTextColor(mContext.getResources().getColor(R.color.approval));
+                                    wdd_status.setTextColor(getApplicationContext().getResources().getColor(R.color.approval));
                                     wdd_status.setText("已审批");
                                 }
                             }
@@ -313,6 +314,60 @@ public class DailydetailsActivity extends BaseActivity {
         }
     };
 
+    /**
+     * TODO 兼容data[]审批人信息为空的情况,UAS部门这里data全部异常,!!
+     * Todo nodesnum = datanum && 最终已审批状态显示
+     * @param mCommonApprovalFlowBean
+     */
+    private void Showflownodata(CommonApprovalFlowBean mCommonApprovalFlowBean) {
+        if(!ListUtils.isEmpty(mCommonApprovalFlowBean.getNodes())
+                && !ListUtils.isEmpty(mCommonApprovalFlowBean.getProcesss())
+                && mCommonApprovalFlowBean.getCurrentnode().getNodename() !=null) {
+            int uas_nodes_num = mCommonApprovalFlowBean.getNodes().size();
+            if (mCommonApprovalFlowBean.getNodes().get(uas_nodes_num - 1).getJn_name()
+                    .equals(mCommonApprovalFlowBean.getCurrentnode().getNodename())) {
+                //TODO 从im获取头像
+                for (int i = 0; i < mCommonApprovalFlowBean.getNodes().size(); i++) {
+                    if (manager == null) manager = new DBManager(mContext);
+                    String whichsys = CommonUtil.getSharedPreferences(mContext, "erp_master");
+                    String emCode = mCommonApprovalFlowBean.getNodes().get(i).getJn_dealManId();
+                    if (emCode.contains(",")) {
+//                                        im_ids.add("");
+                        String str[] = emCode.split(",");
+                        emCode = str[0];
+                        ToastMessage("多人审批,头像已显示为首个");   //该情况只有在测试账号情况下出现
+                    }
+                    //TODO 当处理当在Pc端不填写工作总结保存或提交时,在手机端查看详情界面这里出引起闪退:try 已解决
+                    try {
+                        String[] selectionArgs = {emCode, whichsys};
+                        String selection = "em_code=? and whichsys=? ";
+                        //获取数据库数据
+                        EmployeesEntity bean = manager.selectForEmployee(selectionArgs, selection);
+                        if (bean != null) {
+                            String imId = String.valueOf(bean.getEm_IMID());
+                            Log.i("todo", "imId=" + imId);
+                            im_ids.add(imId);
+                        } else {
+                            im_ids.add("");
+//                                            ToastMessage("审批流头像获取异常,已显示为默认");
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+            }
+                Log.i("imids", im_ids.toString());
+            mDailyDetailsApprovalFlowAdapter.setIm_ids(im_ids);
+
+            //TODO 设置数据之前先通过数据库获取到所有的imid保存到内存中
+            mDailyDetailsApprovalFlowAdapter.setmCommonApprovalFlowBean(mCommonApprovalFlowBean);
+            approval_flowlv.setAdapter(mDailyDetailsApprovalFlowAdapter);
+
+        }else {
+                mEmptyLayput_approvalflow.showEmpty();
+            }
+        }
+    }
+
     @Override
     protected void onDestroy() {
         super.onDestroy();

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

@@ -23,8 +23,8 @@ 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.db.dao.MissionDao;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
-import com.xzjmyk.pm.activity.ui.erp.adapter.MissionDao;
 import com.xzjmyk.pm.activity.ui.erp.entity.MissionPlanEntity;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CodeUtil;

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

@@ -798,8 +798,8 @@ public class OAActivity extends BaseActivity implements View.OnClickListener {
                 break;
             case R.id.outtask://出差申请
                 //startActivity(new Intent(activity, TravelRequestActivity.class));
-//                ToastUtil.showToast(activity, "该功能还在内测中");
-                startActivity(new Intent(mContext,DataFormDetailActivity.class));
+                ToastUtil.showToast(activity, "该功能还在内测中");
+//                startActivity(new Intent(mContext,DataFormDetailActivity.class));
 //                        .putExtra("caller", "Workovertime"));
 //                .putExtra("caller", "Ask4Leave"));
 //                .putExtra("caller", "FeePlease!CCSQ"));

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

@@ -213,7 +213,12 @@ public class OutLogListActivity extends BaseActivity {
             holder.location.setText(getStrByJson(object, "mo_company"));
             holder.addr.setText(getStrByJson(object, "mo_address"));
             holder.remark.setText(getStrByJson(object, "mo_remark"));
-            if (object.containsKey("mo_attachid") && object.getInteger("mo_attachid") > 1000) {
+            int reId = 0;
+            try {
+                reId = object.containsKey("mo_attachid") ? object.getIntValue("mo_attachid"):0;
+            } catch (Exception e) {
+            }
+            if (reId>1000){
                 holder.image.setVisibility(View.VISIBLE);
                 ImageLoader.getInstance().displayImage(getImageUrl(object.getInteger("mo_attachid")), holder.image);
                 holder.image.setOnClickListener(new View.OnClickListener() {
@@ -224,7 +229,7 @@ public class OutLogListActivity extends BaseActivity {
                         ct.startActivity(intent);
                     }
                 });
-            } else {
+            }else{
                 holder.image.setVisibility(View.GONE);
             }
             return view;

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

@@ -1,100 +1,119 @@
 package com.xzjmyk.pm.activity.ui.erp.activity.oa;
 
-import android.content.Intent;
 import android.os.Bundle;
-import android.text.TextUtils;
 import android.util.Log;
+import android.view.LayoutInflater;
 import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
 
-import com.baidu.mapapi.search.core.PoiInfo;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.db.dao.ErrorMagDao;
+import com.xzjmyk.pm.activity.db.dao.MissionDao;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
-import com.xzjmyk.pm.activity.ui.erp.adapter.MissionDao;
+import com.xzjmyk.pm.activity.ui.erp.entity.ErrorEntity;
 import com.xzjmyk.pm.activity.ui.erp.entity.MissionPlanEntity;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
-import com.xzjmyk.pm.activity.ui.erp.util.SigninUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
-import com.xzjmyk.pm.activity.util.BaiduMapUtil;
 
+import java.util.ArrayList;
 import java.util.List;
 
-public class TestActivity extends BaseActivity {
-    @ViewInject(R.id.seach)
-    EditText seach;
-    @ViewInject(R.id.btn)
-    Button btn;
-    @ViewInject(R.id.btn2)
-    Button btn2;
+public class TestActivity extends BaseActivity implements View.OnClickListener {
+    @ViewInject(R.id.listView)
+    private ListView listView;
+
+    private List<ErrorEntity> beans;
+    private ErrorAdaptr adaptr;
+    private Object data;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_test);
         ViewUtils.inject(this);
-        InitView();
+        initEvent();
     }
 
-    private void InitView() {
-        btn.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                if (TextUtils.isEmpty(seach.getText())) return;
-                String str = seach.getText().toString();
-                if (StringUtils.isEmpty(str)) return;
-                Intent intent = new Intent(ct, LocationSearchActivity.class);
-                intent.putExtra("type", 2);
-                intent.putExtra("keyWork", str);
-                intent.putExtra("title", "选择地址");
-                intent.putExtra("single", true);
-                intent.putExtra("resultcode", 0x20);
-                intent.putExtra("resultName", "resultName");
-                startActivityForResult(intent, 0x20);
-            }
-        });
-        btn2.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                MissionDao dao = new MissionDao();
-                List<MissionPlanEntity> list = dao.queryByEnCode();
+    private void initEvent() {
+        adaptr = new ErrorAdaptr();
+        beans = new ArrayList<>();
+        findViewById(R.id.error_list).setOnClickListener(this);
+        findViewById(R.id.test_btn).setOnClickListener(this);
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.error_list:
+                beans = ErrorMagDao.getInstance().queryAll();
+                listView.setAdapter(adaptr);
+                adaptr.notifyDataSetChanged();
+                break;
+            case R.id.test_btn:
+                List<MissionPlanEntity> list = MissionDao.getInstance().queryByEnCode();
                 if (ListUtils.isEmpty(list)) {
-                    Log.i("gongpengming", "这个是空的数据表");
+                    Log.i("gongpengming", "当前列表为空");
                 } else {
                     for (MissionPlanEntity e : list) {
-                        Log.i("gongpengming", "e=" + e.getCompanyName());
+                        Log.i("gongpengming", "e.getCompanyName=" + e.getCompanyName());
+                        Log.i("gongpengming", "e.getVisitTime=" + e.getVisitTime());
+                        Log.i("gongpengming", "e.getRealTime=" + e.getRealTime());
+                        Log.i("gongpengming", "e.getStatus=" + e.getStatus());
+                        Log.i("gongpengming", "+++++++++++++++++++++++++++++++++++=");
                     }
                 }
-            }
-        });
-        findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                MissionDao dao = new MissionDao();
-                List<MissionPlanEntity> list = dao.queryByEnCode();
-                if (ListUtils.isEmpty(list)) {
-                    Log.i("gongpengming", "列表是空的");
-                    return;
-                }
-                SigninUtil util = new SigninUtil(list.get(0));
-                util.missionSignin();
-            }
-        });
+                break;
+        }
     }
 
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (data == null) return;
-        if (requestCode == 0x20 && resultCode == 0x20) {
-            PoiInfo info = data.getParcelableExtra("resultName");
+    class ErrorAdaptr extends BaseAdapter {
+        @Override
+        public int getCount() {
+            return ListUtils.isEmpty(beans) ? 0 : beans.size();
+        }
+
+        @Override
+        public Object getItem(int i) {
+            return beans.get(i);
+        }
+
+        @Override
+        public long getItemId(int i) {
+            return i;
+        }
+
+        @Override
+        public View getView(int i, View view, ViewGroup viewGroup) {
+            ViewHoler holer = null;
+            if (view == null) {
+                holer = new ViewHoler();
+                view = LayoutInflater.from(ct).inflate(R.layout.item_error_mag, null);
+                holer.time_tv = (TextView) view.findViewById(R.id.time_tv);
+                holer.title_tv = (TextView) view.findViewById(R.id.title_tv);
+                holer.msg_tv = (TextView) view.findViewById(R.id.msg_tv);
+                view.setTag(holer);
+            } else {
+                holer = (ViewHoler) view.getTag();
+            }
+            holer.time_tv.setText(getNull(beans.get(i).getTime()));
+            holer.title_tv.setText(getNull(beans.get(i).getTitle()));
+            holer.msg_tv.setText(getNull(beans.get(i).getMsg()));
+            return view;
+        }
+
+        class ViewHoler {
+            TextView time_tv, title_tv, msg_tv;
         }
     }
 
-    @Override
-    protected void onDestroy() {
-        BaiduMapUtil.getInstence().onDestroy();
-        super.onDestroy();
+
+    private String getNull(String str) {
+        if (StringUtils.isEmpty(str)) return "";
+        return str;
     }
 }

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

@@ -13,7 +13,7 @@ import com.xzjmyk.pm.activity.ui.erp.util.Constants;
  */
 public class DBOpenHelper extends SQLiteOpenHelper {
 
-    private static final int DATABASE_VERSION = 60;//数据库版本号(每添加一个表要增加版本号)
+    private static final int DATABASE_VERSION = 61;//数据库版本号(每添加一个表要增加版本号)
     public static String dataBaseName = "erp.db";//数据库名称
     public Context context;
 
@@ -38,6 +38,7 @@ public class DBOpenHelper extends SQLiteOpenHelper {
         db.execSQL(Constants.TABLE_ALL_SUBSCRIPTION);//未订阅列表
         db.execSQL(Constants.TABLE_MY_SUBSCRIPTION);//已订阅列表
         db.execSQL(Constants.TABLE_MISSION);//外勤计划
+        db.execSQL(Constants.ERROR_MESSAGE);//错误信息列表
     }
 
     @Override
@@ -48,9 +49,11 @@ public class DBOpenHelper extends SQLiteOpenHelper {
         db.execSQL("DROP TABLE IF EXISTS B2BMSG");
         db.execSQL("DROP TABLE IF EXISTS Signin");
         db.execSQL("DROP TABLE IF EXISTS SubscriptionMessage");
+        db.execSQL("DROP TABLE IF EXISTS submessage");
         db.execSQL("DROP TABLE IF EXISTS AllSubs");
         db.execSQL("DROP TABLE IF EXISTS MySubs");
         db.execSQL("DROP TABLE IF EXISTS mission");
+        db.execSQL("DROP TABLE IF EXISTS error_mag");
         onCreate(db);
     }
 

+ 44 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/entity/ErrorEntity.java

@@ -0,0 +1,44 @@
+package com.xzjmyk.pm.activity.ui.erp.entity;
+
+/**
+ * 错误信息表
+ * Created by Bitliker on 2016/12/1.
+ */
+public class ErrorEntity {
+    private int id;//自增id
+    private String time;//时间
+    private String title;//标题  类名
+    private String msg;//错误信息
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/entity/MissionPlanEntity.java

@@ -19,7 +19,7 @@ public class MissionPlanEntity implements Parcelable {
     private String realLeave;//实际离开时间  yyyy-MM-dd HH:mm:ss
     private LatLng latLng;//选择地址的经纬度
     private int visitcount;//拜访次数
-    private int status;//状态  1.已提交  0.未提交  (数据库中 0.未进行  1.进行中  2.已完成)
+    private int status;//状态  1.已提交  0.未提交  (数据库中 0.未进行  1.进行中  2.已完成 3.已提醒)
 
     public MissionPlanEntity() {
     }

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

@@ -119,7 +119,6 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
             switch (msg.what) {
                 case 0x11://获取班次
                     JSONObject jsonObject = parseObject(message);//返回对象
-                    Log.i("handleMessage11: ", jsonObject.toString());
                     if (jsonObject.containsKey("comaddressset") ? jsonObject.getBoolean("comaddressset") : false) {//如果有分配公司
                         companyDistance = Integer.parseInt(jsonObject.containsKey("distance") ? (StringUtils.isEmpty(jsonObject.getString("distance")) ? "-1" : jsonObject.getString("distance")) : "-1");
                         companyX = Double.parseDouble(jsonObject.containsKey("longitude") ? (StringUtils.isEmpty(jsonObject.getString("longitude")) ? "0" : jsonObject.getString("longitude")) : "0");
@@ -128,6 +127,10 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
                         CommonUtil.setSharedPreferences(ct, "companyY", (float) companyY);
                         CommonUtil.setSharedPreferences(ct, "distance", companyDistance);
                         unoffice_mm.setText(setDistance());
+                    } else {
+                        CommonUtil.setSharedPreferences(ct, "companyX", (float) 0);
+                        CommonUtil.setSharedPreferences(ct, "companyY", (float) 0);
+                        CommonUtil.setSharedPreferences(ct, "distance", 0);
                     }
                     if (jsonObject.getBoolean("success")) {
                         //有班次
@@ -608,8 +611,6 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
     }
 
 
-
-
     //处理数据,用户无排班时候,获取默认排版
     public void setDataByNoDegree(JSONObject object) {
         ArrayList<SigninBean> beans = new ArrayList<>();
@@ -683,7 +684,7 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
     public void setDataByLogs(JSONArray array) {
         List<SigninBean> beans = getDataByAdapter();
         if (beans == null) return;
-        if (array.size() <= 0) {
+        if (ListUtils.isEmpty(array)) {
             for (int i = 0; i < beans.size(); i++) {
                 beans.get(i).setWorkSignin("");
                 beans.get(i).setOffSignin("");
@@ -702,16 +703,20 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
             for (int i = 0; i < beans.size(); i++) {
                 b = beans.get(i);
                 if (!StringUtils.isEmpty(b.getStartTime()) && !StringUtils.isEmpty(b.getEndTime())
-                        && e.compareTo(b.getStartTime()) > 0 && e.compareTo(b.getEndTime()) < 0) {
+                        && e.compareTo(b.getStartTime()) >= 0//该时间大于等于上班开始签到范围
+                        && e.compareTo(b.getEndTime()) <= 0) {//该时间小于下班结束签到范围
                     //在排版范围内
-                    if (!StringUtils.isEmpty(b.getWorkTime()) && e.compareTo(b.getStartTime()) > 0
+                    if (!StringUtils.isEmpty(b.getWorkTime()) &&
+                            e.compareTo(b.getStartTime()) >= 0
                             && e.compareTo(getEndSignin(b.getWorkTime(), true)) < 0) {
                         //在上班范围
                         if (StringUtils.isEmpty(b.getWorkSignin()) || e.compareTo(b.getWorkSignin()) < 0) {
                             beans.get(i).setWorkSignin(e);
                         }
                     }
-                    if (!StringUtils.isEmpty(b.getOffTime()) && e.compareTo(b.getEndTime()) < 0 && e.compareTo(getEndSignin(b.getOffTime(), false)) > 0) {
+                    if (!StringUtils.isEmpty(b.getOffTime()) &&
+                            e.compareTo(b.getEndTime()) <= 0 &&
+                            e.compareTo(getEndSignin(b.getOffTime(), false)) > 0) {
                         //在下班范围
                         if (StringUtils.isEmpty(b.getOffSignin()) || e.compareTo(b.getOffSignin()) > 0) {
                             beans.get(i).setOffSignin(e);
@@ -737,10 +742,10 @@ public class SigninFragment extends EasyFragment implements View.OnClickListener
         }
         if (adapter == null) {
             adapter = new SigninAdapter(ct);
-            adapter.setBeans(beans, isToday,selectTime);
+            adapter.setBeans(beans, isToday, selectTime);
             listview.setAdapter(adapter);
         } else {
-            adapter.setBeans(beans, isToday,selectTime);
+            adapter.setBeans(beans, isToday, selectTime);
             adapter.notifyDataSetChanged();
         }
     }

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

@@ -131,6 +131,13 @@ public class Constants {
             + ")";
 
 
+    //打印错误信息表
+    public static final String ERROR_MESSAGE = "CREATE TABLE error_mag ("
+            + "id integer primary key autoincrement,"
+            + "time varchar(20),"//时间
+            + "title  varchar(20)," //出错位置
+            + "msg  varchar(100)" //出错信息
+            + ")";
     //外勤计划表
     public static final String TABLE_MISSION = "CREATE TABLE mission ("
             + "id integer UNIQUE,"

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

@@ -14,11 +14,11 @@ import com.xzjmyk.pm.activity.BdLocationHelper;
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.bean.oa.SigninBean;
+import com.xzjmyk.pm.activity.db.dao.MissionDao;
 import com.xzjmyk.pm.activity.db.dao.SigninDao;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.MissionPlanActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.OutSigninOKActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.SigninActivity;
-import com.xzjmyk.pm.activity.ui.erp.adapter.MissionDao;
 import com.xzjmyk.pm.activity.ui.erp.entity.MissionPlanEntity;
 import com.xzjmyk.pm.activity.ui.erp.util.alarm.NotificationManage;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
@@ -95,6 +95,7 @@ public class SigninUtil {
                     break;
                 case 0x17:
                     //符合打卡
+                    Log.i("gongpengming", "对的进来打卡");
                     CodeUtil.getInstance().getCode(MyApplication.getInstance(), "CardLog", new CodeUtil.OnCodeLinstener() {
                                 @Override
                                 public void callBack(String code) {
@@ -104,7 +105,8 @@ public class SigninUtil {
                     );
                     break;
                 case Constants.APP_SOCKETIMEOUTEXCEPTION://请求超时
-                    if (StringUtils.isEmpty(message)) {
+                    Log.i("gongpengming", "进来了");
+                    if (!StringUtils.isEmpty(message)) {
                         if (StringUtils.isInclude(message, "该设备不是考勤打卡常用设备")) {
                             getManage().sendNotification(MyApplication.getInstance(), "该设备不是考勤打卡常用设备,无法为您自动打卡", SigninActivity.class);
                         } else if (StringUtils.isInclude(message, "设备正处于申请变更绑定阶段")) {
@@ -148,11 +150,12 @@ public class SigninUtil {
             return;
         mission.setRealTime(TimeUtils.f_long_2_str(System.currentTimeMillis()));
         if (mission.getStatus() == 2)//如果是离开后的打卡
-        {//TODO 如果是结束该外勤,请求接口判断是否还有外勤计划,如果没有,计算并提示是否会公司进行签到
+        {
+            //TODO 如果是结束该外勤,请求接口判断是否还有外勤计划,如果没有,计算并提示是否会公司进行签到
+
         } else
             mission.setStatus(1);//打上卡了,进行中
-        MissionDao dao = new MissionDao();
-        boolean saveOk = dao.updataOrCreate(mission);
+        boolean saveOk = MissionDao.getInstance().updataOrCreate(mission);
         if (saveOk)
             getManage().sendNotification(ct, "外勤签到成功", MissionPlanActivity.class);
     }

+ 162 - 179
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmManage.java

@@ -1,75 +1,83 @@
 package com.xzjmyk.pm.activity.ui.erp.util.alarm;
 
-import android.content.Context;
-import android.database.SQLException;
-import android.os.Handler;
-import android.os.Message;
 import android.util.Log;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.xzjmyk.pm.activity.BdLocationHelper;
+import com.xzjmyk.pm.activity.AppConfig;
 import com.xzjmyk.pm.activity.MyApplication;
-import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.bean.oa.SigninBean;
+import com.xzjmyk.pm.activity.db.dao.ErrorMagDao;
 import com.xzjmyk.pm.activity.db.dao.SigninDao;
-import com.xzjmyk.pm.activity.ui.erp.activity.oa.SigninActivity;
-import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
-import com.xzjmyk.pm.activity.ui.erp.util.CodeUtil;
+import com.xzjmyk.pm.activity.ui.erp.entity.ErrorEntity;
+import com.xzjmyk.pm.activity.ui.erp.entity.MissionPlanEntity;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 
-import java.util.HashMap;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
-
-import static com.alibaba.fastjson.JSON.parseObject;
-import static com.xzjmyk.pm.activity.ui.erp.net.ViewUtil.ct;
 
 /**
- * 提醒管理器
- * Created by pengminggong on 2016/10/26.
+ * 关于提醒管理器(1.上班时间内离开办公地点  2.考勤提醒  3.自动签到外勤)
+ * <p>
+ * Created by Bitliker on 2016/11/18.
  */
-public class AlarmManage extends IAlarmManage {
-
-    private NotificationManage manage;
-    private SigninBean bean;
-    private boolean isWork;
-
-    private Handler handler = new Handler() {
-        @Override
-        public void handleMessage(Message msg) {
-            String message = msg.getData().getString("result");
-            switch (msg.what) {
-                case 0x11:
-                    loadLog();
-                    break;
-                case 0x12:
-                    if (parseObject(message).containsKey("listdata")) {
-                        setDataByLogs(parseObject(message).getJSONArray("listdata"));
-                    }
-                    break;
-                default:
-                    break;
+public class AlarmManage {
+    /**
+     * 计算是否符合自动外勤,返回外勤列表中距离最小的对象,如果不符合,返回空
+     * 1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
+     * 2.如果第一个不存在,判断获取最近的位置(包含已经结束的,防止定位不准问题)
+     *
+     * @param list 外勤列表数据
+     * @return
+     * @throws ClassCastException
+     */
+    public MissionPlanEntity reckonMission(List<MissionPlanEntity> list) throws ClassCastException {
+        int companyDistance = CommonUtil.getSharedPreferencesInt(MyApplication.getInstance(), AppConfig.ALARM_MISSION_DISTANCE, 500);
+        MissionPlanEntity minBean = null;
+        float minDistance = 0;
+        if (ListUtils.isEmpty(list)) {
+            return minBean;
+        }
+        for (MissionPlanEntity e : list) {
+            if (e.getLatLng() == null) continue;//定位不存在
+            //获取当前与目的地的距离
+            float distance = Float.valueOf(BaiduMapUtil.getInstence().getDistance(e.getLatLng()));
+            if (e.getStatus() == 1 && distance > companyDistance) {//1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
+                Log.i("gongpengming", "符合外勤签退");
+                minBean = e;
+                minBean.setStatus(2);//结束该外勤
+                break;
+            } else if (distance < companyDistance) { //判断符合自动外勤
+                Log.i("gongpengming", "符合外勤签到");
+                if (minDistance <= 0 || minDistance > distance) {//2.如果第一个不存在,判断获取最近的位置
+                    minDistance = distance;
+                    minBean = e;
+                }
             }
         }
-    };
-
-
-    public AlarmManage() {
-        manage = new NotificationManage();
+        return minBean;
     }
 
-    private NotificationManage getManage() {
-        if (manage == null)
-            manage = new NotificationManage();
-        return manage;
+    //自动外勤提醒
+    public MissionPlanEntity alarmMission(List<MissionPlanEntity> list) throws ClassCastException {
+        //获取当天外勤计划
+        if (ListUtils.isEmpty(list)) {
+            return null;
+        }
+        for (MissionPlanEntity e : list) {
+            if (!StringUtils.isEmpty(e.getVisitTime()) &&
+                    //当前时间大于计划时间
+                    System.currentTimeMillis() > TimeUtils.f_str_2_long(e.getVisitTime())
+                    //没有签到过
+                    && StringUtils.isEmpty(e.getRealTime()) && e.getStatus() != 3) {
+                return e;
+            }
+        }
+        return null;
     }
 
-    //设置提醒
+    //自动打卡和提醒
     public int reckonNextAlarm() {
         //1.判断是否离开办公地点
 //        if (isOutoffWork()) {//离开办公地点
@@ -77,28 +85,26 @@ public class AlarmManage extends IAlarmManage {
 //            return;
 //        }
         boolean isAlarm = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), "ALARMA_CLICK", false);//是否自动打卡
-        boolean isAuto = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), "AUTO_SIGNIN", false);//是否提醒
-        if (!isAlarm && !isAuto) return -1;
+        boolean isAuto = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), "AUTO_SIGNIN", true);//是否提醒
         long time = 0;
-        bean = getNextBean();
+        SigninBean bean = getNextBean();//获取当前所在班次的下班之前
         if (bean == null) return -1;
         if (isAuto) {
-            time = getNextWorkAuto(bean);//获取下一次自动上班打卡
-            Log.i("gongpengming", "获取下一次自动上班打卡时间为=" + TimeUtils.f_long_2_str(time));
-            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
+            time = getWorkAuto(bean);//获取下一次自动上班打卡
+            Log.i("gongpengming", "time=" + TimeUtils.f_long_2_str(time));//过期返回0
+            try {
+                saveMsg2DB(time);
+            } catch (Exception e) {
+
+            }
+            if (time != 0) {
                 //TODO 符合自动上班打卡
-//                SigninUtil util = new SigninUtil();
-//                util.autoSignin();
-//                doAutoSignin(true);
                 return 1;
             }
-            time = getNextOffAuto(bean);//获取下一次自动上班打卡
+            time = getOffAuto(bean);//获取下一次自动上班打卡
             Log.i("gongpengming", "获取下一次自动上班打卡=" + TimeUtils.f_long_2_str(time));
-            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
+            if (time != 0) {
                 //TODO 符合自动下班打卡
-//                SigninUtil util = new SigninUtil();
-//                util.autoSignin();
-//                doAutoSignin(false);
                 return 1;
             }
         }
@@ -108,7 +114,6 @@ public class AlarmManage extends IAlarmManage {
             Log.i("gongpengming", "获取上班提醒时间=" + TimeUtils.f_long_2_str(time));
             if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
                 //TODO 符合上班提醒
-                getManage().sendNotification(MyApplication.getInstance(), "请按时上班打卡", SigninActivity.class);
                 bean.setWorkAlarm(bean.getWorkAlarm() + 1);
                 dao.updateByBrean(bean);
                 return 2;
@@ -117,139 +122,117 @@ public class AlarmManage extends IAlarmManage {
             Log.i("gongpengming", "获取下班提醒时间=" + TimeUtils.f_long_2_str(time));
             if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
                 //TODO 符合下班提醒
-                getManage().sendNotification(MyApplication.getInstance(), "请按时下班打卡", SigninActivity.class);
                 bean.setOffAlarm(bean.getOffAlarm() + 1);
                 dao.updateByBrean(bean);
                 return 3;
             }
         }
-        return -1;
+        return 0;
     }
 
-    private void doAutoSignin(boolean isWork) {
-        this.isWork = isWork;
-        if (bean != null) {//已经签过卡了
-            if (isWork) {
-                if (!StringUtils.isEmpty(bean.getWorkSignin()) && !StringUtils.isEmpty(bean.getWorkTime())
-                        && bean.getWorkSignin().compareTo(bean.getWorkTime()) < 0)
-                    return;
-            } else {
-                if (!StringUtils.isEmpty(bean.getOffSignin()) && !StringUtils.isEmpty(bean.getOffTime())
-                        && bean.getOffSignin().compareTo(bean.getOffTime()) > 0)
-                    return;
-            }
-        }
-        CodeUtil.getInstance().getCode(MyApplication.getInstance(), "CardLog", new CodeUtil.OnCodeLinstener() {
-                    @Override
-                    public void callBack(String code) {
-                        doSignin(MyApplication.getInstance(), code);
-                    }
-                }
-        );
+    //5.判断是否离开工作范围
+    protected boolean isOutoffWork() {
+        if (!isWorkTime()) return false;
+        int comDistance = CommonUtil.getSharedPreferencesInt(MyApplication.getInstance(), "distance", 0);//规定距离
+        Log.i("gongpengming", "distance=" + comDistance);
+        return comDistance < Float.valueOf(BaiduMapUtil.getInstence().getDistance()) ? true : false;
     }
 
-    //签到
-    private void doSignin(Context ct, String code) {
-        Map<String, Object> param = new HashMap<>();
-        Map<String, Object> form = new HashMap<>();
-        form.put("cl_code", code);
-        form.put("cl_phone", MyApplication.getInstance().mLoginUser.getTelephone());
-        form.put("cl_emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
-        String emname = CommonUtil.getSharedPreferences(ct, "erp_emname");
-        if (StringUtils.isEmpty(emname)) {
-            emname = MyApplication.getInstance().mLoginUser.getNickName().trim();
-        }
-        form.put("cl_emname", emname);
-        boolean isp = isPlay(ct, form);
-        if (!isp) return;//不符合打卡
-        String formStore = StringUtils.mapToJson(form);
-        param.put("caller", "CardLog");
-        param.put("formStore", formStore);
-        String url = CommonUtil.getSharedPreferences(ct, "erp_baseurl") + "mobile/saveCardLog.action";
-        param.put("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
-        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
-        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
-        ViewUtil.httpSendRequest(ct, url, param, handler, headers, 0x11, null, null, "get");
+
+    private void saveMsg2DB(long time) {
+        ErrorEntity entity = new ErrorEntity();
+        entity.setTitle("IAlarmManage");
+        entity.setTime(TimeUtils.f_long_2_str(System.currentTimeMillis()));
+        entity.setMsg("获取下一次自动上班打卡时间为=" + TimeUtils.f_long_2_str(time));
+        ErrorMagDao.getInstance().insert(entity);
     }
 
-    /*判断是否符合打卡*/
-    private boolean isPlay(Context ct, Map<String, Object> form) {
-        try {
-            //判断是否符合打卡
-            BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
-            form.put("cl_address", helper.getAddress());
-            form.put("cl_location", helper.getName());
-            int comDistance = CommonUtil.getSharedPreferencesInt(ct, "distance", 0);
-            String distance = BaiduMapUtil.getInstence().getDistance();
-            if (comDistance < Float.valueOf(distance)) {//规定地址<实际地址  不符合
-                helper.requestLocation();//当不符合时候提交定位,并不执行打卡签到
-                return false;
-            } else {
-                form.put("cl_distance", distance);
-                return true;
+
+    private SigninBean getNextBean() {
+        SigninDao dao = new SigninDao(MyApplication.getInstance());
+        List<SigninBean> list = dao.queryByEmcode();//获取所有班次
+        if (ListUtils.isEmpty(list)) return null;
+        long endTime = 0;
+        SigninBean minSignin = null;
+        for (SigninBean e : list) {
+            endTime = getTimeByHHmm(StringUtils.isEmpty(e.getEndTime()) ? e.getOffTime() : e.getEndTime());
+            if (System.currentTimeMillis() < endTime) {//当前时间在该班次结束之前
+                return e;
             }
-        } catch (NullPointerException e) {
-            return false;
-        } catch (SQLException e) {
-            return false;
-        }
+            if (minSignin == null) minSignin = e;
+            else if (StringUtils.isEmpty(minSignin.getWorkTime()) && StringUtils.isEmpty(minSignin.getWorkTime()) &&
+                    minSignin.getWorkTime().compareTo(e.getWorkTime()) > 0) minSignin = e;
+        }//当天班次无存在符合时间点
+        return null;
     }
 
-    //获取打卡记录 date:yyyy-MM-dd
-    private void loadLog() {
-        String date = TimeUtils.s_long_2_str(System.currentTimeMillis());
-        //获取网络数据
-        String url = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_baseurl") + "mobile/oa/workdata.action";
-        Map<String, Object> param = new HashMap<>();
-        String code = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
-        param.put("currentMaster", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
-        param.put("page", 1);
-        param.put("pageSize", 1000);
-        param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
-        param.put("caller", "CardLog");
-        param.put("emcode", code);
-        param.put("master", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
-        param.put("sessionUser", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
-        param.put("sessionId", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "sessionId"));
-        LinkedHashMap<String, Object> headers = new LinkedHashMap<>();
-        headers.put("Cookie", "JSESSIONID=" + CommonUtil.getSharedPreferences(ct, "sessionId"));
-        ViewUtil.httpSendRequest(MyApplication.getInstance(), url, param, handler, headers, 0x12, null, null, "get");
+
+    private long getNextWorkAlarm(SigninBean bean) {
+        if (bean == null || !StringUtils.isEmpty(bean.getWorkSignin()) || bean.getWorkAlarm() != 0 || StringUtils.isEmpty(bean.getWorkTime()))
+            return 0;
+        int difference = CommonUtil.getSharedPreferencesInt(MyApplication.getInstance(), "ALARM_WORK_TIME", 5);//上班提前xx分钟
+        return getTimeByHHmm(bean.getWorkTime()) - difference * 60000;
     }
 
-    //处理数据,获取到用户签到列表
-    private void setDataByLogs(JSONArray array) {
-        //取最后一个
-        JSONObject object = array.getJSONObject(array.size() - 1);
-        String time = object.getString("cl_time");//获取最后一次打卡信息,班次打卡信息
-        time = TimeUtils.clearDay(time);//获取到的
-        if (StringUtils.isEmpty(time)) return;
-        SigninDao dao = new SigninDao(MyApplication.getInstance());
-        if (bean != null) {
-            if (isWork && !StringUtils.isEmpty(bean.getStartTime()) && bean.getStartTime().compareTo(time) < 0
-                    && bean.getWorkTime().compareTo(time) > 0) {//打卡时间小于上班时间
-                bean.setWorkSignin(time);
-                getManage().sendNotification(MyApplication.getInstance(), R.string.auto_signin, SigninActivity.class);
-                dao.updateByBrean(bean);
-            } else if (!isWork && !StringUtils.isEmpty(bean.getEndTime()) && bean.getEndTime().compareTo(time) > 0
-                    && bean.getOffTime().compareTo(time) < 0) {
-                bean.setOffSignin(time);
-                dao.updateByBrean(bean);
-                getManage().sendNotification(MyApplication.getInstance(), R.string.auto_signin, SigninActivity.class);
-            }
+
+    private long getNextOffAlarm(SigninBean bean) {
+        if (bean == null || !StringUtils.isEmpty(bean.getOffSignin()) || bean.getOffAlarm() != 0 || StringUtils.isEmpty(bean.getOffTime()))
+            return 0;
+        int difference = CommonUtil.getSharedPreferencesInt(MyApplication.getInstance(), "ALARM_OFFWORK_TIME", 5);//下班延迟xx分钟
+        return getTimeByHHmm(bean.getOffTime()) + difference * 60000;
+    }
+
+
+    //获取上班打卡时间
+    private long getWorkAuto(SigninBean bean) {
+        if (bean == null || !StringUtils.isEmpty(bean.getWorkSignin())
+                || StringUtils.isEmpty(bean.getWorkTime()) ||
+                StringUtils.isEmpty(bean.getStartTime()))
+            return 0;
+        long workTime = getTimeByHHmm(bean.getWorkTime());
+        long startTime = getTimeByHHmm(bean.getStartTime());//上班范围+3分钟
+        if (startTime < System.currentTimeMillis() && workTime > System.currentTimeMillis()) {
+            return System.currentTimeMillis();
         } else {
-            List<SigninBean> beans = dao.queryByEmcode();
-            for (SigninBean e : beans) {
-                if (!StringUtils.isEmpty(e.getStartTime()) && !StringUtils.isEmpty(e.getEndTime()) && e.getStartTime().compareTo(time) < 0 && e.getEndTime().compareTo(time) > 0) {
-                    //在该班次内
-                    if (isWork) e.setWorkSignin(time);
-                    else e.setOffSignin(time);
-                    //TODO 保存数据库
-                    dao.updateByBrean(e);
-                    return;
-                }
-            }
+            return 0;
         }
+    }
 
+
+    //获取下班打卡时间
+    private long getOffAuto(SigninBean bean) {
+        if (bean == null || !StringUtils.isEmpty(bean.getOffSignin()) ||
+                StringUtils.isEmpty(bean.getOffTime()) ||
+                StringUtils.isEmpty(bean.getEndTime()))
+            return 0;
+        long workTime = getTimeByHHmm(bean.getOffTime());
+        long endTime = getTimeByHHmm(bean.getEndTime());//上班范围+3分钟
+        if (workTime < System.currentTimeMillis() && endTime > System.currentTimeMillis()) {
+            return System.currentTimeMillis();
+        } else {
+            return 0;
+        }
+    }
+
+
+    /*通过时分获取当天改时间时间戳*/
+    private long getTimeByHHmm(String time) {
+        if (StringUtils.isEmpty(time)) return 0;
+        String che = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + time + ":00";//当天下班时间
+        return TimeUtils.f_str_2_long(che);
     }
 
+    /*当前是否在办公时间内*/
+    private boolean isWorkTime() {
+        try {
+            SigninBean bean = getNextBean();
+            //此语句判空处理有问题!!! Arison
+            if (!StringUtils.isEmpty(bean.getWorkTime()) && System.currentTimeMillis() > getTimeByHHmm(bean.getWorkTime()))
+                return true;
+            else return false;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
 }

+ 40 - 20
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/AlarmService.java

@@ -17,8 +17,9 @@ import com.alibaba.fastjson.JSONObject;
 import com.baidu.mapapi.model.LatLng;
 import com.xzjmyk.pm.activity.AppConfig;
 import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.db.dao.MissionDao;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.MissionPlanActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.SigninActivity;
-import com.xzjmyk.pm.activity.ui.erp.adapter.MissionDao;
 import com.xzjmyk.pm.activity.ui.erp.entity.MissionPlanEntity;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
@@ -38,13 +39,12 @@ public class AlarmService extends Service {
     public static long intervalTime = 1 * 60 * 1000;//轮询时间间隔,初始化1分钟,外勤时候为6分钟
     public static int aralmType = 1;//提醒类型   1.内勤  2.外勤
     private AlarmTask alarmTask;
-    private IAlarmManage iManage;
+    private AlarmManage iManage;
     private NotificationManage manage;
 
     private BroadcastReceiver receiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            Log.i("gongpengming", "进来了");
             if (intent != null) {
                 loadIsMission();
             }
@@ -110,7 +110,7 @@ public class AlarmService extends Service {
         IntentFilter filter = new IntentFilter();
         filter.addAction("com.xzjmyk.pm.activity.ui.erp.util.alarm");
         registerReceiver(receiver, filter);
-        if (iManage == null) iManage = new IAlarmManage();
+        if (iManage == null) iManage = new AlarmManage();
         if (manage == null) manage = new NotificationManage();
         if (alarmTask == null) {
             alarmTask = new AlarmTask();
@@ -151,42 +151,54 @@ public class AlarmService extends Service {
             try {
                 while (true) {
                     if (aralmType == 1) {//内勤签到
+                        Log.i("gongpengming", "内勤签到计算");
                         //1.自动打卡  2.提醒上班   3.提醒下班
                         int i = getiManage().reckonNextAlarm();//获取签到还是提醒,当为-1时候为错误
-                        if (i != -1) {
+                        Log.i("gongpengming", "自动打卡i==" + i);
+                        if (i != -1 || i != 0) {
                             map.clear();
                             map.put("type", i);
                             publishProgress(map);
                         }
                     } else if (aralmType == 2) {//外勤签到
+                        Log.i("gongpengming", "进来外勤签到计算");
                         //判断是否自动外勤
                         boolean isAuto = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.AUTO_MISSION, false);
                         //判断是否外勤提醒
                         boolean isAlarm = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), AppConfig.ALARM_MISSION, false);
+                        List<MissionPlanEntity> plans = MissionDao.getInstance().queryByEnCode();
+                        if (ListUtils.isEmpty(plans)) Log.i("gongpengming", "plans是空");
+                        MissionPlanEntity mission = null;
                         if (isAuto) {
-                            MissionPlanEntity mission = getiManage().reckonMission();
+                            Log.i("gongpengming", "自动外勤");
+                            mission = getiManage().reckonMission(plans);
                             if (mission != null) {//如果返回不为空,打卡
+                                Log.i("gongpengming", "符合打卡");
                                 map.clear();
                                 map.put("type", 4);
                                 map.put("data", mission);
                                 publishProgress(map);
                             } else if (isAlarm) {//如果为空,且提醒
-                                boolean is = getiManage().alarmMission();
-                                if (is) {
+                                mission = getiManage().alarmMission(plans);
+                                if (mission != null) {
+                                    Log.i("gongpengming", "符合提醒");
                                     map.clear();
                                     map.put("type", 5);
+                                    map.put("data", mission);
                                     publishProgress(map);
                                 }
                             }
                         } else if (isAlarm) {//且提醒
-                            boolean is = getiManage().alarmMission();
-                            if (is) {
+                            mission = getiManage().alarmMission(plans);
+                            if (mission != null) {
                                 map.clear();
                                 map.put("type", 5);
+                                map.put("data", mission);
                                 publishProgress(map);
                             }
                         }
                     }
+                    Log.i("gongpengming", intervalTime / 1000 + "间隔时间");
                     Thread.sleep(intervalTime);
                 }
             } catch (InterruptedException e) {
@@ -216,11 +228,18 @@ public class AlarmService extends Service {
                         break;
                     case 4://自动外勤
                         MissionPlanEntity bean = (MissionPlanEntity) map.get("data");
+                        if (bean != null) Log.i("gongpengming", "不为空");
                         util = new SigninUtil(bean);
                         util.missionSignin();
                         break;
                     case 5://外勤提醒
-
+                        MissionPlanEntity bean1 = (MissionPlanEntity) map.get("data");
+                        if (bean1 != null) Log.i("gongpengming", "不为空");
+                        boolean isOk = updateDB(bean1.getId(), 3);
+                        if (isOk)
+                            Log.i("gongpengming", "更新完成" + bean1.getCompanyName());
+                        getManage().sendNotification(MyApplication.getInstance(),
+                                "您的外勤" + bean1.getCompanyName() + "已到达时间", MissionPlanActivity.class);
                         break;
                     default:
                         break;
@@ -231,6 +250,7 @@ public class AlarmService extends Service {
         }
     }
 
+
     //获取是否有外勤计划
     private void loadIsMission() {
         net("mobile/yesornoplan.action", 0x11);
@@ -250,10 +270,15 @@ public class AlarmService extends Service {
         ViewUtil.httpSendRequest(MyApplication.getInstance(), url, param, handler, headers, what, null, null, "post");
     }
 
+    //更新数据库状态
+    private boolean updateDB(int id, int status) {
+        return MissionDao.getInstance().upStatus(id, status);
+    }
 
+    //处理获取的外勤计划数据
     private void handlerData(JSONArray array) {
         if (ListUtils.isEmpty(array)) {
-            aralmType = 1;//开启内勤打卡模式
+            aralmType = 1;//开启内勤打卡模式,获取到的外勤计划为空
             return; //获取到拜访计划数据
         }
         JSONObject object = null;
@@ -279,14 +304,9 @@ public class AlarmService extends Service {
             entities.add(entity);
         }
         if (!ListUtils.isEmpty(entities))
-            save2DB(entities);
+            MissionDao.getInstance().updataOrCreate(entities);
     }
 
-    //保存到数据库
-    private void save2DB(List<MissionPlanEntity> entities) {
-        MissionDao dao = new MissionDao();
-        dao.updataOrCreate(entities);
-    }
 
     private NotificationManage getManage() {
         if (manage == null)
@@ -294,9 +314,9 @@ public class AlarmService extends Service {
         return manage;
     }
 
-    public IAlarmManage getiManage() {
+    public AlarmManage getiManage() {
         if (iManage == null)
-            iManage = new IAlarmManage();
+            iManage = new AlarmManage();
         return iManage;
     }
 }

+ 0 - 245
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/alarm/IAlarmManage.java

@@ -1,245 +0,0 @@
-package com.xzjmyk.pm.activity.ui.erp.util.alarm;
-
-import android.util.Log;
-
-import com.xzjmyk.pm.activity.AppConfig;
-import com.xzjmyk.pm.activity.MyApplication;
-import com.xzjmyk.pm.activity.bean.oa.SigninBean;
-import com.xzjmyk.pm.activity.db.dao.SigninDao;
-import com.xzjmyk.pm.activity.ui.erp.adapter.MissionDao;
-import com.xzjmyk.pm.activity.ui.erp.entity.MissionPlanEntity;
-import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
-import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
-import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
-import com.xzjmyk.pm.activity.util.BaiduMapUtil;
-import com.xzjmyk.pm.activity.util.TimeUtils;
-
-import java.util.List;
-
-import static com.xzjmyk.pm.activity.ui.erp.net.ViewUtil.ct;
-
-/**
- * 关于提醒管理器(1.上班时间内离开办公地点  2.考勤提醒  3.自动签到外勤)
- * <p>
- * Created by Bitliker on 2016/11/18.
- */
-public class IAlarmManage {
-
-    /**
-     * 计算是否符合自动外勤,返回外勤列表中距离最小的对象,如果不符合,返回空
-     * 1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
-     * 2.如果第一个不存在,判断获取最近的位置(包含已经结束的,防止定位不准问题)
-     *
-     * @return
-     * @throws ClassCastException
-     */
-    public MissionPlanEntity reckonMission() throws ClassCastException {
-        int companyDistance = CommonUtil.getSharedPreferencesInt(ct, AppConfig.ALARM_MISSION_DISTANCE, 500);
-        MissionDao dao = new MissionDao();
-        List<MissionPlanEntity> list = dao.queryByEnCode();
-        MissionPlanEntity minBean = null;
-        float minDistance = 0;
-        if (ListUtils.isEmpty(list)) {
-            return minBean;
-        }
-        for (MissionPlanEntity e : list) {
-            if (e.getLatLng() == null) continue;//定位不存在
-            //获取当前与目的地的距离
-            float distance = Float.valueOf(BaiduMapUtil.getInstence().getDistance(e.getLatLng()));
-            if (e.getStatus() == 1 && distance > companyDistance) {//1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
-                minBean = e;
-                minBean.setStatus(2);//结束该外勤
-                break;
-            } else if (distance < companyDistance) { //判断符合自动外勤
-                if (minDistance <= 0 || minDistance > distance) {//2.如果第一个不存在,判断获取最近的位置
-                    minDistance = distance;
-                    minBean = e;
-                }
-            }
-        }
-        return minBean;
-    }
-
-    //自动外勤提醒
-    public boolean alarmMission() throws ClassCastException {
-        MissionDao dao = new MissionDao();
-        //获取当天外勤计划
-        List<MissionPlanEntity> list = dao.queryByEnCode();
-        if (ListUtils.isEmpty(list)) {
-            return false;
-        }
-        for (MissionPlanEntity e : list) {
-            if (!StringUtils.isEmpty(e.getVisitTime()) &&
-                    //当前时间大于计划时间
-                    System.currentTimeMillis() > TimeUtils.f_str_2_long(e.getVisitTime())
-                    && StringUtils.isEmpty(e.getRealTime())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    //自动打卡和提醒
-    public int reckonNextAlarm() {
-        //1.判断是否离开办公地点
-//        if (isOutoffWork()) {//离开办公地点
-//            getManage().sendNotification(MyApplication.getInstance(), R.string.outoff_work, SigninActivity.class);
-//            return;
-//        }
-        boolean isAlarm = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), "ALARMA_CLICK", false);//是否自动打卡
-        boolean isAuto = CommonUtil.getSharedPreferencesBoolean(MyApplication.getInstance(), "AUTO_SIGNIN", false);//是否提醒
-        if (!isAlarm && !isAuto) return -1;
-        long time = 0;
-        SigninBean bean = getNextBean();
-        if (bean == null) return -1;
-        if (isAuto) {
-            time = getNextWorkAuto(bean);//获取下一次自动上班打卡
-            Log.i("gongpengming", "获取下一次自动上班打卡时间为=" + TimeUtils.f_long_2_str(time));
-            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
-                //TODO 符合自动上班打卡
-                return 1;
-            }
-            time = getNextOffAuto(bean);//获取下一次自动上班打卡
-            Log.i("gongpengming", "获取下一次自动上班打卡=" + TimeUtils.f_long_2_str(time));
-            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
-                //TODO 符合自动下班打卡
-                return 1;
-            }
-        }
-        if (isAlarm) {
-            SigninDao dao = new SigninDao(MyApplication.getInstance());
-            time = getNextWorkAlarm(bean);//获取上班提醒时间
-            Log.i("gongpengming", "获取上班提醒时间=" + TimeUtils.f_long_2_str(time));
-            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
-                //TODO 符合上班提醒
-                bean.setWorkAlarm(bean.getWorkAlarm() + 1);
-                dao.updateByBrean(bean);
-                return 2;
-            }
-            time = getNextOffAlarm(bean);//获取下班提醒时间
-            Log.i("gongpengming", "获取下班提醒时间=" + TimeUtils.f_long_2_str(time));
-            if (time != 0 && Math.abs(System.currentTimeMillis() - time) <= 60000) {
-                //TODO 符合下班提醒
-                bean.setOffAlarm(bean.getOffAlarm() + 1);
-                dao.updateByBrean(bean);
-                return 3;
-            }
-        }
-        return -1;
-    }
-
-
-    //暴露接口
-    //1.获取下一个上班提醒时间戳
-    protected long getNextWorkAlarm() {
-        return getNextWorkAlarm(getNextBean());
-    }
-
-    //2.获取下一个下班提醒时间戳
-    protected long getNextOffAlarm() {
-
-        return getNextOffAlarm(getNextBean());
-    }
-
-    //3.获取下一个上班自动打卡时间时间戳(1.没有打过卡 2.在当前时间之内)
-    protected long getNextWorkAuto() {
-        return getNextWorkAuto(getNextBean());
-    }
-
-    //4.获取下一个下班自动打卡时间时间戳
-    protected long getNextOffAuto() {
-        return getNextOffAuto(getNextBean());
-    }
-
-    //5.判断是否离开工作范围
-    protected boolean isOutoffWork() {
-        if (!isWorkTime()) return false;
-        int comDistance = CommonUtil.getSharedPreferencesInt(MyApplication.getInstance(), "distance", 0);//规定距离
-        Log.i("gongpengming", "distance=" + comDistance);
-        return comDistance < Float.valueOf(BaiduMapUtil.getInstence().getDistance()) ? true : false;
-    }
-    //end暴露接口
-
-
-    protected SigninBean getNextBean() {
-        SigninDao dao = new SigninDao(MyApplication.getInstance());
-        List<SigninBean> list = dao.queryByEmcode();//获取所有班次
-        if (ListUtils.isEmpty(list)) return null;
-        long endTime = 0;
-        SigninBean minSignin = null;
-        for (SigninBean e : list) {
-            endTime = getTimeByHHmm(StringUtils.isEmpty(e.getEndTime()) ? e.getOffTime() : e.getEndTime());
-            if (System.currentTimeMillis() < endTime) {//当前时间在该班次结束之前
-                return e;
-            }
-            if (minSignin == null) minSignin = e;
-            else if (StringUtils.isEmpty(minSignin.getWorkTime()) && StringUtils.isEmpty(minSignin.getWorkTime()) &&
-                    minSignin.getWorkTime().compareTo(e.getWorkTime()) > 0) minSignin = e;
-        }//当天班次无存在符合时间点
-        return null;
-    }
-
-
-    protected long getNextWorkAlarm(SigninBean bean) {
-        if (bean == null || !StringUtils.isEmpty(bean.getWorkSignin()) || bean.getWorkAlarm() != 0 || StringUtils.isEmpty(bean.getWorkTime()))
-            return 0;
-        int difference = CommonUtil.getSharedPreferencesInt(MyApplication.getInstance(), "ALARM_WORK_TIME", 5);//上班提前xx分钟
-        return getTimeByHHmm(bean.getWorkTime()) - difference * 60000;
-    }
-
-
-    protected long getNextOffAlarm(SigninBean bean) {
-        if (bean == null || !StringUtils.isEmpty(bean.getOffSignin()) || bean.getOffAlarm() != 0 || StringUtils.isEmpty(bean.getOffTime()))
-            return 0;
-        int difference = CommonUtil.getSharedPreferencesInt(MyApplication.getInstance(), "ALARM_OFFWORK_TIME", 5);//下班延迟xx分钟
-        return getTimeByHHmm(bean.getOffTime()) + difference * 60000;
-    }
-
-
-    protected long getNextWorkAuto(SigninBean bean) {
-        if (bean == null || !StringUtils.isEmpty(bean.getWorkSignin()) || StringUtils.isEmpty(bean.getWorkTime()))
-            return 0;
-        int[] workTimes = {10, 8, 6, 4, 2};
-        long workTime = getTimeByHHmm(bean.getWorkTime());
-        for (int e : workTimes) {
-            long time = workTime - e * 60000;
-            if (System.currentTimeMillis() < time) return time;
-        }
-        return 0;
-    }
-
-
-    protected long getNextOffAuto(SigninBean bean) {
-        if (bean == null || !StringUtils.isEmpty(bean.getOffSignin()) || StringUtils.isEmpty(bean.getOffTime()))
-            return 0;
-        int[] offTimes = {4, 6, 8, 10, 12};
-        long workTime = getTimeByHHmm(bean.getOffTime());
-        for (int e : offTimes) {
-            long time = workTime + e * 60000;
-            if (System.currentTimeMillis() < time) return time;
-        }
-        return 0;
-    }
-
-
-    /*通过时分获取当天改时间时间戳*/
-    protected long getTimeByHHmm(String time) {
-        if (StringUtils.isEmpty(time)) return 0;
-        String che = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + time + ":00";//当天下班时间
-        return TimeUtils.f_str_2_long(che);
-    }
-
-    /*当前是否在办公时间内*/
-    protected boolean isWorkTime() {
-        try {
-            SigninBean bean = getNextBean();
-            //此语句判空处理有问题!!! Arison
-            if (!StringUtils.isEmpty(bean.getWorkTime()) && System.currentTimeMillis() > getTimeByHHmm(bean.getWorkTime()))
-                return true;
-            else return false;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-}

+ 6 - 5
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/Subscription2Activity.java

@@ -61,6 +61,8 @@ public class Subscription2Activity extends BaseActivity {
     private String baseUrl;//网址
     private ArrayList<SubMessage> messages;
     private SubscriptionAdapter adapter;
+    private RecycleViewDivider viewDivider;
+    private RecycleViewDivider emptyDivider;
 
     private Handler handler = new Handler() {
         @Override
@@ -99,7 +101,6 @@ public class Subscription2Activity extends BaseActivity {
             }
         }
     };
-    private LinearLayoutManager layoutManager;
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
@@ -140,10 +141,11 @@ public class Subscription2Activity extends BaseActivity {
                 loadData(true);
             }
         });
-        layoutManager = new LinearLayoutManager(ct);
+        LinearLayoutManager layoutManager = new LinearLayoutManager(ct);
         recycler.setLayoutManager(layoutManager);
-        recycler.addItemDecoration(new RecycleViewDivider(this, LinearLayout.HORIZONTAL,
-                1,getResources().getColor(R.color.gray_light)));
+        viewDivider = new RecycleViewDivider(this, LinearLayout.HORIZONTAL, 1, getResources().getColor(R.color.gray_light));
+        emptyDivider = new RecycleViewDivider(this, LinearLayout.HORIZONTAL, 0, getResources().getColor(R.color.item_line));
+        recycler.addItemDecoration(emptyDivider);
         adapter = new SubscriptionAdapter();
         DefaultItemAnimator itemAnimator = new DefaultItemAnimator();
         recycler.setItemAnimator(itemAnimator);
@@ -173,7 +175,6 @@ public class Subscription2Activity extends BaseActivity {
             public void click(View view, SubMessage bean, int position) {
                 if (bean == null) bean = (SubMessage) view.getTag();
                 if (bean == null) return;
-                Log.i("gongpengming", "position=" + position);
                 clickItem(bean, position);
             }
         });

+ 77 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/EmptyRecyclerView.java

@@ -0,0 +1,77 @@
+package com.xzjmyk.pm.activity.view;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+
+/**
+ * Created by Bitlier
+ */
+public class EmptyRecyclerView extends RecyclerView {
+
+    private View emptyView;
+    private static final String TAG = "hiwhitley";
+
+    final private AdapterDataObserver observer = new AdapterDataObserver() {
+        @Override
+        public void onChanged() {
+            checkIfEmpty();
+        }
+
+        @Override
+        public void onItemRangeInserted(int positionStart, int itemCount) {
+            Log.i(TAG, "onItemRangeInserted" + itemCount);
+            checkIfEmpty();
+        }
+
+        @Override
+        public void onItemRangeRemoved(int positionStart, int itemCount) {
+            checkIfEmpty();
+        }
+    };
+
+    public EmptyRecyclerView(Context context) {
+        super(context);
+    }
+
+    public EmptyRecyclerView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public EmptyRecyclerView(Context context, AttributeSet attrs,
+                             int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    private void checkIfEmpty() {
+        if (emptyView != null && getAdapter() != null) {
+            final boolean emptyViewVisible =
+                    getAdapter().getItemCount() == 0;
+            emptyView.setVisibility(emptyViewVisible ? VISIBLE : GONE);
+            setVisibility(emptyViewVisible ? GONE : VISIBLE);
+        }
+    }
+
+    @Override
+    public void setAdapter(Adapter adapter) {
+        final Adapter oldAdapter = getAdapter();
+        if (oldAdapter != null) {
+            oldAdapter.unregisterAdapterDataObserver(observer);
+        }
+        super.setAdapter(adapter);
+        if (adapter != null) {
+            adapter.registerAdapterDataObserver(observer);
+        }
+
+        checkIfEmpty();
+    }
+
+    public void setEmptyView(View emptyView) {
+        this.emptyView = emptyView;
+        checkIfEmpty();
+    }
+
+
+}

BIN
WeiChat/src/main/res/drawable-xxhdpi/avatar_normal.png


BIN
WeiChat/src/main/res/drawable-xxhdpi/icon_work_home.png


BIN
WeiChat/src/main/res/drawable-xxhdpi/icon_work_home1.png


BIN
WeiChat/src/main/res/drawable-xxhdpi/work_home.png


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

@@ -31,7 +31,6 @@
                 android:id="@+id/common_docui_photo_img"
                 android:layout_width="45dp"
                 android:layout_height="45dp"
-               
                 android:contentDescription="@string/app_name"
                 android:layout_marginTop="5dp"
                 android:layout_marginBottom="5dp" />

+ 11 - 7
WeiChat/src/main/res/layout/activity_subscription2.xml

@@ -21,13 +21,17 @@
         android:layout_height="match_parent"
         android:layout_above="@id/loading_tv">
 
-        <android.support.v7.widget.RecyclerView
-            android:id="@+id/recycler"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:paddingLeft="@dimen/sub_padding"
-            android:paddingRight="@dimen/sub_padding"
-            />
     </android.support.v4.widget.SwipeRefreshLayout>
 
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/recycler"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentTop="true"
+        android:paddingLeft="@dimen/sub_padding"
+        android:paddingRight="@dimen/sub_padding" />
+
+
 </RelativeLayout>

+ 20 - 24
WeiChat/src/main/res/layout/activity_test.xml

@@ -1,39 +1,35 @@
 <?xml version="1.0" encoding="utf-8"?>
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
     tools:context="com.xzjmyk.pm.activity.ui.erp.activity.oa.TestActivity">
 
     <LinearLayout
+        android:id="@+id/bottom"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
-
-        <EditText
-            android:id="@+id/seach"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:hint="搜索条件" />
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:orientation="horizontal">
 
         <Button
-            android:id="@+id/btn"
-            android:layout_width="wrap_content"
+            android:id="@+id/error_list"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:text="开始" />
+            android:layout_weight="1"
+            android:text="获取错误列表" />
+
         <Button
-            android:id="@+id/btn2"
-            android:layout_width="wrap_content"
+            android:id="@+id/test_btn"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:text="开始2" />        <Button
-            android:id="@+id/btn3"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="开始2" />
+            android:layout_weight="1"
+            android:text="测试按钮" />
     </LinearLayout>
 
-</ScrollView>
+    <ListView
+        android:id="@+id/listView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@id/bottom" />
+</RelativeLayout>

+ 36 - 0
WeiChat/src/main/res/layout/item_error_mag.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:padding="10dp">
+
+    <TextView
+        android:id="@+id/time_tv"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:text="sssss"
+        android:textColor="@color/text_main"
+        android:textSize="@dimen/text_main" />
+
+    <TextView
+        android:id="@+id/title_tv"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/time_tv"
+        android:gravity="center"
+        android:text="sssss"
+        android:textColor="@color/text_hine"
+        android:textSize="@dimen/text_hine" />
+
+    <TextView
+        android:id="@+id/msg_tv"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/title_tv"
+        android:gravity="center"
+        android:text="sssss"
+        android:textColor="@color/text_hine"
+        android:textSize="@dimen/text_hine" />
+
+</RelativeLayout>

+ 7 - 4
WeiChat/src/main/res/layout/recycler_empty_view.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
+    android:orientation="vertical"
     android:layout_height="match_parent">
 
     <View
@@ -9,6 +10,7 @@
         android:layout_height="200dp" />
 
     <TextView
+        android:id="@+id/tv"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@id/top"
@@ -17,13 +19,14 @@
         android:drawableTop="@drawable/ic_empty"
         android:gravity="center"
         android:text="@string/empty_message"
-        android:textAppearance="?android:attr/textAppearanceMedium"
         android:textColor="@color/gray_light" />
 
 
     <View
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="1" />
+        android:layout_weight="1"
+        android:minHeight="200dp"
+      />
 
-</RelativeLayout>
+</LinearLayout>

+ 2 - 2
WeiChat/src/main/res/menu/menu_work_home.xml

@@ -5,8 +5,8 @@
 
     <item
         android:id="@+id/work_home"
-        android:icon="@drawable/icon_work_home"
-        android:title="@string/oa_home"
+        android:icon="@drawable/work_home"
+        android:title="@string/work_home"
         app:showAsAction="ifRoom"/>
 
 </menu>

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

@@ -18,7 +18,7 @@
     </string-array>
     <string name="delete_item">确定要删除吗</string>
     <string name="out_net_signin">网络未连接,无法自动为您签到</string>
-    <string name="too_long_signin">当前位置距离考勤地点太远,打卡失败</string>
+    <string name="too_long_signin">当前位置距离考勤地点太远或没有获取到办公地址,打卡失败</string>
     <string name="add_company_name">请选择或输入公司名称</string>
     <string name="add_company_addr">请选择或输入公司地址</string>
     <string name="updata">更新</string>
@@ -221,7 +221,7 @@
     <string name="nearest">关注群</string>
     <string name="bisniss">我的朋友</string>
     <string name="share">分享</string>
-    <string name="oa_home">OA主界面</string>
+    <string name="work_home">工作主界面</string>
     <!-- 加好友 -->
     <string name="remark_name_format_error">备注名不合法,只允许中文、英文、字母和下划线,且长度为3至10个字符</string>
     <string name="unilateral_attention">单向关注</string>