Просмотр исходного кода

客户采购询价,发货提醒单增加token验证机制,防止单据重复提交

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@10753 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
hejq 8 лет назад
Родитель
Сommit
2043b826e7

+ 16 - 4
src/main/java/com/uas/platform/b2b/controller/SaleInquiryController.java

@@ -29,6 +29,7 @@ import com.uas.platform.b2b.service.PurchaseInquiryService;
 import com.uas.platform.b2b.service.UserService;
 import com.uas.platform.b2b.support.JxlsExcelView;
 import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.b2b.support.TokenService;
 import com.uas.platform.b2b.support.UsageBufferedLogger;
 import com.uas.platform.b2b.temporary.model.InquiryMessage;
 import com.uas.platform.core.logging.BufferedLoggerManager;
@@ -64,6 +65,9 @@ public class SaleInquiryController {
 	@Autowired
 	private SearchService searchService;
 
+	@Autowired
+	private TokenService tokenService;
+
 	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
 	/**
@@ -515,9 +519,13 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/items/{inquiryItemId}/reply", method = RequestMethod.POST)
 	public ResponseEntity<String> replyInquiryItem(@RequestBody String json,
-			@PathVariable("inquiryItemId") Long inquiryItemId) {
+			@PathVariable("inquiryItemId") Long inquiryItemId, String token) {
 		PurchaseInquiryItem item = FlexJsonUtils.fromJson(json, PurchaseInquiryItem.class);
-		item = purchaseInquiryService.reply(item);
+		boolean flag = tokenService.enabled(token);
+		if (flag) {
+			item = purchaseInquiryService.reply(item);
+			tokenService.delete(token);
+		}
 		logger.log("客户询价单", "给单个客户询价明细填写价格并确认报价", item.replyDescription(), item.getInquiry().getCode(), inquiryItemId);
 		return new ResponseEntity<String>(HttpStatus.OK);
 	}
@@ -531,9 +539,13 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/items/{inquiryItemId}", method = RequestMethod.POST)
 	public ResponseEntity<String> saveInquiryItem(@RequestBody String json,
-			@PathVariable("inquiryItemId") Long inquiryItemId) {
+			@PathVariable("inquiryItemId") Long inquiryItemId, String token) {
 		PurchaseInquiryItem item = FlexJsonUtils.fromJson(json, PurchaseInquiryItem.class);
-		item = purchaseInquiryService.save(item);
+		boolean flag = tokenService.enabled(token);
+		if (flag) {
+			item = purchaseInquiryService.save(item);
+			tokenService.delete(token);
+		}
 		logger.log("客户询价单", "给单个客户询价明细填写价格", item.replyDescription(), item.getInquiry().getCode(), inquiryItemId);
 		return new ResponseEntity<String>(HttpStatus.OK);
 	}

+ 43 - 19
src/main/java/com/uas/platform/b2b/controller/SaleNoticeController.java

@@ -1,11 +1,37 @@
 package com.uas.platform.b2b.controller;
 
-import com.uas.platform.b2b.model.*;
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.uas.platform.b2b.model.PurchaseNotice;
+import com.uas.platform.b2b.model.SaleSend;
+import com.uas.platform.b2b.model.SaleSendAll;
+import com.uas.platform.b2b.model.SaleSendItem;
+import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseNoticeService;
 import com.uas.platform.b2b.service.UserService;
 import com.uas.platform.b2b.support.JxlsExcelView;
 import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.b2b.support.TokenService;
 import com.uas.platform.b2b.support.UsageBufferedLogger;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
@@ -20,20 +46,6 @@ import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.Sort;
 import com.uas.search.b2b.model.Sort.Type;
 import com.uas.search.b2b.util.SearchConstants;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.ModelMap;
-import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.UnsupportedEncodingException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * 卖家对送货提醒的操作
@@ -58,6 +70,9 @@ public class SaleNoticeController {
 	@Autowired
 	protected HttpServletRequest request;
 
+	@Autowired
+	private TokenService tokenService;
+
 	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
 	/**
@@ -346,10 +361,15 @@ public class SaleNoticeController {
 	 */
 	@RequestMapping(value = "/{noticeId}", method = RequestMethod.POST)
 	@ResponseBody
-	public ResponseEntity<ModelMap> send(@PathVariable("noticeId") Long noticeId, @RequestBody String json) {
+	public ResponseEntity<ModelMap> send(@PathVariable("noticeId") Long noticeId, String token,
+			@RequestBody String json) {
 		ModelMap map = new ModelMap();
 		SaleSend send = FlexJsonUtils.fromJson(json, SaleSend.class);
-		send = purchaseNoticeService.send(noticeId, send);
+		boolean flag = tokenService.enabled(token);
+		if (flag) {
+			send = purchaseNoticeService.send(noticeId, send);
+			tokenService.delete(token);
+		}
 		if (send != null) {
 			logger.log("客户送货提醒", "给单个客户送货提醒填写数量并确认发货", send.sendDescription(), null, noticeId);
 			map.put("id", send.getId());
@@ -366,10 +386,14 @@ public class SaleNoticeController {
 	 */
 	@RequestMapping(value = "/sendByBatch", method = RequestMethod.POST)
 	@ResponseBody
-	public ResponseEntity<ModelMap> sendByBatch(@RequestBody String json) {
+	public ResponseEntity<ModelMap> sendByBatch(String token, @RequestBody String json) {
 		ModelMap map = new ModelMap();
 		SaleSend send = FlexJsonUtils.fromJson(json, SaleSend.class);
-		send = purchaseNoticeService.send(send);
+		boolean flag = tokenService.enabled(token);
+		if (flag) {
+			send = purchaseNoticeService.send(send);
+			tokenService.delete(token);
+		}
 		if (send != null) {
 			logger.log("客户送货提醒", "给同一客户多个送货提醒填写数量并确认发货", send.sendDescription(), null, send.getId());
 			map.put("id", send.getId());

+ 65 - 26
src/main/webapp/resources/js/index/app.js

@@ -3421,7 +3421,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
     }]);
 
     //采购询价
-    app.controller('SaleInquiryCtrl', ['$scope', '$filter', 'PurcInquiry', 'ngTableParams', 'toaster', 'BaseService', 'PurcInquiryInfo', '$upload', '$rootScope', function ($scope, $filter, PurcInquiry, ngTableParams, toaster, BaseService, PurcInquiryInfo, $upload, $rootScope) {
+    app.controller('SaleInquiryCtrl', ['$scope', '$filter', 'PurcInquiry', 'ngTableParams', 'toaster', 'BaseService', 'PurcInquiryInfo', '$upload', '$rootScope', 'token', function ($scope, $filter, PurcInquiry, ngTableParams, toaster, BaseService, PurcInquiryInfo, $upload, $rootScope, token) {
         BaseService.scrollBackToTop();
         if ($rootScope.active) {
             $scope.active = $rootScope.active;
@@ -3608,6 +3608,17 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             return bool;
         };
 
+        // 获取token信息
+        $scope.getToken = function() {
+        	if($scope.token == null) {
+        		token.info({userType: 'salenotice'}, {}, function(data) {
+        			$scope.token = data.token;
+        		}, function(response) {
+        			toaster.pop('error', '提示', response.data);
+        		});
+        	}
+        }
+        
         $scope.onReplyClick = function (item, withSteps) {
             if (item.vendFromDate instanceof Date) {
                 item.vendFromDate = item.vendFromDate.getTime();
@@ -3636,9 +3647,9 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                         itemId: item.id
                     }
                 }).success(function (attach) {
-                    console.log(attach);
+                	
                 });
-                PurcInquiry.reply({itemId: item.id}, item, function () {
+                PurcInquiry.reply({itemId: item.id, token: $scope.token}, item, function () {
                     $scope.loading = false;
                     toaster.pop('info', '提示', '报价成功');
                     $scope.tableParams.reload();
@@ -3647,7 +3658,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                     toaster.pop('error', '询价失效', response.data);
                 });
             } else {
-                PurcInquiry.saveItem({itemId: item.id}, item, function () {
+                PurcInquiry.saveItem({itemId: item.id, token: $scope.token}, item, function () {
                     $scope.loading = false;
                     toaster.pop('info', '提示', '保存成功');
                     $scope.tableParams.reload();
@@ -5991,7 +6002,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
     }]);
 
     // 发货提醒
-    app.controller('SaleNoticeCtrl', ['$scope', '$rootScope', '$filter', 'PurcNotice', 'ngTableParams', 'toaster', 'BaseService', 'PurcNoticeHis', '$modal', 'SaleTruck', 'Symbol', '$state', '$timeout', 'PurcNoticeInfo', function ($scope, $rootScope, $filter, PurcNotice, ngTableParams, toaster, BaseService, PurcNoticeHis, $modal, SaleTruck, Symbol, $state, $timeout, PurcNoticeInfo) {
+    app.controller('SaleNoticeCtrl', ['$scope', '$rootScope', '$filter', 'PurcNotice', 'ngTableParams', 'toaster', 'BaseService', 'PurcNoticeHis', '$modal', 'SaleTruck', 'Symbol', '$state', '$timeout', 'PurcNoticeInfo', 'token', function ($scope, $rootScope, $filter, PurcNotice, ngTableParams, toaster, BaseService, PurcNoticeHis, $modal, SaleTruck, Symbol, $state, $timeout, PurcNoticeInfo, token) {
         BaseService.scrollBackToTop();
         $scope.active = 'todo';
         $scope.currency = Symbol.currency;
@@ -6117,7 +6128,18 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         $scope.autoCode = function (notice) {
             notice.send.code = $filter('date')(new Date(), 'yyMMddHHmmss-sss');
         };
-
+        
+        // 获取token信息
+        $scope.getToken = function() {
+        	if($scope.token == null) {
+        		token.info({userType: 'salenotice'}, {}, function(data) {
+        			$scope.token = data.token;
+        		}, function(response) {
+        			toaster.pop('error', '提示', response.data);
+        		});
+        	}
+        }
+        
         //可送货日期
         $scope.sendDate = function (notice) {
             var stock = notice.orderItem.product.ltinstock || 0;
@@ -6135,7 +6157,9 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         // 锁定时间按钮5秒
         $scope.lockClick = function (notice) {
             if (!notice.send || !notice.send.qty || notice.send.qty > notice.qty - (notice.endQty || 0)) {
+            	
             } else if (!notice.send.code) {
+            	
             } else {
                 $scope.lockstatus = true;
                 $timeout(function () {
@@ -6158,7 +6182,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                         sendItems: [{qty: notice.send.qty}]
                     };
                     $scope.loading = true;
-                    PurcNotice.save({id: notice.id}, send, function (data) {
+                    PurcNotice.save({id: notice.id, token: $scope.token}, send, function (data) {
                         $scope.loading = false;
                         toaster.pop('success', '提示', '发货成功,跳转至发货单:' + notice.send.code);
                         $state.go('sale.send_detail', {id: data.id});
@@ -6199,24 +6223,40 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             $scope.checkboxes.checked = result;
         };
 
+        // 打开批量发货模态框
+        var sendByBatch = function() {
+        	var modalInstance = $modal.open({
+    			animation: true,
+    			templateUrl: 'static/tpl/index/sale/sendByBatch.html',
+    			controller: 'SaleNoticeSendByBatchCtrl',
+    			size: 'lg',
+    			resolve: {
+    				selectedNotices: function () {
+    					return $scope.tableParams.data;
+    				},
+    				token: function() {
+    					return $scope.token;
+    				}
+    			}
+    		});
+			 modalInstance.result.then(function () {
+	                $scope.tableParams.reload();
+	            }, function () {
+
+	            });
+        }
         $scope.sendByBatch = function () {
-            var modalInstance = $modal.open({
-                animation: true,
-                templateUrl: 'static/tpl/index/sale/sendByBatch.html',
-                controller: 'SaleNoticeSendByBatchCtrl',
-                size: 'lg',
-                resolve: {
-                    selectedNotices: function () {
-                        return $scope.tableParams.data;
-                    }
-                }
-            });
-
-            modalInstance.result.then(function () {
-                $scope.tableParams.reload();
-            }, function () {
+        	if($scope.token == null) {
+        		token.info({userType: 'salenotice'}, {}, function(data) {
+        			$scope.token = data.token;
+        			sendByBatch();
+        		}, function(response) {
+        			toaster.pop('error', '提示', response.data);
+        		});
+        	} else {
+        		sendByBatch();
+        	}
 
-            });
         };
 
         $scope.getSends = function (notice) {
@@ -6279,7 +6319,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         }, true);
     }]);
 
-    app.controller('SaleNoticeSendByBatchCtrl', ['$scope', '$modalInstance', 'Symbol', 'selectedNotices', 'PurcNotice', 'toaster', '$state', '$timeout', function ($scope, $modalInstance, Symbol, selectedNotices, PurcNotice, toaster, $state, $timeout) {
+    app.controller('SaleNoticeSendByBatchCtrl', ['$scope', '$modalInstance', 'Symbol', 'selectedNotices', 'PurcNotice', 'toaster', '$state', '$timeout', 'token', function ($scope, $modalInstance, Symbol, selectedNotices, PurcNotice, toaster, $state, $timeout, token) {
         $scope.notices = angular.copy(selectedNotices);
         $scope.currency = Symbol.currency;//将币别转化为对应的符号
         $scope.saleSend = {
@@ -6292,7 +6332,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             sendItems: []
 
         };
-
         // 计算总数、总额
         $scope.$watch(function () {
             return $scope.notices;
@@ -6369,7 +6408,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                 toaster.pop('error', '错误', '只有客户一致、币别一致、付款方式一致才能一起发货。');
             } else {
                 if (!isSumbit) {
-                    PurcNotice.sendByBatch({}, $scope.saleSend, function (data) {
+                    PurcNotice.sendByBatch({token: token}, $scope.saleSend, function (data) {
                         toaster.pop('success', '提示', '发货成功,跳转至发货单:' + $scope.saleSend.code);
                         $modalInstance.close('success');
                         $state.go('sale.send_detail', {id: data.id});

+ 1 - 1
src/main/webapp/resources/tpl/index/sale/inquiry.html

@@ -583,7 +583,7 @@
 				<div ng-if="inquiryItem.status == 200">
 					<div ng-if="inquiryItem.inquiry.overdue == 0 && inquiryItem.inquiry.check != 1">
 						<div ng-show="!inquiryItem.$editing">
-							<a ng-click="inquiryItem.$editing=!inquiryItem.$editing">报 价</a>
+							<a ng-click="inquiryItem.$editing=!inquiryItem.$editing; getToken()">报 价</a>
 						</div>
 						<div ng-show="inquiryItem.$editing">
 							<div>

+ 4 - 4
src/main/webapp/resources/tpl/index/sale/notice.html

@@ -318,7 +318,7 @@
                     <label><input type="checkbox" class="selector select_all"
                                   ng-model="checkboxes.checked" ng-click="checkAll()">全选</label> <a
                         href="javascript:void(0)"
-                        ng-disabled="active!='todo'" ng-click="sendByBatch()" class="btn btn-default btn-xs">批量发货</a>
+                        ng-disabled="active!='todo'" ng-click="getToken(); sendByBatch()" class="btn btn-default btn-xs">批量发货</a>
                     <span class="text-muted">
 						&nbsp;&nbsp;<i class="fa fa-exclamation-triangle"></i>批量发货要求对应订单的客户相同、币别相同、收款方式相同。
 						
@@ -436,10 +436,10 @@
                             <li>本次需求:{{::notice.qty}}</li>
                             <li>剩余未发:<span class="text-num text-inverse"
                                            ng-bind="notice.qty-(notice.endQty || 0)"></span></li>
-                            <li><span>[订单数:{{::notice.orderItem.qty}}]</span></li>
+                            <li><span>订单数:{{::notice.orderItem.qty}}</span></li>
                             <li class="dropdown dropdown-submenu"><a ng-click="" class="dropdown-toggle"
                                                                      ng-mouseenter="getSends(notice)"><span
-                                    ng-class="{'text-muted' : notice.endQty == null || notice.endQty == 0,'text-default': notice.endQty > 0}">[已发货:{{notice.endQty}}]</span></a>
+                                    ng-class="{'text-muted' : notice.endQty == null || notice.endQty == 0,'text-default': notice.endQty > 0}">已发货:{{notice.endQty}}</span></a>
                                 <div class="dropdown-menu order-send arrow-border arrow-bottom-right"
                                      style="padding: 10px 15px; width: 240px;">
                                     <span ng-if="notice.endQty ==0" class="text-muted">还未发货</span>
@@ -496,7 +496,7 @@
                     <div ng-show="!notice.$editing">
                         <div ng-show="!isInTruck(notice.id)">
                             <div class="br-b">
-                                <a ng-click="notice.$editing=!notice.$editing"><i class="fa fa-send-o fa-lg"></i><br>发 货</a>
+                                <a ng-click="notice.$editing=!notice.$editing; getToken()"><i class="fa fa-send-o fa-lg"></i><br>发 货</a>
                             </div>
                             <div>
                                 <a ng-click="addtoTruck(notice)" class="text-simple"><i