Browse Source

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

SpringBoots 9 years ago
parent
commit
a8732e3e80
26 changed files with 587 additions and 320 deletions
  1. 2 1
      WeiChat/src/main/AndroidManifest.xml
  2. 5 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/BdLocationHelper.java
  3. 164 15
      WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/SearchPoiParam.java
  4. 18 8
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/base/BaseActivity.java
  5. 13 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ChangeMobileActivity.java
  6. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/FlightsActivity.java
  7. 7 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/FlihtsTimeActivity.java
  8. 0 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/LocationSearchActivity.java
  9. 15 16
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MissionActivity.java
  10. 3 10
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/MyRuleSetActivity.java
  11. 62 13
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/SearchLocationActivity.java
  12. 1 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/WorkActivity.java
  13. 33 41
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/SearchLocationAdapter.java
  14. 44 130
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/AttendanceFragment.java
  15. 13 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/FlightsPresernter.java
  16. 133 25
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/SearchPresenter.java
  17. 12 12
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/WorkPresenter.java
  18. 3 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/ISearchView.java
  19. 8 6
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/auto/AutoErpService.java
  20. 2 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java
  21. 21 11
      WeiChat/src/main/java/com/xzjmyk/pm/activity/util/TimeUtils.java
  22. 1 2
      WeiChat/src/main/res/layout/activity_location_search.xml
  23. 5 3
      WeiChat/src/main/res/layout/activity_search_location.xml
  24. 19 10
      WeiChat/src/main/res/layout/fragment_attendance.xml
  25. 1 0
      WeiChat/src/main/res/layout/item_flights.xml
  26. 1 1
      WeiChat/src/main/res/values/strings.xml

+ 2 - 1
WeiChat/src/main/AndroidManifest.xml

@@ -861,7 +861,8 @@
         <activity
             android:name=".ui.erp.activity.oa.SignStatisticalActivity"
             android:label="考勤统计" />
-        <activity android:name=".ui.erp.activity.oa.SearchLocationActivity" />
+        <activity android:name=".ui.erp.activity.oa.SearchLocationActivity"
+            android:windowSoftInputMode="stateUnspecified|adjustNothing" />
         <activity
             android:name=".ui.erp.activity.oa.SelectDepartmentActivity"
             android:configChanges="keyboardHidden|orientation"

+ 5 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/BdLocationHelper.java

@@ -130,7 +130,7 @@ public class BdLocationHelper {
     };
 
     private synchronized void setLocation(BDLocation location) throws Exception {
-        if (System.currentTimeMillis() - oldTime < 50000) return;//防止过度
+        if (System.currentTimeMillis() - oldTime < 10000) return;//防止过度
         if (locationEntity == null)
             locationEntity = new LocationEntity();
         locationEntity.clear();
@@ -140,7 +140,6 @@ public class BdLocationHelper {
                 ) {
             //定位成功
             oldTime = System.currentTimeMillis();
-            log("定位成功");
             locationEntity.setLocationOk(true);
             locationEntity.setLatitude(location.getLatitude());
             locationEntity.setLongitude(location.getLongitude());
@@ -215,7 +214,10 @@ public class BdLocationHelper {
 
     // 获取地址详情
     public String getAddress() {
-        return locationEntity == null ? "" : locationEntity.getAddress();
+        String addr = locationEntity == null ? "" : locationEntity.getAddress();
+        if (StringUtils.isEmpty(addr)) ;
+        addr = PreferenceUtils.getString("bdaddress");
+        return addr;
     }
 
     public String getProvinceName() {

+ 164 - 15
WeiChat/src/main/java/com/xzjmyk/pm/activity/bean/oa/SearchPoiParam.java

@@ -4,28 +4,177 @@ package com.xzjmyk.pm.activity.bean.oa;
  * 因为考虑到查询地址的时候传的参数太多了,所以定义一个参数实体类
  * Created by Bitliker on 2017/2/22.
  */
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.baidu.mapapi.model.LatLng;
+import com.xzjmyk.pm.activity.MyApplication;
+
 /**
- * 检索地址列表
- * 1.外勤签到、打卡签到、会议详情
- * 参数:
- * type(搜索方式int 1.搜索附近 2.搜索地名)
- * 1.radius(范围 int)
- * 2.keyWork(搜索值)
- * <p>
- * 公共:
- * 1、title(标题String) 2、style(主题 int)
- * 3、latlng(对比距离的位置)   l 4、search(是否有搜索框 boolean)
- * 5、resultCode(返回码 int) 6、resultName(返回key String )
- * 6、isKm(是否使用km距离计算 boolean)
- * 6、isSort(是否排序 boolean)
+ * 调用地图显示界面,由于多处调用,所以参数太多,整理为一个参数类中
+ * create by Bitliker 2017/2/23
  */
-public class SearchPoiParam {
+public class SearchPoiParam implements Parcelable {
+    private boolean isShowSearchEdit;//是否显示搜索框
+    private int resultCode;//返回码
+    private String resultKey;//返回数据的map参数key
+    private int riceTimes;//显示的距离是米的多少倍数,(如果是km==1000)
+    private String distanceTag;//显示距离的单位
+    private LatLng contrastLatLng;//作为对比距离的位置,如果为空就取当前位置
+    private String title;//显示的标题
+
+    private int type;//搜索类型 1.表示搜索附近  2.表示搜索名字位置
+    private int radius;//搜索附近时候选择范围大小
+    private String keyWork;//搜索名字位置时候位置名称
+
+
+    public SearchPoiParam() {
+        isShowSearchEdit = true;
+        riceTimes = 1;
+        type = 1;
+        resultCode = 0x20;
+        resultKey = "resultKey";
+        distanceTag = "m";
+        title = "地址微调";
+        radius = 200;
+        contrastLatLng = MyApplication.getInstance().getBdLocationHelper().getLocation();
+    }
+
+    public SearchPoiParam(boolean isShowSearchEdit, int resultCode, String resultKey, int riceTimes, String distanceTag, LatLng contrastLatLng, String title, int type, int radius, String keyWork) {
+        this.isShowSearchEdit = isShowSearchEdit;
+        this.resultCode = resultCode;
+        this.resultKey = resultKey;
+        this.riceTimes = riceTimes;
+        this.distanceTag = distanceTag;
+        this.contrastLatLng = contrastLatLng;
+        this.title = title;
+        this.type = type;
+        this.radius = radius;
+        this.keyWork = keyWork;
+    }
+
+    protected SearchPoiParam(Parcel in) {
+        isShowSearchEdit = in.readByte() != 0;
+        resultCode = in.readInt();
+        resultKey = in.readString();
+        riceTimes = in.readInt();
+        distanceTag = in.readString();
+        contrastLatLng = in.readParcelable(LatLng.class.getClassLoader());
+        title = in.readString();
+        type = in.readInt();
+        radius = in.readInt();
+        keyWork = in.readString();
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeByte((byte) (isShowSearchEdit ? 1 : 0));
+        dest.writeInt(resultCode);
+        dest.writeString(resultKey);
+        dest.writeInt(riceTimes);
+        dest.writeString(distanceTag);
+        dest.writeParcelable(contrastLatLng, flags);
+        dest.writeString(title);
+        dest.writeInt(type);
+        dest.writeInt(radius);
+        dest.writeString(keyWork);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Creator<SearchPoiParam> CREATOR = new Creator<SearchPoiParam>() {
+        @Override
+        public SearchPoiParam createFromParcel(Parcel in) {
+            return new SearchPoiParam(in);
+        }
+
+        @Override
+        public SearchPoiParam[] newArray(int size) {
+            return new SearchPoiParam[size];
+        }
+    };
+
+    public boolean isShowSearchEdit() {
+        return isShowSearchEdit;
+    }
+
+    public void setShowSearchEdit(boolean showSearchEdit) {
+        isShowSearchEdit = showSearchEdit;
+    }
+
+    public int getResultCode() {
+        return resultCode;
+    }
+
+    public void setResultCode(int resultCode) {
+        this.resultCode = resultCode;
+    }
 
-    private SearchPoiParam() {
+    public String getResultKey() {
+        return resultKey;
     }
 
+    public void setResultKey(String resultKey) {
+        this.resultKey = resultKey;
+    }
 
+    public int getRiceTimes() {
+        return riceTimes;
+    }
 
+    public void setRiceTimes(int riceTimes) {
+        this.riceTimes = riceTimes;
+    }
 
+    public String getDistanceTag() {
+        return distanceTag;
+    }
 
+    public void setDistanceTag(String distanceTag) {
+        this.distanceTag = distanceTag;
+    }
+
+    public LatLng getContrastLatLng() {
+        return contrastLatLng;
+    }
+
+    public void setContrastLatLng(LatLng contrastLatLng) {
+        this.contrastLatLng = contrastLatLng;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    public int getRadius() {
+        return radius;
+    }
+
+    public void setRadius(int radius) {
+        this.radius = radius;
+    }
+
+    public String getKeyWork() {
+        return keyWork;
+    }
+
+    public void setKeyWork(String keyWork) {
+        this.keyWork = keyWork;
+    }
 }

+ 18 - 8
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/base/BaseActivity.java

@@ -50,7 +50,7 @@ public abstract class BaseActivity extends ActionBackActivity {
     protected void onResume() {
         super.onResume();
         MobclickAgent.onResume(this);
-       // getRootView().setFitsSystemWindows(true);
+        // getRootView().setFitsSystemWindows(true);
     }
 
     @Override
@@ -61,6 +61,7 @@ public abstract class BaseActivity extends ActionBackActivity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
+        initStyle();
         super.onCreate(savedInstanceState);
         if (android.os.Build.VERSION.SDK_INT > 108) {
             Window window = getWindow();
@@ -81,15 +82,24 @@ public abstract class BaseActivity extends ActionBackActivity {
         mFastVolley = MyApplication.getInstance().getFastVolley();
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏
         progressDialog = CustomProgressDialog.createDialog(this);
-    
-        
-       // SystemUtil.setSystemBarTint(this);
-       
+
+
+        // SystemUtil.setSystemBarTint(this);
+
+    }
+
+    private void initStyle() {
+        if (getIntent() == null || getIntent().getIntExtra("style", -1) == -1) return;
+        try {
+            int theme = getSharedPreferences("cons", MODE_PRIVATE).
+                    getInt("theme", getIntent().getIntExtra("style", -1));
+            setTheme(theme);
+        } catch (Exception e) {
+        }
     }
 
-    private  View getRootView()
-    {
-        return ((ViewGroup)findViewById(android.R.id.content)).getChildAt(0);
+    private View getRootView() {
+        return ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
     }
 
 

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

@@ -5,6 +5,7 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
@@ -12,6 +13,7 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.MyApplication;
@@ -20,6 +22,7 @@ import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.net.ViewUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.Constants;
+import com.xzjmyk.pm.activity.ui.erp.util.JsonValidator;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 import com.xzjmyk.pm.activity.view.crouton.Crouton;
@@ -84,9 +87,17 @@ public class ChangeMobileActivity extends BaseActivity {
                     break;
                 case Constants.APP_SOCKETIMEOUTEXCEPTION:
                     progressDialog.dismiss();
-                    if (!StringUtils.isEmpty(message)) {
-                        Crouton.makeText(ct, StringUtils.getChinese(message));
+                    if (StringUtils.isEmpty(message)) return;
+                    Log.i("gongpengming", "message=" + message);
+                    JsonValidator validator = new JsonValidator();
+                    String showMessage = null;
+                    if (validator.validate(message) && JSON.parseObject(message).containsKey("exceptionInfo")) {
+                        JSONObject exceptionInfo = JSON.parseObject(message);
+                        showMessage = exceptionInfo.getString("exceptionInfo");
+                    } else {
+                        showMessage = message;
                     }
+                    Crouton.makeText(ct, showMessage);
                     break;
                 default:
                     break;

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

@@ -125,7 +125,7 @@ public class FlightsActivity extends OABaseActivity implements IFlightsView, Fli
 
     private void showDeleteDialog(final int position) {
         AlertDialog.Builder builder = new AlertDialog.Builder(ct);
-        builder.setTitle(R.string.prompt_title).setMessage("是否确认删除")
+        builder.setTitle(R.string.prompt_title).setMessage("删除班次后成员自动回到默认排班中,是否继续?")
                 .setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialogInterface, int i) {

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

@@ -310,6 +310,13 @@ public class FlihtsTimeActivity extends OABaseActivity implements View.OnClickLi
      */
     private String getLastTime(int position, boolean isWork) {
         String lastTime = "";
+
+        if (beanList.size() > position) {
+            if (isWork) lastTime = beanList.get(position).startTime;
+            else lastTime = beanList.get(position).endTime;
+            if (!StringUtils.isEmpty(lastTime)) return lastTime;
+        }
+
         if (position == 0) {
             if (isWork) return "00:00";
             else return beanList.get(position).startTime;

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

@@ -152,10 +152,6 @@ public class LocationSearchActivity extends BaseActivity {
         else
             intent.putParcelableArrayListExtra(resultName, selectedData);
         setResult(resultCode, intent);
-        Log.i("gongpengming", "endOfActivity");
-        Log.i("gongpengming", "poi.latitude=" + poi.location.latitude);
-        Log.i("gongpengming", "poi.longitude=" + poi.location.longitude);
-        Log.i("gongpengming", "__________________");
         finish();
     }
 

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

@@ -46,7 +46,6 @@ import com.xzjmyk.pm.activity.util.DisplayUtil;
 import com.xzjmyk.pm.activity.util.PreferenceUtils;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 import com.xzjmyk.pm.activity.view.MostLinearLayoutManager;
-import com.xzjmyk.pm.activity.view.crouton.Crouton;
 
 import java.util.List;
 
@@ -208,20 +207,20 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
 //                intent = new Intent(ct, DestinationActivity.class);
                 startActivityForResult(intent, 0x20);
                 break;
-            case R.id.item_companyaddr_tv://选择公司地址
-                if (true) return;
-                if (model == null || model.getStatus() == 1) return;
-                String company = model.getCompanyName();
-                intent = new Intent(ct, LocationSearchActivity.class);
-                intent.putExtra("type", 2);
-                intent.putExtra("keyWork", company);
-                intent.putExtra("title", "选择地址");
-                intent.putExtra("single", true);
-                intent.putExtra("resultCode", 0x20);
-                intent.putExtra("isKm", true);
-                intent.putExtra("resultName", "resultName");
-                startActivityForResult(intent, 0x21);
-                break;
+//            case R.id.item_companyaddr_tv://选择公司地址
+//                if (true) return;
+//                if (model == null || model.getStatus() == 1) return;
+//                String company = model.getCompanyName();
+//                intent = new Intent(ct, LocationSearchActivity.class);
+//                SearchPoiParam poiParam = new SearchPoiParam();
+//                poiParam.setType(2);
+//                poiParam.setKeyWork(company);
+//                poiParam.setTitle("选择地址");
+//                poiParam.setResultCode(0x20);
+//                poiParam.setDistanceTag("Km");
+//                poiParam.setResultKey("resultName");
+//                startActivityForResult(intent, 0x21);
+//                break;
             case R.id.item_delete_tv://删除选项
                 try {
                     MissionModel m = adapter.getModels().get(position);
@@ -520,7 +519,7 @@ public class MissionActivity extends OABaseActivity implements View.OnClickListe
             dialog.show();
         } else {
             stringId = R.string.networks_out;
-            showToast(stringId,R.color.load_message);
+            showToast(stringId, R.color.load_message);
         }
     }
 

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

@@ -13,6 +13,7 @@ import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.base.BaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.model.oa.WorkModel;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.OACheckUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 
@@ -95,7 +96,7 @@ public class MyRuleSetActivity extends BaseActivity {
                 String t1 = e.getWorkTime();
                 String t2 = e.getOffTime();
                 timeShow.append(t1 + "-" + t2 + " ");
-                allTime += getAllTime(t1, t2);
+                allTime += OACheckUtil.getDifferSS(t1, t2);
             }
             float h = Float.valueOf(allTime) / (1000 * 60*60);
             String hour = float2String(h);
@@ -117,15 +118,7 @@ public class MyRuleSetActivity extends BaseActivity {
             h = h.replaceAll("0+?$", "");//去掉后面无用的零
             h = h.replaceAll("[.]$", "");//如小数点后面全是零则去掉小数点
         }
-//        boolean isLeveZ = hour < 1;
-//        DecimalFormat df = new DecimalFormat(".#");
-//        String s = df.format(hour);
-//        if (s.indexOf(".") > 0) {
-//            //正则表达
-//            s = s.replaceAll("0+?$", "");//去掉后面无用的零
-//            s = s.replaceAll("[.]$", "");//如小数点后面全是零则去掉小数点
-//        }
-//        return (isLeveZ ? "0" : "") + s;
+
         return h;
     }
 

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

@@ -1,46 +1,95 @@
 package com.xzjmyk.pm.activity.ui.erp.activity.oa;
 
 import android.os.Bundle;
+import android.text.Editable;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.EditText;
+import android.widget.RelativeLayout;
 
+import com.baidu.mapapi.map.MapView;
+import com.baidu.mapapi.model.LatLng;
+import com.handmark.pulltorefresh.library.PullToRefreshListView;
+import com.lidroid.xutils.ViewUtils;
+import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.erp.adapter.SearchLocationAdapter;
+import com.xzjmyk.pm.activity.ui.erp.entity.EditChangeListener;
 import com.xzjmyk.pm.activity.ui.erp.model.oa.SearchLocationModel;
 import com.xzjmyk.pm.activity.ui.erp.presenter.SearchPresenter;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.ISearchView;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.view.EmptyLayout;
+import com.xzjmyk.pm.activity.util.BaiduMapUtil;
 
 import java.util.List;
 
 public class SearchLocationActivity extends OABaseActivity implements ISearchView {
+    @ViewInject(R.id.search_edit)
+    private EditText search_edit;
+    @ViewInject(R.id.bmapView)
+    private MapView bmapView;
+    @ViewInject(R.id.listview)
+    private PullToRefreshListView listview;
+    @ViewInject(R.id.search_rl)
+    private RelativeLayout search_rl;
 
     private SearchPresenter presenter;
-    private SearchLocationAdapter adapter;
+    private SearchLocationAdapter mAdapter;
+    private EmptyLayout mEmptyLayout;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
-        initStyle();
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_search_location);
-        init();
-    }
+        ViewUtils.inject(this);
+        initView();
 
-    private void initStyle() {
-        if (getIntent() == null || getIntent().getIntExtra("style", -1) == -1) return;
-        int theme = getSharedPreferences("cons", MODE_PRIVATE).
-                getInt("theme", getIntent().getIntExtra("style", -1));
-        setTheme(theme);
-    }
-    private void init() {
-        presenter = new SearchPresenter(this);
     }
 
     private void initView() {
+        mEmptyLayout = new EmptyLayout(this, listview.getRefreshableView());
+        mEmptyLayout.setShowLoadingButton(false);
+        mEmptyLayout.setShowEmptyButton(false);
+        mEmptyLayout.setShowErrorButton(false);
+        mEmptyLayout.setEmptyViewRes(R.layout.empty_locayion);
+
         presenter = new SearchPresenter(this);
         presenter.init(getIntent());
+        search_edit.addTextChangedListener(new EditChangeListener() {
+            @Override
+            public void afterTextChanged(Editable s) {
+                presenter.search(s.toString());
+            }
+        });
+        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+                List<SearchLocationModel> chche = mAdapter.getListData();
+                int item = (position - 1) <= 0 ? 0 : (position - 1);
+                if (ListUtils.isEmpty(chche) || chche.size() <= item) return;
+                presenter.endActivity(SearchLocationActivity.this, chche.get(item).getPoiInfo());
+            }
+        });
     }
 
 
     @Override
-    public void showPoiList(List<SearchLocationModel> models) {
+    public void showPoiList(List<SearchLocationModel> models, String distanceTag) {
+        if (ListUtils.isEmpty(models)) {
+            mEmptyLayout.showEmpty();
+        }
+        if (mAdapter == null) {
+            mAdapter = new SearchLocationAdapter(ct, models, distanceTag);
+            listview.setAdapter(mAdapter);
+        } else {
+            mAdapter.setListData(models, distanceTag);
+            mAdapter.notifyDataSetChanged();
+        }
+    }
 
+    @Override
+    public void showPoiPoint(LatLng location) {
+        BaiduMapUtil.getInstence().setMapViewPoint(bmapView, location, true);
     }
 }

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

@@ -271,7 +271,6 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
             case R.id.signin_btn:
                 if (isSubmitAble())
                     presenter.submit((ArrayList<WorkModel>) adapter.getModels(), macAddress);
-                else Crouton.showToast(this, R.string.not_today, R.color.load_warning);
                 break;
             case R.id.date_tv:
                 showDateDialog();
@@ -401,7 +400,7 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (data == null) return;
         if (requestCode == ADDRESS_CHANGE && resultCode == ADDRESS_CHANGE) {//地址微调
-            PoiInfo poi = data.getParcelableExtra("resultName");
+            PoiInfo poi = data.getParcelableExtra("resultKey");
             if (poi == null || presenter == null) return;
             presenter.changPoi(poi);
         } else if (requestCode == PHONE_CHANGE && resultCode == 0x20) {

+ 33 - 41
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/SearchLocationAdapter.java

@@ -7,14 +7,10 @@ import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.TextView;
 
-import com.baidu.mapapi.model.LatLng;
-import com.baidu.mapapi.search.core.PoiInfo;
 import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.SearchLocationModel;
 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 java.text.DecimalFormat;
 import java.util.List;
 
 /**
@@ -22,25 +18,24 @@ import java.util.List;
  */
 
 public class SearchLocationAdapter extends BaseAdapter {
-    private boolean isShowKm;
     private Context ct;
-    private LatLng location;//对象目的地
-    private List<PoiInfo> listData;
+    private List<SearchLocationModel> listData;
+    private String distanceTag;
 
-    public SearchLocationAdapter(Context ct, boolean isShowKm, LatLng location, List<PoiInfo> listData) {
-        this.isShowKm = isShowKm;
+
+    public SearchLocationAdapter(Context ct, List<SearchLocationModel> listData, String distanceTag) {
         this.ct = ct;
-        this.location = location;
         this.listData = listData;
+        this.distanceTag = distanceTag;
     }
 
-    public List<PoiInfo> getListData() {
+    public List<SearchLocationModel> getListData() {
         return listData;
     }
 
-    public void setListData(List<PoiInfo> listData) {
+    public void setListData(List<SearchLocationModel> listData, String distanceTag) {
+        this.distanceTag = distanceTag;
         this.listData = listData;
-        notifyDataSetChanged();
     }
 
     @Override
@@ -71,38 +66,35 @@ public class SearchLocationAdapter extends BaseAdapter {
         } else {
             holder = (ViewHolder) view.getTag();
         }
-        holder.address_tv.setText(listData.get(i).address);
-        holder.name_tv.setText(listData.get(i).name);
-        String distance = "";
-        if (location != null) {
-            distance = getDistance(listData.get(i).location);
-        }
+        holder.address_tv.setText(listData.get(i).getPoiInfo().address);
+        holder.name_tv.setText(listData.get(i).getPoiInfo().name);
+        String distance = (listData.get(i).getDistance() == 0 ? "0" : listData.get(i).getDistance()) + "" + distanceTag;
         holder.distance_tv.setText(distance);
         return view;
     }
 
-    private String getDistance(LatLng location) {
-        String dis = BaiduMapUtil.getInstence().getDistance(location, location);
-        if (StringUtils.isEmpty(dis)) return String.valueOf(0);
-        if (isShowKm) {
-            return getKm(dis) + " km";
-        } else {
-            return dis + " m";
-        }
-    }
+//    private String getDistance(LatLng location) {
+//        String dis = BaiduMapUtil.getInstence().getDistance(location, location);
+//        if (StringUtils.isEmpty(dis)) return String.valueOf(0);
+//        if (isShowKm) {
+//            return getKm(dis) + " km";
+//        } else {
+//            return dis + " m";
+//        }
+//    }
 
-    private String getKm(String dis) {
-        if (StringUtils.isEmpty(dis)) return String.valueOf(0);
-        try {
-            DecimalFormat fnum = new DecimalFormat("##0.00");
-            String dd = fnum.format(Float.valueOf(dis) / 1000);
-            return dd;
-        } catch (ClassCastException e) {
-            return String.valueOf(0);
-        } catch (Exception e) {
-            return String.valueOf(0);
-        }
-    }
+//    private String getKm(String dis) {
+//        if (StringUtils.isEmpty(dis)) return String.valueOf(0);
+//        try {
+//            DecimalFormat fnum = new DecimalFormat("##0.00");
+//            String dd = fnum.format(Float.valueOf(dis) / 1000);
+//            return dd;
+//        } catch (ClassCastException e) {
+//            return String.valueOf(0);
+//        } catch (Exception e) {
+//            return String.valueOf(0);
+//        }
+//    }
 
     class ViewHolder {
         TextView name_tv, address_tv, distance_tv;

+ 44 - 130
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/AttendanceFragment.java

@@ -2,7 +2,6 @@ package com.xzjmyk.pm.activity.ui.erp.fragment;
 
 
 import android.os.Bundle;
-import android.os.Looper;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -12,7 +11,6 @@ import android.widget.ScrollView;
 import android.widget.TextView;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
@@ -22,11 +20,11 @@ import com.xzjmyk.pm.activity.ui.base.EasyFragment;
 import com.xzjmyk.pm.activity.ui.erp.model.oa.WorkModel;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
-import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.auto.HttpHandler;
 import com.xzjmyk.pm.activity.ui.erp.view.oacalender.CalenderView;
 import com.xzjmyk.pm.activity.util.TimeUtils;
+import com.xzjmyk.pm.activity.util.WorkHandlerUtil;
 import com.xzjmyk.pm.activity.view.crouton.Crouton;
 
 import java.util.ArrayList;
@@ -47,6 +45,8 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
     private ScrollView month_sv;
     @ViewInject(R.id.day_lv)
     private ListView day_lv;
+    @ViewInject(R.id.date_tv)
+    private TextView date_tv;
 
     @ViewInject(R.id.l1)
     private TextView l1;
@@ -76,6 +76,7 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
 
     private WorkAdapter adapter;
     private Date selectDate = null;
+    private String newHHmm;
 
 
     @Override
@@ -92,12 +93,9 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
     }
 
     private void initView() {
-        calender.setOnMonthChangeListener(new CalenderView.OnMonthChangeListener() {
-            @Override
-            public void selected(String yyyyMM) {
-                loadByNet(yyyyMM);
-            }
-        });
+        newHHmm = TimeUtils.long2str(System.currentTimeMillis(), "HH:mm");
+        date_tv.setText(TimeUtils.long2str(System.currentTimeMillis(), "yyyy年MM月"));
+
         loadByNet(TimeUtils.long2str(System.currentTimeMillis(), "yyyyMM"));
         View emptyView = LayoutInflater.from(ct).inflate(R.layout.erp_empty_view, null);
         day_lv.setEmptyView(emptyView);
@@ -110,14 +108,15 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
             public void selected(boolean isClickAgen, Date date) {
                 selectDate = date;
                 showMessage(isClickAgen);
-                LogUtil.d("selectDate=" + TimeUtils.f_long_2_str(selectDate.getTime()));
-                LogUtil.d("xiancheng==" + (Looper.getMainLooper() == Looper.myLooper()));
             }
         });
+
         calender.setOnMonthChangeListener(new CalenderView.OnMonthChangeListener() {
             @Override
             public void selected(String yyyyMM) {
-                LogUtil.d("yyyyMM=" + yyyyMM);
+                long time = TimeUtils.str2long(yyyyMM, "yyyyMM");
+                if (time != 0)
+                    date_tv.setText(TimeUtils.long2str(time, "yyyy年MM月"));
                 loadByNet(yyyyMM);
             }
         });
@@ -180,134 +179,26 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
      * 处理打卡签到
      */
     private void handlerWorkData(JSONObject object, Bundle bundle) throws Exception {
-        ArrayList<WorkModel> models = new ArrayList<>();
-        if (object.containsKey("wd_degree")) {//有排班
-            if (object.containsKey("Class1")) {
-                handlerByClass(models, object.getJSONObject("Class1"));
-            }
-            if (object.containsKey("Class2")) {
-                handlerByClass(models, object.getJSONObject("Class2"));
-            }
-            if (object.containsKey("Class3")) {
-                handlerByClass(models, object.getJSONObject("Class3"));
-            }
-        }
+        ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkData(object);
         if (ListUtils.isEmpty(models)) {
             setDate2Adapter(null);
         }
         loadLog(models, bundle);
     }
 
-    /**
-     * 处理班次情况,简化代码  分开函数
-     *
-     * @param models
-     * @param object
-     */
-    private void handlerByClass(ArrayList<WorkModel> models, JSONObject object) {
-        String wd_onbeg = object.getString("wd_onbeg");
-        String wd_onduty = object.getString("wd_onduty");
-        String wd_offduty = object.getString("wd_offduty");
-        String wd_offend = object.getString("wd_offend");
-        if (StringUtils.isEmpty(wd_onbeg)
-                || StringUtils.isEmpty(wd_onduty)
-                || StringUtils.isEmpty(wd_offduty)
-                || StringUtils.isEmpty(wd_offend)) return;
-        WorkModel model = new WorkModel();
-        model.setWorkStart(wd_onbeg);
-        model.setWorkTime(wd_onduty);
-        String rangeTime = null;
-        try {
-            rangeTime = getStartAndEndTime(true, wd_onduty);
-            if (!StringUtils.isEmpty(rangeTime)) {
-                model.setWorkend(rangeTime);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        model.setOffTime(wd_offduty);
-        model.setOffend(wd_offend);
-        try {
-            rangeTime = getStartAndEndTime(false, wd_offduty);
-            if (!StringUtils.isEmpty(rangeTime)) {
-                model.setOffStart(rangeTime);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        models.add(model);
-    }
-
     /**
      * 处理打卡签到列表,建议在线程钟使用
      *
-     * @param models 获取班次信息时候的数据
+     * @param logModels 获取班次信息时候的数据
      * @throws Exception
      */
-    private void handlerWorkLog(JSONObject object, final ArrayList<WorkModel> models) throws Exception {
-        JSONArray listdata = object.getJSONArray("listdata");
-        if (ListUtils.isEmpty(listdata)) {
-            setDate2Adapter(null);
-            return;
-        }
-        String timeLog = null;
-        for (int i = 0; i < listdata.size(); i++) {
-            timeLog = getMinTime(listdata.getJSONObject(i).getString("cl_time"));
-            for (int j = 0; j < models.size(); j++) {
-                WorkModel e = models.get(j);
-                if (StringUtils.isEmpty(e.getWorkStart()) || StringUtils.isEmpty(e.getWorkTime()) ||
-                        StringUtils.isEmpty(e.getOffend()) || StringUtils.isEmpty(e.getOffTime()))
-                    continue;
-                if (e.getWorkStart().compareTo(timeLog) <= 0 && e.getOffend().compareTo(timeLog) >= 0) {
-                    //符合该班次    上班开始时间<time<下班结束时间
-                    if (enoughWork(e, timeLog)) {//属于上班打卡
-                        models.get(j).setWorkSignin(timeLog);
-                    } else if (enoughOff(e, timeLog)) {//属于下班打卡
-                        models.get(j).setOffSignin(timeLog);
-                    }
-                    break;
-                }
-            }
-        }
-        setDate2Adapter(models);
-    }
+    private void handlerWorkLog(JSONObject object, final ArrayList<WorkModel> logModels) throws Exception {
+        ArrayList<WorkModel> models = WorkHandlerUtil.handlerWorkLog(object, logModels);
 
-    private String getMinTime(String time) {
-        if (StringUtils.isEmpty(time)) {
-            return "";
-        } else {
-            return TimeUtils.long2str(TimeUtils.f_str_2_long(time), "HH:mm");
-        }
-    }
-
-    private boolean enoughWork(WorkModel e, String time) {
-        if (!StringUtils.isEmpty(e.getWorkSignin())) return false;
-        if (time.compareTo(e.getWorkTime()) < 0) return true;//小于上班时间
-        if (time.compareTo(e.getOffTime()) < 0 && time.compareTo(e.getWorkend()) < 0)
-            return true;//小于(下班时间于上班结束计算时间)最小值,小于但是上班没有签到过
-        return false;
-    }
 
-    private boolean enoughOff(WorkModel e, String time) {
-        if (time.compareTo(e.getOffTime()) > 0) return true;//大于下班时间
-        if (time.compareTo(e.getWorkTime()) > 0 && time.compareTo(e.getOffStart()) > 0 &&
-                !StringUtils.isEmpty(e.getWorkSignin()))
-            return true;//小于下班时间,但是上班没有签到过
-        return false;
+        setDate2Adapter(models);
     }
 
-    /**
-     * 获取截至时间
-     *
-     * @param isWork   是否上班
-     * @param workTime 时间 (上班时间||下班时间)
-     * @return 服务器没有给的时间
-     */
-    private String getStartAndEndTime(boolean isWork, String workTime) throws Exception {
-        long dayTime = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + workTime + ":00");//获取当前天的workTime
-        long time = isWork ? dayTime + 90 * 60 * 1000 : dayTime - 90 * 60 * 1000;
-        return TimeUtils.long2str(time, "HH:mm");
-    }
 
     private void handlerDate(JSONObject object) {
         l1.setText("应该出勤 " + getNull(object, "ychuqin") + " 天");
@@ -425,11 +316,34 @@ public class AttendanceFragment extends EasyFragment implements HttpHandler.OnRe
 
         private void initItemView(ViewHoder hoder, int position) {
             WorkModel model = models.get(position);
-            hoder.title_tv.setText("班次" + (position + 1));
-            hoder.work_tv.setText("上班时间 " + model.getWorkTime());
-            hoder.work_tag_tv.setText(StringUtils.isEmpty(model.getWorkSignin()) ? "" : model.getWorkSignin());
-            hoder.off_tv.setText("下班时间 " + model.getOffTime());
-            hoder.off_tag_tv.setText(StringUtils.isEmpty(model.getOffSignin()) ? "" : model.getOffSignin());
+            hoder.title_tv.setText("班次" + (position + 1) + " " + model.getWorkTime() + "-" + model.getOffTime());
+            hoder.work_tv.setText(StringUtils.isEmpty(model.getWorkSignin()) ? "" : model.getWorkSignin());
+            hoder.off_tv.setText(StringUtils.isEmpty(model.getOffSignin()) ? "" : model.getOffSignin());
+            String workTag = "";
+            if (StringUtils.isEmpty(model.getWorkSignin())) {
+                if (newHHmm.compareTo(model.getWorkend()) > 0)
+                    workTag = "缺勤";
+            } else {
+                if (model.getWorkSignin().compareTo(model.getWorkTime()) > 0 && model.getWorkSignin().compareTo(model.getWorkend()) <= 0)
+                    workTag = getLastTime(model.getWorkSignin(), model.getWorkTime(), true);
+            }
+            hoder.work_tag_tv.setText(workTag);
+
+            String offTag = "";
+            if (!StringUtils.isEmpty(model.getOffSignin())) {
+                if (model.getOffSignin().compareTo(model.getOffStart()) > 0 && model.getOffSignin().compareTo(model.getOffTime()) < 0)
+                    offTag = getLastTime(model.getOffSignin(), model.getOffTime(), false);
+            }
+            hoder.off_tag_tv.setText(offTag);
+        }
+
+        private String getLastTime(String signin, String time, boolean isWork) {
+            long lastTime = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + signin + ":00");
+            long thisTime = TimeUtils.f_str_2_long(TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + time + ":00");
+            float distance = (lastTime - thisTime) / 1000;//秒
+            int h = (int) (distance / 3600);
+            int m = (int) (distance % 3600) / 60;
+            return (isWork ? "迟到" : "早退") + h + "小时" + m + "分钟";
         }
 
         class ViewHoder {

+ 13 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/FlightsPresernter.java

@@ -54,6 +54,9 @@ public class FlightsPresernter implements HttpHandler.OnResultListener {
     }
 
     public void deleteWork(FlightsModel model, int position) {
+        if (!MyApplication.getInstance().isNetworkActive()) {
+            iFlightsView.showToast("当前网络不可用,请稍后重试!", R.color.load_error);
+        }
         showLoading();
         Map<String, Object> param = new HashMap<>();
         param.put("caller", "WorkDate");
@@ -166,7 +169,16 @@ public class FlightsPresernter implements HttpHandler.OnResultListener {
         EmployeesModel employeesModel = new EmployeesModel();
         EmployeesModel hrorgsModel = new EmployeesModel();
         timeModel.setEarlyTime(OACheckUtil.getJsonIntager(object, "wd_earlytime"));
-
+        timeModel.setEarlyTime(OACheckUtil.getJsonIntager(object, "wd_earlytime"));
+        timeModel.setWd_ondutyone(OACheckUtil.getJson2Text(object, "wd_ondutyone"));
+        timeModel.setWd_offdutyone(OACheckUtil.getJson2Text(object, "wd_offdutyone"));
+        timeModel.setWd_ondutytwo(OACheckUtil.getJson2Text(object, "wd_ondutytwo"));
+        timeModel.setWd_offdutytwo(OACheckUtil.getJson2Text(object, "wd_offdutytwo"));
+        timeModel.setWd_ondutythree(OACheckUtil.getJson2Text(object, "wd_ondutythree"));
+        timeModel.setWd_offdutythree(OACheckUtil.getJson2Text(object, "wd_offdutythree"));
+        model.setTimeModel(timeModel);
+        model.setEmployeesModel(employeesModel);
+        model.setHrorgsModel(hrorgsModel);
         JSONObject o = null;
         if (object.containsKey("Class1")) {
             o = object.getJSONObject("Class1");

+ 133 - 25
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/SearchPresenter.java

@@ -4,10 +4,21 @@ import android.content.Intent;
 
 import com.baidu.mapapi.model.LatLng;
 import com.baidu.mapapi.search.core.PoiInfo;
+import com.baidu.mapapi.search.core.SearchResult;
+import com.baidu.mapapi.search.poi.PoiResult;
 import com.xzjmyk.pm.activity.BdLocationHelper;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.bean.oa.SearchPoiParam;
+import com.xzjmyk.pm.activity.ui.base.BaseActivity;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.SearchLocationModel;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.ISearchView;
+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 java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 /**
@@ -28,29 +39,18 @@ import java.util.List;
  */
 
 public class SearchPresenter {
-
-    private boolean search = false;//是否有选择框
-    private int resultCode = 0x20;//返回码
-    private String resultName = "resultName";//返回的参数名称
-    private String keyWork;//返回的参数名称
-    private boolean isKm = false;
-    private boolean isSort = false;
-
-
-    private List<PoiInfo> listData;  //周围地址主体;列表
-    private ArrayList<PoiInfo> selectedData;//选择状态的数据 多选下使用
-    private LatLng latLng;//当前位置
-    private LatLng companyLat;//当前位置
+    private final int PAGESIZE = 20;
+    private List<SearchLocationModel> listData;  //周围地址主体;列表
     private BdLocationHelper locationHelper;
     private int pageNum = 0;
 
 
-
-
     private ISearchView iSearchView;
 
-    private int type = 1;//搜索方式int 1.搜索附近 2.搜索地名
     private int radius = 200;//范围 默认200米
+    private SearchPoiParam param;
+    private LatLng location;//所在的位置
+    private boolean isLoadChina;//当前搜索为搜索全国
 
 
     public SearchPresenter(ISearchView iSearchView) {
@@ -59,25 +59,133 @@ public class SearchPresenter {
         this.iSearchView = iSearchView;
     }
 
+
+    /**
+     * 监听数据返回
+     */
+    private BaiduMapUtil.OnSearchPoiListener listener = new BaiduMapUtil.OnSearchPoiListener() {
+        @Override
+        public void result(SearchResult result) {
+
+            if (result == null || ListUtils.isEmpty(((PoiResult) result).getAllPoi())) {
+                if (isLoadChina) {
+                    isLoadChina = false;
+                    BaiduMapUtil.getInstence().searchByInput(param.getKeyWork(), pageNum, listener);
+                } else
+                    listData.clear();
+            } else {
+                PoiResult poiResult = (PoiResult) result;
+                List<PoiInfo> chches = poiResult.getAllPoi();
+                iSearchView.showPoiPoint(chches.get(0).location);
+                listData.clear();
+                for (int i = 0; i < chches.size(); i++) {
+                    if (StringUtils.isEmpty(chches.get(i).name) || StringUtils.isEmpty(chches.get(i).address)) {
+                        chches.remove(i);
+                        i--;
+                    } else
+                        listData.add(new SearchLocationModel(chches.get(i)));
+                }
+            }
+            showData(listData);
+        }
+    };
+
+
     /**
      * 初始化数据
      *
      * @param intent 转入的控制参数
      */
     public void init(Intent intent) {
-        if (intent != null) {
-            type = intent.getIntExtra("type", 1);
-            switch (type) {
-                case 0://通用参数
-
-                case 1:
-                    break;
-                case 2:
-                    break;
+        locationHelper = MyApplication.getInstance().getBdLocationHelper();
+        if (intent == null) return;
+        param = intent.getParcelableExtra("data");
+        if (param == null)
+            new NullPointerException("param is Null");
+        if (!StringUtils.isEmpty(param.getTitle())) {
+            iSearchView.setTitle(param.getTitle());
+        }
+        initData();
+    }
+
+    public void search(String keyWork) {
+        param.setKeyWork(keyWork);
+        if (param.getType() == 1) {//附近搜索
+            List<SearchLocationModel> chche = new ArrayList<>();
+            if (!ListUtils.isEmpty(listData)) {
+                for (SearchLocationModel e : listData) {
+                    String text = e.getPoiInfo().city + e.getPoiInfo().name + e.getPoiInfo().address;
+                    boolean isOK = StringUtils.isInclude(text, param.getKeyWork());
+                    if (isOK)
+                        chche.add(e);
+                }
             }
+            showData(chche);
+        } else {
+            loadDataByCity();
         }
+    }
+
+    public void endActivity(BaseActivity ct, PoiInfo poi) {
+        Intent intent = new Intent();
+        intent.putExtra(param.getResultKey(), poi);
+        ct.setResult(param.getResultCode(), intent);
+        ct.finish();
+    }
+
 
+    private void initData() {
+        listData = new ArrayList<>();
+        switch (param.getType()) {
+            case 1:
+                loadDataByNeer();
+                break;
+            case 2:
+                if (StringUtils.isEmpty(param.getKeyWork())) {
+                    loadDataByNeer();
+                } else
+                    loadDataByCity();
+                break;
+            default:
+                break;
+        }
+    }
+
+    private void loadDataByCity() {
+        isLoadChina = true;
+        BaiduMapUtil.getInstence().searchByInputOnChina(StringUtils.isEmpty(param.getKeyWork()) ? "" : param.getKeyWork(), pageNum, listener);
+    }
 
+    private void loadDataByNeer() {
+        location = new LatLng(locationHelper.getLatitude(), locationHelper.getLongitude());
+        PoiInfo thisInfo = new PoiInfo();
+        thisInfo.location = location;
+        thisInfo.name = locationHelper.getName();
+        thisInfo.city = locationHelper.getCityName();
+        thisInfo.address = locationHelper.getAddress();
+        listData.add(new SearchLocationModel(thisInfo));
+        BaiduMapUtil.getInstence().getNearInfo(radius, pageNum, location, listener);
     }
 
+
+    /**
+     * 获取完数据后进入显示,先进行排序
+     *
+     * @param chche
+     */
+    private void showData(List<SearchLocationModel> chche) {
+        if (!ListUtils.isEmpty(chche)) {
+            for (int i = 0; i < chche.size(); i++) {
+                float distance = Float.valueOf(BaiduMapUtil.getInstence().getDistance(listData.get(i).getPoiInfo().location, param.getContrastLatLng()));
+                chche.get(i).setDistance(distance);
+            }
+            Comparator<SearchLocationModel> comparator = new Comparator<SearchLocationModel>() {
+                public int compare(SearchLocationModel s1, SearchLocationModel s2) {
+                    return (int) (s1.getDistance() - s2.getDistance());
+                }
+            };
+            Collections.sort(chche, comparator);
+        }
+        iSearchView.showPoiList(chche, param.getDistanceTag());
+    }
 }

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

@@ -15,9 +15,10 @@ import com.baidu.mapapi.search.poi.PoiResult;
 import com.xzjmyk.pm.activity.AppConfig;
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.ui.erp.model.oa.WorkLocationModel;
+import com.xzjmyk.pm.activity.bean.oa.SearchPoiParam;
 import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
-import com.xzjmyk.pm.activity.ui.erp.activity.oa.LocationSearchActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.SearchLocationActivity;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.WorkLocationModel;
 import com.xzjmyk.pm.activity.ui.erp.model.oa.WorkModel;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkPresenter;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IWorkView;
@@ -202,16 +203,15 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
             iWorkView.showToast("没有可以选择的地址", R.color.load_error);
             return;
         }
-        Intent intent = new Intent(ct, LocationSearchActivity.class);
-        intent.putExtra("type", 1);
-        intent.putExtra("title", "地点微调");
-        intent.putExtra("single", true);
-        intent.putExtra("radius", 300);
-        intent.putExtra("isSort", true);
-        intent.putExtra("latlng", new LatLng(companyLocation.getLocation().longitude, companyLocation.getLocation().latitude));
-        intent.putExtra("resultCode", ADDRESS_CHANGE);
-        intent.putExtra("resultName", "resultName");
-        intent.putExtra("tag", "米");
+        Intent intent = new Intent(ct, SearchLocationActivity.class);
+        SearchPoiParam poiParam = new SearchPoiParam();
+        poiParam.setType(1);
+        poiParam.setTitle("地点微调");
+        poiParam.setRadius(300);
+        poiParam.setContrastLatLng( new LatLng(companyLocation.getLocation().longitude, companyLocation.getLocation().latitude));
+        poiParam.setResultCode(ADDRESS_CHANGE);
+        poiParam.setDistanceTag("米");
+        intent.putExtra("data",poiParam);
         ct.startActivityForResult(intent, ADDRESS_CHANGE);
     }
 

+ 3 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/ISearchView.java

@@ -1,5 +1,6 @@
 package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
 
+import com.baidu.mapapi.model.LatLng;
 import com.xzjmyk.pm.activity.ui.erp.model.oa.SearchLocationModel;
 
 import java.util.List;
@@ -10,5 +11,6 @@ import java.util.List;
 
 public interface ISearchView extends HttpImp {
 
-    void showPoiList(List<SearchLocationModel> models);
+    void showPoiList(List<SearchLocationModel> models,String distanceTag);
+    void showPoiPoint(LatLng location);
 }

+ 8 - 6
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/auto/AutoErpService.java

@@ -15,6 +15,7 @@ import android.util.Log;
 import com.xzjmyk.pm.activity.AppConfig;
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.broadcast.MsgBroadcast;
 import com.xzjmyk.pm.activity.db.dao.ErrorMagDao;
 import com.xzjmyk.pm.activity.db.dao.MissionDao;
 import com.xzjmyk.pm.activity.db.dao.WorkModelDao;
@@ -75,7 +76,8 @@ public class AutoErpService extends Service {
             CHANGE_WORK_TASK,//
             CHANGE_MISSION_TASK,//
             INIT_MISSION_TASK,//初始化外勤签到任务
-            UPDATA_ERP_CHANGE//更换账套
+            UPDATA_ERP_CHANGE,//更换公司
+            MsgBroadcast.ACTION_MSG_COMPANY_UPDATE//切换账套
     };
 
     private Handler handler = new Handler() {
@@ -115,7 +117,7 @@ public class AutoErpService extends Service {
         public void onReceive(Context context, Intent intent) {
             try {
                 if (intent == null || StringUtils.isEmpty(intent.getAction())) return;
-                else if (intent.getAction().equals(UPDATA_ERP_CHANGE)) {//账套变更,重新刷新数据,初始化任务
+                else if (intent.getAction().equals(UPDATA_ERP_CHANGE) || intent.getAction().equals(MsgBroadcast.ACTION_MSG_COMPANY_UPDATE)) {//账套变更,重新刷新数据,初始化任务
                     log(UPDATA_ERP_CHANGE);
                     init();
                 } else if (intent.getAction().equals(CHANGE_WORK_TASK)) {//自动打卡任务变更
@@ -173,10 +175,10 @@ public class AutoErpService extends Service {
         String nowtime = TimeUtils.f_long_2_str(System.currentTimeMillis());
         String saved_time = PreferenceUtils.getString(MyApplication.getInstance(), TimeStatisticsActivity.Killed);
 
-        if (!TextUtils.isEmpty(saved_time)){
-            PreferenceUtils.putString(TimeStatisticsActivity.Killed,saved_time + "," + nowtime);
-        }else {
-            PreferenceUtils.putString(TimeStatisticsActivity.Killed,nowtime);
+        if (!TextUtils.isEmpty(saved_time)) {
+            PreferenceUtils.putString(TimeStatisticsActivity.Killed, saved_time + "," + nowtime);
+        } else {
+            PreferenceUtils.putString(TimeStatisticsActivity.Killed, nowtime);
 
         }
     }

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

@@ -37,7 +37,7 @@ import com.xzjmyk.pm.activity.ui.MainActivity;
 import com.xzjmyk.pm.activity.ui.base.EasyFragment;
 import com.xzjmyk.pm.activity.ui.circle.BusinessCircleActivity;
 import com.xzjmyk.pm.activity.ui.erp.activity.BaseInfoActivity;
-import com.xzjmyk.pm.activity.ui.erp.activity.oa.AddFlihtsActivity;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.SearchLocationActivity;
 import com.xzjmyk.pm.activity.ui.erp.model.Master;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.Constants;
@@ -272,7 +272,7 @@ public class MeFragment extends EasyFragment implements View.OnClickListener {
         findViewById(R.id.test_rl).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                startActivity(new Intent(ct, AddFlihtsActivity.class));
+                startActivity(new Intent(ct, SearchLocationActivity.class));
             }
         });
 

+ 21 - 11
WeiChat/src/main/java/com/xzjmyk/pm/activity/util/TimeUtils.java

@@ -181,6 +181,17 @@ public class TimeUtils {
         return formart.format(new Date(timestamp));
     }
 
+    public static long str2long(String dateString, String str) {
+        SimpleDateFormat formart = new SimpleDateFormat(str);
+        try {
+            Date d = formart.parse(dateString);
+            return d.getTime();
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+
     /**
      * 获取字符串时间的天
      *
@@ -284,24 +295,23 @@ public class TimeUtils {
      * @param 获取 yyyy-mm 当前月份共有多少天
      * @return days
      */
-    public static int getCurrentDateDays(int year,int month){
+    public static int getCurrentDateDays(int year, int month) {
         int days = 0;
-        if (month == 2){
-            if((year%4==0&&year%100!=0)||year%400==0){
+        if (month == 2) {
+            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                 days = 29; //闰年2月有29天
-            }else {
+            } else {
                 days = 28;
             }
-        }else if (month==4||month==6||month==9||month==11){
+        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
             days = 30;
-        }else {
+        } else {
             days = 31;
         }
         return days;
     }
 
 
-
     /**
      * @param time
      * @return
@@ -360,13 +370,13 @@ public class TimeUtils {
     public static SimpleDateFormat friendly_format4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
 
-    public static String getFriendlyTimeDesc( long time) {
-        return friendly_format3.format(new Date(time*1000));
+    public static String getFriendlyTimeDesc(long time) {
+        return friendly_format3.format(new Date(time * 1000));
 
     }
 
-    public static String getPreciseTimeDesc(long time){
-        return friendly_format4.format(new Date(time*1000));
+    public static String getPreciseTimeDesc(long time) {
+        return friendly_format4.format(new Date(time * 1000));
     }
 
 

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

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout 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:focusable="true"
@@ -89,7 +88,7 @@
         android:layout_height="0dp"
         android:layout_weight="5"
         android:divider="@color/item_line"
-        android:dividerHeight="1dp"
+        android:dividerHeight="2px"
         android:focusableInTouchMode="false"
         android:scrollingCache="false" />
 </LinearLayout>

+ 5 - 3
WeiChat/src/main/res/layout/activity_search_location.xml

@@ -39,12 +39,14 @@
         android:layout_weight="3"
         android:clickable="false" />
 
-    <ListView
-        android:id="@+id/context_lv"
+    <com.handmark.pulltorefresh.library.PullToRefreshListView
+        android:id="@+id/listview"
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="5"
         android:divider="@color/item_line"
-        android:dividerHeight="1px" />
+        android:dividerHeight="2px"
+        android:focusableInTouchMode="false"
+        android:scrollingCache="false" />
 
 </LinearLayout>

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

@@ -1,9 +1,18 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout 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:orientation="vertical"
     tools:context="com.xzjmyk.pm.activity.ui.erp.fragment.AttendanceFragment">
 
+    <TextView
+        android:id="@+id/date_tv"
+        android:layout_width="match_parent"
+        android:layout_height="40dp"
+        android:gravity="center"
+        android:textColor="@color/text_main"
+        android:textSize="@dimen/text_main" />
+
     <com.xzjmyk.pm.activity.ui.erp.view.oacalender.CalenderView
         android:id="@+id/calender"
         android:layout_width="match_parent"
@@ -11,19 +20,19 @@
 
     <FrameLayout
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_below="@id/calender">
-<View
-    android:layout_width="match_parent"
-    android:layout_height="2px"
-    android:background="@color/item_line"/>
+        android:layout_height="match_parent">
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="2px"
+            android:background="@color/item_line" />
+
         <ScrollView
             android:id="@+id/month_sv"
             android:layout_width="match_parent"
             android:layout_height="match_parent">
 
-            <include
-                layout="@layout/include_attendance_show" />
+            <include layout="@layout/include_attendance_show" />
         </ScrollView>
 
         <ListView
@@ -34,4 +43,4 @@
             android:dividerHeight="2px"
             android:visibility="gone" />
     </FrameLayout>
-</RelativeLayout>
+</LinearLayout>

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

@@ -16,6 +16,7 @@
         android:textSize="@dimen/text_main" />
 
     <ImageView
+        android:padding="10dp"
         android:id="@+id/delete_rule_img"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"

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

@@ -110,7 +110,7 @@
     <string name="end_less_start">结束时间不能小于或等于开始时间</string>
     <string name="delete_item">确定要删除吗</string>
     <string name="select_must">选择(必填)</string>
-    <string name="select_nomust">选择(非填)</string>
+    <string name="select_nomust">选择(非填)</string>
     <string name="input_must">输入(必填)</string>
     <string name="out_net_signin">网络未连接,无法自动为您签到</string>
     <string name="too_long_signin">当前位置距离考勤地点太远或没有获取到办公地址,打卡失败</string>