package com.gkhy.exam.system.service.impl; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.common.api.CommonPage; import com.gkhy.exam.common.api.CommonResult; import com.gkhy.exam.common.domain.model.LoginUserDetails; import com.gkhy.exam.common.exception.ApiException; import com.gkhy.exam.common.utils.PageUtils; import com.gkhy.exam.common.utils.SecurityUtils; import com.gkhy.exam.common.utils.StringUtils; import com.gkhy.exam.system.domain.CompanyBasic; import com.gkhy.exam.system.domain.ExQuestion; import com.gkhy.exam.system.domain.SysCompany; import com.gkhy.exam.system.mapper.CompanyBasicMapper; import com.gkhy.exam.system.service.CompanyBasicService; import com.gkhy.exam.system.service.SysCompanyService; import org.apache.poi.ss.usermodel.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @Service public class CompanyBasicServiceImpl extends ServiceImpl implements CompanyBasicService { @Autowired private CompanyBasicMapper companyBasicMapper; @Autowired private SysCompanyService sysCompanyService; @Override public CommonPage selectCompanyBasicList(Integer companyId) { if (!SecurityUtils.adminUser()){ if (companyId==null){ throw new ApiException("非管理员操作,查询条件不可为空"); } } PageUtils.startPage(); List companyBasics = companyBasicMapper.selectCompanyBasicList(companyId); return CommonPage.restPage(companyBasics); } @Override public CommonResult insertCompanyBasic(CompanyBasic companyBasic) { LoginUserDetails loginUser = SecurityUtils.getLoginUser(); List companyBasics = companyBasicMapper.selectCompanyBasicList(companyBasic.getCompanyId()); if (companyBasics.size()>0){ throw new ApiException("当前企业已有相关数据,请删除原有数据后重试"); } SysCompany sysCompany = sysCompanyService.selectCompanyById(Long.valueOf(companyBasic.getCompanyId())); companyBasic.setCompanyName(sysCompany.getName()); companyBasic.setCreateBy(loginUser.getUsername()); companyBasic.setCreateTime(LocalDateTime.now()); int insert = companyBasicMapper.insert(companyBasic); if (insert>0){ return CommonResult.success(); } return CommonResult.failed(); } @Override public CommonResult updateCompanyBasic(CompanyBasic companyBasic) { LoginUserDetails loginUser = SecurityUtils.getLoginUser(); SysCompany sysCompany = sysCompanyService.selectCompanyById(Long.valueOf(companyBasic.getCompanyId())); companyBasic.setCompanyName(sysCompany.getName()); companyBasic.setUpdateBy(loginUser.getUsername()); companyBasic.setUpdateTime(LocalDateTime.now()); int update = companyBasicMapper.updateBasicById(companyBasic); if (update>0){ return CommonResult.success(); } return CommonResult.failed(); } @Override public CommonResult deletedCompanyBasic(Integer companyBasicId) { LoginUserDetails loginUser = SecurityUtils.getLoginUser(); CompanyBasic companyBasic = new CompanyBasic(); companyBasic.setId(companyBasicId); companyBasic.setDelFlag(2); companyBasic.setUpdateBy(loginUser.getUsername()); companyBasic.setUpdateTime(LocalDateTime.now()); int deleted = companyBasicMapper.updateById(companyBasic); if (deleted>0){ return CommonResult.success(); } return CommonResult.failed(); } @Override @Transactional public CommonResult uploadBasic(MultipartFile file) { Workbook workbook = null; List companyBasicslist = new ArrayList<>(); StringBuffer stringBuffer = new StringBuffer(); Integer t=0; try { workbook = WorkbookFactory.create(file.getInputStream()); Sheet sheetAt = workbook.getSheetAt(0); LoginUserDetails loginUser = SecurityUtils.getLoginUser(); for (int i = 1; i <= sheetAt.getLastRowNum(); i++) { Row row = sheetAt.getRow(i); String cellValueAsString = getCellValueAsString(row.getCell(1)); if (StringUtils.isEmpty(cellValueAsString)){ continue; } CompanyBasic companyBasic = new CompanyBasic(); if (row!=null ){ companyBasic.setBasic(getCellValueAsString(row.getCell(1))); companyBasic.setIntroduce(getCellValueAsString(row.getCell(2))); companyBasic.setTarget(getCellValueAsString(row.getCell(3))); companyBasic.setQuality(getCellValueAsString(row.getCell(4))); companyBasic.setActivity(getCellValueAsString(row.getCell(5))); companyBasic.setAudit(getCellValueAsString(row.getCell(6))); companyBasic.setEpiboly(getCellValueAsString(row.getCell(7))); companyBasic.setResource(getCellValueAsString(row.getCell(8))); companyBasic.setCreateTime(LocalDateTime.now()); companyBasic.setCreateBy(SecurityUtils.getUsername()); SysCompany sysCompany = sysCompanyService.selectCompanyByName(getCellValueAsString(row.getCell(0))); companyBasic.setCompanyName(sysCompany.getName()); companyBasic.setCompanyId(Math.toIntExact(sysCompany.getId())); } companyBasicslist.add(companyBasic); } for (CompanyBasic companyBasic : companyBasicslist) { List companyBasics = companyBasicMapper.selectCompanyBasicList(companyBasic.getCompanyId()); if (companyBasics.size()>0){ stringBuffer.append(companyBasic.getCompanyName()).append(","); }else { if (!SecurityUtils.adminUser()){ if (companyBasic.getCompanyId() != null && SecurityUtils.getCompanyId() == companyBasic.getCompanyId().longValue()) { t+=companyBasicMapper.insert(companyBasic); } else { stringBuffer.append(companyBasic.getCompanyName()).append(","); } }else { t+=companyBasicMapper.insert(companyBasic); } } } if (t<1){ throw new ApiException("导入公司基本信息失败"); } workbook.close(); } catch (IOException e) { throw new RuntimeException(e); } if (stringBuffer.length()>0){ return CommonResult.failed("只能导入本企业数据或该企业已有数据 ["+stringBuffer.toString()+"]"); } return CommonResult.success(); } /** * 安全获取单元格值 */ private String getCellValueAsString(Cell cell) { if (cell == null) return ""; switch (cell.getCellType()) { case STRING: return cell.getStringCellValue().trim(); case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { return cell.getDateCellValue().toString(); } else { return String.valueOf((long) cell.getNumericCellValue()); } case BOOLEAN: return String.valueOf(cell.getBooleanCellValue()); case FORMULA: try { return cell.getStringCellValue(); } catch (IllegalStateException e) { return String.valueOf(cell.getNumericCellValue()); } default: return ""; } } }