java物流bos,宅急送BOS物流项目

课程简介

【已更新】

第一天

1、 宅急送BOS物流项目简介

2、 Maven环境配置

3、 SVN版本控制

4、 前端界面开发 JQuery EasyUI

【正在加紧录制下面课程,敬请期待!】

第二天

1、 数据库设计工具PowerDesigner使用

2、 JPA注解和实体类映射

3、 Spring Data JPA 通用持久层解决方案

4、 JavaEE分层项目架构

5、 用户登录、注销、修改密码功能

6、 自定义拦截器,控制页面访问

第三天

1、 基础设置模块业务功能分析

2、 hibernate-maven-plugin插件使用

3、 hibernate tools反转实体映射生成

4、 取派员管理功能

第四天

1、 区域管理功能实现

2、 POI数据批量导入、导出

3、 一键上传功能实现

4、 分区管理功能

5、 Spring Data Specification 多条件组合分页查询

第五天

1、 定区管理功能

2、 RPC远程调用框架 Hessian使用

3、 RPC远程调用框架 CXF使用

4、 定区关联CRM系统客户功能

第六天

1、 取派模块业务功能分析

2、 业务受理(客户下单)功能实现

3、 工单管理功能

4、 工作单快速录入功能实现

5、 Hibernate search 工作单全文检索

第七天

1、 企业常见权限管理模型设计

2、 粗粒度URL级别权限控制和细粒度方法级别权限控制

3、 Shiro框架 控制流程和原理

4、 使用Shiro实现用户认证功能

5、 自定义Shiro的realm组件,实现权限控制

第八天

1、 权限数据管理功能

2、 角色数据管理功能

3、 用户管理和授权功能

4、 动态系统菜单生成

5、 Shiro集成Ehcache缓存优化

第九天

1、 Activiti5工作流引擎简介

2、 activiti-explorer 项目运行,工作流效果展示

3、 工作流与项目集成

4、 流程设计器安装使用

5、 流程定义管理

6、 流程实例管理

7、 任务管理

8、 流程变量使用

第十天

1、 BPMN简介

2、 流程图开始节点、结束节点、连线使用

3、 流程图任务节点使用

4、 用户任务分配使用

5、 网关节点使用

6、 BOS整合activiti工作流界面,流程定义管理实现

第十一天

1、 中转模块业务功能分析

2、 分析 如何将项目业务和工作流结合

3、 设计中转配送流程活动图

4、 启动中转流程,开始物流管理

5、 任务和查询办理功能实现

第十二天

1、 工作流管理,BOS完成流程实例管理

2、 流程实例历史查询

3、 JBOSS服务器 使用

4、 Oracle VitruaBox 使用

5、 在linux上完成项目部署

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 概述<br>BOS(Basic Object System)的目的是提供一个纯粹的组件使用环境。在这个环境中,软件完全由组件构成而没有额外的代码,甚至不需要撰写main函数。这个环境不仅使得软件的结构更佳,更进一步使得软件开发的性质发生变化—开发人员不再为特定的程序付出封闭的辛劳,他们写下的每一行代码现在都属于某个组件,因而总有可能在将来被复用。<br><br>BOS还是一个动态的环境。这意味着组件可以在这个环境中动态插拔,这有助于软件功能的无缝切换。这一功能也可称为动态跨平台。<br><br>BOS可以被称为一个组件系统。它定义了组件规范,并给出了组件的使用环境。但更准确的讲,BOS是一个基于组件技术的通用软件框架。<br><br>BOS可以使用在几乎所有类型的应用中。虽然目前版本的BOS是基于.NET Framework完成的,但其背后的理论却是通用的—提供一个纯粹的组件应用环境,让基于该环境的软件完全组件化。<br><br><br>二、 规范<br>2.1 组成<br>BOSBOS核心和BOS组件构成。BOS核心即是BOS组件的动态应用环境。为了让基BOS的软件达到完全组件化的目的,BOS还包括一个通用目的的可执行程序。这个可执行程序读取一个配置数据文件,从中获取相应的初始化数据,其中包括该应用使用到的组件信息。<br><br>此外,BOS还包括一个通用编辑器BOS Editor,用于为不同的应用快速地编辑配置数据文件。<br><br>2.2 BOS核心<br>BOS核心采取接口/实现分离的设计。BOS核心接口是一个命名为BOS.Center的类。你可以自行为其提供实现,也可以使用BOS源码包中提供的实现BOS.InProcBOSCtr。<br><br>2.3 BOS组件<br>所有的BOS组件都应该遵循接口/实现分离的设计。在实现端还应该为不同的BOS组件提供相应的创建器。组件创建器必须从接口类BOS.Creator_派生。<br><br>2.4 使用BOS<br>下面给出一个简单例子(C#):<br>public interface TestComp<br>{<br> void DoSomething();<br>}<br><br>class TestCompImpl :TestComp<br>{<br> public virtual void DoSomething()<br> {<br> …<br>}<br>}<br><br>class TestCompCreator : BOS.Creator_<TestComp><br>{<br> public virtual TestComp Do( Object[] params )<br> { <br> return new TestCompImpl();<br>}<br>}<br><br>class Program<br>{<br> static void Main(string[] args)<br> {<br> Center center = new CenterImpl();<br> center.Register(new CompID(typeof(TestComp), new TestCompCreator() );<br> TestComp comp = center.Create(new CompID(typeof(TestComp), null ); <br> comp.DoSomething(); <br> }<br>}<br><br>2.5 基于BOS的应用<br>基于BOS的应用并不像2.4所述的那样使用BOS。由于BOS提供了通用目的的AppBOSExe.exe,基于BOS的应用只需要提供组件和数据配置文件即可。其启动通过命令行完成:<br>prompt> AppBOSExe.exe test.boscfg<br><br>建议将配置数据文件命名为.boscfg,并将此类型文件关联到AppBOSExe.exe,从而可以双击配置文件图标以启动应用。<br><br>2.6 配置数据文件和编辑器<br>数据配置文件表征具体的应用。数据配置文件必须满足一定语法格式。你可以参考BOS源码包中的配置数据文件以进一步了解其语法。<br><br>通常情况下,我们通过编辑器来编辑配置数据文件。编辑器以树状图呈现出配置数据。你只需在相应的结点上点击鼠标右键便可以获得相应的命令,进而一步步编辑出所需的配置数据文件。<br><br>编辑器本身也是一个基于BOS的应用。你可以通过命令行启动它,或是将其拖拽到AppBOSExe.exe图标上进行启动。<br><br>2.7 软件要求<br>目前版本的BOS基于.NET Framework 2.0 实现。BOS项目通过Visual Studio 2005 创建。<br><br>
二、完善其余功能节点 -- 流程 1、 将 提供其余节点页面 复制 pages/zhongzhuan 入库(点击左侧菜单入库) ----- Action (查询入库任务列表)---- instore_list.jsp ---- 办理任务 ---- instore_complete.jsp(提交form) --- Action (办理任务流转到下一个节点) 修改function 数据表 入库 task_findInStoreTask.action 出库 task_findOutStoreTask.action 签收 task_findReceiveInfoTask.action 2、 查询任务列表 TaskAction // 业务方法 ----- 查询入库环节 的个人任务 public String findInStoreTask(){ // 登陆用户 User user = (User) getSession().getAttribute("user"); List<ZhongZhuanInfo> zhongZhuanInfoList = myTaskService.findTransferTask(user,"入库"); // 值栈 ActionContext.getContext().put("zhongZhuanInfoList", zhongZhuanInfoList); return "findInStoreTaskSUCCESS"; } // 业务方法 ----- 查询出库环节 的个人任务 public String findOutStoreTask(){ // 登陆用户 User user = (User) getSession().getAttribute("user"); List<ZhongZhuanInfo> zhongZhuanInfoList = myTaskService.findTransferTask(user,"出库"); // 值栈 ActionContext.getContext().put("zhongZhuanInfoList", zhongZhuanInfoList); return "findOutStoreTaskSUCCESS"; } // 业务方法 ----- 查询签收环节 的个人任务 public String findReceiveInfoTask(){ // 登陆用户 User user = (User) getSession().getAttribute("user"); List<ZhongZhuanInfo> zhongZhuanInfoList = myTaskService.findTransferTask(user,"配送签收"); // 值栈 ActionContext.getContext().put("zhongZhuanInfoList", zhongZhuanInfoList); return "findReceiveInfoTaskSUCCESS"; } 3、 配置struts.xml结果页面 <result name="findInStoreTaskSUCCESS">/WEB-INF/pages/zhongzhuan/instore_list.jsp</result> <result name="findOutStoreTaskSUCCESS">/WEB-INF/pages/zhongzhuan/outstore_list.jsp</result> <result name="findReceiveInfoTaskSUCCESS">/WEB-INF/pages/zhongzhuan/receiveinfo_list.jsp</result> 4、 Action办理对应节点任务 // 业务方法 ---- 办理入库任务 public String instorecomplete(){ InStore inStore = new InStore(); inStore.setInfo(info); inStore.setUpdateTime(new Date()); // 调用业务层 myTaskService.completeInStore(taskId, inStore); return "instorecompleteSUCCESS"; } // 业务方法 ---- 办理出库任务 public String outstorecomplete(){ OutStore outStore = new OutStore(); outStore.setInfo(info); outStore.setUpdateTime(new Date()); // 调用业务层 myTaskService.completeOutStore(taskId, outStore); return "outstorecompleteSUCCESS"; } // 业务方法 ---- 办理签收任务 public String receiveinfocomplete(){ ReceiveGoodsInfo receiveGoodsInfo = new ReceiveGoodsInfo(); receiveGoodsInfo.setInfo(info); receiveGoodsInfo.setUpdateTime(new Date()); // 调用业务层 myTaskService.completeReceiveGoodsInfo(taskId, receiveGoodsInfo); return "receiveinfocompleteSUCCESS"; } 5、 struts.xml 跳转回任务列表 <result name="instorecompleteSUCCESS" type="redirectAction">task_findInStoreTask</result> <result name="outstorecompleteSUCCESS" type="redirectAction">task_findOutStoreTask</result> <result name="receiveinfocompleteSUCCESS" type="redirectAction">task_findReceiveInfoTask</result> 在JBPM在流程结束时,发生异常 org.springframework.dao.DataIntegrityViolationException: could not delete: [org.jbpm.pvm.internal.model.ExecutionImpl#50001]; SQL [delete from JBPM4_EXECUTION where DBID_=? and DBVERSION_=?]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not delete: [org.jbpm.pvm.internal.model.ExecutionImpl#50001] 解决: hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect ======================================================================================================================== 三、 流程实例 查看管理 1、 查询实例功能 查询系统正在运行实例 ExecutionService.createProcessInstanceQuery() 查询系统已经完成的实例 HistoryService.createHistoryProcessInstanceQuery() json/admin/json { id:1005, pId:100, name:"查看正在运行的任务", t:"",page:"page_workflow_processinstance.action"} 改为 { id:1005, pId:100, name:"查看正在运行的任务", t:"",page:"processinstance_list.action"} 2、 每个运行流程实例,关联流程变量 ZhongZhuanInfo 包含所有流程信息 根据流程实例id 查询ZhongZhuanInfo数据 (ZhongZhuanInfo) processEngine.getExecutionService().getVariable(pid, "zhongZhuanInfo"); 服务器返回 中转信息 result = zhongZhuanInfo.toString(); <result name="showInfoSUCCESS" type="json"> <param name="root">result</param> </result> 在页面抓取中转信息,回显 $.post("${pageContext.request.cotnextPath}/processinstance_showInfo.action", {"pid": pid}, function(data){ $.messager.alert("流程实例信息", data, "info"); }); 3、 实例运行的流程图查看 需要在流程图上面 标记每个 流程运行到哪个任务节点 第一步: 为每条实例记录,添加查看流程图函数 <a href="#" class="easyui-linkbutton" onclick="showPng('<s:property value="#processInstance.id"/>');">查看流程图</a> function showPng(pid){ alert("查看" + pid + "对应流程图"); } 第二步: 流程图查看Action 可以复用 ---- processdefinition_showpng.action?deploymentId= & resourceName= RepositoryService.getResourceAsStream(java.lang.String deploymentId, java.lang.String resourceName) * resourceName 可以通过 deploymentId 动态获得 RepositoryService repositoryService = processEngine.getRepositoryService(); ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).uniqueResult(); resourceName = processDefinition.getImageResourceName(); 第三步: 点击查看流程图, 获得活动节点坐标 通过 window.showModalDialog() 查看流程图页面 (弹出窗口,显示页面 url地址不能修改 ) function showPng(pid){ //alert("查看" + pid + "对应流程图"); window.showModalDialog("${pageContext.request.contextPath}/processinstance_findactivityinfo.action?pid="+pid); } 查看某一个具体活动节点坐标 String processDefinitionId = "test-1"; // 流程定义的id String activityName = "start1"; // 活动的名称 ActivityCoordinates c = processEngine.getRepositoryService() .getActivityCoordinates(processDefinitionId, activityName); 查看当前流程实例活动所有节点名称 ProcessInstance的 java.util.Set<java.lang.String> findActiveActivityNames() @Override public List<ActivityCoordinates> findActivityCoordinates(String pid) { // 1、 根据流程实例id 获得所有活动节点名称 ProcessInstance processInstance = processEngine.getExecutionService().createProcessInstanceQuery().processInstanceId(pid).uniqueResult(); Set<String> activityNames = processInstance.findActiveActivityNames(); // 2、一个活动节点 --- 对应一个坐标对象 List<ActivityCoordinates> activityCoordinates = new ArrayList<ActivityCoordinates>(); for(String activityName: activityNames){ // 获得每一个活动节点名称 String processDefinitionId = processInstance.getProcessDefinitionId();//流程定义id ActivityCoordinates activityCoordinate = processEngine.getRepositoryService().getActivityCoordinates(processDefinitionId, activityName); activityCoordinates.add(activityCoordinate); } return activityCoordinates; } ============ 为了在下一个页面 可以显示流程图, 根据实例id 查询 发布id @Override public String findDeploymentIdByProcessInstanceId(String pid) { ProcessInstance processInstance = processEngine.getExecutionService().createProcessInstanceQuery().processInstanceId(pid).uniqueResult(); ProcessDefinition processDefinition = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processInstance.getProcessDefinitionId()).uniqueResult(); return processDefinition.getDeploymentId(); } <img src="${pageContext.request.contextPath }/processdefinition_showpng.action?deploymentId=<s:property value="#deploymentId"/>" style="position: absolute;top: 0;left: 0"/> <s:iterator value="#activityCoordinates" var="activityCoordinate"> <div style="width: <s:property value="#activityCoordinate.width"/>px; height: <s:property value="#activityCoordinate.height"/>px; left: <s:property value="#activityCoordinate.x"/>px; top: <s:property value="#activityCoordinate.y"/>px; position: absolute; border-color: red; border-style: solid; border-width: 1px;"> </s:iterator>
BOS宅急送是一家专门提供快递服务的公司,为了更好地提供服务,他们需要一个系统软件设计来有效地管理运输和快递的流程。以下是关于BOS宅急送系统软件设计的回答: BOS宅急送系统软件设计首先需要一个用户管理模块,用于管理客户的信息和账户。客户可以通过该系统软件在线注册、下单、查询订单、修改个人信息等。该模块应具有良好的界面设计和安全措施,以确保客户信息的安全性。 系统软件还需要包含一个订单管理模块,用于处理所有的订单。当客户下单时,系统将自动生成唯一的订单号,并将订单信息自动记录在数据库中。该模块可以实时追踪订单状态,包括已接单、已揽收、运输中等,并提供实时更新和通知功能。此外,还可以实现订单评价功能,客户可以对快递员和服务进行评价,以提供更好的用户体验。 为了高效地管理运输和配送,系统软件设计还需要一个调度管理模块。该模块将根据订单的地点、重量和时间等因素,智能地安排最佳的配送路线和运输车辆。快递员可以通过该模块实时接收和更新配送任务,并提供导航和签收功能,以确保快递能够准时送达目的地。 另外,系统软件设计还应包含一个报表分析模块,用于汇总和分析运输数据。通过该模块可以生成运输服务的报表,包括收入、成本、运力利用率等,以便公司管理层进行业务决策和运营优化。 总的来说,BOS宅急送系统软件设计应包括用户管理、订单管理、调度管理和报表分析等模块,通过这些功能的实现,能够提高运输效率、优化客户服务和管理公司业务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值