package com.dg.core.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dg.core.db.gen.entity.*; import com.dg.core.db.gen.mapper.*; import com.dg.core.db.manual.pojo.QueryResults; import com.dg.core.db.manual.pojo.RecommendResult; import com.dg.core.db.manual.pojo.Search; import com.dg.core.service.ITransactionEventService; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @Service public class TransactionEventImpl extends ServiceImpl implements ITransactionEventService { @Resource private OrganizationChartMapper organizationChartMapper; @Resource private KeywordMapper keywordMapper; @Resource private AutomessageTransactionEventInterviewMapper automessageTransactionEventInterviewMapper; @Resource private GuideRepairOrderMapper guideRepairOrderMapper; @Resource private AutomessagePolicyDocumentsMapper automessagePolicyDocumentsMapper; @Override public TransactionEvent selectConfigData(String Id, SysUser sysUser) { TransactionEvent transactionEvent = baseMapper.selectConfigData(Id); //如果当前没有登录用户则不增加浏览次数 if (sysUser != null) { LocalDateTime startTime = LocalDate.now().atTime(0, 0, 0); LocalDateTime endTime = LocalDate.now().atTime(23, 59, 59); AutomessageTransactionEventInterview automessageTransactionEventInterview = automessageTransactionEventInterviewMapper.selectOne(new QueryWrapper() .lambda().eq(AutomessageTransactionEventInterview::getTransactionEventId, Id) .eq(AutomessageTransactionEventInterview::getUserId, sysUser.getUserId()) .orderByDesc(AutomessageTransactionEventInterview::getInterviewTime) .last("limit 1")); transactionEvent.setQueryTime(LocalDateTime.now()); //判断上次访问时间是不是今天 如果是今天不增加浏览次数 if (automessageTransactionEventInterview == null || (!(transactionEvent.getQueryTime().isAfter(startTime) && transactionEvent.getQueryTime().isBefore(endTime)))) { transactionEvent.setBrowseNum(transactionEvent.getBrowseNum() + 1); baseMapper.updateById(transactionEvent); AutomessageTransactionEventInterview automessageTransactionEventInterviewNew = new AutomessageTransactionEventInterview(); automessageTransactionEventInterviewNew.setTransactionEventId(Integer.valueOf(Id)); automessageTransactionEventInterviewNew.setUserId(new Long(sysUser.getUserId())); automessageTransactionEventInterviewNew.setInterviewTime(LocalDateTime.now()); automessageTransactionEventInterviewMapper.insert(automessageTransactionEventInterviewNew); } } return transactionEvent; } @Override public List selectConfigList(IPage page, Integer state, String keyword, String classifyGrade, List ids) { return baseMapper.selectConfigList(page, state, keyword, classifyGrade, ids); } @Override public List selectConfigList(String keyword, String classifyGrade, List ids) { return baseMapper.selectConfigList(keyword, classifyGrade, ids); } @Override public int insertConfig(TransactionEvent entity) { return baseMapper.insertConfig(entity); } @Override public int updateConfig(TransactionEvent entity) { return baseMapper.updateConfig(entity); } @Override public int deleteConfigById(String Id) { List guideRepairOrders = guideRepairOrderMapper .selectList(new QueryWrapper().lambda().eq(GuideRepairOrder::getMatterId, Id)); if (guideRepairOrders.size() == 0) { return baseMapper.deleteConfigById(Id); } return 0; } @Override public int countNum(String matterAndUser, String classifyGrade, List ids) { return baseMapper.countNum(matterAndUser, classifyGrade, ids); } @Override public QueryResults queryMatterNameList(IPage page, Integer state, Integer recommendSize, String keyWord) { QueryResults queryResults = new QueryResults(); List searches = baseMapper.selectSearch(page, state, keyWord); queryResults.setSearchList(searches); List searchesAssociate = baseMapper.selectSearchAssociate(page, recommendSize, keyWord); queryResults.setTransactionEventList(searchesAssociate); queryResults.setKeywordEntityList(keywordMapper.selectByName(keyWord)); queryResults.setTotal((baseMapper.selectSearch(keyWord).size()) + (baseMapper.selectSearchAssociate(keyWord).size())); List transactionEventEntities = baseMapper.queryMatterNameList(keyWord, null); List list = new ArrayList<>(); for (TransactionEvent transactionEvent : transactionEventEntities) { if (transactionEvent.getAssociateNames() != null) { String[] associateNames = transactionEvent.getAssociateNames().split(","); for (String associateName : associateNames) { list.add(associateName); } } } List keywordEntityList = new ArrayList<>(); String[] keywords = list.stream().distinct().collect(Collectors.joining(",")).split(",");//去重 for (String keyword : keywords) { if (keyword != null && !keyword.equals("")) { KeywordEntity keywordEntity = new KeywordEntity(); keywordEntity.setName(keyword); keywordEntityList.add(keywordEntity); } } queryResults.setKeywordAssociationList(keywordEntityList); return queryResults; } @Override public QueryResults queryMatterNameList(String keyWord) { QueryResults queryResults = new QueryResults(); List searches = baseMapper.selectSearchList(keyWord); for (Search search : searches) { search.setTransactionEventList(baseMapper.queryMatterNameList(keyWord, search.getClassifyId().toString())); } queryResults.setOrganizationChartEntityList(organizationChartMapper.selectByKeyWord(keyWord)); queryResults.setSearchList(searches); List searchesAssociate = baseMapper.selectSearchAssociateDistinct(keyWord); for (Search search : searchesAssociate) { search.setTransactionEventList(baseMapper.queryAssociateNamesList(keyWord, search.getClassifyId().toString())); } queryResults.setTransactionEventList(searchesAssociate); queryResults.setKeywordEntityList(keywordMapper.selectByName(keyWord)); queryResults.setAutomessagePolicyDocuments(automessagePolicyDocumentsMapper.selectConfigList(keyWord,"2",null,null)); queryResults.setRegulations(automessagePolicyDocumentsMapper.selectConfigList(keyWord,"1",null,null)); return queryResults; } @Override public RecommendResult smartConsulting(String keyWord) { RecommendResult recommendResult = new RecommendResult(); List keywordEntityList = new ArrayList<>(); List transactionEventEntities = baseMapper.queryMatterNameList(keyWord, null); List transactionEvents = baseMapper.queryAssociateNamesList(keyWord, null); recommendResult.setTransactionEventList(transactionEventEntities); List list = new ArrayList<>(); for (TransactionEvent transactionEvent : transactionEvents) { // 直接返回办事指南名称 list.add(transactionEvent.getMatterName()); // 遍历关键词列表 可能后面流程更改会遇到暂时保存代码; /* if (transactionEvent.getAssociateNames() != null) { String[] associateNames = transactionEvent.getAssociateNames().split(","); for (String associateName : associateNames) { list.add(associateName); } }*/ } String[] keywords = list.stream().distinct().collect(Collectors.joining(",")).split(",");//去重 for (String keyword : keywords) { if (keyword != null && !keyword.equals("")) { KeywordEntity keywordEntity = new KeywordEntity(); keywordEntity.setName(keyword); keywordEntityList.add(keywordEntity); } } recommendResult.setKeywordEntityList(keywordEntityList); List organizationChartEntities = organizationChartMapper.selectByKeyWord(keyWord); recommendResult.setAutomessagePolicyDocuments(automessagePolicyDocumentsMapper.selectConfigList(keyWord,"2",null,null)); recommendResult.setRegulations(automessagePolicyDocumentsMapper.selectConfigList(keyWord,"1",null,null)); recommendResult.setOrganizationChartEntityList(organizationChartEntities); return recommendResult; } @Override public String selectDataIfExist(String departmentId, String matterName) { return baseMapper.selectDataIfExist(departmentId, matterName); } @Override public List selectclassifyId(String classifyId) { return baseMapper.selectclassifyId(classifyId); } @Override public List selectClassifyList(List ids) { return baseMapper.selectClassifyList(ids); } @Override public int countNumByMatterName(String matterName) { return baseMapper.countNumByMatterName(matterName); } @Override public List queryByClassifyIdList(String classifyId, Integer departmentId) { return baseMapper.queryByClassifyIdList(classifyId, departmentId); } @Override public List queryByClassifyIdList(IPage page, Integer state, String classifyId, Integer departmentId) { return baseMapper.queryByClassifyIdList(page, state, classifyId, departmentId); } @Override public List queryByQueryTime() { List transactionEvents = baseMapper.selectList(new QueryWrapper().lambda().orderByDesc(TransactionEvent::getQueryTime)); return transactionEvents; } @Override public List queryByBrowseNum() { List transactionEvents = baseMapper.selectList(new QueryWrapper().lambda().orderByDesc(TransactionEvent::getBrowseNum)); return transactionEvents; } @Override public TransactionEvent sumTransactionNum() { return baseMapper.sumTransactionNum(); } @Override public int countNumByClassifyIdList(String classifyId, Integer departmentId) { return baseMapper.countNumByClassifyIdList(classifyId, departmentId); } @Override public List selectList(String keyWord) { if (keyWord != null && keyWord != "") { return baseMapper.selectList(new QueryWrapper().lambda().like(TransactionEvent::getMatterName, keyWord)); } else { return baseMapper.selectList(new QueryWrapper().lambda()); } } @Override public Integer batchImport(String fileName, MultipartFile file) { boolean notNull = false; if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { throw new RuntimeException("选择文件格式不正确,请下载模板上传"); } boolean isExcel2003 = true; if (fileName.matches("^.+\\.(?i)(xlsx)$")) { isExcel2003 = false; } InputStream is = null; try { is = file.getInputStream(); } catch (IOException e) { throw new RuntimeException(e); } Workbook wb = null; if (isExcel2003) { try { wb = new HSSFWorkbook(is); } catch (IOException e) { throw new RuntimeException(e); } } else { try { wb = new XSSFWorkbook(is); } catch (IOException e) { throw new RuntimeException(e); } } Integer failNum = 0;//失败数量 // 获取excel的sheet页数 int numberOfSheets = wb.getNumberOfSheets(); for (int j = 0; j < numberOfSheets; j++) { int i = 2; //获取excel字段名称进行比较 Sheet sheetAt = wb.getSheetAt(j); if(sheetAt.getRow(2)!=null){ if (new DataFormatter().formatCellValue(sheetAt.getRow(1).getCell(1)).length()>=3){ i--; } Row row1 = sheetAt.getRow(i); TransactionEvent transactionEvent = baseMapper.selectOne(new QueryWrapper().lambda().eq(TransactionEvent::getMatterName, new DataFormatter().formatCellValue(row1.getCell(1)))); boolean isAdd = false; if (transactionEvent == null) { transactionEvent = new TransactionEvent(); isAdd = true; } transactionEvent.setMatterName(new DataFormatter().formatCellValue(row1.getCell(1))); Row row2 = sheetAt.getRow(i+1); transactionEvent.setSetGist("

" + new DataFormatter().formatCellValue(row2.getCell(1)) + "

"); Row row3 = sheetAt.getRow(i+2); Row row4 = sheetAt.getRow(i+3); transactionEvent.setBasicInformation("

事项名称:" + new DataFormatter().formatCellValue(row1.getCell(1)) + "
" + new DataFormatter().formatCellValue(row3.getCell(0)) + ":" + new DataFormatter().formatCellValue(row3.getCell(1))+ "
" + new DataFormatter().formatCellValue(row3.getCell(3)) + ":" + new DataFormatter().formatCellValue(row3.getCell(4)) + "
" + new DataFormatter().formatCellValue(row4.getCell(0)) + ":" + new DataFormatter().formatCellValue(row4.getCell(1)) + "

"); i = i+5; String applicationMaterial = "

"; while (true) { Row row = sheetAt.getRow(i); if (new DataFormatter().formatCellValue(row.getCell(0)).equals("办理途径、条件和注意事项")) { i = i + 2; break; } applicationMaterial = applicationMaterial + "办理区域:" + new DataFormatter().formatCellValue(row.getCell(0)) + "
" + "部门名称:" + new DataFormatter().formatCellValue(row.getCell(1)) + "
" + "咨询电话:" + new DataFormatter().formatCellValue(row.getCell(2)) + "
" + "办公地址:" + new DataFormatter().formatCellValue(row.getCell(3)) + "
" + "办公时间:" + new DataFormatter().formatCellValue(row.getCell(4)) + "
"; applicationMaterial = applicationMaterial + "
"; i++; } applicationMaterial = applicationMaterial + "

"; transactionEvent.setApplicationMaterial(applicationMaterial); String acceptConditions = "

"; while (true) { Row row = sheetAt.getRow(i); if (new DataFormatter().formatCellValue(row.getCell(0)).equals("(二)网上申报")) { i = i + 1; break; } acceptConditions = acceptConditions + new DataFormatter().formatCellValue(row.getCell(0)) + "  " +new DataFormatter().formatCellValue( row.getCell(1)) + "  " + new DataFormatter().formatCellValue(row.getCell(2)) + "  " +new DataFormatter().formatCellValue( row.getCell(3)) + "  " + new DataFormatter().formatCellValue(row.getCell(4)) + "  "; acceptConditions = acceptConditions + "
"; i++; } acceptConditions = acceptConditions + "

"; transactionEvent.setAcceptConditions(acceptConditions); String rates = "

"; while (true) { Row row = sheetAt.getRow(i); if (new DataFormatter().formatCellValue(row.getCell(0)).equals("(三)手机移动申报")) { i = i + 1; break; } rates = rates + new DataFormatter().formatCellValue(row.getCell(0)) + "  " + new DataFormatter().formatCellValue(row.getCell(1)) + "  " + new DataFormatter().formatCellValue(row.getCell(2)) + "  " +new DataFormatter().formatCellValue( row.getCell(3)) + "  " + new DataFormatter().formatCellValue(row.getCell(4)) + "  "; rates = rates + "
"; i++; } rates = rates + "

"; transactionEvent.setRates(rates); String transactionArea = "

"; while (true) { Row row = sheetAt.getRow(i); if (new DataFormatter().formatCellValue(row.getCell(0)).equals("(四)经营许可(备案)事项程序运行图谱(附电子版)")) { i = i + 1; break; } transactionArea = transactionArea + new DataFormatter().formatCellValue(row.getCell(0)) + "  " + new DataFormatter().formatCellValue(row.getCell(1)) + "  " + new DataFormatter().formatCellValue(row.getCell(2)) + "  " +new DataFormatter().formatCellValue( row.getCell(3)) + "  " + new DataFormatter().formatCellValue(row.getCell(4)) + "  "; transactionArea = transactionArea + "
"; i++; } transactionArea = transactionArea + "

"; transactionEvent.setTransactionArea(transactionArea); String handlingProcedures = "

"; while (true) { Row row = sheetAt.getRow(i); if (new DataFormatter().formatCellValue(row.getCell(0)).equals("(五)经营许可(备案)事项实施内容一览表(附电子版)")) { i = i + 1; break; } handlingProcedures = handlingProcedures + new DataFormatter().formatCellValue(row.getCell(0)) + "  " + new DataFormatter().formatCellValue(row.getCell(1)) + "  " + new DataFormatter().formatCellValue(row.getCell(2)) + "  " +new DataFormatter().formatCellValue( row.getCell(3)) + "  " + new DataFormatter().formatCellValue(row.getCell(4)) + "  "; handlingProcedures = handlingProcedures + "
"; i++; } handlingProcedures = handlingProcedures + "

"; transactionEvent.setHandlingProcedures(handlingProcedures); int ans; if (isAdd) { ans = baseMapper.insert(transactionEvent); } else { ans = baseMapper.updateById(transactionEvent); } if (ans <= 0) { failNum++; } } } if (failNum == 0) {// return 3;//全部导入成功 } else if (failNum < numberOfSheets) { return 2;//部分导入成功 } else if (failNum.equals(numberOfSheets)) { return 0;//导入失败 } return 0; } }