Browse Source

完成基本新审批进行测试
2.添加附件解析处理备份

Bitliker 8 years ago
parent
commit
2e5e294fb4

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

@@ -37,12 +37,22 @@ public class OABaseActivity extends BaseActivity implements HttpImp {
         ToastUtil.showToast(ct, message);
     }
 
+    @Override
+    public void showToast(String message) {
+        ToastUtil.showToast(ct, message);
+    }
+
     @Override
     public void showToast(int reId, int colorId) {
         ToastUtil.showToast(ct, reId);
 
     }
 
+    @Override
+    public void showToast(int reId) {
+        ToastUtil.showToast(ct, reId);
+    }
+
     @Override
     public void setTitle(String title) {
         getSupportActionBar().setTitle(title);

+ 63 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalBaseRVAdapter.java

@@ -2,16 +2,23 @@ package com.xzjmyk.pm.activity.ui.erp.adapter.oa;
 
 import android.app.Activity;
 import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.EditText;
 import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.erp.entity.EditChangeListener;
 import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
+import com.xzjmyk.pm.activity.util.DisplayUtil;
 import com.xzjmyk.pm.activity.view.wheel.DateTimePicker;
 
 import java.util.Calendar;
@@ -126,8 +133,28 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
                 holder.value2Et.setText(itemData.valuesTag);
                 break;
         }
-
-
+        if (itemData.inputType != 0) {
+            holder.value1Et.setBackgroundResource(0);
+            holder.value2Et.setBackgroundResource(0);
+            holder.value1Et.setGravity(Gravity.CENTER | Gravity.RIGHT);
+            holder.value2Et.setGravity(Gravity.CENTER | Gravity.RIGHT);
+        } else {
+            holder.value1Et.setBackgroundResource(R.drawable.shape_from_edit_hint);
+            holder.value2Et.setBackgroundResource(R.drawable.shape_from_edit_hint);
+            holder.value1Et.setGravity(Gravity.CENTER | Gravity.LEFT);
+            holder.value2Et.setGravity(Gravity.CENTER | Gravity.LEFT);
+        }
+        if (itemData.mustInput) {
+            holder.value1Et.setHint(getString(R.string.common_input));
+            holder.value2Et.setHint(getString(R.string.common_input));
+        } else {
+            holder.value1Et.setHint(getString(R.string.common_input1));
+            holder.value2Et.setHint(getString(R.string.common_input1));
+        }
+        holder.value1Et.setTag(position);
+        holder.value2Et.setTag(position);
+        holder.value1Et.addTextChangedListener(new TextChangListener(holder, position));
+        holder.value2Et.addTextChangedListener(new TextChangListener(holder, position));
     }
 
     private void bindDateView(final DateViewHodler holder, Approval.ItemData itemData, final int position) {
@@ -220,12 +247,10 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
                 case P_P:
                     setViewShowAble(false, value1Tv, value2Tv);
                     setViewShowAble(true, key1Tv, key2Tv, value1Et, value2Et, values2Fl, values1Fl);
-
                     break;
                 case V_V:
                     setViewShowAble(false, value1Et, value2Et);
                     setViewShowAble(true, key1Tv, key2Tv, value1Tv, value2Tv, values2Fl, values1Fl);
-
                     break;
                 case P_V:
                     setViewShowAble(false, value1Tv, value2Et);
@@ -251,4 +276,38 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
     }
 
 
+    private class TextChangListener extends EditChangeListener {
+        BaseViewHodler hodler;
+        private int position;
+
+        public TextChangListener(BaseViewHodler hodler, int position) {
+            this.hodler = hodler;
+            this.position = position;
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+            LogUtil.i("afterTextChanged=" + s);
+            if (this.position >= 0) {
+                if (this.hodler.value1Et != null && this.hodler.value1Et.getVisibility() == View.VISIBLE) {
+                    String value1Et = this.hodler.value1Et.getText().toString();
+                    itemDatas.get(this.position).values = value1Et == null ? "" : value1Et;
+                    LogUtil.i("V1=" + this.hodler.value1Et.getText().toString());
+                }
+                if (this.hodler.value2Et != null && this.hodler.value2Et.getVisibility() == View.VISIBLE) {
+                    String value2Et = this.hodler.value2Et.getText().toString();
+                    itemDatas.get(this.position).valuesTag = value2Et == null ? "" : value2Et;
+                    LogUtil.i("V2=" + this.hodler.value2Et.getText().toString());
+                }
+
+
+            }
+
+        }
+    }
+
+    private String getString(int reId) {
+        if (reId <= 0) return "";
+        return MyApplication.getInstance().getString(reId);
+    }
 }

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

@@ -53,6 +53,7 @@ public class Approval {
         public String title = "";
         public String nodeName = "";
         public String needInputKeys = "";
+        public String showNeedMessage = "";//保存必填字段时候,,没有填写时候提示信息
         public String processInstanceId = "";
         public String caller = "";
     }
@@ -82,6 +83,7 @@ public class Approval {
             map.put("mustInput", mustInput);
             map.put("id", id);
             map.put("status", status);
+            map.put("inputType", inputType);
             map.put("type", type);
             map.put("keyTag", keyTag);
             map.put("valuesTag", valuesTag);

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

@@ -103,6 +103,9 @@ public class ApprovalPresenter implements OnHttpResultListener {
         if (!nodeLog.testValidity()) {
             return;
         }
+        StringBuilder customDes = new StringBuilder();
+        if (!customDes(customDes)) return;
+        LogUtil.i("customDes=" + customDes.toString());
         if (!canSubmit()) return;
         iApproval.showLoading();
         String url = "common/review.action";
@@ -115,7 +118,7 @@ public class ApprovalPresenter implements OnHttpResultListener {
         param.put("_center", "0");//是否集团账套
         param.put("_noc", 1);//权限管控
         param.put("holdtime", 4311);//holdtime
-        param.put("customDes", "");//审批要点customDes=1.11111(2)
+        param.put("customDes", customDes.toString());//审批要点customDes=1.11111(2)
         Request.Bulider bulider = new Request.Bulider()
                 .setUrl(url)
                 .setMode(Request.Mode.POST)
@@ -393,6 +396,9 @@ public class ApprovalPresenter implements OnHttpResultListener {
             JSONObject button = OACheckUtil.getJSONObject(object, "button");
             if (currentnode != null) {
                 record.needInputKeys = getJson2Text(button, "jt_neccessaryfield");
+                //TODO 测试数据
+                record.needInputKeys = testNeerInput();
+                record.showNeedMessage = "必填字段未填写";
             }
             iApproval.showTitile(record);
             loadDetailedList();
@@ -475,12 +481,15 @@ public class ApprovalPresenter implements OnHttpResultListener {
                 continue;
             }
             String value = OACheckUtil.getJson2Text(data, valueKey);//获取第一个字段的值
-            if (StringUtils.isEmpty(value)) continue;
+            if (StringUtils.isEmpty(value)) value = "";//TODO 当value为空时候,可能是需要输入的字段,不能返回
             boolean mergeAble = OACheckUtil.getJsonIntager(config, "FD_APPWIDTH", "FD_APPWIDTH") == 1;
             Approval.ItemData itemData = new Approval.ItemData();
             itemData.key = key;
             itemData.values = value;
-            if (!StringUtils.isEmpty(record.needInputKeys) && record.needInputKeys.contains(key)) {
+            LogUtil.i("这里验证是必填字段的问题");
+            LogUtil.i("record.needInputKeys=" + record.needInputKeys);
+            LogUtil.i("valueKey=" + valueKey);
+            if (!StringUtils.isEmpty(record.needInputKeys) && record.needInputKeys.contains(valueKey)) {
                 itemData.type = Approval.ItemType.P;
             } else {
                 itemData.type = Approval.ItemType.V;
@@ -618,15 +627,18 @@ public class ApprovalPresenter implements OnHttpResultListener {
 
 
     private void handlerSetupTask(JSONObject object) throws Exception {
-        String data = OACheckUtil.getJson2Text(object, "data");
         JSONArray arrayCS = OACheckUtil.getJsonArray(object, "cs");
-        if (!StringUtils.isEmpty(data)) {
-            //需要把该数据填充到对应上面
-            String[] datas = data.split(";");
-        }
         if (!ListUtils.isEmpty(arrayCS)) {
+            String data = OACheckUtil.getJson2Text(object, "data");
+            String[] datas = null;
+            if (!StringUtils.isEmpty(data)) {
+                //需要把该数据填充到对应上面
+                datas = data.split(";");
+            }
             for (int i = 0; i < arrayCS.size(); i++) {
-                Approval.ItemData itemData = getItemBySetupTask(arrayCS.getString(i));
+                Approval.ItemData itemData = getItemBySetupTask(arrayCS.getString(i), datas);
+
+
                 if (itemData != null) {
                     pointsList.add(itemData);
                 }
@@ -650,7 +662,7 @@ public class ApprovalPresenter implements OnHttpResultListener {
      * ..$N为非必填字段,
      * ..$Y表示该字段为必填字段,
      */
-    private Approval.ItemData getItemBySetupTask(String cs) throws Exception {
+    private Approval.ItemData getItemBySetupTask(String cs, String[] datas) throws Exception {
         if (!StringUtils.isEmpty(cs)) {
             LogUtil.i("cs=" + cs);
             Approval.ItemData itemData = new Approval.ItemData();
@@ -678,21 +690,52 @@ public class ApprovalPresenter implements OnHttpResultListener {
                             itemData.inputType = 3;
                             itemData.type = Approval.ItemType.P;
                         }
+                    } else {
+                        itemData.type = Approval.ItemType.P;
                     }
                     if (!StringUtils.isEmpty(neer)) {
                         itemData.mustInput = "Y".equals(neer);
                     }
                 }
+                if (datas != null && datas.length > 0 && !StringUtils.isEmpty(itemData.key)) {
+                    for (String data : datas) {
+                        if (data.contains(itemData.key)) {
+                            String values = OACheckUtil.getFirstBrackets(data);
+                            if (!StringUtils.isEmpty(values))
+                                itemData.values = values;
+                        }
+                    }
+                }
+                return itemData;
             }
-            return itemData;
         }
         return null;
     }
 
-    private boolean canSubmit() {
+    private boolean customDes(StringBuilder customDes) {
+        if (!ListUtils.isEmpty(pointsList)) {
+            LogUtil.i("show Presenter pointsList .....");
+            for (Approval.ItemData itemData : pointsList) {
+                LogUtil.i(itemData.toString());
+                if (itemData.mustInput && StringUtils.isEmpty(itemData.values)) {
+                    String message = OACheckUtil.getString(R.string.approval_points) + " " + itemData.key + " " + OACheckUtil.getString(R.string.is_must_input);
+                    LogUtil.i("message=" + message);
+                    iApproval.showToast(message, R.color.load_submit);
+                    return false;
+                }
+                if (!StringUtils.isEmpty(itemData.key) && !StringUtils.isEmpty(itemData.values))
+                    customDes.append(itemData.key + "\\(" + itemData.values + "\\);");
+            }
+            OACheckUtil.removieLast(customDes);
+        }
         return true;
     }
 
+    private boolean canSubmit() {
+        //TODO 判断要点
+        return false;
+    }
+
 
     //TODO 测试数据
     private void testTaskSetupTask() throws Exception {
@@ -711,6 +754,10 @@ public class ApprovalPresenter implements OnHttpResultListener {
         handlerSetupTask(JSONArray.parseObject(json));
     }
 
+    private String testNeerInput() throws Exception {
+        return "fp_v3;fpd_total";
+    }
+
     private void addTastEnclosure() {
 
         Approval.Enclosure enclosure = new Approval.Enclosure();
@@ -731,4 +778,6 @@ public class ApprovalPresenter implements OnHttpResultListener {
         enclosure.name = "测试excel数据.xlsx";
         enclosureList.add(enclosure);
     }
+
+
 }

+ 5 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/HttpImp.java

@@ -12,11 +12,16 @@ public interface HttpImp {
 
     void showToast(String message, int colorId);//显示提交的返回提示
 
+    void showToast(String message);//显示提交的返回提示
+
     void showToast(int reId, int colorId);//显示提交的返回提示
 
+    void showToast(int reId);//显示提交的返回提示
+
     void setTitle(String title);//设置标题栏
 
     void setTitleStyles(int styles);//设置主题
+
     void finish();
 
 }

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

@@ -7,8 +7,12 @@ import android.widget.TextView;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /**
  * Created by Bitliker on 2017/1/22.
  */
@@ -253,6 +257,11 @@ public class OACheckUtil {
         return message;
     }
 
+    public static String getString(int reId) {
+        if (reId <= 0) return "";
+        return MyApplication.getInstance().getString(reId);
+    }
+
     public static String getText(TextView tv) {
         if (tv == null || TextUtils.isEmpty(tv.getText())) return "";
         return string2Json(tv.getText().toString());
@@ -327,4 +336,17 @@ public class OACheckUtil {
             defInt = StringUtils.getIntByString(text, 0);
         return defInt;
     }
+
+    /*获取第一个括号里的值*/
+    public static String getFirstBrackets(String str) {
+        if (str == null) return "";
+        Pattern pattern = Pattern.compile("(?<=\\()(.+?)(?=\\))");
+        Matcher matcher = pattern.matcher(str);
+        while (matcher.find()) {
+            String name = matcher.group();
+            if (name != null && name.length() > 0)
+                return name;
+        }
+        return "";
+    }
 }

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

@@ -227,14 +227,14 @@ public class OpenFilesUtils {
         //创建下载任务,downloadUrl就是下载链接
         DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadUrl));
         //指定下载路径和下载文件名
-        request.setDestinationInExternalPublicDir("uu/uudownload/", fileName);
+        request.setDestinationInExternalPublicDir("uu/download/", fileName);
         //获取下载管理器
         DownloadManager downloadManager = (DownloadManager) ct.getSystemService(Context.DOWNLOAD_SERVICE);
         //将下载任务加入下载队列,否则不会进行下载
         downloadManager.enqueue(request);
 
         //返回后再調用openCommonFils
-        return "uu/uudownload/" + fileName;
+        return "uu/download/" + fileName;
     }
 
     private DownloadManager downloadManager;
@@ -260,7 +260,7 @@ public class OpenFilesUtils {
         request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
         request.setVisibleInDownloadsUi(true);
         //sdcard的目录下的download文件夹,必须设置
-        request.setDestinationInExternalPublicDir("uu/uudownload/", fileName);
+        request.setDestinationInExternalPublicDir("uu/download/", fileName);
         //request.setDestinationInExternalFilesDir(),也可以自己制定下载路径
 
         //将下载请求加入下载队列
@@ -302,7 +302,7 @@ public class OpenFilesUtils {
         // 判断是否有SD卡
         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
             HttpUtils utils = new HttpUtils();
-            String target = Environment.getDataDirectory() + "/uu/uudownload/" + fileName;
+            String target = Environment.getDataDirectory() + "/uu/download/" + fileName;
             utils.download(url, target, requestCallBack);
         } else {
             Toast.makeText(MyApplication.getInstance(), "请先插入SD卡", Toast.LENGTH_SHORT).show();
@@ -312,7 +312,7 @@ public class OpenFilesUtils {
     public static void downLoadFile(final String url, String fileName, final OnFileLoadListener onFileLoadListener) {
         // 判断是否有SD卡
         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
-            final String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/uu/uudownload";
+            final String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/uu/download";
 
             //如果存在文件,不在下载
             File file = new File(path + "/" + fileName);

+ 24 - 0
WeiChat/src/main/res/drawable/shape_from_edit_hint.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item  android:state_focused="true" ><shape>
+            <solid android:color="@color/base_bg" />
+            <stroke android:width="0.6dp" android:color="@color/item_line" />
+            <corners android:radius="8dp" />
+            <padding android:bottom="0.5dp" android:left="0.5dp" android:right="0.5dp" android:top="0.5dp" />
+        </shape>
+    </item>
+    <item  android:state_pressed="true"><shape>
+            <solid android:color="@color/base_bg" />
+            <stroke android:width="0.6dp" android:color="@color/item_line" />
+            <corners android:radius="8dp" />
+            <padding android:bottom="0.5dp" android:left="0.5dp" android:right="0.5dp" android:top="0.5dp" />
+        </shape>
+    </item>
+    <item ><shape>
+            <solid android:color="@color/base_bg" />
+            <stroke android:width="0.6dp" android:color="@color/item_line" />
+            <corners android:radius="8dp" />
+            <padding android:bottom="0.5dp" android:left="0.5dp" android:right="0.5dp" android:top="0.5dp" />
+        </shape>
+    </item>
+</selector>

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

@@ -13,7 +13,7 @@
     <com.andreabaccega.widget.FormEditText
         android:id="@+id/valueTv"
         android:gravity="center"
-        android:background="@drawable/shape_from_edit"
+        android:background="@drawable/shape_from_edit_hint"
         style="@style/approvalItemStyle"
         android:layout_width="0dp"
         android:layout_weight="2"

+ 12 - 14
WeiChat/src/main/res/layout/item_rv_approval_key_values.xml

@@ -8,8 +8,7 @@
         android:layout_width="0dp"
         android:layout_marginRight="10dp"
         android:layout_weight="1"
-        android:gravity="center|left"
-        android:text="开始时间:"/>
+        android:gravity="center|left"/>
 
     <FrameLayout
         android:id="@+id/values1Fl"
@@ -26,9 +25,11 @@
             android:layout_weight="2"
             android:background="@null"
             android:ellipsize="end"
-            android:gravity="center|right"
+            android:layout_marginTop="5dp"
+            android:layout_marginBottom="5dp"
+            android:gravity="center|left"
+            android:hint="@string/common_input2"
             android:lines="1"
-            android:text="2016-11-25-21:22"
             android:visibility="gone"/>
 
         <TextView
@@ -38,20 +39,16 @@
             android:layout_height="match_parent"
             android:ellipsize="end"
             android:gravity="center|left"
-            android:lines="1"
-            android:text="2016-11-25-21:22"/>
-
+            android:lines="1"/>
     </FrameLayout>
 
-
     <TextView
         android:id="@+id/key2Tv"
         style="@style/approvalItemStyle"
         android:layout_width="0dp"
         android:layout_marginLeft="10dp"
         android:layout_marginRight="10dp"
-        android:layout_weight="1"
-        android:text="开始时间:"/>
+        android:layout_weight="1"/>
 
     <FrameLayout
         android:id="@+id/values2Fl"
@@ -65,11 +62,13 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:layout_weight="2"
+            android:layout_marginTop="5dp"
+            android:layout_marginBottom="5dp"
             android:background="@null"
             android:ellipsize="end"
-            android:gravity="center|right"
+            android:gravity="center|left"
+            android:hint="@string/common_input2"
             android:lines="1"
-            android:text="2016-11-25-21:22"
             android:visibility="gone"/>
 
         <TextView
@@ -79,8 +78,7 @@
             android:layout_height="match_parent"
             android:ellipsize="end"
             android:gravity="center|left"
-            android:lines="1"
-            android:text="2016-11-25-21:22"/>
+            android:lines="1"/>
     </FrameLayout>
 
 

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

@@ -1844,4 +1844,6 @@
     <string name="serial_number">单据序号</string>
     <string name="load_take_over_ok">接管人为自己时默认为同意该审批</string>
     <string name="load_take_over_error">接管失败</string>
+    <string name="approval_points">审批要点</string>
+
 </resources>