| | |
| | | import com.ruili.wcp.web.common.LicenseException; |
| | | import com.ruili.wcp.web.model.AjaxResponse; |
| | | import com.ruili.wcp.web.model.ErrorInfo; |
| | | import com.zbooksoft.gdmis.common.BoxEnum; |
| | | import com.zbooksoft.gdmis.service.CatSwajxxService; |
| | | import org.apache.commons.lang.StringUtils; |
| | | import org.apache.poi.hssf.usermodel.HSSFSheet; |
| | |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import org.springframework.web.servlet.ModelAndView; |
| | | |
| | | import javax.crypto.spec.PSource; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.util.*; |
| | |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | //读取第i个工作表 |
| | | HSSFSheet sheet = hssfWorkbook.getSheetAt(0); |
| | | //项目名称:1:25万南沙幅海域区域地质调查 |
| | | //项目名称:1:25万南沙幅海域区域地质调查 |
| | | String xmmc = getValue(sheet, 6, 3); |
| | | map.put("XMMC", xmmc); |
| | | |
| | | String xmbh = getValue(sheet, 7, 3); |
| | | map.put("XMBH", xmbh); |
| | | |
| | | String selectProject = "SELECT ID FROM CAT_FILE_AJJXX WHERE XMKYQMC = '" + xmmc + "' AND XMKYQBH = '" + xmbh + "'"; |
| | | List<Map<String, Object>> mapList = jdbcTemplate.queryForList(selectProject); |
| | | if (mapList.size() > 0) { |
| | | String ajId = mapList.get(0).get("ID").toString(); |
| | | map.put("AJ_ID", ajId); |
| | | } |
| | | String dcchc = getValue(sheet, 8, 3); |
| | | map.put("DCCHC", dcchc); |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 关联盒号关联 |
| | | * |
| | | * @param |
| | | * @return |
| | | */ |
| | | @RequestMapping({"/packingIndex"}) |
| | | @RequiresUser |
| | | public ModelAndView packingIndex() { |
| | | ModelAndView mv = new ModelAndView("gh/excel/packingExcel"); |
| | | return mv; |
| | | } |
| | | |
| | | /** |
| | | * @param file 0 导入转孔信息 1 导入图幅信息 2 导入实物案卷信息 |
| | | * @return |
| | | * @throws LicenseException |
| | | */ |
| | | |
| | | @RequestMapping({"/packingExcel"}) |
| | | @ResponseBody |
| | | @RequiresUser |
| | | public Object packingExcel(@RequestParam(value = "file", required = false) MultipartFile file) throws LicenseException { |
| | | try { |
| | | relationPacking(file); |
| | | return new AjaxResponse(true); |
| | | } catch (Exception e) { |
| | | logger.error(e.getMessage(), e); |
| | | return new AjaxResponse(new ErrorInfo("导入失败"), false); |
| | | } |
| | | } |
| | | |
| | | private void relationPacking(MultipartFile file) throws IOException { |
| | | |
| | | String originalFilename = file.getOriginalFilename(); |
| | | |
| | | InputStream inputStream = file.getInputStream(); |
| | | if (originalFilename.matches("^.+\\.(?i)(xls)$")) { |
| | | //创建工作簿对象 |
| | | HSSFWorkbook hssfWorkbook = new HSSFWorkbook(inputStream); |
| | | //读取第i个工作表 |
| | | HSSFSheet sheet = hssfWorkbook.getSheetAt(0); |
| | | |
| | | int maxRow = sheet.getLastRowNum(); |
| | | |
| | | for (int j = 1; j <= maxRow; j++) { |
| | | Row rowValue = sheet.getRow(j); |
| | | Cell boxNumberCell = rowValue.getCell(0); |
| | | Object boxNumber = getExcelValue(boxNumberCell); |
| | | |
| | | Cell storageLocationCell = rowValue.getCell(1); |
| | | Object storageLocation = getExcelValue(storageLocationCell); |
| | | |
| | | //04 1 10 1 02 06 |
| | | //ZO1 A10左 02列 06层 |
| | | String update = "update BUS_PACKING_MANAGE set STORAGE_LOCATION ='" + storageLocation + "' where BOX_NUMBER = '" + boxNumber + "'"; |
| | | jdbcTemplate.update(update); |
| | | } |
| | | |
| | | } |
| | | if (originalFilename.matches("^.+\\.(?i)(xlsx)$")) { |
| | | //创建工作簿对象 |
| | | XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream); |
| | | |
| | | XSSFSheet sheet = xssfWorkbook.getSheetAt(0); |
| | | //获取最后一行的num,即总行数。此处从0开始 |
| | | int maxRow = sheet.getLastRowNum(); |
| | | Row row = sheet.getRow(0); |
| | | for (int j = 1; j <= maxRow; j++) { |
| | | Row rowValue = sheet.getRow(j); |
| | | Cell boxNumberCell = rowValue.getCell(0); |
| | | Object boxNumber = getExcelValue(boxNumberCell); |
| | | |
| | | Cell storageLocationCell = rowValue.getCell(1); |
| | | Object storageLocationCode = getExcelValue(storageLocationCell); |
| | | |
| | | String storageLocation = parseStorageLocationWithEnum(storageLocationCode == null ? "" : storageLocationCode.toString()); |
| | | String update = "update BUS_PACKING_MANAGE set STORAGE_LOCATION_CODE = '" + storageLocationCode + "', STORAGE_LOCATION ='" + storageLocation + "' where BOX_NUMBER = '" + boxNumber + "'"; |
| | | jdbcTemplate.update(update); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | public static String parseStorageLocationWithEnum(String code) { |
| | | if (code == null || code.length() != 10) { |
| | | throw new IllegalArgumentException("Invalid code format, expected 10 characters"); |
| | | } |
| | | |
| | | // 提取各部分 |
| | | String zoneCode = code.substring(0, 2); |
| | | String zoneName = code.substring(2, 3); |
| | | String rackCode = code.substring(3, 5); |
| | | String sideCode = code.substring(5, 6); |
| | | String column = code.substring(6, 8); |
| | | String layer = code.substring(8, 10); |
| | | |
| | | // 使用枚举获取区域名称 |
| | | String zoneStr = BoxEnum.getNameByCode(zoneCode); |
| | | |
| | | // 处理方向映射 |
| | | String sideStr = "1".equals(sideCode) ? "左" : "右"; |
| | | |
| | | // 根据数字获取对应字母 |
| | | String letter = BoxEnum.RackLetter.getLetterByNumber(zoneName); // 返回 "A" |
| | | |
| | | // 构造架号 |
| | | String rackStr = letter + rackCode; |
| | | |
| | | // 组合最终结果 |
| | | return String.format("%s-%s%s-%s列-%s层", zoneStr, rackStr, sideStr, column, layer); |
| | | } |
| | | |
| | | public static String generateStorageLocationCode(String location) { |
| | | // 示例输入: Z01-A01左-08列-02层 |
| | | String[] parts = location.split("-"); |
| | | |
| | | String zoneStr = parts[0]; // Z01 |
| | | String rackAndSide = parts[1]; // A01左 |
| | | |
| | | // 区域代码 (例如 Z01 -> 04) |
| | | String zoneCode = BoxEnum.getCodeByName(zoneStr); |
| | | |
| | | // 架号中的字母与数字 (例如 A01 -> A=1, 01) |
| | | String rackLetter = rackAndSide.substring(0, 1); // A |
| | | String rackNumber = rackAndSide.substring(1, 3); // 01 |
| | | String sideStr = rackAndSide.substring(3); // 左 or 右 |
| | | |
| | | // 获取字母对应的数字 (例如 A -> 1) |
| | | // 根据数字获取对应字母 |
| | | String rackLetterNum = BoxEnum.RackLetter.getNumberByLetter(rackLetter); // 返回 "A" |
| | | |
| | | |
| | | // 方向代码 (左 -> 1, 右 -> 2) |
| | | String sideCode = "左".equals(sideStr) ? "1" : "0"; |
| | | |
| | | |
| | | // 拼接最终结果 |
| | | return zoneCode + rackLetterNum + rackNumber + sideCode; |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | // String s = parseStorageLocationWithEnum("0411010206"); |
| | | String locationNumber = "Z01-A01左-08列-02层"; |
| | | //0410110802 |
| | | String s = generateStorageLocationCode(locationNumber); |
| | | System.out.println(s); |
| | | } |
| | | } |