Просмотр исходного кода

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

Arison 9 лет назад
Родитель
Сommit
55be4aa4f0

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

@@ -9,7 +9,11 @@ import com.baidu.location.BDLocationListener;
 import com.baidu.location.LocationClient;
 import com.baidu.location.LocationClientOption;
 import com.baidu.location.LocationClientOption.LocationMode;
+import com.baidu.location.Poi;
 import com.xzjmyk.pm.activity.sp.LocationSp;
+import com.xzjmyk.pm.activity.util.StringUtils;
+
+import java.util.List;
 
 public class BdLocationHelper {
     public static final String ACTION_LOCATION_UPDATE = AppConfig.sPackageName + ".action.location_update";
@@ -17,6 +21,7 @@ public class BdLocationHelper {
     private double mLongitude;
     private double mLatitude;
     private String mAddress;
+
     private String name;
     private String mProvinceName;// 省份
     private String mCityName;// 城市
@@ -25,6 +30,7 @@ public class BdLocationHelper {
 
     private LocationClient mLocationClient = null;
     private int mFaildCount = 0;
+    private List<Poi> pois;
 
     BdLocationHelper(Context context) {
         mContext = context;
@@ -76,6 +82,13 @@ public class BdLocationHelper {
             if (location != null) {
                 resultCode = location.getLocType();
             }
+            Log.i("gongpengming", StringUtils.isEmail(location.getLocationDescribe()) ? "空的" : location.getLocationDescribe());
+            if (location.getPoiList() == null || location.getPoiList().size() <= 0) {
+                Log.i("gongpengming", "location.getPoiList()不对劲");
+            } else {
+                Log.i("gongpengming", "location.getPoiList()不对劲");
+            }
+            setPois(location.getPoiList());
             // 百度定位失败
             if (resultCode != BDLocation.TypeGpsLocation && resultCode != BDLocation.TypeCacheLocation
                     && resultCode != BDLocation.TypeOffLineLocation && resultCode != BDLocation.TypeNetWorkLocation) {
@@ -125,6 +138,14 @@ public class BdLocationHelper {
 
     };
 
+    public List<Poi> getPois() {
+        return pois;
+    }
+
+    public void setPois(List<Poi> pois) {
+        this.pois = pois;
+    }
+
     // 获取经纬度
     public double getLongitude() {
         return mLongitude;

+ 7 - 10
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/VisitReportAddActivity.java

@@ -16,7 +16,6 @@ import com.alibaba.fastjson.JSONArray;
 import com.andreabaccega.widget.FormEditText;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
-import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.bean.oa.OABean;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
@@ -27,7 +26,6 @@ import com.xzjmyk.pm.activity.ui.erp.util.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.view.SingleDialog;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
 import com.xzjmyk.pm.activity.util.DateFormatUtil;
-import com.xzjmyk.pm.activity.util.TimeUtils;
 import com.xzjmyk.pm.activity.view.wheel.DateTimePicker;
 
 import java.util.ArrayList;
@@ -76,8 +74,7 @@ public class VisitReportAddActivity extends BaseActivity implements View.OnClick
     private void initView() {
         ViewUtils.inject(this);
         getSupportActionBar().setTitle("拜访报告");
-        tv_date_start.setText(TimeUtils.s_long_2_str(System.currentTimeMillis()));
-        tv_address_login.setText(MyApplication.getInstance().getBdLocationHelper().getAddress());
+//        tv_address_login.setText(MyApplication.getInstance().getBdLocationHelper().getAddress());
     }
 
     private void initListener() {
@@ -270,27 +267,27 @@ public class VisitReportAddActivity extends BaseActivity implements View.OnClick
     private void showDateDialog(final FormEditText tv) {
         DateTimePicker picker = new DateTimePicker(this, DateTimePicker.HOUR_OF_DAY);
         picker.setRange(2000, 2030);
-        picker.setSelectedItem( Calendar.getInstance().get(Calendar.YEAR),  
-                Calendar.getInstance().get(Calendar.MONTH)+1,
+        picker.setSelectedItem(Calendar.getInstance().get(Calendar.YEAR),
+                Calendar.getInstance().get(Calendar.MONTH) + 1,
                 Calendar.getInstance().get(Calendar.DAY_OF_MONTH),
                 Calendar.getInstance().get(Calendar.HOUR_OF_DAY),
                 Calendar.getInstance().get(Calendar.MINUTE));
         picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
             @Override
             public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
-                
+
                 switch (tv.getId()) {
                     case R.id.tv_date_start:
-                        tv_date_start.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute+":00");
+                        tv_date_start.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00");
                         break;
                     case R.id.tv_date_end:
-                        tv_date_end.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute+":00");
+                        tv_date_end.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00");
                         break;
                 }
             }
         });
         picker.show();
-        
+
     }
 //    private void getCodeByNet() {
 //        String url = Constants.getAppBaseUrl(ct) + "mobile/crm/updateVistPlan.action";

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

@@ -160,7 +160,6 @@ public class AddMeetingActivity extends BaseActivity implements View.OnClickList
                 }
                 break;
             case R.id.bt_save:
-
                 CodeUtil.getInstance().getCode(ct, "Meetingroomapply", new CodeUtil.OnCodeLinstener() {
                     @Override
                     public void callBack(final String code) {

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

@@ -13,6 +13,7 @@ import android.widget.TextView;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baidu.mapapi.search.core.PoiInfo;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.MyApplication;
@@ -159,7 +160,8 @@ public class MeetDetailsActivity extends BaseActivity implements View.OnClickLis
     }
 
     private void initView() {
-        getPoinfo();
+//        getPoinfo();
+        location_tv.setText(MyApplication.getInstance().getBdLocationHelper().getAddress());
         findViewById(R.id.meet_save).setOnClickListener(this);
         findViewById(R.id.num_tag).setOnClickListener(this);
         findViewById(R.id.end_meet_tv).setOnClickListener(this);
@@ -355,7 +357,8 @@ public class MeetDetailsActivity extends BaseActivity implements View.OnClickLis
                 }
                 break;
             case R.id.location_tag://点击重新定位
-                getPoinfo();
+                startActivityForResult(new Intent(ct, LocationMapActivity.class), 0x11);
+//                getPoinfo();
                 break;
             case R.id.add_task_ll://添加任务
                 intent = new Intent(ct, AddMeetTaskActivity.class);
@@ -365,5 +368,13 @@ public class MeetDetailsActivity extends BaseActivity implements View.OnClickLis
         }
     }
 
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (data == null) return;
+        if (requestCode == 0x11 && resultCode == LocationMapActivity.REQUCODE) {
+            PoiInfo poi = data.getParcelableExtra(LocationMapActivity.REQUESTNAME);
+            location_tv.setText(poi.address);
+        }
 
+    }
 }

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

@@ -6,7 +6,6 @@ import android.os.Handler;
 import android.os.Message;
 import android.text.Editable;
 import android.text.TextWatcher;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -42,7 +41,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 public class MeetingActivity extends BaseActivity {
-    private static final int PAGE_SIZE = 100;
+    private static final int PAGE_SIZE = 20;
     private final int whatLoad = 0x11;
     private int requestCode = 0x13;
     private int basePager = 1;
@@ -85,9 +84,13 @@ public class MeetingActivity extends BaseActivity {
             adapter = new MesstingAdapter();
             list_business.setAdapter(adapter);
         }
-        if (entities == null)
+        if (basePager == 1) {
             entities = listdata;
-        else entities.addAll(listdata);
+        } else {
+            if (entities == null)
+                entities = listdata;
+            else entities.addAll(listdata);
+        }
         adapter.setData(entities);
     }
 
@@ -189,7 +192,6 @@ public class MeetingActivity extends BaseActivity {
     //获取网络数据
     private void loadNetData(int pager) {
         basePager = pager;
-        Log.i("gongpengming", " basePager = pager" + pager);
         //获取网络数据
         String url = baseUrl + "mobile/common/list.action";
         String emcode = CommonUtil.getSharedPreferences(ct, "erp_username");
@@ -315,14 +317,12 @@ public class MeetingActivity extends BaseActivity {
             if (resultCode == 0x14) {
                 if ("data".equals(data.getStringExtra("data"))) {
                     list_business.setRefreshing(true);
+                    entities.clear();
                     loadNetData(1);
                 }
             } else if (resultCode == 0x15) {
-                Log.i("gongpengming", "resultCode == 0x15");
                 int i = data.getIntExtra("item", -1);
-                Log.i("gongpengming", "item=" + i);
                 if (i >= 0 && data.getBooleanExtra("data", false)) {//是否结束会议
-                    Log.i("gongpengming", "item=已结束");
                     entities = adapter.getData();
                     entities.get(i).setStatus("已结束");
                 }

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

@@ -37,6 +37,7 @@ import com.xzjmyk.pm.activity.ui.erp.activity.crm.VisitReportAddActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.crm.VisitReportPlanActivity;
 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.util.CalendarUtils;
 import com.xzjmyk.pm.activity.util.DisplayUtil;
 import com.xzjmyk.pm.activity.util.TimeUtils;
@@ -127,14 +128,22 @@ public class OAActivity extends BaseActivity implements View.OnClickListener {
         }
         Calendar c = Calendar.getInstance();
         ArrayList<OABean> chche = new ArrayList<>();
+        int ok = 0;
         for (OABean b : tag == 1 ? meBeans : otherBeans) {
             String time = b.getStartdate() == null ? b.getEnddate() : b.getStartdate();
             if (time == null) continue;
             c.setTimeInMillis(TimeUtils.f_str_2_long(time));
             if (c.get(Calendar.DAY_OF_MONTH) == CalendarUtils.getCurrentDate()) {
                 chche.add(b);
+                if (StringUtils.isEmpty(b.getStatus())) continue;
+                if ("已完成".equals(b.getStatus()) || "已拜访".equals(b.getStatus())) {
+                    ok += 0;
+                }
             }
         }
+        all_task_num.setText("工作日历:" + chche.size());
+        ok_task_num.setText("已完成:" + ok);
+        uok_task_num.setText("未完成:" + (chche.size() - ok));
         if (adapter == null) {
             adapter = new MyListViewAdapter(chche);
             listview.setAdapter(adapter);
@@ -142,6 +151,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener {
             adapter.setBeans(chche);
         }
         setTaskDay(tag == 1 ? meBeans : otherBeans);
+        rootScrollView.smoothScrollTo(0, 20);
     }
 
     private void setTaskDay(List<OABean> beans) {
@@ -308,6 +318,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener {
         //CRM链入 隐藏菜单
         if (getIntent() == null || getIntent().getIntExtra("type", 0) != 1) return;
         oa_rl_choose.setVisibility(View.GONE);
+        getSupportActionBar().setTitle("客户拜访");
     }
 
     //获取数据
@@ -444,7 +455,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener {
                         int day = c.get(Calendar.DAY_OF_MONTH);
                         if (day == downDate) {//选择那天的任务
                             beans.add(e);
-                            if ("已完成".equals(e.getStatus()) || "已拜访".equals("e.getStatus()")) {
+                            if ("已完成".equals(e.getStatus()) || "已拜访".equals(e.getStatus())) {
                                 ok += 1;
                             } else {
                                 noOk += 1;
@@ -625,14 +636,14 @@ public class OAActivity extends BaseActivity implements View.OnClickListener {
             } else {
                 viewholder.item_status_tv.setText("");
             }
-            if (chche.getStartdate() != null) {//开始时间
-
-                viewholder.item_addr_tv.setText(chche.getStartdate() == null ? "未填写" : chche.getStartdate());
-            } else if (chche.getAddress() != null) {//地址
+            if (chche.getAddress() != null) {//地址
                 viewholder.item_addr_tv.setText(chche.getAddress());
+            } else if (chche.getStartdate() != null) {//开始时间
+                viewholder.item_addr_tv.setText(chche.getStartdate() == null ? "未填写" : chche.getStartdate());
             } else {
                 viewholder.item_addr_tv.setText("");
             }
+
             if (chche.getHandler() != null) {//对象
                 viewholder.item_object_tv.setText(chche.getHandler());
             } else if (chche.getDepartment() != null || chche.getRecordman() != null) {

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

@@ -6,6 +6,7 @@ import android.os.Handler;
 import android.os.Message;
 import android.text.Editable;
 import android.text.TextWatcher;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -25,7 +26,6 @@ import com.handmark.pulltorefresh.library.PullToRefreshBase;
 import com.handmark.pulltorefresh.library.PullToRefreshListView;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
-import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.bean.oa.MeetUserEntity;
 import com.xzjmyk.pm.activity.helper.AvatarHelper;
@@ -177,8 +177,9 @@ public class UserSelectActivity extends BaseActivity {
             finish();
             return;
         }
+        String name = CommonUtil.getSharedPreferences(ct, "erp_username");
         for (int i = 0; i < adapter.getUsers().size(); i++) {
-            if (MyApplication.getInstance().mLoginUser.getUserId().equals(adapter.getUsers().get(i).getImId())) {
+            if (!StringUtils.isEmpty(name) && name.equals(adapter.getUsers().get(i).getEmCode())) {
                 list.add(adapter.getUsers().get(i));
                 continue;
             }
@@ -194,6 +195,7 @@ public class UserSelectActivity extends BaseActivity {
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == R.id.save) {
+            search_edit.setText("");
             selectOK();
         }
         return super.onOptionsItemSelected(item);
@@ -233,6 +235,7 @@ public class UserSelectActivity extends BaseActivity {
         if (adapter != null)
             adapter.setUsers(entities);
     }
+
     private void getDataByNet() {
         progressDialog.show();
         //获取网络数据

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

@@ -13,7 +13,7 @@ import com.xzjmyk.pm.activity.ui.erp.util.Constants;
  */
 public class DBOpenHelper extends SQLiteOpenHelper {
 
-    private static final int DATABASE_VERSION = 43;//数据库版本号
+    private static final int DATABASE_VERSION = 45;//数据库版本号
     public static String dataBaseName = "erp.db";//数据库名称
     public Context context;
 

+ 25 - 13
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/OutofficeFragment.java

@@ -31,6 +31,7 @@ import com.xzjmyk.pm.activity.ui.erp.activity.oa.OutofficeSetActivity;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.ViewUtil;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
+import com.xzjmyk.pm.activity.util.StringUtils;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 import com.xzjmyk.pm.activity.util.ToastUtil;
 
@@ -116,19 +117,30 @@ public class OutofficeFragment extends EasyFragment implements View.OnClickListe
         AvatarHelper.getInstance().displayAvatar(loginUserId, name_img, true);
         name_tv.setText(MyApplication.getInstance().mLoginUser.getNickName());
         com_tv.setText(CommonUtil.getSharedPreferences(ct, "erp_commpany"));
-        BaiduMapUtil.getInstence().getPoiInfo(ct, new BaiduMapUtil.OnLocationListener() {
-            @Override
-            public void result(Map<String, Object> map) {
-                out_add_name_tv.setText(map.get("poi") + "");
-//                out_add_t_tv.setText(map.get("name") + "");
-                out_add_t_tv.setText(MyApplication.getInstance().getBdLocationHelper().getAddress());
-                double latitude = (double) map.get("latitude");
-                double longitude = (double) map.get("lontitude");
-                point = new LatLng(latitude, longitude);
-                baseAddr = map.get("poi") + "";
-                BaiduMapUtil.getInstence().setMapViewPoint(mapView, point);
-            }
-        });
+        String name = MyApplication.getInstance().getBdLocationHelper().getDistrictName();
+        String addr=MyApplication.getInstance().getBdLocationHelper().getAddress();
+        out_add_name_tv.setText( StringUtils.isEmail(name)?addr:name);
+        out_add_t_tv.setText(addr);
+
+        double latitude = MyApplication.getInstance().getBdLocationHelper().getLatitude();
+        double longitude = MyApplication.getInstance().getBdLocationHelper().getLongitude();
+        point = new LatLng(latitude, longitude);
+        baseAddr=StringUtils.isEmail(name)?addr:name;
+        BaiduMapUtil.getInstence().setMapViewPoint(mapView, point);
+
+//        BaiduMapUtil.getInstence().getPoiInfo(ct, new BaiduMapUtil.OnLocationListener() {
+//            @Override
+//            public void result(Map<String, Object> map) {
+//                out_add_name_tv.setText(map.get("poi") + "");
+////                out_add_t_tv.setText(map.get("name") + "");
+//                out_add_t_tv.setText(MyApplication.getInstance().getBdLocationHelper().getAddress());
+//                double latitude = (double) map.get("latitude");
+//                double longitude = (double) map.get("lontitude");
+//                point = new LatLng(latitude, longitude);
+//                baseAddr = map.get("poi") + "";
+//                BaiduMapUtil.getInstence().setMapViewPoint(mapView, point);
+//            }
+//        });
         do_trim.setOnClickListener(this);
         click_btn.setOnClickListener(this);
     }

+ 70 - 35
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/SigninClickFragment.java

@@ -7,6 +7,9 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.support.v7.app.AlertDialog;
+import android.text.Html;
+import android.text.Spanned;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -125,6 +128,12 @@ public class SigninClickFragment extends EasyFragment implements View.OnClickLis
     private JSONArray logsJson;
     private String[] timeList;
     private AlertDialog.Builder builder;
+    private int distance = 500;
+    private double longitude = 0;
+    private double latitude = 0;
+    private double mylongitude = 0;
+    private double mylatitude = 0;
+    private int distanceOk = -1;
 
     @Override
     protected int inflateLayoutId() {
@@ -152,11 +161,13 @@ public class SigninClickFragment extends EasyFragment implements View.OnClickLis
         if (requestCode == RECODE && resultCode == LocationMapActivity.REQUCODE) {
             PoiInfo poi = data.getParcelableExtra(LocationMapActivity.REQUESTNAME);
             office_addr.setText("考勤地点:" + poi.name);
-            unoffice_mm.setText(getDistance(poi.location.latitude, poi.location.longitude) + "  地点微调");
+            unoffice_mm.setText(getDistance(poi.location.latitude, poi.location.longitude));
         }
     }
 
     private void init() {
+        mylongitude = MyApplication.getInstance().getBdLocationHelper().getLongitude();
+        mylatitude = MyApplication.getInstance().getBdLocationHelper().getLatitude();
         timeList = new String[5];
         for (int i = 0; i < timeList.length; i++)
             timeList[i] = getTitle(System.currentTimeMillis() - (DAY_TIME * i));
@@ -164,23 +175,16 @@ public class SigninClickFragment extends EasyFragment implements View.OnClickLis
         adapter = new SigninAdapter();
         listview.setAdapter(adapter);
         loadNetData(System.currentTimeMillis());//获取打卡班次信息
-        BaiduMapUtil.getInstence().getPoiInfo(ct, new BaiduMapUtil.OnLocationListener() {
-            @Override
-            public void result(Map<String, Object> map) {
-                if (map.containsKey("poi"))
-                    office_addr.setText("考勤地点:" + map.get("poi"));
-                if (map.containsKey("latitude") && map.containsKey("lontitude"))
-                    unoffice_mm.setText(getDistance((double) map.get("latitude"), (double) map.get("latitude")) + "  地点微调");
-            }
-        });
-        unoffice_mm.setVisibility(View.GONE);
     }
 
-    private String getDistance(double b1, double b2) {
-        double a1 = 22.540551;
-        double a2 = 113.953345;
-        String distance = BaiduMapUtil.getInstence().getDistance(a1, a2, b1, b2);
-        return "距离考勤地点:" + (distance == null ? "0" : distance) + "米";
+    private Spanned getDistance(double b1, double b2) {
+        String distance = BaiduMapUtil.getInstence().getDistance(longitude, latitude, b1, b2);
+        if (!StringUtils.isEmpty(distance)) {
+            distanceOk = (int) Double.parseDouble(distance);
+        }
+
+        Spanned str = Html.fromHtml("<font color=\'#858585\'>距离考勤地点: " + (distanceOk == -1 ? -1 : distanceOk) + "米    " + "</font><font color=\'#f02387\'><U>地点微调</U></font>");
+        return str;
     }
 
     private void initView() {
@@ -335,7 +339,7 @@ public class SigninClickFragment extends EasyFragment implements View.OnClickLis
         SigninBean bean = new SigninBean();
         bean.setCl_code(code);
         bean.setCl_address(office_addr.getText().toString());
-        bean.setCl_distance(300);
+        bean.setCl_distance((int) distanceOk);
         bean.setCl_emcode(CommonUtil.getSharedPreferences(ct, "erp_username"));
         bean.setCl_time(TimeUtils.f_long_2_str(System.currentTimeMillis()));
         bean.setCl_location(getLocation());
@@ -404,14 +408,19 @@ public class SigninClickFragment extends EasyFragment implements View.OnClickLis
                 break;
             case R.id.signin_btn:
                 if (isPlay && isPlayAble()) {
-                    CodeUtil.getInstance().getCode(ct, "CardLog", new CodeUtil.OnCodeLinstener() {
-                        @Override
-                        public void callBack(String code) {
-                            doSignin(code);
-                        }
-                    });
+
+                    if (distanceOk > distance) {
+                        ToastUtil.showToast(ct, "您当前不在打卡允许位置范围,请稍后重试或联系管理员");
+                    } else {
+                        CodeUtil.getInstance().getCode(ct, "CardLog", new CodeUtil.OnCodeLinstener() {
+                            @Override
+                            public void callBack(String code) {
+                                doSignin(code);
+                            }
+                        });
+                    }
                 } else
-                    ToastUtil.showToast(ct, "您未满足签到条件,请稍后再试");
+                    ToastUtil.showToast(ct, "您不在打卡允许时间范围,请稍后重试或联系管理员");
                 break;
             case R.id.title:
                 showPopMenu();
@@ -424,30 +433,41 @@ public class SigninClickFragment extends EasyFragment implements View.OnClickLis
         }
     }
 
+    private long long90 = 90 * 1000 * 60;
+
+    private String getNext90(String hhmm, boolean isU) {//通过给出的时分获取到对应90分钟的时分
+        String chche = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + hhmm + ":00";
+        long chchelong = isU ? long90 : (-long90);
+        return TimeUtils.long2str(TimeUtils.f_str_2_long(chche) + chchelong, "HHmm");
+    }
+
     //判断是否可以签到
     private boolean isPlayAble() {
         //判断适配器
         if (adapter == null || adapter.getBeans() == null || adapter.getBeans().size() <= 0)
             return false;
         ArrayList<Bean> beans = adapter.getBeans();
-        boolean ok = false;
         String str = TimeUtils.long2str(System.currentTimeMillis(), "HH:mm");//获取当前的时分
         for (Bean b : beans) {
+            if (StringUtils.isEmpty(b.time) || StringUtils.isEmpty(b.time2)) {
+                return false;
+            }
             //判断是否在上班打卡和下班打卡范围内
             //比较大小(在上班打卡时间和下班打卡时间之内)
             if (!StringUtils.isEmpty(b.startSignin) && !StringUtils.isEmpty(b.startSignin2) && str.compareTo(b.startSignin) > 0 && str.compareTo(b.startSignin2) < 0) {
                 //在该班次时间范围之内
-//                ok = true;
-//                break;
-                if (StringUtils.isEmpty(b.time2) && str.compareTo(b.time2) > 0 && !(StringUtils.isEmpty(b.signin) || b.signin.length() <= 4)) {
-                    //当前时间大于下班时间而且上班没有打过卡已经打卡过了,不能打卡
-                } else {
-                    ok = true;
-                    break;
+                if (StringUtils.isEmpty(b.signin)) {//上班卡还没有打
+                    if (getNext90(b.time, true).compareTo(str) > 0) {//当前时间在上班后的90分钟之外
+                        return true;
+                    }
+                } else {///上班打过卡了  计算是否可以下班打卡
+                    if (getNext90(b.time2, false).compareTo(str) < 0) {//如果大于0,说明当前时间在打卡时间范围之前
+                        return true;
+                    }
                 }
             }
         }
-        return ok;
+        return false;
     }
 
     private String getTitle(long time) {
@@ -488,6 +508,12 @@ public class SigninClickFragment extends EasyFragment implements View.OnClickLis
         ArrayList<Bean> beans = new ArrayList<>();
         Bean b = null;
         //上午
+        //获取打卡地点及距离
+        distance = Integer.parseInt(object.containsKey("distance") ? object.getString("distance") : "0");
+        boolean comaddressset = object.containsKey("comaddressset") ? object.getBoolean("comaddressset") : false;
+        longitude = Double.parseDouble(object.containsKey("longitude") ? object.getString("longitude") : "0");
+        latitude = Double.parseDouble(object.containsKey("latitude") ? object.getString("latitude") : "0");
+        setDistance();
         b = new Bean();
         b.time = object.containsKey("as_amstarttime") ? object.getString("as_amstarttime") : "08:30";
         b.startSignin = getEndSignin(b.time, true);
@@ -515,12 +541,22 @@ public class SigninClickFragment extends EasyFragment implements View.OnClickLis
         return TimeUtils.long2str(minTime, "HH:mm");
     }
 
+    private void setDistance() {
+        office_addr.setText("考勤地点: " + MyApplication.getInstance().getBdLocationHelper().getAddress());
+        unoffice_mm.setText(getDistance(mylatitude, mylongitude));
+    }
+
     //处理数据,用户有排班时候
     public void setDataByDegree(JSONObject object) {
         int num = object.getInteger("wd_degree");//获取排班数
         ArrayList<Bean> beans = new ArrayList<>();
-        ArrayList<Bean> chche = new ArrayList<>();
         Bean b = null;
+        //获取打卡地点及距离
+        distance = Integer.parseInt(object.containsKey("distance") ? object.getString("distance") : "0");
+        boolean comaddressset = object.containsKey("comaddressset") ? object.getBoolean("comaddressset") : false;
+        longitude = Double.parseDouble(object.containsKey("longitude") ? object.getString("longitude") : "0");
+        latitude = Double.parseDouble(object.containsKey("latitude") ? object.getString("latitude") : "0");
+        setDistance();
         switch (num) {
             case 3:
                 b = new Bean();//上班
@@ -635,7 +671,6 @@ public class SigninClickFragment extends EasyFragment implements View.OnClickLis
                 holder.signin.setText(chche.signin == null ? "" : chche.signin);
             if (!"-1".equals(chche.signin2))
                 holder.signin2.setText(chche.signin2 == null ? "" : chche.signin2);
-
             holder.tag.setText(tag1);
             holder.tag2.setText(tag2);
             return view;

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

@@ -13,259 +13,259 @@ import java.util.regex.Pattern;
 
 /**
  * 字符串操作工具包
- * 
+ *
  * @author liux (http://my.oschina.net/liux)
  * @version 1.0
  * @created 2012-3-21
  */
 @SuppressWarnings("unused")
 public class StringUtils {
-	private final static Pattern emailer = Pattern
-			.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
-	// private final static SimpleDateFormat dateFormater = new
-	// SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-	// private final static SimpleDateFormat dateFormater2 = new
-	// SimpleDateFormat("yyyy-MM-dd");
+    private final static Pattern emailer = Pattern
+            .compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
+    // private final static SimpleDateFormat dateFormater = new
+    // SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    // private final static SimpleDateFormat dateFormater2 = new
+    // SimpleDateFormat("yyyy-MM-dd");
 
-	private final static ThreadLocal<SimpleDateFormat> dateFormater = new ThreadLocal<SimpleDateFormat>() {
-		@Override
-		protected SimpleDateFormat initialValue() {
-			return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-		}
-	};
+    private final static ThreadLocal<SimpleDateFormat> dateFormater = new ThreadLocal<SimpleDateFormat>() {
+        @Override
+        protected SimpleDateFormat initialValue() {
+            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        }
+    };
 
-	private final static ThreadLocal<SimpleDateFormat> dateFormater2 = new ThreadLocal<SimpleDateFormat>() {
-		@Override
-		protected SimpleDateFormat initialValue() {
-			return new SimpleDateFormat("yyyy-MM-dd");
-		}
-	};
+    private final static ThreadLocal<SimpleDateFormat> dateFormater2 = new ThreadLocal<SimpleDateFormat>() {
+        @Override
+        protected SimpleDateFormat initialValue() {
+            return new SimpleDateFormat("yyyy-MM-dd");
+        }
+    };
 
-	/**
-	 * 将字符串转为日期类型
-	 * 
-	 * @param sdate
-	 * @return
-	 */
-	public static Date toDate(String sdate) {
-		try {
-			return dateFormater.get().parse(sdate);
-		} catch (ParseException e) {
-			return null;
-		}
-	}
+    /**
+     * 将字符串转为日期类型
+     *
+     * @param sdate
+     * @return
+     */
+    public static Date toDate(String sdate) {
+        try {
+            return dateFormater.get().parse(sdate);
+        } catch (ParseException e) {
+            return null;
+        }
+    }
 
-	/**
-	 * 以友好的方式显示时间
-	 * 
-	 * @param sdate
-	 * @return
-	 */
-	public static String friendly_time(String sdate) {
-		Date time = null;
-		if (TimeZoneUtil.isInEasternEightZones()) {
-			time = toDate(sdate);
-		} else {
-			time = TimeZoneUtil.transformTime(toDate(sdate),
-					TimeZone.getTimeZone("GMT+08"), TimeZone.getDefault());
-		}
-		if (time == null) {
-			return "Unknown";
-		}
-		String ftime = "";
-		Calendar cal = Calendar.getInstance();
+    /**
+     * 以友好的方式显示时间
+     *
+     * @param sdate
+     * @return
+     */
+    public static String friendly_time(String sdate) {
+        Date time = null;
+        if (TimeZoneUtil.isInEasternEightZones()) {
+            time = toDate(sdate);
+        } else {
+            time = TimeZoneUtil.transformTime(toDate(sdate),
+                    TimeZone.getTimeZone("GMT+08"), TimeZone.getDefault());
+        }
+        if (time == null) {
+            return "Unknown";
+        }
+        String ftime = "";
+        Calendar cal = Calendar.getInstance();
 
-		// 判断是否是同一天
-		String curDate = dateFormater2.get().format(cal.getTime());
-		String paramDate = dateFormater2.get().format(time);
-		if (curDate.equals(paramDate)) {
-			int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
-			if (hour == 0)
-				ftime = Math.max(
-						(cal.getTimeInMillis() - time.getTime()) / 60000, 1)
-						+ "分钟前";
-			else
-				ftime = hour + "小时前";
-			return ftime;
-		}
+        // 判断是否是同一天
+        String curDate = dateFormater2.get().format(cal.getTime());
+        String paramDate = dateFormater2.get().format(time);
+        if (curDate.equals(paramDate)) {
+            int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
+            if (hour == 0)
+                ftime = Math.max(
+                        (cal.getTimeInMillis() - time.getTime()) / 60000, 1)
+                        + "分钟前";
+            else
+                ftime = hour + "小时前";
+            return ftime;
+        }
 
-		long lt = time.getTime() / 86400000;
-		long ct = cal.getTimeInMillis() / 86400000;
-		int days = (int) (ct - lt);
-		if (days == 0) {
-			int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
-			if (hour == 0)
-				ftime = Math.max(
-						(cal.getTimeInMillis() - time.getTime()) / 60000, 1)
-						+ "分钟前";
-			else
-				ftime = hour + "小时前";
-		} else if (days == 1) {
-			ftime = "昨天";
-		} else if (days == 2) {
-			ftime = "前天";
-		} else if (days > 2 && days <= 10) {
-			ftime = days + "天前";
-		} else if (days > 10) {
-			ftime = dateFormater2.get().format(time);
-		}
-		return ftime;
-	}
+        long lt = time.getTime() / 86400000;
+        long ct = cal.getTimeInMillis() / 86400000;
+        int days = (int) (ct - lt);
+        if (days == 0) {
+            int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
+            if (hour == 0)
+                ftime = Math.max(
+                        (cal.getTimeInMillis() - time.getTime()) / 60000, 1)
+                        + "分钟前";
+            else
+                ftime = hour + "小时前";
+        } else if (days == 1) {
+            ftime = "昨天";
+        } else if (days == 2) {
+            ftime = "前天";
+        } else if (days > 2 && days <= 10) {
+            ftime = days + "天前";
+        } else if (days > 10) {
+            ftime = dateFormater2.get().format(time);
+        }
+        return ftime;
+    }
 
-	/**
-	 * 判断给定字符串时间是否为今日
-	 * 
-	 * @param sdate
-	 * @return boolean
-	 */
-	public static boolean isToday(String sdate) {
-		boolean b = false;
-		Date time = toDate(sdate);
-		Date today = new Date();
-		if (time != null) {
-			String nowDate = dateFormater2.get().format(today);
-			String timeDate = dateFormater2.get().format(time);
-			if (nowDate.equals(timeDate)) {
-				b = true;
-			}
-		}
-		return b;
-	}
+    /**
+     * 判断给定字符串时间是否为今日
+     *
+     * @param sdate
+     * @return boolean
+     */
+    public static boolean isToday(String sdate) {
+        boolean b = false;
+        Date time = toDate(sdate);
+        Date today = new Date();
+        if (time != null) {
+            String nowDate = dateFormater2.get().format(today);
+            String timeDate = dateFormater2.get().format(time);
+            if (nowDate.equals(timeDate)) {
+                b = true;
+            }
+        }
+        return b;
+    }
 
-	/**
-	 * 返回long类型的今天的日期
-	 * 
-	 * @return
-	 */
-	public static long getToday() {
-		Calendar cal = Calendar.getInstance();
-		String curDate = dateFormater2.get().format(cal.getTime());
-		curDate = curDate.replace("-", "");
-		return Long.parseLong(curDate);
-	}
+    /**
+     * 返回long类型的今天的日期
+     *
+     * @return
+     */
+    public static long getToday() {
+        Calendar cal = Calendar.getInstance();
+        String curDate = dateFormater2.get().format(cal.getTime());
+        curDate = curDate.replace("-", "");
+        return Long.parseLong(curDate);
+    }
 
-	/**
-	 * 判断给定字符串是否空白串。 空白串是指由空格、制表符、回车符、换行符组成的字符串 若输入字符串为null或空字符串,返回true
-	 * 
-	 * @param input
-	 * @return boolean
-	 */
-	public static boolean isEmpty(String input) {
-		if (input == null || "".equals(input))
-			return true;
+    /**
+     * 判断给定字符串是否空白串。 空白串是指由空格、制表符、回车符、换行符组成的字符串 若输入字符串为null或空字符串,返回true
+     *
+     * @param input
+     * @return boolean
+     */
+    public static boolean isEmpty(String input) {
+        if (input == null || "".equals(input))
+            return true;
 
-		for (int i = 0; i < input.length(); i++) {
-			char c = input.charAt(i);
-			if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
-				return false;
-			}
-		}
-		return true;
-	}
+        for (int i = 0; i < input.length(); i++) {
+            char c = input.charAt(i);
+            if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
+                return false;
+            }
+        }
+        return true;
+    }
 
-	/**
-	 * 判断是不是一个合法的电子邮件地址
-	 * 
-	 * @param email
-	 * @return
-	 */
-	public static boolean isEmail(String email) {
-		if (email == null || email.trim().length() == 0)
-			return false;
-		return emailer.matcher(email).matches();
-	}
+    /**
+     * 判断是不是一个合法的电子邮件地址
+     *
+     * @param email
+     * @return
+     */
+    public static boolean isEmail(String email) {
+        if (email == null || email.trim().length() == 0)
+            return false;
+        return emailer.matcher(email).matches();
+    }
 
-	/**
-	 * 字符串转整数
-	 * 
-	 * @param str
-	 * @param defValue
-	 * @return
-	 */
-	public static int toInt(String str, int defValue) {
-		try {
-			return Integer.parseInt(str);
-		} catch (Exception e) {
-		}
-		return defValue;
-	}
+    /**
+     * 字符串转整数
+     *
+     * @param str
+     * @param defValue
+     * @return
+     */
+    public static int toInt(String str, int defValue) {
+        try {
+            return Integer.parseInt(str);
+        } catch (Exception e) {
+        }
+        return defValue;
+    }
 
-	/**
-	 * 对象转整数
-	 * 
-	 * @param obj
-	 * @return 转换异常返回 0
-	 */
-	public static int toInt(Object obj) {
-		if (obj == null)
-			return 0;
-		return toInt(obj.toString(), 0);
-	}
+    /**
+     * 对象转整数
+     *
+     * @param obj
+     * @return 转换异常返回 0
+     */
+    public static int toInt(Object obj) {
+        if (obj == null)
+            return 0;
+        return toInt(obj.toString(), 0);
+    }
 
-	/**
-	 * 对象转整数
-	 * 
-	 * @param obj
-	 * @return 转换异常返回 0
-	 */
-	public static long toLong(String obj) {
-		try {
-			return Long.parseLong(obj);
-		} catch (Exception e) {
-		}
-		return 0;
-	}
+    /**
+     * 对象转整数
+     *
+     * @param obj
+     * @return 转换异常返回 0
+     */
+    public static long toLong(String obj) {
+        try {
+            return Long.parseLong(obj);
+        } catch (Exception e) {
+        }
+        return 0;
+    }
 
-	/**
-	 * 字符串转布尔值
-	 * 
-	 * @param b
-	 * @return 转换异常返回 false
-	 */
-	public static boolean toBool(String b) {
-		try {
-			return Boolean.parseBoolean(b);
-		} catch (Exception e) {
-		}
-		return false;
-	}
+    /**
+     * 字符串转布尔值
+     *
+     * @param b
+     * @return 转换异常返回 false
+     */
+    public static boolean toBool(String b) {
+        try {
+            return Boolean.parseBoolean(b);
+        } catch (Exception e) {
+        }
+        return false;
+    }
 
-	/**
-	 * 将一个InputStream流转换成字符串
-	 * 
-	 * @param is
-	 * @return
-	 */
-	public static String toConvertString(InputStream is) {
-		StringBuffer res = new StringBuffer();
-		InputStreamReader isr = new InputStreamReader(is);
-		BufferedReader read = new BufferedReader(isr);
-		try {
-			String line;
-			line = read.readLine();
-			while (line != null) {
-				res.append(line);
-				line = read.readLine();
-			}
-		} catch (IOException e) {
-			e.printStackTrace();
-		} finally {
-			try {
-				if (null != isr) {
-					isr.close();
-					isr.close();
-				}
-				if (null != read) {
-					read.close();
-					read = null;
-				}
-				if (null != is) {
-					is.close();
-					is = null;
-				}
-			} catch (IOException e) {
-			}
-		}
-		return res.toString();
-	}
+    /**
+     * 将一个InputStream流转换成字符串
+     *
+     * @param is
+     * @return
+     */
+    public static String toConvertString(InputStream is) {
+        StringBuffer res = new StringBuffer();
+        InputStreamReader isr = new InputStreamReader(is);
+        BufferedReader read = new BufferedReader(isr);
+        try {
+            String line;
+            line = read.readLine();
+            while (line != null) {
+                res.append(line);
+                line = read.readLine();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (null != isr) {
+                    isr.close();
+                    isr.close();
+                }
+                if (null != read) {
+                    read.close();
+                    read = null;
+                }
+                if (null != is) {
+                    is.close();
+                    is = null;
+                }
+            } catch (IOException e) {
+            }
+        }
+        return res.toString();
+    }
 }

+ 7 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/BaiduMapUtil.java

@@ -69,6 +69,12 @@ public class BaiduMapUtil {
         return df.format(distance);
     }
 
+    public double getDistanceByDouble(double a1, double a2, double b1, double b2) {
+        LatLng a = new LatLng(a1, a2);
+        LatLng b = new LatLng(b1, b2);
+        return Math.abs(DistanceUtil.getDistance(a, b));
+    }
+
     //计算距离
     public double getDistanceD(LatLng a, LatLng b) {
         double distance = DistanceUtil.getDistance(a, b);
@@ -89,6 +95,7 @@ public class BaiduMapUtil {
      * @param isClear 是否清除前面的点
      */
     public void setMapViewPoint(MapView mapView, LatLng point, boolean isClear) {
+
         // 构建Marker图标
         BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
         // 构建MarkerOption,用于在地图上添加Marker

+ 19 - 10
WeiChat/src/main/res/layout/fragment_signin.xml

@@ -3,6 +3,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@color/oa_main">
+
     <RelativeLayout
         android:id="@+id/top"
         android:layout_width="match_parent"
@@ -33,20 +34,26 @@
             android:padding="8dp"
             android:src="@drawable/setting" />
     </RelativeLayout>
+
     <LinearLayout
         android:id="@+id/oa_range_addr_rl"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
+        android:layout_marginBottom="8dp"
         android:orientation="vertical"
         android:padding="5dp">
 
         <TextView
             android:id="@+id/office_addr"
-            android:layout_width="match_parent"
+            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
             android:drawableLeft="@drawable/oa_signin"
-            android:text="考勤地点:" />
+            android:gravity="center_horizontal"
+            android:text="考勤地点:"
+            android:drawablePadding="10dp"
+            android:textColor="@color/text_hine" />
 
         <TextView
             android:id="@+id/unoffice_mm"
@@ -56,16 +63,24 @@
             android:text="地点微调"
             android:textColor="@color/cadetblue" />
     </LinearLayout>
+
     <ImageView
         android:id="@+id/signin_btn"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_above="@+id/oa_range_addr_rl"
         android:layout_centerHorizontal="true"
+        android:layout_marginBottom="8dp"
         android:clickable="true"
         android:gravity="center"
         android:src="@drawable/signin_btn" />
-
+    <View
+        android:layout_width="2px"
+        android:layout_height="match_parent"
+        android:layout_above="@+id/signin_btn"
+        android:layout_below="@+id/top"
+        android:layout_centerHorizontal="true"
+        android:background="@color/item_line" />
     <ListView
         android:id="@+id/listview"
         android:layout_width="match_parent"
@@ -80,11 +95,5 @@
         android:longClickable="false"
         android:minHeight="100dp" />
 
-    <View
-        android:layout_width="2px"
-        android:layout_height="match_parent"
-        android:layout_above="@+id/signin_btn"
-        android:layout_below="@+id/top"
-        android:layout_centerHorizontal="true"
-        android:background="@color/item_line" />
+
 </RelativeLayout>