package com.norteksoft.mms.form.service; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.norteksoft.mms.form.dao.GroupHeaderDao; import com.norteksoft.mms.form.dao.JqGridPropertyDao; import com.norteksoft.mms.form.dao.ListColumnDao; import com.norteksoft.mms.form.dao.ListViewDao; import com.norteksoft.mms.form.entity.DataTable; import com.norteksoft.mms.form.entity.GroupHeader; import com.norteksoft.mms.form.entity.JqGridProperty; import com.norteksoft.mms.form.entity.ListColumn; import com.norteksoft.mms.form.entity.ListView; import com.norteksoft.mms.form.entity.TableColumn; import com.norteksoft.mms.form.enumeration.DataType; import com.norteksoft.mms.module.dao.ButtonDao; import com.norteksoft.mms.module.dao.ModulePageDao; import com.norteksoft.mms.module.entity.Menu; import com.norteksoft.mms.module.entity.ModulePage; import com.norteksoft.mms.module.service.MenuManager; import com.norteksoft.product.api.impl.WorkflowClientManager; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.JsonParser; @Service @Transactional(readOnly=true) public class ListViewManager { private Log log = LogFactory.getLog(WorkflowClientManager.class); private ListViewDao viewDao; private ModulePageDao modulePageDao; private ListColumnDao listColumnDao; private MenuManager menuManager; @Autowired private ButtonDao buttonDao; @Autowired private DataTableManager dataTableManager; @Autowired private JqGridPropertyDao jqGridPropertyDao; @Autowired private GroupHeaderDao groupHeaderDao; @Autowired public void setMenuManager(MenuManager menuManager) { this.menuManager = menuManager; } @Autowired public void setViewDao(ListViewDao viewDao) { this.viewDao = viewDao; } @Autowired public void setModulePageDao(ModulePageDao modulePageDao) { this.modulePageDao = modulePageDao; } @Autowired public void setListColumnDao(ListColumnDao listColumnDao) { this.listColumnDao = listColumnDao; } public void getViewPage(Page<ListView> page, Long dataTableId) { viewDao.getViewPage(page, dataTableId); } public ListView getView(Long viewId) { return viewDao.get(viewId); } @Transactional(readOnly=false) public void saveView(ListView view,Long menuId){ List<Object> jqGridPropertys=JsonParser.getFormTableDatas(JqGridProperty.class); view.setMenuId(menuId); view.setCompanyId(ContextUtils.getCompanyId()); view.setCreator(ContextUtils.getLoginName()); view.setCreatorName(ContextUtils.getUserName()); view.setCreatedTime(new Date()); viewDao.save(view); saveJqGridProperty(view,jqGridPropertys); } @Transactional(readOnly=false) public void saveListView(ListView view){ viewDao.save(view); } @Transactional(readOnly=false) public void saveDefaultListView(ListView view,Long menuId){ view.setMenuId(menuId); view.setCompanyId(ContextUtils.getCompanyId()); view.setCreator(ContextUtils.getLoginName()); view.setCreatorName(ContextUtils.getUserName()); view.setCreatedTime(new Date()); saveListView(view); } @Transactional(readOnly=false) private void saveJqGridProperty(ListView view,List<Object> jqGridPropertys){ for(Object obj:jqGridPropertys){ JqGridProperty jqGridProperty=(JqGridProperty)obj; if(StringUtils.isNotEmpty(jqGridProperty.getName())){ jqGridProperty.setCompanyId(ContextUtils.getCompanyId()); jqGridProperty.setListView(view); jqGridPropertyDao.save(jqGridProperty); } } } public List<ListView> getListViewsByCompany(){ return viewDao.getListViewsByCompany(); } @Transactional(readOnly=false) public String delete(String viewIds){ Integer canNum=0; if(viewIds!=null){ String[] ids=viewIds.split(","); Integer[] nums=new Integer[ids.length]; deleteListView(ids, canNum,nums); for(Integer num:nums){ if(num!=null){ canNum=num; } } String successStr=canNum!=0?canNum+"个删除成功;":""; String errorStr=(ids.length-canNum)!=0?(ids.length-canNum)+"个删除失败,数据表对应的列表只有一个或某页面视图引用了该视图":""; return successStr+errorStr; } return null; } @Transactional(readOnly=false) public String deleteEnable(String viewIds){ if(viewIds!=null){ String[] ids=viewIds.split(","); for(String id : ids){ deleteEnable(Long.valueOf(id)); } } return null; } @Transactional(readOnly=false) public void deleteEnable(Long id){ ListView view = viewDao.get(id); List<ModulePage> pages=modulePageDao.getModulePagesByViewId(id); for(ModulePage mp : pages){ buttonDao.deleteButtonByModulePage(mp.getId()); modulePageDao.delete(mp); } List<ListColumn> listColumns=view.getColumns(); for(ListColumn listColumn:listColumns){ listColumnDao.delete(listColumn); } viewDao.delete(id); } public List<ListView> getListViewByDataTable(Long dtId){ return viewDao.find("from ListView l where l.dataTable.id=?", dtId); } //删除列表视图,处理关联关系 @Transactional(readOnly=false) private Integer deleteListView(String[] ids, Integer canNum,Integer[] nums){ Long id = null; boolean result = false; for(int i = 0; i < ids.length; i++){ if(ids[i] == null) continue; id = Long.parseLong(ids[i]); List<ModulePage> pages=modulePageDao.getModulePagesByViewId(id); if(pages.size()==0){ ListView view=viewDao.get(id); if(view==null){ log.debug("ListView实体不能为null"); throw new RuntimeException("ListView实体不能为null"); } List<ListView> views=viewDao.getListViewByTabelId(view.getDataTable().getId()); if(views.size()>1){ //删除列表对应的字段 List<ListColumn> listColumns=view.getColumns(); for(ListColumn listColumn:listColumns){ listColumnDao.delete(listColumn); } //删除列表 viewDao.delete(id); ids[i] = null; result = true; canNum = canNum + 1; nums[canNum-1]=canNum; } } } if(result && ids.length != canNum) deleteListView(ids, canNum,nums); return canNum; } public Boolean isCodeExist(String code,Long viewId){ List<ListView> listViews=viewDao.getListViewByCode(code,viewId); return listViews.size()>0?true:false; } @Transactional(readOnly=false) public boolean defaultDisplaySet(Long viewId,Long dataTableId){ ListView listView=viewDao.get(viewId); ListView defaultListView=viewDao.getDefaultDisplayListViewByTabelId(dataTableId); Boolean isHasDefaultDisplay; if(defaultListView!=null){ isHasDefaultDisplay=false; if(listView.getDefaultListView()){ listView.setDefaultListView(false); isHasDefaultDisplay=true; } }else{ if(listView.getDefaultListView()){ listView.setDefaultListView(false); }else{ listView.setDefaultListView(true); } isHasDefaultDisplay=true; viewDao.save(listView); } return isHasDefaultDisplay; } public ListView getDefaultDisplay(Long dataTableId){ return viewDao.getDefaultDisplayListViewByTabelId(dataTableId); } public ListView getListViewByCode(String code){ return viewDao.getListViewByCode(code); } /** * 获得标准或自定义的列表视图 * @param */ public void getListViewPageByMenu(Page<ListView> page,Long menuId){ viewDao.getListViewPageByMenu(page,menuId); } /** * 通过系统Id得到列表视图 * @param */ public List<ListView> getListViewsBySystem(Long menuId){ Menu menu = menuManager.getRootMenu(menuId); return viewDao.getListViewsBySystem(menu.getId()); } public List<ListView> getUnCompanyListViewsBySystem(Long menuId){ Menu menu = menuManager.getRootMenu(menuId); return viewDao.getUnCompanyListViewsBySystem(menu.getId()); } /** * 复制列表 * @param */ @Transactional(readOnly=false) public void savecopy(Long viewId, ListView view){ ListView lv = getView(viewId); ListView copyLv=lv.clone(); copyLv.setId(null); copyLv.setColumns(null); copyLv.setJqGridPropertys(null); copyLv.setCode(view.getCode()); copyLv.setName(view.getName()); copyLv.setCreatedTime(new Date()); copyLv.setCreator(ContextUtils.getLoginName()); copyLv.setCreatorName(ContextUtils.getUserName()); viewDao.save(copyLv); List<ListColumn> listColumns = lv.getColumns(); List<ListColumn> myColumns=new ArrayList<ListColumn>(); for(ListColumn listC : listColumns){ ListColumn col=listC.clone(); col.setId(null); col.setListView(copyLv); listColumnDao.save(col); myColumns.add(col); } copyLv.setColumns(myColumns); List<JqGridProperty> props = lv.getJqGridPropertys(); List<JqGridProperty> myProps=new ArrayList<JqGridProperty>(); for(JqGridProperty prop : props){ JqGridProperty col=prop.clone(); col.setId(null); col.setListView(copyLv); jqGridPropertyDao.save(col); myProps.add(col); } copyLv.setJqGridPropertys(myProps); List<GroupHeader> groupHeaders = groupHeaderDao.getGroupHeadersByViewId(lv.getId());; for(GroupHeader header : groupHeaders){ GroupHeader col=header.clone(); col.setId(null); col.setListViewId(copyLv.getId()); groupHeaderDao.save(col); } viewDao.save(copyLv); } /** * 验证表单编号的唯一 * * @param */ public Boolean isListCodeExist(String code, Long menuId){ Menu menu = menuManager.getRootMenu(menuId); Long mId = menu.getId(); String finalCode = code.trim(); List<ListView> listViews = viewDao.getFormViewByCodeAndMenuId(finalCode, mId); return listViews.size()>0?true:false; } /** * 删除属性自由扩展 * @param propertyId */ @Transactional(readOnly=false) public void deleteJqGridProperty(Long propertyId) { jqGridPropertyDao.delete(propertyId); } @Transactional(readOnly=false) public void createDefaultListView(DataTable dataTable,String code,String name,String remark,Long menuId){ createDefaultListView(dataTable, code, name, remark, menuId, true); } @Transactional(readOnly=false) public void createDefaultListView(DataTable dataTable,String code,String name,String remark,Long menuId, boolean standard){ ListView listView = new ListView(); listView.setDataTable(dataTable); listView.setCode(code); listView.setName(name); listView.setRemark(remark); listView.setStandard(standard); listView.setMenuId(menuId); saveDefaultListView(listView, menuId); List<ListColumn> listColumns = new ArrayList<ListColumn>(); List<TableColumn> columns = dataTableManager.getAllUnDeleteColumns(dataTable); for (TableColumn tableColumn : columns) { if((tableColumn.getDataType().equals(DataType.BLOB)) || (tableColumn.getDataType().equals(DataType.CLOB))){ continue; } ListColumn listColumn = new ListColumn(); listColumn.setCompanyId(tableColumn.getCompanyId()); listColumn.setListView(listView); listColumn.setTableColumn(tableColumn); listColumn.setHeaderName(tableColumn.getAlias()); listColumn.setDisplayOrder(tableColumn.getDisplayOrder()); listColumn.setExportable(false); listColumn.setVisible(true); //以下几个字段设为不显示 if("instance_id".equals(tableColumn.getDbColumnName())||"first_task_id".equals(tableColumn.getDbColumnName()) ||"id".equals(tableColumn.getDbColumnName())||"form_id".equals(tableColumn.getDbColumnName())){ listColumn.setVisible(false); } listColumn.setEditable(false); listColumn.setTotal(false); listColumn.setQuerySettingName("不查询"); listColumn.setQuerySettingValue("NONE"); listColumn.setSortable(true); listColumn.setControlName("文本框"); listColumn.setControlValue("TEXT"); listColumnDao.save(listColumn); listColumns.add(listColumn); } listView.setColumns(listColumns); saveDefaultListView(listView, menuId); } public List<ListView> getListViewByTabelId(Long dataTableId){ return viewDao.getListViewByTabelId(dataTableId); } }