package com.nanometer.smartlab.controller; import java.io.InputStream; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; import com.nanometer.smartlab.entity.BaseMeta; import com.nanometer.smartlab.entity.SysProject; import com.nanometer.smartlab.entity.SysReagent; import com.nanometer.smartlab.service.BaseMetaService; import com.nanometer.smartlab.service.SysLaboratoryContainerService; import com.nanometer.smartlab.service.SysProjectService; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.primefaces.context.RequestContext; import org.primefaces.event.FileUploadEvent; import org.primefaces.model.LazyDataModel; import org.primefaces.model.SortOrder; import org.primefaces.model.UploadedFile; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.nanometer.smartlab.entity.SysLaboratory; import com.nanometer.smartlab.service.SysLaboratoryService; import com.nanometer.smartlab.util.Constants; import com.nanometer.smartlab.util.FacesUtils; /** * Created by cmower on 17/11/20. */ @Controller @Scope("session") public class LaboratoryMngController extends BaseController { private static final long serialVersionUID = 101543880938627455L; private static Logger logger = Logger.getLogger(LaboratoryMngController.class); @Resource private SysLaboratoryService sysLaboratoryService; @Resource private SysLaboratoryContainerService sysLaboratoryContainerService; @Resource private BaseMetaService baseMetaService; @Resource private SysProjectService sysProjectService; /** * 数据源 */ private LazyDataModel dataModel; /** * 数据模型 */ private SysLaboratory sysLaboratory=new SysLaboratory(); /** * 选中的list */ private List selectedList; private String type; private String name; private String project; private int action; public void onNewBtnClick() { this.sysLaboratory = new SysLaboratory(); this.action = Constants.ACTION_ADD; } public void onEditBtnClick() { if (this.selectedList == null || this.selectedList.size() == 0) { FacesUtils.warn("请选择数据。"); return; } if (this.selectedList.size() > 1) { FacesUtils.warn("只能选择一个数据进行修改。"); return; } this.sysLaboratory = this.sysLaboratoryService.getSysLaboratory(this.selectedList.get(0).getId()); this.action = Constants.ACTION_EDIT; RequestContext.getCurrentInstance().execute("PF('dialog').show()"); } public String getProjectName(String project){ if(StringUtils.isBlank(project)){ return ""; } List idstrs = Arrays.asList(project.split(",")); List ids=idstrs.stream().map(item -> Long.valueOf(item)).collect(Collectors.toList()); List projects=this.sysProjectService.getProjectByIds(ids); if(projects==null||projects.size()==0){ return ""; } List projectNames=projects.stream().map(SysProject::getProjectName).collect(Collectors.toList()); return String.join(",",projectNames); } public void exportLab2Excel(){ try { List list = sysLaboratoryService.exportLabList(type, name,project); sysLaboratoryService.exportLab2Excel(list); FacesUtils.info("导出成功"); }catch (Exception e){ e.printStackTrace(); FacesUtils.warn("导出失败"); } } public void uploadFile(FileUploadEvent event) { List typeList=baseMetaService.getBaseMetaList("laboratory_type"); List departList=baseMetaService.getBaseMetaList("user_department"); try{ UploadedFile file = event.getFile(); InputStream is=file.getInputstream(); boolean isExcel2003=true; if (file.getFileName().matches("^.+\\.(?i)(xlsx)$")) { isExcel2003 = false; } Workbook wb=null; if(isExcel2003) { wb = new HSSFWorkbook(is); }else{ wb = new XSSFWorkbook(is); } Sheet sheet=wb.getSheetAt(0); List sysLaboratories = new ArrayList<>(); int totalRows = sheet.getPhysicalNumberOfRows(); Row row=null; int totalCells=0; for (int i = 1; i < totalRows; i++) { List valuesList=new ArrayList(); row=sheet.getRow(i); totalCells= row.getPhysicalNumberOfCells(); //System.out.println("====="+totalCells); // 目前导入文件11列,不满足条件的情况跳过 /*if (totalCells != 12) { throw new Exception("导入文件格式不正确"); }*/ for (int t = 0; t < totalCells; t++) { String cellInfo=""; if (row.getCell(t) != null) { if (row.getCell(t).getCellTypeEnum().toString().equals("NUMERIC")) { cellInfo = String.valueOf(row.getCell(t).getNumericCellValue()); if(t==2){ cellInfo=new BigDecimal(Double.valueOf(row.getCell(t).getNumericCellValue())).toString(); } if(t==3){ cellInfo=new BigDecimal(Double.valueOf(row.getCell(t).getNumericCellValue())).toString(); } if(t==5){ cellInfo=new BigDecimal(Double.valueOf(row.getCell(t).getNumericCellValue())).toString(); } if(t==4){ cellInfo=(int)Double.parseDouble(cellInfo)+""; } } else { cellInfo = row.getCell(t).getStringCellValue(); } } valuesList.add(cellInfo); } if (valuesList.size() != 8){ break; } SysLaboratory laboratory=new SysLaboratory(); laboratory.setType(returnTypeId(typeList,valuesList.get(0))); laboratory.setName(valuesList.get(1)); laboratory.setInfoCode(valuesList.get(2)); laboratory.setBarCode(valuesList.get(3)); laboratory.setLocation1(valuesList.get(4)); laboratory.setLocation2(valuesList.get(5)); laboratory.setDepartment(returnDepartId(departList,valuesList.get(6))); if (valuesList.size() > 7 && !valuesList.get(7).replace(" ","").isEmpty()){ List projects = Arrays.asList(valuesList.get(7).split(",")); for (String project : projects) { //不存再就直接推出 if (!sysProjectService.isExistProject(project)) { throw new Exception("课题组不存在,(" + i + "行)"); } } //都存在就设置 laboratory.setProject(valuesList.get(7).replace(" ","")); }else{ laboratory.setProject(null); } sysLaboratories.add(laboratory); } sysLaboratoryService.insertSysReagentList(sysLaboratories); FacesUtils.info("导入成功。"); }catch (Exception ex) { ex.printStackTrace(); FacesUtils.info("导入失败。"); } } public Long returnTypeId(List list,String name){ Long id=null; for(int i=0;i list,String name){ Long id=null; for(int i=0;i getDataModel() { if (this.dataModel == null) { this.dataModel = new LazyDataModel() { @Override public List load(int first, int pageSize, String sortField, SortOrder sortOrder, Map filters) { List list = null; try { int count = sysLaboratoryService.getSysLaboratoryTotalCount(type, name,project); this.setRowCount(count); if (count > 0) { list = sysLaboratoryService.getSysLaboratoryList(type, name,project, first, pageSize); } selectedList = new ArrayList<> (); } catch (Exception e) { logger.error(e); } return list; } @Override public SysLaboratory getRowData(String rowKey) { // Iterator iterator = this.iterator(); // if (iterator != null) { // SysLaboratory su = null; // while (iterator.hasNext()) { // su = iterator.next(); // if (rowKey.equals(su.getId())) { // return su; // } // } // } Long id=Long.valueOf(rowKey); return sysLaboratoryService.getSysLaboratory(id); } }; } return dataModel; } public SysLaboratory getSysLaboratory() { return sysLaboratory; } public void setSysLaboratory(SysLaboratory sysLaboratory) { this.sysLaboratory = sysLaboratory; } public List getSelectedList() { return selectedList; } public void setSelectedList(List selectedList) { this.selectedList = selectedList; } public int getAction() { return action; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getProject() { return project; } public void setProject(String project) { this.project = project; } }