Pārlūkot izejas kodu

打印优化,称重异常提示

qzy 3 nedēļas atpakaļ
vecāks
revīzija
373a1f94ea

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 2 - 3
config.xml


+ 18 - 7
src/main/java/com/gzlh/api/OpenApi.java

@@ -6,6 +6,7 @@ import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.ReflectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import cn.hutool.json.JSON;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.gzlh.bus.EventDataManager;
@@ -84,22 +85,24 @@ public class OpenApi {
     @Resource
     private CaptureHandlerService captureHandlerService;
 
+
+
     @RequestMapping("testPrint")
     public String testSocket(String command) {
         BeiHaiWeightReport printBO = new BeiHaiWeightReport();
         printBO.setWWB_VLS_VCNNM("船名");
-        printBO.setWWB_VIW_VOYAGE("船次");
+        printBO.setWWB_VIW_VOYAGE("船次").setWWB_ID("1214");
         printBO.setWB_BILLNO("仓单号");
         printBO.setWWB_GOODSNAME("货名");
         printBO.setWWB_CST_OWNER("货主单位");
         printBO.setWWB_TRUCKNO("车号");
         printBO.setWWB_DATE_FST("一次过磅时间");
-        printBO.setWWB_CAR_GW("毛重");
-        printBO.setWWB_DATE_SEC("二次过磅时间");
+        printBO.setWWB_CAR_GW("10.65");
+        printBO.setWWB_DATE_SEC("2024:12:12 22:00:12");
         printBO.setWWB_CAR_WGT(16.3);
         printBO.setWWB_CAR_NW(10.2);
         printBO.setWWB_PLACE_CODE("地点");
-        printBO.setWWB_REMARK("备注");
+        printBO.setWWB_REMARK("备注").setTK_REMARK("客户备注").setWB_MARKERNO("唛头");
         ThreadUtil.execute(new JMPrintThread(printBO));
         return "ok";
     }
@@ -139,11 +142,17 @@ public class OpenApi {
         return AjaxJson.getSuccess();
     }
 
+    @RequestMapping("reqPrint")
+    public AjaxJson reqPrint(String carNo) {
+        EventDataManager.cacheData("carNo", carNo);
+        CacheManager.changeStatus(CacheManager.REQ_BTN_KEY,true);
+        eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.START_PRINT);
+        return AjaxJson.getSuccess();
+    }
+
     @RequestMapping("event")
     public AjaxJson event(String event) {
         log.info("事件=======:{}", event);
-        EventDataManager.cacheData("carNo", "桂A000");
-
         eventBus.startEvent(event);
         return AjaxJson.getSuccess();
     }
@@ -245,7 +254,9 @@ public class OpenApi {
                 .setWWB_TRUCKNO(weightReport.getWwbTruckno())
                 .setWWB_GTVOL(weightReport.getWwbGtvol())
                 .setWWB_PKSPAC(weightReport.getWwbPkspac())
-                .setWWB_CAR_WGT(weightReport.getWwbCarWgt());
+                .setWWB_ID(weightReport.getWwbId())
+                .setWWB_CAR_WGT(weightReport.getWwbCarWgt())
+                .setTK_REMARK(weightReport.getTkRemark());
         printBO.setTitle(title);
         printBO.setIp(ip);
         ThreadUtil.execute(new JMPrintThread(printBO));

+ 2 - 1
src/main/java/com/gzlh/device/plc/job/CheckStartWeightTask.java

@@ -23,6 +23,7 @@ public class CheckStartWeightTask extends Task {
     @Override
     public void run() {
         SerialSetting.PlcDTO.StatusDTO status = SysConfig.serialSetting.getPlc().getStatus();
+        EventBus eventBus = SpringUtil.getBean(EventBus.class);
         int count = 0;
         while (count <=10) {
             count++;
@@ -30,12 +31,12 @@ public class CheckStartWeightTask extends Task {
             //雷达
             String radarPoint = status.getRadarPoint();
             String radarPointStatus = plcStatus.charAt(Integer.parseInt(radarPoint)) + "";
-            EventBus eventBus = SpringUtil.getBean(EventBus.class);
             if (radarPointStatus.equals("1")&&CommonWeighbridgeHandler.hsCar) {
                 eventBus.startEvent(ModuleEnum.WEIGHBRIDGE_MODULE.getModuleEn() + "." + WeighbridgeEvent.READ);
                 return;
             }
             ThreadUtil.sleep(500);
         }
+        eventBus.startEvent(ModuleEnum.WEIGHBRIDGE_MODULE.getModuleEn() + "." + WeighbridgeEvent.FAIL);
     }
 }

+ 15 - 1
src/main/java/com/gzlh/device/print/bo/BeiHaiWeightReport.java

@@ -1,7 +1,6 @@
 package com.gzlh.device.print.bo;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.gzlh.cache.CacheManager;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -104,6 +103,11 @@ public class BeiHaiWeightReport {
     @JsonProperty("WWB_REMARK")
     private String WWB_REMARK = "";
     /**
+     * 客户备注
+     */
+    @JsonProperty("TK_REMARK")
+    private String TK_REMARK = "";
+    /**
      * 仓单号
      */
     @JsonProperty("WB_BILLNO")
@@ -123,4 +127,14 @@ public class BeiHaiWeightReport {
      */
     @JsonProperty("WWB_WGT")
     private String WWB_WGT;
+    /**
+     * 唛头
+     */
+    @JsonProperty("WB_MARKERNO")
+    private String WB_MARKERNO;
+    /**
+     * 操作类型
+     */
+    @JsonProperty("WWT_OP_TYPE")
+    private String WWT_OP_TYPE;
 }

+ 10 - 0
src/main/java/com/gzlh/device/print/bo/WeightReport.java

@@ -58,6 +58,16 @@ public class WeightReport {
     private String wwbTrailerno;
 
     private String wwbWgt;
+    /**
+     * 唛头
+     */
+    private String wbMarkern;
+    /**
+     * 操作类型
+     */
+    private String wwtOpType;
+
+    private String tkRemark="";
 
     private Integer wwbPkspac;
     private Integer businessType;

+ 35 - 0
src/main/java/com/gzlh/device/print/test/ImageImpl.java

@@ -0,0 +1,35 @@
+package com.gzlh.device.print.test;
+
+import cn.hutool.core.math.MathUtil;
+import cn.hutool.core.util.NumberUtil;
+import com.github.anastaciocintra.escpos.image.CoffeeImage;
+import com.github.anastaciocintra.escpos.image.CoffeeImageImpl;
+
+import java.awt.image.BufferedImage;
+
+public class ImageImpl implements CoffeeImage {
+
+    protected BufferedImage image;
+    public ImageImpl(BufferedImage image) {
+        this.image = image;
+    }
+    @Override
+    public int getWidth() {
+        return 0;
+    }
+
+    @Override
+    public int getHeight() {
+        return 0;
+    }
+
+    @Override
+    public CoffeeImage getSubimage(int x, int y, int w, int h) {
+        return new ImageImpl(image.getSubimage(x,y,w,h));
+    }
+
+    @Override
+    public int getRGB(int x, int y) {
+        return image.getRGB(x,y);
+    }
+}

+ 69 - 35
src/main/java/com/gzlh/device/print/test/JMPrintThread.java

@@ -1,7 +1,9 @@
 package com.gzlh.device.print.test;
 
 import cn.hutool.core.codec.Base64Decoder;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.thread.ThreadUtil;
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.json.JSONUtil;
@@ -16,6 +18,7 @@ import com.gzlh.device.led.factory.LedFactory;
 import com.gzlh.device.led.utils.LedOptions;
 import com.gzlh.device.print.bo.BeiHaiWeightReport;
 import com.gzlh.utils.EpsonCommands;
+import com.gzlh.utils.WordHandlerUtils;
 import lombok.extern.slf4j.Slf4j;
 
 import javax.imageio.ImageIO;
@@ -25,6 +28,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.net.Socket;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 
 /**
  * 映美打印机
@@ -41,43 +45,56 @@ public class JMPrintThread implements Runnable {
     @Override
     public void run() {
         try {
-            log.info("start print:{}",JSONUtil.toJsonStr(printBO));
+            log.info("start print:{}", JSONUtil.toJsonStr(printBO));
             SystemObject.printFactory.handler(SysConfig.serialSetting.getPrint().getBrand()).close();
-            Charset charset = Charset.forName("GBK");
-            String title = SysConfig.serialSetting.getPrint().getPrintTitle() + "\n";
+            Charset charset = Charset.forName("GB2312");
+            String title = "    "+SysConfig.serialSetting.getPrint().getPrintTitle() + "\n";
             TcpIpOutputStream tcpIpOutputStream = new TcpIpOutputStream(SysConfig.serialSetting.getPrint().getIp(), SysConfig.serialSetting.getPrint().getPort());
             EscPos escpos = new EscPos(tcpIpOutputStream);
-            escpos.setCharsetName("GB2312");
             ThreadUtil.sleep(2000);
             Bitonal algorithm = new BitonalThreshold(160);
             escpos.initializePrinter();
+            escpos.setCharsetName("GB2312");
+            byte[] zhFontSize = hexToBytes("1C2108");
+            byte[] titleData = EpsonCommands.mergerByteArray(
+                    hexToBytes("1B6101"),
+                    hexToBytes("1C210B"),
+                    title.getBytes(charset),
+                    hexToBytes("0D0A")
+            );
+            escpos.write(titleData, 0, titleData.length);
+            byte[] numberFontSize = hexToBytes("1B2110");
+            String text =
+                    "  货主/货代: " + printBO.getWWB_CST_OWNER() + " \n" +
+                            "  船名: " + printBO.getWWB_VLS_VCNNM() + "\n" +
+                            "  船次: " + printBO.getWWB_VIW_VOYAGE() + " \n" +
+                            "  唛头: " + printBO.getWB_MARKERNO() + " \n" +
+                            "  货名: " + printBO.getWWB_GOODSNAME() + "\n" +
+                            "  车号: " + printBO.getWWB_TRUCKNO() + "\n" +
+                            "  毛重: " + printBO.getWWB_CAR_GW() + "吨\n" +
+                            "  皮重: " + printBO.getWWB_CAR_WGT() + "吨\n" +
+                            "  净重: " + printBO.getWWB_CAR_NW() + "吨\n" +
+                            "  过磅地点: " + printBO.getWWB_PLACE_CODE() + "\n" +
+                            "  二次过磅时间: " + printBO.getWWB_DATE_SEC() + "\n" +
+                            "  客户备注: " + printBO.getTK_REMARK() + "\n" +
+                            "  地磅备注: " + printBO.getWWB_REMARK();
+            int len = text.length();
+            byte[] printData = new byte[]{};
+            for (int i = 0; i < len; i++) {
+                String at = text.charAt(i) + "";
+                byte[] atByte = at.getBytes(charset);
+                if (NumberUtil.isNumber(at)) {
+                    atByte=at.getBytes(StandardCharsets.UTF_8);
+                    printData = EpsonCommands.mergerByteArray(printData,numberFontSize, atByte);
+                } else {
+                    printData = EpsonCommands.mergerByteArray(printData,zhFontSize, atByte);
+                }
+            }
+           // byte[] str = text.getBytes(charset);
+            byte[] data = EpsonCommands.mergerByteArray(
+                    EpsonCommands.printLineHeight((byte) 30), EpsonCommands.alignLeft(),
+                    printData, EpsonCommands.printLineFeed((byte) 1));
 
-            Style titleStyle = new Style();
-            titleStyle.setBold(true);
-            titleStyle.setFontSize(Style.FontSize._1, Style.FontSize._1);
-            titleStyle.setJustification(EscPosConst.Justification.Center);
-
-            escpos.writeLF(titleStyle,title);
-//            escpos.write(titleData, 0, titleData.length);
-            String text = "船名: " + printBO.getWWB_VLS_VCNNM() + "\n" +
-                    "船次: " + printBO.getWWB_VIW_VOYAGE() + " \n" +
-                    "仓单号: " + printBO.getWB_BILLNO() + " \n" +
-                    "货名: " + printBO.getWWB_GOODSNAME() + " \n" +
-                    "货主单位: " + printBO.getWWB_CST_OWNER() + "\n" +
-                    "车号: " + printBO.getWWB_TRUCKNO() + "\n" +
-                    "一次过磅时间: " + printBO.getWWB_DATE_FST() + "\n" +
-                    "毛重: " + printBO.getWWB_CAR_GW() + "吨\n" +
-                    "二次过磅时间: " + printBO.getWWB_DATE_SEC() + "\n" +
-                    "皮重: " + printBO.getWWB_CAR_WGT() + "吨\n" +
-                    "净重: " + printBO.getWWB_CAR_NW() + "吨\n" +
-                    "件数/重量/体积: " + printBO.getWWB_PKSPAC() + "/" + printBO.getWWB_WGT() + "/" + printBO.getWWB_GTVOL() + "\n" +
-                    "地点: " + printBO.getWWB_PLACE_CODE() + "\n" +
-                    "备注: " + printBO.getWWB_REMARK();
-            byte[] str = text.getBytes(charset);
-            byte[] data = EpsonCommands.mergerByteArray(EpsonCommands.fontSizeSetBig(3),
-                    EpsonCommands.printLineHeight((byte) 40),
-                    EpsonCommands.emphasizedSetting(false), EpsonCommands.alignLeft(),
-                    str, EpsonCommands.printLineFeed((byte) 1));
             escpos.write(data, 0, data.length);
             String base64Img = SysConfig.serialSetting.getPrint().getChapter();
             if (StrUtil.isNotEmpty(base64Img)) {
@@ -85,24 +102,41 @@ public class JMPrintThread implements Runnable {
                         .read(new ByteArrayInputStream(Base64Decoder.decode(base64Img)));
                 EscPosImage escposImage = new EscPosImage(new CoffeeImageImpl(githubBufferedImage), algorithm);
                 BitImageWrapper imageWrapper = new BitImageWrapper();
-                imageWrapper.setMode(BitImageWrapper.BitImageMode._24DotDoubleDensity_Default);
+                imageWrapper.setMode(BitImageWrapper.BitImageMode._8DotSingleDensity);
                 escpos.write(imageWrapper, escposImage);
             }
-            escpos.feed(5);
-            escpos.cut(EscPos.CutMode.FULL);
+            byte[] footer = EpsonCommands.mergerByteArray(EpsonCommands.printLineFeed((byte) 1), EpsonCommands.feedPaperCut());
+            escpos.write(footer, 0, footer.length);
             escpos.close();
             log.info("print done======:{}", JSONUtil.toJsonStr(printBO));
-            LedFactory ledFactory= SpringUtil.getBean(LedFactory.class);
+            LedFactory ledFactory = SpringUtil.getBean(LedFactory.class);
             String line = SysConfig.serialSetting.getLed().getLine();
             if (StrUtil.isEmpty(line)) {
                 line = "03";
             }
             LedOptions options = new LedOptions().setLine(line);
-            ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg("已成功打印小票,请取走小票",options);
+            ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg("已成功打印小票,请取走小票", options);
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
 
     }
 
+    public static String printHex(byte[] bytes) {
+        StringBuilder sb = new StringBuilder();
+        for (byte b : bytes) {
+            sb.append(String.format("%02X", b));
+        }
+        return sb.toString().toUpperCase();
+    }
+
+    public static byte[] hexToBytes(String hex) {
+        int len = hex.length();
+        byte[] data = new byte[len / 2];
+        for (int i = 0; i < len; i += 2) {
+            data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
+                    + Character.digit(hex.charAt(i + 1), 16));
+        }
+        return data;
+    }
 }

+ 1 - 1
src/main/java/com/gzlh/device/weighbridge/event/WeighbridgeEvent.java

@@ -5,6 +5,6 @@ package com.gzlh.device.weighbridge.event;
  */
 public interface WeighbridgeEvent {
     String READ="READ";
-    String TIMEOUT="TIMEOUT";
+    String FAIL="FAIL";
     String POSITION_ERROR="POSITION_ERROR";
 }

+ 0 - 9
src/main/java/com/gzlh/device/weighbridge/task/CheckWeightTask.java

@@ -11,18 +11,9 @@ public class CheckWeightTask implements Runnable {
     @Override
     public void run() {
         if (!CommonWeighbridgeHandler.checkData()) {
-            LedOptions options = new LedOptions();
-            SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand())
-                    .sendMsg("地磅异常", options.setLine("01").setColor("01"));
             DeviceCache.changeDeviceStatus(ModuleEnum.WEIGHBRIDGE_MODULE.getModuleZh(), 0);
             return;
         }
         DeviceCache.changeDeviceStatus(ModuleEnum.WEIGHBRIDGE_MODULE.getModuleZh(), 1);
-        if (!CommonWeighbridgeHandler.hsCar){
-            LedOptions options = new LedOptions();
-            SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand())
-                    .sendMsg(SysConfig.channelSetting.getChannelName(), options.setLine("01").setColor("01"));
-        }
-
     }
 }

+ 2 - 2
src/main/java/com/gzlh/entity/ReqBO.java

@@ -136,8 +136,8 @@ public class ReqBO implements Serializable {
 
     public static void main(String[] args) {
         //内港
-        String placeCode = "DLP02";
-        String carNo = "桂N12345";
+        String placeCode = "DLPL01";
+        String carNo = "苏AD20403绿";
         Double weight = 25000D;
         ReqBO reqBO = new ReqBO();
         reqBO.setChannelCode(placeCode).setId("16122")

+ 1 - 0
src/main/java/com/gzlh/startup/StartupRunner.java

@@ -116,6 +116,7 @@ public class StartupRunner implements CommandLineRunner {
         SerialSetting serialSetting = SysConfig.serialSetting;
         if (serialSetting.getWeighbridge().getEnable()) {
             ThreadUtil.execute(() -> weighbridgeNettyConfig.connect());
+            scheduler.scheduleAtFixedRate(new SearchJob(), 5000, 15000, TimeUnit.MILLISECONDS);
         }
         if (serialSetting.getLed().getEnable()) {
             ThreadUtil.execute(() -> ledNettyConfig.connect());

+ 21 - 1
src/main/java/com/gzlh/utils/EpsonCommands.java

@@ -28,7 +28,7 @@ public class EpsonCommands {
     public static final byte CR = 13; // 归位键
     public static final byte FF = 12;// 走纸控制(打印并回到标准模式(在页模式下) )
     public static final byte CAN = 24; // 作废(页模式下取消打印数据 )
-
+    private static final byte EXCLAMATION = 0x21;  // ASCII 33
     /**
      * CodePage table
      */
@@ -389,6 +389,26 @@ public class EpsonCommands {
     public static final byte[] BARCODE_HEIGHT = {GS, 0x68, (byte) 0xA2};
 
     /**
+     * 设置字体大小
+     * @param widthMultiplier 宽度倍数(1-8)
+     * @param heightMultiplier 高度倍数(1-8)
+     * @return 字体大小设置指令
+     */
+    public static byte[] setFontSize(int widthMultiplier, int heightMultiplier) {
+        // 验证参数范围
+        if (widthMultiplier < 1 || widthMultiplier > 8 ||
+                heightMultiplier < 1 || heightMultiplier > 8) {
+            throw new IllegalArgumentException("倍数范围必须是1-8");
+        }
+
+        // 计算参数n
+        int n = ((heightMultiplier - 1) << 4) | (widthMultiplier - 1);
+
+        // 返回指令字节数组
+        return new byte[]{GS, EXCLAMATION, (byte) n};
+    }
+
+    /**
      * 初始化打印机
      *
      * @return bytes for this command

+ 0 - 6
src/main/java/com/gzlh/utils/WordHandlerUtils.java

@@ -169,12 +169,6 @@ public class WordHandlerUtils {
         return decryptStr;
     }
 
-    public static void main(String[] args) {
-        String str="{\"carImg\":\"http://10.34.33.253/LYZX003/2024/12/2/桂ABS961-2412021501.jpg\",\"carNo\":\"桂ABS961\",\"channelCode\":\"LYZX003\",\"direction\":1,\"eri\":\"\",\"gatherTime\":\"2024-12-02 15:01:36.139\",\"weight\":41060.0}";
-        //System.out.println(AESDecrypt("1CABC683A8F381F47EAC5AD5838C1FB7A08283BBC529298F8FF6DB44684C6AEC36C5973857E482E9A157D690D1E431C7F5EB6A48123212F497A9EA96ECC3D400A67B14BF646189CE131B924D9E860917A973B757327669946660D183B811B077B9C66F2C5738B2EEA668294F73AD2ECD"));
-        System.out.println(AESEncrypt(str));
-
-    }
 
 }
 

+ 0 - 43
src/main/resources/logback.xml

@@ -62,50 +62,7 @@
         </filter>
     </appender>
 
-    <appender name="COMM_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${LOG_PATH}/${APP_DIR}/comm_info.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_PATH}/${APP_DIR}/comm/comm_info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <maxFileSize>${log.maxFileSize}</maxFileSize>
-            <maxHistory>${log.maxFileCnt}</maxHistory>
-            <totalSizeCap>${log.totalSizeCap}</totalSizeCap>
-        </rollingPolicy>
-        <append>true</append>
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <pattern>%msg%n</pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>info</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
-    <logger name="com.cryann.hsms.driver.netty" additivity="false">
-        <appender-ref ref="COMM_LOG"/>
-    </logger>
 
-    <appender name="SXFX_info_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${LOG_PATH}/${APP_DIR}/SxFx_info.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_PATH}/${APP_DIR}/SxFx/SxFx_info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-            <maxFileSize>${log.maxFileSize}</maxFileSize>
-            <maxHistory>${log.maxFileCnt}</maxHistory>
-            <totalSizeCap>${log.totalSizeCap}</totalSizeCap>
-        </rollingPolicy>
-        <append>true</append>
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <pattern>%d{yyyy-MM-dd
-                HH:mm:ss.SSS}|%highlight(%-5level{10})[%boldYellow(%25.25thread{24})]%gray(%-50.50logger{49})|-Line:%boldYellow(%-3L):%msg%n
-            </pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>info</level>
-            <onMatch>ACCEPT</onMatch>
-            <onMismatch>DENY</onMismatch>
-        </filter>
-    </appender>
 
 
     <logger name="org.springframework" level="WARN"/>

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels