直接上代码。废话不多说
jsp代码
<form id = "resultDownLoad">
<table id="dg-child" title="比对结果列表" class="easyui-datagrid" style="height:385px" data-options="border:false"
toolbar="#toolbar-child" rownumbers="true" fitColumns="true" singleSelect="true">
</table>
</form>
点击某行记录。执行函数
row数据结构
result数据结构
function detailTask(){
var row = $('#dg').datagrid('getSelected');
if (row){
$.post('/taskManager/sureDetail.html',{taskId:row.taskId},function(result){
if (result.success){
//查询是否为条件查询字段
queryFlagMap(row,result);
//查询是否是展示字段。在根据展示字段来展示详情
showFlagMap(row,result);
} else {
$.messager.show({
title: '错误信息',
msg: result.msg
});
}
},'json');
}
}
data数据结构
//查询是否为条件查询字段
function queryFlagMap(row,result){
$.ajax({
url:'/taskManager/queryFlagMap.html',
type:"post",
data:{'channelId':row.channelId},
dataType:'json',
success:function(data){
var html="";
// 拼接查询条件
for(var i=0;i<data.length;i++){
html+="<label class="+data[i].field +">"+data[i].title+":</label>"+
"<input id="+data[i].field +" name="+data[i].field+" "+"style=width:100px"+"></input>"
}
$("#toolbar-child").prepend(html);
}
});
}
data数据结构
columns数据结构
//查询是否是展示字段。在根据展示字段来创建表格
function showFlagMap(row,result){
$.ajax({
url:'/taskManager/showFlagMap.html',
type:"post",
data:{'channelId':row.channelId},
dataType:'json',
success:function(data){
var columns=[];
for(var i=0;i<data.length;i++){
var t={field: data[i].field, title:data[i].title, width: 90};
if(data[i].field=='pay_amount'){
var t={field: data[i].field, title: '支付金额(元)', width: 90 ,
formatter: function(value,row,index){
return formatPriceToRMB(value);
}};
}
columns.push(t);
}
//查询详情数据(展示列表)
detailList(columns,row,result);
}
});
}
js
//查询任务详情
function detailList(columns,row,result){
$('#dlg-detail').dialog('open').dialog('center').dialog('setTitle','详情');
$('#fm-detail').form('load', result.data);
$('#dg-child').datagrid({
rownumbers:true,
url:'/taskManager/detailList.html?taskId='+row.taskId+'&channelId='+row.channelId,
striped:true,
singleSelect:true,
loadMsg:'数据加载中,请稍后...',
pagination:true,
pageNumber:1,
onLoadSuccess: function (data) {
vara=data;
},
columns: [columns],//数据填充。宣染表格
collapsible:true
});
}
js
//分转元。保留2位小数
function formatPriceToRMB(_price){
var result = "0.00";
if(null != _price || undefined != _price){
var price = parseInt(_price);
if(!isNaN(price)) {
var val = (price/100).toFixed(2);
result = String(val).replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
}
}
return result;
}
controller
/**
* 查询是否为展示字段
* @param channelId
* @return
*/
@RequestMapping("/showFlagMap")
@ResponseBody
public List<Map<String,Object>> showFlagMap(Integer channelId){
List<Map<String, Object>> resultMap=null;
try {
resultMap=taskDataService.showFlagMap(channelId);
log.info("查询是否为显示字段成功");
} catch (Exception e) {
log.error("查询是否为显示字段失败:{}", e);
}
return resultMap;
}
/**
* 查询是否为查询字段
* @return
*/
@RequestMapping("/queryFlagMap")
@ResponseBody
public List<Map<String,Object>> queryFlagMap(Integer channelId){
List<Map<String, Object>> resultMap=null;
try {
resultMap=taskDataService.queryFlagMap(channelId);
log.info("查询是否为条件查询字段成功");
} catch (Exception e) {
log.error("查询是否为条件查询字段失败:{}", e);
}
return resultMap;
}
/**
* 查询任务详情记录
* @param request
* @return
*/
@RequestMapping("/detailList")
@ResponseBody
public PageListDto<Map<String,Object>> detailList(HttpServletRequest request) {
PageListDto<Map<String,Object>> pageList = null;
try {
pageList = taskDataService.queryAllDetails(request);
log.info("分页查询任务详情成功");
} catch (Exception e) {
log.error("分页查询任务详情失败:{}", e);
}
return pageList;
}
serviceimpls实现
/**
* 是否为条件展示字段
*/
@Override
public List<Map<String, Object>> showFlagMap(Integer channelId) {
List<Map<String, Object>> resultMap=new ArrayList<Map<String,Object>>();
ChannelEntity entity=channelService.selectById(DatasoureFlagEnum.DATA_R_CASH.getCode(),channelId);
String schemaInfo=entity.getSchemaInfo();
SchemaConfig config=JSON.parseObject(schemaInfo,SchemaConfig.class);
//另外增加展示字段
Map<String,Object> flagName=new HashMap<String,Object>();
flagName.put("title","比对结果");
flagName.put("field", "flagName");
resultMap.add(flagName);
Map<String,Object> deletedName=new HashMap<String,Object>();
deletedName.put("title","处理状态");
deletedName.put("field", "deletedName");
resultMap.add(deletedName);
for(int i=0;i<config.getFields().size();i++){
if(String.valueOf(config.getFields().get(i).getShowFlag()).equals("1")){
//是否为显示字段集合
Map<String,Object> showFlagMap=new HashMap<String,Object>();
showFlagMap.put("title",config.getFields().get(i).getLabel());
showFlagMap.put("field", config.getFields().get(i).getColumn());
resultMap.add(showFlagMap);
}
}
//另外增加展示字段
Map<String,Object> requestId=new HashMap<String,Object>();
requestId.put("title","结果ID");
requestId.put("field", "request_id");
resultMap.add(requestId);
return resultMap;
}
/**
* 查询是否为查询字段
*/
@Override
public List<Map<String, Object>> queryFlagMap(Integer channelId) {
List<Map<String, Object>> resultMap=new ArrayList<Map<String,Object>>();
ChannelEntity entity=channelService.selectById(DatasoureFlagEnum.DATA_R_CASH.getCode(),channelId);
String schemaInfo=entity.getSchemaInfo();
SchemaConfig config=JSON.parseObject(schemaInfo,SchemaConfig.class);
for(int i=0;i<config.getFields().size();i++){
if(String.valueOf(config.getFields().get(i).getQueryFlag()).equals("1")){
//是否为条件查询字段集合
Map<String,Object> queryFlagMap=new HashMap<String, Object>();
queryFlagMap.put("title",config.getFields().get(i).getLabel());
queryFlagMap.put("field", config.getFields().get(i).getColumn());
resultMap.add(queryFlagMap);
}
}
return resultMap;
}
@Override
public PageListDto<Map<String,Object>> queryAllDetails(HttpServletRequest request) {
//获取条件查询字段
Integer taskId=Integer.valueOf( request.getParameter("taskId"));
Integer channelId=Integer.valueOf(request.getParameter("channelId"));
Integer rows=Integer.valueOf(request.getParameter("rows"));
Integer page=Integer.valueOf(request.getParameter("page"));
String flag=String.valueOf(request.getParameter("flag")).equals("3")?"":request.getParameter("flag");
String deleted=String.valueOf(request.getParameter("deleted")).equals("2")?"":request.getParameter("deleted");
//获取数据源导入结构
ChannelEntity entity=channelService.selectById(DatasoureFlagEnum.DATA_R_CASH.getCode(),channelId);
String schemaInfo=entity.getSchemaInfo();
SchemaConfig config=JSON.parseObject(schemaInfo,SchemaConfig.class);
String tableName=config.getTableName();
List<Map<String,Object>> list= new ArrayList<Map<String,Object>>(0);
Long total=null;
try{
//查询详情记录sql
StringBuffer selectSql=new StringBuffer("select * from " + tableName
+ "_data where task_id=" + taskId);
//查询记录数sql
StringBuffer countSql=new StringBuffer("select count(1) as total from " + tableName
+ "_data where task_id= ?") ;
//循环拼接查询条件字段
for(int i=0;i<config.getFields().size();i++){
if(String.valueOf(config.getFields().get(i).getQueryFlag()).equals("1")){
String fieldValue = request.getParameter(config.getFields().get(i).getColumn());
if(StringUtils.isNotBlank(fieldValue)){
countSql.append(" and "+config.getFields().get(i).getColumn()+"='"+fieldValue+"'");
selectSql.append(" and "+config.getFields().get(i).getColumn()+"='"+fieldValue+"'");
}
}
}
if(StringUtils.isNotBlank(flag)){
countSql.append(" and flag="+flag);
selectSql.append(" and flag="+flag);
}
if(StringUtils.isNotBlank(deleted)){
countSql.append(" and deleted="+deleted);
selectSql.append(" and deleted="+deleted);
}
Map<String,Object> map=baseJdbcDao
.queryForMap(new String(countSql),taskId);
if(map!=null&&null!=map.get("total")){
total=(Long)(map.get("total"));
}
selectSql.append(" order by request_id desc "
+ " limit "+(page-1)*rows+" , "+rows);
list=baseJdbcDao.query(selectSql.toString());
//翻译
convert(list);
}catch(Exception e){
logger.error("查询任务详情异常:"+ e);
}
PageListDto<Map<String,Object>> result = new PageListDto<Map<String,Object>>();
result.setRows(list);
result.setTotal(total);
return result;
}
/**
* 翻译
* @param list
*/
private void convert(List<Map<String, Object>> list) {
int i=0;
for(i=0;i<list.size();i++){
if(list.get(i).get("flag").equals("0")){
list.get(i).put("flagName", "后台失败记录");
}
if(list.get(i).get("flag").equals("1")){
list.get(i).put("flagName", "比对成功记录");
}
if(list.get(i).get("flag").equals("2")){
list.get(i).put("flagName", "网关失败记录");
}
if(list.get(i).get("deleted").equals("0")){
list.get(i).put("deletedName", "未处理");
}
if(list.get(i).get("deleted").equals("1")){
list.get(i).put("deletedName", "处理");
}
}
}
最终