myapps 会议管理设计与实现

会议管理设计与实现文档

会议管理

数据库:meetingdb

数据表:1、meeting_info 2、meeting_join_user  (一对多关系)

菜单

1、我发起的会议(公开)

2、待参与的会议(公开)

3、待审批的会议(管理员,经理,主管)

4、所有会议列表(管理员)

注:  角色目前是按照个人自己的设计的角色,后期需要改为省平台的对应的角色

创建会议:创建会议时,把相关参与人的数据插入到meeting_join_user表

删除会议:删除会议时,把相关参与人的数据从meeting_join_user表删除

预览会议详情页面:查看会议详情信息

查询会议参与人列表:查看会议参与人的信息列表

带参与会议列表:

回复是否参与会议:弹窗回复是否参与会议

会议流程图:

员工:创建会议(提交)s----审批(提交)----发布

经理、主管:创建会议(提交)-----发布

运行效果图:

员工:(我发起的会议,待参与的会议)

主管、经理:(我发起的会议,待参与的会议,待审批的会议)

管理员:(我发起的会议,待参与的会议,待审批的会议、所有会议管理列表)

开发技术关键点记录:

添加数据:

在保存操作的 动作后,或者动作前,进行对C表添加数据。

A表添加数据时,向C表也添加数据:

(function(){
	var doc = getCurrentDocument();
	var meeting_id=getItemValueAsString("meeting_id");
	var aa = doc.getItemValueAsString("user_list"); //表单用户选择框字段

	if(!aa.equals("")&& aa.length()>0){
		var docids = splitText(aa, ";");
		var userlist = createObject("java.util.ArrayList");
		for (var i = 0; i < docids.length; i++) {
			if (docids != null) {
					var userVO = getUserById(docids[i]);
					userlist.add(userVO);
			}
		}

		var formProcess = getFormProcess();
		var process = getDocumentProcess();
		var form = formProcess.doViewByFormName("meeting_join_user" , getApplication());
		if(userlist!=null && userlist.size()>0){
			for(var i = 0; i < userlist.size(); i++){//循环条件
				var dataUser = userlist.get(i);
				var itemDoc = process.doNew(form,getWebUser(),createParamsTable());

				var userid=dataUser.getId();
				var sql = "select * from tlk_meeting_join_user where item_meeting_id='"+meeting_id;
				 sql +="' and item_user_id='"+userid+"'";
				var existlist = queryBySQL(sql);
				if(existlist!=null && existlist.size()>0){

				}else{
					var depts = dataUser.getDepartments();
					var departmentName = "";
					for (var iter = depts.iterator(); iter.hasNext();) {
						var dept = iter.next();
						departmentName = dept.getName();
					}

				        //itemDoc.setParent(doc.getId());
					itemDoc.setAuthor(userid);
					//itemDoc.setIstmp(false);
					itemDoc.setApplicationid(getApplication());
					itemDoc.setDomainid(dataUser.getDomainid());

					itemDoc.addStringItem("meeting_id", meeting_id);
					itemDoc.addStringItem("user_id", userid);
					itemDoc.addStringItem("username", dataUser.getName());
					itemDoc.addStringItem("tel_phone", dataUser.getTelephone());
					itemDoc.addStringItem("department", departmentName);
					itemDoc.addStringItem("message", "");
					itemDoc.addStringItem("status", "wait");
					itemDoc.addDateItem("add_date", getToday());
					process.doCreate(itemDoc);
				}

			}
		}
	}
})()

删除数据:

A表删除数据时,向C表也删除数据:

(跟添加数据时的原理一样):

(function(){
	var params = getParameter("_selects");
	if(params!=null && params!=""){
		var recordids = splitText(params,";");//得到选中记录组的id
		var recordid = "";

		var appid=getApplication();//获取应用ID
		var a=new Packages.cn.myapps.core.deploy.application.ejb.ApplicationProcessBean();//实例化application的应用处理类
		var avo=a.doView(appid);//获取软件应用对象
		var did=avo.getDatasourceid();//获取数据源的ID
		var db=new Packages.cn.myapps.core.dynaform.dts.datasource.ejb.DataSourceProcessBean();//实例化数据源的应用处理类
		var kk=db.doView(did);//获取数据源对象
		var dbsname=kk.getName();//获取数据源名称

		var process = new Packages.cn.myapps.core.dynaform.document.ejb.DocumentProcessBean(getApplication()); //实例化文档对象
		for(var i=0;i<recordids.length;i++){
			var id = recordids[i];
			//process.doRemove(recordids[i]);//根据文档ID,删除文档对象
			var sql = "delete from tlk_meeting_join_user where parent='"+id+"'";
			if(!"".equals(dbsname)){
				deleteByDSName(dbsname,sql);
			}
		}
	}
})()

待参加会议数据查询:

数据查询SQL

(function(){
        var user = getWebUser();
        var userid = user.getId();
var sql="";
if(null!=userid || !"".equals(userid)){
         sql = "select u.item_status, m.* from tlk_meeting_join_user as u LEFT JOIN tlk_meeting_info as m on u.ITEM_MEETING_ID =m.ITEM_MEETING_ID where u.ITEM_USER_ID='"+userid+"' and m.ITEM_MEETING_STATUS='已发布' and m.ITEM_START_TIME>=now()";
}

       return sql;
})()

视图列跳转视图(当前页)

查询会议参与人列表

(function(){
	var request = $WEB.getParamsTable().getHttpRequest();//获取当前 request
	var curr= getCurrentDocument();
	var meetingId=getItemValueAsString("meeting_id");
 //var uid = getWebUser().getId();

	var url1="http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
	var view_id="11e6-10d5-c8907e8b-a931-c7e163d030f2";//视图 id,浏览器的http请求可以看到
	var oldUrl = url1+
	"/portal/dynaform/view/displayView.action?_viewid="+view_id+"&clearTemp=true&application=11e6-10c7-cb2f4e2b-a931-c7e163d030f2&meetingId="+meetingId+"&_resourceid=11e6-10da-4b00d761-a931-c7e163d030f2";

	var rtn = "<a style=\"cursor:pointer;\" href='"+oldUrl+"' title='查询参会人' ><font color='blue' >查询参会人</font></a>";
	return rtn;
})();

视图上接收参数去查询相关的记录:

(function(){

var request = $WEB.getParamsTable().getHttpRequest();

        var meetingId = request.getParameter("meetingId");
        if(isNotNull(meetingId)){
            request.getSession().setAttribute("usermeetingId",meetingId);
        }else{
            meetingId = request.getSession().getAttribute("usermeetingId");
        }
        println("=======mid=========="+meetingId);

         var  sql="select * from tlk_meeting_join_user where item_meeting_id='"+meetingId+"'";

       return sql;
})()

视图列跳转表单(弹窗)

回复会议:

(function(){
        var doc = getCurrentDocument();//当前的文档对象
		var meetingid = doc.getItemValueAsString("meeting_id");//获取所在行的会议id
		var user = getWebUser();
        var userid = user.getId();//获取当前用户的ID

		println("=======m======="+meetingid);
		println("=======u======="+userid);
	    var docid="";//记录id
	    var formid="11e6-10d2-5c67ecc1-a931-c7e163d030f2";//相应记录的表单id 固定的

		if(meetingid!=null && userid!=null){
			var sql = "select * from tlk_meeting_join_user where item_meeting_id='"+meetingid;
				sql +="' and item_user_id='"+userid+"'";
				var userlist = queryBySQL(sql);
				println("============="+userlist.size());

				if(userlist!=null && userlist.size()>0){   //遍历结果集
					for(var iter1 = userlist.iterator();iter1.hasNext();){
						var itemdoc = iter1.next();
						if(itemdoc!=null){
						  docid=itemdoc.getId();//获取查询出的文档的id
						  println("======m======"+itemdoc.getItemValueAsString("meeting_id"));
						  println("======u======"+itemdoc.getItemValueAsString("user_id"));
						}
					}
				}

		}

        var subject = "回复";
        var request = $WEB.getParamsTable().getHttpRequest();//获取当前request
        var url1="http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();

        var oldUrl = url1+"/portal/dynaform/document/view.action?user_reply=yes&_docid="+docid+"&_formid="+formid;
        oldUrl += "&application="+getApplication();
        oldUrl += "&isedit=true&signatureExist=false";

        var url = "OBPM.dialog.show({opener:window.parent,title:'回复会议',url:'"+oldUrl+"',width:960,height:500,close:function(){}})";
        return "<a style=\"cursor:pointer;\" onclick=\""+url+";\"><font color='blue'>"+subject+"</font></a>";
})();

表单操作跳转模板表单(会议详情页)(预览)

视图列跳转模板表单

(function(){
	var id="";
	var formid="";
	var applicationid="";
	var url="";
	var pnama=getItemValueAsString("meeting_id");
	var sql="select id ,formid, applicationid,DOMAINID from tlk_meeting_info where item_meeting_id='"+pnama+"'";
	var querys=queryBySQL(sql);
	 //println("sql****"+sql);
	if(querys!=null&& querys.size()>0){

		var iter = querys.iterator();
		if(iter != null && iter.hasNext()){

			doc = iter.next();
			id = doc.getId();
			formid=doc.getFormid();
			applicationid=doc.getApplicationid();
		}
		var request = $WEB.getParamsTable().getHttpRequest();
		url += "http://" + request.getServerName()+":" + request.getServerPort() + request.getContextPath();
		var templateForm="11e6-1259-48d33857-8df4-1fe7f193ff40";//模板id
		url += "/portal/dynaform/document/view.action?_docid="+id+"&_formid="+formid+"&_templateForm="+templateForm+"&application="+applicationid;
	}

	return url;
})()

流程中判断角色是否允许进入路径

判断角色是否允许进入路径:(主管、经理)

var rtn = false;
var curDoc = getCurrentDocument();
	var webUser = curDoc.getAuthor();
	var roles = webUser.getRoles();
	if(roles != null && roles.size()>0){

		for(var iter = roles.iterator();iter.hasNext();){
			var roleVo = iter.next();
			var roleName = roleVo.getName();
			if("主管".equals(roleName)||"经理".equals(roleName)){
				rtn = true;
				break;
			}
		}
	}
 rtn;

判断角色是否允许进入路径:(员工)(代码基本都差不多一致,只是返回true/false调整一下)

var rtn = true;
var curDoc = getCurrentDocument();
	var webUser = curDoc.getAuthor();
	var roles = webUser.getRoles();
	if(roles != null && roles.size()>0){

		for(var iter = roles.iterator();iter.hasNext();){
			var roleVo = iter.next();
			var roleName = roleVo.getName();
			if("主管".equals(roleName)||"经理".equals(roleName)){
				rtn = false;
				break;
			}
		}
	}
 rtn;

路劲执行的脚本:(更改数据库meeting_status字段的状态)

var doc =getCurrentDocument();
doc.findItem("meeting_status").setValue("待审批");
var doc =getCurrentDocument();
doc.findItem("meeting_status").setValue("已发布");

流程执行路径发布时  发送站内信、短信的、邮件

var doc =getCurrentDocument();
doc.findItem("meeting_status").setValue("已发布");

var userIds = doc.getItemValueAsString("user_list");

var meetingTitle = doc.getItemValueAsString("title");
var startTime = doc.getItemValueAsString("start_time");
var address = doc.getItemValueAsString("address");

//发送信息通知参会人

var send_way = doc.getItemValueAsString("send_way");
var msgtitle=meetingTitle;
var msgcontent="请各位准时出席《"+meetingTitle+"》会议,开始时间:"+startTime+"地点:"+address;
var receiverId=userIds;
var msgdescription="";
var emailpassword="";
var senderid=doc.getItemValueAsString("user_id");

var uid = getWebUser().getId();
println("======cu======="+uid)
println("======s======="+senderid)

//调用
#include "autosqllib";
deliverMassage(send_way, msgtitle, msgcontent, receiverId,msgdescription,emailpassword, senderid);

/*
函数格式:
deliverMassage(manner, msgtitle, msgcontent, receiverId, msgdescription, emailpassword, senderid)
函数说明:
Manner: 是发送类别 "10,20,30";字符串类型 title : 是主题
msgContent:内容
receiverId:收件人的id
msgdescription :描述
emailpassword :要发送邮件时,需要的邮箱密码
senderid  :类型的值 (可不传)(date类型
*/
function deliverMassage(manner, title, content, receiverId, description, emailpassword, senderid) {
        content = description + content;
        var curuserprocess = getUserProcess();
        var curuser = getWebUser();
        var userIds = receiverId;
        if (manner.indexOf("10") > -1) {
                var MSreceiver = createObject("java.util.ArrayList");
                MSreceiver = getUserIdList(userIds);
                if (MSreceiver != null && MSreceiver.size() > 0) {
                        for (var j = 0; j < MSreceiver.size(); j++) {
                                sendMessage(senderid, MSreceiver.get(j), title, content);
                        }
                }
        }
        if (manner.indexOf("20") > -1) {
                var docid = getId();
                var receiver = "";
                var isReply = false;
                var isMass = true;
                var SMSuser = createObject("java.util.ArrayList");
                SMSuser = getUserList(userIds);
                if (SMSuser != null && SMSuser.size()) {
                        if (SMSuser.size() == 0) {
                                isMass = false;
                        }
                        for (var i = 0; i < SMSuser.size(); i++) {
                                receiver = receiver + SMSuser.get(i).getTelephone() + ",";
                        }
                        sendSMS(docid, title, content, receiver, isReply, isMass);
                }
        }
        if (manner.indexOf("30") > -1 && emailpassword) {
                var userVO = curuserprocess.doView(senderid);
                var from = userVO.getEmail();
                // [email][email protected][/email]
                var to = "";
                // [email][email protected][/email]
                var SMuser = createObject("java.util.ArrayList");
                SMuser = getUserList(userIds);
                var i = from.indexOf("@");
                var host = from.substring(i + 1);
                // teemlink.com
                var user = from;
                // [email][email protected][/email]
                // var emailpassword=getItemValue("emailpassword"); 123456
                var bbc = null;
                // 抄送
                var validate = true;
                var subject = title;
                var body = content;
                if (SMuser != null && SMuser.size() > 0) {
                        for (var i = 0; i < SMuser.size(); i++) {
                                to = SMuser.get(i).getEmail();
                                sendMail(from, to, subject, body, host, user, emailpassword, bbc, validate);
                        }
                }
        }
}

//获取userid结合返回list集合
function getUserIdList(userIds) {
        var userProcess = getUserProcess();
        var userIdList = createObject("java.util.ArrayList");
        var userList = createObject("java.util.ArrayList");
        var doc = getCurrentDocument();
        // var domainid = getDomainid();
        userIdList = userIds.split(";");
        for ( var i = 0; i < userIdList.length; i++) {
                var user = userProcess.doView(userIdList[i]);
                userList.add(user.getId());
        }
        return userList;
}

//获取用户对象集合
function getUserList(userIds) {
        var userProcess = getUserProcess();
        var userIdList = createObject("java.util.ArrayList");
        var userList = createObject("java.util.ArrayList");
        var doc = getCurrentDocument();
        // var domainid = getDomainid();
        userIdList = userIds.split(";");
        for ( var i = 0; i < userIdList.length; i++) {
                var user = userProcess.doView(userIdList[i]);
				var userVo = getUserById(user.getId());
                userList.add(userVo);
        }
        return userList;

}
时间: 2024-11-08 22:23:22

myapps 会议管理设计与实现的相关文章

会议管理

一.概述 会议的作用不外乎布置工作.总结经验.讨论事项.分析问题.研究对策,或表彰先进.惩戒违章,一言以蔽之就是做出决策或鼓舞士气.管理良好的会议能够集中集体智慧.快速解决问题.迅速推动工作,是企业管理中最常用的方式或手段.企业会议必须有的放矢,不能议而不决,更不能决而不行.会上放空炮,说大话,就会丧失企业决策效力,导致人心涣散,削弱组织活力. 一个企业每年应该召开的会议其实是屈指可数的,固定会议除了企业的年度总结大会.半年总结会.月例会.周例会(班组有晨会或晚会)之外,其余的会议都是专题会议,

用思维导图进行会议管理的方法

会议是统一步调迈向理想目标的工具,会议中更快更有效地达成共识,不仅可以为公司节省许多成本,还可以为工作人员节省时间.无论是大公司还是小公司,开会,必定是不可或缺的.身为管理者的你,会怎样让会议的效率达到最高呢? 事实上,现代化的潮流中,很多管理者都已经找到了会议管理的好帮手--XMind思维导图,XMind在企业和教育领域都有广泛的应用,在企业中它可以用来进行会议管理.项目管理.信息管理.计划和时间管理.企业决策分析等:在教育领域,它通常被用于教师备课.课程规划.头脑风暴等.下面,我们来看看XM

会议管理心得记录(非markdown版)

前提 本文说的会议特指有开发团队成员参与的会议, 包括但不限于开发.设计.测试.运维.管理岗位的成员. 因为不同工种和行业都有其特殊性,我是一名程序员,并不太了解其他工种和行业的具体情况,不敢妄言. 术语定义 会议:本文中的“会议”指的是当团队有问题需要解决时,并且希望通过会议的形式,让若干个团队内或外的人员参与进来,通过开会讨论的方式找到解决方案.这种会议包括项目总结会.头脑风暴.周会等.不需要进行讨论.不是为了给问题找出解决方案的会议不在本文讨论范围之内,如信息宣布的会议(如宣布领导的决策)

ESI.PipelineStudio.v4.0.0.0管网管理设计+Kubotek.KeyCreator.V13.5.0.00640三维计算机辅助设计

ESI.PipelineStudio.v4.0.0.0管网管理设计软件PipelineStudio是业界领先的管网管理设计软件和工程解决方案.它结合了图形化的配置和经过行业验证仿真引擎报告工具.为各种各样的稳态和瞬态分析的挑战提供了快速,准确,强大和可靠的答案. PipelineStudio提供通过国家的最先进的高级仿真技术,快速,准确的脱机状态管道管理设计,规划和水力分析天然气和液体管道. 产品特点:流量的保证:管道管理设计:设计,布线,管道网络的选型:装配,泄漏,生命周期分析:战略,业务和容

通用权限管理设计

权限设计(初稿)     1. 前言:     权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.     2. 目标:     直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统

系统权限管理设计 (转)

权限设计(初稿)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.      2. 目标:      直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统解

企业信息化中的管理设计深度探讨研究

管理设计是针对某一类企业进行的,可以说是企业个性化应用的完美体现,但这绝对不是个性化的泛滥.须知任何的企业,其信息化管理是不以管理者的意志为转移的,它不同于经营决策的管理,它必须严格依照基本的管理原理来进行,比如计划方法.订单跟踪.成本核算.预算管理等等,都是严密的信息逻辑支撑的确定性管理方法,只不过由于企业所处行业的不同,所涉及业务有所差异而有所变化而已,这种变化远不足以改变ERP软件的通用性和普遍适用性,而仅仅是要求ERP这个百宝箱中有更多的宝贝而已. 当我们以一种蓦然回首的心态重新审视所从

从点滴看管理之会议管理

现状 随着岗位专业化,部门间的沟通更加频繁,一些缺乏管理的会议降低了我们的工作效率. 如何组织会议 提交会议纪要 项目经理 会议的日期 会议的地点 会议的类型 会议的目的:组织本次会议的目标和想要达到的效果. 应该开的会议: 避免这些会议: 会议的议题:会议讨论的内容项.每一项的预计时间.总时间. 指定会议记录人员 考虑这些人是否可以在会议上贡献价值和获取信息. 会议参与者:明确必须参加的和自愿参加的. 申请会议室 项目经理 发送会议通知 项目经理 如有需要,发放会议材料 如有需要,明确反馈方式

系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555) 1. 前言: 权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案. 2. 目标: 直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重