Browse Source

多选匹配代码

hulh 8 years ago
parent
commit
0e536a41d4

+ 11 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java

@@ -252,6 +252,17 @@ public class ProductController {
 		return productService.matchSelected(idList);
 		return productService.matchSelected(idList);
 	}
 	}
 
 
+	/**
+	 * 根据批次号获取未匹配成功的非标数据
+	 * @param batch
+	 * @return
+	 */
+	@RequestMapping(value = "/match/batch", method = RequestMethod.GET)
+	public List<Product> getDataByBatch(String batch) {
+		logger.info("获取指定批次的非标数据,批次 " + batch);
+		return productService.getDataByBatch(batch);
+	}
+
 	/**
 	/**
 	 * 保存匹配的信息,非标上架版本
 	 * 保存匹配的信息,非标上架版本
 	 * @param json
 	 * @param json

+ 12 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/MatchModelDao.java

@@ -3,8 +3,12 @@ package com.uas.platform.b2c.prod.commodity.dao;
 import com.uas.platform.b2c.prod.commodity.model.MatchModel;
 import com.uas.platform.b2c.prod.commodity.model.MatchModel;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
 
 
+import java.util.List;
+
 /**
 /**
  * 匹配结果类操作层
  * 匹配结果类操作层
  * @author hulh
  * @author hulh
@@ -12,4 +16,12 @@ import org.springframework.stereotype.Repository;
 @Repository
 @Repository
 public interface MatchModelDao extends JpaRepository<MatchModel, Long>, JpaSpecificationExecutor<MatchModel> {
 public interface MatchModelDao extends JpaRepository<MatchModel, Long>, JpaSpecificationExecutor<MatchModel> {
 
 
+    /**
+     * 根据以下信息获取产品id列表
+     * @param batch
+     * @param standard
+     * @return
+     */
+    @Query(value = "select productId from MatchModel where batch = :batch and standard = :standard")
+    List<Long> findNonProductByBatch(@Param("batch") String batch, @Param("standard") Short standard);
 }
 }

+ 8 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java

@@ -137,4 +137,12 @@ public interface ProductDao extends JpaSpecificationExecutor<Product>, JpaReposi
     @Query(value = "select p from Product p where p.enUU = :enuu and p.brand = :brand and p.cmpCode = :code and p.standard = :standard")
     @Query(value = "select p from Product p where p.enUU = :enuu and p.brand = :brand and p.cmpCode = :code and p.standard = :standard")
     List<Product> findMatchStandard(@Param("enuu") Long enuu, @Param("brand") String brand, @Param("code") String code, @Param("standard") Integer standard);
     List<Product> findMatchStandard(@Param("enuu") Long enuu, @Param("brand") String brand, @Param("code") String code, @Param("standard") Integer standard);
 
 
+    /**
+     * 获取指定id列表的产品
+     * @param idList
+     * @return
+     */
+    @Query(value = "select p from Product p where id in :idList")
+    List<Product> findProductInId(@Param("idList") List<Long> idList);
+
 }
 }

+ 8 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java

@@ -134,12 +134,19 @@ public interface ProductService {
     ResultMap matchNonStandardProduct();
     ResultMap matchNonStandardProduct();
 
 
     /**
     /**
-     *
+     * 匹配选中的列表
      * @param idList
      * @param idList
      * @return
      * @return
      */
      */
     ResultMap matchSelected(List<Long> idList);
     ResultMap matchSelected(List<Long> idList);
 
 
+    /**
+     * 获取该批次的非标数据
+     * @param batch 批次号
+     * @return
+     */
+    List<Product> getDataByBatch(String batch);
+
     /**
     /**
      * 保存匹配信息
      * 保存匹配信息
      * @param json
      * @param json

+ 2 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java

@@ -673,7 +673,7 @@ public class GoodsServiceImpl implements GoodsService {
         goodsHistoryDao.save(goodsHistory);
         goodsHistoryDao.save(goodsHistory);
         // TODO huxz 添加或修改商品价格信息
         // TODO huxz 添加或修改商品价格信息
         if (goods.getUuid() != null) {
         if (goods.getUuid() != null) {
-            saveOrUpdatePriceInfos(goods, deviceInfo);
+//            saveOrUpdatePriceInfos(goods, deviceInfo);
             updateComponentTradeInfos(goods.getUuid());
             updateComponentTradeInfos(goods.getUuid());
         }
         }
         return backGoods;
         return backGoods;
@@ -1285,7 +1285,7 @@ public class GoodsServiceImpl implements GoodsService {
             goodsHistoryDao.save(goodsHistory);
             goodsHistoryDao.save(goodsHistory);
             // TODO huxz 添加或修改商品价格信息
             // TODO huxz 添加或修改商品价格信息
             if (goods.getUuid() != null) {
             if (goods.getUuid() != null) {
-                saveOrUpdatePriceInfos(goods, "NOMAL");
+//                saveOrUpdatePriceInfos(goods, "NOMAL");
                 updateComponentTradeInfos(goods.getUuid());
                 updateComponentTradeInfos(goods.getUuid());
             }
             }
             return ResultMap.success(persistGoods);
             return ResultMap.success(persistGoods);

+ 12 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java

@@ -698,8 +698,8 @@ public class ProductServiceImpl implements ProductService {
         int success = 0;
         int success = 0;
         int fail = 0;
         int fail = 0;
 
 
-        String sql = "/*#mycat:db_type=master*/ call PRODUCT_MATCHES_SELECT_V1(%s, %s, @out); select @out";
-        final String formatSql = String.format(sql, batch, uu);
+        String sql = "/*#mycat:db_type=master*/ call PRODUCT_MATCHES_SELECT_V1(%s, %s, %s, @out); select @out";
+        final String formatSql = String.format(sql, batch, enUU, uu);
         success = jdbcTemplate.execute(new StatementCallback<Integer>() {
         success = jdbcTemplate.execute(new StatementCallback<Integer>() {
             @Override
             @Override
             public Integer doInStatement(Statement statement) throws SQLException, DataAccessException {
             public Integer doInStatement(Statement statement) throws SQLException, DataAccessException {
@@ -719,6 +719,7 @@ public class ProductServiceImpl implements ProductService {
         map.put("total", idList.size());
         map.put("total", idList.size());
         map.put("fail", fail);
         map.put("fail", fail);
         map.put("success", success);
         map.put("success", success);
+        map.put("batch", batch);
 
 
         return ResultMap.success(map);
         return ResultMap.success(map);
     }
     }
@@ -744,6 +745,15 @@ public class ProductServiceImpl implements ProductService {
         matchModelDao.save(resultList);
         matchModelDao.save(resultList);
     }
     }
 
 
+    @Override
+    public List<Product> getDataByBatch(String batch) {
+        List<Long> idList = matchModelDao.findNonProductByBatch(batch, ShortConstant.NO_SHORT);
+        if (!CollectionUtils.isEmpty(idList)) {
+            return productDao.findProductInId(idList);
+        }
+        return Collections.emptyList();
+    }
+
     /**
     /**
      * 根据标准上架信息 保存对产品包装,包装数量,生产日期的修改
      * 根据标准上架信息 保存对产品包装,包装数量,生产日期的修改
      *
      *

+ 11 - 0
src/main/webapp/resources/js/common/query/material.js

@@ -44,6 +44,17 @@ define([ 'ngResource' ], function() {
                 url: 'trade/products/match/nonProduct',
                 url: 'trade/products/match/nonProduct',
                 method: 'GET'
                 method: 'GET'
             },
             },
+            // 多选匹配,非标上架版本
+            matchSelected : {
+                url: 'trade/products/match/selected',
+                method: 'POST'
+            },
+            // 根据批次获取产品列表
+            getDataByBatch : {
+                url: 'trade/products/match/batch',
+                method: 'GET',
+                isArray: true
+            },
             updateProduct : {
             updateProduct : {
                 url: 'trade/products/update',
                 url: 'trade/products/update',
                 method: 'POST'
                 method: 'POST'

+ 82 - 23
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_materialCtrl.js

@@ -189,6 +189,9 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 		 * @param isStandard
 		 * @param isStandard
 		 */
 		 */
 		$scope.toggleStandard = function (isStandard) {
 		$scope.toggleStandard = function (isStandard) {
+			if ($scope.standard_tab == 'matchResult') {
+				$scope.lastMaterial = $scope.currenctMaterial;
+			}
 			$scope.standard_tab = isStandard;
 			$scope.standard_tab = isStandard;
 			$scope.param.keyword = '';
 			$scope.param.keyword = '';
 			if (isStandard == 'standard')
 			if (isStandard == 'standard')
@@ -229,21 +232,41 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 		};
 		};
 
 
 		// 全选
 		// 全选
-		$scope.chooseAll = function () {
-			$scope.isChoosedAll = !$scope.isChoosedAll;
+		$scope.chooseAllItem = function () {
+			$scope.chooseAll = !$scope.chooseAll;
 			angular.forEach($scope.currenctMaterial, function (material) {
 			angular.forEach($scope.currenctMaterial, function (material) {
-				material.isChoosed = $scope.isChoosedAll;
+				material.isChoosed = $scope.chooseAll;
+			});
+			if (!$scope.chooseAll) {
+				$scope.chooseAllPage = false;
+			}
+		};
+
+		$scope.turnAllPage = function () {
+			if ($scope.chooseAll) {
+				$scope.chooseAllPage = true;
+			}
+		};
+
+		$scope.cancelAllPage = function () {
+			$scope.chooseAllPage = false;
+			$scope.chooseAll = false;
+			angular.forEach($scope.currenctMaterial, function (material) {
+				material.isChoosed = false;
 			});
 			});
 		};
 		};
 
 
 		// 检查是否全选
 		// 检查是否全选
 		var checkChoosedAll = function () {
 		var checkChoosedAll = function () {
-			$scope.isChoosedAll = true;
+			$scope.chooseAll = true;
 			angular.forEach($scope.currenctMaterial, function (material) {
 			angular.forEach($scope.currenctMaterial, function (material) {
 				if (!material.isChoosed) {
 				if (!material.isChoosed) {
-					$scope.isChoosedAll = false;
+					$scope.chooseAll = false;
 				}
 				}
 			});
 			});
+			if (!$scope.chooseAll) {
+				$scope.chooseAllPage = false;
+			}
 		};
 		};
 
 
 		// 单选
 		// 单选
@@ -736,7 +759,12 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 		$scope.toggleTab = function (status) {
 		$scope.toggleTab = function (status) {
 			$scope.param.type = 'nStandard';
 			$scope.param.type = 'nStandard';
 			$scope.param.count = $scope.$$nonProduct.count;
 			$scope.param.count = $scope.$$nonProduct.count;
-			loadData();
+			if (status == 'matchResult') {
+				$scope.currenctMaterial = $scope.lastMaterial;
+				$scope.materialAll = {};
+			} else {
+				loadData();
+			}
 			$scope.standard_tab = status;
 			$scope.standard_tab = status;
 		};
 		};
 
 
@@ -749,23 +777,50 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 			$scope.resultTip = false;
 			$scope.resultTip = false;
 		};
 		};
 
 
+		var loadSelectedData = function () {
+			$scope.materialAll = {};
+			Material.getDataByBatch({batch:$scope.batch}, function (data) {
+				$scope.currenctMaterial = data;
+			});
+		};
+
 		// 一键匹配
 		// 一键匹配
 		$scope.matchAll = function () {
 		$scope.matchAll = function () {
-			Material.matchNonProduct({}, {}, function (data) {
-				if (data.success){
-					$scope.resultFrame = true;
-					$scope.matchTotal = data.data.total;
-					$scope.matchSuccess = data.data.success;
-					$scope.matchFail = data.data.fail;
-					$scope.standard_tab = 'matchResult';
-					$scope.param.type = "nStandard";
-					loadData();
-				}else {
-					toaster.pop("info", data.message);
-				}
-			}, function (error) {
-				toaster.pop("error", "匹配操作失败!")
-			});
+			if ($scope.chooseAllPage) {
+				Material.matchNonProduct({}, {}, function (data) {
+					if (data.success) {
+						$scope.resultFrame = true;
+						$scope.matchTotal = data.data.total;
+						$scope.matchSuccess = data.data.success;
+						$scope.matchFail = data.data.fail;
+						$scope.standard_tab = 'matchResult';
+						$scope.param.type = "nStandard";
+						loadData();
+					} else {
+						toaster.pop("info", data.message);
+					}
+				}, function (error) {
+					toaster.pop("error", "匹配操作失败!")
+				});
+			} else {
+				$scope.getChoosedInfo();
+				Material.matchSelected({}, $scope.choosedIds, function (data) {
+					if (data.success) {
+						$scope.resultFrame = true;
+						$scope.matchTotal = data.data.total;
+						$scope.matchSuccess = data.data.success;
+						$scope.matchFail = data.data.fail;
+						$scope.standard_tab = 'matchResult';
+						$scope.batch = data.data.batch;
+						$scope.currenctMaterial = [];
+						loadSelectedData();
+					} else {
+						toaster.pop("error", data.message);
+					}
+				}, function (error) {
+
+				})
+			}
 		};
 		};
 
 
 		function downloadByJs(url, keyword, type) {
 		function downloadByJs(url, keyword, type) {
@@ -996,7 +1051,11 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 				$scope.currenctMaterial = data.content;
 				$scope.currenctMaterial = data.content;
 				updateTagCount();
 				updateTagCount();
 				angular.forEach($scope.currenctMaterial, function (material, index) {
 				angular.forEach($scope.currenctMaterial, function (material, index) {
-					material.isChoosed = false;
+					if ($scope.chooseAllPage) {
+						material.isChoosed = true;
+					} else {
+						material.isChoosed = false;
+					}
 					material.submitProduct = {
 					material.submitProduct = {
 						brand: {},
 						brand: {},
 						commponent: {},
 						commponent: {},
@@ -1011,8 +1070,8 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
 				});
 				});
 				$scope.param.currentPage = data.number;
 				$scope.param.currentPage = data.number;
 				$scope.acculatePages(data.number, data.totalPages);
 				$scope.acculatePages(data.number, data.totalPages);
-				$scope.isChoosedAll = false;
 				$scope.choosedIds = [];
 				$scope.choosedIds = [];
+				$scope.chooseAll = false;
 			}, function (response) {
 			}, function (response) {
 
 
 			})
 			})

+ 23 - 17
src/main/webapp/resources/view/vendor/forstore/vendor_material.html

@@ -1558,7 +1558,7 @@
 					<tr>
 					<tr>
 						<th width="80">
 						<th width="80">
 							<label class="check-active">
 							<label class="check-active">
-								<input type="checkbox"  ng-click="chooseAll()" ng-checked="isChoosedAll" id="AllChoose"/>
+								<input type="checkbox"  ng-click="chooseAllItem()" ng-checked="chooseAll || chooseAllPage" id="AllChoose"/>
 								<label for="AllChoose"></label>
 								<label for="AllChoose"></label>
 								<span>全选</span>
 								<span>全选</span>
 							</label>
 							</label>
@@ -1965,11 +1965,16 @@
 					</tr>
 					</tr>
 					</tbody>
 					</tbody>
 					<tbody>
 					<tbody>
-					<tr class="no-hover batch-tr" ng-if="chooseAll && chooseAllPage || true">
+					<tr class="no-hover batch-tr" ng-if="chooseAll || chooseAllPage">
 						<td colspan="7">
 						<td colspan="7">
-							<div class="batch-line">
+							<div class="batch-line" ng-if="chooseAll && !chooseAllPage">
+								已选中当前页
+								<em class="red" ng-bind="materialAll.numberOfElements"></em>个产品,
+								<a ng-click="turnAllPage()" class="blue">点击此处</a>切换选中所有页面<em class="red" ng-bind="materialAll.numberOfElements"></em>个产品
+							</div>
+							<div class="batch-line" ng-if="chooseAllPage">
 								已选中所有页面
 								已选中所有页面
-								<em class="red">{{$$productRepository.totalElements-escapeArray.length}}</em>个产品,
+								<em class="red" ng-bind="materialAll.totalElements"></em>个产品,
 								<a ng-click="cancelAllPage()" class="blue">点击此处</a>全部取消选中
 								<a ng-click="cancelAllPage()" class="blue">点击此处</a>全部取消选中
 							</div>
 							</div>
 						</td>
 						</td>
@@ -2099,24 +2104,25 @@
 						</tbody>
 						</tbody>
 						<tr style="height: 40px;" class="no-hover">
 						<tr style="height: 40px;" class="no-hover">
 							<td colspan="7" style="border-bottom: none; padding: 0;">
 							<td colspan="7" style="border-bottom: none; padding: 0;">
-								<div class="record-line text-right">
-								<span class="set-count">
-									每页显示:
-									<!--<input type="text" value="10" class="form-control">-->
-									<!--<ul>-->
-									<!--<li>15</li>-->
-									<!--</ul>-->
-									<select ng-model="$$nonProduct.count" ng-change="fitCountToTable($$nonProduct.count)">
-										<option value="10">10</option>
-										<option value="15">15</option>
-										<option value="20">20</option>
-									</select>
-								</span>
+								<div class="record-line text-right" ng-if="chooseAllPage">
+									<span class="set-count">
+										每页显示:
+										<select ng-model="$$nonProduct.count" ng-change="fitCountToTable($$nonProduct.count)">
+											<option value="10">10</option>
+											<option value="15">15</option>
+											<option value="20">20</option>
+										</select>
+									</span>
 									显示<span>{{(param.currentPage - 1) * param.count + 1}}</span>-
 									显示<span>{{(param.currentPage - 1) * param.count + 1}}</span>-
 									<span ng-if="param.currentPage != materialAll.totalPages">{{param.currentPage * param.count}}</span>
 									<span ng-if="param.currentPage != materialAll.totalPages">{{param.currentPage * param.count}}</span>
 									<span ng-if="param.currentPage == materialAll.totalPages">{{materialAll.totalElements}}</span>
 									<span ng-if="param.currentPage == materialAll.totalPages">{{materialAll.totalElements}}</span>
 									,共:<span style="color: #5078cb;">{{materialAll.totalElements}}</span>个
 									,共:<span style="color: #5078cb;">{{materialAll.totalElements}}</span>个
 								</div>
 								</div>
+								<div class="record-line text-right" ng-if="!chooseAllPage">
+									显示<span>1</span>-
+									<span ng-bind="currenctMaterial.length"></span>
+									,共:<span style="color: #5078cb;">{{currenctMaterial.length}}</span>个
+								</div>
 							</td>
 							</td>
 						</tr>
 						</tr>
 						</tbody>
 						</tbody>