src/main/java/com/zy/asrs/controller/CrnController.java
@@ -74,13 +74,13 @@ vo.setForkOffset(crnProtocol.getForkPosType().desc); // è´§åä½ç½® vo.setLiftPos(crnProtocol.getLiftPosType().desc); vo.setWalkPos(crnProtocol.getWalkPos() == 1 ? "ä¸å¨å®ä½" : "å¨å®ä½"); vo.setXspeed(crnProtocol.getXSpeed()); // èµ°è¡é度ï¼m/min) vo.setYspeed(crnProtocol.getYSpeed()); // åéé度ï¼m/min) vo.setZspeed(crnProtocol.getZSpeed()); // åçé度ï¼m/min) vo.setXdistance(crnProtocol.getXDistance()); // èµ°è¡è·ç¦»(Km) vo.setYdistance(crnProtocol.getYDistance()); // åéè·ç¦»(Km) vo.setXduration(crnProtocol.getXDuration()); // èµ°è¡æ¶é¿(H) vo.setYduration(crnProtocol.getYDuration()); // åéæ¶é¿(H) vo.setXspeed(String.format("%.2f", crnProtocol.getXSpeed())); // èµ°è¡é度ï¼m/min) vo.setYspeed(String.format("%.2f", crnProtocol.getYSpeed())); // åéé度ï¼m/min) vo.setZspeed(String.format("%.2f", crnProtocol.getZSpeed())); // åçé度ï¼m/min) vo.setXdistance(String.format("%.2f", crnProtocol.getXDistance())); // èµ°è¡è·ç¦»(Km) vo.setYdistance(String.format("%.2f", crnProtocol.getYDistance())); // åéè·ç¦»(Km) vo.setXduration(String.format("%.2f", crnProtocol.getXDuration())); // èµ°è¡æ¶é¿(H) vo.setYduration(String.format("%.2f", crnProtocol.getYDuration())); // åéæ¶é¿(H) vo.setTaskReceive(crnProtocol.getTaskReceive()); if (crnProtocol.getModeType().equals(CrnModeType.AUTO)) { src/main/java/com/zy/asrs/controller/DualCrnController.java
@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; @@ -63,13 +64,14 @@ vo.setWalkPos(p.getWalkPos() != null && p.getWalkPos() == 0 ? "å¨å®ä½" : "ä¸å¨å®ä½"); vo.setTaskReceive(p.getTaskReceive() != null && p.getTaskReceive() == 1 ? "æ¥æ¶" : "æ ä»»å¡"); vo.setTaskReceiveTwo(p.getTaskReceiveTwo() != null && p.getTaskReceiveTwo() == 1 ? "æ¥æ¶" : "æ ä»»å¡"); vo.setXspeed(p.getXSpeed()); vo.setYspeed(p.getYSpeed()); vo.setZspeed(p.getZSpeed()); vo.setXdistance(p.getXDistance()); vo.setYdistance(p.getYDistance()); vo.setXduration(p.getXDuration()); vo.setYduration(p.getYDuration()); vo.setXspeed(String.format("%.2f", p.getXSpeed())); vo.setYspeed(String.format("%.2f", p.getYSpeed())); vo.setZspeed(String.format("%.2f", p.getZSpeed())); vo.setXdistance(String.format("%.2f", p.getXDistance())); vo.setYdistance(String.format("%.2f", p.getYDistance())); vo.setXduration(String.format("%.2f", p.getXDuration())); vo.setYduration(String.format("%.2f", p.getYDuration())); vo.setWarnCode(p.getAlarm() == null ? "-" : String.valueOf(p.getAlarm())); if (p.getAlarm() != null && p.getAlarm() > 0) { vo.setDeviceStatus("ERROR"); src/main/java/com/zy/asrs/domain/vo/CrnStateTableVo.java
@@ -84,25 +84,25 @@ private String command = ""; // èµ°è¡é度ï¼m/min) private Double xspeed = 0D; private String xspeed = "-"; // åéé度ï¼m/min) private Double yspeed = 0D; private String yspeed = "-"; // åçé度ï¼m/min) private Double zspeed = 0D; private String zspeed = "-"; // èµ°è¡è·ç¦»(Km) private Double xdistance = 0D; private String xdistance = "-"; // åéè·ç¦»(Km) private Double ydistance = 0D; private String ydistance = "-"; // èµ°è¡æ¶é¿(H) private Double xduration = 0D; private String xduration = "-"; // åéæ¶é¿(H) private Double yduration = 0D; private String yduration = "-"; private Integer taskReceive; src/main/java/com/zy/asrs/domain/vo/DualCrnStateTableVo.java
@@ -39,19 +39,19 @@ private String walkPos = "-"; private Integer xspeed = 0; private String xspeed = "-"; private Integer yspeed = 0; private String yspeed = "-"; private Integer zspeed = 0; private String zspeed = "-"; private Integer xdistance = 0; private String xdistance = "-"; private Integer ydistance = 0; private String ydistance = "-"; private Integer xduration = 0; private String xduration = "-"; private Integer yduration = 0; private String yduration = "-"; private String deviceStatus = "OFFLINE"; } src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java
@@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.core.common.R; import com.core.common.SpringUtils; import com.zy.asrs.controller.CrnController; import com.zy.asrs.controller.RgvController; import com.zy.asrs.controller.BasMapController; import com.zy.asrs.controller.ConsoleController; import com.zy.asrs.controller.*; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -111,7 +108,7 @@ } else if ("/rgv/table/rgv/state".equals(url)) { resObj = SpringUtils.getBean(RgvController.class).rgvStateTable(); } else if ("/dualcrn/table/crn/state".equals(url)) { resObj = SpringUtils.getBean(com.zy.asrs.controller.DualCrnController.class).dualCrnStateTable(); resObj = SpringUtils.getBean(DualCrnController.class).dualCrnStateTable(); } } catch (Exception e) { R err = R.error(e.getMessage()); src/main/java/com/zy/core/enums/DualCrnStatusType.java
@@ -13,9 +13,8 @@ ORIGIN_GO(7, "ååç¹"), ORIGIN_BACK(8, "åååç¹"), MOVING(9, "èµ°è¡ä¸"), WAITING(90, "ä»»å¡å®æçå¾ WCS确认"), PAUSE(11, "任塿å"), SOS(99, "æ¥è¦"), WAITING(99, "ä»»å¡å®æçå¾ WCS确认"), SOS(98, "æ¥è¦"), UNKNOW(100, "å ¶ä»"), ; src/main/java/com/zy/core/enums/DualCrnTaskModeType.java
@@ -3,11 +3,11 @@ public enum DualCrnTaskModeType { NONE(0), // æ PICK(1), // åè´§ PUT(2), // æ¾è´§ PICK(11), // åè´§ PUT(12), // æ¾è´§ TRANSFER(3), // åæ¾è´§ MOVE(4), // ç§»å¨ CONFIRM(5), // 确认 CONFIRM(13), // 确认 ; public Integer id; src/main/java/com/zy/core/model/protocol/DualCrnProtocol.java
@@ -157,37 +157,37 @@ /** * Xè¡èµ°çº¿é度m/min */ private Integer xSpeed; private Double xSpeed; /** * Yè¡èµ°çº¿é度m/min */ private Integer ySpeed; private Double ySpeed; /** * Zè¡èµ°çº¿é度m/min */ private Integer zSpeed; private Double zSpeed; /** * å åæºç´¯è®¡èµ°è¡è·ç¦»km */ public Integer xDistance; public Double xDistance; /** * å åæºç´¯è®¡åéè·ç¦»km */ public Integer yDistance; public Double yDistance; /** * å åæºç´¯è®¡èµ°è¡æ¶é¿h */ public Integer xDuration; public Double xDuration; /** * å åæºç´¯è®¡åéæ¶é¿h */ public Integer yDuration; public Double yDuration; //è´§ç©ç±»å private Integer goodsType; src/main/java/com/zy/core/network/entity/ZyDualCrnStatusEntity.java
@@ -78,9 +78,19 @@ public Integer bay; /** * å åæºå½ååå· */ public Integer bayTwo; /** * å åæºå½åå±å· */ public Integer level; /** * å åæºå½åå±å· */ public Integer levelTwo; /** * å½å载货å°ä½ç½® @@ -97,39 +107,51 @@ public Integer walkPos; /** * èµ°è¡å¨å®ä½ * 0 = å¨å®ä½ * 1 = ä¸å¨å®ä½ */ public Integer walkPosTwo; /** * Xè¡èµ°çº¿é度m/min */ private Integer xSpeed; private Double xSpeed; /** * Yè¡èµ°çº¿é度m/min */ private Integer ySpeed; private Double ySpeed; /** * Zè¡èµ°çº¿é度m/min */ private Integer zSpeed; private Double zSpeed; /** * Zè¡èµ°çº¿é度m/min */ private Double zSpeedTwo; /** * å åæºç´¯è®¡èµ°è¡è·ç¦»km */ public Integer xDistance; public Double xDistance; /** * å åæºç´¯è®¡åéè·ç¦»km */ public Integer yDistance; public Double yDistance; /** * å åæºç´¯è®¡èµ°è¡æ¶é¿h */ public Integer xDuration; public Double xDuration; /** * å åæºç´¯è®¡åéæ¶é¿h */ public Integer yDuration; public Double yDuration; private Integer temp1; src/main/java/com/zy/core/network/real/ZyDualCrnRealConnect.java
@@ -58,7 +58,7 @@ @Override public ZyDualCrnStatusEntity getStatus() { try { OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 66); OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 70); if (result.IsSuccess) { ZyDualCrnStatusEntity crnStatus = new ZyDualCrnStatusEntity(); crnStatus.setCrnNo(deviceConfig.getDeviceNo()); @@ -67,37 +67,94 @@ //å·¥ä½1 crnStatus.setTaskNo((int) siemensNet.getByteTransform().TransInt16(result.Content, 2)); crnStatus.setStatus((int) siemensNet.getByteTransform().TransInt16(result.Content, 4)); crnStatus.setForkPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 6)); crnStatus.setLoaded((int) siemensNet.getByteTransform().TransInt16(result.Content, 8)); crnStatus.setTaskReceive((int) siemensNet.getByteTransform().TransInt16(result.Content, 10)); crnStatus.setBay((int) siemensNet.getByteTransform().TransInt16(result.Content, 6)); crnStatus.setLevel((int) siemensNet.getByteTransform().TransInt16(result.Content, 8)); crnStatus.setForkPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 10)); crnStatus.setLoaded((int) siemensNet.getByteTransform().TransInt16(result.Content, 12)); crnStatus.setTaskReceive((int) siemensNet.getByteTransform().TransInt16(result.Content, 14)); //å·¥ä½2 crnStatus.setTaskNoTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 12)); crnStatus.setStatusTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 14)); crnStatus.setForkPosTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 16)); crnStatus.setLoadedTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 18)); crnStatus.setTaskReceiveTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 20)); crnStatus.setTaskNoTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 16)); crnStatus.setStatusTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 18)); crnStatus.setBayTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 20)); crnStatus.setLevelTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 22)); crnStatus.setForkPosTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 24)); crnStatus.setLoadedTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 26)); crnStatus.setTaskReceiveTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 28)); crnStatus.setBay((int) siemensNet.getByteTransform().TransInt16(result.Content, 22)); crnStatus.setLevel((int) siemensNet.getByteTransform().TransInt16(result.Content, 24)); crnStatus.setLiftPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 26)); crnStatus.setWalkPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 28)); crnStatus.setAlarm((int) siemensNet.getByteTransform().TransInt16(result.Content, 30)); crnStatus.setTemp1((int) siemensNet.getByteTransform().TransInt16(result.Content, 34)); crnStatus.setTemp2((int) siemensNet.getByteTransform().TransInt16(result.Content, 36)); crnStatus.setTemp3((int) siemensNet.getByteTransform().TransInt16(result.Content, 38)); crnStatus.setTemp4((int) siemensNet.getByteTransform().TransInt16(result.Content, 40)); crnStatus.setXSpeed((int) siemensNet.getByteTransform().TransInt16(result.Content, 42)); crnStatus.setYSpeed((int) siemensNet.getByteTransform().TransInt16(result.Content, 44)); crnStatus.setZSpeed((int) siemensNet.getByteTransform().TransInt16(result.Content, 46)); crnStatus.setXDistance((int) siemensNet.getByteTransform().TransInt16(result.Content, 48)); crnStatus.setYDistance((int) siemensNet.getByteTransform().TransInt16(result.Content, 50)); crnStatus.setXDuration((int) siemensNet.getByteTransform().TransInt16(result.Content, 52)); crnStatus.setYDuration((int) siemensNet.getByteTransform().TransInt16(result.Content, 54)); crnStatus.setGoodsType((int) siemensNet.getByteTransform().TransInt16(result.Content, 56)); crnStatus.setWalkPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 30)); crnStatus.setWalkPosTwo((int) siemensNet.getByteTransform().TransInt16(result.Content, 32)); crnStatus.setLiftPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 34)); crnStatus.setAlarm((int) siemensNet.getByteTransform().TransInt16(result.Content, 36)); crnStatus.setXSpeed((double) siemensNet.getByteTransform().TransSingle(result.Content, 38)); crnStatus.setYSpeed((double) siemensNet.getByteTransform().TransSingle(result.Content, 42)); crnStatus.setZSpeed((double) siemensNet.getByteTransform().TransSingle(result.Content, 46)); crnStatus.setZSpeedTwo((double) siemensNet.getByteTransform().TransSingle(result.Content, 50)); crnStatus.setXDistance((double) siemensNet.getByteTransform().TransSingle(result.Content, 54)); crnStatus.setYDistance((double) siemensNet.getByteTransform().TransSingle(result.Content, 58)); crnStatus.setXDuration((double) siemensNet.getByteTransform().TransSingle(result.Content, 62)); crnStatus.setYDuration((double) siemensNet.getByteTransform().TransSingle(result.Content, 66)); String barcode = siemensNet.getByteTransform().TransString(result.Content, 58, 8, "UTF-8"); crnStatus.setBarcode(barcode); if (crnStatus.getStatus() == 0 && crnStatus.getTaskReceive() == 0) { OperateResultExOne<byte[]> taskResult = siemensNet.Read("DB100.0", (short) 18); if (taskResult.IsSuccess) { short taskNo = siemensNet.getByteTransform().TransInt16(taskResult.Content, 0); short taskMode = siemensNet.getByteTransform().TransInt16(taskResult.Content, 2); short sourcePosX = siemensNet.getByteTransform().TransInt16(taskResult.Content, 4); short sourcePosY = siemensNet.getByteTransform().TransInt16(taskResult.Content, 6); short sourcePosZ = siemensNet.getByteTransform().TransInt16(taskResult.Content, 8); short destinationPosX = siemensNet.getByteTransform().TransInt16(taskResult.Content, 10); short destinationPosY = siemensNet.getByteTransform().TransInt16(taskResult.Content, 12); short destinationPosZ = siemensNet.getByteTransform().TransInt16(taskResult.Content, 14); short confirm = siemensNet.getByteTransform().TransInt16(taskResult.Content, 16); if(taskNo != 0 || taskMode != 0 || sourcePosX != 0 || sourcePosY != 0 || sourcePosZ != 0 || destinationPosX != 0 || destinationPosY != 0 || destinationPosZ != 0 || confirm != 0) { short[] array = new short[10]; array[0] = (short) 0; array[1] = (short) 0; array[2] = (short) 0; array[3] = (short) 0; array[4] = (short) 0; array[5] = (short) 0; array[6] = (short) 0; array[7] = (short) 0; array[8] = (short) 0; array[9] = (short) 0; OperateResult taskClearResult = siemensNet.Write("DB100.0", array); } } } if (crnStatus.getStatusTwo() == 0 && crnStatus.getTaskReceiveTwo() == 0) { OperateResultExOne<byte[]> taskResult = siemensNet.Read("DB100.18", (short) 18); if (taskResult.IsSuccess) { short taskNo = siemensNet.getByteTransform().TransInt16(taskResult.Content, 0); short taskMode = siemensNet.getByteTransform().TransInt16(taskResult.Content, 2); short sourcePosX = siemensNet.getByteTransform().TransInt16(taskResult.Content, 4); short sourcePosY = siemensNet.getByteTransform().TransInt16(taskResult.Content, 6); short sourcePosZ = siemensNet.getByteTransform().TransInt16(taskResult.Content, 8); short destinationPosX = siemensNet.getByteTransform().TransInt16(taskResult.Content, 10); short destinationPosY = siemensNet.getByteTransform().TransInt16(taskResult.Content, 12); short destinationPosZ = siemensNet.getByteTransform().TransInt16(taskResult.Content, 14); short confirm = siemensNet.getByteTransform().TransInt16(taskResult.Content, 16); if(taskNo != 0 || taskMode != 0 || sourcePosX != 0 || sourcePosY != 0 || sourcePosZ != 0 || destinationPosX != 0 || destinationPosY != 0 || destinationPosZ != 0 || confirm != 0) { short[] array = new short[10]; array[0] = (short) 0; array[1] = (short) 0; array[2] = (short) 0; array[3] = (short) 0; array[4] = (short) 0; array[5] = (short) 0; array[6] = (short) 0; array[7] = (short) 0; array[8] = (short) 0; array[9] = (short) 0; OperateResult taskClearResult = siemensNet.Write("DB100.18", array); } } } return crnStatus; } else { OutputQueue.CRN.offer(MessageFormat.format("ã{0}ã读ååå·¥ä½å åæºplcç¶æä¿¡æ¯å¤±è´¥ ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort())); @@ -161,14 +218,14 @@ do { OperateResultExOne<byte[]> resultRead = siemensNet.Read(address, (short) 18); if (resultRead.IsSuccess) { short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2); short taskMode = siemensNet.getByteTransform().TransInt16(resultRead.Content, 4); short sourcePosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 6); short sourcePosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 8); short sourcePosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 10); short destinationPosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 12); short destinationPosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 14); short destinationPosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 16); short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0); short taskMode = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2); short sourcePosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 4); short sourcePosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 6); short sourcePosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 8); short destinationPosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 10); short destinationPosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 12); short destinationPosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 14); if (taskNo == 0 || taskMode == 0 || sourcePosX == 0 || sourcePosY == 0 || sourcePosZ == 0 || destinationPosX == 0 || destinationPosY == 0 || destinationPosZ == 0) { result = siemensNet.Write(address, array); } else { src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
@@ -251,13 +251,13 @@ crnProtocol.setLiftPosTwo(0); crnProtocol.setAlarm(0); crnProtocol.setXSpeed(0); crnProtocol.setYSpeed(0); crnProtocol.setZSpeed(0); crnProtocol.setXDistance(0); crnProtocol.setYDistance(0); crnProtocol.setXDuration(0); crnProtocol.setYDuration(0); crnProtocol.setXSpeed(0D); crnProtocol.setYSpeed(0D); crnProtocol.setZSpeed(0D); crnProtocol.setXDistance(0D); crnProtocol.setYDistance(0D); crnProtocol.setXDuration(0D); crnProtocol.setYDuration(0D); BasDualCrnpService basDualCrnpService = null; try { @@ -430,6 +430,9 @@ crnCommand.setCrnNo(crnNo); // å åæºç¼å· crnCommand.setTaskNo(taskNo); // å·¥ä½å· crnCommand.setTaskMode(DualCrnTaskModeType.PICK.id); // 任塿¨¡å¼: åè´§ crnCommand.setSourcePosX(Utils.getRow(targetLocNo)); // ç®æ åºä½æ crnCommand.setSourcePosY(Utils.getBay(targetLocNo)); // ç®æ åºä½å crnCommand.setSourcePosZ(Utils.getLev(targetLocNo)); // ç®æ åºä½å± crnCommand.setDestinationPosX(Utils.getRow(targetLocNo)); // ç®æ åºä½æ crnCommand.setDestinationPosY(Utils.getBay(targetLocNo)); // ç®æ åºä½å crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo)); // ç®æ åºä½å± @@ -444,6 +447,9 @@ crnCommand.setCrnNo(crnNo); // å åæºç¼å· crnCommand.setTaskNo(taskNo); // å·¥ä½å· crnCommand.setTaskMode(DualCrnTaskModeType.PUT.id); // 任塿¨¡å¼: æ¾è´§ crnCommand.setSourcePosX(Utils.getRow(targetLocNo)); // ç®æ åºä½æ crnCommand.setSourcePosY(Utils.getBay(targetLocNo)); // ç®æ åºä½å crnCommand.setSourcePosZ(Utils.getLev(targetLocNo)); // ç®æ åºä½å± crnCommand.setDestinationPosX(Utils.getRow(targetLocNo)); // ç®æ åºä½æ crnCommand.setDestinationPosY(Utils.getBay(targetLocNo)); // ç®æ åºä½å crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo)); // ç®æ åºä½å± @@ -458,6 +464,9 @@ crnCommand.setCrnNo(crnNo); // å åæºç¼å· crnCommand.setTaskNo(taskNo); // å·¥ä½å· crnCommand.setTaskMode(DualCrnTaskModeType.MOVE.id); // 任塿¨¡å¼: å åæºç§»å¨ crnCommand.setSourcePosX(Utils.getRow(targetLocNo)); // ç®æ åºä½æ crnCommand.setSourcePosY(Utils.getBay(targetLocNo)); // ç®æ åºä½å crnCommand.setSourcePosZ(Utils.getLev(targetLocNo)); // ç®æ åºä½å± crnCommand.setDestinationPosX(Utils.getRow(targetLocNo)); // ç®æ åºä½æ crnCommand.setDestinationPosY(Utils.getBay(targetLocNo)); // ç®æ åºä½å crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo)); // ç®æ åºä½å± src/main/resources/map/СËɵØÍ¼.xlsxBinary files differ