Browse Source

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

# Conflicts:
#	WeiChat/version.properties
raomeng 7 years ago
parent
commit
be9adc2cbb
77 changed files with 836 additions and 369 deletions
  1. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/OAActivity.java
  2. 1 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/me/MeFragment.java
  3. 52 118
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java
  4. BIN
      WeiChat/src/main/res/drawable-hdpi/icon_uu_company.png
  5. BIN
      WeiChat/src/main/res/drawable-hdpi/qunliao.png
  6. BIN
      WeiChat/src/main/res/drawable-hdpi/set_fans_u.png
  7. BIN
      WeiChat/src/main/res/drawable-mdpi/icon_uu_company.png
  8. BIN
      WeiChat/src/main/res/drawable-xhdpi/icon_uu_company.png
  9. BIN
      WeiChat/src/main/res/drawable-xhdpi/qunliao.png
  10. BIN
      WeiChat/src/main/res/drawable-xhdpi/set_fans_u.png
  11. BIN
      WeiChat/src/main/res/drawable-xxhdpi/icon_uu_company.png
  12. BIN
      WeiChat/src/main/res/drawable-xxhdpi/icon_yuyue3.png
  13. BIN
      WeiChat/src/main/res/drawable-xxhdpi/qunliao.png
  14. BIN
      WeiChat/src/main/res/drawable-xxhdpi/set_fans_u.png
  15. 12 1
      WeiChat/src/main/res/layout/act_task_detail.xml
  16. 1 1
      WeiChat/src/main/res/layout/activity_base_info.xml
  17. 4 4
      WeiChat/src/main/res/layout/activity_book_add.xml
  18. 0 1
      WeiChat/src/main/res/values-v21/styles.xml
  19. 1 1
      WeiChat/src/main/res/values-zh-rCN/strings.xml
  20. 5 5
      WeiChat/version.properties
  21. 42 0
      app_core/common/src/main/java/com/common/ui/SoftInputLinearLayout.java
  22. 0 3
      app_core/common/src/main/java/com/core/base/BaseToolBarActivity.java
  23. 4 0
      app_core/common/src/main/java/com/core/utils/BaiduMapUtil.java
  24. 1 1
      app_core/common/src/main/java/com/core/utils/CommonUtil.java
  25. BIN
      app_core/common/src/main/res/drawable-hdpi/ic_work_business_manage.png
  26. BIN
      app_core/common/src/main/res/drawable-hdpi/ic_work_uu_education.png
  27. BIN
      app_core/common/src/main/res/drawable-hdpi/icon_uu_company.png
  28. BIN
      app_core/common/src/main/res/drawable-hdpi/icon_yuyue3.png
  29. BIN
      app_core/common/src/main/res/drawable-hdpi/qunliao.png
  30. BIN
      app_core/common/src/main/res/drawable-hdpi/set_fans_u.png
  31. BIN
      app_core/common/src/main/res/drawable-mdpi/ic_work_uu_education.png
  32. BIN
      app_core/common/src/main/res/drawable-xhdpi/ic_work_business_manage.png
  33. BIN
      app_core/common/src/main/res/drawable-xhdpi/ic_work_uu_education.png
  34. BIN
      app_core/common/src/main/res/drawable-xhdpi/icon_uu_company.png
  35. BIN
      app_core/common/src/main/res/drawable-xhdpi/icon_yuyue3.png
  36. BIN
      app_core/common/src/main/res/drawable-xhdpi/qunliao.png
  37. BIN
      app_core/common/src/main/res/drawable-xhdpi/set_fans_u.png
  38. BIN
      app_core/common/src/main/res/drawable-xxhdpi/ic_work_business_manage.png
  39. BIN
      app_core/common/src/main/res/drawable-xxhdpi/ic_work_uu_education.png
  40. BIN
      app_core/common/src/main/res/drawable-xxhdpi/icon_uu_company.png
  41. BIN
      app_core/common/src/main/res/drawable-xxhdpi/icon_yuyue3.png
  42. BIN
      app_core/common/src/main/res/drawable-xxhdpi/qunliao.png
  43. BIN
      app_core/common/src/main/res/drawable-xxhdpi/set_fans_u.png
  44. 0 2
      app_core/common/src/main/res/layout/activity_customer_list.xml
  45. 2 2
      app_core/common/src/main/res/layout/base_bar_layout.xml
  46. 1 1
      app_core/common/src/main/res/values-zh-rCN/strings.xml
  47. 1 1
      app_core/common/src/main/res/values/strings.xml
  48. 7 7
      app_modular/appbooking/src/main/res/layout/activity_bbooking_add.xml
  49. 1 0
      app_modular/appme/build.gradle
  50. 2 0
      app_modular/appme/src/main/java/com/uas/appme/settings/activity/AboutActivity.java
  51. 2 1
      app_modular/appmessages/src/main/AndroidManifest.xml
  52. 3 3
      app_modular/appmessages/src/main/java/com/modular/appmessages/activity/ApprovalActivity.java
  53. 1 0
      app_modular/appmessages/src/main/java/com/modular/appmessages/fragment/ApprovalListFragment.java
  54. 18 17
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/ApprovaPresenter.java
  55. 49 27
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java
  56. 1 0
      app_modular/appmusic/build.gradle
  57. 20 2
      app_modular/appmusic/src/main/AndroidManifest.xml
  58. 7 7
      app_modular/appmusic/src/main/java/com/lg/lrcview_master/LrcView.java
  59. 16 0
      app_modular/appmusic/src/main/java/com/usoftchina/PhoneBroadcastReceiver.java
  60. 75 0
      app_modular/appmusic/src/main/java/com/usoftchina/music/MusicService.java
  61. 136 37
      app_modular/appmusic/src/main/java/com/usoftchina/pay/MainMusicActivity.java
  62. 3 1
      app_modular/apputils/src/main/java/com/modular/apputils/adapter/ApprovalListAdapter.java
  63. 9 0
      app_modular/apputils/src/main/java/com/modular/apputils/model/ApprovalList.java
  64. 182 57
      app_modular/apputils/src/main/java/com/modular/apputils/utils/SignUtils.java
  65. 1 1
      app_modular/apputils/src/main/java/com/modular/apputils/utils/WifiReceiverUtil.java
  66. 29 0
      app_modular/apputils/src/main/java/com/modular/apputils/widget/WrapContentLinearLayoutManager.java
  67. 12 1
      app_modular/apputils/src/main/res/layout/item_approval_list.xml
  68. 4 0
      app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/DeviceMatchActivity.java
  69. 38 42
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkActivity.java
  70. 44 13
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/WorkPresenter.java
  71. 12 7
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java
  72. 11 2
      app_modular/appworks/src/main/java/com/uas/appworks/model/DeviceMatch.java
  73. BIN
      app_modular/appworks/src/main/res/drawable-hdpi/ic_work_business_manage.png
  74. BIN
      app_modular/appworks/src/main/res/drawable-xhdpi/ic_work_business_manage.png
  75. BIN
      app_modular/appworks/src/main/res/drawable-xxhdpi/ic_work_business_manage.png
  76. 2 2
      app_modular/appworks/src/main/res/layout/activity_data_inquiry_search.xml
  77. 23 0
      app_modular/appworks/src/main/res/layout/item_device_match.xml

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

@@ -845,7 +845,7 @@ public class OAActivity extends SupportToolBarActivity implements View.OnClickLi
             popupWindow =new PopupWindow(view);
 //                    new PopupWindow(view, windowManager.getDefaultDisplay().getWidth() / 3, windowManager.getDefaultDisplay().getHeight() / 3);
             popupWindow.setWidth(DisplayUtil.dip2px(ct,140));
-            popupWindow.setHeight(DisplayUtil.dip2px(ct,125));
+            popupWindow.setHeight(DisplayUtil.dip2px(ct,135));
             }
         // 使其聚集
         popupWindow.setFocusable(true);

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

@@ -707,6 +707,7 @@ public class MeFragment extends EasyFragment implements View.OnClickListener, On
     public ItemPopListAdapter adapter;
 
     public void showPopDialog(final Activity ct, List<ItemsSelectType1> itemsSelectType1s) {
+        if(ct==null)return;
         View view = null;
         if (DialogUtils.isDialogShowing(ViewUtil.popupWindow)){
             ViewUtil.popupWindow.dismiss();

+ 52 - 118
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java

@@ -15,13 +15,9 @@ import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
 import android.widget.ImageButton;
-import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
-import android.widget.TextView;
 
 import com.common.data.DateFormatUtil;
 import com.common.data.ListUtils;
@@ -39,7 +35,6 @@ import com.core.net.utils.NetUtils;
 import com.core.utils.ToastUtil;
 import com.core.utils.sortlist.BaseSortModel;
 import com.core.widget.DrawableCenterTextView;
-import com.core.widget.RedView;
 import com.modular.appmessages.activity.ProcessB2BActivity;
 import com.modular.appmessages.activity.ProcessMsgActivity;
 import com.modular.appmessages.activity.Subscription2Activity;
@@ -50,7 +45,10 @@ import com.modular.appmessages.presenter.MessagePresenter;
 import com.modular.appmessages.presenter.imp.IMessageView;
 import com.modular.appmessages.widget.SignRefreshLayout;
 import com.modular.apputils.adapter.LinearItemDecoration;
+import com.modular.apputils.utils.PopupWindowHelper;
+import com.modular.apputils.widget.WrapContentLinearLayoutManager;
 import com.uas.appme.pedometer.view.UURanking;
+import com.uas.appworks.OA.erp.activity.ChangeMobileActivity;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.platform.task.TaskActivity;
 import com.xzjmyk.pm.activity.ui.platform.task.TaskB2BActivity;
@@ -193,7 +191,7 @@ public class MessageFragment extends SupportToolBarFragment implements IMessageV
         message_net_set = findViewById(R.id.message_net_set);
         mSignRefreshLayout = findViewById(R.id.mSignRefreshLayout);
         mRecyclerView = findViewById(R.id.mRecyclerView);
-        mRecyclerView.setLayoutManager(new LinearLayoutManager(ct));
+        mRecyclerView.setLayoutManager(new WrapContentLinearLayoutManager(ct, LinearLayoutManager.VERTICAL, false));
         mRecyclerView.addItemDecoration(new LinearItemDecoration(ct));
         presenter = new MessagePresenter(mContext, this, unReaderListener);
         signView = mSignRefreshLayout.getSignView();
@@ -321,23 +319,26 @@ public class MessageFragment extends SupportToolBarFragment implements IMessageV
                 break;
 
             case R.id.itemSignImage:
-                WorkModel work = null;
-                if (mSignRefreshLayout != null && mSignRefreshLayout.getTag() != null) {
-                    Object tag = mSignRefreshLayout.getTag();
-                    if (tag instanceof WorkModel) {
-                        work = (WorkModel) tag;
-                    }
-                }
-                if (NetUtils.isNetWorkConnected(ct)) {
-                    presenter.signWork(work);
-                } else {
-                    showToact(R.string.networks_out);
-                }
+                sign(true);
                 break;
         }
 
     }
 
+    private void sign(boolean needMac) {
+        WorkModel work = null;
+        if (mSignRefreshLayout != null && mSignRefreshLayout.getTag() != null) {
+            Object tag = mSignRefreshLayout.getTag();
+            if (tag instanceof WorkModel) {
+                work = (WorkModel) tag;
+            }
+        }
+        if (NetUtils.isNetWorkConnected(ct)) {
+            presenter.signWork(needMac, work);
+        } else {
+            showToact(R.string.networks_out);
+        }
+    }
 
     @Override
     public void showModel(List<BaseSortModel<Friend>> models) {
@@ -486,113 +487,46 @@ public class MessageFragment extends SupportToolBarFragment implements IMessageV
 
     @Override
     public void updateSign(String message) {
-        ToastUtil.showToast(ct, message, getContentView());
+        if (message.equals(getString(R.string.show_frist_mac))) {
+            showDialog(1, message);
+        } else if (message.contains("不是考勤打卡常用设备,是否需要更换")) {
+            showDialog(2, getString(R.string.other_phone_error));
+        } else if (message.contains("设备正处于申请变更绑定阶段")) {
+            showToact(R.string.mac_changing);
+        } else if (message.contains("该设备已被他人绑定")) {
+            showToact(R.string.mac_other);
+        } else {
+            ToastUtil.showToast(ct, message, getContentView());
+        }
         setSignViewData(true);
     }
 
+    /**
+     * 显示提示框
+     *
+     * @param type    1.第一次绑定mac  2.mac错误,进入修改
+     * @param message
+     */
+    private void showDialog(final int type, final String message) {
+        PopupWindowHelper.showAlart(getActivity(), getString(R.string.app_name), message, new PopupWindowHelper.OnSelectListener() {
+            @Override
+            public void select(boolean selectOk) {
 
-    private class HeadAdapter extends BaseAdapter {
-        List<MessageHeader> models;
-
-        public void setModels(List<MessageHeader> models) {
-            this.models = models;
-            notifyDataSetChanged();
-        }
-
-        public HeadAdapter(List<MessageHeader> models) {
-            this.models = models;
-        }
-
-        public List<MessageHeader> getModels() {
-            return models;
-        }
-
-        public MessageHeader getItemModel(int position) {
-            if (ListUtils.getSize(models) > position) {
-                return models.get(position);
-            } else {
-                return null;
-            }
-        }
-
-
-        public void updateModel(List<MessageHeader> models) {
-            this.models = models;
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public int getCount() {
-            return ListUtils.getSize(models);
-        }
-
-        @Override
-        public Object getItem(int position) {
-            return models.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            ViewHodler hodler = null;
-            if (convertView == null) {
-                hodler = new ViewHodler();
-                convertView = LayoutInflater.from(ct).inflate(R.layout.item_message_header, null);
-                hodler.headerImg = (ImageView) convertView.findViewById(R.id.headerImg);
-                hodler.headerNumTv = (TextView) convertView.findViewById(R.id.headerNumTv);
-                hodler.headerRv = (RedView) convertView.findViewById(R.id.headerRv);
-                hodler.titleTv = (TextView) convertView.findViewById(R.id.titleTv);
-                hodler.headerSubTv = (TextView) convertView.findViewById(R.id.headerSubTv);
-                hodler.timeTv = (TextView) convertView.findViewById(R.id.timeTv);
-                convertView.setTag(hodler);
-            } else {
-                hodler = (ViewHodler) convertView.getTag();
-            }
-            try {
-                bindData(getItemModel(position), hodler);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-            return convertView;
-        }
-
-        private class ViewHodler {
-            ImageView headerImg;
-            TextView headerNumTv;
-            RedView headerRv;
-            TextView titleTv;
-            TextView headerSubTv;
-            TextView timeTv;
-        }
+                if (selectOk) {
+                    switch (type) {
+                        case 1:
+                            sign(false);
+                            break;
+                        case 2:
+                            Intent intent = new Intent(ct, ChangeMobileActivity.class);
+                            intent.putExtra("macAddress", presenter.getMac());
+                            startActivity(intent);
+                            break;
+                    }
 
-        private void bindData(MessageHeader model, ViewHodler hodler) throws Exception {
-            if (model != null) {
-                hodler.headerImg.setImageResource(model.getIcon());
-                if (model.getRedNum() > 0) {
-                    hodler.headerNumTv.setVisibility(View.VISIBLE);
-                    hodler.headerNumTv.setText(String.valueOf(model.getRedNum()));
-                } else {
-                    hodler.headerNumTv.setVisibility(View.GONE);
-                    hodler.headerNumTv.setText("");
-                }
-                hodler.titleTv.setText(model.getName());
-                hodler.headerSubTv.setText(model.getSubDoc());
-                if (model.isHideRed()) {
-                    hodler.headerRv.setVisibility(View.GONE);
-                    hodler.timeTv.setVisibility(View.VISIBLE);
-                    hodler.timeTv.setText(model.getTime());
-                } else {
-                    hodler.headerRv.setVisibility(View.VISIBLE);
-                    hodler.headerRv.setName(model.getRedMessage());
-                    hodler.timeTv.setVisibility(View.GONE);
                 }
             }
-        }
+        });
     }
 
-
 }

BIN
WeiChat/src/main/res/drawable-hdpi/icon_uu_company.png


BIN
WeiChat/src/main/res/drawable-hdpi/qunliao.png


BIN
WeiChat/src/main/res/drawable-hdpi/set_fans_u.png


BIN
WeiChat/src/main/res/drawable-mdpi/icon_uu_company.png


BIN
WeiChat/src/main/res/drawable-xhdpi/icon_uu_company.png


BIN
WeiChat/src/main/res/drawable-xhdpi/qunliao.png


BIN
WeiChat/src/main/res/drawable-xhdpi/set_fans_u.png


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


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


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


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


+ 12 - 1
WeiChat/src/main/res/layout/act_task_detail.xml

@@ -103,12 +103,14 @@
                 android:layout_height="wrap_content">
                 <LinearLayout
                     style="@style/form_linear_customer"
-                    android:layout_height="250dp"
+                    android:layout_height="300dp"
+                    android:minHeight="220dp"
                     android:paddingBottom="5dp">
 
                     <LinearLayout
                         style="@style/linear_task_background"
                         android:layout_marginBottom="5dp"
+                        android:layout_height="wrap_content"
                         android:layout_marginTop="10dp"
                         android:orientation="horizontal"
                         android:weightSum="4">
@@ -133,6 +135,7 @@
                     <LinearLayout
                         style="@style/linear_task_background"
                         android:orientation="horizontal"
+                        android:layout_height="wrap_content"
                         android:weightSum="4">
 
                         <TextView
@@ -156,6 +159,7 @@
                     <LinearLayout
                         style="@style/linear_task_background"
                         android:orientation="horizontal"
+                        android:layout_height="wrap_content"
                         android:weightSum="4">
 
                         <TextView
@@ -178,6 +182,7 @@
                     <LinearLayout
                         style="@style/linear_task_background"
                         android:orientation="horizontal"
+                        android:layout_height="wrap_content"
                         android:weightSum="4">
 
                         <TextView
@@ -200,6 +205,7 @@
                     <LinearLayout
                         style="@style/linear_task_background"
                         android:orientation="horizontal"
+                        android:layout_height="wrap_content"
                         android:weightSum="4">
 
                         <TextView
@@ -223,6 +229,7 @@
                         style="@style/linear_task_background"
                         android:orientation="horizontal"
                         android:visibility="gone"
+                        android:layout_height="wrap_content"
                         android:weightSum="4">
 
                         <TextView
@@ -247,6 +254,7 @@
                     <LinearLayout
                         style="@style/linear_task_background"
                         android:orientation="horizontal"
+                        android:layout_height="wrap_content"
                         android:weightSum="4">
 
                         <TextView
@@ -270,6 +278,7 @@
                     <LinearLayout
                         style="@style/linear_task_background"
                         android:orientation="horizontal"
+                        android:layout_height="wrap_content"
                         android:layout_marginLeft="20dp">
 
                         <TextView
@@ -298,6 +307,7 @@
                         android:layout_marginTop="5dp"/>
                     <LinearLayout
                         style="@style/linear_task_background"
+                        android:layout_height="wrap_content"
                         android:orientation="horizontal">
                         <TextView
                             android:layout_width="wrap_content"
@@ -320,6 +330,7 @@
                     <LinearLayout
                         android:id="@+id/lay_voice_task"
                         style="@style/linear_task_background"
+                        android:layout_height="wrap_content"
                         android:layout_marginBottom="5dp"
                         android:orientation="horizontal"
                         android:weightSum="4">

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

@@ -134,7 +134,7 @@
                 android:layout_height="48dp"
                 android:layout_marginRight="10dp" 
                 android:layout_centerVertical="true"
-                android:background="@drawable/defaultpic"
+              
                 android:layout_toLeftOf="@+id/me_heard_arrow_img"
                
                 android:textColor="@color/dark_dark_grey" />

+ 4 - 4
WeiChat/src/main/res/layout/activity_book_add.xml

@@ -24,7 +24,7 @@
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginLeft="29dp"
+                android:layout_marginLeft="33dp"
                 android:layout_marginTop="5dp"
                 android:text="*"
                 android:textColor="@color/red" />
@@ -50,7 +50,7 @@
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginLeft="29dp"
+                android:layout_marginLeft="33dp"
                 android:layout_marginTop="5dp"
                 android:text="*"
                 android:textColor="@color/red" />
@@ -77,7 +77,7 @@
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginLeft="29dp"
+                android:layout_marginLeft="33dp"
                 android:layout_marginTop="5dp"
                 android:text="*"
                 android:textColor="@color/red" />
@@ -106,7 +106,7 @@
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginLeft="29dp"
+                android:layout_marginLeft="33dp"
                 android:layout_marginTop="5dp"
                 android:text="*"
                 android:textColor="@color/red" />

+ 0 - 1
WeiChat/src/main/res/values-v21/styles.xml

@@ -1,5 +1,4 @@
 <resources>>
-
     <style name="AppTheme.NoActionBar">
         <item name="windowActionBar">false</item>
         <item name="windowNoTitle">true</item>

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

@@ -980,7 +980,7 @@
     <string name="taskdetail_time">时间</string>
     <string name="taskdetail_content">内容</string>
     <!--我的订阅-->
-    <string name="subscribe_title">订阅</string>
+    <string name="subscribe_title">我的订阅</string>
     <string name="subscribe_manager">订阅管理</string>
     <string name="subscribe_unsure">未订阅</string>
     <string name="subscribe_confirmed">已订阅</string>

+ 5 - 5
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Tue Jun 05 16:09:13 CST 2018
-debugName=429
-versionName=660
-debugCode=429
-versionCode=200
+#Tue Jun 05 16:10:35 CST 2018
+debugName=477
+versionName=630
+debugCode=477
+versionCode=171

+ 42 - 0
app_core/common/src/main/java/com/common/ui/SoftInputLinearLayout.java

@@ -0,0 +1,42 @@
+package com.common.ui;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.view.WindowInsets;
+import android.widget.LinearLayout;
+
+public class SoftInputLinearLayout extends LinearLayout {
+    public SoftInputLinearLayout(Context context) {
+        super(context);
+    }
+
+    public SoftInputLinearLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+
+    public SoftInputLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    @Override
+    protected boolean fitSystemWindows(Rect insets) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
+            insets.left = 0;
+            insets.top = 0;
+            insets.right = 0;
+        }
+        return super.fitSystemWindows(insets);
+    }
+
+    @Override
+    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
+            return super.onApplyWindowInsets(insets.replaceSystemWindowInsets(0, 0, 0, insets.getSystemWindowInsetBottom()));
+        } else {
+            return insets;
+        }
+    }
+}

+ 0 - 3
app_core/common/src/main/java/com/core/base/BaseToolBarActivity.java

@@ -18,7 +18,6 @@ import android.view.WindowManager;
 import android.widget.FrameLayout;
 import android.widget.TextView;
 
-import com.common.LogUtil;
 import com.core.app.R;
 import com.core.utils.CommonUtil;
 import com.core.utils.StatusBarUtil;
@@ -93,9 +92,7 @@ public class BaseToolBarActivity extends AppCompatActivity {
     }
 
     public void initCommonToolbar() {
-        LogUtil.i("gong", "initCommonToolbar");
         if (commonToolBar != null) {
-            LogUtil.i("gong", "commonToolBar != null");
             StatusBarUtil.immersive(this, 0x00000000, 0.0f);
             setSupportActionBar(commonToolBar);
             getSupportActionBar().setDisplayShowTitleEnabled(false);

+ 4 - 0
app_core/common/src/main/java/com/core/utils/BaiduMapUtil.java

@@ -141,6 +141,10 @@ public class BaiduMapUtil {
         }
     }
 
+    /**
+     * 获取符合打卡的距离
+     * @return
+     */
     public float getDistance() {
         float dis = 0;
         try {

+ 1 - 1
app_core/common/src/main/java/com/core/utils/CommonUtil.java

@@ -106,7 +106,7 @@ public class CommonUtil {
         }
         String baseUrl = getSharedPreferences(ct, "erp_baseurl");
 //        if (BaseConfig.isDebug()){
-//            baseUrl="http://192.168.253.243:8080/ERP/";
+//            baseUrl="http://192.168.253.250:8080/ERP/";
 //        }
 //        baseUrl = "http://192.168.253.41:8080/ERP/";
 

BIN
app_core/common/src/main/res/drawable-hdpi/ic_work_business_manage.png


BIN
app_core/common/src/main/res/drawable-hdpi/ic_work_uu_education.png


BIN
app_core/common/src/main/res/drawable-hdpi/icon_uu_company.png


BIN
app_core/common/src/main/res/drawable-hdpi/icon_yuyue3.png


BIN
app_core/common/src/main/res/drawable-hdpi/qunliao.png


BIN
app_core/common/src/main/res/drawable-hdpi/set_fans_u.png


BIN
app_core/common/src/main/res/drawable-mdpi/ic_work_uu_education.png


BIN
app_core/common/src/main/res/drawable-xhdpi/ic_work_business_manage.png


BIN
app_core/common/src/main/res/drawable-xhdpi/ic_work_uu_education.png


BIN
app_core/common/src/main/res/drawable-xhdpi/icon_uu_company.png


BIN
app_core/common/src/main/res/drawable-xhdpi/icon_yuyue3.png


BIN
app_core/common/src/main/res/drawable-xhdpi/qunliao.png


BIN
app_core/common/src/main/res/drawable-xhdpi/set_fans_u.png


BIN
app_core/common/src/main/res/drawable-xxhdpi/ic_work_business_manage.png


BIN
app_core/common/src/main/res/drawable-xxhdpi/ic_work_uu_education.png


BIN
app_core/common/src/main/res/drawable-xxhdpi/icon_uu_company.png


BIN
app_core/common/src/main/res/drawable-xxhdpi/icon_yuyue3.png


BIN
app_core/common/src/main/res/drawable-xxhdpi/qunliao.png


BIN
app_core/common/src/main/res/drawable-xxhdpi/set_fans_u.png


+ 0 - 2
app_core/common/src/main/res/layout/activity_customer_list.xml

@@ -108,8 +108,6 @@
 
     <com.handmark.pulltorefresh.library.PullToRefreshListView
         android:id="@+id/list_business"
-        android:layout_marginLeft="10dp"
-        android:layout_marginRight="10dp"
         style="@style/ListViewBasic">
 
     </com.handmark.pulltorefresh.library.PullToRefreshListView>

+ 2 - 2
app_core/common/src/main/res/layout/base_bar_layout.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
+<com.common.ui.SoftInputLinearLayout
         android:id="@+id/windowLl"
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
@@ -16,4 +16,4 @@
             android:layout_height="match_parent"
             android:layout_below="@+id/toolbarVs"
             android:orientation="horizontal" />
-</LinearLayout>
+</com.common.ui.SoftInputLinearLayout>

+ 1 - 1
app_core/common/src/main/res/values-zh-rCN/strings.xml

@@ -981,7 +981,7 @@
     <string name="taskdetail_time">时间</string>
     <string name="taskdetail_content">内容</string>
     <!--我的订阅-->
-    <string name="subscribe_title">订阅</string>
+    <string name="subscribe_title">我的订阅</string>
     <string name="subscribe_manager">订阅管理</string>
     <string name="subscribe_unsure">未订阅</string>
     <string name="subscribe_confirmed">已订阅</string>

+ 1 - 1
app_core/common/src/main/res/values/strings.xml

@@ -1324,7 +1324,7 @@
     <string name="taskdetail_time">时间</string>
     <string name="taskdetail_content">内容</string>
     <!--我的订阅-->
-    <string name="subscribe_title">订阅</string>
+    <string name="subscribe_title">我的订阅</string>
     <string name="subscribe_manager">订阅管理</string>
     <string name="subscribe_unsure">未订阅</string>
     <string name="subscribe_confirmed">已订阅</string>

+ 7 - 7
app_modular/appbooking/src/main/res/layout/activity_bbooking_add.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
@@ -32,7 +32,7 @@
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_marginLeft="29dp"
+                    android:layout_marginLeft="43dp"
                     android:layout_marginTop="5dp"
                     android:text="*"
                     android:textColor="@color/red" />
@@ -60,7 +60,7 @@
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_marginLeft="29dp"
+                    android:layout_marginLeft="43dp"
                     android:layout_marginTop="5dp"
                     android:text="*"
                     android:textColor="@color/red" />
@@ -88,7 +88,7 @@
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_marginLeft="29dp"
+                    android:layout_marginLeft="43dp"
                     android:layout_marginTop="5dp"
                     android:text="*"
                     android:textColor="@color/red" />
@@ -119,7 +119,7 @@
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_marginLeft="29dp"
+                    android:layout_marginLeft="43dp"
                     android:layout_marginTop="5dp"
                     android:text="*"
                     android:textColor="@color/red" />
@@ -151,7 +151,7 @@
                 <TextView
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_marginLeft="29dp"
+                    android:layout_marginLeft="43dp"
                     android:layout_marginTop="5dp"
                     android:text="*"
                     android:textColor="@color/red" />
@@ -233,4 +233,4 @@
 
 
     </ScrollView>
-</android.support.constraint.ConstraintLayout>
+</RelativeLayout>

+ 1 - 0
app_modular/appme/build.gradle

@@ -27,4 +27,5 @@ dependencies {
     compile project(':appcontact')
 
     compile 'com.android.support.constraint:constraint-layout:1.0.2'
+    compile project(path: ':appmusic')
 }

+ 2 - 0
app_modular/appme/src/main/java/com/uas/appme/settings/activity/AboutActivity.java

@@ -15,6 +15,7 @@ import android.widget.TextView;
 
 import com.afollestad.materialdialogs.GravityEnum;
 import com.afollestad.materialdialogs.MaterialDialog;
+import com.common.LogUtil;
 import com.common.system.SystemUtil;
 import com.core.base.SupportToolBarActivity;
 import com.core.utils.CommonUtil;
@@ -37,6 +38,7 @@ public class AboutActivity extends SupportToolBarActivity implements View.OnClic
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        LogUtil.d("AboutActivity extends","onCreate()");
         setContentView(R.layout.activity_about);
         setTitle(getString(R.string.set_about));
         TextView versionTv = (TextView) findViewById(R.id.version_tv);

+ 2 - 1
app_modular/appmessages/src/main/AndroidManifest.xml

@@ -59,7 +59,8 @@
             android:theme="@style/MainBaseTheme" />
         <activity
             android:name=".activity.ApprovalActivity"
-            android:theme="@style/MainBaseTheme" />
+            android:theme="@style/MainBaseTheme"
+            android:windowSoftInputMode="adjustPan"/>
         <activity
             android:name=".activity.Subscription2Activity"
             android:label="@string/subscribe_title" />

+ 3 - 3
app_modular/appmessages/src/main/java/com/modular/appmessages/activity/ApprovalActivity.java

@@ -12,7 +12,6 @@ import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.WindowManager;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
@@ -187,8 +186,8 @@ public class ApprovalActivity extends BaseActivity implements IApproval, Approva
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN |
-                WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
+//        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN |
+//                WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
         setContentView(R.layout.activity_approval);
         initView();
     }
@@ -558,6 +557,7 @@ public class ApprovalActivity extends BaseActivity implements IApproval, Approva
 
     @Override
     public void showToast(String message) {
+        LogUtil.i("gong","message="+message);
         super.showToast(message);
     }
 

+ 1 - 0
app_modular/appmessages/src/main/java/com/modular/appmessages/fragment/ApprovalListFragment.java

@@ -221,6 +221,7 @@ public class ApprovalListFragment extends ViewPagerLazyFragment implements OnSma
                     e.setLauncherName(JSONUtil.getText(object, "JP_LAUNCHERNAME"));
                     e.setName(JSONUtil.getText(object, "JP_NAME"));
                     e.setNodeId(JSONUtil.getText(object, "JP_NODEID"));
+                    e.setCodeValue(JSONUtil.getText(object, "JP_CODEVALUE"));
                     e.setDealTime(JSONUtil.getTime(object, "JP_LAUNCHTIME", "JN_DEALTIME"));
                     e.setMaster(JSONUtil.getText(object, "CURRENTMASTER"));
                     e.setImid(JSONUtil.getText(object, "EM_IMID"));

+ 18 - 17
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/ApprovaPresenter.java

@@ -193,7 +193,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
     /**
      * start 提交部分
      */
-        /*变更处理人 submiting*/
+    /*变更处理人 submiting*/
     public void updateAssignee(String emCode, String nodeLog) {
         if (StringUtil.isEmpty(nodeLog)) {
             iApproval.showToast(R.string.approval_opinion_error, R.color.load_submit);
@@ -287,6 +287,9 @@ public class ApprovaPresenter implements OnHttpResultListener {
     /*同意 submiting end loadProcessUpdate*/
     private void agree(String nodeLog) {
         LogUtil.i("agree");
+        if (1 == 1) {
+            return;
+        }
         iApproval.showLoading();
         String points = StringUtil.getMessage(chchePoints);
         points.replaceAll("@", "").replaceAll("\\@", "").replaceAll("\\\\@", "");
@@ -1146,13 +1149,13 @@ public class ApprovaPresenter implements OnHttpResultListener {
                  */
                 for (int i = 0; i < approvals.size(); i++) {
                     Approval a = approvals.get(i);
-                    LogUtil.i("a.getIdKey()="+a.getIdKey());
+                    LogUtil.i("a.getIdKey()=" + a.getIdKey());
                     if (!a.getIdKey().startsWith("已审批")
                             && !a.getIdKey().startsWith("未通过")
                             && !a.getIdKey().startsWith("不同意")
                             && !a.getIdKey().startsWith("已结束")) {
                         hanNotApproval = true;
-                        if (a.getIdKey().startsWith("待审批")){
+                        if (a.getIdKey().startsWith("待审批")) {
                             a.setValues("");
                         }
                     } else if (a.getIdKey().startsWith("未通过") && i == 0) {
@@ -1292,14 +1295,14 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 if (a.getValuesKey().equals(record.nodeName)) {
                     hanEnd = true;
                 }
-                LogUtil.i("gong","name="+name);
-                LogUtil.i("gong","a.getValuesKey()="+a.getValuesKey());
+                LogUtil.i("gong", "name=" + name);
+                LogUtil.i("gong", "a.getValuesKey()=" + a.getValuesKey());
                 if (name.equals(a.getValuesKey())) {//为当前结点
-                    LogUtil.i("gong","为当前结点="+nodeDealName);
+                    LogUtil.i("gong", "为当前结点=" + nodeDealName);
                     if (!isLog) {
                         a.setDfType(nodeDealCode);
                         a.setCaption(nodeDealName);
-                        a.setIdKey( status);
+                        a.setIdKey(status);
                     } else {
                         if (launchTime > 0) {
                             a.setValues(DateFormatUtil.long2Str(launchTime, "MM-dd"));
@@ -1307,7 +1310,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         }
                         if (a.isDftypeEQ(nodeDealCode)) {
                             if (status.equals("不同意")) {
-                                a.setIdKey( "未通过");
+                                a.setIdKey("未通过");
                             } else if (status.equals("同意")) {
                                 a.setIdKey("已审批");
                             }
@@ -1551,14 +1554,18 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 }
             }
             Map<String, Object> formstore = putItem2Params(true, mainList);
-            if (formstore == null)
+            if (formstore == null) {
                 return false;
+            }
             formStore.putAll(formstore);
 
             for (List<Approval> details : detailList) {
                 Map<String, Object> param = putItem2Params(false, details);
-                if (param == null || param.isEmpty() || param.keySet().size() <= 1)
+                if (param == null || param.isEmpty() || param.keySet().size() <= 1) {
+//                    iApproval.showToast("明细行邮必填字段未填写");
+//                    return false;
                     continue;
+                }
                 params.add(param);
             }
         }
@@ -1575,12 +1582,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         iApproval.showToast(message);
                     }
                     return null;
-                } else if (StringUtil.isEmpty(approval.getValues())) {
-                    String message = StringUtil.getMessage(R.string.must_input_key) + " " + approval.getCaption() + " " + StringUtil.getMessage(R.string.limit_unno_zijie);
-                    if (showTocat) {
-                        iApproval.showToast(message);
-                    }
-                    return null;
                 } else {
                     if (approval.getValues().equals(Approval.VALUES_UNKNOWN)) {
                         formstore.put(approval.getValuesKey(), "1");//添加特殊字符判断
@@ -1617,7 +1618,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
         approvals.addAll(enclosureList);
         approvals.addAll(pointsList);
         approvals.addAll(nodeList);
-        LogUtil.i("gong","setData2ListThread="+approvals.size());
+        LogUtil.i("gong", "setData2ListThread=" + approvals.size());
 
         OAHttpHelper.getInstance().post(new Runnable() {
             @Override

+ 49 - 27
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java

@@ -60,6 +60,7 @@ import com.modular.appmessages.presenter.imp.IMessageView;
 import com.modular.appmessages.util.ApprovalUtil;
 import com.modular.apputils.utils.SignUtils;
 import com.modular.apputils.utils.SwitchUtil;
+import com.modular.apputils.utils.VoiceUtils;
 import com.modular.booking.activity.services.BServiceListActivity;
 import com.modular.booking.model.SBMenuModel;
 import com.uas.appworks.OA.platform.activity.BusinessTravelActivity;
@@ -136,8 +137,12 @@ public class MessagePresenter implements OnHttpResultListener {
             LocalBroadcastManager.getInstance(ct).registerReceiver(dataChangeReceiver, dateFilter);
         }
         initHeaderModels();
+        if (mSignUtils == null) {
+            mSignUtils = new SignUtils(mSignListener);
+        }
     }
 
+
     public void loadData() {
         String role = CommonUtil.getUserRole();
         isB2b = false;
@@ -1057,20 +1062,37 @@ public class MessagePresenter implements OnHttpResultListener {
 
     private SignUtils mSignUtils;
 
-    public void signWork(WorkModel work) {
+    public void signWork(boolean needMac,WorkModel work) {
         if (mSignUtils == null) {
-            mSignUtils = new SignUtils(new SignUtils.SignListener() {
-                @Override
-                public void sign(boolean signOk, String message) {
-                    iMessageView.updateSign(message);
-                }
-            });
+            mSignUtils = new SignUtils(mSignListener);
         }
         if (work == null) {
             work = getCurrentWork();
         }
         iMessageView.showProgress();
-        mSignUtils.sign(isB2b, work);
+        if (needMac){
+            mSignUtils.sign(isB2b, work);
+        }else{
+            mSignUtils.signFristMac(isB2b, work);
+
+        }
+    }
+    private SignUtils.SignListener mSignListener=new SignUtils.SignListener() {
+        @Override
+        public void sign(boolean signOk, String message) {
+            if (signOk){
+                VoiceUtils.signVoice(R.raw.voice_sign);
+            }
+            iMessageView.updateSign(message);
+        }
+    };
+
+    public String getMac(){
+        if (mSignUtils!=null){
+            return mSignUtils.getMac();
+        }else{
+            return SystemUtil.getMac(ct);
+        }
     }
 
     public interface UnReaderListener {
@@ -1093,8 +1115,8 @@ public class MessagePresenter implements OnHttpResultListener {
 
         if (PreferenceUtils.getInt("UUSTEP", -1) == 1) {
             //显示UU运动
-            MessageNew h=new MessageNew();
-            MessageHeader  model = new MessageHeader(StringUtil.getMessage(R.string.set_sport));
+            MessageNew h = new MessageNew();
+            MessageHeader model = new MessageHeader(StringUtil.getMessage(R.string.set_sport));
             model.setIcon(R.drawable.uu_run);
             model.setSubDoc("");
             model.setRedKey(Constants.MESSAGE_RUN);
@@ -1105,8 +1127,8 @@ public class MessagePresenter implements OnHttpResultListener {
         }
 
         if (SwitchUtil.showShebeiguanli()) {
-            MessageNew h=new MessageNew();
-            MessageHeader    model = new MessageHeader("设备管理");
+            MessageNew h = new MessageNew();
+            MessageHeader model = new MessageHeader("设备管理");
             model.setIcon(R.drawable.uu_run);
             model.setSubDoc("");
             model.setRedKey(Constants.MESSAGE_RUN);
@@ -1118,10 +1140,10 @@ public class MessagePresenter implements OnHttpResultListener {
         iMessageView.updateHeader(models);
     }
 
-    private  List<MessageNew> getErpHeader() {
+    private List<MessageNew> getErpHeader() {
         List<MessageNew> models = new ArrayList<>();
 
-        MessageNew h=new MessageNew();
+        MessageNew h = new MessageNew();
         MessageHeader model = new MessageHeader(StringUtil.getMessage(R.string.msg_approval));
         model.setIcon(R.drawable.home_image_01_u);
         model.setSubDoc("");
@@ -1131,7 +1153,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.msg_work));
         model.setIcon(R.drawable.daibangongzuo);
         model.setSubDoc("");
@@ -1141,7 +1163,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.msg_subscribe));
         model.setIcon(R.drawable.tingyue);
         model.setSubDoc("");
@@ -1152,7 +1174,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.booking_menu));
         model.setIcon(R.drawable.icon_yuyue3);
         model.setSubDoc("");
@@ -1164,9 +1186,9 @@ public class MessagePresenter implements OnHttpResultListener {
         return models;
     }
 
-    private  List<MessageNew> getB2bHeader() {
+    private List<MessageNew> getB2bHeader() {
         List<MessageNew> models = new ArrayList<>();
-        MessageNew h=new MessageNew();
+        MessageNew h = new MessageNew();
         MessageHeader model = new MessageHeader(StringUtil.getMessage(R.string.msg_approval));
         model.setIcon(R.drawable.home_image_01_u);
         model.setSubDoc("");
@@ -1176,7 +1198,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.msg_work));
         model.setIcon(R.drawable.daibangongzuo);
         model.setSubDoc("");
@@ -1186,7 +1208,7 @@ public class MessagePresenter implements OnHttpResultListener {
         h.setT(model);
         models.add(h);
 
-        h=new MessageNew();
+        h = new MessageNew();
         model = new MessageHeader(StringUtil.getMessage(R.string.booking_menu));
         model.setIcon(R.drawable.icon_yuyue3);
         model.setSubDoc("");
@@ -1200,7 +1222,7 @@ public class MessagePresenter implements OnHttpResultListener {
 
     private List<MessageNew> getPersonalHeader() {
         List<MessageNew> models = new ArrayList<>();
-        MessageNew header=new MessageNew();
+        MessageNew header = new MessageNew();
         MessageHeader model = new MessageHeader(StringUtil.getMessage(R.string.booking_menu));
         model.setIcon(R.drawable.icon_yuyue3);
         model.setSubDoc("");
@@ -1210,7 +1232,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("餐饮");
         model.setIcon(R.drawable.icon_food);
         model.setSubDoc("美味齐全");
@@ -1220,7 +1242,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("美容美发");
         model.setIcon(R.drawable.icon_hair);
         model.setSubDoc("时尚潮流");
@@ -1230,7 +1252,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("KTV");
         model.setIcon(R.drawable.icon_ktv);
         model.setSubDoc("音乐节");
@@ -1249,7 +1271,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("会所");
         model.setIcon(R.drawable.icon_club);
         model.setSubDoc("预约有优惠");
@@ -1259,7 +1281,7 @@ public class MessagePresenter implements OnHttpResultListener {
         header.setT(model);
         models.add(header);
 
-        header=new MessageNew();
+        header = new MessageNew();
         model = new MessageHeader("医院挂号");
         model.setIcon(R.drawable.icon_hospital);
         model.setSubDoc("您的健康助手");

+ 1 - 0
app_modular/appmusic/build.gradle

@@ -21,4 +21,5 @@ android {
 dependencies {
     compile fileTree(include: ['*.jar'], dir: 'libs')
     compile project(':common')
+    testCompile deps.junit
 }

+ 20 - 2
app_modular/appmusic/src/main/AndroidManifest.xml

@@ -1,18 +1,36 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.usoftchina.music">
-
+    <!--打电话广播-->
+    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
+    <!--监听电话状态-->
+    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
     <application
         android:allowBackup="true"
         android:label="@string/app_name"
         android:supportsRtl="true">
         <activity android:name="com.usoftchina.pay.MainMusicActivity"
             android:theme="@style/AppTheme.NoActionBar"
+            android:launchMode="singleInstance"
             android:label="智慧英唐">
             <intent-filter>
                 <action android:name="com.usoftchina.pay.MainMusicActivity" />
-
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
+
+         
         </activity>
+        <service
+            android:name="com.usoftchina.music.MusicService"
+            android:enabled="true"
+            android:exported="true" />
+
+      <!--  <receiver android:name="com.usoftchina.PhoneBroadcastReceiver">
+            <intent-filter android:priority="1000">
+                //主动打电话时,发送的广播
+                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
+                //电话状态改变时,发送的广播 (振铃,挂断,接通)
+                <action android:name="android.intent.action.PHONE_STATE"/>
+            </intent-filter>
+        </receiver>-->
     </application>
 </manifest>

+ 7 - 7
app_modular/appmusic/src/main/java/com/lg/lrcview_master/LrcView.java

@@ -37,12 +37,12 @@ public class LrcView extends View implements ILrcView {
 	/**无歌词数据的时候 显示的默认文字**/
 	private static final String DEFAULT_TEXT = "智慧英唐,全球共享";
 	/**默认文字的字体大小**/
-	private static final float SIZE_FOR_DEFAULT_TEXT = DensityUtil.dp2px(18);
+	private static final float SIZE_FOR_DEFAULT_TEXT = DensityUtil.dp2px(22);
 
 	/**画高亮歌词的画笔***/
 	private Paint mPaintForHighLightLrc;
 	/**高亮歌词的默认字体大小***/
-	private static final float DEFAULT_SIZE_FOR_HIGHT_LIGHT_LRC =  DensityUtil.dp2px(15);
+	private static final float DEFAULT_SIZE_FOR_HIGHT_LIGHT_LRC =  DensityUtil.dp2px(22);
 	/**高亮歌词当前的字体大小***/
 	private float mCurSizeForHightLightLrc = DEFAULT_SIZE_FOR_HIGHT_LIGHT_LRC;
 	/**高亮歌词的默认字体颜色**/
@@ -53,7 +53,7 @@ public class LrcView extends View implements ILrcView {
 	/**画其他歌词的画笔***/
 	private Paint mPaintForOtherLrc;
 	/**其他歌词的默认字体大小***/
-	private static final float DEFAULT_SIZE_FOR_OTHER_LRC =DensityUtil.dp2px(13);
+	private static final float DEFAULT_SIZE_FOR_OTHER_LRC =DensityUtil.dp2px(17);
 	/**其他歌词当前的字体大小***/
 	private float mCurSizeForOtherLrc = DEFAULT_SIZE_FOR_OTHER_LRC;
 	/**高亮歌词的默认字体颜色**/
@@ -65,7 +65,7 @@ public class LrcView extends View implements ILrcView {
 	/**画时间线的画笔***/
 	private Paint mPaintForTimeLine;
 	/***时间线的颜色**/
-	private static final int COLOR_FOR_TIME_LINE = 0xffD02090;
+	private static final int COLOR_FOR_TIME_LINE = 0xff2FABCF;
 	/**时间文字大小**/
 	private static final int SIZE_FOR_TIME = DensityUtil.dp2px(13);
 	/**是否画时间线**/
@@ -79,9 +79,9 @@ public class LrcView extends View implements ILrcView {
 	/**歌词的最大缩放比例**/
 	public static final float MAX_SCALING_FACTOR = 2.5f;
 	/**歌词的最小缩放比例**/
-	public static final float MIN_SCALING_FACTOR = 1.5f;
+	public static final float MIN_SCALING_FACTOR = 1f;
 	/**默认缩放比例**/
-	private static final float DEFAULT_SCALING_FACTOR = 1.8f;
+	private static final float DEFAULT_SCALING_FACTOR = 1f;
 	/**歌词的当前缩放比例**/
 	private float mCurScalingFactor = DEFAULT_SCALING_FACTOR;
 
@@ -393,7 +393,7 @@ public class LrcView extends View implements ILrcView {
 		mCurPadding = DEFAULT_PADDING * mCurScalingFactor;
 		mTotleDrawRow = (int) (getHeight()/(mCurSizeForOtherLrc+mCurPadding))+3;
 		log("mRowTotal="+mTotleDrawRow);
-		scrollTo(getScrollX(), (int) (mCurRow*(mCurSizeForOtherLrc+mCurPadding)));
+		//scrollTo(getScrollX(), (int) (mCurRow*(mCurSizeForOtherLrc+mCurPadding)));
 		invalidate();
 		mScroller.forceFinished(true);
 	}

+ 16 - 0
app_modular/appmusic/src/main/java/com/usoftchina/PhoneBroadcastReceiver.java

@@ -0,0 +1,16 @@
+package com.usoftchina;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+/**
+ * Created by Arison on 2018/6/5.
+ */
+
+public class PhoneBroadcastReceiver extends BroadcastReceiver {
+    @Override
+    public void onReceive(Context context, Intent intent) {
+     
+    }
+}

+ 75 - 0
app_modular/appmusic/src/main/java/com/usoftchina/music/MusicService.java

@@ -0,0 +1,75 @@
+package com.usoftchina.music;
+
+
+import android.app.Service;
+import android.content.Intent;
+import android.media.MediaPlayer;
+import android.os.Binder;
+import android.os.IBinder;
+
+/**
+ * Created by Arison on 2018/6/4.
+ */
+
+public class MusicService extends Service {
+    public MediaPlayer mediaPlayer;
+    public boolean tag = false;
+    
+    private static final String TAG = "MusicService";
+
+    public MusicService() {
+    
+    }
+
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        try {
+            mediaPlayer =  MediaPlayer.create(this, R.raw.yingtang);
+            mediaPlayer.prepare();
+            mediaPlayer.setLooping(true);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return super.onStartCommand(intent, flags, startId);
+    }
+
+    //  通过 Binder 来保持 Activity 和 Service 的通信
+    public MyBinder binder = new MyBinder();
+    public class MyBinder extends Binder {
+        public  MusicService getService() {
+            return MusicService.this;
+        }
+    }
+
+    public void playOrPause() {
+        if (mediaPlayer.isPlaying()) {
+            mediaPlayer.pause();
+        } else {
+            mediaPlayer.start();
+        }
+    }
+
+    public void stop() {
+        if (mediaPlayer != null) {
+            mediaPlayer.stop();
+            try {
+                mediaPlayer.reset();
+                mediaPlayer.prepare();
+                mediaPlayer.seekTo(0);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public boolean onUnbind(Intent intent) {
+        return super.onUnbind(intent);
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return binder;
+    }
+}

+ 136 - 37
app_modular/appmusic/src/main/java/com/usoftchina/pay/MainMusicActivity.java

@@ -1,12 +1,22 @@
 package com.usoftchina.pay;
 
+import android.app.Service;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
 import android.media.MediaPlayer;
 import android.media.MediaPlayer.OnCompletionListener;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.IBinder;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
+import android.telephony.TelephonyManager;
 import android.util.Log;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -16,11 +26,13 @@ import android.widget.SeekBar.OnSeekBarChangeListener;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.common.LogUtil;
 import com.core.utils.StatusBarUtil;
 import com.lg.lrcview_master.DefaultLrcParser;
 import com.lg.lrcview_master.LrcRow;
 import com.lg.lrcview_master.LrcView.OnLrcClickListener;
 import com.lg.lrcview_master.LrcView.OnSeekToListener;
+import com.usoftchina.music.MusicService;
 import com.usoftchina.music.R;
 
 import java.io.BufferedReader;
@@ -31,41 +43,90 @@ import java.util.List;
 
 public class MainMusicActivity extends AppCompatActivity {
 	private MediaPlayer mPlayer;
-	/**    控制播放的SeekBar***/
-	
 	private SeekBar mPlayerSeekBar;
-	/**控制歌词字体大小的SeekBar***/
 	private SeekBar mLrcSeekBar;
 	private Button mPlayBtn;
 	private com.lg.lrcview_master.LrcView mLrcView;
 	private	TextView tv_timeStart;
 	private	TextView tv_timeTotal;
 
+	PhoneBroadcastReceiver phoneBroadcastReceiver;
+
 	private Toast mPlayerToast;
 	private Toast mLrcToast;
 	private Toolbar toolbar;
+	private MusicService musicService;
+    private static final String TAG = "MainMusicActivity";
+	//  在Activity中调用 bindService 保持与 Service 的通信
+	private void bindServiceConnection() {
+		LogUtil.d(TAG,"bindServiceConnection()");
+		Intent intent = new Intent(MainMusicActivity.this, MusicService.class);
+		startService(intent);
+		bindService(intent, serviceConnection, this.BIND_AUTO_CREATE);
+	}
+	
+	//  回调onServiceConnected 函数,通过IBinder 获取 Service对象,实现Activity与 Service的绑定
+	private ServiceConnection serviceConnection = new ServiceConnection() {
+		@Override
+		public void onServiceConnected(ComponentName name, IBinder service) {
+			LogUtil.d(TAG,"onServiceConnected()");
+			musicService = ((MusicService.MyBinder) (service)).getService();
+			LogUtil.d(TAG,"musicService"+musicService.mediaPlayer);
+			musicService.mediaPlayer.setOnCompletionListener(onCompletionListener);
+			if (!musicService.mediaPlayer.isPlaying()){
+				new Handler().postDelayed(new Runnable() {
+					@Override
+					public void run() {
+						float scalingFactor = com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR + 0*(com.lg.lrcview_master.LrcView.MAX_SCALING_FACTOR- com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR)/100;
+						LogUtil.d("MusicApp","scalingFactor:"+scalingFactor+"");
+						mLrcView.setLrcScalingFactor(scalingFactor);
+
+						musicService.playOrPause();
+						mLrcView.setLrcRows(getLrcRows());
+						handler.sendEmptyMessage(0);
+						mPlayBtn.setText("暂停");
+						mPlayBtn.setSelected(true);
+					}
+				},1000);
+			}
+			//musicTotal.setText(time.format(musicService.mediaPlayer.getDuration()));
+		}
+		@Override
+		public void onServiceDisconnected(ComponentName name) {
+			musicService = null;
+		}
+	};
+	
 	@Override
 	protected void onCreate(Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
+		LogUtil.d(TAG,"OnCreate()");
 		setContentView(R.layout.activity_main_music);
-         
-		
 		initViews();
 		initPlayer();
+		
+		phoneBroadcastReceiver=new PhoneBroadcastReceiver();
+		IntentFilter filter = new IntentFilter();
+		filter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);
+		filter.addAction("android.intent.action.PHONE_STATE");
+		registerReceiver(phoneBroadcastReceiver, filter);
+
 		toolbar=findViewById(R.id.commonToolBar);
 		StatusBarUtil.immersive(this, 0x00000000, 0.0f);
 		setSupportActionBar(toolbar);
 		getSupportActionBar().setDisplayShowTitleEnabled(false);
 		StatusBarUtil.setPaddingSmart(this, toolbar);
-
 		toolbar.setNavigationIcon(R.drawable.back_black);
 		toolbar.setNavigationOnClickListener(new OnClickListener() {
 			@Override
 			public void onClick(View view) {
-				onBackPressed();
+			   onBackPressed();
 			}
 		});
 	}
+
+	
+
 	private void initViews() {
 		mLrcView = (com.lg.lrcview_master.LrcView) findViewById(R.id.lrcView);
 		mLrcView.setOnSeekToListener(onSeekToListener);
@@ -77,13 +138,6 @@ public class MainMusicActivity extends AppCompatActivity {
 		mLrcSeekBar.setMax(100);
 		//为seekbar设置当前的progress
 		mLrcSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
-		new Handler().postDelayed(new Runnable() {
-			@Override
-			public void run() {
-				float scalingFactor = com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR + 0*(com.lg.lrcview_master.LrcView.MAX_SCALING_FACTOR- com.lg.lrcview_master.LrcView.MIN_SCALING_FACTOR)/100;
-				mLrcView.setLrcScalingFactor(scalingFactor);
-			}
-		},1000);
 		mPlayBtn = (Button) findViewById(R.id.btnPlay);
 		mPlayerSeekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
 		mPlayBtn.setOnClickListener(onClickListener);
@@ -91,27 +145,30 @@ public class MainMusicActivity extends AppCompatActivity {
 		
 	}
 
-	@Override
-	protected void onResume() {
-		super.onResume();
-	    
-	}
-
+	
 	private void initPlayer() {
-		mPlayer = MediaPlayer.create(this, R.raw.yingtang);
-		mPlayer.setOnCompletionListener(onCompletionListener);
+//		mPlayer = MediaPlayer.create(this, R.raw.yingtang);
+//		mPlayer.setOnCompletionListener(onCompletionListener);
+		bindServiceConnection();
 	}
 	OnCompletionListener onCompletionListener = new OnCompletionListener() {
 		
 		@Override
 		public void onCompletion(MediaPlayer mp) {
 			mPlayBtn.setText("play");
-			mPlayBtn.setSelected(false);
+			//mPlayBtn.setSelected(false);
 			mLrcView.reset();
 			handler.removeMessages(0);
 			mPlayerSeekBar.setProgress(0);
+
+			musicService.mediaPlayer.start();
+			mLrcView.setLrcRows(getLrcRows());
+			handler.sendEmptyMessage(0);
+			mPlayBtn.setText("暂停");
+			mPlayBtn.setSelected(true);
 		}
 	};
+	
 	OnLrcClickListener onLrcClickListener = new OnLrcClickListener() {
 
 		@Override
@@ -123,14 +180,14 @@ public class MainMusicActivity extends AppCompatActivity {
 
 		@Override
 		public void onSeekTo(int progress) {
-			mPlayer.seekTo(progress);
+			musicService.mediaPlayer.seekTo(progress);
 			
 		}
 	};
 	Handler handler = new Handler(){
 		public void handleMessage(android.os.Message msg) {
-			mPlayerSeekBar.setMax(mPlayer.getDuration());
-			mPlayerSeekBar.setProgress(mPlayer.getCurrentPosition());
+			mPlayerSeekBar.setMax(musicService.mediaPlayer.getDuration());
+			mPlayerSeekBar.setProgress(musicService.mediaPlayer.getCurrentPosition());
 			handler.sendEmptyMessageDelayed(0, 100);
 		};
 	};
@@ -140,20 +197,19 @@ public class MainMusicActivity extends AppCompatActivity {
 		public void onClick(View v) {
 			if(v == mPlayBtn){
 				if("play".equals(mPlayBtn.getText())){
-					mPlayer.start();
+					musicService.playOrPause();
 					mLrcView.setLrcRows(getLrcRows());
 					handler.sendEmptyMessage(0);
 					mPlayBtn.setText("暂停");
 					mPlayBtn.setSelected(true);
 				}else{
-
-					if(mPlayer.isPlaying()){
-						mPlayer.pause();
+					if(musicService.mediaPlayer.isPlaying()){
+						musicService.playOrPause();
 						mPlayBtn.setText("播放");
 						mPlayBtn.setSelected(false);
 					}else{
 						mPlayBtn.setSelected(true);
-						mPlayer.start();
+						musicService.playOrPause();
 						mPlayBtn.setText("暂停");
 					}
 				}
@@ -166,7 +222,7 @@ public class MainMusicActivity extends AppCompatActivity {
 		@Override
 		public void onStopTrackingTouch(SeekBar seekBar) {
 			if(seekBar == mPlayerSeekBar){
-				mPlayer.seekTo(seekBar.getProgress());
+				musicService.mediaPlayer.seekTo(seekBar.getProgress());
 				handler.sendEmptyMessageDelayed(0, 100);
 			}
 		}
@@ -186,7 +242,7 @@ public class MainMusicActivity extends AppCompatActivity {
 //				Log.d("timeStr",mLrcView.getmLrcRows().get(0).getTime()+"");
 				Log.d("timeStrA",progress+"");
 				tv_timeStart.setText(formatTimeFromProgress(progress));
-				tv_timeTotal.setText(formatTimeFromProgress(mPlayer.getDuration()));
+				tv_timeTotal.setText(formatTimeFromProgress(musicService.mediaPlayer.getDuration()));
 				if(fromUser){
 					
 					showPlayerToast(formatTimeFromProgress(progress));
@@ -258,14 +314,57 @@ public class MainMusicActivity extends AppCompatActivity {
 		mLrcToastTv.setText(text);
 		mLrcToast.show();
 	}
+
 	
-	@Override
+		@Override
 	protected void onDestroy() {
 		super.onDestroy();
 		handler.removeMessages(0);
-		mPlayer.stop();
-		mPlayer.release();
-		mPlayer = null;
+		musicService.mediaPlayer.stop();
+		musicService.mediaPlayer.release();
+		musicService.mediaPlayer = null;
 		mLrcView.reset();
 	}
+
+	@Override
+	public boolean onKeyDown(int keyCode, KeyEvent event) {
+		if (keyCode == KeyEvent.KEYCODE_BACK) {
+			moveTaskToBack(true);
+			return false;
+		}
+		return super.onKeyDown(keyCode, event);
+	}
+
+
+	class PhoneBroadcastReceiver   extends BroadcastReceiver{
+
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			// 如果是拨打电话
+			if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
+				musicService.playOrPause();
+				//拨打电话会优先,收到此广播. 再收到 android.intent.action.PHONE_STATE 的 TelephonyManager.CALL_STATE_OFFHOOK 状态广播;();
+			} else {
+			
+				// 如果是来电
+				TelephonyManager tManager = (TelephonyManager) context
+						.getSystemService(Service.TELEPHONY_SERVICE);
+				//电话的状态
+				switch (tManager.getCallState()) {
+					case TelephonyManager.CALL_STATE_RINGING:
+						//等待接听状态
+						musicService.playOrPause();
+						break;
+					case TelephonyManager.CALL_STATE_OFFHOOK:
+						//接听状态
+						
+						break;
+					case TelephonyManager.CALL_STATE_IDLE:
+						//挂断状态
+					    musicService.playOrPause();
+						break;
+				}
+			}
+		}
+	}
 }

+ 3 - 1
app_modular/apputils/src/main/java/com/modular/apputils/adapter/ApprovalListAdapter.java

@@ -73,6 +73,7 @@ public class ApprovalListAdapter extends RecyclerView.Adapter<ApprovalListAdapte
         viewHolder.statusTv.setText(DateFormatUtil.long2Str(model.getDealTime(), "MM-dd HH:mm") + "");
         viewHolder.subTitle.setTextColor(ct.getResources().getColor(model.getSubTitleColor()));
         viewHolder.subTitle.setText(model.getSubTitle());
+        viewHolder.orderNumTv.setText(model.getCodeValue());
         viewHolder.itemView.setTag(model);
         viewHolder.itemView.setOnClickListener(mOnClickListener);
         if (viewHolder.headImage.getVisibility() == View.VISIBLE) {
@@ -142,7 +143,7 @@ public class ApprovalListAdapter extends RecyclerView.Adapter<ApprovalListAdapte
 
     protected class ViewHolder extends RecyclerView.ViewHolder {
         CircleImageView headImage;
-        TextView statusTv, titleTv, subTitle;
+        TextView statusTv, titleTv, subTitle,orderNumTv;
 
         public ViewHolder(View itemView) {
             super(itemView);
@@ -150,6 +151,7 @@ public class ApprovalListAdapter extends RecyclerView.Adapter<ApprovalListAdapte
             statusTv = itemView.findViewById(R.id.statusTv);
             titleTv = itemView.findViewById(R.id.titleTv);
             subTitle = itemView.findViewById(R.id.subTitle);
+            orderNumTv = itemView.findViewById(R.id.orderNumTv);
             if (tabItem == 3) {
                 headImage.setVisibility(View.GONE);
             } else {

+ 9 - 0
app_modular/apputils/src/main/java/com/modular/apputils/model/ApprovalList.java

@@ -18,6 +18,15 @@ public class ApprovalList {
     private String operatedDescription;//变更处理人
     private int subTitleColor;
     private String subTitle;
+    private String  codeValue;
+
+    public String getCodeValue() {
+        return codeValue;
+    }
+
+    public void setCodeValue(String codeValue) {
+        this.codeValue = codeValue;
+    }
 
     public int getSubTitleColor() {
         return subTitleColor;

+ 182 - 57
app_modular/apputils/src/main/java/com/modular/apputils/utils/SignUtils.java

@@ -2,21 +2,27 @@ package com.modular.apputils.utils;
 
 import android.content.Context;
 import android.os.Bundle;
+import android.support.annotation.StringRes;
+import android.text.TextUtils;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.common.LogUtil;
 import com.common.data.DateFormatUtil;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
+import com.common.system.SystemUtil;
 import com.core.api.wxapi.ApiConfig;
 import com.core.api.wxapi.ApiUtils;
 import com.core.app.MyApplication;
 import com.core.dao.UserDao;
+import com.core.dao.WorkLocationDao;
 import com.core.dao.work.WorkModelDao;
 import com.core.model.User;
+import com.core.model.WorkLocationModel;
 import com.core.model.WorkModel;
 import com.core.net.http.http.OAHttpHelper;
 import com.core.net.http.http.OnHttpResultListener;
@@ -24,65 +30,150 @@ import com.core.net.http.http.Request;
 import com.core.net.location.BdLocationHelper;
 import com.core.utils.BaiduMapUtil;
 import com.core.utils.CommonInterface;
+import com.core.utils.CommonUtil;
 import com.modular.apputils.R;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static com.core.net.http.ViewUtil.ct;
 import static com.core.utils.CommonUtil.getSharedPreferences;
 
 
 /**
  * 只负责判断|签到
+ * 1.判断距离
+ * 2.判断mac
  * Created by Bitlike on 2018/5/3.
  */
 
 public class SignUtils implements OnHttpResultListener {
-    private final int LOAD_WORKLOG = 12;
-    private final int SIGNING = 11;
+    private final long INTERVAL = 10 * 1000;//间隔时间
+
+
+    private final int LOAD_MAC = 14;//获取网络mac地址
+    private final int MAC_VAL = 13;//判断mac地址
+    private final int LOAD_WORKLOG = 12;//获取打卡列表
+    private final int SIGNING = 11;//打卡
+
+
+    private boolean isMacInNet;
     private SignListener mSignListener;
 
-    private long lastTime = 0;
+    private long lastTime = 0;//最后一次打卡时间
 
     public SignUtils(SignListener mSignListener) {
         this.mSignListener = mSignListener;
+        getMac();
+        loadMacInNet();
     }
 
     public interface SignListener {
         void sign(boolean signOk, String message);
     }
 
-
-    public void sign(final boolean isB2b, WorkModel model) {
-        if (System.currentTimeMillis() - lastTime < 10000) {
-            if (this.mSignListener !=null){
-                this.mSignListener.sign(false,"");
-            }
+    public void signFristMac(final boolean isB2b, WorkModel model) {
+        isMacInNet = true;
+        if (System.currentTimeMillis() - lastTime < INTERVAL) {
+            callBack(false, R.string.not_signin_agin);
             return;
         }
-        lastTime = System.currentTimeMillis();
-        MyApplication.getInstance().getBdLocationHelper().requestLocation();
-        final float dis = isSubmitAble();
-        if (dis > 0) {
-            final Bundle bundle = new Bundle();
-            bundle.putParcelable("data", model);
-            if (isB2b) {
-                signinWork(isB2b, bundle, "", dis);
+        if (!MyApplication.getInstance().isNetworkActive()) {
+            callBack(false, StringUtil.getMessage(R.string.networks_out));
+        } else {
+            //判断位置
+            MyApplication.getInstance().getBdLocationHelper().requestLocation();
+            List<WorkLocationModel> beanList = WorkLocationDao.getInstance().queryByEnCode();
+            if (ListUtils.isEmpty(beanList)) {
+                callBack(false, R.string.not_addr_message);
+                //没有打卡地址,TODO 获取班次接口
             } else {
-                CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
-                    @Override
-                    public void result(boolean isOk, int result, String message) {
-                        signinWork(isB2b, bundle, message, dis);
+                BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
+                float minDis = -1;
+                for (WorkLocationModel bean : beanList) {
+                    String chche = BaiduMapUtil.getInstence().getDistance(bean.getLongitude(),
+                            bean.getLatitude(), helper.getLatitude(), helper.getLongitude());
+                    Float dis = Float.valueOf(chche);
+                    if (dis < bean.getValidrange() && (minDis < 0 || dis < minDis)) {
+                        minDis = dis;
                     }
-                });
+                }//判断打卡距离结束
+                if (minDis != -1) {
+                    lastTime = System.currentTimeMillis();
+                    //时间和距离上符合打卡
+                    validatorMac(isB2b, minDis, model);
+                } else {
+                    callBack(false, R.string.too_long);
+                }
             }
+        }
+    }
+
+    public void sign(final boolean isB2b, WorkModel model) {
+        LogUtil.i("isMacInNet=" + isMacInNet);
+        if (isMacInNet) {
+            signFristMac(isB2b, model);
         } else {
-            if (this.mSignListener != null) {
-                this.mSignListener.sign(false, StringUtil.getMessage(R.string.too_long));
+            callBack(false, R.string.show_frist_mac);
+        }
+    }
+
+    /*判断mac地址是否符合*/
+    private void validatorMac(boolean isB2b, float minDis, WorkModel model) {
+        Map<String, Object> param = new HashMap<>();
+        param.put("macAddress", macAddress);
+        param.put("emcode", getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        Bundle bundle = new Bundle();
+        bundle.putBoolean(KEY.IS_B2B, isB2b);
+        bundle.putFloat(KEY.DISTANCE, minDis);
+        bundle.putParcelable(KEY.WORK, model);
+        String url = "mobile/addMobileMac.action";
+        Request request = new Request.Bulider()
+                .setBundle(bundle)
+                .setMode(Request.Mode.POST)
+                .setParam(param)
+                .setUrl(url)
+                .setWhat(MAC_VAL)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+    }
+
+    private String macAddress = null;
+
+    public String getMac() {
+        if (TextUtils.isEmpty(macAddress)) {
+            macAddress = SystemUtil.getMac(MyApplication.getInstance());
+            if (StringUtil.isEmpty(macAddress)) {
+                //当没有获取到MACAddress的时候,判断wifi状态,如果wifi为未启动
+                //mac地址不合法时候   提示开启wifi
+                WifiReceiverUtil wifiReceiver = new WifiReceiverUtil();
+                wifiReceiver.regReceiver(ct, new WifiReceiverUtil.OnWifiStatusChangeLinstener() {
+                    @Override
+                    public void callBack(boolean isOpen) {
+                        if (isOpen) {
+                            macAddress = SystemUtil.getMac(ct);
+                        }
+                    }
+                });
             }
         }
+        return macAddress;
+    }
 
+    private void toSignWork(final Bundle bundle) {
+        final boolean isB2b = bundle.getBoolean(KEY.IS_B2B, false);
+        final float minDis = bundle.getFloat(KEY.DISTANCE, 1);
+        if (isB2b) {
+            signinWork(isB2b, bundle, "", minDis);
+        } else {
+            CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
+                @Override
+                public void result(boolean isOk, int result, String message) {
+                    signinWork(isB2b, bundle, message, minDis);
+                }
+            });
+        }
     }
 
     //签到
@@ -98,19 +189,15 @@ public class SignUtils implements OnHttpResultListener {
             if (!StringUtil.isEmpty(userId)) {
                 User user = UserDao.getInstance().getUserByUserId(userId);
                 phone = user.getTelephone();
-            } else
+            } else {
                 phone = getSharedPreferences(MyApplication.getInstance(), "user_phone");
+            }
         }
         form.put("cl_phone", phone);
         form.put("cl_emcode", getSharedPreferences(ct, "erp_username"));
-        String emname = getSharedPreferences(ct, "erp_emname");
-        if (StringUtil.isEmpty(emname)) {
-            emname = MyApplication.getInstance().mLoginUser.getNickName().trim();
-        }
-        form.put("cl_emname", emname);
+        form.put("cl_emname", CommonUtil.getName());
         form.put("cl_distance", dis);
-
-        boolean isp = isPlay(form);
+        boolean isp = isHasLocation(form);
         if (!isp) {
             return;//不符合打卡
         }
@@ -125,9 +212,6 @@ public class SignUtils implements OnHttpResultListener {
         param.put("emcode", getSharedPreferences(ct, "erp_username"));
         String url = isB2b ? ApiConfig.getInstance(ApiUtils.getApiModel()).getmApiBase().punch_worksignin_url :
                 "mobile/saveCardLog.action";
-        if (bunder != null) {
-            bunder.putBoolean("isB2b", isB2b);
-        }
         Request request = new Request.Bulider()
                 .setBundle(bunder)
                 .setMode(Request.Mode.POST)
@@ -140,7 +224,7 @@ public class SignUtils implements OnHttpResultListener {
     }
 
     /*判断是否符合打卡*/
-    private boolean isPlay(Map<String, Object> form) {
+    private boolean isHasLocation(Map<String, Object> form) {
         try {
             //判断是否符合打卡
             BdLocationHelper helper = MyApplication.getInstance().getBdLocationHelper();
@@ -159,24 +243,12 @@ public class SignUtils implements OnHttpResultListener {
         }
     }
 
-    private float isSubmitAble() {
-        //先判断网络
-        if (!MyApplication.getInstance().isNetworkActive()) {
-            if (this.mSignListener != null) {
-                this.mSignListener.sign(false, StringUtil.getMessage(R.string.networks_out));
-            }
-            return -1;
-        }
-        //判断位置
-        float dis = BaiduMapUtil.getInstence().getDistance();
-        return dis;
-    }
 
     //获取打卡记录
     private void loadLog(Bundle bunder) {
         boolean isB2b = false;
         if (bunder != null) {
-            isB2b = bunder.getBoolean("isB2b");
+            isB2b = bunder.getBoolean(KEY.IS_B2B);
         }
         String date = DateFormatUtil.long2Str(DateFormatUtil.YMD);
         //获取网络数据
@@ -207,6 +279,23 @@ public class SignUtils implements OnHttpResultListener {
         OAHttpHelper.getInstance().requestHttp(request, this);
     }
 
+    //判断mac地址是否已经上传
+    private void loadMacInNet() {
+        //获取网络数据
+        Map<String, Object> param = new HashMap<>();
+        param.put("macaddress", "");
+        param.put("emcode", CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username"));
+        String url = "mobile/queryMobileMac.action";
+        Request request = new Request.Bulider()
+                .setUrl(url)
+                .setWhat(LOAD_MAC)
+                .setMode(Request.Mode.GET)
+                .setParam(param)
+                .bulid();
+        OAHttpHelper.getInstance().requestHttp(request, this);
+
+    }
+
     @Override
     public void result(int what, boolean isJSON, String message, Bundle bundle) {
         try {
@@ -219,6 +308,27 @@ public class SignUtils implements OnHttpResultListener {
                         saveSignin2DB(bundle, JSON.parseObject(message).getJSONArray("listdata"));
                     }
                     break;
+
+                case MAC_VAL:
+                    if (isJSON && JSONUtil.getBoolean(message, "success")) {
+                        toSignWork(bundle);
+                    } else {
+                        CommonUtil.saveAutoLogtoLocal(StringUtil.getMessage(R.string.auto_sign_failed), message);
+                    }
+                    break;
+                case LOAD_MAC://判断是否是第一次请求数据
+                    if (isJSON) {
+                        JSONObject object = JSON.parseObject(message);
+                        if (object.containsKey("success") && object.getBoolean("success")) {
+                            //返回成功
+                            JSONArray array = object.getJSONArray("macaddress");
+                            if ("0".equals(array.getJSONObject(0).getString("MACADDRESS"))) {
+                                //获取到新的mac地址
+                                isMacInNet = false;
+                            } else isMacInNet = true;
+                        }
+                    } else isMacInNet = false;
+                    break;
             }
         } catch (Exception e) {
             if (this.mSignListener != null && e != null) {
@@ -229,16 +339,15 @@ public class SignUtils implements OnHttpResultListener {
 
     @Override
     public void error(int what, String message, Bundle bundle) {
-        if (this.mSignListener != null && message != null) {
-            this.mSignListener.sign(false, message);
-        }
+        lastTime = 0;
+        callBack(false, message);
     }
 
     //保存到数据库
     private void saveSignin2DB(Bundle bundle, JSONArray array) throws Exception {
         WorkModel model = null;
-        if (bundle != null && bundle.getParcelable("data") != null) {
-            model = bundle.getParcelable("data");
+        if (bundle != null && bundle.getParcelable(KEY.WORK) != null) {
+            model = bundle.getParcelable(KEY.WORK);
         }
         if (model == null) {
             List<WorkModel> models = WorkModelDao.getInstance().query(false);
@@ -266,10 +375,26 @@ public class SignUtils implements OnHttpResultListener {
             model.setOffSignin(time);
             WorkModelDao.getInstance().update(model);
         }
+        callBack(true, "打卡成功");
+    }
+
+    private void callBack(boolean signOk, @StringRes int messageId) {
+        if (MyApplication.getInstance() != null) {
+            callBack(signOk, StringUtil.getMessage(messageId));
+        }
+
+    }
 
-        VoiceUtils.signVoice(R.raw.voice_sign);
-        if (this.mSignListener != null) {
-            this.mSignListener.sign(true, "打卡成功");
+    private void callBack(boolean signOk, String message) {
+        if (mSignListener != null) {
+            mSignListener.sign(signOk, message);
         }
     }
+
+
+    private interface KEY {
+        String IS_B2B = "isB2b";
+        String WORK = "work";
+        String DISTANCE = "distance";
+    }
 }

+ 1 - 1
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/WifiReceiverUtil.java → app_modular/apputils/src/main/java/com/modular/apputils/utils/WifiReceiverUtil.java

@@ -1,4 +1,4 @@
-package com.uas.appworks.OA.erp.utils;
+package com.modular.apputils.utils;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;

+ 29 - 0
app_modular/apputils/src/main/java/com/modular/apputils/widget/WrapContentLinearLayoutManager.java

@@ -0,0 +1,29 @@
+package com.modular.apputils.widget;
+
+import android.content.Context;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+
+public class WrapContentLinearLayoutManager extends LinearLayoutManager {
+    public WrapContentLinearLayoutManager(Context context) {
+        super(context);
+    }
+
+    public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
+        super(context, orientation, reverseLayout);
+    }
+
+    public WrapContentLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
+        try {
+            super.onLayoutChildren(recycler, state);
+        } catch (IndexOutOfBoundsException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 12 - 1
app_modular/apputils/src/main/res/layout/item_approval_list.xml

@@ -52,10 +52,21 @@
                 android:textSize="15sp" />
 
             <TextView
-                android:id="@+id/subTitle"
+                android:id="@+id/orderNumTv"
+                android:layout_below="@id/titleTv"
                 android:layout_width="wrap_content"
+                android:textSize="12sp"
+                android:layout_alignParentRight="true"
+                android:textColor="@color/done_approval"
+                android:layout_height="wrap_content" />
+            <TextView
+                android:id="@+id/subTitle"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_below="@id/titleTv"
+                android:layout_toLeftOf="@id/orderNumTv"
+                android:lines="1"
+                android:ellipsize="end"
                 android:layout_marginTop="4dp"
                 android:layout_toRightOf="@id/headImage"
                 android:textColor="@color/done_approval"

+ 4 - 0
app_modular/appworks/src/main/java/com/uas/appworks/CRM/erp/activity/DeviceMatchActivity.java

@@ -176,6 +176,7 @@ public class DeviceMatchActivity extends BaseNetActivity implements View.OnClick
                 matche.setName(JSONUtil.getText(object, "DE_NAME"));
                 matche.setExistqty(JSONUtil.getText(object, "EXISTQTY"));
                 matche.setLackqty(JSONUtil.getText(object, "LACKQTY"));
+                matche.setNeedqty(JSONUtil.getText(object, "NEEDQTY"));
                 matches.add(matche);
             }
         }
@@ -219,6 +220,7 @@ public class DeviceMatchActivity extends BaseNetActivity implements View.OnClick
             holder.nameTv.setText(match.getName());
             holder.existqtyTv.setText(match.getExistqty());
             holder.lackqtyTv.setText(match.getLackqty());
+            holder.needqtyTv.setText(match.getNeedqty());
         }
 
         @Override
@@ -232,6 +234,7 @@ public class DeviceMatchActivity extends BaseNetActivity implements View.OnClick
             private TextView nameTv;
             private TextView existqtyTv;
             private TextView lackqtyTv;
+            private TextView needqtyTv;
 
             public ViewHolder(View itemView) {
                 super(itemView);
@@ -239,6 +242,7 @@ public class DeviceMatchActivity extends BaseNetActivity implements View.OnClick
                 nameTv = itemView.findViewById(R.id.nameTv);
                 existqtyTv = itemView.findViewById(R.id.existqtyTv);
                 lackqtyTv = itemView.findViewById(R.id.lackqtyTv);
+                needqtyTv = itemView.findViewById(R.id.needqtyTv);
             }
         }
     }

+ 38 - 42
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/WorkActivity.java

@@ -35,10 +35,11 @@ import com.core.base.OABaseActivity;
 import com.core.model.WorkModel;
 import com.core.utils.time.wheel.OASigninPicker;
 import com.lidroid.xutils.ViewUtils;
+import com.modular.apputils.utils.PopupWindowHelper;
+import com.modular.apputils.utils.WifiReceiverUtil;
 import com.uas.appworks.OA.erp.activity.form.WorkLogsActivity;
 import com.uas.appworks.OA.erp.adapter.WorkAdapter;
 import com.uas.appworks.OA.erp.presenter.WorkPresenter;
-import com.uas.appworks.OA.erp.utils.WifiReceiverUtil;
 import com.uas.appworks.OA.erp.view.IWorkView;
 import com.uas.appworks.R;
 
@@ -137,21 +138,18 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
 		line = findViewById(R.id.line);
 		empty_rl = (RelativeLayout) findViewById(R.id.empty_rl);
 		date_tv = (TextView) findViewById(R.id.date_tv);
-
 		selectTime = System.currentTimeMillis();
 		getMac();
 		presenter = new WorkPresenter(this, macAddress);
 		adapter = new WorkAdapter(ct);
 		listview.setLayoutManager(new LinearLayoutManager(ct));
 		listview.setAdapter(adapter);
-		presenter.start(true);
 		date_tv.setText(DateFormatUtil.long2Str(System.currentTimeMillis(), "yyyy年MM月dd日") + " " +
 				CalendarUtil.getWeek(System.currentTimeMillis()));
 		findViewById(R.id.signin_btn).setOnClickListener(this);
 		findViewById(R.id.unoffice_).setOnClickListener(this);
 		date_tv.setOnClickListener(this);
-
-
+		presenter.start(true);
 	}
 
 	@Override
@@ -197,44 +195,48 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
 
 	@Override
 	public void showFristMac() {
-		MaterialDialog dialog = new MaterialDialog.Builder(ct).title(R.string.common_dialog_title).content(R.string.show_frist_mac)
-				.positiveText(R.string.common_sure).negativeText(R.string.common_cancel).autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
-					@Override
-					public void onPositive(MaterialDialog dialog) {
-						presenter.submitByFrist((ArrayList<WorkModel>) adapter.getModels(), macAddress);
-						dialog.dismiss();
-					}
-
-					@Override
-					public void onNegative(MaterialDialog dialog) {
-						super.onNegative(dialog);
-						dialog.dismiss();
-					}
-				}).build();
-		dialog.show();
+        showDialog(1,getString(R.string.show_frist_mac));
 	}
 
 	@Override
 	public void showErrorMac() {
-		MaterialDialog dialog = new MaterialDialog.Builder(ct).title(R.string.common_dialog_title).content(getString(R.string.other_phone_error))
-				.positiveText(R.string.common_sure).negativeText(R.string.common_cancel).autoDismiss(false).callback(new MaterialDialog.ButtonCallback() {
-					@Override
-					public void onPositive(MaterialDialog dialog) {
-						dialog.dismiss();
-						Intent intent = new Intent(ct, ChangeMobileActivity.class);
-						intent.putExtra("macAddress", macAddress);
-						startActivityForResult(intent, PHONE_CHANGE);
-					}
+        showDialog(2,getString(R.string.other_phone_error));
+	}
 
-					@Override
-					public void onNegative(MaterialDialog dialog) {
-						super.onNegative(dialog);
-						dialog.dismiss();
-					}
-				}).build();
-		dialog.show();
+	@Override
+	public void setErrorMac(String message) {
+		macError = message;
 	}
 
+    /**
+     * 显示提示框
+     *
+     * @param type    1.第一次绑定mac  2.mac错误,进入修改
+     * @param message
+     */
+    private void showDialog(final int type, final String message) {
+        PopupWindowHelper.showAlart(this, getString(R.string.app_name), message, new PopupWindowHelper.OnSelectListener() {
+            @Override
+            public void select(boolean selectOk) {
+
+                if (selectOk) {
+                    switch (type) {
+                        case 1:
+                            presenter.submitByFrist((ArrayList<WorkModel>) adapter.getModels(), macAddress);
+                            break;
+                        case 2:
+                            Intent intent = new Intent(ct, ChangeMobileActivity.class);
+                            intent.putExtra("macAddress", macAddress);
+                            startActivityForResult(intent, PHONE_CHANGE);
+                            break;
+                    }
+
+                }
+            }
+        });
+    }
+
+
 	private MaterialDialog notLocationDialog = null;
 
 	@Override
@@ -258,10 +260,6 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
 	public void setPois(List<PoiInfo> pois, LatLng latLng) {
 	}
 
-	@Override
-	public void setErrorMac(String message) {
-		macError = message;
-	}
 
 
 	@Override
@@ -274,10 +272,8 @@ public class WorkActivity extends OABaseActivity implements View.OnClickListener
 				presenter.submit((ArrayList<WorkModel>) adapter.getModels(), macAddress);
 			}
 		} else if (view.getId() == R.id.date_tv) {
-			//TODO UI修改
 //			isShowTocstAble = true;
 //			showDateDialog();
-
 		} else if (view.getId() == R.id.unoffice_) {
 			isShowTocstAble = true;
 			presenter.gotoLocationActivity(WorkActivity.this);

+ 44 - 13
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/presenter/WorkPresenter.java

@@ -36,6 +36,7 @@ import com.core.utils.TimeUtils;
 import com.core.utils.WorkHandlerUtil;
 import com.core.widget.view.Activity.SearchLocationActivity;
 import com.core.widget.view.model.SearchPoiParam;
+import com.modular.apputils.utils.SignUtils;
 import com.uas.appworks.OA.erp.view.IWorkView;
 import com.uas.appworks.R;
 
@@ -472,12 +473,14 @@ public class WorkPresenter implements OnHttpResultListener, IWorkPresenter {
         isB2b = ApiUtils.getApiModel() instanceof ApiPlatform;
         MyApplication.getInstance().getBdLocationHelper().requestLocation();
         if (MyApplication.getInstance().isNetworkActive()) {
-//            if (!isB2b)  //TODO 去除手机mac验证
-//                getMacByNet();
+
             loadWorkData(System.currentTimeMillis(), canShowTocat);
         } else if (canShowTocat) {
             iWorkView.showToast(R.string.networks_out, R.color.load_warning);
         }
+        if (mSignUtils == null) {
+            mSignUtils = new SignUtils(mSignListener);
+        }
         local();
     }
 
@@ -505,23 +508,51 @@ public class WorkPresenter implements OnHttpResultListener, IWorkPresenter {
     @Override
     public void submit(ArrayList<WorkModel> models, String macAddress) {
         if (isSubmitAble(models)) {
-            if (isB2b) {
-                Bundle bundle = new Bundle();
-                bundle.putParcelableArrayList("models", models);
-                signinWork(bundle, "");
-            } else {
-                submitWork(models, macAddress);
-            }
-//            else {
-//                if (iWorkView != null)
-//                    iWorkView.showFristMac();
+//            if (isB2b) {
+//                Bundle bundle = new Bundle();
+//                bundle.putParcelableArrayList("models", models);
+//                signinWork(bundle, "");
+//            } else {
+//                submitWork(models, macAddress);
 //            }
+            iWorkView.showLoading();
+            mSignUtils.sign(isB2b, null);
         }
+
     }
 
+    private SignUtils mSignUtils = null;
+    private SignUtils.SignListener mSignListener = new SignUtils.SignListener() {
+        @Override
+        public void sign(boolean signOk, String message) {
+            if (signOk) {
+                iWorkView.showModel(isFree, WorkModelDao.getInstance().query(true));
+            }
+            if (message.equals(StringUtil.getMessage(R.string.show_frist_mac))) {
+                iWorkView.showFristMac();
+            } else if (message.contains("不是考勤打卡常用设备,是否需要更换")) {
+                iWorkView.showErrorMac();
+            } else if (message.contains("设备正处于申请变更绑定阶段")) {
+                if (iWorkView != null) {
+                    iWorkView.showToast(R.string.mac_changing, R.color.load_warning);
+                    iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_changing));
+                }
+            } else if (message.contains("该设备已被他人绑定")) {
+                iWorkView.showToast(R.string.mac_other, R.color.load_warning);
+                iWorkView.setErrorMac(MyApplication.getInstance().getResources().getString(R.string.mac_other));
+            } else {
+                iWorkView.showToast(message);
+            }
+            iWorkView.dimssLoading();
+        }
+    };
+
+
     public void submitByFrist(ArrayList<WorkModel> models, String macAddress) {
         if (isSubmitAble(models)) {
-            submitWork(models, macAddress);
+            iWorkView.showLoading();
+            mSignUtils.signFristMac(isB2b, null);
+//            submitWork(models, macAddress);
         }
     }
 

+ 12 - 7
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/utils/AutoErpSigninUitl.java

@@ -19,6 +19,7 @@ import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.common.data.StringUtil;
 import com.common.preferences.PreferenceUtils;
+import com.common.system.SystemUtil;
 import com.common.thread.ThreadUtil;
 import com.core.api.wxapi.ApiConfig;
 import com.core.api.wxapi.ApiPlatform;
@@ -84,6 +85,10 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
 
     private boolean signWorking = false;
 
+    public boolean isB2b() {
+        return isB2b;
+    }
+
     /**
      * 签到内勤
      *
@@ -105,13 +110,13 @@ public class AutoErpSigninUitl implements OnHttpResultListener {
         if (isB2b) {
             signinWork(bundle, "");
         } else {
-//			validatorMac(model, macAddress);  // 关闭mac地址验证
-            CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
-                @Override
-                public void result(boolean isOk, int result, String message) {
-                    signinWork(bundle, message);
-                }
-            });
+			validatorMac(model, SystemUtil.getMac(MyApplication.getInstance()));  // 关闭mac地址验证
+//            CommonInterface.getInstance().getCodeByNet("CardLog", new CommonInterface.OnResultListener() {
+//                @Override
+//                public void result(boolean isOk, int result, String message) {
+//                    signinWork(bundle, message);
+//                }
+//            });
         }
     }
 

+ 11 - 2
app_modular/appworks/src/main/java/com/uas/appworks/model/DeviceMatch.java

@@ -5,8 +5,17 @@ package com.uas.appworks.model;
  */
 
 public class DeviceMatch {
-    //机型、机型设备列表名称、现有匹配设备数量、欠缺设备数量
-    private String code, name, existqty, lackqty,spec;
+    //机型、机型设备列表名称、现有匹配设备数量、欠缺设备数量,需求数量
+    private String code, name, existqty, lackqty,spec,needqty;
+
+
+    public String getNeedqty() {
+        return needqty;
+    }
+
+    public void setNeedqty(String needqty) {
+        this.needqty = needqty;
+    }
 
     public String getSpec() {
         return spec==null?"":spec;

BIN
app_modular/appworks/src/main/res/drawable-hdpi/ic_work_business_manage.png


BIN
app_modular/appworks/src/main/res/drawable-xhdpi/ic_work_business_manage.png


BIN
app_modular/appworks/src/main/res/drawable-xxhdpi/ic_work_business_manage.png


+ 2 - 2
app_modular/appworks/src/main/res/layout/activity_data_inquiry_search.xml

@@ -31,8 +31,8 @@
 
         <ImageView
             android:id="@+id/data_inquiry_search_voice_iv"
-            android:layout_width="20dp"
-            android:layout_height="20dp"
+            android:layout_width="10dp"
+            android:layout_height="16dp"
             android:layout_alignParentRight="true"
             android:layout_alignRight="@+id/search_edit"
             android:layout_centerVertical="true"

+ 23 - 0
app_modular/appworks/src/main/res/layout/item_device_match.xml

@@ -53,6 +53,7 @@
 
 
     <LinearLayout
+        android:id="@+id/existqtyLL"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@id/specTag"
@@ -109,5 +110,27 @@
             android:paddingLeft="10dp"
             android:textSize="14sp" />
     </LinearLayout>
+    <TextView
+        android:id="@+id/needqtyTag"
+        android:layout_width="wrap_content"
+        android:layout_height="36dp"
+        android:layout_below="@id/existqtyLL"
+        android:layout_gravity="left"
+        android:layout_marginRight="10dp"
+        android:ellipsize="end"
+        android:gravity="center_vertical"
+        android:maxLines="2"
+        android:paddingLeft="@dimen/paddingMin"
+        android:text="需求数量"
+        android:textSize="14sp" />
 
+    <TextView
+        android:id="@+id/needqtyTv"
+        android:layout_width="match_parent"
+        android:layout_height="36dp"
+        android:layout_toRightOf="@id/needqtyTag"
+        android:layout_alignTop="@id/needqtyTag"
+        android:gravity="center_vertical"
+        android:paddingLeft="10dp"
+        android:textSize="14sp" />
 </RelativeLayout>