Преглед на файлове

修复bug,写企业架构树界面

Bitliker преди 9 години
родител
ревизия
89cd8164fd

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

@@ -76,6 +76,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import static com.alibaba.fastjson.JSON.parseObject;
+import static com.xzjmyk.pm.activity.view.crouton.Crouton.makeText;
 
 /**
  * Created by pengminggong on 2016/9/27.
@@ -217,12 +218,16 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
                                 return;
                             }
                             JsonValidator validator = new JsonValidator();
+                            String error = "";
                             if (validator.validate(message)) {
                                 JSONObject object1 = JSON.parseObject(message);
-                                Crouton.makeText(ct, StringUtils.isEmpty(object1.getString("exceptionInfo")) ? "程序错误" : object1.getString("exceptionInfo"));
+                                error = StringUtils.isEmpty(object1.getString("exceptionInfo")) ? "程序错误" : object1.getString("exceptionInfo");
                             } else {
-                                Crouton.makeText(ct, StringUtils.isEmpty(message) ? "程序错误" : StringUtils.getChinese(message));
+                                error = (StringUtils.isEmpty(message) ? "程序错误" : StringUtils.getChinese(message));
                             }
+                            if (!"程序错误".equals(error))
+                                error = "数据获取失败,请稍后重试";
+                            Crouton.showToast(ct, error, R.color.load_warning);
                         } catch (Exception e) {
 
                         }
@@ -407,7 +412,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
                         intent.putExtra("data", object.toString());
                         startActivityForResult(intent, isMe ? 0x20 : 0x21);
                     } else {
-                        Crouton.makeText(ct, "外勤计划尚未完成");
+                        makeText(ct, "外勤计划尚未完成");
                     }
                 }
             }
@@ -822,7 +827,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
                 break;
             case R.id.signin://打卡签到
 //                startActivity(new Intent(activity, SigninActivity.class));
-                intent=new Intent(activity, WorkActivity.class);
+                intent = new Intent(activity, WorkActivity.class);
                 intent.putExtra(AppConfig.IS_ADMIN, adminStatus > 0);//上传管理员状态
                 startActivity(intent);
                 break;
@@ -850,7 +855,7 @@ public class OAActivity extends BaseActivity implements View.OnClickListener, Wo
                     if (hasOther) {
                         chaneTAG(false);
                     } else {
-                        Crouton.makeText(ct, "当前账号没有下属,如有问题请联系系统管理员");
+                        makeText(ct, "当前账号没有下属,如有问题请联系系统管理员");
                     }
                 break;
             case R.id.my_log://我的工作日志

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

@@ -3,6 +3,7 @@ package com.xzjmyk.pm.activity.ui.erp.fragment;
 
 import android.os.Bundle;
 import android.os.Looper;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -11,20 +12,33 @@ import android.widget.ListView;
 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;
+import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 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 java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 
 /**
- * 个人考勤
+ * 废接口,不做代码规划,乱写以完成任务
  */
-public class AttendanceFragment extends EasyFragment {
+public class AttendanceFragment extends EasyFragment implements HttpHandler.OnResultListener {
     @ViewInject(R.id.calender)
     private CalenderView calender;
     @ViewInject(R.id.month_sv)
@@ -32,6 +46,32 @@ public class AttendanceFragment extends EasyFragment {
     @ViewInject(R.id.day_lv)
     private ListView day_lv;
 
+    @ViewInject(R.id.l1)
+    private TextView l1;
+    @ViewInject(R.id.l2)
+    private TextView l2;
+    @ViewInject(R.id.l3)
+    private TextView l3;
+    @ViewInject(R.id.l4)
+    private TextView l4;
+    @ViewInject(R.id.l5)
+    private TextView l5;
+    @ViewInject(R.id.l6)
+    private TextView l6;
+
+    @ViewInject(R.id.r1)
+    private TextView r1;
+    @ViewInject(R.id.r2)
+    private TextView r2;
+    @ViewInject(R.id.r3)
+    private TextView r3;
+    @ViewInject(R.id.r4)
+    private TextView r4;
+    @ViewInject(R.id.r5)
+    private TextView r5;
+    @ViewInject(R.id.r6)
+    private TextView r6;
+
     private WorkAdapter adapter;
     private Date selectDate = null;
 
@@ -43,15 +83,23 @@ public class AttendanceFragment extends EasyFragment {
 
     @Override
     protected void onCreateView(Bundle savedInstanceState, boolean createView) {
+        if (!createView) return;
         ViewUtils.inject(getmRootView());
         initView();
         initEvent();
     }
 
     private void initView() {
-
+        calender.setOnMonthChangeListener(new CalenderView.OnMonthChangeListener() {
+            @Override
+            public void selected(String yyyyMM) {
+                loadByNet(yyyyMM);
+            }
+        });
+        loadByNet(TimeUtils.long2str(System.currentTimeMillis(), "yyyyMM"));
     }
 
+
     private void initEvent() {
         calender.setOnDateChangeListener(new CalenderView.OnDateSelectListener() {
             @Override
@@ -66,11 +114,11 @@ public class AttendanceFragment extends EasyFragment {
             @Override
             public void selected(String yyyyMM) {
                 LogUtil.d("yyyyMM=" + yyyyMM);
+                loadByNet(yyyyMM);
             }
         });
     }
 
-
     /**
      * 显示日历下面数据
      *
@@ -83,9 +131,186 @@ public class AttendanceFragment extends EasyFragment {
         } else {
             month_sv.setVisibility(View.GONE);
             day_lv.setVisibility(View.VISIBLE);
+            loadWorkData(selectDate.getTime());
+        }
+    }
+
+
+    private void loadByNet(String date) {
+        Map<String, Object> param = new HashMap<>();
+        param.put("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
+        param.put("yearmonth", date);
+        HttpHandler.getInstance().loadERPByNet(0x11, "mobile/getPersonAttend.action", param
+                , null, this);
+    }
+
+    public void loadWorkData(long time) {
+        Map<String, Object> param = new HashMap<>();
+        param.put("date", TimeUtils.int_long_2_str(time));
+        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bundle = new Bundle();
+        bundle.putLong("time", time);
+        HttpHandler.getInstance().loadERPByNet(0x12, "mobile/getWorkDate.action", param, bundle, this);
+    }
+
+    private void loadLog(ArrayList<WorkModel> models, Bundle bundle) {
+        long time = 0;
+        if (bundle != null) time = bundle.getLong("time");
+        String date = TimeUtils.s_long_2_str(time);
+        //获取网络数据
+        Map<String, Object> param = new HashMap<>();
+        String code = CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username");
+        param.put("currentMaster", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        param.put("page", 1);
+        param.put("pageSize", 100);
+        param.put("condition", "cl_emcode='" + code + "' and to_char(cl_time,'yyyy-MM-dd')='" + date + "'");
+        param.put("caller", "CardLog");
+        param.put("emcode", code);
+        param.put("master", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master"));
+        bundle.putParcelableArrayList("models", models);
+        bundle.putLong("time", time);
+        HttpHandler.getInstance().loadERPByNet(0x13, "mobile/oa/workdata.action", param, bundle, this);
+    }
+
+    /**
+     * 处理打卡签到
+     */
+    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"));
+            }
+        }
+        if (ListUtils.isEmpty(models)) {
+            //TODO 数据为空时候
         }
+        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  获取班次信息时候的数据
+     * @throws Exception
+     */
+    private void handlerWorkLog(JSONObject object, final ArrayList<WorkModel> models) throws Exception {
+        JSONArray listdata = object.getJSONArray("listdata");
+        if (ListUtils.isEmpty(listdata)) {
+            Log.i("gongpengmng", "ListUtils.isEmpty(listdata) 数据为空,容错处理");
+            return;
+        }
+        String timeLog = null;
+        for (int i = 0; i < listdata.size(); i++) {
+            timeLog = getMinTime(listdata.getJSONObject(i).getString("cl_time"));
+            for (int j = 0; j < models.size(); j++) {
+                WorkModel e = models.get(j);
+                if (StringUtils.isEmpty(e.getWorkStart()) || StringUtils.isEmpty(e.getWorkTime()) ||
+                        StringUtils.isEmpty(e.getOffend()) || StringUtils.isEmpty(e.getOffTime()))
+                    continue;
+                if (e.getWorkStart().compareTo(timeLog) <= 0 && e.getOffend().compareTo(timeLog) >= 0) {
+                    //符合该班次    上班开始时间<time<下班结束时间
+                    if (enoughWork(e, timeLog)) {//属于上班打卡
+                        models.get(j).setWorkSignin(timeLog);
+                    } else if (enoughOff(e, timeLog)) {//属于下班打卡
+                        models.get(j).setOffSignin(timeLog);
+                    }
+                    break;
+                }
+            }
+        }
+        Log.i("gongpengming", "end   showModels");
+        if (!ListUtils.isEmpty(models))
+            for (WorkModel e : models) {
+                Log.i("gongpengming", "getWorkTime" + e.getWorkTime());
+                Log.i("gongpengming", "getOffTime" + e.getOffTime());
+                Log.i("gongpengming", "getWorkSignin" + e.getWorkSignin());
+                Log.i("gongpengming", "getOffSignin" + e.getOffSignin());
+            }
+    }
+
+    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;
+    }
+
+    /**
+     * 获取截至时间
+     *
+     * @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 setDate2Adapter() {
         if (adapter == null) {
@@ -96,6 +321,66 @@ public class AttendanceFragment extends EasyFragment {
         }
     }
 
+    @Override
+    public void result(int what, boolean isJSON, String message, Bundle bundle) {
+        if (!isJSON) return;
+        JSONObject object = JSON.parseObject(message);
+        switch (what) {
+            case 0x11:
+                handlerDate(object);
+                break;
+            case 0x12:
+                try {
+                    handlerWorkData(object, bundle);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                break;
+            case 0x13:
+                ArrayList<WorkModel> models = null;
+                if (bundle != null) models = bundle.getParcelableArrayList("models");
+                try {
+                    handlerWorkLog(object, models);
+                    Iterator<WorkModel> aa = models.iterator();
+                } catch (Exception e) {
+                    e.printStackTrace();
+
+                }
+                break;
+        }
+
+    }
+
+    private void handlerDate(JSONObject object) {
+        l1.setText("应该出勤 " + getNull(object, "ychuqin") + " 天");
+        r1.setText("实际出勤 " + getNull(object, "achuqin") + " 天");
+        l2.setText("正常打卡 " + getNull(object, "nday") + " 天");
+        r2.setText("实际工时 " + getNull(object, "atime") + " 天");
+        l3.setText("迟到 " + getNull(object, "latecount") + " 天");
+        r3.setText("早退 " + getNull(object, "earlycount") + " 天");
+
+        l4.setText("旷工 " + getNull(object, "noncount") + " 天");
+        r4.setText("补卡 " + getNull(object, "qjdaty") + " 天");
+
+        l5.setText("请假 " + getNull(object, "qjdaty") + " 天");
+        r5.setText("加班 " + getNull(object, "qjdaty") + " 天");
+
+        l6.setText("出差 " + getNull(object, "outdays") + " 天");
+        r6.setText("补卡 " + getNull(object, "outcount") + " 天");
+    }
+
+
+    private int getNull(JSONObject object, String key) {
+        if (object == null || !object.containsKey(key)) return 0;
+        return object.getIntValue(key);
+
+    }
+
+    @Override
+    public void error(int what, int statuCode, String message, Bundle bundle) {
+
+    }
+
 
     class WorkAdapter extends BaseAdapter {
         @Override

+ 29 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/fragment/AttendancesFragment.java

@@ -4,11 +4,17 @@ import android.os.Bundle;
 
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.base.EasyFragment;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.auto.HttpHandler;
+import com.xzjmyk.pm.activity.util.TimeUtils;
+
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 团队考勤
  */
-public class AttendancesFragment extends EasyFragment {
+public class AttendancesFragment extends EasyFragment implements HttpHandler.OnResultListener {
 
     @Override
     protected int inflateLayoutId() {
@@ -17,7 +23,29 @@ public class AttendancesFragment extends EasyFragment {
 
     @Override
     protected void onCreateView(Bundle savedInstanceState, boolean createView) {
+        if (!createView)return;
+        initView();
+    }
+
+    private void initView() {
+        loadNet();
+    }
 
+    private void loadNet() {
+        Map<String, Object> param = new HashMap<>();
+        param.put("emcode", CommonUtil.getSharedPreferences(ct, "erp_username"));
+        param.put("yearmonth", TimeUtils.long2str(System.currentTimeMillis(), "yyyyMM"));
+        HttpHandler.getInstance().loadERPByNet(0x11, "mobile/getTeamAttend.action", param
+                , null, this);
     }
 
+    @Override
+    public void result(int what, boolean isJSON, String message, Bundle bundle) {
+
+    }
+
+    @Override
+    public void error(int what, int statuCode, String message, Bundle bundle) {
+
+    }
 }

+ 56 - 24
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/AddFlihtsPresenter.java

@@ -4,6 +4,7 @@ import android.content.Intent;
 import android.os.Bundle;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.erp.entity.EmployeesEntity;
 import com.xzjmyk.pm.activity.ui.erp.model.oa.EmployeesModel;
@@ -24,8 +25,9 @@ import java.util.Map;
  * Created by Bitliker on 2017/2/9.
  */
 
-public class AddFlihtsPresenter {
-
+public class AddFlihtsPresenter implements HttpHandler.OnResultListener {
+    private final int SUBMIT = 0x11;
+    private final int MAN_DEFAULTOR = 0x12;
     private FlightsModel model = null;//唯一模型
     boolean isUpdate = false;//判断是否是更新,不然是保存
 
@@ -58,7 +60,7 @@ public class AddFlihtsPresenter {
         iAddFlihtsView.setTitle(title);
     }
 
-    public void submit(final String name) {
+    public void submit(String name) {
         Map<String, Object> param = new HashMap<>();
         param.put("caller", "WorkDate");
         Map<String, Object> formStore = new HashMap<>();
@@ -125,29 +127,22 @@ public class AddFlihtsPresenter {
         formStore.put("wd_defaultor", hrorgsName);
         //end 部门
         param.put("formStore", StringUtils.mapToJson(formStore));
-        Bundle bundle = null;
+        Bundle bundle = new Bundle();
+        bundle.putString("name", name);
         iAddFlihtsView.showLoading();
         String action = isUpdate ? "mobile/updateWorkDate.action" : "mobile/saveWorkDate.action";
-        HttpHandler.getInstance().loadERPByNet(0x11, action,
-                param, bundle, new HttpHandler.OnResultListener() {
-                    @Override
-                    public void result(int what, boolean isJSON, String message, Bundle bundle) {
-                        iAddFlihtsView.dimssLoading();
-                        if (model == null)
-                            model = new FlightsModel();
-                        model.setName(name);
-                        model.setType(1);
-                        if (isJSON && JSON.parseObject(message).containsKey("id")) {
-                            model.setId(JSON.parseObject(message).getIntValue("id"));
-                        }
-                        iAddFlihtsView.endActivity(model, isUpdate);
-                    }
-
-                    @Override
-                    public void error(int what, int statuCode, String message, Bundle bundle) {
-                        iAddFlihtsView.dimssLoading();
-                    }
-                });
+        HttpHandler.getInstance().loadERPByNet(SUBMIT, action,
+                param, bundle, this);
+    }
+
+    public void loadManAndDefaultor(String manCode, String defaultorCode) {
+        Bundle bundle = null;
+        String action = "mobile/getManAndDefaultor.action";
+        Map<String, Object> param = new HashMap<>();
+        param.put("wd_emcode", manCode);
+        param.put("wd_defaultorcode", defaultorCode);
+        HttpHandler.getInstance().loadERPByNet(MAN_DEFAULTOR, action,
+                param, bundle, this);
     }
 
     public void saveTime(Intent data) {
@@ -172,6 +167,7 @@ public class AddFlihtsPresenter {
         hrorgs.setEmployeeNames(hrorgsName);
         model.setHrorgsModel(hrorgs);
         iAddFlihtsView.updateDepartment(hrorgsName);
+        loadManAndDefaultor("", hrorgsCode);
     }
 
     public void saveEmployees(Intent data) {
@@ -183,6 +179,7 @@ public class AddFlihtsPresenter {
         employees.setEmployeecode(employeesCode);
         model.setEmployeesModel(employees);
         iAddFlihtsView.updateMunber(employeesName);
+        loadManAndDefaultor(employeesCode, "");
     }
 
 
@@ -234,4 +231,39 @@ public class AddFlihtsPresenter {
     }
 
 
+    @Override
+    public void result(int what, boolean isJSON, String message, Bundle bundle) {
+        if (!isJSON) {
+            //TODO 返回错误
+            return;
+        }
+        JSONObject object = JSON.parseObject(message);
+        switch (what) {
+            case SUBMIT:
+                iAddFlihtsView.dimssLoading();
+                if (model == null)
+                    model = new FlightsModel();
+                String name = null;
+                if (bundle != null) {
+                    name = bundle.getString("name");
+                }
+                model.setName(StringUtils.isEmpty(name) ? "" : name);
+                model.setType(1);
+                if (object.containsKey("id")) {
+                    model.setId(object.getIntValue("id"));
+                }
+                iAddFlihtsView.endActivity(model, isUpdate);
+                break;
+            case MAN_DEFAULTOR:
+                break;
+
+        }
+    }
+
+    @Override
+    public void error(int what, int statuCode, String message, Bundle bundle) {
+        iAddFlihtsView.dimssLoading();
+        if (StringUtils.isEmpty(message))
+            iAddFlihtsView.showToast(message, R.color.load_error);
+    }
 }

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

@@ -554,7 +554,6 @@ public class WorkPresenter implements HttpHandler.OnResultListener, IWorkPresent
             iWorkView.showToast(R.string.networks_out, R.color.load_error);
             return;
         }
-
         if (iWorkView != null)
             iWorkView.showLoading();
         Map<String, Object> param = new HashMap<>();

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

@@ -16,6 +16,8 @@ import com.xzjmyk.pm.activity.util.TimeUtils;
 
 import java.util.List;
 
+import static com.xzjmyk.pm.activity.util.TimeUtils.f_str_2_long;
+
 /**
  * 计算自动外勤和自动打卡工具类
  * Created by Bitliker on 2016/12/13.
@@ -39,20 +41,19 @@ public class ReckonAutoUtil {
             return minBean;
         }
         for (MissionModel e : list) {
+            if (!timeAllowMission(e)) continue;//时间上不符合该外勤签到或签退
             if (e.getLatLng() == null) continue;//定位不存在
             //获取当前与目的地的距离
-//            if (e.getStatus() == 2) continue;
-//            float distance = Float.valueOf(BaiduMapUtil.getInstence().getDistance(e.getLatLng()));
             float distance = BaiduMapUtil.getInstence().autoDistance(e.getLatLng());
             if (distance == -1f) return null;
-            if (e.getStatus() != 2 && distance > companyDistance && !StringUtils.isEmpty(e.getRealTime())) {
-                //1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
-                log("符合外勤签退");
+            if (e.getStatus() != 2 &&
+                    distance > companyDistance
+                    && !StringUtils.isEmpty(e.getRealTime())) {
+                //符合外勤签退  1.判断进行中的外勤计划,如果离开了签到最后一次,结束该计划
                 minBean = e;
                 minBean.setStatus(2);//结束该外勤
                 break;
             } else if (distance < companyDistance && (e.getType() != 1 || e.getStatus() != 2)) { //判断符合自动外勤
-                log("符合外勤签到");
                 if (minDistance <= 0 || minDistance > distance) {//2.如果第一个不存在,判断获取最近的位置
                     minDistance = distance;
                     minBean = e;
@@ -64,6 +65,33 @@ public class ReckonAutoUtil {
         return minBean;
     }
 
+    /**
+     * 判断该对应班次最后一次签到时间和当前是否有足够长的时间间隔
+     *
+     * @param bean
+     * @return
+     */
+    private boolean timeAllowMission(MissionModel bean) {
+        if (true) {
+            return true;
+        } else {
+            if (bean == null) return false;
+            if (StringUtils.isEmpty(bean.getRealTime())) return true;
+            String lastTime = StringUtils.isEmpty(bean.getRealLeave()) ? bean.getRealTime() : bean.getRealLeave();
+            return long2LastTime(lastTime);
+        }
+    }
+
+    /**
+     * 判断最后一次签到是否相隔足够长的时间
+     *
+     * @param lastSignin 最后一次签到时间  yyyy-MM-dd HH:mm:ss
+     * @return
+     */
+    private boolean long2LastTime(String lastSignin) {
+        long last = TimeUtils.f_str_2_long(lastSignin);
+        return (System.currentTimeMillis() - last) > (15 * 60 * 1000);
+    }
 
     /**
      * 计算自动打卡
@@ -160,7 +188,7 @@ public class ReckonAutoUtil {
     private long getTimeByHHmm(String time) {
         if (StringUtils.isEmpty(time)) return 0;
         String che = TimeUtils.s_long_2_str(System.currentTimeMillis()) + " " + time + ":00";//当天下班时间
-        return TimeUtils.f_str_2_long(che);
+        return f_str_2_long(che);
     }
 
     //5.判断是否离开工作范围

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/view/oacalender/CalenderView.java

@@ -22,7 +22,7 @@ import java.util.Set;
 public class CalenderView extends ViewPager {
     private CalendarFragmet fragmet;
     private final int MAX_PAGER = 30;
-    private final String MONTH_TAG = "yyyy-MM";
+    private final String MONTH_TAG = "yyyyMM";
 
     private Date[] date = new Date[MAX_PAGER];
 
@@ -106,7 +106,7 @@ public class CalenderView extends ViewPager {
                 public void result(boolean isClickAgen, Date date) {
                     CalenderView.this.date[position] = date;
                     if (onDateChangeListener != null)
-                        onDateChangeListener.selected(isClickAgen,date);
+                        onDateChangeListener.selected(isClickAgen, date);
                 }
             });
             super.setPrimaryItem(container, position, object);

+ 11 - 0
WeiChat/src/main/res/drawable/attendance_dl.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <solid android:color="#afb9ff" />
+            <corners android:radius="360dp" />
+            <padding android:bottom="0.5dp" android:left="0.5dp" android:right="0.5dp" android:top="0.5dp" />
+        </shape>
+    </item>
+
+</selector>

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

@@ -17,14 +17,10 @@
         <ScrollView
             android:id="@+id/month_sv"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:visibility="gone">
-
-            <RelativeLayout
-                android:layout_width="match_parent"
-                android:layout_height="match_parent">
+            android:layout_height="match_parent">
 
-            </RelativeLayout>
+            <include
+                layout="@layout/include_attendance_show" />
         </ScrollView>
 
         <ListView

+ 180 - 0
WeiChat/src/main/res/layout/include_attendance_show.xml

@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:padding="8dp">
+
+        <TextView
+            android:id="@+id/l1"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp"
+            android:text="texy"
+            android:textColor="@color/text_hine"
+            android:textSize="@dimen/text_main" />
+
+        <TextView
+            android:id="@+id/r1"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:padding="8dp">
+
+        <TextView
+            android:id="@+id/l2"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp"
+            android:text="texy"
+            android:textColor="@color/text_hine"
+            android:textSize="@dimen/text_main" />
+
+        <TextView
+            android:id="@+id/r2"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp" />
+    </LinearLayout>
+
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="2px"
+        android:background="@color/item_line" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:padding="8dp">
+
+        <TextView
+            android:id="@+id/l3"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp"
+            android:text="texy"
+            android:textColor="@color/text_hine"
+            android:textSize="@dimen/text_main" />
+
+        <TextView
+            android:id="@+id/r3"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:padding="8dp">
+
+        <TextView
+            android:id="@+id/l4"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp"
+            android:text="texy"
+            android:textColor="@color/text_hine"
+            android:textSize="@dimen/text_main" />
+
+        <TextView
+            android:id="@+id/r4"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:padding="8dp">
+
+        <TextView
+            android:id="@+id/l5"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp"
+            android:text="texy"
+            android:textColor="@color/text_hine"
+            android:textSize="@dimen/text_main" />
+
+        <TextView
+            android:id="@+id/r5"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:padding="8dp">
+
+        <TextView
+            android:id="@+id/l6"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp"
+            android:text="texy"
+            android:textColor="@color/text_hine"
+            android:textSize="@dimen/text_main" />
+
+        <TextView
+            android:id="@+id/r6"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="3dp"
+            android:layout_weight="1"
+            android:drawableLeft="@drawable/attendance_dl"
+            android:drawablePadding="10dp" />
+    </LinearLayout>
+</LinearLayout>

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

@@ -131,7 +131,7 @@
             android:layout_below="@+id/out_addr_tv"
             android:layout_marginTop="5dp"
             android:layout_toLeftOf="@id/out_img"
-            android:textColor="@color/text_hine"
+            android:textColor="@color/hintColor"
             android:textSize="@dimen/text_main" />
 
     </RelativeLayout>

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

@@ -40,6 +40,7 @@
     <color name="wirtehine">#a3b2cf</color>
     <color name="text_main">#3c3c3c</color>
     <color name="text_hine">#575757</color>
+
     <color name="bar_pass">#0096e6</color>
     <color name="bar_color">#e6e6e6</color>
     <color name="bg_main">@color/white</color>
@@ -272,7 +273,7 @@
     <color name="TextRed">#ffc68753</color>
     <color name="calendar_topbg">#ff836244</color>
     <color name="calendar_cellbg">#ff373737</color>
-    <color name="hintColor">#ffd4c7b9</color>
+    <color name="hintColor">#969595</color>
     <color name="main_red">#ffbe2e15</color>
     <color name="main_grey">#ff5f5f5f</color>
     <color name="huangTuSe">#ff995e2d</color>