Browse Source

新增特殊箱號規則

callm 1 year ago
parent
commit
920d6caad6

+ 63 - 0
WebContent/app/controller/scm/reserve/BarcodeRule.js

@@ -0,0 +1,63 @@
+Ext.QuickTips.init();
+Ext.define('erp.controller.scm.reserve.BarcodeRule', {
+	extend: 'Ext.app.Controller',
+	requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil'],
+	views:[
+	       'core.form.Panel','scm.reserve.BarcodeRule','core.grid.Panel2','core.toolbar.Toolbar','core.form.MultiField','core.form.YnField',
+	       'core.button.Save','core.button.Add','core.button.Close','core.button.Delete','core.button.Update','core.trigger.TextAreaTrigger',
+	       'core.button.CopyByConfigs'
+	       ],
+	       init:function(){
+	    	   var me = this;
+	    	   me.FormUtil = Ext.create('erp.util.FormUtil');
+	    	   me.GridUtil = Ext.create('erp.util.GridUtil');
+	    	   me.BaseUtil = Ext.create('erp.util.BaseUtil');
+	    	   this.control({
+	    		   'erpGridPanel2': { 
+	    			   itemclick: this.onGridItemClick
+	    		   },	  
+	    		   'erpSaveButton': {
+	    			   click: function(btn){
+	    				var me = this;
+		       			var form = me.getForm(btn);
+		       			if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
+	       					me.BaseUtil.getRandomNumber();//自动添加编号
+	       				}
+	    			      me.FormUtil.beforeSave(me);
+	    			   }
+	    		   },
+	    		   'erpDeleteButton' : {	    			
+	    			   click: function(btn){
+	    				   me.FormUtil.onDelete({id: Number(Ext.getCmp('nr_id').value)});
+	    			   }
+	    		   },
+	    		   'erpUpdateButton': {
+	    			   afterrender: function(btn){
+	    			   	var status = Ext.getCmp(me.getForm(btn).statuscodeField);
+	    			   	if(status && status.value != 'ENTERING'){
+	    					btn.hide();
+	    				}
+	    			   },
+	    			   click: function(btn){
+	    			     this.FormUtil.onUpdate(this);
+	    			   }
+	    		   },
+	    		   'erpAddButton': {
+	    			   click: function(){
+	    				   me.FormUtil.onAdd('add' + caller, '新增条码规则', "jsps/scm/reserve/barcodeRule.jsp?whoami=" + caller);
+	    			   }
+	    		   },
+	    		   'erpCloseButton': {
+	    			   click: function(btn){
+	    				   me.FormUtil.beforeClose(me);
+	    			   }
+	    		   },	    		 
+	    	   });
+	       },
+	       getForm: function(btn){
+	    	   return btn.ownerCt.ownerCt;
+	       },
+	       onGridItemClick: function(selModel, record){//grid行选择
+   				this.GridUtil.onGridItemClick(selModel, record);
+	       }
+});

+ 28 - 0
WebContent/app/view/scm/reserve/BarcodeRule.js

@@ -0,0 +1,28 @@
+Ext.define('erp.view.scm.reserve.BarcodeRule',{ 
+	extend: 'Ext.Viewport', 
+	layout: 'anchor', 
+	hideBorders: true, 
+	initComponent : function(){ 
+		var me = this; 
+		Ext.apply(me, { 
+			items: [{
+				xtype: 'erpFormPanel',
+				anchor: '100% 30%',
+				saveUrl: 'scm/reserve/saveNoRule.action?caller=' +caller,
+				deleteUrl: 'scm/reserve/deleteNoRule.action?caller=' +caller,
+				updateUrl: 'scm/reserve/updateNoRule.action?caller=' +caller,
+				getIdUrl: 'common/getId.action?seq=NoRule_SEQ',
+				keyField: 'nr_id',
+				codeField: 'nr_code',
+			},{			
+				xtype: 'erpGridPanel2',
+				anchor: '100% 70%', 
+				detno: 'nrd_detno',
+				keyField: 'nrd_id',
+				mainField: 'nrd_nrid',
+				allowExtraButtons : true			
+			}]
+		}); 
+		me.callParent(arguments); 
+	} 
+});

+ 37 - 0
WebContent/jsps/scm/reserve/barcodeRule.jsp

@@ -0,0 +1,37 @@
+<%@ page language="java" contentType="text/html; charset=utf-8"
+    pageEncoding="utf-8"%>
+<%
+String path = request.getContextPath();
+String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
+%>
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" href="<%=basePath %>resource/ext/resources/css/ext-all-gray.css" type="text/css"></link>
+<link rel="stylesheet" href="<%=basePath %>resource/css/main.css" type="text/css"></link>
+<script type="text/javascript" src="<%=basePath %>resource/ext/ext-all.js"></script>
+<script type="text/javascript" src="<%=basePath %>resource/i18n/i18n.js"></script>
+<script type="text/javascript" src="<%=basePath %>resource/lodopActivex/LodopsFuncs.js"></script> 
+<script type="text/javascript">	
+Ext.Loader.setConfig({
+	enabled: true
+});//开启动态加载
+Ext.application({
+    name: 'erp',//为应用程序起一个名字,相当于命名空间
+    appFolder: basePath+'app',//app文件夹所在路径
+    controllers: [//声明所用到的控制层
+        'scm.reserve.BarcodeRule'
+    ],
+    launch: function() {
+    	Ext.create('erp.view.scm.reserve.BarcodeRule');//创建视图
+    }
+});
+var caller = getUrlParam('whoami');
+var formCondition = '';
+var gridCondition = '';
+</script>
+</head>
+<body >
+</body>
+</html>

+ 73 - 0
src/com/uas/mes/scm/controller/NoRuleController.java

@@ -0,0 +1,73 @@
+package com.uas.mes.scm.controller;
+
+import com.uas.mes.scm.service.NoRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Controller
+public class NoRuleController {
+
+	@Autowired 
+	private NoRuleService  noRuleService;
+	
+	@RequestMapping("/scm/reserve/saveNoRule.action")  
+	@ResponseBody 
+	public Map<String, Object> saveNoRule(String caller, String formStore, String param) {
+		Map<String, Object> modelMap = new HashMap<String, Object>();
+		noRuleService.saveNoRule(caller,formStore, param);
+		modelMap.put("success", true);
+		return modelMap;
+	}
+	
+	@RequestMapping("/scm/reserve/updateNoRule.action")  
+	@ResponseBody 
+	public Map<String, Object> updateNoRule(String caller, String formStore, String param) {
+		Map<String, Object> modelMap = new HashMap<String, Object>();
+		noRuleService.updateNoRule(caller,formStore, param);
+		modelMap.put("success", true);
+		return modelMap;
+	}
+	
+	@RequestMapping("/scm/reserve/deleteNoRule.action")  
+	@ResponseBody 
+	public Map<String, Object> deleteNoRule(String caller, int id) {
+		Map<String, Object> modelMap = new HashMap<String, Object>();
+		noRuleService.deleteNoRule(caller,id);
+		modelMap.put("success", true);
+		return modelMap;
+	}
+	
+	@RequestMapping("/scm/reserve/saveRuleMaxNum.action")  
+	@ResponseBody 
+	public Map<String, Object> saveRuleMaxNum(String caller, String formStore, String param) {
+		Map<String, Object> modelMap = new HashMap<String, Object>();
+		noRuleService.saveRuleMaxNum(caller,formStore, param);
+		modelMap.put("success", true);
+		return modelMap;
+	}
+	
+	@RequestMapping("/scm/reserve/updateRuleMaxNum.action")  
+	@ResponseBody 
+	public Map<String, Object> updateRuleMaxNum(String caller, String formStore, String param) {
+		Map<String, Object> modelMap = new HashMap<String, Object>();
+		noRuleService.updateRuleMaxNum(caller,formStore, param);
+		modelMap.put("success", true);
+		return modelMap;
+	}
+	
+	@RequestMapping("/scm/reserve/deleteRuleMaxNum.action")  
+	@ResponseBody 
+	public Map<String, Object> deleteRuleMaxNum(String caller, int id) {
+		Map<String, Object> modelMap = new HashMap<String, Object>();
+		noRuleService.deleteRuleMaxNum(caller,id);
+		modelMap.put("success", true);
+		return modelMap;
+	}
+	
+	
+}

+ 16 - 0
src/com/uas/mes/scm/service/NoRuleService.java

@@ -0,0 +1,16 @@
+package com.uas.mes.scm.service;
+
+public interface NoRuleService {
+
+	 void saveNoRule(String caller, String formStore, String param);
+
+	 void updateNoRule(String caller, String formStore, String param);
+
+	 void deleteNoRule(String caller, int id);
+
+	 void saveRuleMaxNum(String caller, String formStore, String param);
+
+	 void updateRuleMaxNum(String caller, String formStore, String param);
+
+	 void deleteRuleMaxNum(String caller, int id);
+}

+ 238 - 0
src/com/uas/mes/scm/service/impl/NoRuleServiceImpl.java

@@ -0,0 +1,238 @@
+package com.uas.mes.scm.service.impl;
+
+
+import com.uas.mes.common.data.BaseDao;
+import com.uas.mes.common.support.HandlerService;
+import com.uas.mes.scm.service.NoRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.uas.mes.common.util.BaseUtil;
+import com.uas.mes.common.data.SqlUtil;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+@Service("noRuleService")
+public class NoRuleServiceImpl implements NoRuleService {
+	@Autowired  
+	private BaseDao baseDao;
+	@Autowired
+	private HandlerService handlerService;
+
+	@Override
+	public void saveNoRule(String caller,String formStore, String gridStore) {
+		Map<Object, Object> store = BaseUtil.parseFormStoreToMap(formStore);
+		List<Map<Object, Object>> grid = BaseUtil.parseGridStoreToMaps(gridStore);
+		
+		boolean bool = baseDao.checkByCondition("Norule", "nr_code='" + store.get("nr_code") + "'");
+		if (!bool) {
+			BaseUtil.showError(BaseUtil.getLocalMessage("common.save_codeHasExist"));
+		}
+		if(store.get("nr_custcode") != null && !"".equals(store.get("nr_custcode"))){
+			bool = baseDao.checkByCondition("Norule", "nr_custcode='" + store.get("nr_custcode") + "'");			
+			if(!bool){
+				BaseUtil.showError("客户编号 :"+store.get("nr_custcode")+"已经存在对应的条码规则");
+			}
+		}
+		Set<Object> isRepeat = new HashSet<Object>();
+		for(int i = 0 ; i < grid.size(); i++){
+			Object sql = grid.get(i).get("nrd_sql");
+			Object detno = grid.get(i).get("nrd_detno");
+			Object valuetype = grid.get(i).get("nrd_type");
+			Object length = grid.get(i).get("nrd_length");
+			Object radix = grid.get(i).get("nrd_radix");
+			isRepeat.add(detno);
+			if(("流水").equals(valuetype)){
+				if(length== null || "".equals(length) || (Integer.valueOf(length.toString()) == 0)){					
+					BaseUtil.showError("类型为流水,参数长度不允许为空");
+				}else if(Integer.valueOf(length.toString()) < 0){
+					BaseUtil.showError("参数长度不合法");
+				}
+				if(radix== null || "".equals(radix) || (Integer.valueOf(radix.toString()) == 0)){					
+					BaseUtil.showError("类型为流水,流水进制不允许为空");
+				}else if(Integer.valueOf(radix.toString()) < 0){
+					BaseUtil.showError("流水进制不合法");
+				}
+			}
+			if(sql!=null&&!"".equals(sql)){
+				if(!("常量").equals(valuetype)){					
+					checkSql(sql.toString(),detno);
+				}
+			}else{
+				if(("SQL").equals(valuetype)){
+					BaseUtil.showError("类型为SQL,sql语句不允许为空");
+				}else if(("常量").equals(valuetype)){
+					BaseUtil.showError("类型为常量,sql语句不允许为空");
+				}
+			}
+		}
+		if(isRepeat.size()!=grid.size()){
+			BaseUtil.showError("序号重复");
+		}
+		// 执行保存前的其它逻辑
+		handlerService.handler(caller, "save", "before", new Object[] {store, grid});	
+		String formSql = SqlUtil.getInsertSqlByFormStore(store, "Norule", new String[] {}, new Object[] {});
+		List<String> gridSql = SqlUtil.getInsertSqlbyList(grid, "NoruleDetail", "nrd_id");
+		/*baseDao.execute(gridSql);*/
+		String errors = baseDao
+				.executeWithCheck(gridSql, null,
+						"select wm_concat(nrd_type) from (select distinct nrd_type from NoRuleDetail where nrd_nrid = "+store.get("nr_id")+" and nrd_type='流水' group by nrd_type having count(1)>1)");
+		if(errors != null && errors != "null"){
+			BaseUtil.showError("参数类型为流水的只能存在一个");
+		}
+		baseDao.execute(formSql);
+		baseDao.execute("update norule a set nr_isdefault = 0 where exists(select 1 from norule b where b.nr_id=? and nvl(b.nr_isdefault,0)<>0 and nvl(b.nr_custcode,' ')=nvl(a.nr_custcode,' ') and a.nr_id<>?) "
+				+ "and nvl(a.nr_isdefault,0)<>0",store.get("nr_id"),store.get("nr_id"));
+		baseDao.execute("update NoRuleDetail  set nrd_nrcode = (select nr_code from norule where nrd_nrid = nr_id) where nrd_nrid = ? and nvl(nrd_nrcode,' ')=' '",store.get("nr_id"));
+		
+		baseDao.logger.save(caller, "nr_id", store.get("nr_id"));
+		// 执行保存后的其它逻辑
+		handlerService.handler(caller, "save", "after", new Object[] {store, grid});			
+	}
+
+	@Override
+	public void updateNoRule(String caller,String formStore, String param) {
+		Map<Object, Object> store = BaseUtil.parseFormStoreToMap(formStore);
+		List<Map<Object, Object>> grid = BaseUtil.parseGridStoreToMaps(param);
+		// 当前编号的记录已经存在,不能修改!
+		boolean bool = baseDao.checkByCondition("Norule", "nr_code='" + store.get("nr_code") + "' and nr_id<>"+store.get("nr_id"));
+		if(!bool){
+			BaseUtil.showError(BaseUtil.getLocalMessage("common.save_codeHasExist"));
+		}	
+		if(store.get("nr_custcode") != null && !"".equals(store.get("nr_custcode"))){
+			bool = baseDao.checkByCondition("Norule", "nr_custcode='" + store.get("nr_custcode") + "' and nr_id <> "+store.get("nr_id"));			
+			if(!bool){
+				BaseUtil.showError("客户编号 :"+store.get("nr_custcode")+"已经存在对应的条码规则");
+			}
+		}
+		Set<Object> isRepeat = new HashSet<Object>();
+		for(int i = 0 ; i < grid.size(); i++){
+			Object sql = grid.get(i).get("nrd_sql");
+			Object detno = grid.get(i).get("nrd_detno");
+			Object valuetype = grid.get(i).get("nrd_type");
+			Object length = grid.get(i).get("nrd_length");
+			Object radix = grid.get(i).get("nrd_radix");
+			isRepeat.add(detno);
+			if(("流水").equals(valuetype)){
+				if(length== null || "".equals(length) || (Integer.valueOf(length.toString()) == 0)){					
+					BaseUtil.showError("类型为流水,参数长度不允许为空");
+				}else if(Integer.valueOf(length.toString()) < 0){
+					BaseUtil.showError("参数长度不合法");
+				}
+				if(radix== null || "".equals(radix) || (Integer.valueOf(radix.toString()) == 0)){					
+					BaseUtil.showError("类型为流水,流水进制不允许为空");
+				}else if(Integer.valueOf(radix.toString()) < 0){
+					BaseUtil.showError("流水进制不合法");
+				}
+			}
+			if(sql!=null&&!"".equals(sql)){
+				if(!("常量").equals(valuetype)){					
+					checkSql(sql.toString(),detno);
+				}
+			}else{
+				if(("SQL").equals(valuetype)){
+					BaseUtil.showError("类型为SQL,sql语句不允许为空");
+				}else if(("常量").equals(valuetype)){
+					BaseUtil.showError("类型为常量,sql语句不允许为空");
+				}
+			}
+		}
+		if(isRepeat.size()!=grid.size()){
+			BaseUtil.showError("序号重复");
+		}
+		String formSql = SqlUtil.getUpdateSqlByFormStore(store, "Norule", "nr_id");
+		List<String> gridSql = SqlUtil.getInsertOrUpdateSql(grid, "NoRuleDetail", "nrd_id");
+		/*baseDao.execute(gridSql);*/
+		String errors = baseDao
+				.executeWithCheck(gridSql, null,
+						"select wm_concat(nrd_type) from (select distinct nrd_type from NoRuleDetail where nrd_nrid = "+store.get("nr_id")+" and nrd_type='流水' group by nrd_type having count(1)>1)");
+		if(errors != null && errors != "null"){
+			BaseUtil.showError("参数类型为流水的只能存在一个");
+		}
+		baseDao.execute(formSql);
+		baseDao.execute("update norule a set nr_isdefault = 0 where exists(select 1 from norule b where b.nr_id=? and nvl(b.nr_isdefault,0)<>0 and nvl(b.nr_custcode,' ')=nvl(a.nr_custcode,' ') and a.nr_id<>?) "
+				+ "and nvl(a.nr_isdefault,0)<>0",store.get("nr_id"),store.get("nr_id"));
+		baseDao.execute("update NoRuleDetail  set nrd_nrcode = (select nr_code from norule where nrd_nrid = nr_id) where nrd_nrid = ?",store.get("nr_id"));
+		//记录操作
+		baseDao.logger.update(caller, "nr_id", store.get("nr_id"));
+}
+
+	@Override
+	public void deleteNoRule(String caller, int id) {
+	
+		//执行删除前的其它逻辑
+		handlerService.beforeDel(caller, id);
+		//删除BarcodeSet
+		baseDao.deleteById("NoRule", "nr_id", id);
+		//删除BarcodeSetdetail
+		baseDao.deleteById("NoRuleDetail", "nrd_nrid", id);
+		//记录操作
+		baseDao.logger.delete(caller, "nr_id", id);
+		//执行删除后的其它逻辑
+		handlerService.afterDel(caller, id);	
+	}
+
+	private void checkSql(String sql,Object detno) {
+		
+		String value = sql.toUpperCase().replaceAll("(\n|\t)", "");
+		String regex = "[\\{].*?[\\}]";
+		String va = value.replaceAll(regex, "\\'1\\'");
+		if(va.matches(".*(UPDATE|DELETE|TRUNCATE|ALTER|DROP|FLUSH|INSERT|SET|CREATE)\\s+.*")){
+			BaseUtil.showError("取值SQL语句不允许包含DELETE、UPDATE、DROP行号:"+detno);
+		}
+		try {
+			baseDao.execute(va);
+		} catch (Exception e) {
+			BaseUtil.showError("取值SQL语句不合法!行号:"+detno);
+		}
+		
+	}
+
+	@Override
+	public void saveRuleMaxNum(String caller, String formStore, String param) {
+		Map<Object, Object> store = BaseUtil.parseFormStoreToMap(formStore);
+		boolean bool = baseDao.checkByCondition("RuleMaxNum", "rmn_nrcode='" + store.get("rmn_nrcode") + "'");
+		if (!bool) {
+			BaseUtil.showError(BaseUtil.getLocalMessage("common.save_codeHasExist"));
+		}
+		// 执行保存前的其它逻辑
+		handlerService.handler(caller, "save", "before", new Object[] {store});	
+		String formSql = SqlUtil.getInsertSqlByFormStore(store, "RuleMaxNum", new String[] {}, new Object[] {});
+		baseDao.execute(formSql);
+		baseDao.logger.save(caller, "rmn_id", store.get("rmn_id"));
+		// 执行保存后的其它逻辑
+		handlerService.handler(caller, "save", "after", new Object[] {store});			
+	
+		
+	}
+
+	@Override
+	public void updateRuleMaxNum(String caller, String formStore, String param) {
+		Map<Object, Object> store = BaseUtil.parseFormStoreToMap(formStore);
+		// 当前编号的记录已经存在,不能修改!
+		boolean bool = baseDao.checkByCondition("RuleMaxNum", "rmn_nrcode='" + store.get("rmn_nrcode") + "' and rmn_id<>"+store.get("rmn_id"));
+		if(!bool){
+			BaseUtil.showError(BaseUtil.getLocalMessage("common.save_codeHasExist"));
+		}	
+		
+		String formSql = SqlUtil.getUpdateSqlByFormStore(store, "RuleMaxNum", "rmn_id");
+		baseDao.execute(formSql);
+		//记录操作
+		baseDao.logger.update(caller, "rmn_id", store.get("rmn_id"));
+}
+
+	@Override
+	public void deleteRuleMaxNum(String caller, int id) {
+		//执行删除前的其它逻辑
+		handlerService.beforeDel(caller, id);
+		//删除BarcodeSet
+		baseDao.deleteById("RuleMaxNum", "rmn_id", id);
+		//记录操作
+		baseDao.logger.delete(caller, "rmn_id", id);
+		//执行删除后的其它逻辑
+		handlerService.afterDel(caller, id);	
+	}
+	
+}