lxzn-boot-base-core/src/main/java/org/jeecg/common/util/FileUtil.java
@@ -1,5 +1,7 @@ package org.jeecg.common.util; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.exception.ExceptionCast; import org.springframework.beans.factory.annotation.Value; @@ -9,10 +11,13 @@ import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Date; import java.util.List; @Slf4j @Component public class FileUtil { @@ -60,6 +65,42 @@ return dto; } public static FileUploadResult uploadFile(byte[] fileData, String fileName) { String suffix = getFileSuffix(fileName); Date currentDate = DateUtils.getDate(); String monthStr = DateUtils.date2Str(currentDate, DateUtils.monthFormat.get()); // ç¸å¯¹è·¯å¾ String relativePath = "/" + monthStr + "/" + DateUtils.getDayStr(currentDate) + "/"; // ç»å¯¹è·¯å¾ String absolutePath = fileUploadFolder + "/" + monthStr + "/" + DateUtils.getDayStr(currentDate) + "/"; String fileNameNonSuffix = getFilenameNonSuffix(fileName); if (StringUtils.isBlank(fileNameNonSuffix)) { return null; } // è·åæä»¶å å¯åç§° 1 ä¿è¯æä»¶å¯ä¸ ä¸åå¨è¦çé®é¢ 2 ç®å½ä¸ä¿åæä»¶å å¯åç§° å»é¤æä»¶å ³é®ä¿¡æ¯ String encodeFileName = SHA256Util.getSHA256Str(fileNameNonSuffix + System.currentTimeMillis()) + "." + suffix; Long fileSize = (long) fileData.length; try { File targetFile = new File(absolutePath, encodeFileName); if(!targetFile.getParentFile().exists()) { //å建ç®å½ targetFile.getParentFile().mkdirs(); } Files.write(Paths.get(absolutePath + encodeFileName), fileData); FileUploadResult dto = new FileUploadResult(); dto.setFileName(fileNameNonSuffix); dto.setFileEncodeName(encodeFileName); dto.setFilePath(relativePath + encodeFileName); dto.setFileSize(fileSize); dto.setFileSuffix(suffix); return dto; } catch (IOException e) { log.error("æä»¶åå ¥å¤±è´¥: {}", e.getMessage(), e); return null; } } /** * @param filePath è·¯å¾ * @param fileName æä»¶å lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamEquipmentService.java
@@ -45,4 +45,11 @@ * @return */ List<EquipmentSearchResult> asyncLoadEquipment(String keyword, Integer pageSize, String id); /** * æ¥è¯¢è®¾å¤ä¿¡æ¯ * @param equipmentCode * @return */ EamEquipment selectByEquipmentCode(String equipmentCode); } lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
@@ -194,6 +194,7 @@ queryWrapper.like("equipment_code", keyword); queryWrapper.or().like("equipment_name", keyword); } queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0); IPage<EamEquipment> pageResult = eamEquipmentMapper.queryPageList(page, queryWrapper); if (pageResult != null && CollectionUtil.isNotEmpty(pageResult.getRecords())) { List<EquipmentSearchResult> resultList = new ArrayList<>(); @@ -205,6 +206,31 @@ return Collections.emptyList(); } @Override public EamEquipment selectByEquipmentCode(String equipmentCode) { if (StringUtils.isBlank(equipmentCode)) { return null; } QueryWrapper<EamEquipment> queryWrapper = new QueryWrapper<>(); //ç¨æ·æ°æ®æé LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (sysUser == null) { return null; } if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) { //éæ©äºè®¾å¤ï¼æ ¹æ®è®¾å¤idè¿æ»¤è®¾å¤ List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(",")); queryWrapper.in("equipment_code", equipArr); } else { //没æéæ©è®¾å¤ï¼æ ¹æ®è½¦é´è¿æ»¤è®¾å¤ queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=org_id", sysUser.getId()); } queryWrapper.eq("equipment_code", equipmentCode); queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0); return eamEquipmentMapper.selectOne(queryWrapper); } /** * è·åææç产线idï¼å 嫿æä¸çº§ï¼ */ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamMaintenanceStandardController.java
@@ -7,22 +7,45 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.FileUtil; import org.jeecg.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum; import org.jeecg.modules.eam.dto.MaintenanceStandardImport; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamMaintenanceStandard; import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail; import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest; import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.service.IEamMaintenanceStandardService; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.util.PoiPublicUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; /** * @Description: ä¿å »æ å @@ -39,6 +62,8 @@ private IEamMaintenanceStandardService eamMaintenanceStandardService; @Autowired private ISysBusinessCodeRuleService businessCodeRuleService; @Autowired private IEamEquipmentService eamEquipmentService; /** * å页å表æ¥è¯¢ @@ -168,9 +193,133 @@ * @param response * @return */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, EamMaintenanceStandard.class); @RequestMapping(value = "/inspectionImportExcel", method = RequestMethod.POST) public Result<?> inspectionImportExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { // è·åä¸ä¼ æä»¶å¯¹è±¡ MultipartFile file = entity.getValue(); ImportParams params = new ImportParams(); params.setTitleRows(2); params.setHeadRows(1); params.setSheetNum(1); params.setNeedSave(true); EamMaintenanceStandardRequest standardRequest = new EamMaintenanceStandardRequest(); try { //读å设å¤ç¼å·ï¼å¾çç readExcel(file, standardRequest); EamEquipment equipment = eamEquipmentService.selectByEquipmentCode(standardRequest.getEquipmentCode()); if(equipment == null) { log.error("设å¤ä¸åå¨ï¼{}", standardRequest.getEquipmentCode()); continue; } standardRequest.setStandardName(standardRequest.getEquipmentName() + "ç¹æ£æ å"); standardRequest.setMaintenanceCategory(MaintenanceCategoryEnum.POINT_INSPECTION.name()); standardRequest.setEquipmentId(equipment.getId()); //读åä¿å »æç»å 容 List<MaintenanceStandardImport> list = ExcelImportUtil.importExcel(file.getInputStream(), MaintenanceStandardImport.class, params); //æç»é¡¹ List<EamMaintenanceStandardDetail> tableList = list.stream().map(EamMaintenanceStandardDetail::new).collect(Collectors.toList()); standardRequest.setTableDetailList(tableList); String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE); standardRequest.setStandardCode(codeSeq); boolean b = eamMaintenanceStandardService.addMaintenanceStandard(standardRequest); if (!b) { log.error("ä¿åå¤±è´¥ï¼ {}", standardRequest.getEquipmentCode()); } } catch (Exception e) { //update-begin-author:taoyan date:20211124 for: å¯¼å ¥æ°æ®éå¤å¢å æç¤º String msg = e.getMessage(); log.error("æä»¶ {} å¤çå¼å¸¸ï¼ {}", file.getOriginalFilename(), msg, e); //update-end-author:taoyan date:20211124 for: å¯¼å ¥æ°æ®éå¤å¢å æç¤º } finally { try { file.getInputStream().close(); } catch (IOException e) { log.error(e.getMessage(), e); } } } return Result.ok("æä»¶å¯¼å ¥å®æï¼"); } /** * 读åExcel 第ä¸è¡ï¼ 第äºè¡çä¿¡æ¯ï¼å æ¬å¾çä¿¡æ¯ * @param file * @param request */ private void readExcel(MultipartFile file, EamMaintenanceStandardRequest request) { Workbook book = null; boolean isXSSFWorkbook = false; try { book = WorkbookFactory.create(file.getInputStream()); if (book instanceof XSSFWorkbook) { isXSSFWorkbook = true; } Sheet sheet = book.getSheetAt(0); //第ä¸è¡è¯»å Row row = sheet.getRow(0); //设å¤ç¼ç Cell equipmentCode = row.getCell(15); if(CellType.NUMERIC.equals(equipmentCode.getCellType())) { request.setEquipmentCode(String.valueOf((int) equipmentCode.getNumericCellValue())); }else if(CellType.STRING.equals(equipmentCode.getCellType())) { request.setEquipmentCode(equipmentCode.getStringCellValue()); } if (StringUtils.isBlank(request.getEquipmentCode())) { throw new JeecgBootException("Excelã " + file.getOriginalFilename() + "ãæ²¡æè¯»åå°è®¾å¤ç¼å·ï¼å¯¼å ¥å¤±è´¥ï¼"); } //åå§æ¥æ Cell initialDate = row.getCell(11); if (DateUtil.isCellDateFormatted(initialDate)) { request.setInitialDate(initialDate.getDateCellValue()); } else { request.setInitialDate(new Date()); } //设å¤åç§° Cell equipmentName = row.getCell(13); request.setEquipmentName(equipmentName.getStringCellValue()); //第äºè¡è¯»å row = sheet.getRow(1); //ä¿å »å¨æ Cell period = row.getCell(11); if (CellType.NUMERIC.equals(period.getCellType())) { request.setMaintenancePeriod((int) period.getNumericCellValue()); } else { //é»è®¤ç¹æ£å¨æ 1 request.setMaintenancePeriod(1); } //æä»¶ç¼ç Cell fileCode = row.getCell(13); request.setFileCode(fileCode.getStringCellValue()); Map<String, PictureData> pictures; if (isXSSFWorkbook) { pictures = PoiPublicUtil.getSheetPictrues07((XSSFSheet) book.getSheetAt(0), (XSSFWorkbook) book); } else { pictures = PoiPublicUtil.getSheetPictrues03((HSSFSheet) book.getSheetAt(0), (HSSFWorkbook) book); } if (CollectionUtil.isNotEmpty(pictures)) { //åªä¼åå¨ä¸å¼ å¾ç PictureData pictureData = pictures.get(pictures.keySet().iterator().next()); byte[] data = pictureData.getData(); String fileName = request.getEquipmentCode() + "[" + request.getFileCode() + "]" + "." + pictureData.suggestFileExtension(); FileUploadResult fileUploadResult = FileUtil.uploadFile(data, fileName); if(fileUploadResult != null) { List<FileUploadResult> fileList = request.getFileList(); if(fileList == null) { fileList = new ArrayList<FileUploadResult>(); } fileList.add(fileUploadResult); request.setFileList(fileList); } } } catch (Exception e) { log.error("读åExcelä¿¡æ¯å¤±è´¥ï¼{}", e.getMessage(), e); } } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package org.jeecg.modules.eam.dto; import lombok.Data; import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; @Data public class MaintenanceStandardImport implements Serializable { @Excel(name = "å¾å·", width = 15) private Integer itemCode; @Excel(name = "ç¹æ£é¡¹ç®", width = 15) private String itemName; @Excel(name = "ç¹æ£é¨ä½", width = 15) private String itemPart; @Excel(name = "ç¹æ£å 容", width = 15) private String itemContent; @Excel(name = "ç¹æ£è¦æ±", width = 15) private String itemDemand; } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandard.java
@@ -10,7 +10,6 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; @@ -33,66 +32,53 @@ @ApiModelProperty(value = "主é®") private String id; /**å建人*/ @Excel(name = "å建人", width = 15) @ApiModelProperty(value = "å建人") private String createBy; /**å建æ¶é´*/ @ApiModelProperty(value = "å建æ¶é´") private Date createTime; /**æ´æ°äºº*/ @Excel(name = "æ´æ°äºº", width = 15) @ApiModelProperty(value = "æ´æ°äºº") private String updateBy; /**æ´æ°æ¶é´*/ @ApiModelProperty(value = "æ´æ°æ¶é´") private Date updateTime; /**å 餿 è®°*/ @Excel(name = "å 餿 è®°", width = 15) @ApiModelProperty(value = "å 餿 è®°") private Integer delFlag; /**æ åç¼ç */ @Excel(name = "æ åç¼ç ", width = 15) @ApiModelProperty(value = "æ åç¼ç ") private String standardCode; /**æ ååç§°*/ @Excel(name = "æ ååç§°", width = 15) @ApiModelProperty(value = "æ ååç§°") private String standardName; /**ä¿å »å¨æ;åä½:天*/ @Excel(name = "ä¿å »å¨æ;åä½:天", width = 15) @ApiModelProperty(value = "ä¿å »å¨æ;åä½:天") private Integer maintenancePeriod; /**åå§æ¥æ ä»åªä¸å¤©å¼å§è®¡ç®ä¸æ¬¡ä¿å »æ¥æ*/ @Excel(name = "åå§æ¥æ", width = 15, format = "yyyy-MM-dd") @ApiModelProperty(value = "åå§æ¥æ") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date initialDate; /**ä¿å »åç±»*/ @Excel(name = "ä¿å »åç±»", width = 15, dicCode = "maintenance_category") @ApiModelProperty(value = "ä¿å »åç±»") @Dict(dicCode = "maintenance_category") private String maintenanceCategory; /**设å¤ç¼å·*/ @Excel(name = "设å¤ç¼å·", width = 15, dictTable = "eam_equipment", dicCode = "id", dicText = "equipment_code") @ApiModelProperty(value = "设å¤ç¼å·") @Dict(dicCode = "eam_equipment, equipment_code, id") private String equipmentId; /**æ åç¶æ*/ @Excel(name = "æ åç¶æ", width = 15, dicCode = "maintenance_standard_status") @ApiModelProperty(value = "æ åç¶æ") @Dict(dicCode = "maintenance_standard_status") private String standardStatus; /**æ åçæ¬*/ @Excel(name = "æ åçæ¬", width = 15) @ApiModelProperty(value = "æ åçæ¬") private Integer standardVersion; /**æä»¶ç¼å·*/ @Excel(name = "æä»¶ç¼å·", width = 15) @ApiModelProperty(value = "æä»¶ç¼å·") private String fileCode; /**åèæä»¶*/ @Excel(name = "åèæä»¶", width = 15) @ApiModelProperty(value = "åèæä»¶") private String referenceFile; } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java
@@ -8,6 +8,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.modules.eam.dto.MaintenanceStandardImport; import java.io.Serializable; import java.util.Date; @@ -48,7 +49,7 @@ private String standardId; /**ä¿å »é¡¹åºå·*/ @ApiModelProperty(value = "ä¿å »é¡¹åºå·") private String itemCode; private Integer itemCode; /**ä¿å »é¡¹*/ @ApiModelProperty(value = "ä¿å »é¡¹") private String itemName; @@ -58,4 +59,13 @@ /**ä¿å »è¦æ±*/ @ApiModelProperty(value = "ä¿å »è¦æ±") private String itemDemand; public EamMaintenanceStandardDetail(){} public EamMaintenanceStandardDetail(MaintenanceStandardImport dto) { this.itemCode = dto.getItemCode(); this.itemName = dto.getItemName() + " " + dto.getItemPart() + " " + dto.getItemContent(); this.itemDemand = dto.getItemDemand(); } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamMaintenanceStandardRequest.java
@@ -65,6 +65,10 @@ @ApiModelProperty(value = "å é¤ ä¿å »é¡¹æç»") private List<EamMaintenanceStandardDetail> removeDetailList; /** * Excelå¯¼å ¥æ¶ä½¿ç¨ */ private String equipmentName; private String equipmentCode; } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBusinessCodeRuleServiceImpl.java
@@ -38,7 +38,7 @@ @Override @Transactional(rollbackFor = Exception.class) public String generateBusinessCodeSeq(String businessCode) { public synchronized String generateBusinessCodeSeq(String businessCode) { //æ¥è¯¢çæè§å LambdaQueryWrapper<SysBusinessCodeRule> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysBusinessCodeRule::getBusinessCode, businessCode);