flex java spring hibernate

本文介绍了一个图书管理系统的详细设计,包括Flex客户端的实现细节与Java服务端的业务逻辑处理。该系统支持图书信息的增删改查操作,并具备权限控制、编码自动生成等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在这里学习到最多,渐渐的开始不怎么写代码了。

做个笔记记录下。

 

Flex客户端

/*
 * Book.as
 * 
 * Copyright @2013-2099 Change Soft, All Rights Reserved
 */
package ce.book.bsc
{
	import ce.org.Organ;
	import ce.pub.common.LinearObject;
	import ce.system.access.User;
	
	/**
	 * <p>图书</p>
	 *
	 * @author ZengWenFeng
	 * @version 1.00
	 * 
	 * <pre>
	 * 修改记录:
	 * 修改后版本		修改人   		修改日期   		修改内容
	 * 2013-05-13.1		ZengWenFeng   		2013-05-13		create
	 * </pre>
	 */
	[Bindable]
	[RemoteClass(alias="ce.book.bsc.Book")]
	public class Book extends LinearObject
	{
		/**
		 * 图书类型
		 * 
		 * @author ZengWenFeng
		 */
		public var type: BookType;
		 
		/**
		 * 编码
		 * 
		 * @author ZengWenFeng
		 */
		public var code: String;
		
		/**
		 * 名称
		 * 
		 * @author ZengWenFeng
		 */
		public var name: String;
		
		/**
		 * 国际标准书号(International Standard Book Number)
		 * 
		 * @author ZengWenFeng
		 */
		public var isbn: String; 
		
		/**
		 * 创建时间
		 * 
		 * @author ZengWenFeng
		 */ 
		public var crtDt: Date;
		
		/**
		 * 组织
		 * 
		 * @author ZengWenFeng
		 */
		public var organ: Organ;
	
		/**
		 * 编制人
		 * 
		 * @author ZengWenFeng
		 */
		public var author: User;
		
		/**
		 * 备注
		 * 
		 * @author ZengWenFeng
		 */
		public var memo: String;
		
		/**
		 * 定价
		 * 
		 * @author ZengWenFeng
		 */ 
		public var price: Number;
		
		/**
		 * 主编
		 * 
		 * @author ZengWenFeng
		 */ 
		public var editor: String;
		
		/**
		 * 出版社
		 * 
		 * @author ZengWenFeng
		 */ 
		public var press: String;
		
		/**
		 * 查询关键字
		 * 
		 * @author ZengWenFeng
		 */
		public var srchKey:String;
		
		/**
		 * 构造函数
		 * 
		 * @author ZengWenFeng
		 * @date 2013-05-13
		 */
		public function Book()
		{
			super();
		}
	}
}

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearObjPageMgr xmlns="ce.pub.common.*" xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:ce="ce.controls.*"
	label="图书管理" creationComplete="init()" showPageSize="true">
	<!--
	/**
	 * <p>图书管理</p>
	 *
	 * @author ZengWenFeng
	 * @version 1.00
	 * 
	 * <pre>
	 * 修改记录:
	 * 修改后版本		修改人   		修改日期   		修改内容
	 * 2013-05-13.1		ZengWenFeng   		2013-05-13		create
	 * 2013-06-05.1		ZengWenFeng		2013-06-05		修改网格列排序,添加sortableColumns="false" sortExpertMode="true"
	 * </pre>
	 */
	-->
	<mx:Script>
		<![CDATA[
			import mx.utils.ObjectUtil;
			import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.remoting.RemoteObject;
			import ce.system.access.AccessMgr;
			import mx.rpc.events.ResultEvent;
			import mx.events.CloseEvent;
			import ce.windows.ErrorWindow;
			import ce.windows.MessageWindow;
			import ce.pub.common.CommonDlg;
			import ce.system.sysutil.SysCtx;
			
			/**
			 * 服务类id
			 */
			public static const SERVICE_BOOK_MANAGER: String = "ce.book.bsc.BookMgr";
			
			/**
			 * 生成界面
			 * 
			 * @author ZengWenFeng
			 * @date 2013-05-13
			 */ 
			override protected function createChildren(): void
			{
				//
				super.createChildren();
				
				// 不显示查看按钮
				toolBar.removeChild(btnView);
			}
			
			/**
			 * 协调按钮状态
			 * 
			 * @author ZengWenFeng
			 * @date 2013-05-13
			 */
			override public function adjustBtnStatus(value: Object = null): void
			{
				//
				super.adjustBtnStatus(value);
				
				//判断是否有对应的操作权限				
				var canAdd: Boolean = AccessMgr.chkAcc(SERVICE_BOOK_MANAGER, "doAdd") == AccessMgr.RIGHT_ENABLED;
				var canMod: Boolean = AccessMgr.chkAcc(SERVICE_BOOK_MANAGER, "doModify") == AccessMgr.RIGHT_ENABLED;
				var canDel: Boolean = AccessMgr.chkAcc(SERVICE_BOOK_MANAGER, "doDel") == AccessMgr.RIGHT_ENABLED;
				var canExp: Boolean = AccessMgr.chkAcc(SERVICE_BOOK_MANAGER, "doExp") == AccessMgr.RIGHT_ENABLED;
				var canPrt: Boolean = AccessMgr.chkAcc(SERVICE_BOOK_MANAGER, "doPrint") == AccessMgr.RIGHT_ENABLED;
				
				//
				btnAdd.enabled = btnAdd.enabled && canAdd;
				btnModify.enabled = btnModify.enabled && canMod;
				btnDel.enabled = btnDel.enabled && canDel;
				btnExp.enabled = btnExp.enabled && canExp;
				btnPreview.enabled = btnPreview.enabled && canPrt;
				btnPrint.enabled = btnPrint.enabled && canPrt;
			}
			
			/**
			 * 初始化
			 */
			protected function init(): void
			{
				// 查询首页
				curPageNo = 1;
				
				load();
			}
			
			/**
			 * 获取记录数
			 * 
			 * @author ZengWenFeng
			 * @date 2013-05-13
			 */
			override public function getCount(): void
			{
				var prmIn: Object = SysCtx.getPrmIn();
				condition.orgId = SysCtx.organ.id;
				prmIn.condition = condition;
				
				//
				var ro: RemoteObject = new RemoteObject();
				ro.destination = SERVICE_BOOK_MANAGER;
				ro.getCount(prmIn);
				ro.addEventListener(FaultEvent.FAULT, ErrorWindow.faultHandler);
				ro.addEventListener(ResultEvent.RESULT, function (event: ResultEvent): void
                {
                	refreshUI(event.result);				                                        	
                });
			}
			
			/**
			 * 加载分页
			 * 
			 * @author ZengWenFeng
			 */
			override public function load():void
			{
				//
				var prmIn: Object = SysCtx.getPrmIn();
				condition.orgId = SysCtx.organ.id;
				condition.pageNo = curPageNo;
				condition.pageSize = pageSize;				
				prmIn.condition = condition;
				
				//
				var ro: RemoteObject = new RemoteObject();
				ro.destination = SERVICE_BOOK_MANAGER;
				ro.doQuery(prmIn);
				ro.addEventListener(FaultEvent.FAULT, ErrorWindow.faultHandler);
				ro.addEventListener(ResultEvent.RESULT, function (event: ResultEvent): void
                {                    	
                	refreshUI(event.result.items);
                });
			}
			
			/**
			 * 查询
			 * 
			 * @author ZengWenFeng
			 */
			override public function query(event: MouseEvent): void
			{
				var dlg: BookQryDlg = new BookQryDlg();
				dlg.condition = condition;
				dlg.showDlg();
				dlg.addEventListener(CommonDlg.DLG_CLOSE, function (event: CloseEvent): void
			    {
			    	if (event.detail == CommonDlg.CANCEL)
			    	{
			    		return;
			    	}
			    	
			    	// 查询首页
			    	pageSize = nsPageSize.value;
					curPageNo = 1;
					load(); 	
			    });
			}
			
			/**
			 * 新增
			 * 
			 * @author ZengWenFeng
			 * @date 2013-05-13
			 * @param event
			 */
			override public function add(event: MouseEvent): void
			{
				var dlg: BookDlg = new BookDlg();
				dlg.mode = CommonDlg.MODE_ADD;
				dlg.addEventListener(CommonDlg.ADD_COMPLETE, addDataToUI);
				dlg.showDlg();
			}
			
			/**
			 * 新增完成后添加到界面上
			 * 
			 * @author ZengWenFeng
			 * @date 2013-05-13
			 * @param event
			 */
			protected function addDataToUI(event: Event): void
			{	
				var newObj: Book = event.currentTarget.newObj;				
				defGridData.addItem(newObj);		
			}
			
			/**
			 * 修改
			 * 
			 * @author ZengWenFeng
			 * @date 2013-05-13
			 * @param event
			 */
			override public function modify(event: MouseEvent): void
			{
				if (!btnModify.enabled)
				{ 
					return;
				}
				
				showDlg(defGrid.selectedItem as Book, CommonDlg.MODE_MOD);
			}
			
			/**
			 * 浏览
			 * 
			 * @author ZengWenFeng
			 * @date 2013-05-13
			 * @param event
			 */
			override public function view(event: MouseEvent): void
			{
				showDlg(defGrid.selectedItem as Book, CommonDlg.MODE_VIW);
			}
			
			/**    		 
    		 * 显示对话框
    		 * 
    		 * @author ZengWenFeng
    		 * @param item 选中对象
    		 * @param mode 显示对话框模式
    		 */
			protected function showDlg(item: Book, mode: String): void
			{
				var dlg: BookDlg = new BookDlg();
				dlg.mode = mode;
				dlg.oldObj = item;
				
				dlg.addEventListener(CommonDlg.MOD_COMPLETE,
					function (event: Event): void
					{
						modDataToUI(item, event.currentTarget.newObj);
					});
				dlg.addEventListener(CommonDlg.DEL_COMPLETE,
					function (event: Event): void
					{
						delDataFromUI(item);
					});
				
				dlg.showDlg();
			}
			
			/**
			 * 修改完成后更新界面
			 * 
			 * @author ZengWenFeng
			 * @param oldObj 旧对象
			 * @param newObj 新对象
			 */
			private function modDataToUI(oldObj: Book, newObj: Book): void
			{
				// 删除原有的对象,并在原来的位置插入修改后的对象
				var index: int = defGridData.getItemIndex(oldObj);
				defGridData.removeItemAt(index);
				defGridData.addItemAt(newObj, index);
				
				// 选中修改后的对象
				defGrid.selectedItem = newObj;
			}
			
			/**
			 * 删除
			 * 
			 * @author ZengWenFeng
			 * @date 2013-05-13
			 * @param event
			 */
			override public function del(event: MouseEvent): void
			{
				//获取要删除的对象
				var item: Book = defGrid.selectedItem as Book;
				
				//提示删除
				MessageWindow.show("确定要删除图书[" + item.name + "]吗?", "提示",
					MessageWindow.MB_OKCANCEL,
					MessageWindow.MB_ICONQUESTION,
					MessageWindow.MB_DEFBUTTON2,
					function (event: CloseEvent): void
					{
						if (event.detail != MessageWindow.OK)
						{
							return;
						}
						
						var ro: RemoteObject = new RemoteObject();
						ro.destination = SERVICE_BOOK_MANAGER;
						ro.addEventListener(FaultEvent.FAULT, ErrorWindow.faultHandler);
						ro.addEventListener(ResultEvent.RESULT,
							function (resultEvent:ResultEvent):void
							{
								delDataFromUI(item);
							});
							
						var params: Object = SysCtx.getPrmIn();
						params.item = item;
						
						ro.doDel(params);
					});
			}
			
			/**
			 * 删除后从界面上删除数据
			 */
			protected function delDataFromUI(item: Book): void
			{
				defGridData.removeItemAt(defGridData.getItemIndex(item));
			}
			
			/**
			 * 格式化名称
			 * 
			 * @author ZengWenFeng
			 */
			private function formatName(item: Object, column: AdvancedDataGridColumn): String
			{								
				return item[column.dataField] ? item[column.dataField].name : "";
			}
			
			/**
			 * 格式化金额
			 * 
			 * @author ZengWenFeng
			 */
			private function formatAmt(item: Object, column: AdvancedDataGridColumn): String
			{								
				return item[column.dataField] == 0 ? "" : Number(item[column.dataField]).toFixed(2);
			}
			
			/**
			 * 图书类型排序比较
			 * 
			 * @author ZengWenFeng
			 * @param obj1 数据1
			 * @param obj2 数据2 
			 */
			private function sortCompareType(obj1:Object, obj2:Object):int
			{
				if (obj1.type && obj2.type)
				{
					return ObjectUtil.stringCompare(obj1.type.name, obj2.type.name);
				}
				else
				{
					return ObjectUtil.compare(obj1.type, obj2.type);
				}
			}
		]]>
	</mx:Script>
	<ce:CeAdvancedDataGrid width="100%" height="100%" dataProvider="{defGridData}" sortableColumns="false" sortExpertMode="true">	    
		<ce:columns>
			<mx:AdvancedDataGridColumn headerText="编码" dataField="code"/>
			<mx:AdvancedDataGridColumn headerText="名称" dataField="name"/>			
			<mx:AdvancedDataGridColumn headerText="出版号" dataField="isbn"/>
			<mx:AdvancedDataGridColumn headerText="定价" dataField="price" textAlign="right" labelFunction="formatAmt"/>
			<mx:AdvancedDataGridColumn headerText="主编" dataField="editor"/>
			<mx:AdvancedDataGridColumn headerText="出版社" dataField="press"/>
			<mx:AdvancedDataGridColumn headerText="图书类型" dataField="type" labelFunction="formatName" sortCompareFunction="sortCompareType"/>			
	 		<mx:AdvancedDataGridColumn headerText="备注" dataField="memo"/>
		</ce:columns>
	</ce:CeAdvancedDataGrid>	
</LinearObjPageMgr>

 

<?xml version="1.0" encoding="utf-8"?>
<LinearObjDlgEx xmlns="ce.pub.common.*" xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:ce="ce.controls.*" 
	width="530" height="220" layout="absolute">
	<!--
	/**
	 * <p>图书对话框</p>
	 *
	 * @author ZengWenFeng
	 * @version 1.00
	 *
	 * <pre>
	 * 修改记录:
	 * 修改后版本		修改人   		修改日期   		修改内容
	 * 2013-05-13.1		ZengWenFeng   		2013-05-13		create
	 * </pre>
	 */
	--> 
	<mx:Script>
		<![CDATA[
			import ce.system.sysutil.TreeProviderFactory;
			import mx.utils.ObjectUtil;
			import ce.pub.util.MnemHelper;
    		import ce.windows.ErrorWindow;
    		import ce.windows.MessageWindow;
    		import mx.utils.StringUtil;    		
    		import mx.rpc.events.FaultEvent;
    		import mx.rpc.events.ResultEvent;
    		import mx.rpc.remoting.RemoteObject;
    		import ce.system.sysutil.SysCtx;
    		import ce.pub.common.CommonDlg;
	 		
	 		/**
	   		 * 图书服务类标识
	   		 * 
	   		 * @author ZengWenFeng
	   		 */ 
	   		public static const SERVICE_BOOK_MANAGER: String = "ce.book.bsc.BookMgr";
	   		
	 	    /**
    		 * 旧对象
    		 * 
    		 * @author ZengWenFeng
    		 */
    		public var oldObj: Book;
    		
    		/**
    		 * 新对象
    		 * 
    		 * @author ZengWenFeng
    		 */
    		public var newObj: Book;
    		
    		/**    		 
    		 * 显示对话框
    		 * 
    		 * @author ZengWenFeng
    		 */
     	    override public function showDlg(): void
     	    {
     	    	// 如果是新增模式,则直接显示编辑界面
     	    	if (mode == MODE_ADD)
     	    	{
     	    		show();
     	    	}
     	    	// 否则获取图书
     	    	else
     	    	{
     	    		//
     	    		var prmIn: Object = SysCtx.getPrmIn();
					prmIn.id = oldObj.id;
					ro.getById(prmIn);
					
					//
     	    		var ro: RemoteObject = new RemoteObject();
					ro.destination = SERVICE_BOOK_MANAGER;
					ro.addEventListener(FaultEvent.FAULT, ErrorWindow.faultHandler);
					ro.addEventListener(ResultEvent.RESULT, function (e: ResultEvent): void
				    {
				        if (e.result.item == null)
				        {  
				            MessageWindow.show("图书[" + oldObj.name + "]已被删除!", "提示", MessageWindow.MB_OK, MessageWindow.MB_ICONINFORMATION);
	                    	
	                    	// 发生删除结束事件
							dispatchEvent(new Event(DEL_COMPLETE));
	                    		
	                        return;					              	
				        }
				        
				        // 
				        oldObj = e.result.item as Book;
				        
				        //
				        show();
				    });
     	    	}
     	    }
     	    
     	    /**
     	     * 初始化
     	     * 
     	     * @author ZengWenFeng
     	     */  
     	    override protected function init(): void
     	    {
     	    	tfType.treeProvider.addParameter("organ.id = '" + SysCtx.organ.id + "'");
     	    	
				super.init();     	    
     	    }
			
			/**
			 * 清空界面
			 * 
			 * @author ZengWenFeng
			 */
	 		override protected function cleanUI(): void
	 		{
	 			var prmIn:Object = SysCtx.getPrmIn();
	 			prmIn.orgId = SysCtx.organ.id;
	 				
	 			// 获取新编码
	 			var ro:RemoteObject = new RemoteObject();
	 			ro.destination = SERVICE_BOOK_MANAGER;
	 			ro.newCode(prmIn);
	 			ro.addEventListener(FaultEvent.FAULT, ErrorWindow.faultHandler);
	 			ro.addEventListener(ResultEvent.RESULT, function (event:ResultEvent):void
 				{
 					txtCode.text = event.result as String;
 					comparator.append(txtCode);
 				});
	 			
	 			//清空数据
				txtName.text = "";				
				txtIsbn.text = "";
				nsPrice.value = 0;
				txtEditor.text = "";
				txtPress.text = "";
				tfType.clear();	 
				txtMemo.text = "";
				
				//设置焦点
				txtName.setFocus();
				
				// 保存当前状态
				comparator.save(this);
	 		}
	 		
	 		/**
			 * 设置数据到界面上
			 * 
			 * @author ZengWenFeng
			 */
			override protected function setDataToUI(): void
			{	
				// 设置数据到界面				
				txtCode.text = oldObj.code;
				txtName.text = oldObj.name;				
				txtIsbn.text = oldObj.isbn;
				nsPrice.value = oldObj.price;
				txtEditor.text = oldObj.editor;
				txtPress.text = oldObj.press;
				tfType.setId(oldObj.type ? oldObj.type.id : null);
				txtMemo.text = oldObj.memo;
				
					
				// 设置焦点
				txtName.setFocus();
				
				// 如果是修改状态,则保存当前状态
				if (mode == MODE_MOD)
				{
					comparator.save(this);					
				}
			}      	
			
			/**
	    	 * 新增
	    	 * 
	    	 * @author ZengWenFeng	    	 
	    	 */
	   	    override protected function add(handler: Function = null): void
	   	    {
	   	    	//验证数据是否合法
				if (!checkData())
				{
					return;
				}
				
				//从界面上获取数据
	   	    	getDataFromUI();
	   	    	
	   	    	//
	   	    	var prmIn: Object = SysCtx.getPrmIn();
			    prmIn.item = newObj;
	   	    	
	   	    	//新增
				var ro: RemoteObject = new RemoteObject();
				ro.destination = SERVICE_BOOK_MANAGER;
				ro.doAdd(prmIn);
				ro.addEventListener(FaultEvent.FAULT, ErrorWindow.faultHandler);
				ro.addEventListener(ResultEvent.RESULT, function (event: ResultEvent): void
				{
					// 设置新增对象
	   	    	    newObj.id = event.result.id;
	   	    	    newObj.crtDt = event.result.crtDt;
	   	    	    newObj.srchKey = event.result.srchKey;
	   	    	    
	   	    	    // 触发对象已增加事件
					dispatchEvent(new Event(CommonDlg.ADD_COMPLETE));
					
					if (handler == null)
            		{
            			// 清空界面
		   	    	    cleanUI();
            		}
            		else
            		{
            			handler();	                		
            		}
				});
	   	    }
	   	    	   	      
	   	    /**
	    	 * 修改
	    	 * 
	    	 * @author ZengWenFeng	    	 
	    	 */
	   	    override protected function modify(handler: Function = null): void
	   	    {
	   	    	//验证数据是否合法
				if (!checkData())
				{
					return;
				}
				
				//从界面上获取数据
	   	    	getDataFromUI();
	   	    	
	   	    	//
	   	    	var prmIn: Object = SysCtx.getPrmIn();
			    prmIn.item = newObj;
	   	    	
	   	    	// 修改
				var ro: RemoteObject = new RemoteObject();
				ro.destination = SERVICE_BOOK_MANAGER;
				ro.doModify(prmIn);
				ro.addEventListener(FaultEvent.FAULT, ErrorWindow.faultHandler);
				ro.addEventListener(ResultEvent.RESULT, function (event: ResultEvent): void
				{	
					// 设置新增对象		   	    	    
	   	    	    newObj.srchKey = event.result.srchKey;		   	    	    
	   	    	    											
					// 触发对象已修改事件
					dispatchEvent(new Event(CommonDlg.MOD_COMPLETE));
					
					if (handler == null)
            		{
                		// 关闭对话框
	                	close();
	                }
	                else
	                {
	                	handler();
	                }
				});
	   	    }
			
	 		/**
	    	 * 验证数据合法性
	    	 * 
	    	 * @author ZengWenFeng	    	 
	    	 */
			override protected function checkData(): Boolean
			{	
				//验证编码不能为空
				if (StringUtil.trim(txtCode.text) == "")
				{	
					txtCode.setFocus();				
					MessageWindow.show("编码不允许为空!", "提示", MessageWindow.MB_OK, MessageWindow.MB_ICONWARNING);									
					
					//					
					return false;
				}
				
				//验证名称不能为空
				if (StringUtil.trim(txtName.text) == "")
				{	
					txtName.setFocus();				
					MessageWindow.show("名称不允许为空!", "提示", MessageWindow.MB_OK, MessageWindow.MB_ICONWARNING);									
					
					//					
					return false;
				}
				
				//
				return true;
			}
		
		    /**
	    	 * 从界面上获取数据
	    	 * 
	    	 * @author ZengWenFeng	    	 
	    	 */
			override protected function getDataFromUI(): void 
			{	
				//
				newObj = new Book();
				
				// 在更新模式
				if (mode == MODE_MOD)
				{
					newObj.id = oldObj.id;
				}
				
				// 新对象
				newObj.code = StringUtil.trim(txtCode.text);		
				newObj.name = StringUtil.trim(txtName.text);
				newObj.isbn = StringUtil.trim(txtIsbn.text);
				newObj.price = nsPrice.value;
				newObj.editor = StringUtil.trim(txtEditor.text);
				newObj.press = StringUtil.trim(txtPress.text);
				newObj.type = tfType.selectedItem as BookType;
				newObj.memo = StringUtil.trim(txtMemo.text);
				newObj.organ = SysCtx.organ;
				newObj.author = SysCtx.user;
				newObj.crtDt = new Date();
			}
		]]>
	</mx:Script>
	
	<ce:CeLabeledTextInput id="txtCode" label="编码" required="true" maxChars="100" x="10" y="10"/>
	<ce:CeLabeledTextInput id="txtName" label="名称" required="true" maxChars="200" x="258" y="10"/>	
	<ce:CeLabeledTextInput id="txtIsbn" label="书号" maxChars="50" x="10" y="42"/>
	<ce:CeLabeledNumericStepper id="nsPrice" label="定价" x="258" y="42" minimum="0" maximum="99999" stepSize="0.01"/>
	<ce:CeLabeledTextInput id="txtEditor" label="主编" maxChars="50" x="10" y="74"/>
	<ce:CeLabeledTextInput id="txtPress" label="出版社" maxChars="50" x="258" y="74"/>
	<ce:CeCommonDropdownTree id="tfType" label="图书类型" treeType="{TreeProviderFactory.TREE_BOOK_TYPE}" x="10" y="106"/>
	<ce:CeLabeledTextInput id="txtMemo" label="备注" maxChars="2000" x="258" y="106"/>
	
</LinearObjDlgEx>


JAVA服务端:

 

 

 

/*
 * Book.java
 * 
 * Copyright @2013-2099 Fuzhou Change Software Co, Ltd, All Rights Reserved
 */
package ce.book.bsc;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import ce.org.Organ;
import ce.pub.common.LinearObject;
import ce.system.access.User;

/**
 * <p>图书</p>
 * 
 * @author ZengWenFeng
 * @version 1.00
 * 
 * <pre>
 * 修改记录:
 * 修改后版本                                  修改人                修改日期                            修改内容
 * 2011-05-13.1       ZengWenFeng                2011-05-13      create
 * </pre>
 */
@Entity
@Table(name = "Book_bsc_Book")
public class Book extends LinearObject
{
	/**
	 * Adds a default serial version ID to the selected type.
	 * 
	 * Use this option to add a user-defined ID in combination with custom
	 * serialization code if the type did undergo
	 * structural changes since its first release.
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 图书类型
	 * 
	 * @author ZengWenFeng
	 */
	private BookType type;

	@ManyToOne
	@JoinColumn(name = "typeId")
	public BookType getType()
	{
		return type;
	}

	public void setType(BookType type)
	{
		this.type = type;
	}

	/**
	 * 编码
	 * 
	 * @author ZengWenFeng
	 */
	private String code;

	public String getCode()
	{
		return code;
	}

	public void setCode(String code)
	{
		this.code = code;
	}

	/**
	 * 名称
	 * 
	 * @author ZengWenFeng
	 */
	private String name;

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	/**
	 * 国际标准书号(International Standard Book Number)
	 * 
	 * @author ZengWenFeng
	 */
	private String isbn;

	public String getIsbn()
	{
		return isbn;
	}

	public void setIsbn(String isbn)
	{
		this.isbn = isbn;
	}

	/**
	 * 创建日期
	 * 
	 * @author ZengWenFeng
	 */
	private Date crtDt;

	public Date getCrtDt()
	{
		return crtDt;
	}

	public void setCrtDt(Date crtDt)
	{
		this.crtDt = crtDt;
	}

	/**
	 * 组织
	 * 
	 * @author ZengWenFeng
	 */
	private Organ organ;

	@ManyToOne
	@JoinColumn(name = "orgId")
	public Organ getOrgan()
	{
		return organ;
	}

	public void setOrgan(Organ organ)
	{
		this.organ = organ;
	}

	/**
	 * 编制人
	 * 
	 * @author ZengWenFeng
	 */
	private User author;

	@ManyToOne
	@JoinColumn(name = "authorId")
	public User getAuthor()
	{
		return author;
	}

	public void setAuthor(User author)
	{
		this.author = author;
	}

	/**
	 * 备注
	 * 
	 * @author ZengWenFeng
	 */
	private String memo;

	public String getMemo()
	{
		return memo;
	}

	public void setMemo(String memo)
	{
		this.memo = memo;
	}

	/**
	 * 单价
	 * 
	 * @author ZengWenFeng
	 */
	private BigDecimal price;

	public BigDecimal getPrice()
	{
		return price;
	}

	public void setPrice(BigDecimal price)
	{
		this.price = price;
	}

	/**
	 * 主编
	 * 
	 * @author ZengWenFeng
	 */
	private String editor;

	public String getEditor()
	{
		return editor;
	}

	public void setEditor(String editor)
	{
		this.editor = editor;
	}

	/**
	 * 出版社
	 * 
	 * @author ZengWenFeng
	 */
	private String press;

	public String getPress()
	{
		return press;
	}

	public void setPress(String press)
	{
		this.press = press;
	}

	/**
	 * 查询关键字
	 * 
	 * @author ZengWenFeng
	 */
	private String srchKey;

	public String getSrchKey()
	{
		return srchKey;
	}

	public void setSrchKey(String srchKey)
	{
		this.srchKey = srchKey;
	}
}

 

/*
 * BookMgr.java
 * 
 * Copyright @2013-2099 Change Soft, All Rights Reserved
 */
package ce.book.bsc;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.springframework.flex.remoting.RemotingDestination;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import ce.pub.annotation.Description;
import ce.pub.annotation.Excluded;
import ce.pub.common.LinearManager;
import ce.pub.util.MiscUtil;
import ce.pub.util.PinyinUtil;

/**
 * <p>图书管理器</p>
 *
 * @author ZengWenFeng
 * @version 1.00
 *
 * <pre>
 * 修改记录:
 * 修改后版本		修改人   		修改日期   		修改内容
 * 2013-05-13.1		ZengWenFeng   		2013-05-13		create
 * </pre>
 */
@Service("ce.book.bsc.BookMgr")
@RemotingDestination
@Transactional
public class BookMgr extends LinearManager<Book, BookDAO>
{
	/**
	 * 新增
	 * 
	 * @author ZengWenFeng
	 * @param prmIn item 图书
	 */
	@Description("新增图书")
	@Override
	public Map<String, Object> doAdd(Map<String, Object> prmIn)
	{
		// 获取参数
		Book item = (Book) prmIn.get("item");
		
		// 设置创建时间
		item.setCrtDt(new Date());
		
		// 设置查询关键字
		item.setSrchKey(PinyinUtil.getSpelledBlock(item.getName()) + " " + 
						MiscUtil.nullToEmpty(item.getCode()) + " " +
						MiscUtil.nullToEmpty(item.getIsbn()));
		
		// 新增
		getDAO().add(item);
		
		// 设置返回值
		Map<String, Object> prmOut = new HashMap<String, Object>();
		prmOut.put("id", item.getId());
		prmOut.put("crtDt", item.getCrtDt());
		prmOut.put("srchKey", item.getSrchKey());
		
		return prmOut;
	}

	/**
	 * 删除
	 * 
	 * @author ZengWenFeng
	 * @param prmIn item 图书
	 */
	@Description("删除图书")
	@Override
	public Map<String, Object> doDel(Map<String, Object> prmIn)
	{
		getDAO().del((Book) prmIn.get("item"));				
		return null;
	}

	/**
	 * 修改
	 * 
	 * @author ZengWenFeng
	 * @param prmIn item 图书
	 */
	@Description("修改图书")
	@Override
	public Map<String, Object> doModify(Map<String, Object> prmIn)
	{
		// 获取参数
		Book item = (Book) prmIn.get("item");
		
		// 设置查询关键字
		item.setSrchKey(PinyinUtil.getSpelledBlock(item.getName()) + " " + 
						MiscUtil.nullToEmpty(item.getCode()) + " " +
						MiscUtil.nullToEmpty(item.getIsbn()));
		
		// 修改
		getDAO().modify(item);		
		
		// 设置返回值
		Map<String, Object> prmOut = new HashMap<String, Object>();
		prmOut.put("srchKey", item.getSrchKey());
		
		return prmOut;
	}
	
	/**
	 * 查询
	 * 
	 * @author ZengWenFeng
	 * @param prmIn condition 查询条件 
	 * @return
	 */   
	@SuppressWarnings("unchecked")
	@Excluded
	@Override
	public Map<String, Object> doQuery(Map<String, Object> prmIn)
	{
		Map<String, Object> prmOut = new HashMap<String, Object>();
		prmOut.put("items", getDAO().query((Map<String, Object>) prmIn.get("condition")));
		
		return prmOut;
	}
	
	/**
	 * 获取记录数
	 * 
	 * @author ZengWenFeng	
	 * @param prmIn condition 查询条件
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public long getCount(Map<String, Object> prmIn)
	{
		return getDAO().getCount((Map<String, Object>) prmIn.get("condition"));
	}

	/**
	 * 根据id获取对象
	 * 
	 * @author ZengWenFeng
	 * @param prmIn id
	 * @return
	 */
	public Map<String, Object> getById(Map<String, Object> prmIn)
	{
		Map<String, Object> prmOut = new HashMap<String, Object>();
		prmOut.put("item", getDAO().getById((String) prmIn.get("id")));
		
		return prmOut;
	}

	/**
	 * 获取简单对象
	 * 
	 * @author ZengWenFeng
	 * @param id
	 * @return
	 */
	public Book getSimpleObjectById(String id)
	{
		return getDAO().getSimpleObjectById(id);
	}
	
	/**
	 * 获取新编码
	 * 
	 * @author ZengWenFeng
	 * @param prmIn orgId 组织Id
	 * @return
	 */
	public String newCode(Map<String, Object> prmIn)
	{
		return getDAO().newCode((String) prmIn.get("orgId"));
	}
}

 

/*
 * BookDAO.java
 * 
 * Copyright @2013-2099 Change Soft, All Rights Reserved
 */
package ce.book.bsc;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import ce.pub.common.LinearDAO;
import ce.pub.util.MiscUtil;
import ce.pub.util.ObjectUtil;

/**
 * <p>图书DAO</p>
 *
 * @author ZengWenFeng
 * @version 1.00
 *
 * <pre>
 * 修改记录:
 * 修改后版本		修改人   		修改日期   		修改内容
 * 2013-05-13.1		ZengWenFeng   		2013-05-13		create
 * </pre>
 */
@Repository("ce.book.bsc.BookDAO")
public class BookDAO extends LinearDAO<Book>
{
	/**
	 * 对象工具类
	 * 
	 * @author ZengWenFeng
	 */
	private ObjectUtil objectUtil;
	
	@Autowired
	public void setObjectUtil(ObjectUtil objectUtil)
	{
		this.objectUtil = objectUtil;
	}

	/**
	 * 查询
	 * 
	 * @author ZengWenFeng
	 * @date 2011-08-04
	 * @param condition queryCondition
	 */
	@SuppressWarnings("unchecked")
	public List<Book> query(Map<String, Object> condition)
	{
		// 获取参数
		Integer pageNo = (Integer) condition.get("pageNo");
		Integer pageSize = (Integer) condition.get("pageSize");		
		
		// 
		StringBuilder hql = new StringBuilder();
		hql.append("SELECT m FROM Book m ");
		hql.append("LEFT JOIN m.type t ");
		
		appendCondition(hql, condition);		
		
		hql.append("ORDER BY m.crtDt DESC ");
		
		Query query = this.getSessionFactory().getCurrentSession()
						  .createQuery(hql.toString())
        				  .setProperties(condition);
		
		// 如果有分页,则按分页查询
		if (pageNo != null && pageSize != null && pageNo > 0)
		{
			query.setFirstResult(MiscUtil.getBgnObjIndex(pageNo, pageSize)).setMaxResults(pageSize);
		}		
		
		return query.list();
	}

	/**
	 * 获取记录数
	 * 
	 * @author ZengWenFeng	
	 * @param condition 查询条件
	 * @return
	 */
	public long getCount(Map<String, Object> condition)
	{
		StringBuilder hql = new StringBuilder();
		hql.append("SELECT COUNT(m) FROM Book m ");
		hql.append("LEFT JOIN m.type t ");
		
		appendCondition(hql, condition);
		
		return (Long) this.getSessionFactory().getCurrentSession().createQuery(hql.toString())
		                  .setProperties(condition)
		                  .uniqueResult();
	}
	
	/**
	 * 追加查询条件
	 * 
	 * @author ZengWenFeng
	 * @param hql
	 * @param condition 查询条件
	 */
	protected void appendCondition(StringBuilder hql, Map<String, Object> condition)
	{
		// 获取参数
		String typeIsn = (String)condition.get("typeIsn");
		String code = (String)condition.get("code");
		String name = (String)condition.get("name");
		String isbn = (String)condition.get("isbn");
		
		hql.append("WHERE m.organ.id = :orgId ");
		
		if (typeIsn != null && !typeIsn.equals(""))
		{
			hql.append("AND (t.isn = :typeIsn OR t.isn LIKE :childTypeIsn) ");
			condition.put("childTypeIsn", typeIsn + ".%");
		}
		
		if (code != null && !code.equals(""))
		{
			hql.append("AND m.code LIKE :code ");
			condition.put("code", "%" + code + "%");
		}
		
		if (name != null && !name.equals(""))
		{
			hql.append("AND m.name LIKE :name ");
			condition.put("name", "%" + name + "%");
		}
		
		if (isbn != null && !isbn.equals(""))
		{
			hql.append("AND m.isbn LIKE :isbn ");
			condition.put("isbn", "%" + isbn + "%");
		}
	}
	
	/**
	 * 获取新编码
	 * 
	 * @author ZengWenFeng
	 * @param orgId 组织Id
	 * @return
	 */
	public String newCode(String orgId)
	{
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("orgId", orgId);
		
		return objectUtil.newCode(Book.class, "001", "code", "organ.id = :orgId", params);
	}
}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spencer_tseng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值