Commit 379db9a6 by 罗绍泽

添加待办事项

parent e4a89b10
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
<value>classpath:com/jw/app/business/bgmk/bgmkDAO.xml</value> <value>classpath:com/jw/app/business/bgmk/bgmkDAO.xml</value>
<value>classpath:com/jw/app/business/friendlink/friendlinkDAO.xml</value> <value>classpath:com/jw/app/business/friendlink/friendlinkDAO.xml</value>
<value>classpath:com/jw/app/business/notice/noticeDAO.xml</value> <value>classpath:com/jw/app/business/notice/noticeDAO.xml</value>
<value>classpath:com/jw/app/business/todo/TodoDAO.xml</value>
<value>classpath:com/gaowj/business/base/impl/BaseDAO.xml</value>
</list> </list>
</property> </property>
</bean> </bean>
...@@ -104,6 +106,10 @@ ...@@ -104,6 +106,10 @@
<property name="mapperInterface" value="com.jw.app.business.notice.noticeDAO"/> <property name="mapperInterface" value="com.jw.app.business.notice.noticeDAO"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory-apps"/> <property name="sqlSessionFactory" ref="sqlSessionFactory-apps"/>
</bean> </bean>
<bean id="todoDAO" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.jw.app.business.todo.TodoDAO"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory-apps"/>
</bean>
<!-- BusinessInterFace --> <!-- BusinessInterFace -->
<bean id="PortletBusiness" <bean id="PortletBusiness"
class="com.jw.app.business.portlet.PortletBusinessImpl"> class="com.jw.app.business.portlet.PortletBusinessImpl">
...@@ -174,6 +180,11 @@ ...@@ -174,6 +180,11 @@
class="com.jw.app.business.notice.NoticeBusinessImpl"> class="com.jw.app.business.notice.NoticeBusinessImpl">
<property name="noticeDAO" ref="noticeDAO"/> <property name="noticeDAO" ref="noticeDAO"/>
</bean> </bean>
<bean id="TodoBusiness"
class="com.jw.app.business.todo.TodoBusinessImpl">
<property name="todoDAO" ref="todoDAO"/>
</bean>
<!-- DAO --> <!-- DAO -->
<bean id="portletDAO" class="org.mybatis.spring.mapper.MapperFactoryBean"> <bean id="portletDAO" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.jw.app.business.portlet.PortletDAO"/> <property name="mapperInterface" value="com.jw.app.business.portlet.PortletDAO"/>
......
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
<script type="text/javascript" src="<%=localPath %>/js/ajaxfileupload.js"></script> <script type="text/javascript" src="<%=localPath %>/js/ajaxfileupload.js"></script>
<script type="text/javascript" src="<%=localPath %>/jwapp/common/js/lang_json.js"></script> <script type="text/javascript" src="<%=localPath %>/jwapp/common/js/lang_json.js"></script>
<script type="text/javascript" src="<%=localPath %>/jwapp/common/js/common_util.js"></script> <script type="text/javascript" src="<%=localPath %>/jwapp/common/js/common_util.js"></script>
<script type="text/javascript" src="<%=localPath %>/jwapp/common/js/common_luosz_util.js"></script>
<script type="text/javascript" src="<%=commonPath %>/ria/jquery/zTree_v3/js/jquery.ztree.core-3.5.js"></script> <script type="text/javascript" src="<%=commonPath %>/ria/jquery/zTree_v3/js/jquery.ztree.core-3.5.js"></script>
<script type="text/javascript" src="<%=commonPath %>/ria/jquery/zTree_v3/js/jquery.ztree.excheck-3.5.js"></script> <script type="text/javascript" src="<%=commonPath %>/ria/jquery/zTree_v3/js/jquery.ztree.excheck-3.5.js"></script>
...@@ -69,6 +70,7 @@ ...@@ -69,6 +70,7 @@
<link rel="stylesheet" type="text/css" href="<%=commonPath%>/ria/jquery/jquery-easyui-1.4.1/themes/default/easyui.css" charset="utf-8"></link> <link rel="stylesheet" type="text/css" href="<%=commonPath%>/ria/jquery/jquery-easyui-1.4.1/themes/default/easyui.css" charset="utf-8"></link>
<link rel="stylesheet" type="text/css" href="<%=commonPath%>/ria/jquery/jquery-easyui-1.4.1/themes/icon.css" charset="utf-8"></link> <link rel="stylesheet" type="text/css" href="<%=commonPath%>/ria/jquery/jquery-easyui-1.4.1/themes/icon.css" charset="utf-8"></link>
<link rel="stylesheet" type="text/css" href="<%=commonPath%>/ria/jquery/zTree_v3/css/zTreeStyle/zTreeStyle.css" charset="utf-8"></link> <link rel="stylesheet" type="text/css" href="<%=commonPath%>/ria/jquery/zTree_v3/css/zTreeStyle/zTreeStyle.css" charset="utf-8"></link>
<link rel="stylesheet" type="text/css" href="<%=localPath%>/jwapp/common/css/choice_user/common.css" charset="utf-8"></link>
<script type="text/javascript"> <script type="text/javascript">
// $.ajaxSetup ({ // $.ajaxSetup ({
......
...@@ -351,4 +351,7 @@ ...@@ -351,4 +351,7 @@
} }
.icon-ext-07_14 { .icon-ext-07_14 {
background:url('../../../../images/icons/(07,14).png') no-repeat left center; background:url('../../../../images/icons/(07,14).png') no-repeat left center;
}
.icon-ext-05_48 {
background:url('../../../../images/icons/(05,48).png') no-repeat left center;
} }
\ No newline at end of file
.choice_user>div{
display: inline-block;
background:#f4f4f4;
border-radius:5px;
vertical-align: top;
margin-right:5px;
padding:0 5px;
font-size: 12px;
position: relative;
margin-top:5px;
}
.choice_user>div:hover>span:first-child+span{
display: inline-block;
}
.choice_user>div>span:first-child+span{
display:none;
width: 12px;
height: 12px;
position: absolute;
top: -5px;
right: -5px;
cursor: pointer;
}
\ No newline at end of file
var commonutil = {
/**
* 往object的所有key统一添加前缀
*/
keyAddStr : function(object, str) {
if (typeof str == 'undefined' || str == null || str == '') {
str = 'FIELD_';
}
var news = {};
for (key in object) {
news[str + key] = object[key];
}
return news;
}
};
/**
* easyui datagrid方法封装
*/
var easyui = {
datagrid : function(options) {
var opts = $.extend({
pagination : true,
checkOnSelect : false,
selectOnCheck : false,
rownumbers : true,
fitColumns : false,
striped : true,
scrollbarSize : 0,
tableId : options.tableId,
autoRowHeight : false,
isSingleSelect : true,
singleSelect : true,
//如果需要自定义计算最后一列,则需要设置customLastCellWidth属性为true
customLastCellWidth : true
/*,
border:false*/
}, options);
opts.onClickRow = function(rowIndex, rowData) {
if (typeof options.onClickRow == 'function') {
options.onClickRow.call(null, rowIndex, rowData);
}
//如果用户传入了isSingleSelect属性为true,则设置点击事件时候只能单行选中
/*if (opts.isSingleSelect) {
if (typeof datagridSingleSelect == 'function') {
datagridSingleSelect(opts.tableId, rowIndex);
}
}*/
};
opts.onRowContextMenu = function(e, rowIndex, rowData) {
if (typeof options.onRowContextMenu == 'function') {
options.onRowContextMenu.call(null, e, rowIndex, rowData);
}
//如果用户传入了isSingleSelect属性为true,则设置右击事件时候只能单行选中
/*if (opts.isSingleSelect) {
datagridSingleSelect(opts.tableId, rowIndex);
}*/
}
opts.onBeforeLoad = function(param) {
if (typeof options.onBeforeLoad == 'function') {
options.onBeforeLoad.call(null, param);
}
//提交参数前,将每个参数的两边空格都去除
for (var key in param) {
param[key] = (param[key] + "").trim();
}
};
opts.onLoadSuccess = function(data) {
if (typeof options.onLoadSuccess == 'function') {
options.onLoadSuccess.call();
}
//如果回传值有checkedIds属性,则将这些id的记录进行勾选操作
var checkedIds = data.checkedIds;
if (!stringutil.isEmpty(checkedIds) && checkedIds.length > 0) {
var rows = data.rows;
for (var i = 0; i < rows.length; i++) {
for (var j = 0; j < checkedIds.length; j++) {
if (checkedIds[j] == rows[i].id) {
$("#" + opts.tableId).datagrid("checkRow", i);
}
}
}
}
};
return $('#' + opts.tableId).datagrid(opts);
},
dialog : function(options) {
var opts = $.extend({
modal : true,
shadow : false,
onClose : function() {
$(this).dialog('destroy');
}
}, options);
opts.onLoad = function() {
if (typeof options.onLoad == 'function') {
options.onLoad.call();
}
$.messager.defaults.onClose = function() {};
//$.messager.progress('close')
};
opts.onOpen = function() {
if (typeof options.onOpen == 'function') {
options.onOpen.call();
}
//数据加载
/*$.messager.progress({
text : '数据加载中....',
interval : 100
});*/
};
if (opts.dialogSelector) {
//如果是自定义选择器生成dialog,就不需要调用销毁
opts.onClose = function() {};
return opts.dialogSelector.dialog(opts);
} else {
return $('<div/>').dialog(opts);
}
},
combobox : function(options) {
if (!options.selector) {
alert('selector必须设置');
return;
}
var opts = $.extend({
valueField : 'id',
textField : 'text',
defaultEmptyValue : '',
defaultEmptyText : '-- 请选择 --',
//空值行是否需要,默认为true,需要
needEmpty : true
}, options);
//如果key,value传进来的属性名一致,则强制改变textField属性名
var same = false;
if (opts.valueField == opts.textField) {
same = true;
opts.textField = "c_" + opts.textField;
}
var responseInfo;
$.ajax({
url : opts.url,
async : false,
success : function(data) {
responseInfo = data;
}
});
//设置第一个空行
var data = [];
if (opts.needEmpty) {
var d = {};
d[opts.valueField] = opts.defaultEmptyValue;
d[opts.textField] = opts.defaultEmptyText;
data.push(d);
}
var complete_data = stringutil.toJson(responseInfo.data);
for (var i = 0; i < complete_data.length; i++) {
var d = {};
d[opts.valueField] = complete_data[i][opts.valueField];
var textFieldName;
if (same) {
//如果key,value属性名一致,则获取数据的时候,多了一个"c_"字符,要给予去除
textFieldName = opts.textField.split("c_")[1];
} else {
textFieldName = opts.textField;
}
d[opts.textField] = complete_data[i][textFieldName];
data.push(d);
}
if (responseInfo.code == '0000') {
if ($(opts.selector).length == 0) {
alert('selector设置错误');
}
opts.data = data;
delete opts.url;
var handle = $(opts.selector).combobox(opts);
return handle;
}
return null;
},
calendar : function(options) {
if (!options.selector) {
alert('selector必须设置');
return;
}
var opts = $.extend({
current : new Date()
}, options);
$(opts.selector).calendar({
current : new Date()
});
},
datebox : function(options) {
if (!options.selector) {
alert('selector必须设置');
return;
}
var opts = $.extend({
formatter : function(date) {
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
}
}, options);
$(opts.selector).datebox(opts);
},
treegrid : function(options) {
var opts = $.extend({
animate : true,
rownumbers : true,
idField : 'id',
treeField : 'name',
tableId : options.tableId,
autoRowHeight:false,
fitColumns:true,
scrollbarSize:0
}, options);
opts.onLoadSuccess = function() {
if (typeof options.onLoadSuccess == 'function') {
options.onLoadSuccess.call();
}
};
opts.onDblClickRow=function(row){
if (typeof options.onDblClickRow == 'function') {
options.onDblClickRow.call();
}
$('#' + opts.tableId).treegrid('toggle',row.id);
};
opts.onLoadError=function(){
if (typeof options.onLoadError == 'function') {
options.onLoadError.call();
}
alert('数据获取失败!');
}
return $('#' + opts.tableId).treegrid(opts);
},
tree : function(options) {
var opts = $.extend({
checkbox : false,
lines : false,
animate : true,
treeId : options.treeId
}, options);
return $('#' + opts.treeId).tree(opts);
}
}
/**
* tree数据中,如果不是叶节点,则将checked属性设置为false
*/
function notleafToUnchecked(data){
for(var i=0;i<data.length;i++){
if(!stringutil.isEmpty(data[i].children)&&data[i].children.length!=0){
//表示非叶子节点
//将checked属性设置为false
data[i].checked=false;
data[i]._checked=false;
//继续判断子节点
notleafToUnchecked(data[i].children);
}
}
}
/**
* 流程编辑页面
* @returns {Boolean}
*/
function openProcEditRow(editUrl,is_row,is_title,is_max,is_width,is_height,is_left,is_top){
$('#detail').dialog( {
title : is_title,
iconCls : $.getJwWindowPic(),
width : ls_width * is_width,
height :ls_height * is_height,
closed : false,
cache : false,
maximizable:is_max,
left:is_left,
top:is_top,
href : editUrl,
queryParams:get_FIELD(is_row),
modal : true,
buttons : [ {
text : '保存',
iconCls : 'icon-ok',
handler : function() {
saveBox('detail','list');
}
}, {
text : '退回',
iconCls : 'icon-ext-44_08',
handler : function() {
lastBox('detail','list');
}
}, {
text : '下一步',
iconCls : 'icon-ext-44_08',
handler : function() {
nextBox('detail','list');
}
}, {
text : '关闭',
iconCls : 'icon-back',
handler : function() {
closeBox('detail');
}
} ],
onLoad:function editUrlOnload(){
if(is_row.OPETYPE=='insert'){
addUrlOnloadCallback(is_row);
}else{
updateUrlOnloadCallback(is_row);
}
}
});
}
/****/
//弹出层流程编辑上一步(退回)按扭
function lastBox(Box_id,List_id) {
if(Box_id==null||Box_id==''||Box_id==undefined)
Box_id='detail';
if(List_id==null||List_id==''||List_id==undefined)
List_id='list';
var returnIsValid = $('#inputForm').form('validate');
if (returnIsValid) {
//$("#inputForm").submit();
var query = $("#inputForm").getFormVal();
var v_result = backProc(query);
if (v_result != null && v_result != undefined) {
closeBox(Box_id);
$.messager.alert('提示', v_result.VALUE);
}
}
}
//弹出层流程编辑下一步按扭
function nextBox(Box_id,List_id) {
if(Box_id==null||Box_id==''||Box_id==undefined)
Box_id='detail';
if(List_id==null||List_id==''||List_id==undefined)
List_id='list';
var returnIsValid = $('#inputForm').form('validate');
if (returnIsValid) {
//$("#inputForm").submit();
var query = $("#inputForm").getFormVal();
var v_result;
if ($('#OPETYPE').val() == null || $('#OPETYPE').val() == undefined
|| $('#OPETYPE').val() == '' || $('#OPETYPE').val()=='insert'){
v_result = insertDataToNext(query);
}
else{
v_result = updateDataToNext(query);
}
if (v_result != null && v_result != undefined) {
closeBox(Box_id);
$.messager.alert('提示', v_result.VALUE);
}
}
}
/****/
/**
* 模块初始化
*/
function initModule(listFunction,strutsRoutes) {
//此乃本模块与后台交互的方法接口部分
var currency_module = function(format) {
this.module = "";
this.action = "";
this.format = format;
};
//定义数据交互
currency_module.prototype = BusinessObject;
for(k in listFunction){
eval('currency_module.prototype.'+listFunction[k]+' = function() {};');
}
//创建一个数据操作对象,然后再后续使用
for(k in strutsRoutes){
eval('currency_module.'+k+' = new currency_module("json").delegate("'+strutsRoutes[k]+'");');
}
return currency_module;
}
\ No newline at end of file
...@@ -1823,7 +1823,7 @@ function openViewIframRow(opendiv,editUrl,is_row,is_title,is_max,is_width,is_hei ...@@ -1823,7 +1823,7 @@ function openViewIframRow(opendiv,editUrl,is_row,is_title,is_max,is_width,is_hei
maximizable:is_max, maximizable:is_max,
left:is_left, left:is_left,
top:is_top, top:is_top,
content : '<iframe scrolling="yes" frameborder="0" src="'+ editUrl+ '" style="width:100%;height:98%;"></iframe><span id="return_text"></span>', content : '<iframe scrolling="yes" frameborder="0" src="'+ editUrl+ '" style="width:100%;height:98%;"></iframe><span id="return_text" style="display:none;">'+JSON.stringify(get_FIELD(is_row))+'</span>',
queryParams:get_FIELD(is_row), queryParams:get_FIELD(is_row),
modal : true, modal : true,
buttons : [{ buttons : [{
......
var todoModule=initModule([
'insertInfo',
'updateInfo',
'deleteInfo',
'listInfo',
'updateDoState'],{
act:'todoAct',
data:'todoData'
});
//说明: 1、所有方法里统一传递josn格式的参数,用于后台交互,如data.listTables(param) ,如没有参数则传'{}',如data.listTables({})
// 2、前后台数据获取传输协议 如:json[{'0':{pageCount':'2','pageNo':'1','pageSize':'20','rowSet':'[{0},{1}....]'}}]
// 3、前后台增删改的返回状态 如:json[{'0':{'rowSet':{'NAME':'-1','VALUE':'保存失败'}}}]
\ No newline at end of file
/**
* 序号:1
* 功能:定义分页(EasyUI)
* 参数:
* 说明:
* 作者:朱天成
* 时间:2018-08-07
* 单位:宁波金网
* 备注:无需更改
**/
var ls_width = $(window).width();
var ls_height = $(window).height();
var local_page = 1;
var rows = 20;
var listPageSize = [ 10, 20, 50, 100, 500, 1000 ];
var queryData = eval("({'page':'" + local_page + "','rows':'" + rows + "'})");
var tab_n = 0;
//重置分页参数
function resetQueryData() {
queryData = "";
queryData = eval("({'page':'" + local_page + "','rows':'" + rows + "'})");
}
//定义附件关联模块ID(1:一般业务,2:测试信息,3:审批业务,999:其它数据 )
var ls_module_id = '2';
//定义当前模块业务类型(YBYW:一般业务,SPGL:审批业务)
var ls_ywlx = 'YBYW';
/****/
/**
* 序号:2
* 功能:构建下拉框内容
* 参数:
* 说明:方便新增、修改页面里的下拉选项加载数据
* 作者:朱天成
* 时间:2018-08-07
* 单位:杰夫兄弟智慧科技有限公司
* 备注:需更改
**/
var v_sender_or_recipient_data = [{CODE_ID:'0',CODE_NAME:'全部'},{CODE_ID:'1',CODE_NAME:'我发起的'},{CODE_ID:'2',CODE_NAME:'我的代办'}];
var v_do_state_data = [{CODE_ID:'all',CODE_NAME:'全部'},{CODE_ID:'0',CODE_NAME:'未办'},{CODE_ID:'1',CODE_NAME:'已办'}];
/****/
/**
* 序号:3
* 功能:构建主页面列表
* 参数:
* 说明:
* 作者:朱天成
* 时间:2018-08-07
* 单位:杰夫兄弟智慧科技有限公司
* 备注:需更改
**/
//定义grid列表
var ls_title = "代办管理";
var is_column = [ [
{
field : 'TITLE',
title : '主题',
width : 350,
align : 'center'
},
{
field : 'SEND_REAL_NAME',
title : '发起人',
width : 100,
align : 'center'
},
{
field : 'RECIPIENT_REAL_NAME',
title : '接收人',
width : 100,
align : 'center'
},
{
field : 'LAUNCH_TIME',
title : '发起时间',
width : 120,
align : 'center'
},
{
field : 'READ_TIME',
title : '读取时间',
width : 120,
align : 'center',
formatter : function(value,row,index){
return (value==null||value=='')?"未读":value;
}
},
{
field : 'DO_TIME',
title : '办理时间',
width : 120,
align : 'center',
formatter : function(value,row,index){
return (value==null||value=='')?"未办":value;
}
}
] ];
//列表加载完成回调
function dataOnLoadSuccess() {
}
//设置颜色和每行高度
function rowstyler(index, row) {
}
//展示列表
datagrid("list", ls_title, gaowj.WEB_APP_NAME + "/todoData_list", queryData, is_column, 60, 80);
$(function(){
$('#FIELD_ROLE').combobox({
data : v_sender_or_recipient_data,
valueField : 'CODE_ID',
textField : 'CODE_NAME',
editable:false,
panelHeight:'auto'
});
$('#FIELD_DO_STATE').combobox({
data : v_do_state_data,
valueField : 'CODE_ID',
textField : 'CODE_NAME',
editable:false,
panelHeight:'auto'
});
});
/****/
/**
* 序号:4
* 功能:设置主页面操作列菜单
* 参数:
* 说明:
* 作者:朱天成
* 时间:2018-08-07
* 单位:杰夫兄弟智慧科技有限公司
* 备注:需更改
**/
//操用列显示更多(一般情况下无需更改)
function formatMenu(value, data, index) {
var returnData = "";
return returnData
+ "<span class=\"icon-ext-moremenu\" style=\"padding-left:20px;*width:20px;\"></span>"
+ "<span data-p1=" + index + " class=\"easyui-tooltip\" style=\"color:blue;cursor:pointer;\">更多</span>";
}
//上浮横向菜单集里的具体菜单项(需更改)
function getOptionMenu(data, index) {
var returnData = "<span class=\"icon-edit\" style=\"padding-left:20px;*width:20px;\"></span> <a href=\"javascript:void(0);\" onclick=\"editRow('"
+ index + "')\">编辑</a> | <span class=\"icon-clear\" style=\"padding-left:20px;*width:20px;\"></span><a href=\"javascript:void(0);\" onclick=\"deleteRow('"
+ index + "')\">删除</a> | <span class=\"icon-reload\" style=\"padding-left:20px;*width:20px;\"></span><a href=\"javascript:void(0);\" onclick=\"todoEndRow('"
+ index + "')\">已办</a>";
return returnData;
}
//返回菜单集的菜单个数(需更改)
function getOptionMenuCount() {
var is_menu_count = 3;
return is_menu_count;
}
/****/
/**
* 序号:5
* 功能:新增修改弹出
* 参数:
* 说明:
* 作者:朱天成
* 时间:2018-08-07
* 单位:杰夫兄弟智慧科技有限公司
* 备注:需更改
**/
//加载增加子页面
function addRow() {
var is_row = {
OPETYPE : 'insert'
};
openEditRow("todoView_todoTabDetail", is_row, "新增", true, 0.65, 0.95, 0, 0);
}
//加载增加子页面成功后的回调
function addUrlOnloadCallback(is_row) {
}
//保存
function insertData(is_entity) {
var RECIPIENTS="";
$("#todo_select_user div").each(function(){
RECIPIENTS+=","+$(this).data('id');
});
if(RECIPIENTS!=''){
is_entity.FIELD_RECIPIENTS=RECIPIENTS.substr("1");
}
var v_result = todoModule.act.insertInfo(is_entity);
$('#list').datagrid('reload');
return v_result;
}
//加载修改子页面
function editRow(index) {
$('#list').datagrid('selectRow', index);
var is_row = $('#list').datagrid('getSelections');
$('#list').datagrid('clearSelections');
is_row[0].OPETYPE = 'update';
openEditRow("todoView_todoTabDetail", is_row[0], "编辑", true, 0.65, 0.95, 0, 0);
}
//加载修改子页面成功后的回调
function updateUrlOnloadCallback(is_row) {
$("#choice_user_tr").remove();
$("#inputForm").form('load',get_FIELD(is_row));
}
//保存
function updateData(is_entity) {
var v_result = todoModule.act.updateInfo(is_entity);
$('#list').datagrid('reload');
return v_result;
}
/****/
/**
* 序号:6
* 功能:单个删除
* 参数:
* 说明:
* 作者:朱天成
* 时间:2018-08-07
* 单位:杰夫兄弟智慧科技有限公司
* 备注:需更改
**/
function deleteRow(index) {
$('#list').datagrid('selectRow', index);
var is_row = $('#list').datagrid('getSelections');
$('#list').datagrid('clearSelections');
var code = is_row[0].UUID;
$.messager.confirm('提示', '确定删除?', function(r) {
if (r) {
var v_query = {};
v_query.FIELD_CODE = code;
var v_result = todoModule.act.deleteInfo(v_query);
$.messager.alert('提示', v_result.VALUE);
$('#list').datagrid('reload');
}
});
}
/****/
/**
* 序号:7
* 功能:批量删除
* 参数:
* 说明:
* 作者:朱天成
* 时间:2018-08-07
* 单位:杰夫兄弟智慧科技有限公司
* 备注:需更改
**/
function deleteBatchRow() {
var code = "";
var rows = $('#list').datagrid('getSelections');
for (var i = 0; i < rows.length; i++) {
code = code + rows[i].UUID + ",";
}
if (rows == null || rows == "") {
$.messager.alert('提示', "请选择需删除的记录!", 'info');
return;
}
if (code.length > 0) {
code = code.substring(0, code.length - 1);
}
$.messager.confirm('提示', '确定删除?', function(r) {
if (r) {
var v_query = {};
v_query.FIELD_CODE = code;
var v_result = todoModule.act.deleteInfo(v_query);
$.messager.alert('提示', v_result.VALUE);
$('#list').datagrid('reload');
}
});
}
/****/
/**
* 序号:8
* 功能:刷新
* 参数:
* 说明:
* 作者:朱天成
* 时间:2018-08-07
* 单位:杰夫兄弟智慧科技有限公司
* 备注:需更改
**/
function refreshRow() {
$('#list').datagrid('load', {});
$("#todoTab_searchForm")[0].reset();
}
/****/
/**
* 序号:9
* 功能:查询
* 参数:
* 说明:
* 作者:朱天成
* 时间:2018-08-07
* 单位:杰夫兄弟智慧科技有限公司
* 备注:需更改
**/
function searchRow() {
var v_query = $("#todoTab_searchForm").getFormVal();
$('#list').datagrid('load', v_query);
}
/****/
/**
* 序号:10
* 功能:人员弹出框选择
* 参数:
* 说明:
* 作者:高伟杰
* 时间:2016-01-22
* 单位:宁波金网
* 备注:需更改
**/
function choiceUser(uuid, singleSelect) { //编辑框上弹出单位选择
var is_title = "人员选择";
var is_row = {
}
var modifyUrl = gaowj.WEB_APP_NAME + "/userchoiceView_userChoice?singleSelect=" + singleSelect;
openViewIframRow("userChoice", modifyUrl, is_row, is_title, true, 0.95, 0.95, 0, 0);
}
//选单位和人员后回调方法
function closeCallback(is_entity) {
var result = $('#return_text').data('json');
if (result == '' || result == null || result == undefined)
return;
$('#todo_select_user').empty();
for (var i = 0; i < result.length; i++) {
//创建一个表格
var $row = createUserInfo(result[i]);
$("#todo_select_user").append($row);
}
}
//创建一个收件人
function createUserInfo(data) {
var $div = $('<div></div>');
$div.data('id', data.USER_ID);
$div.append($('<span>' + data.USER_NAME + '</span>'));
$div.append($('<span class="icon-clear" onclick="removeUserInfo(this)"></span>'));
return $div;
}
function removeUserInfo(span){
$(span).parent().remove();
}
//设为已办
function todoEndRow(index){
$('#list').datagrid('selectRow', index);
var is_row = $('#list').datagrid('getSelections');
$('#list').datagrid('clearSelections');
var v_result = todoModule.act.updateDoState(get_FIELD(is_row[0]));
$.messager.alert('提示', v_result.VALUE);
$('#list').datagrid('reload');
}
\ No newline at end of file
<%@page contentType="text/html; charset=UTF-8"%>
<%@ include file="/gaowj/header-simple-1.0.jsp"%>
<div id="todoTab">
<link rel="stylesheet" type="text/css" href="${ctx}/jwapp/common/css/content_body.css" charset="utf-8"></link>
<link rel="stylesheet" type="text/css" href="${ctx}/jwapp/common/css/content_table.css" charset="utf-8"></link>
<link rel="stylesheet" type="text/css" href="${ctx}/jwapp/common/css/content_input.css" charset="utf-8"></link>
</div>
<table id="list" style="width: 100%; height: 100%;"></table>
<div id="tb">
<form id="todoTab_searchForm" style="float:left">
主题内容: <input class="easyui-textbox" id="FIELD_TITLE" name="FIELD_TITLE" style="width:200px"/>&nbsp;&nbsp;
角色: <input class="easyui-textbox" id="FIELD_ROLE" name="FIELD_ROLE" value="0" style="width:200px"/>&nbsp;&nbsp;
办理状态: <input class="easyui-textbox" id="FIELD_DO_STATE" name="FIELD_DO_STATE" value="all" style="width:200px"/>&nbsp;&nbsp;
</form>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search',plain:true" onclick="javascript:searchRow()">查询</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-reload',plain:true" onclick="javascript:refreshRow()">刷新</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true" onclick="javascript:addRow()">新增</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-clear',plain:true" onclick="javascript:deleteBatchRow()">删除</a>
</div>
<div id="detail" style="overflow:auto;"></div>
<div id="userChoice" style="overflow:auto;"></div>
<script type="text/javascript" src="${ctx}/jwapp/pages/standard/js/jwStandardModule.js" charset="utf-8"></script>
<script type="text/javascript" src="${ctx}/jwapp/pages/todo/js/todoModule.js" charset="utf-8"></script>
<script type="text/javascript" src="${ctx}/jwapp/pages/todo/js/todoTab.js" charset="utf-8"></script>
<%@page contentType="text/html; charset=UTF-8"%>
<form id="inputForm" method="post" style="width: 100%;">
<input type="hidden" name="FIELD_OPETYPE" id="OPETYPE" value="${is_row.OPETYPE}" />
<input type="hidden" name="FIELD_UUID" id="UUID" value="${is_row.UUID}" />
<input type="hidden" name="FIELD_TYPE" id="TYPE" value="${is_row.TYPE}" />
<table align="center" border="0" cellpadding="0" cellspacing="0" class="tableStyle" style="margin: 10px 15px; width: 95%; line-height: 30px;">
<tr id="choice_user_tr">
<td style="width: 15%;" class="tableStyleLable">
<span>接收人:</span>
</td>
<td style="width: 85%">
<div class="choice_user" id="todo_select_user"></div>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-ext-37_34',plain:true"
onclick="javascript:choiceUser('',false)">选</a>
</td>
</tr>
<tr>
<td style="width: 15%;" class="tableStyleLable">
<span>主题内容:</span>
</td>
<td style="width: 85%">
<input class="easyui-textbox" id="TITLE" name="FIELD_TITLE" style="width: 400px" required="true" />
</td>
</tr>
<tr>
<td style="width: 15%;" class="tableStyleLable">
<span>副标题:</span>
</td>
<td style="width: 85%">
<input class="easyui-textbox" id="SUB_TITLE" name="FIELD_SUB_TITLE" style="width: 400px" required="true" />
</td>
</tr>
<tr>
<td style="width: 15%;" class="tableStyleLable">
<span>URL:</span>
</td>
<td style="width: 85%">
<input class="easyui-textbox" id="URL" name="FIELD_URL" style="width: 400px" required="true" />
</td>
</tr>
<tr>
<td style="width: 15%;" class="tableStyleLable">
<span>正文:</span>
</td>
<td style="width: 85%">
<input class="easyui-textbox" id="CONTENT" name="FIELD_CONTENT" style="width: 400px" required="true" />
</td>
</tr>
</table>
</form>
<%@page contentType="text/html; charset=UTF-8"%>
<%@ include file="/gaowj/header-simple-1.0.jsp"%>
<div id="todoTab">
<link rel="stylesheet" type="text/css" href="${ctx}/jwapp/common/css/content_body.css" charset="utf-8"></link>
<link rel="stylesheet" type="text/css" href="${ctx}/jwapp/common/css/content_table.css" charset="utf-8"></link>
<link rel="stylesheet" type="text/css" href="${ctx}/jwapp/common/css/content_input.css" charset="utf-8"></link>
</div>
<table id="list" style="width: 100%; height: 100%;"></table>
<div id="tb">
<form id="todoTab_searchForm" style="float:left">
主题内容: <input class="easyui-textbox" id="FIELD_TITLE" name="FIELD_TITLE" style="width:200px"/>&nbsp;&nbsp;
角色: <input class="easyui-textbox" id="FIELD_ROLE" name="FIELD_ROLE" value="0" style="width:200px"/>&nbsp;&nbsp;
办理状态: <input class="easyui-textbox" id="FIELD_DO_STATE" name="FIELD_DO_STATE" value="all" style="width:200px"/>&nbsp;&nbsp;
</form>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search',plain:true" onclick="javascript:searchRow()">查询</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-reload',plain:true" onclick="javascript:refreshRow()">刷新</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true" onclick="javascript:addRow()">新增</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-clear',plain:true" onclick="javascript:deleteBatchRow()">删除</a>
</div>
<div id="detail" style="overflow:auto;"></div>
<div id="userChoice" style="overflow:auto;"></div>
<script type="text/javascript" src="${ctx}/jwapp/pages/standard/js/jwStandardModule.js" charset="utf-8"></script>
<script type="text/javascript" src="${ctx}/jwapp/pages/todo/js/todoModule.js" charset="utf-8"></script>
<script type="text/javascript" src="${ctx}/jwapp/pages/todo/js/todoTab.js" charset="utf-8"></script>
<%@page contentType="text/html; charset=UTF-8"%>
<form id="inputForm" method="post" style="width: 100%;">
<input type="hidden" name="FIELD_OPETYPE" id="OPETYPE" value="${is_row.OPETYPE}" />
<input type="hidden" name="FIELD_UUID" id="UUID" value="${is_row.UUID}" />
<table align="center" border="0" cellpadding="0" cellspacing="0" class="tableStyle" style="margin: 10px 15px; width: 95%; line-height: 30px;">
<tr id="choice_user_tr">
<td style="width: 15%;" class="tableStyleLable">
<span>接收人:</span>
</td>
<td style="width: 85%">
<div class="choice_user" id="todo_select_user"></div>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-ext-37_34',plain:true"
onclick="javascript:choiceUser('',false)">选</a>
</td>
</tr>
<tr>
<td style="width: 15%;" class="tableStyleLable">
<span>主题内容:</span>
</td>
<td style="width: 85%">
<input class="easyui-textbox" id="TITLE" name="FIELD_TITLE" style="width: 400px" required="true" />
</td>
</tr>
<tr>
<td style="width: 15%;" class="tableStyleLable">
<span>副标题:</span>
</td>
<td style="width: 85%">
<input class="easyui-textbox" id="SUB_TITLE" name="FIELD_SUB_TITLE" style="width: 400px" required="true" />
</td>
</tr>
<tr>
<td style="width: 15%;" class="tableStyleLable">
<span>URL:</span>
</td>
<td style="width: 85%">
<input class="easyui-textbox" id="URL" name="FIELD_URL" style="width: 400px" required="true" />
</td>
</tr>
<tr>
<td style="width: 15%;" class="tableStyleLable">
<span>正文:</span>
</td>
<td style="width: 85%">
<input class="easyui-textbox" id="CONTENT" name="FIELD_CONTENT" style="width: 400px" required="true" />
</td>
</tr>
</table>
</form>
/** * 序号:1 * 功能:定义分页(EasyUI) * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:无需更改 **/ var ls_width = $(window).width();var ls_height = $(window).height(); $(window).resize(function(){ ls_width = $(window).width(); ls_height = $(window).height();}); var local_page=1;var rows=20;var listPageSize = [10,20,50,100,500,1000];var queryData = eval("({'page':'"+local_page+"','rows':'"+rows+"'})");var tab_n = 0; //重置分页参数 function resetQueryData(){ queryData = ""; queryData = eval("({'page':'"+local_page+"','rows':'"+rows+"'})"); } //定义用户当前全局参数 var ls_node=null;//当前选中的Node queryData.FIELD_UNIT_ID_IS_PARENT='A'; var is_singleSelect = $.getUrlParam('singleSelect'); if(is_singleSelect == null || is_singleSelect=="" || is_singleSelect==undefined){ is_singleSelect = false; }else if(is_singleSelect == "true"){ is_singleSelect = true;; }else if(is_singleSelect == "false"){ is_singleSelect = false;; } /****/ /** * 序号:2 * 功能:构建下拉框内容 * 参数: * 说明:方便新增、修改页面里的下拉选项加载数据 * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ //加载是否实体下拉框 /****/ /** * 序号:3 * 功能:构建主页面列表 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ //定义grid列表 $('#list').datagrid({ title:"人员信息", iconCls:$.getJwWindowPic(), url:'userchoiceData_listUser', queryParams : queryData,//查询参数 rownumbers : true,//显示索引号 singleSelect : is_singleSelect,//是否多选 fitColumns : false,//是否撑满 autoRowHeight : 30,//设定高度 pagination : true,//分页显示 pageSize : rows,//显示行数 pageList : listPageSize,//条数选择 striped : true, //是否隔行显示 remoteSort : false,//是否从服务器排序 frozenColumns : [[ { field : 'ck', checkbox : true } ]], columns : [ [ { field : 'ID_NUMBER', title : '人员帐号', width : 100, align : 'left' }, { field : 'USER_NAME', title : '姓名', width : 100, align : 'left' }, { field : 'UNIT_NAME', title : '单位', width : 200, align : 'left' },{ field : 'ORDER_ID', title : '排序', width : 80, align : 'center' },{ field : 'SEX_NAME', title : '性别', width : 80, align : 'center' }, { field : 'YESNO_NAME', title : '是否激活', align : 'center', width : 80 }, { field : 'BEGIN_TIME', title : '注册日期', align : 'center', width : 120 }, { field : 'MOBILE', title : '手机号', align : 'center', width : 120 }, { field : 'EMAIL', title : '邮箱', align : 'center', width : 150 } ] ], toolbar : '#tb', onLoadSuccess : function(data) { } }); /****/ /** * 序号:4 * 功能:刷新 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ function refreshRow(){ reloadTree(); $("#userChoice_searchForm")[0].reset(); } /****/ /** * 序号:5 * 功能:查询 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ function searchRow(){ var v_query = $("#userChoice_searchForm").getFormVal(); $('#list').datagrid('load',v_query); } /****/ /** * 序号:6 * 功能:加载单位树列表 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ //setInitTree(节点显示字段,节点显示主题,节点字段UUID,父节点字段) var setting = setInitTree("NAME","NAME","UUID","PARENT_ID"); //加载树时的默认点击 function defautClick(zTree,treeNode){ if(ls_node == null){ ls_node = treeNode; zTree.selectNode(ls_node); }else{ zTree.selectNode(ls_node); modifyNode(ls_node); } } //点击左边节点,datagrid过滤 function modifyNode(treeNode){ ls_node = treeNode; queryData.FIELD_UNIT_ID =treeNode.UUID; $('#list').datagrid('reload',queryData); } //loadTree(后台数据路径,显示的层ID) loadTree("userchoiceData_listUnitAll","userChoice_tree","UUID","A"); function reloadTree(){ loadTree("userchoiceData_listUnitAll","userChoice_tree","UUID","A"); } /****/ /** * 序号:7 * 功能:提交返回 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ function tj(){ var uuids = ""; var rows = $('#list').datagrid('getSelections'); for(var i=0; i<rows.length; i++){ uuids = uuids + rows[i].USER_ID+","; } if(rows == null || rows == ""){ $.messager.alert('提示',"请选择一行!"); return; } if(uuids.length>0){ uuids = uuids.substring(0, uuids.length - 1); } parent.$('#return_text').text(uuids); parent.$('#userChoice').window('close'); } /****/ /** * 序号:1 * 功能:定义分页(EasyUI) * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:无需更改 **/ var ls_width = $(window).width();var ls_height = $(window).height(); $(window).resize(function(){ ls_width = $(window).width(); ls_height = $(window).height();}); var local_page=1;var rows=20;var listPageSize = [10,20,50,100,500,1000];var queryData = eval("({'page':'"+local_page+"','rows':'"+rows+"'})");var tab_n = 0; //重置分页参数 function resetQueryData(){ queryData = ""; queryData = eval("({'page':'"+local_page+"','rows':'"+rows+"'})"); } //定义用户当前全局参数 var ls_node=null;//当前选中的Node queryData.FIELD_UNIT_ID_IS_PARENT='A'; var is_singleSelect = $.getUrlParam('singleSelect'); if(is_singleSelect == null || is_singleSelect=="" || is_singleSelect==undefined){ is_singleSelect = false; }else if(is_singleSelect == "true"){ is_singleSelect = true;; }else if(is_singleSelect == "false"){ is_singleSelect = false;; } /****/ /** * 序号:2 * 功能:构建下拉框内容 * 参数: * 说明:方便新增、修改页面里的下拉选项加载数据 * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ //加载是否实体下拉框 /****/ /** * 序号:3 * 功能:构建主页面列表 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ //定义grid列表 $('#list').datagrid({ title:"人员信息", iconCls:$.getJwWindowPic(), url:'userchoiceData_listUser', queryParams : queryData,//查询参数 rownumbers : true,//显示索引号 singleSelect : is_singleSelect,//是否多选 fitColumns : false,//是否撑满 autoRowHeight : 30,//设定高度 pagination : true,//分页显示 pageSize : rows,//显示行数 pageList : listPageSize,//条数选择 striped : true, //是否隔行显示 remoteSort : false,//是否从服务器排序 frozenColumns : [[ { field : 'ck', checkbox : true } ]], columns : [ [ { field : 'ID_NUMBER', title : '人员帐号', width : 100, align : 'left' }, { field : 'USER_NAME', title : '姓名', width : 100, align : 'left' }, { field : 'UNIT_NAME', title : '单位', width : 200, align : 'left' },{ field : 'ORDER_ID', title : '排序', width : 80, align : 'center' },{ field : 'SEX_NAME', title : '性别', width : 80, align : 'center' }, { field : 'YESNO_NAME', title : '是否激活', align : 'center', width : 80 }, { field : 'BEGIN_TIME', title : '注册日期', align : 'center', width : 120 }, { field : 'MOBILE', title : '手机号', align : 'center', width : 120 }, { field : 'EMAIL', title : '邮箱', align : 'center', width : 150 } ] ], toolbar : '#tb', onLoadSuccess : function(data) { } }); /****/ /** * 序号:4 * 功能:刷新 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ function refreshRow(){ reloadTree(); $("#userChoice_searchForm")[0].reset(); } /****/ /** * 序号:5 * 功能:查询 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ function searchRow(){ var v_query = $("#userChoice_searchForm").getFormVal(); $('#list').datagrid('load',v_query); } /****/ /** * 序号:6 * 功能:加载单位树列表 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ //setInitTree(节点显示字段,节点显示主题,节点字段UUID,父节点字段) var setting = setInitTree("NAME","NAME","UUID","PARENT_ID"); //加载树时的默认点击 function defautClick(zTree,treeNode){ if(ls_node == null){ ls_node = treeNode; zTree.selectNode(ls_node); }else{ zTree.selectNode(ls_node); modifyNode(ls_node); } } //点击左边节点,datagrid过滤 function modifyNode(treeNode){ ls_node = treeNode; queryData.FIELD_UNIT_ID =treeNode.UUID; $('#list').datagrid('reload',queryData); } //loadTree(后台数据路径,显示的层ID) loadTree("userchoiceData_listUnitAll","userChoice_tree","UUID","A"); function reloadTree(){ loadTree("userchoiceData_listUnitAll","userChoice_tree","UUID","A"); } /****/ /** * 序号:7 * 功能:提交返回 * 参数: * 说明: * 作者:高伟杰 * 时间:2016-01-22 * 单位:宁波金网 * 备注:需更改 **/ function tj(){ var uuids = ""; var rows = $('#list').datagrid('getSelections'); for(var i=0; i<rows.length; i++){ uuids = uuids + rows[i].USER_ID+","; } if(rows == null || rows == ""){ $.messager.alert('提示',"请选择一行!"); return; } if(uuids.length>0){ uuids = uuids.substring(0, uuids.length - 1); } parent.$('#return_text').text(uuids); parent.$('#return_text').data('json',rows); parent.$('#userChoice').window('close'); } /****/
\ No newline at end of file \ No newline at end of file
......
package com.gaowj.business.base;
import java.util.List;
import java.util.Map;
import com.gaowj.business.exception.BusinessException;
import com.gaowj.business.util.Page;
/**
* 业务层基准接口(包含通用的增删改查方法)
*
* @author luosz
*
*/
public interface BaseBusiness {
/**
* 插入
*
* @param entity
* 插入的对象
* @throws BusinessException
* @date 2018-09-01 下午3:13:49
* @author luosz@jfbrother.com
*/
void insert(Map<String, Object> entity) throws BusinessException;
/**
* 更新
*
* @param entity
* 更新的对象
* @throws BusinessException
* @date 2018-09-01 下午3:13:54
* @author luosz@jfbrother.com
*/
void update(Map<String, Object> entity) throws BusinessException;
/**
* 删除记录
*
* @param list
* 需要删除的对象的主键uuid组成的list
* @throws BusinessException
* @date 2018-09-01 下午3:13:59
* @author luosz@jfbrother.com
*/
void delete(List<String> list) throws BusinessException;
/**
* 分页获取记录
*
* @param pageNo
* 页码
* @param pageSize
* 每页显示多少条
* @param query
* 查询条件
* @return 分页记录
* @throws BusinessException
* @date 2018-09-01 下午3:14:03
* @author luosz@jfbrother.com
*/
Page<Map<String, Object>> list(int pageNo, int pageSize, Map<String, Object> query) throws BusinessException;
/**
* 获取所有记录
*
* @param query
* 查询条件
* @return 记录
* @throws BusinessException
* @date 2018-09-01 下午3:14:08
* @author luosz@jfbrother.com
*/
List<Map<String, Object>> list(Map<String, Object> query) throws BusinessException;
/**
* 获取所有记录数
*
* @param query
* 查询条件
* @return 记录数
* @throws BusinessException
* @date 2018-09-01 下午3:14:13
* @author luosz@jfbrother.com
*/
int listCount(Map<String, Object> query) throws BusinessException;
}
package com.gaowj.business.base.impl;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import com.gaowj.business.base.BaseBusiness;
import com.gaowj.business.exception.BusinessException;
import com.gaowj.business.util.DaoUtil;
import com.gaowj.business.util.Page;
/**
* 业务层基准接口的默认实现
*
* @author luosz
*
*/
public abstract class BaseBusinessImpl implements BaseBusiness {
public BaseDAO dao;
@Override
public void insert(Map<String, Object> entity) throws BusinessException {
DaoUtil.addCreateInfo(entity);
makeInsertEntity(entity);
DaoUtil.addFieldsInfo(entity);
dao.insertInfo(entity);
}
@Override
public void update(Map<String, Object> entity) throws BusinessException {
DaoUtil.addUpdateInfo(entity);
makeUpdateEntity(entity);
DaoUtil.addFieldsInfo(entity, "UUID");
dao.updateInfo(entity);
}
@Override
public void delete(List<String> list) throws BusinessException {
dao.deleteInfo(list);
}
@Override
public Page<Map<String, Object>> list(int pageNo, int pageSize, Map<String, Object> query) throws BusinessException {
makeQuery(query);
// 计算起始记录
int pageStart = (pageNo - 1) * pageSize;
// 获取列表
List<Map<String, Object>> items = dao.listInfo(new RowBounds(pageStart, pageSize), query);
// 获取列表个数
int count = dao.listInfoCount(query);
// 创建分页对象
Page<Map<String, Object>> page = new Page<Map<String, Object>>();
page.setStart(pageStart);
page.setLimit(pageSize);
page.setCount(count);
page.setItems(items);
return page;
}
@Override
public List<Map<String, Object>> list(Map<String, Object> query) throws BusinessException {
makeQuery(query);
// 获取列表
List<Map<String, Object>> items = dao.listInfo(query);
return items;
}
@Override
public int listCount(Map<String, Object> query) throws BusinessException {
makeQuery(query);
return dao.listInfoCount(query);
}
/**
* 查询条件的设置,需要用户自己实现
*
* @param query
* @throws BusinessException
* @date 2018-09-01 下午6:22:56
* @author luosz@jfbrother.com
*/
public abstract void makeQuery(Map<String, Object> query) throws BusinessException;
/**
* 处理插入数据
*
* @param entity
* @date 2018-09-01 下午7:30:24
* @author luosz@jfbrother.com
*/
public abstract void makeInsertEntity(Map<String, Object> entity) throws BusinessException;
/**
* 处理更新数据
*
* @param entity
* @date 2018-09-01 下午7:30:36
* @author luosz@jfbrother.com
*/
public abstract void makeUpdateEntity(Map<String, Object> entity) throws BusinessException;
}
package com.gaowj.business.base.impl;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import com.gaowj.business.exception.BusinessException;
/**
* DAO接口基类
*
* @author luosz@jfbrother.com
*
*/
public interface BaseDAO {
/**
* 插入
*
* @param entity
* @throws BusinessException
* @date 2018-09-01 下午3:08:31
* @author luosz@jfbrother.com
*/
void insertInfo(Map<String, Object> entity) throws BusinessException;
/**
* 修改
*
* @param entity
* @throws BusinessException
* @date 2018-09-01 下午3:08:37
* @author luosz@jfbrother.com
*/
void updateInfo(Map<String, Object> entity) throws BusinessException;
/**
* 删除
*
* @param entity
* @throws BusinessException
* @date 2018-09-01 下午3:08:41
* @author luosz@jfbrother.com
*/
void deleteInfo(List<String> list) throws BusinessException;
/**
* 列表及详情(带翻页)
*
* @param rowbounds
* @param query
* @return
* @throws BusinessException
* @date 2018-09-01 下午3:08:47
* @author luosz@jfbrother.com
*/
List<Map<String, Object>> listInfo(RowBounds rowbounds, Map<String, Object> query) throws BusinessException;
/**
* 列表及详情
*
* @param query
* @return
* @throws BusinessException
* @date 2018-09-01 下午3:08:52
* @author luosz@jfbrother.com
*/
List<Map<String, Object>> listInfo(Map<String, Object> query) throws BusinessException;
/**
* 列表数量
*
* @param query
* @return
* @throws BusinessException
* @date 2018-09-01 下午3:08:56
* @author luosz@jfbrother.com
*/
int listInfoCount(Map<String, Object> query) throws BusinessException;
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gaowj.business.base.impl.BaseDAO">
<sql id="TABLE_NAME">
TABLE_NAME
</sql>
<sql id="WHERE">
<where>
<trim prefixOverrides="and">
<if test="UUID != null and UUID != ''">
and t.UUID = #{UUID}
</if>
</trim>
</where>
</sql>
<insert id="insertInfo" parameterType="map">
insert into
<include refid="TABLE_NAME"></include>
(
<trim prefix="" suffixOverrides=",">
<foreach collection="infos" item="info">
${info.key},
</foreach>
</trim>
) values(
<trim prefix="" suffixOverrides=",">
<foreach collection="infos" item="info">
#{info.value},
</foreach>
</trim>
)
</insert>
<update id="updateInfo" parameterType="map">
update
<include refid="TABLE_NAME"></include>
set
<trim prefix="" suffixOverrides=",">
<foreach collection="infos" item="info">
${info.key} = #{info.value} ,
</foreach>
</trim>
<where>
<if test="UUID != null and UUID != ''">
and UUID = #{UUID}
</if>
</where>
</update>
<delete id="deleteInfo" parameterType="list">
delete from
<include refid="TABLE_NAME"></include>
where UUID IN
<foreach collection="list" item="UUID" open="(" separator="," close=")">
#{UUID}
</foreach>
</delete>
<select id="listInfo" parameterType="map" resultType="upperCaseKeyMap">
select * from
<include refid="TABLE_NAME"></include>
t
<include refid="WHERE"></include>
</select>
</mapper>
\ No newline at end of file
package com.gaowj.business.util;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.apache.commons.lang.StringUtils;
import com.gaowj.business.exception.BusinessException;
/**
* 数据持久层工具类
*
* @author luosz
*
*/
public class DaoUtil {
/**
* 新增或者删除时,构造的字段list(key-value映射)
*/
public static final String INFO = "infos";
/**
* 映射中key的名称
*/
private static final String KEY = "key";
/**
* 映射中value的名称
*/
private static final String VALUE = "value";
/**
* 添加新建信息(UUID,CREATE_ID,CREATE_TIME,UPDATE_ID,UPDATE_TIME)
*
* @param entity
* 填充的对象
* @param ignoreField
* 需要忽略的字段
* @date 2018-09-01 下午5:25:27
* @author luosz@jfbrother.com
*/
public static void addCreateInfo(Map<String, Object> entity, String... ignoreFields) {
// 构造模板
Map<String, Object> entityModel = new HashMap<String, Object>();
entityModel.put("UUID", java.util.UUID.randomUUID().toString());
entityModel.put("CREATE_ID", SessionUtil.getCode());
entityModel.put("CREATE_TIME", new Date());
entityModel.put("UPDATE_ID", SessionUtil.getCode());
entityModel.put("UPDATE_TIME", new Date());
// 剔除忽略的属性
if (ignoreFields != null) {
for (String ignoreField : ignoreFields) {
entityModel.remove(ignoreField);
}
}
// 将模板中剩余的属性覆盖到entity
if (entityModel.keySet() != null) {
for (Entry<String, Object> field : entityModel.entrySet()) {
entity.put(field.getKey(), field.getValue());
}
}
}
/**
* 添加更新信息(UPDATE_ID,UPDATE_TIME)
*
* @param entity
* @param ignoreFields
* @date 2018-09-01 下午7:32:48
* @author luosz@jfbrother.com
*/
public static void addUpdateInfo(Map<String, Object> entity, String... ignoreFields) {
// 构造模板
Map<String, Object> entityModel = new HashMap<String, Object>();
entityModel.put("UPDATE_ID", SessionUtil.getCode());
entityModel.put("UPDATE_TIME", new Date());
// 剔除忽略的属性
if (ignoreFields != null) {
for (String ignoreField : ignoreFields) {
entityModel.remove(ignoreField);
}
}
// 将模板中剩余的属性覆盖到entity
if (entityModel.keySet() != null) {
for (Entry<String, Object> field : entityModel.entrySet()) {
entity.put(field.getKey(), field.getValue());
}
}
}
/**
* 将entity中的字段信息整理成key-value映射的列表,并放入info属性
*
* @param entity
* 需要构造的对象
* @param ignoreFields
* 构造中需要忽略的字段
* @date 2018-09-01 下午6:01:07
* @author luosz@jfbrother.com
*/
public static void addFieldsInfo(Map<String, Object> entity, String... ignoreFields) throws BusinessException {
if (entity.keySet() != null) {
// 字段列表
List<Map<String, Object>> listField = new ArrayList<Map<String, Object>>();
// 将map集合中的key和value 取出来分别放到list集合里
outer: for (String str : entity.keySet()) {
if (ignoreFields != null) {
for (String ignoreField : ignoreFields) {
// 如果该字段被忽略,则继续外层循环
if (StringUtils.equalsIgnoreCase(ignoreField, str))
continue outer;
}
}
// 构造key-value映射对象
Map<String, Object> mapping = new HashMap<String, Object>();
mapping.put(KEY, str);
mapping.put(VALUE, entity.get(str));
listField.add(mapping);
}
if (listField.size() > 0) {
entity.put(INFO, listField);
return;
}
}
throw new BusinessException(INFO + "构造失败!");
}
}
...@@ -139,6 +139,20 @@ ...@@ -139,6 +139,20 @@
<action name="voteView_*" class="com.jw.app.vote.action.viewAction" method="{1}"> <action name="voteView_*" class="com.jw.app.vote.action.viewAction" method="{1}">
<result name="{1}">/jwapp/pages/vote/{1}.jsp</result> <result name="{1}">/jwapp/pages/vote/{1}.jsp</result>
</action> </action>
<!-- 代办管理 -->
<action name="todoAct_*" class="com.jw.app.todo.action.actAction" method="{1}">
<result name="json" type="json">
<param name="root">jsonObject</param>
</result>
</action>
<action name="todoData_*" class="com.jw.app.todo.action.dataAction" method="{1}">
<result name="json" type="json">
<param name="root">jsonObject</param>
</result>
</action>
<action name="todoView_*" class="com.jw.app.todo.action.viewAction" method="{1}">
<result name="{1}">/jwapp/pages/todo/{1}.jsp</result>
</action>
<!-- 通知公告 --> <!-- 通知公告 -->
<action name="noticeAct_*" class="com.jw.app.notice.action.actAction" method="{1}"> <action name="noticeAct_*" class="com.jw.app.notice.action.actAction" method="{1}">
<result name="json" type="json"> <result name="json" type="json">
......
package com.jw.app.business;
import org.springframework.stereotype.Service;
import com.gaowj.business.base.BaseBusiness;
@Service
public interface TodoBusiness extends BaseBusiness {
}
package com.jw.app.business.todo;
import java.util.Date;
import java.util.Map;
import com.gaowj.business.base.impl.BaseBusinessImpl;
import com.gaowj.business.exception.BusinessException;
import com.gaowj.business.util.SessionUtil;
import com.jw.app.business.TodoBusiness;
public class TodoBusinessImpl extends BaseBusinessImpl implements TodoBusiness {
public void setTodoDAO(TodoDAO todoDAO) {
this.dao = todoDAO;
}
@Override
public void makeQuery(Map<String, Object> query) throws BusinessException {
//主题
if (query.get("TITLE") != null && !"".equals(query.get("TITLE"))) {
query.put("TITLE", "%" + query.get("TITLE") + "%");
}
//代办状态
if (!"0".equals(query.get("DO_STATE"))&&!"1".equals(query.get("DO_STATE"))) {
query.remove("DO_STATE");
}
//角色条件
if ("2".equals(query.get("ROLE"))) {
// 接收者是当前登录人
query.put("RECIPIENT", SessionUtil.getCode());
} else if ("1".equals(query.get("ROLE"))) {
// 发起者是当前登录人
query.put("SENDER", SessionUtil.getCode());
} else {
// 发送人或者接收人是当前登录人
query.put("SENDER_OR_RECIPIENT", SessionUtil.getCode());
}
}
@Override
public void makeInsertEntity(Map<String, Object> entity) throws BusinessException {
// 发送人是当前登录人
entity.put("SENDER", SessionUtil.getCode());
// 设置发起时间
entity.put("LAUNCH_TIME", new Date());
// 设置未读
entity.put("READ_STATE", 0);
// 设置未办
entity.put("DO_STATE", 0);
}
@Override
public void makeUpdateEntity(Map<String, Object> entity) throws BusinessException {
//因为是从datagrid的数据来的,可能存在物理表中没有的字段,需要删除
entity.remove("SEND_REAL_NAME");
entity.remove("RECIPIENT_REAL_NAME");
entity.remove("OPETYPE");
}
}
package com.jw.app.business.todo;
import com.gaowj.business.base.impl.BaseDAO;
public interface TodoDAO extends BaseDAO{
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jw.app.business.todo.TodoDAO">
<sql id="TABLE_NAME">
TODO_SYSTEM
</sql>
<sql id="WHERE">
<where>
<trim prefixOverrides="and">
<if test="UUID != null and UUID != ''">
and t.UUID = #{UUID}
</if>
<if test="DO_STATE != null and DO_STATE != ''">
and t.DO_STATE = #{DO_STATE}
</if>
<if test="TITLE != null and TITLE != ''">
and t.TITLE like #{TITLE}
</if>
<if test="RECIPIENT != null and RECIPIENT != ''">
and t.RECIPIENT = #{RECIPIENT}
</if>
<if test="SENDER != null and SENDER != ''">
and t.SENDER = #{SENDER}
</if>
<if test="SENDER_OR_RECIPIENT != null and SENDER_OR_RECIPIENT != ''">
and (t.RECIPIENT = #{SENDER_OR_RECIPIENT} or t.SENDER = #{SENDER_OR_RECIPIENT})
</if>
</trim>
</where>
</sql>
<insert id="insertInfo" parameterType="map">
insert into
<include refid="TABLE_NAME"></include>
(
<trim prefix="" suffixOverrides=",">
<foreach collection="infos" item="info">
${info.key},
</foreach>
</trim>
) values(
<trim prefix="" suffixOverrides=",">
<foreach collection="infos" item="info">
#{info.value},
</foreach>
</trim>
)
</insert>
<update id="updateInfo" parameterType="map">
update
<include refid="TABLE_NAME"></include>
set
<trim prefix="" suffixOverrides=",">
<foreach collection="infos" item="info">
${info.key} = #{info.value} ,
</foreach>
</trim>
<where>
<if test="UUID != null and UUID != ''">
and UUID = #{UUID}
</if>
</where>
</update>
<delete id="deleteInfo" parameterType="list">
delete from
<include refid="TABLE_NAME"></include>
where UUID IN
<foreach collection="list" item="UUID" open="(" separator="," close=")">
#{UUID}
</foreach>
</delete>
<select id="listInfo" parameterType="map" resultType="upperCaseKeyMap">
select * from (
select todo.*,user_info.real_name as send_real_name
,user_info2.real_name as recipient_real_name from <include refid="TABLE_NAME"></include> todo
LEFT JOIN uicm_user_info user_info
on todo.sender=user_info.user_id
LEFT JOIN uicm_user_info user_info2
on todo.recipient=user_info2.user_id
)
t
<include refid="WHERE"></include>
</select>
<select id="listInfoCount" parameterType="map" resultType="int">
select count(*) from
<include refid="TABLE_NAME"></include>
t
<include refid="WHERE"></include>
</select>
</mapper>
\ No newline at end of file
package com.jw.app.todo.action;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.BeanUtils;
import com.gaowj.business.SystemOpeBusiness;
import com.gaowj.business.action.BasicAction;
import com.gaowj.business.comp.BusinessManager;
import com.gaowj.business.exception.BusinessException;
import com.gaowj.business.util.QueryParamUtil;
import com.gaowj.business.util.RequestUtils;
import com.gaowj.business.util.Status;
import com.jw.app.business.TodoBusiness;
import net.sf.json.JSONObject;
public class actAction extends BasicAction {
private static final long serialVersionUID = -2591076090760872233L;
private JSONObject jsonObject = new JSONObject();
public JSONObject getJsonObject() {
return jsonObject;
}
public void setJsonObject(JSONObject jsonObject) {
this.jsonObject = jsonObject;
}
/**
* 插入
*
* @param entity
* @throws BusinessException
*/
public String insertInfo() throws BusinessException {
TodoBusiness business = BusinessManager.getBusiness(TodoBusiness.class);
Map<String, Object> entity = RequestUtils.getUpdateFieldMap(request, RequestUtils.UPDATEDATAFIELDPREFIX);
jsonObject = new JSONObject();
try {
entity = QueryParamUtil.StringToDate(entity);
// 去除不要更新的字段
entity.remove("OPETYPE");
// 新增
if (entity.get("RECIPIENTS") != null && !"".equals(entity.get("RECIPIENTS"))) {
String recipients=entity.get("RECIPIENTS").toString();
entity.remove("RECIPIENTS");
for(String recipient:recipients.split(",")){
Map<String, Object> entityNew=new HashMap<String, Object>();
entityNew.putAll(entity);
entityNew.put("RECIPIENT", recipient);
business.insert(entityNew);
}
}
// 操作日志
// sysbusiness.insert_logBusiness(具体方法,操作内容,操作描述,操作记录ID,操作记录中文描述,分类)
SystemOpeBusiness sysbusiness = BusinessManager.getBusiness(SystemOpeBusiness.class);
sysbusiness.insert_logBusiness("insertTodo", "" + entity, "增加系统代办", (String) entity.get("UUID"), (String) entity.get("TITLE"), "todo");
jsonObject.putAll(Status.getStatusSuccessMessage("保存成功"));
} catch (Exception e) {
jsonObject.putAll(Status.getStatusErrorMessage("保存失败"));
e.printStackTrace();
}
return "json";
}
/**
* 更新
*
* @param entity
* @throws BusinessException
*/
public String updateInfo() throws BusinessException {
TodoBusiness business = BusinessManager.getBusiness(TodoBusiness.class);
Map<String, Object> entity = RequestUtils.getUpdateFieldMap(request, RequestUtils.UPDATEDATAFIELDPREFIX);
try {
// 去除不要更新的字段
entity.remove("OPETYPE");
// 修改
entity = QueryParamUtil.StringToDate(entity);
business.update(entity);
// 操作日志
SystemOpeBusiness sysbusiness = BusinessManager.getBusiness(SystemOpeBusiness.class);
sysbusiness.insert_logBusiness("updateTodo", "" + entity, "修改系统代办", (String) entity.get("UUID"), (String) entity.get("TITLE"), "todo");
jsonObject.putAll(Status.getStatusSuccessMessage("修改成功"));
} catch (Exception e) {
jsonObject.putAll(Status.getStatusErrorMessage("修改失败"));
e.printStackTrace();
}
return "json";
}
/**
* 删除记录
*
* @param entity
* @throws BusinessException
*/
public String deleteInfo() throws BusinessException {
TodoBusiness business = BusinessManager.getBusiness(TodoBusiness.class);
Map<String, Object> entity = RequestUtils.getUpdateFieldMap(request, RequestUtils.UPDATEDATAFIELDPREFIX);
String deletekey = (String) entity.get("CODE");
List<String> ListKey = QueryParamUtil.StringToList(deletekey);
try {
business.delete(ListKey);
// 操作日志
SystemOpeBusiness sysbusiness = BusinessManager.getBusiness(SystemOpeBusiness.class);
sysbusiness.insert_logBusiness("deleteTodo", "" + ListKey, "删除系统代办", deletekey, "多个流水号", "todo");
jsonObject.putAll(Status.getStatusSuccessMessage("删除成功"));
} catch (Exception e) {
jsonObject.putAll(Status.getStatusErrorMessage("删除失败"));
e.printStackTrace();
}
return "json";
}
public String updateDoState() throws BusinessException {
TodoBusiness business = BusinessManager.getBusiness(TodoBusiness.class);
Map<String, Object> entity = RequestUtils.getUpdateFieldMap(request, RequestUtils.UPDATEDATAFIELDPREFIX);
try {
// 去除不要更新的字段
entity.remove("OPETYPE");
// 修改
entity = QueryParamUtil.StringToDate(entity);
entity.put("DO_STATE", 1);
entity.put("DO_TIME", new Date());
business.update(entity);
// 操作日志
SystemOpeBusiness sysbusiness = BusinessManager.getBusiness(SystemOpeBusiness.class);
sysbusiness.insert_logBusiness("updateDoState", "" + entity, "修改系统代办状态为已办", (String) entity.get("UUID"), (String) entity.get("TITLE"), "todo");
jsonObject.putAll(Status.getStatusSuccessMessage("修改成功"));
} catch (Exception e) {
jsonObject.putAll(Status.getStatusErrorMessage("修改失败"));
e.printStackTrace();
}
return "json";
}
}
package com.jw.app.todo.action;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.gaowj.business.action.BasicAction;
import com.gaowj.business.comp.BusinessManager;
import com.gaowj.business.exception.BusinessException;
import com.gaowj.business.util.Page;
import com.gaowj.business.util.PropUtil;
import com.gaowj.business.util.QueryParamUtil;
import com.gaowj.business.util.RequestUtils;
import com.gaowj.business.util.SessionUtil;
import com.jw.app.business.TodoBusiness;
import com.jw.app.business.VoteBusiness;
import net.sf.json.JSONObject;
public class dataAction extends BasicAction{
private static final long serialVersionUID = 1829141492939513911L;
private JSONObject jsonObject = new JSONObject();
private int rows = 20;// 每页显示的记录数
private int page = 1;// 当前第几页
public JSONObject getJsonObject() {
return jsonObject;
}
public void setJsonObject(JSONObject jsonObject) {
this.jsonObject = jsonObject;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
/**
* 分页获取记录
* @param entity
* @throws BusinessException
*/
public String list() throws BusinessException {
TodoBusiness business = BusinessManager.getBusiness(TodoBusiness.class);
Map<String, Object> query = RequestUtils.getUpdateFieldMap(request,RequestUtils.UPDATEDATAFIELDPREFIX);
try {
query = QueryParamUtil.StringToDate(query);
Page<Map<String, Object>> pageRows = business.list(pageNo,pageSize, query);
setPageCount((pageRows.getCount() - 1) / pageSize + 1);
Map<String, Object> data = new HashMap<String, Object>();
data.put("rowSet", QueryParamUtil.DateTimeToString(pageRows.getItems()));
data.put("pageNo", pageNo);
data.put("pageSize", pageSize);
data.put("pageCount", pageCount);
data.put("rows", data.get("rowSet"));
data.put("total", pageRows.getCount());
jsonObject = new JSONObject();
jsonObject.putAll(data);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "json";
}
}
package com.jw.app.todo.action;
import java.util.Date;
import java.util.Map;
import com.gaowj.business.action.BasicAction;
import com.gaowj.business.comp.BusinessManager;
import com.gaowj.business.exception.BusinessException;
import com.gaowj.business.util.RequestUtils;
import com.gaowj.business.util.SessionUtil;
import com.jw.app.business.TodoBusiness;
public class viewAction extends BasicAction {
private static final long serialVersionUID = -6259964352154128000L;
public String todoTab() throws BusinessException {
return "todoTab";
}
public String todoTabDetail() throws BusinessException {
Map<String, Object> entity = RequestUtils.getUpdateFieldMapUtf8(request, RequestUtils.UPDATEDATAFIELDPREFIX);
if (SessionUtil.getCode().equals(entity.get("RECIPIENT")) && "0".equals(entity.get("READ_STATE"))) {
// 如果当前登录人为接收人,并且未读,则将状态改为已读,并记录阅读时间
entity.put("READ_STATE", 1);
entity.put("READ_TIME", new Date());
TodoBusiness business = BusinessManager.getBusiness(TodoBusiness.class);
business.update(entity);
}
return "todoTabDetail";
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment