package com.nanometer.smartlab.service; import java.io.InputStream; import java.math.BigDecimal; import java.util.*; import javax.annotation.Resource; import com.nanometer.smartlab.dao.SysLaboratoryContainerDao; import com.nanometer.smartlab.entity.BaseMeta; import com.nanometer.smartlab.entity.SysLaboratoryContainer; import com.nanometer.smartlab.entity.enumtype.ValidFlag; import com.nanometer.smartlab.util.ExcelUtils; 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.event.FileUploadEvent; import org.primefaces.model.UploadedFile; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; import com.nanometer.smartlab.dao.SysControllerDao; import com.nanometer.smartlab.entity.SysController; import com.nanometer.smartlab.exception.BusinessException; import com.nanometer.smartlab.exception.ExceptionEnumCode; import com.nanometer.smartlab.util.MessageUtil; import org.springframework.transaction.annotation.Transactional; @Service("sysControllerService") public class SysControllerServiceImpl implements SysControllerService { private static Logger logger = Logger.getLogger(SysControllerServiceImpl.class); @Resource(name = "sysControllerDao") SysControllerDao sysControllerDao; @Resource(name = "sysLaboratoryContainerDao") SysLaboratoryContainerDao sysLaboratoryContainerDao; @Resource(name = "baseMetaService") BaseMetaService baseMetaService; @Override public List getAllControllerList() { try { return this.sysControllerDao.getAllControllerList(); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public void insertSysController(SysController sysController) { try { this.sysControllerDao.insertSysControllerById(sysController); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override @Transactional public int updateSysController(SysController sysController) { try { Map params = new HashMap(); params.put("id", sysController.getId()); params.put("code", sysController.getControllerCode()); sysLaboratoryContainerDao.updateSysLabContainer(params); return this.sysControllerDao.updateSysControllerById(sysController); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public List getSysControllerList(String code, String name, Integer first, Integer pageSize) { try { Map params = new HashMap(); if (StringUtils.isNotBlank(name)) { params.put("controllerName", "%" + name + "%"); } if (StringUtils.isNotBlank(code)) { params.put("controllerCode", "%" + code + "%"); } params.put("first", first); params.put("pageSize", pageSize); return this.sysControllerDao.getSysControllerList(params); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public int deleteSysControllers(List ids) { try { return this.sysControllerDao.deleteSysControllers(ids); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public void uploadFile(FileUploadEvent event) throws Exception{ List sysControllers=this.getAllControllerList(); List typeList=baseMetaService.getBaseMetaList("controller_type"); //主控名字和条码 HashSet controllerInfo = new HashSet<>(); if (sysControllers != null && sysControllers.size()>0){ sysControllers.forEach(sysController -> { controllerInfo.add(sysController.getControllerCode()); controllerInfo.add(sysController.getControllerName()); }); } //主控类型 Map typeMap = new HashMap<>(); if (typeList != null && typeList.size() > 0) { typeList.forEach(type->{ typeMap.put(type.getMetaValue(), type.getId()); }); } 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 sysLaboratoryContainers = 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(); 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(); } } else { cellInfo = row.getCell(t).getStringCellValue(); } } valuesList.add(cellInfo); } if (valuesList.size() != 3){ break; } //重名判断 String controlName = valuesList.get(0); if (controllerInfo.contains(controlName)){ throw new Exception("设备名称重复:"+controlName); } //条码重复 String controlCode = valuesList.get(1); if (controllerInfo.contains(controlCode)){ throw new Exception("条码重复:"+controlCode); } //设备类型填写判断 String controlType = valuesList.get(2).trim(); if (!typeMap.containsKey(controlType)){ throw new Exception("设备类型填写不符合要求:"+controlType); } SysController sysController = new SysController(); sysController.setValidFlag(ValidFlag.VALID); sysController.setControllerCode(controlCode); sysController.setControllerName(controlName); sysController.setType(typeMap.get(controlType)); this.insertSysController(sysController); controllerInfo.add(controlName); controllerInfo.add(controlCode); } } @Override public List exportExcelList(String name, String code) { Map params = new HashMap<>(); params.put("name", name); params.put("code", code); return sysControllerDao.exportExcelList(params); } @Override public void export2Excel(List list) throws Exception { Map map = new LinkedHashMap<>(); map.put("name", "设备名称"); map.put("code", "设备代码"); map.put("type", "设备类型"); ExcelUtils.export2Excel(list,"主控设备信息",map); } @Override public SysController getSysController(Long id) { try { return this.sysControllerDao.getSysController(id); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public boolean getSysControllerByCode(String code) { try { boolean result = false; if(this.sysControllerDao.getSysControllerByCode(code) != null ) { result = true; } return result; } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public boolean getSysControllerByName(String name) { try { boolean result = false; if(this.sysControllerDao.getSysControllerByName(name) != null ) { result = true; } return result; } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public int getSysControllerListCount(String code, String name) { try { Map params = new HashMap(); if (StringUtils.isNotBlank(name)) { params.put("controllerName", "%" + name + "%"); } if (StringUtils.isNotBlank(code)) { params.put("controllerCode", "%" + code + "%"); } return this.sysControllerDao.getSysControllerList(params).size(); } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } }