Kaynağa Gözat

新增物料时逻辑修改,品牌、型号、类目均做联想词,保存时进行匹配,如果是标准物料,更新标准属性为标准库的信息,其他的不做更改

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@9673 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
hejq 8 yıl önce
ebeveyn
işleme
d62a69eefa

+ 43 - 6
src/main/java/com/uas/platform/b2b/service/impl/BaseInfoServiceImpl.java

@@ -394,10 +394,10 @@ public class BaseInfoServiceImpl implements BaseInfoService {
 			if (component != null) {
 			if (component != null) {
 				prodInfo.setPbranden(component.getBrand().getNameEn());
 				prodInfo.setPbranden(component.getBrand().getNameEn());
 				prodInfo.setPbrand(component.getBrand().getNameCn());
 				prodInfo.setPbrand(component.getBrand().getNameCn());
-				prodInfo.setCmpCode(component.getCode());
 				prodInfo.setKind(component.getKind().getNameCn());
 				prodInfo.setKind(component.getKind().getNameCn());
 				prodInfo.setPcmpcode(component.getCode());
 				prodInfo.setPcmpcode(component.getCode());
 				prodInfo.setKinden(component.getKind().getNameEn());
 				prodInfo.setKinden(component.getKind().getNameEn());
+				prodInfo.setStandard(Constant.YES);
 			}
 			}
 		} else {
 		} else {
 			List<Component> components = componentDao.findByCode(prodInfo.getCmpCode());
 			List<Component> components = componentDao.findByCode(prodInfo.getCmpCode());
@@ -427,11 +427,48 @@ public class BaseInfoServiceImpl implements BaseInfoService {
 				prodInfo.setUserUU(SystemSession.getUser().getUserUU());
 				prodInfo.setUserUU(SystemSession.getUser().getUserUU());
 				prodInfo.setEnUU(SystemSession.getUser().getEnterprise().getUu());
 				prodInfo.setEnUU(SystemSession.getUser().getEnterprise().getUu());
 				prodInfo.setSourceApp("B2B");
 				prodInfo.setSourceApp("B2B");
-				List<Component> comp = componentDao.findByCode(prodInfo.getCode());
-				if (!CollectionUtils.isEmpty(comp)) {
-					prodInfo.setCmpUuId(comp.get(0).getUuid());
-					prodInfo.setCmpCode(comp.get(0).getCode());
-				} else {
+				prodInfo.setStandard(Constant.NO);
+				// 进行与标准库进行匹配
+				if (prodInfo.getCmpCode() != null && prodInfo.getBrand() != null && prodInfo.getTitle() != null) {
+					List<Component> comps = componentDao.findByCode(prodInfo.getCmpCode());
+					if (!CollectionUtils.isEmpty(comps)) {
+						for (Component cmp : comps) {
+							if (cmp.getBrand().getNameEn().equals(prodInfo.getBrand())
+									&& cmp.getKind().getNameCn().equals(prodInfo.getTitle())) {// 标准物料
+								prodInfo.setPbrand(cmp.getBrand().getNameCn());
+								prodInfo.setPbranden(cmp.getBrand().getNameEn());
+								prodInfo.setKind(cmp.getKind().getNameCn());
+								prodInfo.setKinden(cmp.getKind().getNameEn());
+								prodInfo.setPcmpcode(cmp.getCode());
+								prodInfo.setStandard(Constant.YES);
+							} else if (cmp.getBrand().getNameCn().equals(prodInfo.getBrand())
+							&& cmp.getKind().getNameCn().equals(prodInfo.getTitle())) {
+								prodInfo.setPbrand(cmp.getBrand().getNameCn());
+								prodInfo.setPbranden(cmp.getBrand().getNameEn());
+								prodInfo.setKind(cmp.getKind().getNameCn());
+								prodInfo.setKinden(cmp.getKind().getNameEn());
+								prodInfo.setPcmpcode(cmp.getCode());
+								prodInfo.setStandard(Constant.YES);
+							} else if (cmp.getBrand().getNameEn().equals(prodInfo.getBrand())
+									&& cmp.getKind().getNameEn().equals(prodInfo.getTitle())) {
+								prodInfo.setPbrand(cmp.getBrand().getNameCn());
+								prodInfo.setPbranden(cmp.getBrand().getNameEn());
+								prodInfo.setKind(cmp.getKind().getNameCn());
+								prodInfo.setKinden(cmp.getKind().getNameEn());
+								prodInfo.setPcmpcode(cmp.getCode());
+								prodInfo.setStandard(Constant.YES);
+							}else if (cmp.getBrand().getNameCn().equals(prodInfo.getBrand())
+									&& cmp.getKind().getNameEn().equals(prodInfo.getTitle())) {
+								prodInfo.setPbrand(cmp.getBrand().getNameCn());
+								prodInfo.setPbranden(cmp.getBrand().getNameEn());
+								prodInfo.setKind(cmp.getKind().getNameCn());
+								prodInfo.setKinden(cmp.getKind().getNameEn());
+								prodInfo.setPcmpcode(cmp.getCode());
+								prodInfo.setStandard(Constant.YES);
+							}
+						}
+					}
+				} else if (prodInfo.getCmpCode() == null) {
 					prodInfo.setCmpCode(prodInfo.getCode());
 					prodInfo.setCmpCode(prodInfo.getCode());
 				}
 				}
 				prodInfo = productDao.save(prodInfo);
 				prodInfo = productDao.save(prodInfo);

+ 121 - 30
src/main/webapp/resources/js/index/app.js

@@ -11026,7 +11026,7 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 	/**
 	/**
 	 * 新增物料(销售)
 	 * 新增物料(销售)
 	 */
 	 */
-	app.controller('NewProdInfoCtrl', ['$scope', 'GetProductInfo', '$upload', 'ngTableParams', '$stateParams', 'toaster', '$modal', 'ComponentActive', 'KindAPI', '$timeout', '$filter', 'AuthenticationService', 'BaseService', function($scope, GetProductInfo, $upload, ngTableParams, $stateParams, toaster, $modal, ComponentActive, KindAPI, $timeout, $filter, AuthenticationService, BaseService) {
+	app.controller('NewProdInfoCtrl', ['$scope', 'GetProductInfo', '$upload', 'ngTableParams', '$stateParams', 'toaster', '$modal', 'ComponentActive', 'KindAPI', '$timeout', '$filter', 'AuthenticationService', 'BaseService', 'Products', function($scope, GetProductInfo, $upload, ngTableParams, $stateParams, toaster, $modal, ComponentActive, KindAPI, $timeout, $filter, AuthenticationService, BaseService, Products) {
 		BaseService.scrollBackToTop();
 		BaseService.scrollBackToTop();
 		// 录入人
 		// 录入人
 		AuthenticationService.getAuthentication().success(function(data) {
 		AuthenticationService.getAuthentication().success(function(data) {
@@ -11068,6 +11068,51 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 			});
 			});
 		};
 		};
 
 
+		// 联想词 start
+		// 获取类目
+        $scope.getSimilarKinds = function(value) {
+            if (value) {
+                return Products.getSimilarKind({keyword : value}).$promise.then(function(data) {
+                    return data.map(function(item) {
+                        return item;
+                    });
+                });
+            }
+        };
+	    
+        $scope.onAssociateKindClick = function(kind, prodInfo) {
+        	$scope.prodInfo.title = kind.kindCn;
+        }
+        
+        $scope.getSimilarBrands = function(value) {
+        	if(value) {
+        		return Products.getSimilarBrand({keyword: value}).$promise.then(function(data) {
+        			return data.map(function(item) {
+        				return item;
+        			});
+        		});
+        	}
+        }
+        
+        $scope.onAssociateBrandClick = function(brand, prodInfo) {
+        	$scope.prodInfo.brand = brand.brandEn;
+        }
+        
+        $scope.getSimilarComponents = function(value) {
+        	if(value) {
+        		return Products.getSimilarComponent({keyword: value}).$promise.then(function(data) {
+        			return data.map(function(item) {
+        				return item;
+        			});
+        		});
+        	}
+        }
+        
+        $scope.onAssociateComponentClick = function(cmp, prodInfo) {
+        	$scope.prodInfo.cmpCode = cmp.code;
+        }
+     // 联想词 end
+        
 		// 删除
 		// 删除
 		$scope.clearfile = function() {
 		$scope.clearfile = function() {
 			$scope.myFiles = null;
 			$scope.myFiles = null;
@@ -11075,35 +11120,36 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 		}
 		}
 		//提交
 		//提交
 		$scope.submit = function(prodInfo){
 		$scope.submit = function(prodInfo){
+			console.log(prodInfo);
 			$scope.prodInfo.isSale = 1;
 			$scope.prodInfo.isSale = 1;
-			var file = $scope.myFiles, file = file && file.length > 0 ? file[0] : null;// 可以不传附件
-			$upload.upload({
-				url: 'product/baseInfo/addNewProduct',
-				file: file,
-				method: 'POST',
-				data: {
-					prodInfo: prodInfo
-				},
-			}).success(function(data) {
-				if(data.success) {
-					toaster.pop('success', '提示', data.success);
-					$timeout(function() {
-						//提交后跳转到详情页面,防止重复提交
-						window.location.href="#/sale/prodList/"+data.id;
-					}, 500);
-				}
-				if(data.error) {
-					toaster.pop('error', '提示', data.error);
-					$timeout(function() {
-						//提交后跳转到详情页面,防止重复提交
-						window.location.href="#/sale/prodList/"+data.id;
-					}, 500);
-				}
-				
-			}).error(function(data) {
-				$scope.loadingShow = false;
-				toaster.pop('error', '操作失败', data.error);
-			});
+//			var file = $scope.myFiles, file = file && file.length > 0 ? file[0] : null;// 可以不传附件
+//			$upload.upload({
+//				url: 'product/baseInfo/addNewProduct',
+//				file: file,
+//				method: 'POST',
+//				data: {
+//					prodInfo: prodInfo
+//				},
+//			}).success(function(data) {
+//				if(data.success) {
+//					toaster.pop('success', '提示', data.success);
+//					$timeout(function() {
+//						//提交后跳转到详情页面,防止重复提交
+//						window.location.href="#/sale/prodList/"+data.id;
+//					}, 500);
+//				}
+//				if(data.error) {
+//					toaster.pop('error', '提示', data.error);
+//					$timeout(function() {
+//						//提交后跳转到详情页面,防止重复提交
+//						window.location.href="#/sale/prodList/"+data.id;
+//					}, 500);
+//				}
+//				
+//			}).error(function(data) {
+//				$scope.loadingShow = false;
+//				toaster.pop('error', '操作失败', data.error);
+//			});
 		};
 		};
 		
 		
 		$scope.previewShow = false;
 		$scope.previewShow = false;
@@ -17795,7 +17841,7 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 	/**
 	/**
 	 * 新增物料(采购)
 	 * 新增物料(采购)
 	 */
 	 */
-	app.controller('PurcNewProdInfoCtrl', ['$scope', 'GetProductInfo', '$upload', 'ngTableParams', '$stateParams', 'toaster', '$modal', 'ComponentActive', 'KindAPI', '$timeout', '$filter', 'AuthenticationService', 'BaseService', function($scope, GetProductInfo, $upload, ngTableParams, $stateParams, toaster, $modal, ComponentActive, KindAPI, $timeout, $filter, AuthenticationService, BaseService) {
+	app.controller('PurcNewProdInfoCtrl', ['$scope', 'GetProductInfo', '$upload', 'ngTableParams', '$stateParams', 'toaster', '$modal', 'ComponentActive', 'KindAPI', '$timeout', '$filter', 'AuthenticationService', 'BaseService', 'Products', function($scope, GetProductInfo, $upload, ngTableParams, $stateParams, toaster, $modal, ComponentActive, KindAPI, $timeout, $filter, AuthenticationService, BaseService, Products) {
 		BaseService.scrollBackToTop();
 		BaseService.scrollBackToTop();
 		// 录入人
 		// 录入人
 		AuthenticationService.getAuthentication().success(function(data) {
 		AuthenticationService.getAuthentication().success(function(data) {
@@ -17837,6 +17883,51 @@ define([ 'toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 			});
 			});
 		};
 		};
 
 
+		// 联想词 start
+		// 获取类目
+        $scope.getSimilarKinds = function(value) {
+            if (value) {
+                return Products.getSimilarKind({keyword : value}).$promise.then(function(data) {
+                    return data.map(function(item) {
+                        return item;
+                    });
+                });
+            }
+        };
+	    
+        $scope.onAssociateKindClick = function(kind, prodInfo) {
+        	$scope.prodInfo.title = kind.kindCn;
+        }
+        
+        $scope.getSimilarBrands = function(value) {
+        	if(value) {
+        		return Products.getSimilarBrand({keyword: value}).$promise.then(function(data) {
+        			return data.map(function(item) {
+        				return item;
+        			});
+        		});
+        	}
+        }
+        
+        $scope.onAssociateBrandClick = function(brand, prodInfo) {
+        	$scope.prodInfo.brand = brand.brandEn;
+        }
+        
+        $scope.getSimilarComponents = function(value) {
+        	if(value) {
+        		return Products.getSimilarComponent({keyword: value}).$promise.then(function(data) {
+        			return data.map(function(item) {
+        				return item;
+        			});
+        		});
+        	}
+        }
+        
+        $scope.onAssociateComponentClick = function(cmp, prodInfo) {
+        	$scope.prodInfo.cmpCode = cmp.code;
+        }
+     // 联想词 end
+        
 		// 删除
 		// 删除
 		$scope.clearfile = function() {
 		$scope.clearfile = function() {
 			$scope.myFiles = null;
 			$scope.myFiles = null;

+ 16 - 0
src/main/webapp/resources/js/index/services/Product.js

@@ -110,6 +110,22 @@ define([ 'ngResource'], function() {
 			matchsize: {
 			matchsize: {
 				url: 'product/matchsize/:type',
 				url: 'product/matchsize/:type',
 				method: 'GET'
 				method: 'GET'
+			},
+			getSimilarKind: {
+				url: 'search/similarKinds',
+				method: 'GET',
+				isArray: true
+			},
+			getSimilarBrand: {
+				url: 'search/similarBrands',
+				method: 'GET',
+				isArray: true
+					
+			},
+			getSimilarComponent: {
+				url: 'search/similarComponents',
+				method: 'GET',
+				isArray: true
 			}
 			}
 		});
 		});
 	}]).factory('PurcProduct', ['$resource', function($resource) {
 	}]).factory('PurcProduct', ['$resource', function($resource) {

+ 26 - 11
src/main/webapp/resources/tpl/index/baseInfo/newProdInfo.html

@@ -105,21 +105,36 @@
         <form class="pro-add-tab pro-add-data clearfix" name="productInfo">
         <form class="pro-add-tab pro-add-data clearfix" name="productInfo">
             <div class="com_title01 sty01" style="margin-bottom: 15px;"><span>导入信息<em>*</em></span></div>
             <div class="com_title01 sty01" style="margin-bottom: 15px;"><span>导入信息<em>*</em></span></div>
             <div class="pro-list-tab row">
             <div class="pro-list-tab row">
-                <div class="col-md-2">导入产品编号:</div>
+                <div class="col-md-2">产品编号:</div>
                 <div class="col-md-4"><input type="text" ng-model="prodInfo.code" style="cursor: pointer;" required="true"></div>
                 <div class="col-md-4"><input type="text" ng-model="prodInfo.code" style="cursor: pointer;" required="true"></div>
-                <div class="col-md-2">导入产品名称:</div>
-                <div class="col-md-4"><input type="text"  ng-model="prodInfo.title" style="cursor: pointer;" required="true"></div>
+                <div class="col-md-2">产品名称:</div>
+                <div class="col-md-4">
+                	<input type="text"  ng-model="prodInfo.title" style="cursor: pointer;" required="true"
+                		ng-change="getSimilarKinds(prodInfo.title)" name="title" ng-focus="onFocus('title')"
+                		typeahead="kind.kindCn for kind in getSimilarKinds($viewValue)"
+						autocomplete="off" typeahead-on-select="onAssociateKindClick($item, prodInfo)"
+						spellcheck="false">
+                </div>
             </div>
             </div>
             <div class="pro-list-tab row">
             <div class="pro-list-tab row">
-                <div class="col-md-2">导入产品型号:</div>
+                <div class="col-md-2">产品型号:</div>
                 <div class="col-md-4">
                 <div class="col-md-4">
-                    <input type="text"  ng-model="prodInfo.cmpCode" style="cursor: pointer;" required="true" ng-click="selectKind()">
+                	<input type="text"  ng-model="prodInfo.cmpCode" style="cursor: pointer;" required="true"
+                		ng-change="getSimilarComponents(prodInfo.cmpCode)" name="title" ng-focus="onFocus('cmpCode')"
+                		typeahead="cmp.code for cmp in getSimilarComponents($viewValue)"
+						autocomplete="off" typeahead-on-select="onAssociateComponentClick($item, prodInfo)"
+						spellcheck="false">
                 </div>
                 </div>
-                <div class="col-md-2">导入品牌:</div>
-                <div class="col-md-4"><input type="text" ng-model="prodInfo.brand" placeholder="品牌" style="cursor: pointer;" readonly="readonly"></div>
+                <div class="col-md-2">产品品牌:</div>
+                <div class="col-md-4">
+                	<input type="text"  ng-model="prodInfo.brand" style="cursor: pointer;" required="true"
+                		ng-change="getSimilarBrands(prodInfo.brand)" name="title" ng-focus="onFocus('brand')"
+                		typeahead="brand.brandEn for brand in getSimilarBrands($viewValue)"
+						autocomplete="off" typeahead-on-select="onAssociateBrandClick($item, prodInfo)"
+						spellcheck="false">
             </div>
             </div>
             <div class="pro-list-tab row">
             <div class="pro-list-tab row">
-                <div class="col-md-2">导入单位:</div>
+                <div class="col-md-2">单位:</div>
                 <div class="col-md-4">
                 <div class="col-md-4">
                     <input type="text"  ng-model="prodInfo.unit" placeholder="单位" style="cursor: pointer;" list="unit">
                     <input type="text"  ng-model="prodInfo.unit" placeholder="单位" style="cursor: pointer;" list="unit">
                     <datalist id="unit">
                     <datalist id="unit">
@@ -129,17 +144,17 @@
                         <option value="M">
                         <option value="M">
                     </datalist>
                     </datalist>
                 </div>
                 </div>
-                <div class="col-md-2">导入最小包装量:</div>
+                <div class="col-md-2">最小包装量:</div>
                 <div class="col-md-4">
                 <div class="col-md-4">
                     <input type="text" ng-model="prodInfo.minPack" placeholder="最小包装量" style="cursor: pointer;" ng-pattern="/^\+?[1-9]\d*$/">
                     <input type="text" ng-model="prodInfo.minPack" placeholder="最小包装量" style="cursor: pointer;" ng-pattern="/^\+?[1-9]\d*$/">
                 </div>
                 </div>
             </div>
             </div>
             <div class="pro-list-tab row">
             <div class="pro-list-tab row">
-                <div class="col-md-2">导入最小订货量:</div>
+                <div class="col-md-2">最小订货量:</div>
                 <div class="col-md-4">
                 <div class="col-md-4">
                     <input type="text" ng-model="prodInfo.minOrder" placeholder="最小订货量" style="cursor: pointer;" ng-pattern="/^\+?[1-9]\d*$/">
                     <input type="text" ng-model="prodInfo.minOrder" placeholder="最小订货量" style="cursor: pointer;" ng-pattern="/^\+?[1-9]\d*$/">
                 </div>
                 </div>
-                <div class="col-md-2">导入交货周期:</div>
+                <div class="col-md-2">交货周期:</div>
                 <div class="col-md-4">
                 <div class="col-md-4">
                     <input type="text" ng-model="prodInfo.leadtime" placeholder="交货周期" style="cursor: pointer;" ng-pattern="/^\+?[1-9]\d*$/">
                     <input type="text" ng-model="prodInfo.leadtime" placeholder="交货周期" style="cursor: pointer;" ng-pattern="/^\+?[1-9]\d*$/">
                 </div>
                 </div>

+ 18 - 4
src/main/webapp/resources/tpl/index/purc/newProdInfo.html

@@ -105,16 +105,30 @@
                 <div class="col-md-2">物料编号:</div>
                 <div class="col-md-2">物料编号:</div>
                 <div class="col-md-4"><input type="text" ng-model="prodInfo.code" style="cursor: pointer;" required="true"></div>
                 <div class="col-md-4"><input type="text" ng-model="prodInfo.code" style="cursor: pointer;" required="true"></div>
                 <div class="col-md-2">物料名称:</div>
                 <div class="col-md-2">物料名称:</div>
-                <div class="col-md-4"><input type="text"  ng-model="prodInfo.title" style="cursor: pointer;" required="true"></div>
+                <div class="col-md-4">
+                	<input type="text"  ng-model="prodInfo.title" style="cursor: pointer;" required="true"
+                		ng-change="getSimilarKinds(prodInfo.title)" name="title" ng-focus="onFocus('title')"
+                		typeahead="kind.kindCn for kind in getSimilarKinds($viewValue)"
+						autocomplete="off" typeahead-on-select="onAssociateKindClick($item, prodInfo)"
+						spellcheck="false">
+				</div>
             </div>
             </div>
             <div class="pro-list-tab row">
             <div class="pro-list-tab row">
                 <div class="col-md-2">物料型号:</div>
                 <div class="col-md-2">物料型号:</div>
                 <div class="col-md-4">
                 <div class="col-md-4">
-                    <input type="text"  ng-model="prodInfo.cmpCode" style="cursor: pointer;" required="true" ng-click="selectKind()">
+                    <input type="text"  ng-model="prodInfo.cmpCode" style="cursor: pointer;" required="true"
+                		ng-change="getSimilarComponents(prodInfo.cmpCode)" name="title" ng-focus="onFocus('cmpCode')"
+                		typeahead="cmp.code for cmp in getSimilarComponents($viewValue)"
+						autocomplete="off" typeahead-on-select="onAssociateComponentClick($item, prodInfo)"
+						spellcheck="false">
                 </div>
                 </div>
-                <div class="col-md-2">品牌:</div>
+                <div class="col-md-2">物料品牌:</div>
                 <div class="col-md-4">
                 <div class="col-md-4">
-                    <input type="text" ng-model="prodInfo.brand" placeholder="品牌" style="cursor: pointer;" readonly="readonly">
+                    <input type="text"  ng-model="prodInfo.brand" style="cursor: pointer;" required="true"
+                		ng-change="getSimilarBrands(prodInfo.brand)" name="title" ng-focus="onFocus('brand')"
+                		typeahead="brand.brandEn for brand in getSimilarBrands($viewValue)"
+						autocomplete="off" typeahead-on-select="onAssociateBrandClick($item, prodInfo)"
+						spellcheck="false">
                 </div>
                 </div>
             </div>
             </div>
             <div class="pro-list-tab row">
             <div class="pro-list-tab row">