소스 검색

Merge branch 'master' of http://git.iamberry.com/hexiugang/iamberry-common-parent

wangxiaoming 6 년 전
부모
커밋
d30e5c11e1

+ 8 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/approval/ApprovalTaskService.java

@@ -1,5 +1,6 @@
 package com.iamberry.rst.faces.approval;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -33,4 +34,11 @@ public interface ApprovalTaskService {
      * @param reason    说明(eg:业务员撤销审核)不允许为空
      */
     void revokeTask(String pid, String reason);
+
+    /**
+     * 获取某个审批的整个审批流程
+     * @param type 1:生成订单审批;2:提货申请
+     * @return
+     */
+    List<Object> findApplyRu(int type);
 }

+ 35 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/approval/ApprovalTaskServiceImpl.java

@@ -1,5 +1,6 @@
 package com.iamberry.rst.service.approval;
 
+import com.iamberry.cache.LocalCache;
 import com.iamberry.rst.faces.approval.ApprovalTaskService;
 import org.activiti.engine.RuntimeService;
 import org.activiti.engine.TaskService;
@@ -10,7 +11,9 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -25,6 +28,8 @@ public class ApprovalTaskServiceImpl implements ApprovalTaskService {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ApprovalTaskServiceImpl.class);
 
+    private static LocalCache<String, List<Object>> CACHE = new LocalCache<>(2);
+
     @Autowired
     private RuntimeService runtimeService;
 
@@ -93,6 +98,36 @@ public class ApprovalTaskServiceImpl implements ApprovalTaskService {
         runtimeService.deleteProcessInstance(pid, reason);
     }
 
+    @Override
+    public List<Object> findApplyRu(int type) {
+        // 获取缓存中是否缓存了整个流程的审批实例
+        String key = type == 1 ? GENERATION_APPROVAL_KEY : APPLICATION_FOR_DELIVERY_KEY;
+        List<Object> value = CACHE.get(key);
+        if (value != null) return value;
+
+        // 启动一个审批实例,获取最新的审批流程
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey(key);
+        // 寻找第一个审批任务,如果不存在表示审批结束
+        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
+        if (task == null) {
+            return null;
+        }
+        // 执行第一个审批流程,标记为完成
+        taskService.complete(task.getId());
+        List<Object> users = new ArrayList<>(10);
+        // 寻找下一个审批人(0 - n 个)
+        Map<String, Object> next = findTaskNextAssignee(pi.getId());
+        while (next != null) {
+            String taskId = (String) next.get("taskId");
+            taskService.complete(taskId);
+            users.add(next.get("assignee"));
+            next = findTaskNextAssignee(pi.getId());
+        }
+        // 缓存审批实例
+        CACHE.put(key, users);
+        return users;
+    }
+
     /**
      * 寻找任务的下一个审批人
      * @param pid 任务实例id

+ 5 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/approval/ApprovalController.java

@@ -345,7 +345,11 @@ public class ApprovalController {
                 approvalInfo.setApprovalAdminId(admin.getAdminId());
             }
         }
-
+        String stareDate = request.getParameter("stareDate");
+        if(stareDate != null ){
+            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+            approvalInfo.setApprovalCreateTime(format.parse(stareDate));
+        }
         PagedResult<ApprovalInfo> pagedResult = approvalOrderService.listApprovalInfo(pageNO, pageSize,approvalInfo,totalNum == null);
 
         if (totalNum != 0) {

+ 1 - 3
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -176,7 +176,6 @@ public class AwaitSendController {
                                    @RequestParam("salesId") Integer salesId,
                                    HttpServletRequest request) {
         SalesOrder salesOrderInfo = salesOrderService.getSalesOrderById(salesId);
-
         StoreShip storeShip = null;
         if(salesOrderInfo.getSalesStoreId() != null){
             storeShip = storeShipService.getStoreShipByStoreId(salesOrderInfo.getSalesStoreId());
@@ -185,7 +184,6 @@ public class AwaitSendController {
             LOGGER.error("{} 获取电子面单失败,原因:{}", orderId, "该订单没有绑定店铺或店铺没有发货人信息");
             return ResponseJson.getFAILURE().addResponseKeyValue("error","该订单没有绑定店铺或店铺没有发货人信息");
         }
-
         /*
          * 组装数据
          */
@@ -294,7 +292,7 @@ public class AwaitSendController {
                 String code = jsonObject.getJSONObject("Order").getString("LogisticCode");
                 // 订单发货
                 SalesOrder salesOrder = new SalesOrder();
-                salesOrder.setSalesPostFirm(post);
+                salesOrder.setSalesPostFirm(eOrderRequestData.ShipperCode);
                 salesOrder.setSalesPostNum(code);
                 salesOrder.setSalesShippingStatus(1);
                 salesOrder.setSalesSendTime(new Date());

+ 2 - 0
watero-rst-web/src/main/java/com/iamberry/rst/utils/OrderUtils.java

@@ -40,6 +40,8 @@ public class OrderUtils {
      * @throws Exception
      */
     public static String orderOnlineByJson(EOrderRequestData orderRequestData) throws Exception {
+        // 第三方接口对时效性有要求,并发数不超过多少,此处Sleep 100ms
+        Thread.sleep(100);
         // 生成电子面单的请求数据
         String requestData = JSONObject.toJSONString(orderRequestData);
         // 生成系统级请求数据

+ 40 - 20
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/print_order.ftl

@@ -51,7 +51,7 @@
                             <tr class="text-c"><td colspan="12">暂无数据</td></tr>
                             <#else>
                                 <#list value as o>
-                                <tr class="text-c ${x}-wait-print-order" printState="1">
+                                <tr class="text-c ${x}-wait-print-order" printState="1" printNum="0">
                                     <td>待处理</td>
                                     <td salesId="${o.salesId}" post="${(o.salesPostFirm)!}">${(o.salesOrderId)!}</td>
                                     <td>${(o.salesAddressName)!}</td>
@@ -93,9 +93,7 @@
     var LODOP=getLodop();
     $(function () {
         $.Huitab("#tab_demo .tabBar span","#tab_demo .tabCon","current","click","0");
-
-
-    // 获取系统的打印机
+         // 获取系统的打印机
         //setPrintMachine();
         function setPrintMachine() {
             var count = LODOP.GET_PRINTER_COUNT() - 1;
@@ -121,9 +119,11 @@
             var index = getCurrTab();
             var orders = $("." + index + "-wait-print-order");
             for(var i = 0; i < orders.length; i++) {
-                if ($(orders[i]).attr("printState") == "1") {
+                var temp = $(orders[i]);
+                var printNum = parseInt(temp.attr("printNum"));
+                if (temp.attr("printState") == "1" && printNum < 3) {
                     // 待打印
-                    return $(orders[i]);
+                    return temp;
                 }
             }
         }
@@ -154,15 +154,17 @@
                     $(order.find("td")[0]).html("<span style='color: rgba(243, 123, 29, 1);'>处理中</span>");
                 },
                 success: function(data){
-                    if (data.error) {
+                    var tempObject = data;
+                    if ('string' == typeof(data)) {
+                        tempObject = $.parseJSON(data);
+                    }
+                    if (tempObject.hasOwnProperty("error")) {
                         // 捕获系统级的错误(比如因为空指针抛出的Exception)
-                        $(order.find("td")[0]).html("<span style='color: red;'>失败(" + data.error_msg + ")</span>");
-                        startPrint();
+                        re_print(order, tempObject.error_msg);
                     } else {
                         if (data && data.returnCode && data.returnCode != 200) {
                             // 捕获业务级的操作(如订单的店铺没有绑定发货人信息)
-                            $(order.find("td")[0]).html("<span style='color: red;'>失败(" + data.returnMsg.error + ")</span>");
-                            startPrint();
+                            re_print(order, data.returnMsg.error);
                         } else {
                             var res = $.parseJSON(data.returnMsg.json);
                             if (data.resultMsg && res.Success) {
@@ -177,24 +179,42 @@
                                 }
                             } else {
                                 // 第三方接口错误
-                                $(order.find("td")[0]).html("<span style='color: red;'>失败(" + res.Reason + ")</span>");
-                                startPrint();
+                                re_print(order, res.Reason);
                             }
                         }
                     }
                 }
             });
         }
-    });
 
-    function getCurrTab() {
-        var spans = $(".tabBar").find("span");
-        for (var i = 0 ; i < spans.length; i++) {
-            if ($(spans[i]).attr("class").indexOf("current") != -1) {
-                return i;
+        /* 打印失败后,重新打印 */
+        function re_print(order, errorMsg) {
+            // 设置当前被打印的内容为“未打印”
+            var printNum = parseInt(order.attr("printNum"));
+            if(printNum >= 2) {
+                // 已重试两次,不允许重试
+                order.attr("printState", "2");
+                $(order.find("td")[0]).html("<span style='color: red;'>失败(" + errorMsg + ")</span>");
+            } else {
+                order.attr("printState", "1");
+                order.attr("printNum", (printNum + 1));
+                $(order.find("td")[0]).html("<span style='color: blue;'>正在重试(" + errorMsg + ")</span>");
             }
+            startPrint();
         }
-    }
+
+        function getCurrTab() {
+            var spans = $(".tabBar").find("span");
+            for (var i = 0 ; i < spans.length; i++) {
+                var temp = $(spans[i]).attr("class");
+                if (temp == null || "" === temp || undefined === typeof(temp)) {
+
+                }else if ($(spans[i]).attr("class").indexOf("current") !== -1) {
+                    return i;
+                }
+            }
+        }
+    });
 </script>
 </body>
 </html>