package com.nanometer.smartlab.service; import com.nanometer.smartlab.dao.SysProjectDao; import com.nanometer.smartlab.entity.SysProject; import com.nanometer.smartlab.entity.SysUser; import com.nanometer.smartlab.entity.enumtype.SeeFlag; import com.nanometer.smartlab.exception.AlarmCode; import com.nanometer.smartlab.exception.AlarmException; import com.nanometer.smartlab.exception.BusinessException; import com.nanometer.smartlab.exception.ExceptionEnumCode; import com.nanometer.smartlab.util.IDUtils; import com.nanometer.smartlab.util.MessageUtil; 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.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service public class SysProjectServiceImpl implements SysProjectService { private static Logger logger = Logger.getLogger(SysProjectService.class); @Resource(name = "sysProjectDao") SysProjectDao sysProjectDao; @Resource private SysUserService sysUserService; @Override public SysProject getSysProject(String id) { return sysProjectDao.getSysProject(id); } @Override public SysProject getProjectByProId(String projectId) { return sysProjectDao.getProjectByProId(projectId); } @Override public boolean isSysProjectExist(String projectName, Object o) { try { Map params = new HashMap(); params.put("projectName", projectName); int count = this.sysProjectDao.getSysProjectTotalCount(params); return count > 0; } catch (DataAccessException e) { logger.error(e.getMessage(), e); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e); } } @Override public boolean insertSysProject(SysProject sysProject) { sysProject.setId(IDUtils.uuid()); sysProject.setValidFlag(1); return sysProjectDao.insertSysProject(sysProject) > 0; } @Override public boolean updateSysProject(SysProject sysProject) { return sysProjectDao.updateSysProject(sysProject) > 0; } @Override public boolean deleteSysProject(List selectedList) { try { if (CollectionUtils.isEmpty(selectedList)) { return false; } List ids = new ArrayList(); for (SysProject sysReagent : selectedList) { ids.add(sysReagent.getId()); } int row = this.sysProjectDao.deleteSysProjects(ids); if (row == 0) { return false; } return true; } catch (DataIntegrityViolationException ex) { logger.warn(ex.getMessage(), ex); throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode())); } catch (DataAccessException ex) { logger.error(ex.getMessage(), ex); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex); } } @Override public int getSysProjectTotalCount() { Map params = new HashMap<>(); return sysProjectDao.getSysProjectTotalCount(params); } @Override public int getSysProjectTotalCountUpdate(String createrUser,String projectId,String projectName,String sysUserName) { //Map params = new HashMap<>(); //String user=""; Map params = new HashMap<>(); if (StringUtils.isNotBlank(createrUser)) { SysUser sysUser = sysUserService.getSysUser(createrUser); // 不是管理员时,加入applyUserId if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey() && sysUser.getSeeFlag().getKey() != SeeFlag.LEADING.getKey()) { params.put("createrUser", createrUser); } } params.put("projectId", projectId); if(StringUtils.isNotBlank(projectName)){ params.put("projectName","%"+ projectName+"%"); } if(StringUtils.isNotBlank(sysUserName)) { params.put("sysUserName", "%"+sysUserName+"%"); } //System.out.println(createrUser); return sysProjectDao.getSysProjectTotalCountUpdate(params); } @Override public List getSysProjectListUpdate(int first, int pageSize,String createrUser,String projectId,String projectName,String sysUserName) { Map params = new HashMap<>(); params.put("first", first); params.put("pageSize", pageSize); if (StringUtils.isNotBlank(createrUser)) { SysUser sysUser = sysUserService.getSysUser(createrUser); // 不是管理员时,加入applyUserId if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey() && sysUser.getSeeFlag().getKey() != SeeFlag.LEADING.getKey()) { params.put("createrUser", createrUser); } } params.put("projectId", projectId); if(StringUtils.isNotBlank(projectName)){ params.put("projectName","%"+ projectName+"%"); } if(StringUtils.isNotBlank(sysUserName)) { params.put("sysUserName", "%"+sysUserName+"%"); } // params.put("createrUser",createrUser); return sysProjectDao.getSysProjectListUpdate(params); } @Override @Transactional public void importProject(FileUploadEvent event,SysUser currentUser) throws Exception { List userList = sysUserService.getSysUserList(null, null, null, null, null,null,null); List sysProjectList = sysProjectDao.getSysProjectList(new HashMap()); Map userMap = new HashMap(); Map projectMap = new HashMap(); userList.forEach(user->{ userMap.put(user.getName(), user.getId()); }); sysProjectList.forEach(project->{ projectMap.put(project.getProjectId(), project.getProjectId()); }); 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 sysProjects = 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) { cellInfo = row.getCell(t).getStringCellValue(); } valuesList.add(cellInfo); } if (valuesList.size() != 4){ break; } if (userMap.get(valuesList.get(2)) == null) { throw new Exception("课题负责人不存在"); } //课题编号重复判断 if(projectMap.get(valuesList.get(0))!=null){ throw new Exception("课题编号有重复"); } SysProject sysProject = new SysProject(); sysProject.setId(IDUtils.uuid()); sysProject.setCreaterUser(currentUser.getId()); sysProject.setProjectId(valuesList.get(0)); sysProject.setProjectName(valuesList.get(1)); sysProject.setSysUserId(userMap.get(valuesList.get(2))); sysProject.setRemark(valuesList.get(3)); sysProjects.add(sysProject); //把excel里插入的更新Map projectMap.put(sysProject.getProjectId(), sysProject.getId()); } if (sysProjects.size() > 0) { sysProjectDao.insertBatch(sysProjects); } } @Override public List getAll() { return sysProjectDao.selectDistinctProjects(); } @Override public Boolean isExistProject(String project) { return sysProjectDao.selectByProject(project) > 0; } @Override public List getSysProjectList(int first, int pageSize) { Map params = new HashMap<>(); params.put("first", first); params.put("pageSize", pageSize); return sysProjectDao.getSysProjectList(params); } @Override public List getSysProjectList(String sysUserId) { Map params=new HashMap<>(); params.put("sysUserId",sysUserId); return sysProjectDao.getSysProjectList(params); } @Override public List getSysProjectListByProjectId(String projectId) { Map params=new HashMap<>(); params.put("projectId",projectId); return sysProjectDao.getSysProjectListByProjectId(params); } }