package com.product.mobile.core.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.product.common.lang.StringUtils;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.exception.BaseException;
import com.product.core.service.support.AbstractBaseService;
import com.product.util.BaseUtil;
/**
* 鎵嬫満绔紝鑾峰彇鐢ㄦ埛鎵€鏈夊簲鐢�
* @author Administrator
*
*/
@Component
public class SystemTableMetaService extends AbstractBaseService{
@Autowired
public BaseDao baseDao;
/**
* 鏁版嵁琛ㄧ粨鏋勪俊鎭�
* @param cpage
* @param pagesize
* @return
* @throws BaseException
*/
public FieldSetEntity getSystemTableMeta(FieldSetEntity fse) throws BaseException{
Map<Object,Object> vs=fse.getValues();
StringBuilder b=new StringBuilder();
b.append("select t.table_name,f.field_name,f.field_length,f.field_show_name,f.field_type,f.field_reference,f.is_required from product_sys_datamodel_field f left join product_sys_datamodel_table t on f.table_uuid=t.uuid");
List<Object> ps=new ArrayList<>();
if(vs!=null && vs.size()>0) {
b.append(" where ");
Iterator keys=vs.keySet().iterator();
int c=0;
while(keys.hasNext()) {
Object key=keys.next();
Object field=vs.get(key);
// if(StringUtils.isEmpty(field)) {
// continue;
// }
if(c>0) {
b.append(" or ");
}
Object fp[]=BaseUtil.buildQuestionMarkFilter("f.field_name","in",field.toString());
b.append("(t.table_name=? ");
ps.add(key);
if(fp!=null && fp.length>1) {
b.append(" and ");
b.append(fp[0]);
ps.addAll((List)fp[1]);
}
b.append(")");
c++;
}
b.append(" order by t.table_name ");
FieldSetEntity fs=new FieldSetEntity("product_sys_datamodel_field");
DataTableEntity dt=baseDao.listTable(b.toString(), ps.toArray());
String table=null;
DataTableEntity sub=new DataTableEntity();
for(int i=0;i<dt.getRows();i++) {
String tb=dt.getString(i, "table_name");
if(table!=null && !table.equals(tb)) {
sub.getMeta().getTableName()[0]=table;
fs.addSubDataTable(sub);
sub=new DataTableEntity();
}
table=tb;
sub.addFieldSetEntity(dt.getFieldSetEntity(i));
}
sub.getMeta().getTableName()[0]=table;
fs.addSubDataTable(sub);
return fs;
}
return null;
}
}