qzy 1 month ago
parent
commit
24ec61f008
41 changed files with 660 additions and 265 deletions
  1. 100 68
      config.xml
  2. 10 5
      pom.xml
  3. 10 0
      src/main/java/com/gzlh/api/OpenApi.java
  4. 4 1
      src/main/java/com/gzlh/bus/task/CheckState.java
  5. 3 2
      src/main/java/com/gzlh/bus/task/FinishTask.java
  6. 18 14
      src/main/java/com/gzlh/bus/thread/SubmitHarborPoleThread.java
  7. 2 2
      src/main/java/com/gzlh/cache/CacheManager.java
  8. 5 0
      src/main/java/com/gzlh/config/dto/SerialSetting.java
  9. 13 19
      src/main/java/com/gzlh/config/hksdk/AlarmParseService.java
  10. 3 1
      src/main/java/com/gzlh/config/hksdk/HkUtils.java
  11. 19 3
      src/main/java/com/gzlh/config/hksdk/bo/HKCacheManager.java
  12. 1 0
      src/main/java/com/gzlh/device/capture/bo/SetAlarmResult.java
  13. 4 3
      src/main/java/com/gzlh/device/capture/service/CaptureHandlerService.java
  14. 2 2
      src/main/java/com/gzlh/device/capture/task/CheckCaptureStatusTask.java
  15. 1 0
      src/main/java/com/gzlh/device/led/action/LedAction.java
  16. 5 0
      src/main/java/com/gzlh/device/led/handler/ILedHandler.java
  17. 7 5
      src/main/java/com/gzlh/device/led/handler/impl/LedCommonHandler.java
  18. 23 1
      src/main/java/com/gzlh/device/led/handler/impl/LedHandlerFengLiYuan.java
  19. 55 14
      src/main/java/com/gzlh/device/led/handler/impl/LedHandlerYangBandV4d2.java
  20. 35 0
      src/main/java/com/gzlh/device/led/tools/BxCmdClearScreen.java
  21. 38 0
      src/main/java/com/gzlh/device/led/tools/BxCmdCode.java
  22. 1 1
      src/main/java/com/gzlh/device/led/utils/LedOptions.java
  23. 1 0
      src/main/java/com/gzlh/device/plc/action/PLCAction.java
  24. 1 1
      src/main/java/com/gzlh/device/plc/client/PlcClientHandler.java
  25. 1 1
      src/main/java/com/gzlh/device/plc/client/PlcNettyConfig.java
  26. 3 2
      src/main/java/com/gzlh/device/plc/event/PLCEvent.java
  27. 11 17
      src/main/java/com/gzlh/device/plc/handler/CheckUpTask.java
  28. 27 27
      src/main/java/com/gzlh/device/plc/handler/PLCHadnler.java
  29. 2 8
      src/main/java/com/gzlh/device/plc/job/InitLedTask.java
  30. 57 14
      src/main/java/com/gzlh/device/plc/service/PLCService.java
  31. 1 1
      src/main/java/com/gzlh/device/print/bo/BeiHaiWeightReport.java
  32. 1 1
      src/main/java/com/gzlh/device/print/client/PrintClientHandler.java
  33. 1 1
      src/main/java/com/gzlh/device/print/client/PrintNettyConfig.java
  34. 26 4
      src/main/java/com/gzlh/device/print/handler/impl/PrintYingMeiHandler.java
  35. 5 0
      src/main/java/com/gzlh/device/print/test/ImageConstants.java
  36. 51 32
      src/main/java/com/gzlh/device/print/test/JMPrintThread.java
  37. 90 0
      src/main/java/com/gzlh/device/print/test/JMPrintThreadB.java
  38. 6 5
      src/main/java/com/gzlh/device/weighbridge/handler/impl/WeighbridgeHandlerTuoLiDuo.java
  39. 14 8
      src/main/java/com/gzlh/entity/ReqBO.java
  40. 2 2
      src/main/java/com/gzlh/startup/StartupRunner.java
  41. 1 0
      src/main/java/com/gzlh/utils/EpsonCommands.java

+ 100 - 68
config.xml

@@ -1,29 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
 <config>
     <managerSetting>
-        <enable>true</enable>
+        <enable>false</enable>
         <host>192.168.3.15</host>
         <beatPort>8010</beatPort>
         <serverUrl>http://127.0.0.1:9191</serverUrl>
     </managerSetting>
-    <socketSetting>
-        <host>127.0.0.1</host>
-        <port>8012</port>
-    </socketSetting>
     <!--通道属性配置-->
     <channelSetting>
         <!--本机IP-->
-        <ip>192.168.3.15</ip>
-        <placeCode>10FGDDF</placeCode>
-        <sourcePort>8090</sourcePort>
-        <channelName>行政通道出</channelName>
-        <channelCode>NA01</channelCode>
-        <ieFlag>I</ieFlag>
-        <twinChannelCode>C1000</twinChannelCode>
+        <ip>10.3.2.153</ip>
+        <channelName>3号地磅</channelName>
+        <channelCode>DLP01</channelCode>
+        <twinChannelCode></twinChannelCode>
         <!--共生通道地址-->
-        <twinService>http://127.0.0.1:9898</twinService>
-        <!--0 货运通道 1 行政通道 2 港内称重-3行人通道-->
-        <channelType>0</channelType>
+        <twinService></twinService>
+        <!--0 货运通道 1 行政通道 2 港内称重-->
+        <channelType>2</channelType>
         <!--车牌保存路径-->
         <fileRootPath>E:\\file</fileRootPath>
     </channelSetting>
@@ -43,7 +37,7 @@
         </faceList>
     </faceConfig>
     <passport>
-        <enable>false</enable>
+        <enable>true</enable>
         <host>127.0.0.1</host>
         <port>90</port>
         <brand>2000</brand>
@@ -63,40 +57,42 @@
     </qrcodeSetting>
     <sysConfig>
         <caputreSetting>
-            <enable>false</enable>
-            <host>10.26.6.91</host>
+            <enable>true</enable>
+            <brand>5000</brand>
+            <host>10.3.98.2</host>
             <port>8000</port>
             <username>admin</username>
-            <pwd>ABCabc123</pwd>
-            <brand>5000</brand>
+            <pwd>ABCabc124</pwd>
         </caputreSetting>
         <!--串口服务器地址-->
         <serialSetting>
-            <host>192.168.3.15</host>
+            <host>192.168.127.254</host>
             <weighbridge>
                 <enable>false</enable>
                 <port>4003</port>
                 <brand>3000</brand>
                 <minKg>1000</minKg>
                 <module>10</module>
+                <readTime>6000</readTime>
             </weighbridge>
             <led>
                 <enable>false</enable>
                 <port>4002</port>
-                <brand>2000</brand>
+                <brand>1000</brand>
                 <line>04</line>
             </led>
             <electron>
                 <enable>false</enable>
-                <port>4004</port>
-                <brand>3000</brand>
+                <port>4007</port>
+                <brand>4000</brand>
             </electron>
             <print>
-                <enable>false</enable>
-                <ip>192.168.3.15</ip>
+                <printTitle>北部湾港钦州码头有限公司货物过磅单</printTitle>
+                <enable>true</enable>
+                <ip>10.0.0.10</ip>
                 <port>9100</port>
                 <brand>1000</brand>
-                <printTitle>北部湾港北海码头铁山港作业区有限公司货物过磅单</printTitle>
+                <chapter>iVBORw0KGgoAAAANSUhEUgAAAJ0AAACdAQAAAACGXUd7AAAE10lEQVR42t3Wz2tcRRwA8FnWuBuMeYgiAde8QEtzKagINoGwE089Sa7eGmmx3loqwhPDzksj3S6KKXgpWMzRu4LXfdsVVkES600U87Yr2Uuhs1kwEzqZr/OdX7ub/gV1Idndz86beW/mO9/vEHj6JcizhjmJnkJBCKGnMdVYPIWSxMAJm8QcW6XRJKbYnyhOoCqYNzKBwl6Y03HU3waj3xymAINhE1RpHIvQWxYFCptjKCPoL0seQz6GItYt5UMKnI6QMxguHx8wkPEI9VXDsjjHQEUj3AL47XN+ju3jJ48l0cueezgDu9AKqCLRzl65v1o9YHlAGcv6z5Xfa/NXKGceBVtZbNy78Rk9D4J65LCw88fudXJhyd6TwS48v328+2Hy6Vv2ngy24G5do9r4GCBgG+62n/zNcnYGoO6xDreyIXZdxwYOI7h5Rc/ksZ5B3b9FFcOdA+wrnasx7pFefFBv4pddSoVDWSXZd2Z2+3RHMIuiNv1o0WAPHkjq8KTx1xsW04JyyMXW/JrBYV7QoxrsyoXqJYvybXDYU+fXXBDyP/E5EduqfMaH83v4VIid/AuP7bOsY7F+/2bf4Yvf07bFbbWgf4Z9/Vdp057FSK1va9jDJSw2HcbiLC4C/nAUYUhavBWDnd5/Y4f6wfC7+adXmHvsmDAx69oTBiWlmzZw9eSrosPaIvcI/AU9oYjs4nHAdFMaFGy66beSKhUcnphNbffXjURPPaIgOLCygb6uLB5+ctXsYxuaFrmauhyQv2pxoKZsS4zX9Ee9SIhyYS3g9jvg8LbtbUUP+NMcsyjeZ5hs9CsCnjkcfAWQoWEeeddiF1fVNNS9Hka2z54q2rREMAaoR72nJVoBQ0xfhwiHejUQ9dMOca0M+gyG80I9DsGOpC842nF4lLkEqG+3v+ewm5mnxMGh13eYV0z2wsEhH/jLV2IzEi7SPwmzyIlFbHlQ8ViAgP1Zh4OdMfSjH9+h9u6xT+ZQrFIzOmIuqHn2rnyZBWxl1E3y1w71W6fu1mhQjDEWKmblIo84PYrUTPKP/Wqum5Y2gzc9Pta7RRYgs2naID95rDeGLAE3ydMFmAl3nYExe3UCqsuYBE32ao1a4i5jZnvl1xwyXCRhN+KjNek2wl4bM5V57e57bJd8IVP3vnFIecVVJ5BTP9h9pCi/7nHQuiDc3my1/OWDwVWHcclXPOCH17jb75WXQsWsrrkkEPHE96lmLnVdYsk2QsXd2nE5ZLvDAuZNl4I6+3RUm6lLVm1oBlTUpbXeeBnXUWNT5URxd1lxAFJAlf2ip64PPn9ykIkiOuWkGyT2mVYwtaQIa0C6QmKfqCVTicEZdntHupQuqUq+Ja83YiJI5PO8igUpk5nG/AcafZmAWK6WSWW6ms4T2g1VBvuslqtklrBeqEfqIx105YRUCQv1SOd0RBONoXJ11ZyGafi1RuJQ47hakoQ2ml8mZDaUSLGRSPLaZqyHkaGYypWE6zudfRP6IpRdFZtIkgn0+aiUh0ORndtQ9P1qjjCEjcnrozODW7exMwMPZ6qxI4c9adgyEVD5UM7GzzabDovjmNlokhOnILsD/ZtD1yRlEwczMnYSC5jhXeelSTRL7c+FHhUhG6Rw+qyYu0w7gcrmpVPnT0We4cPz/xv/A2ArIshUwV9iAAAAAElFTkSuQmCC</chapter>
             </print>
             <plc>
                 <enable>false</enable>
@@ -107,8 +103,6 @@
                     <downGatePoint>01</downGatePoint>
                     <signalRedPoint>02</signalRedPoint>
                     <signalGreenPoint>03</signalGreenPoint>
-                    <limitSuccessPoint>05</limitSuccessPoint>
-                    <limitFailPoint>06</limitFailPoint>
                 </out>
                 <!--状态信号-->
                 <status>
@@ -118,6 +112,7 @@
                     <downPoint>1</downPoint>
                     <!--雷达-->
                     <radarPoint>2</radarPoint>
+                    <infraredMode>-1</infraredMode>
                     <!--前红外-->
                     <fRedPoint>3</fRedPoint>
                     <!--后红外-->
@@ -128,6 +123,7 @@
                     <testPrint>6</testPrint>
                     <!--取消榜单,不发送数据第三方-->
                     <cancelPrint>7</cancelPrint>
+                    <radiation>8</radiation>
                 </status>
             </plc>
         </serialSetting>
@@ -138,83 +134,119 @@
             <!--通道重置-->
             <name>PLC.IDLE</name>
             <actionList>
-                <action>LED.LED_SHOW_CONTENT(01| )</action>
-                <action>LED.LED_SHOW_CONTENT(02| )</action>
-                <action>LED.LED_SHOW_CONTENT(03| )</action>
-                <action>LED.LED_SHOW_CONTENT(04| )</action>
-            </actionList>
-        </event>
-        <event>
-            <!--行政通道 识别到车牌-->
-            <name>CAPTURE.CAPTURE_CAR_NO</name>
-            <actionList>
-                <action>CENTER.SUBMIT_81_SOCKET</action>
+                <action>CENTER.FINISH_WEIGHT</action>
+                <action>CENTER.TIMER_SLEEP(200)</action>
+                <action>WEIGHBRIDGE.CLEAN</action>
+                <action>CENTER.TIMER_SLEEP(100)</action>
+                <action>PLC.RED_LIGHT_OFF</action>
+                <action>CENTER.TIMER_SLEEP(300)</action>
+                <action>PLC.GREEN_LIGHT_ON</action>
+                <action>PLC.RAILING_RISE_OFF</action>
+                <action>PLC.BTN_DISABLE</action>
+                <action>LED.INIT</action>
             </actionList>
         </event>
+
+
         <event>
             <name>WEIGHBRIDGE.READ</name>
             <!--动作格式 模块.命令-->
             <actionList>
+                <action>LED.LED_SHOW_CONTENT(03|称重中,请停车)</action>
                 <action>CENTER.TIMER_SLEEP(1000)</action>
-                <action>LED.LED_SHOW_CONTENT(03|停车称重)</action>
-                <action>CENTER.TIMER_SLEEP(3000)</action>
                 <action>WEIGHBRIDGE.START_READ</action>
-                <action>CENTER.TIMER_SLEEP(5000)</action>
-                <action>LED.LED_SHOW_CONTENT(${weight})</action>
-                <action>CENTER.TIMER_SLEEP(200)</action>
+                <action>CENTER.TIMER_SLEEP(6500)</action>
+                <action>LED.LED_SHOW_CONTENT(02|${weight})</action>
                 <action>CENTER.SUBMIT_HARBORPOLE</action>
             </actionList>
         </event>
+
         <event>
-            <!--通过校验,抬杆-->
-            <name>PLC.RAILING_RISE</name>
+            <!--识别到车牌-->
+            <name>CAPTURE.CAPTURE_CAR_NO</name>
             <actionList>
-                <action>PLC.RAILING_RISE_ON</action>
-                <action>VOICE.SAY</action>
+                <action>LED.LED_SHOW_CONTENT(02|${platNo})</action>
+            </actionList>
+        </event>
+        <event>
+            <!--识别到电子车牌,请求校验是否有预约-->
+            <name>ELECTRON.RFID_READ</name>
+            <actionList>
+                <action>ELECTRON.FIND_CAR_NO_BY_RFID</action>
             </actionList>
         </event>
         <event>
-            <name>FACE.FACE_RESULT_SUCCESS</name>
+            <!--车辆进入通道-->
+            <name>PLC.CAR_ENTER</name>
             <actionList>
+                <action>PLC.GREEN_LIGHT_OFF</action>
                 <action>CENTER.TIMER_SLEEP(1000)</action>
-                <action>FACE.SUB_MIT_TO_SERVER</action>
-                <action>LED.LED_SHOW_CONTENT(03|人员已备案|01)</action>
+                <action>PLC.RED_LIGHT_ON</action>
+            </actionList>
+        </event>
+        <event>
+            <!--通过校验,抬杆-->
+            <name>PLC.RAILING_RISE</name>
+            <actionList>
                 <action>PLC.RAILING_RISE_ON</action>
-                <action>CENTER.TIMER_SLEEP(5000)</action>
-                <action>LED.LED_SHOW_CONTENT(03|请进行人脸核验)</action>
-                <action>LED.LED_SHOW_CONTENT(02|${platNo})</action>
+                <action>CENTER.TIMER_SLEEP(3000)</action>
+                <action>PLC.RAILING_RISE_OFF</action>
             </actionList>
         </event>
         <event>
             <!--通过校验,继电器1断开闭合-->
             <name>PLC.UP_POINT_READ</name>
             <actionList>
-                <action>CENTER.TIMER_SLEEP(5000)</action>
+                <action>CENTER.TIMER_SLEEP(3000)</action>
                 <action>PLC.RAILING_RISE_OFF</action>
             </actionList>
         </event>
+        <!--通道关闭-->
         <event>
-            <name>FACE.FACE_RESULT_DETECT</name>
+            <name>PLC.SHUTDOWN</name>
             <actionList>
-                <action>CENTER.TIMER_SLEEP(1000)</action>
-                <action>FACE.SUB_MIT_TO_SERVER</action>
-                <action>CENTER.TIMER_SLEEP(200)</action>
-                <action>LED.LED_SHOW_CONTENT(03|人员未备案|01)</action>
-                <action>CENTER.TIMER_SLEEP(8000)</action>
-                <action>LED.LED_SHOW_CONTENT(03|请进行人脸核验)</action>
-                <action>LED.LED_SHOW_CONTENT(02|${platNo})</action>
+                <action>PLC.GREEN_LIGHT_OFF</action>
+                <action>CENTER.TIMER_SLEEP(100)</action>
+                <action>PLC.RED_LIGHT_ON</action>
+                <action>LED.LED_SHOW_CONTENT(03|地磅停止使用)</action>
+                <action>PLC.RAILING_RISE_ON</action>
             </actionList>
         </event>
         <event>
-            <name>PASSPORT.OCR_RESULT</name>
+            <!--按了打印榜单按钮-->
+            <name>PLC.START_PRINT</name>
             <actionList>
-                <action>PASSPORT.UPLOAD_LIMIT_CHECK</action>
+                <action>PLC.REQ_PRINT</action>
+                <action>LED.LED_SHOW_CONTENT(03|正在打印磅单小票中,请稍等)</action>
             </actionList>
         </event>
+
         <event>
-            <name>PASSPORT.OCR_ID_CARD_RESULT</name>
+            <!--按了取消榜单按钮-->
+            <name>PLC.CANCEL_PRINT</name>
             <actionList>
-                <action>PASSPORT.UPLOAD_LIMIT_CHECK_ID_CARD</action>
+                <action>PLC.CANCEL_PRINT</action>
+                <action>PLC.RAILING_RISE_ON</action>
+                <action>CENTER.TIMER_SLEEP(3000)</action>
+                <action>PLC.RAILING_RISE_OFF</action>
+            </actionList>
+        </event>
+        <event>
+            <!--按了确认榜单按钮-->
+            <name>PLC.TEST_PRINT</name>
+            <actionList>
+                <action>PLC.TEST_PRINT</action>
+                <action>LED.LED_SHOW_CONTENT(03|正在保存过磅记录,请稍等)</action>
+            </actionList>
+        </event>
+        <event>
+            <name>PLC.GATE_DOWN</name>
+            <actionList>
+                <action>PLC.RAILING_RISE_OFF</action>
+                <action>CENTER.TIMER_SLEEP(300)</action>
+                <action>PLC.GATE_DOWN</action>
+                <action>CENTER.TIMER_SLEEP(2000)</action>
+                <action>PLC.RELEASE_GATE_DOWN</action>
             </actionList>
         </event>
     </eventList>

+ 10 - 5
pom.xml

@@ -17,6 +17,7 @@
         <java.version>8</java.version>
         <java.run.main.class>com.gzlh.GatherServerApplication</java.run.main.class>
         <classfinal.version>1.2.1</classfinal.version>
+        <escpos-coffee.version>4.1.0</escpos-coffee.version>
     </properties>
     <dependencies>
         <dependency>
@@ -79,7 +80,11 @@
             <artifactId>artemis-http-client</artifactId>
             <version>1.1.3</version>
         </dependency>
-
+        <dependency>
+            <groupId>com.github.anastaciocintra</groupId>
+            <artifactId>escpos-coffee</artifactId>
+            <version>${escpos-coffee.version}</version>
+        </dependency>
     </dependencies>
 
 
@@ -165,15 +170,15 @@
                     <!--联运中心-->
 <!--                    <code>D72E7F75D4CDEEFAD7AC77891557F586D41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</code>-->
                     <!--北海无人地磅-->
-                    <code>AE135DDFE7E3871BE848301327CA8E2ED41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</code>
+<!--                    <code>AE135DDFE7E3871BE848301327CA8E2ED41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</code>-->
                     <!--南京-->
 <!--                    <code>A4CFD53BE12CC512727611ACFC1EE05ED41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</code>-->
                     <!--限定区域-->
 <!--                    <code>C41BF0CE8FF4E89D45E95A3AFB46E2E9D41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</code>-->
                     <!--联运中心无人地磅-->
-<!--                    <code>-->
-<!--                        C8B3CC11C158AD38AE69D6DB58E99BF8D41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E-->
-<!--                    </code>-->
+                    <code>
+                        C8B3CC11C158AD38AE69D6DB58E99BF8D41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E
+                    </code>
                     <packages>com.gzlh</packages> <!--可以多个-->
                     <!--                    <cfgfiles>application.yml</cfgfiles>-->
                     <excludes>org.spring</excludes>

+ 10 - 0
src/main/java/com/gzlh/api/OpenApi.java

@@ -74,6 +74,11 @@ public class OpenApi {
 
     @Resource
     private PLCHadnler plcHadnler;
+    @Resource
+    private HkUtils hkUtils;
+
+    @Resource
+    private HCNetSDK hcNetSDK;
 
 
     @Resource
@@ -143,6 +148,7 @@ public class OpenApi {
         return AjaxJson.getSuccess();
     }
 
+
     @RequestMapping("say")
     public AjaxJson say(String msg) {
         SystemObject.voiceFactory.handler(SysConfig.voiceSetting.getBrand()).weekUp();
@@ -222,6 +228,7 @@ public class OpenApi {
         title = title + "\n";
         String ip = SysConfig.serialSetting.getPrint().getIp();
         BeiHaiWeightReport printBO = new BeiHaiWeightReport();
+        log.info("start print:{}", JSONUtil.toJsonStr(weightReport));
         printBO.setWWB_DATE_FST(weightReport.getWwbDateFst())
                 .setWWB_DATE_SEC(weightReport.getWwbDateSec())
                 .setWWB_VLS_VCNNM(weightReport.getWwbVlsVcnnm())
@@ -343,6 +350,9 @@ public class OpenApi {
 
     @RequestMapping("shutdown")
     public ResultJson shutdown() {
+        boolean NET_DVR_CloseAlarmChan = hkUtils.NET_DVR_CloseAlarmChan(hcNetSDK, HKCacheManager.getLHandle(ModuleEnum.CAPTURE_MODULE));
+        boolean logout = hkUtils.NET_DVR_Logout(hcNetSDK, HKCacheManager.getUserId(ModuleEnum.CAPTURE_MODULE));
+        log.info("logout,{}:{}", NET_DVR_CloseAlarmChan, logout);
         return ResultJson.success();
     }
 

+ 4 - 1
src/main/java/com/gzlh/bus/task/CheckState.java

@@ -36,12 +36,15 @@ public class CheckState {
             String resp = HttpUtil.get(api);
             JSONObject result = JSONUtil.parseObj(resp);
             Integer state = result.getInt("state");
+            if (state == null) {
+                return;
+            }
             Integer cacheState = ChannelCacheManager.getStateMap(channelCode);
             ChannelCacheManager.setStateMap(channelCode, state);
             if (!state.equals(cacheState)) {
                 handlerChannel(state);
             }
-           // log.info("enable:{}",ChannelCacheManager.stateEnable(channelCode));
+            // log.info("enable:{}",ChannelCacheManager.stateEnable(channelCode));
         } catch (Exception e) {
             log.error("resp:{}", e.getMessage());
         }

+ 3 - 2
src/main/java/com/gzlh/bus/task/FinishTask.java

@@ -13,10 +13,11 @@ public class FinishTask implements Runnable {
     @Override
     public void run() {
         ReqBO reqBO = EventDataManager.getCacheData();
-        if (reqBO == null || StrUtil.isEmpty(reqBO.getId())) {
+        log.info("车辆离开:{}", JSONUtil.toJsonStr(reqBO));
+        if (StrUtil.isEmpty(reqBO.getId())) {
             return;
         }
-        String api = SysConfig.managerSetting.getServerUrl() + "/open/finishWeight?id=" + reqBO.getId();
+        String api = SysConfig.managerSetting.getServerUrl() + "/open/finishWeight?id=" + reqBO.getId() + "&channelCode=" + SysConfig.channelSetting.getChannelCode();
         String resp = HttpUtil.get(api);
         log.info("车辆离开完成过磅:{}", resp);
     }

+ 18 - 14
src/main/java/com/gzlh/bus/thread/SubmitHarborPoleThread.java

@@ -14,6 +14,7 @@ import com.gzlh.cache.CacheManager;
 import com.gzlh.cache.SubmitCache;
 import com.gzlh.config.ModuleEnum;
 import com.gzlh.config.SystemObject;
+import com.gzlh.config.dto.SerialSetting;
 import com.gzlh.device.led.utils.LedOptions;
 import com.gzlh.device.plc.event.PLCEvent;
 import com.gzlh.entity.CommandBO;
@@ -28,9 +29,9 @@ import java.util.Date;
 public class SubmitHarborPoleThread implements Runnable {
     @Override
     public void run() {
-        CacheManager.changeStatus(CacheManager.CANCEL_BTN_KEY, true);
-        CacheManager.changeStatus(CacheManager.REQ_BTN_KEY, true);
-        CacheManager.changeStatus(CacheManager.TEST_BTN_KEY, true);
+        CacheManager.changeStatus(CacheManager.CANCEL_BTN_KEY, false);
+        CacheManager.changeStatus(CacheManager.REQ_BTN_KEY, false);
+        CacheManager.changeStatus(CacheManager.TEST_BTN_KEY, false);
         String api = SysConfig.managerSetting.getServerUrl() + "/open/submitHarborPole";
         ReqBO reqBO = EventDataManager.getCacheData();
         if (!ChannelCacheManager.stateEnable(SysConfig.channelSetting.getChannelCode())) {
@@ -51,7 +52,11 @@ public class SubmitHarborPoleThread implements Runnable {
             log.error("识别不到车辆信息,请联系司磅员");
             return;
         }
-        reqBO.setGatherTime(new Date());
+        SerialSetting.PlcDTO.StatusDTO status = SysConfig.serialSetting.getPlc().getStatus();
+        String radiation = status.getRadiation();
+        String plcStatus = DeviceCache.getPlcStatus();
+        String radiationStatus = StrUtil.isEmpty(radiation) || StrUtil.isEmpty(plcStatus) ? "0" : plcStatus.charAt(Integer.parseInt(radiation)) + "";
+        reqBO.setRadiation(radiationStatus);
         String bodyParams = JSONUtil.toJsonStr(reqBO);
         SubmitCache.addCache(subKey);
         log.info("Req:{}", bodyParams);
@@ -59,6 +64,7 @@ public class SubmitHarborPoleThread implements Runnable {
         try (HttpResponse response = HttpUtil.createPost(api).body(WordHandlerUtils.AESEncrypt(bodyParams)).execute()) {
             log.info("提交港内地磅数据-返回结果:{}", response.body());
             if (response.getStatus() == 200) {
+
                 String body = response.body();
                 JSONObject jsonObject = JSONUtil.parseObj(body);
                 int code = jsonObject.getInt("code");
@@ -68,22 +74,21 @@ public class SubmitHarborPoleThread implements Runnable {
                 String data = WordHandlerUtils.AESDecrypt(jsonObject.get("data").toString());
                 log.info("data:{}", data);
                 CommandBO commandBO = JSONUtil.toBean(data, CommandBO.class);
+                String msg = commandBO.getCommand().getExtra();
                 if (code == 200) {
-                    CacheManager.changeStatus(CacheManager.TEST_BTN_KEY, false);
+                    if (StrUtil.contains(msg, "二")) {
+                        CacheManager.changeStatus(CacheManager.REQ_BTN_KEY, true);
+                    }
                     log.info("抬杆放行============");
                     eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.RAILING_RISE);
                     if (ModuleEnum.LED_MODULE.getModuleEn().equalsIgnoreCase(commandBO.getCommand().getModule())) {
                         SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand())
-                                .sendMsg(commandBO.getCommand().getExtra(), options);
+                                .sendMsg(msg, options);
                     }
                     CacheManager.setSleep(reqBO.getCarNo());
                 } else {
-                    String msg = commandBO.getCommand().getExtra();
-                    if (code == 300) {
-                        //300标识五预约信息   禁用打印榜单和取消打印榜单按钮
-                        CacheManager.changeStatus(CacheManager.CANCEL_BTN_KEY, false);
-                        CacheManager.changeStatus(CacheManager.REQ_BTN_KEY, false);
-                    }
+                    CacheManager.changeStatus(CacheManager.CANCEL_BTN_KEY, true);
+                    CacheManager.changeStatus(CacheManager.TEST_BTN_KEY, true);
                     if (ModuleEnum.LED_MODULE.getModuleEn().equalsIgnoreCase(commandBO.getCommand().getModule())) {
                         if (StrUtil.isNotEmpty(msg)) {
                             SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand())
@@ -95,8 +100,7 @@ public class SubmitHarborPoleThread implements Runnable {
                 eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.SUBMIT_TIMEOUT);
             }
         }
-//        重置记录的设备触发时间
-        DeviceCache.resetTimeMap();
+
     }
 
 

+ 2 - 2
src/main/java/com/gzlh/cache/CacheManager.java

@@ -11,7 +11,7 @@ public class CacheManager {
     public static final String REQ_BTN_KEY = "req_btn";
     public static final String CANCEL_BTN_KEY = "cancel_btn";
     public static final String SLEEP_BTN_KEY = "sleep_btn";
-    private static final TimedCache<String, Boolean> CACHE_MAP = CacheUtil.newTimedCache(5000);
+    private static final TimedCache<String, Boolean> CACHE_MAP = CacheUtil.newTimedCache(30000);
     private static final TimedCache<String, Boolean> SLEEP_5000 = CacheUtil.newTimedCache(30000);
 
 
@@ -20,7 +20,7 @@ public class CacheManager {
     }
 
     public static boolean isSleep(String carNo) {
-       return SLEEP_5000.get(carNo,false)!=null&& SLEEP_5000.get(carNo,false);
+        return SLEEP_5000.get(carNo, false) != null && SLEEP_5000.get(carNo, false);
     }
 
     /**

+ 5 - 0
src/main/java/com/gzlh/config/dto/SerialSetting.java

@@ -33,6 +33,7 @@ public class SerialSetting implements Serializable {
         private String ip;
         private int port;
         private Integer brand;
+        private String chapter;
     }
 
     @Data
@@ -114,6 +115,10 @@ public class SerialSetting implements Serializable {
             private String printWeight;
             private String testPrint;
             private String cancelPrint;
+            /**
+             * 辐射
+             */
+            private String radiation;
 
             private String limitSuccessPoint;
             private String limitFailPoint;

+ 13 - 19
src/main/java/com/gzlh/config/hksdk/AlarmParseService.java

@@ -46,11 +46,9 @@ import java.util.Date;
 public class AlarmParseService {
 
     @Resource
-    TaskService taskService;
-    @Resource
     private FaceService faceService;
 
-    public static final TimedCache<String, Integer> CACHE_MAP = CacheUtil.newTimedCache(10000);
+    public static final TimedCache<String, Integer> CACHE_MAP = CacheUtil.newTimedCache(40000);
 
 
     public void alarmDataHandle(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
@@ -102,35 +100,31 @@ public class AlarmParseService {
                     log.error("重复识别--------------------:{}", sLicense);
                     return;
                 }
-                ReqBO reqBO = EventDataManager.getCacheData();
-                if ((StrUtil.isNotEmpty(reqBO.getCarNo())
-                        && !StrUtil.equals(reqBO.getCarNo(), sLicense))
-                        && CommonWeighbridgeHandler.hsCar) {
-                    //中断
-                    log.error("已经有车牌,又有车进来===>跟车:now car {},flow car {}", reqBO.getCarNo(), sLicense);
-                    return;
-                }
-                CACHE_MAP.put(sLicense, 1);
             } catch (UnsupportedEncodingException e) {
                 log.error("上传车牌为空:{}", e.getMessage());
             }
 //            int color = strItsPlateResult.struPlateInfo.byColor;
 //            byte VehicleType = strItsPlateResult.byVehicleType;  //0-其他车辆,1-小型车,2-大型车,3- 行人触发,4- 二轮车触发,5- 三轮车触发,6- 机动车触发
-            log.info("车牌号:{}", sLicense);
             sLicense = StrUtil
                     .trim(StrUtil.sub(sLicense, 1, -1))
                     .replace("车牌", "");
+            log.info("车牌号:{}", sLicense);
+            ReqBO reqBO = EventDataManager.getCacheData();
+            if ((StrUtil.isNotEmpty(reqBO.getCarNo())
+                    && !StrUtil.equals(reqBO.getCarNo(), sLicense))
+                    && CommonWeighbridgeHandler.hsCar) {
+                //中断
+                log.error("已经有车牌,又有车进来===>跟车:now car {},flow car {}", reqBO.getCarNo(), sLicense);
+                return;
+            }
+            CACHE_MAP.put(sLicense, 1);
             Date nowTime = new Date();
-//            ThreadUtil.execute(new ElectronReadJob());
-
+            EventDataManager.cacheData("gatherTime", nowTime);
             /**
              * 报警图片保存,车牌,车辆图片
              */
-            log.info("strItsPlateResult.struPicInfo.length:{}", strItsPlateResult.struPicInfo.length);
-            log.info("strItsPlateResult.dwPicNum:{}", strItsPlateResult.dwPicNum);
             if (strItsPlateResult.struPicInfo.length > 0) {
                 HCNetSDK.NET_ITS_PICTURE_INFO net_its_picture_info = strItsPlateResult.struPicInfo[0];
-                log.info("net_its_picture_info.dwDataLen:{}", net_its_picture_info.dwDataLen);
                 if (net_its_picture_info.dwDataLen > 0) {
                     String newName = DateUtil.format(nowTime, "yyMMddHHmm");
                     FileOutputStream fout = null;
@@ -171,7 +165,7 @@ public class AlarmParseService {
                         if (channelType == 0 || channelType == 2) {
                             EventDataManager.cacheData("carImg", httpUrl);
                             EventDataManager.cacheData("carNo", sLicense);
-                            EventDataManager.cacheData("gatherTime", new Date());
+
                             eventBus.startEvent(ModuleEnum.CAPTURE_MODULE.getModuleEn() + "." + CaptureEvent.CAPTURE_CAR_NO);
                         } else {
                             CarCache.handlerCarCache(sLicense, httpUrl);

+ 3 - 1
src/main/java/com/gzlh/config/hksdk/HkUtils.java

@@ -49,7 +49,9 @@ public class HkUtils {
     public  boolean NET_DVR_Logout(HCNetSDK hCNetSDK,int lUserID){
        return hCNetSDK.NET_DVR_Logout(lUserID);
     }
-
+   public boolean NET_DVR_CloseAlarmChan(HCNetSDK hCNetSDK,int lAlarmHandle){
+        return hCNetSDK.NET_DVR_CloseAlarmChan(lAlarmHandle);
+    }
     static int[] lAlarmHandle = new int[]{-1, -1, -1, -1, -1};//报警布防句柄
 
     /**

+ 19 - 3
src/main/java/com/gzlh/config/hksdk/bo/HKCacheManager.java

@@ -2,6 +2,7 @@ package com.gzlh.config.hksdk.bo;
 
 import cn.hutool.core.util.StrUtil;
 import com.gzlh.config.ModuleEnum;
+import com.gzlh.device.capture.bo.SetAlarmResult;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -22,18 +23,26 @@ public class HKCacheManager {
      * @param module 类型
      * @param userId 登录设备返回的userId
      */
-    public static void add(ModuleEnum module,int userId){
+    public static void add(ModuleEnum module, SetAlarmResult alarmResult){
        Optional<DeviceType>deviceTypeOptional= DEVICE_TYPES.stream()
                .filter(deviceType -> StrUtil.equals(deviceType.getModule(), module.getModuleEn()))
                 .findAny();
         if (deviceTypeOptional.isPresent()) {
-            deviceTypeOptional.get().setUserId(userId);
+            deviceTypeOptional.get().setUserId(alarmResult.getUserId()).setLHandle(alarmResult.getLHandle());
         }else {
             DeviceType deviceType=new DeviceType();
-            deviceType.setUserId(userId).setModule(module.getModuleEn());
+            deviceType.setUserId(alarmResult.getUserId())
+                    .setLHandle(alarmResult.getLHandle())
+                    .setModule(module.getModuleEn());
             DEVICE_TYPES.add(deviceType);
         }
     }
+    public static void clean(ModuleEnum module){
+       Optional<DeviceType>deviceTypeOptional= DEVICE_TYPES.stream()
+               .filter(deviceType -> StrUtil.equals(deviceType.getModule(), module.getModuleEn()))
+                .findAny();
+        deviceTypeOptional.ifPresent(deviceType -> deviceType.setUserId(-1).setLHandle(-1));
+    }
 
     public static int getUserId(ModuleEnum module){
         Optional<DeviceType>deviceTypeOptional= DEVICE_TYPES.stream()
@@ -41,11 +50,18 @@ public class HKCacheManager {
                 .findAny();
         return deviceTypeOptional.map(DeviceType::getUserId).orElse(-1);
     }
+    public static int getLHandle(ModuleEnum module){
+        Optional<DeviceType>deviceTypeOptional= DEVICE_TYPES.stream()
+                .filter(deviceType -> StrUtil.equals(module.getModuleEn(), deviceType.module))
+                .findAny();
+        return deviceTypeOptional.map(DeviceType::getLHandle).orElse(-1);
+    }
 
     @Data
     @Accessors(chain = true)
     static class DeviceType{
         private String module;
         private int userId;
+        private int lHandle;
     }
 }

+ 1 - 0
src/main/java/com/gzlh/device/capture/bo/SetAlarmResult.java

@@ -7,5 +7,6 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 public class SetAlarmResult {
     private int userId=-1;
+    private int lHandle =-1;
     private String msg;
 }

+ 4 - 3
src/main/java/com/gzlh/device/capture/service/CaptureHandlerService.java

@@ -64,7 +64,7 @@ public class CaptureHandlerService {
         int userId = hkUtils.Login_V40(caputreSetting.getHost(), port, caputreSetting.getUsername(), caputreSetting.getPwd(), hcNetSDK);
         boolean result = hkUtils.NET_DVR_RebootDVR(hcNetSDK, userId);
         if (result) {
-            HKCacheManager.add(ModuleEnum.CAPTURE_MODULE, -1);
+            HKCacheManager.clean(ModuleEnum.CAPTURE_MODULE);
         }
         int errCode = hcNetSDK.NET_DVR_GetLastError();
         log.info("重启摄像头:{},{}", result, errCode);
@@ -85,8 +85,8 @@ public class CaptureHandlerService {
             // 智能交通报警信息上传类型:0- 老报警信息(NET_DVR_PLATE_RESULT),1- 新报警信息(NET_ITS_PLATE_RESULT)
             m_strAlarmInfo.byDeployType = 1;   //布防类型:0-客户端布防,1-实时布防
             m_strAlarmInfo.write();
-            int result = hcNetSDK.NET_DVR_SetupAlarmChan_V41(userId, m_strAlarmInfo);
-            if (result == -1) {
+            int lHandle = hcNetSDK.NET_DVR_SetupAlarmChan_V41(userId, m_strAlarmInfo);
+            if (lHandle == -1) {
                 int errCode = hcNetSDK.NET_DVR_GetLastError();
                 log.error("布防失败,退出设备登录,错误码为:{},,等级:{}", errCode, m_strAlarmInfo.byLevel);
                 boolean loginOutResult = hkUtils.NET_DVR_Logout(hcNetSDK, userId);
@@ -95,6 +95,7 @@ public class CaptureHandlerService {
                 return setAlarmResult;
             } else {
                 log.info("========布防成功==========:{},{},等级:{}", ip, userId, m_strAlarmInfo.byLevel);
+                setAlarmResult.setLHandle(lHandle);
             }
         } else {
             int errCode = hcNetSDK.NET_DVR_GetLastError();

+ 2 - 2
src/main/java/com/gzlh/device/capture/task/CheckCaptureStatusTask.java

@@ -27,9 +27,9 @@ public class CheckCaptureStatusTask implements Runnable {
             short port = (short) caputreSetting.getPort();
             String ip = caputreSetting.getHost();
             SetAlarmResult result = captureHandlerService.loginAndSetAlarm(ip, port, caputreSetting.getUsername(), caputreSetting.getPwd());
-            userId = result.getUserId();
+            userId = result.getLHandle();
             if (userId != -1) {
-                HKCacheManager.add(ModuleEnum.CAPTURE_MODULE, userId);
+                HKCacheManager.add(ModuleEnum.CAPTURE_MODULE, result);
             }else {
                 DeviceCache.changeDeviceStatus(ModuleEnum.CAPTURE_MODULE.getModuleZh(),  0,result.getMsg());
             }

+ 1 - 0
src/main/java/com/gzlh/device/led/action/LedAction.java

@@ -5,4 +5,5 @@ public interface LedAction {
      * 展示内容
      */
     String LED_SHOW_CONTENT="LED_SHOW_CONTENT";
+    String INIT="INIT";
 }

+ 5 - 0
src/main/java/com/gzlh/device/led/handler/ILedHandler.java

@@ -10,4 +10,9 @@ public interface ILedHandler {
     void sendMsg(String content, LedOptions options);
 
     void handlerAction(String action);
+
+
+    void clean();
+
+    void init();
 }

+ 7 - 5
src/main/java/com/gzlh/device/led/handler/impl/LedCommonHandler.java

@@ -14,7 +14,7 @@ import org.springframework.util.StringUtils;
 @Slf4j
 public class LedCommonHandler {
 
-    public static void  handlerAction(String action){
+    public static void handlerAction(String action) {
         //log.info("led handler action:{}", action);
         if (StrUtil.contains(action, LedAction.LED_SHOW_CONTENT)) {
             LedOptions ledOptions = new LedOptions();
@@ -41,7 +41,7 @@ public class LedCommonHandler {
                     carNo = reqBO.getCarNo();
                 }
                 ledOptions.setLine(line).setShowType("0B");
-                SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg(carNo,ledOptions);
+                SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg(carNo, ledOptions);
 //                sendMsg(carNo, ledOptions);
             } else if (StrUtil.contains(action, "weight")) {
                 String weight = "";
@@ -50,16 +50,18 @@ public class LedCommonHandler {
                 if (StrUtil.equals("0kg", weight)) {
                     weight = "";
                 }
-                SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg(weight,ledOptions);
+                SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg(weight, ledOptions);
                 //sendMsg(weight, ledOptions);
             } else if (StrUtil.contains(action, "channel")) {
                 ledOptions.setLine(line).setShowType("0B").setTime("00").setType("01");
                 String channelName = SysConfig.channelSetting.getChannelName();
-                SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg(channelName,ledOptions);
+                SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg(channelName, ledOptions);
             } else {
                 ledOptions.setShowType("00");
-                SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg(action,ledOptions);
+                SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg(action, ledOptions);
             }
+        } else if (StrUtil.equalsIgnoreCase(action, LedAction.INIT)) {
+            SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).init();
         }
     }
 }

+ 23 - 1
src/main/java/com/gzlh/device/led/handler/impl/LedHandlerFengLiYuan.java

@@ -46,7 +46,29 @@ public class LedHandlerFengLiYuan implements ILedHandler {
 
     @Override
     public void handlerAction(String action) {
-       LedCommonHandler.handlerAction(action);
+        LedCommonHandler.handlerAction(action);
+    }
+
+    @Override
+    public void init() {
+        LedOptions ledOptions = new LedOptions();
+        ledOptions.setLine("01").setType("01").setTime("00");
+        sendMsg(SysConfig.channelSetting.getChannelName(), ledOptions);
+        String line = SysConfig.serialSetting.getLed().getLine();
+        if (StrUtil.isEmpty(line)) {
+            line = "03";
+        }
+        ledOptions.setType("02").setTime("05");
+        for (int i = 2; i <= Integer.parseInt(line); i++) {
+            ledOptions.setLine("0" + i);
+            sendMsg(" ", ledOptions);
+            ThreadUtil.sleep(100);
+        }
+    }
+
+    @Override
+    public void clean() {
+
     }
 
 

+ 55 - 14
src/main/java/com/gzlh/device/led/handler/impl/LedHandlerYangBandV4d2.java

@@ -1,8 +1,11 @@
 package com.gzlh.device.led.handler.impl;
 
 import cn.hutool.core.math.MathUtil;
+import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
+import com.gzlh.bus.SysConfig;
+import com.gzlh.config.SystemObject;
 import com.gzlh.device.led.brand.LedBrandType;
 import com.gzlh.device.led.client.LedNettyConfig;
 import com.gzlh.device.led.handler.ILedHandler;
@@ -47,12 +50,12 @@ public class LedHandlerYangBandV4d2 implements ILedHandler {
         String line = ledOptions.getLine();
         byte id = (byte) (Integer.parseInt(line) - 1);
         short x = 0;
+        short y = (short) NumberUtil.mul(Integer.parseInt(line) - 1, 16);
         short w = 64;
         short h = 16;
-        short y = (short) NumberUtil.mul(Integer.parseInt(line) - 1, 16);
         List<BxArea> areas = new ArrayList<>();
         byte[] datas = ("\\C" + Integer.parseInt(ledOptions.getColor()) + content).getBytes(SystemCharsets.GB2312);
-        BxAreaDynamic BxArea = new BxAreaDynamic(id, x, y, w, h, datas, true);
+        BxAreaDynamic BxArea = new BxAreaDynamic(id, x, y, w, h, datas, false);
         if (ledOptions.isSay()) {
             BxArea.setSoundMode((byte) 0x02);
             // 人声模式
@@ -73,25 +76,20 @@ public class LedHandlerYangBandV4d2 implements ILedHandler {
         // 0x04——向右移动
         // 0x05——向上移动
         // 0x06——向下移动
-        // 设置显示方式为 0x03 - 向左移动
-        BxArea.setDispMode((byte) 0x03);
-        // 设置停留时间
-        BxArea.setHoldTime((byte) 0);
+        byte dispMode = Integer.parseInt(ledOptions.getType()) == 1 ? (byte) 0x01 : 0x03;
+        BxArea.setDispMode(dispMode);
+        BxArea.setHoldTime((byte) 0x00);
+        BxArea.setSpeed((byte) 0x05);
         areas.add(BxArea);
         // 创建一个发送动态区命令
         BxCmd cmd = new BxCmdSendDynamicArea(areas);
 
         // 对命令进行封装
         BxDataPack dataPack = new BxDataPack(cmd);
-
         // 生成命令序列
         byte[] seq = dataPack.pack();
-
         String pack = XorUtils.bytesToHex(seq);
-
         log.info(LedBrandType.SHANGHAI_YANGBAND_BX.getBrand() + "发送消息:{}", content);
-        //String pack = YangBandPackage.buildPackage(ColorConver.NU_TO_HEX.get(1) + WordHandlerUtils.msgToASCII(content));
-        log.info(LedBrandType.SHANGHAI_YANGBAND_BX.getBrand() + "转换后的数据:{}", pack);
         ledNettyConfig.send(pack);
     }
 
@@ -102,12 +100,55 @@ public class LedHandlerYangBandV4d2 implements ILedHandler {
      */
     @Override
     public void handlerAction(String action) {
-
         log.info("action:{}", action);
+        LedCommonHandler.handlerAction(action);
     }
 
-    public static void main(String[] args) {
-        System.out.println((byte) (Integer.parseInt("02") - 1));
+    @Override
+    public void init() {
+        byte id = (byte) 0;
+        short x = 0;
+        short y = 0;
+        short w = 64;
+        short h = 16;
+        String channelName = SysConfig.channelSetting.getChannelName();
+        List<BxArea> areas = new ArrayList<>();
+        byte[] data = channelName.getBytes(SystemCharsets.GB2312);
+        BxAreaDynamic area = new BxAreaDynamic(id, x, y, w, h, data, false);
+        //第一行静止
+        area.setDispMode((byte) 0x01);
+        area.setHoldTime((byte) 0x00);
+        areas.add(area);
+
+        String line = SysConfig.serialSetting.getLed().getLine();
+        if (StrUtil.isEmpty(line)) {
+            line = "03";
+        }
+        //发空的相当于清掉内容
+        for (int i = 2; i <= Integer.parseInt(line); i++) {
+            data = " ".getBytes(SystemCharsets.GB2312);
+            id = (byte) (i - 1);
+            y = (short) NumberUtil.mul(i - 1, 16);
+            BxAreaDynamic areaDynamic = new BxAreaDynamic(id, x, y, w, h, data, false);
+            areaDynamic.setDispMode((byte) 0x03);
+            areaDynamic.setHoldTime((byte) 0x00);
+            areaDynamic.setSpeed((byte) 0x05);
+            areas.add(areaDynamic);
+        }
+        // 创建一个发送动态区命令
+        BxCmd cmd = new BxCmdSendDynamicArea(areas);
+        // 对命令进行封装
+        BxDataPack dataPack = new BxDataPack(cmd);
+        // 生成命令序列
+        byte[] seq = dataPack.pack();
+        String pack = XorUtils.bytesToHex(seq);
+        ledNettyConfig.send(pack);
+    }
+
+    @Override
+    public void clean() {
+
     }
 
+
 }

+ 35 - 0
src/main/java/com/gzlh/device/led/tools/BxCmdClearScreen.java

@@ -0,0 +1,35 @@
+package com.gzlh.device.led.tools;
+
+/**
+ *
+ */
+public class BxCmdClearScreen extends BxCmd {
+
+    public BxCmdClearScreen() {
+        super(BxCmdCode.CMD_CLEAR_SCREEN.group, BxCmdCode.CMD_CLEAR_SCREEN.code);
+    }
+
+    @Override
+    public byte[] build() {
+
+        BxByteArray array = new BxByteArray();
+
+        //
+        // group, code
+        array.add(getGroup());
+        array.add(getCmd());
+
+        //
+        // response or not
+        array.add(getReqResp());
+
+        //
+        // 2 bytes reserved data
+        // r0, r1
+        array.add((byte)0x00);
+        array.add((byte)0x00);
+
+        //
+        return array.build();
+    }
+}

+ 38 - 0
src/main/java/com/gzlh/device/led/tools/BxCmdCode.java

@@ -0,0 +1,38 @@
+package com.gzlh.device.led.tools;
+/**
+ *
+ */
+public enum BxCmdCode {
+
+    CMD_ACK("ack", (byte)0xa0, (byte)0x00),
+    CMD_NACK("nack", (byte)0xa0, (byte)0x01),
+
+    CMD_TURN_ON_OFF("turn on/off screen", (byte)0xa3, (byte)00),
+    CMD_CLEAR_SCREEN("clear the screen", (byte)0xa3, (byte)0x10),
+    
+    CMD_SYSTEM_CLOCK_CORRECT("system clock correct", (byte)0xa2, (byte)03),
+
+    CMD_START_WRITE_FILE("start write file", (byte)0xa1,(byte) 0x05),
+    CMD_WRITE_FILE("write file", (byte)0xa1, (byte)0x06),
+    CMD_WRITE_TRANS_START("start write trans", (byte)0xa1, (byte)0x07),
+    CMD_WRITE_TRANS_STOP("stop the write trans", (byte)0xa1, (byte)0x08),
+    CMD_WRITE_CUSTOMER_INFO("write customer information", (byte)0xa1, (byte)0x09),
+    CMD_GET_FILE_INTO("get file information", (byte)0xa1, (byte)0x0a),
+    CMD_GET_FILE_CONTENT("get file content", (byte)0xa1, (byte)0x0b);
+
+
+    public byte group;
+    public byte code;
+    public String name;
+
+    BxCmdCode(String name, byte group, byte code) {
+        this.name = name;
+        this.group = group;
+        this.code = code;
+    }
+
+    BxCmdCode(byte group, byte code) {
+        this.group = group;
+        this.code = code;
+    }
+}

+ 1 - 1
src/main/java/com/gzlh/device/led/utils/LedOptions.java

@@ -42,7 +42,7 @@ public class LedOptions {
      * 0x0A 纵向闭合
      * 0x0B 同时显示
      */
-    private String showType="00";
+    private String showType="04";
     /**
      * 停留时间 50秒
      */

+ 1 - 0
src/main/java/com/gzlh/device/plc/action/PLCAction.java

@@ -26,6 +26,7 @@ public interface PLCAction {
     String REQ_PRINT="REQ_PRINT";
     String CANCEL_PRINT="CANCEL_PRINT";
     String TEST_PRINT="TEST_PRINT";
+    String CANCEL_LOCAL="CANCEL_LOCAL";
     /**
      * 禁用按钮
      */

+ 1 - 1
src/main/java/com/gzlh/device/plc/client/PlcClientHandler.java

@@ -36,7 +36,7 @@ public class PlcClientHandler extends SimpleChannelInboundHandler<String> {
         if (StrUtil.isEmpty(msg) || StrUtil.length(msg) < 8) {
             return;
         }
-//        log.info("PLC 客户端收到消息:" + msg);
+       // log.info("PLC 客户端收到消息:" + msg);
         PLCCacheManager.setNormal();
         String data = msg.substring(0, msg.length() - 4);
         String str = ModbusUtils.buildRequestPacket(data);

+ 1 - 1
src/main/java/com/gzlh/device/plc/client/PlcNettyConfig.java

@@ -114,7 +114,7 @@ public class PlcNettyConfig {
         CompletableFuture<Boolean> result = new CompletableFuture<>();
         if (channel == null || !channel.isActive()) {
             result.complete(false);
-            log.error("plc 网络异常");
+            //log.error("plc 网络异常");
             return result;
         }
 

+ 3 - 2
src/main/java/com/gzlh/device/plc/event/PLCEvent.java

@@ -31,11 +31,12 @@ public interface PLCEvent {
      */
     String START_PRINT = "START_PRINT";
     /**
-     * 试磅
+     *  确认称重
      */
     String TEST_PRINT = "TEST_PRINT";
+
     /**
-     * 取消
+     * 取消、试磅
      */
     String CANCEL_PRINT = "CANCEL_PRINT";
     /**

+ 11 - 17
src/main/java/com/gzlh/device/plc/handler/CheckUpTask.java

@@ -24,44 +24,38 @@ import lombok.extern.slf4j.Slf4j;
 public class CheckUpTask extends Task {
 
 
-    private int tryCount;
 
-    public CheckUpTask(String id, long delayInMilliseconds, int tryCount) {
+    public CheckUpTask(String id, long delayInMilliseconds) {
         super(id, delayInMilliseconds);
-        this.tryCount = tryCount;
     }
 
     @Override
     public void run() {
-        int count = 10;
+        int count = 5;
         PlcNettyConfig plcNettyConfig = SpringUtil.getBean(PlcNettyConfig.class);
         SerialSetting serialSetting = SysConfig.serialSetting;
+        String gatePoint = serialSetting.getPlc().getOut().getGatePoint();
+        String command = PLCHadnler.COMMAND_PREFIX + gatePoint + PLCHadnler.COMMAND_ON;
+        String packData = ModbusUtils.buildRequestPacket(command);
         while (count > 0) {
             count--;
             String plcStatus= DeviceCache.getPlcStatus();
-            if (StrUtil.isEmpty(plcStatus)){
-                log.error("plc status is null");
-                EventDataManager.cacheData("poleResult","0");
-                return;
-            }
             SerialSetting.PlcDTO.StatusDTO statusDTO= SysConfig.serialSetting.getPlc().getStatus();
             String upPoint= statusDTO.getUpPoint();
             String upStatus=plcStatus.charAt(Integer.parseInt(upPoint))+"";
             if (upStatus.equals("1")){
-                log.info("抬杆完成,停止下发指令");
+                log.info("抬杆完成,发送断电指令");
                 //已经上到位了,所以停止检查
+                 command = PLCHadnler.COMMAND_PREFIX + gatePoint + PLCHadnler.COMMAND_OFF;
+                 packData = ModbusUtils.buildRequestPacket(command);
+                plcNettyConfig.send(packData);
                 return;
             }
             //抬杆
-            String gatePoint = serialSetting.getPlc().getOut().getGatePoint();
-            String command = PLCHadnler.COMMAND_PREFIX + gatePoint + PLCHadnler.COMMAND_ON;
-            String packData = ModbusUtils.buildRequestPacket(command);
-            log.info("plc发送消息 抬杆:{}", packData);
+            log.info("plc发送消息 抬杆:{}",count);
             plcNettyConfig.send(packData);
-            ThreadUtil.sleep(500);
+            ThreadUtil.sleep(3000);
         }
         EventDataManager.cacheData("poleResult","0");
-
-
     }
 }

+ 27 - 27
src/main/java/com/gzlh/device/plc/handler/PLCHadnler.java

@@ -87,7 +87,7 @@ public class PLCHadnler {
             String packData = ModbusUtils.buildRequestPacket(command);
             log.info("plc发送消息抬杆:{}", packData);
             plcNettyConfig.send(packData);
-            // taskService.addTask(new CheckUpTask(RandomUtil.randomNumbers(10), 200, 1));
+            taskService.addTask(new CheckUpTask(RandomUtil.randomNumbers(10), 4000));
         } else if (StrUtil.equals(action, PLCAction.RAILING_RISE_OFF)) {
             //抬杆关闭
             String gatePoint = serialSetting.getPlc().getOut().getGatePoint();
@@ -95,14 +95,20 @@ public class PLCHadnler {
             // log.info("plc发送消息:{}", command);
             String packData = ModbusUtils.buildRequestPacket(command);
             plcNettyConfig.send(packData);
-            //taskService.addTask(new CheckDownTask(RandomUtil.randomNumbers(10), 2000, 1));
         } else if (StrUtil.equals(action, PLCAction.REQ_PRINT)) {
-
-            plcService.reqPrint();
+            if (CacheManager.checkEnable(CacheManager.REQ_BTN_KEY)) {
+                plcService.reqPrint();
+            }
         } else if (StrUtil.equals(action, PLCAction.TEST_PRINT)) {
-            plcService.testPrint();
+            if (CacheManager.checkEnable(CacheManager.TEST_BTN_KEY)) {
+                plcService.testPrint();
+            }
         } else if (StrUtil.equals(action, PLCAction.CANCEL_PRINT)) {
-            plcService.cancelPrint();
+            if (CacheManager.checkEnable(CacheManager.CANCEL_BTN_KEY)) {
+                plcService.cancelPrint();
+            }
+        } else if (StrUtil.equals(action, PLCAction.CANCEL_LOCAL)) {
+            plcService.cancelLocal();
         } else if (StrUtil.equals(action, PLCAction.BTN_DISABLE)) {
             CacheManager.changeStatus(CacheManager.CANCEL_BTN_KEY, false);
             CacheManager.changeStatus(CacheManager.REQ_BTN_KEY, false);
@@ -176,14 +182,18 @@ public class PLCHadnler {
         if (!msg.startsWith("0102")) {
             return;
         }
-        String result = Integer.toBinaryString(Integer.parseInt(msg.substring(6, 8), 16));
-
+        StringBuilder sb = new StringBuilder();
+        for (int fromIndex = 6; fromIndex <= 10; fromIndex = fromIndex + 2) {
+            int toIndex = fromIndex + 2;
+            String dataArea = msg.substring(fromIndex, toIndex);
+            String result = Integer.toBinaryString(Integer.parseInt(dataArea, 16));
+            String newPlcInfo = String.format("%8s", result).replace(" ", "0");
+            StringBuffer newReverse = new StringBuffer(newPlcInfo).reverse();
+            sb.append(newReverse);
+        }
         String oldPlcInfo = DeviceCache.getPlcStatus();
-        //  log.info("oldPlcInfo status:{}", oldPlcInfo);
-//        将plc的设备信息补到8存入缓存
-        String newPlcInfo = String.format("%8s", result).replace(" ", "0");
-        //  log.info("plc status:{}", newPlcInfo);
-        String newReverse = new StringBuffer(newPlcInfo).reverse().toString();
+        String newReverse = sb.toString();
+//        log.info("newPlcInfo:{}", newReverse);
 //          log.info("new plc reverse status:{}", newReverse);
         if (StrUtil.isEmpty(oldPlcInfo)) {
             DeviceCache.setPlcStatus(newReverse);
@@ -246,6 +256,7 @@ public class PLCHadnler {
             //试榜单
             String testPrintPoint = status.getTestPrint();
             String testPrintPointStatus = newReverse.charAt(Integer.parseInt(testPrintPoint)) + "";
+
             String infraredMode = status.getInfraredMode();
             //前红外发生变化
             if (judgePoint.equals(redPoint)) {
@@ -262,15 +273,6 @@ public class PLCHadnler {
                         taskService.addTask(new CheckStartWeightTask(RandomUtil.randomNumbers(16), 3000));
                         break;
                     }
-                    //有车在磅上,又有触碰到前红外
-                    if (CommonWeighbridgeHandler.hsCar && !StrUtil.contains(channelCode, "-")) {
-                        DeviceCache.setInterrupt(true);
-                        CommonWeighbridgeHandler.isStart = false;
-                        LedOptions options = new LedOptions().setLine("03").setShowType("00");
-                        SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand())
-                                .sendMsg("后有跟车,称重停止", options);
-                        break;
-                    }
                 }
             } else if (upPoint.equals(judgePoint)) {
                 //上到位触发-->发送继电器断开---->防止不落��
@@ -281,13 +283,11 @@ public class PLCHadnler {
             } else if (downPoint.equals(judgePoint)) {
                 //下到位触发&&磅上无车===>初始化
                 if (downPointStatus.equals("1")) {
-                    EventDataManager.cleanData();
                     eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.DOWN_POINT_READ);
                 }
             } else if (judgePoint.equals(radarPoint)) {
-                ReqBO reqBO = EventDataManager.getCacheData();
-                if (radarPointStatus.equals("0") && StrUtil.isNotEmpty(reqBO.getCarNo())) {
-                    taskService.addTask(new StartInitTask(RandomUtil.randomNumbers(16), 5000));
+                if (radarPointStatus.equals("0")) {
+                    taskService.addTask(new StartInitTask(RandomUtil.randomNumbers(16), 6000));
                 } else if (radarPointStatus.equals("1")) {
                     taskService.addTask(new CheckCarInTask(RandomUtil.randomNumbers(16), 200));
                     // ThreadUtil.execute(new ElectronReadJob());
@@ -401,7 +401,7 @@ public class PLCHadnler {
                             eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.TOUCH_RADAR);
                         } else {
                             taskService.addTask(new StartInitTask(RandomUtil.randomNumbers(16), 8000));
-                           // eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.RELEASE_RADAR);
+                            // eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.RELEASE_RADAR);
                         }
 
                     } else if (StrUtil.equals(fRedPoint, judgePoint)) {

+ 2 - 8
src/main/java/com/gzlh/device/plc/job/InitLedTask.java

@@ -1,6 +1,7 @@
 package com.gzlh.device.plc.job;
 
 import cn.hutool.core.thread.ThreadUtil;
+import cn.hutool.core.util.StrUtil;
 import com.gzlh.bus.SysConfig;
 import com.gzlh.config.SystemObject;
 import com.gzlh.config.task.Task;
@@ -14,13 +15,6 @@ public class InitLedTask extends Task {
 
     @Override
     public void run() {
-        LedOptions ledOptions = new LedOptions();
-        ledOptions.setLine("01").setType("01").setTime("00");
-        SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg(SysConfig.channelSetting.getChannelName(), ledOptions);
-        for (int i = 2; i <= 4; i++) {
-            ledOptions.setLine("0" + i);
-            SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).sendMsg("", ledOptions);
-            ThreadUtil.sleep(100);
-        }
+        SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand()).init();
     }
 }

+ 57 - 14
src/main/java/com/gzlh/device/plc/service/PLCService.java

@@ -26,6 +26,7 @@ import com.gzlh.device.print.factory.PrintFactory;
 import com.gzlh.device.weighbridge.handler.impl.CommonWeighbridgeHandler;
 import com.gzlh.entity.CommandBO;
 import com.gzlh.entity.ReqBO;
+import com.gzlh.utils.DeviceCache;
 import com.gzlh.utils.ModbusUtils;
 import com.gzlh.utils.WordHandlerUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -44,30 +45,45 @@ public class PLCService {
     @Resource
     private TaskService taskService;
     private static final TimedCache<String, String> UP_CACHE = CacheUtil.newTimedCache(25000);
+    private final TimedCache<String, Integer> cache = CacheUtil.newTimedCache(3000);
 
     /**
      * 试榜单==确认
      */
     public void testPrint() {
-
         ReqBO reqBO = EventDataManager.getCacheData();
+        String channelCode = reqBO.getChannelCode();
+        if (cache.get(channelCode) != null) {
+            return;
+        }
+        cache.put(channelCode, 1);
+        SerialSetting.PlcDTO.StatusDTO status = SysConfig.serialSetting.getPlc().getStatus();
+        String radiation = status.getRadiation();
+        String plcStatus = DeviceCache.getPlcStatus();
+        String radiationStatus = StrUtil.isEmpty(radiation) || StrUtil.isEmpty(plcStatus) ? "0" : plcStatus.charAt(Integer.parseInt(radiation)) + "";
+        reqBO.setRadiation(radiationStatus);
         String bodyParams = JSONUtil.toJsonStr(reqBO);
         if (StrUtil.isEmpty(bodyParams)
                 || !ChannelCacheManager.stateEnable(SysConfig.channelSetting.getChannelCode())) {
             return;
         }
+        String line = SysConfig.serialSetting.getLed().getLine();
+        if (StrUtil.isEmpty(line)) {
+            line = "03";
+        }
         ChannelCacheManager.addCache(reqBO.getCarNo());
-        log.info("Req test weight:{}", bodyParams);
+        log.info("Req confirm weight:{}", bodyParams);
         String api = SysConfig.managerSetting.getServerUrl() + "/open/testWeight";
         try (HttpResponse response = HttpUtil.createPost(api).body(WordHandlerUtils.AESEncrypt(bodyParams)).execute()) {
             log.info("提交港内确认地磅数据-返回结果:{}", response.body());
             if (response.getStatus() == 200) {
-                LedOptions options = new LedOptions().setLine("03").setShowType("00");
+                LedOptions options = new LedOptions().setLine(line).setShowType("00");
                 JSONObject result = JSONUtil.parseObj(response.body());
                 String msg = result.getStr("msg");
                 Integer code = result.getInt("code");
                 if (code == 200) {
-                    EventDataManager.cleanData();
+                    //确认磅后可以打印磅单
+                    CacheManager.changeStatus(CacheManager.REQ_BTN_KEY, true);
                     eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.RAILING_RISE);
                 }
                 SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand())
@@ -85,6 +101,10 @@ public class PLCService {
         if (StrUtil.isEmpty(reqBO.getCarNo())) {
             return;
         }
+        String line = SysConfig.serialSetting.getLed().getLine();
+        if (StrUtil.isEmpty(line)) {
+            line = "03";
+        }
         ChannelCacheManager.addCache(reqBO.getCarNo());
         log.info("Req cancel weight:{}", bodyParams);
         String api = SysConfig.managerSetting.getServerUrl() + "/open/cancelWeight";
@@ -96,10 +116,9 @@ public class PLCService {
                 String data = WordHandlerUtils.AESDecrypt(jsonObject.get("data").toString());
                 log.info("data:{}", data);
                 CommandBO commandBO = JSONUtil.toBean(data, CommandBO.class);
-                LedOptions options = new LedOptions().setLine("03").setShowType("00");
+                LedOptions options = new LedOptions().setLine(line).setShowType("00");
                 int code = jsonObject.getInt("code");
                 if (code == 200) {
-                    EventDataManager.cleanData();
                     eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.RAILING_RISE);
                 }
                 SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand())
@@ -144,14 +163,6 @@ public class PLCService {
         }
     }
 
-    public void systemUp() {
-        String key = "system_up";
-        if (UP_CACHE.get(key, false) == null) {
-            log.info("系统触发抬杆=======");
-            taskService.addTask(new StartNewEventTask(RandomUtil.randomNumbers(32),5000,eventBus,ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.RAILING_RISE));
-        }
-        UP_CACHE.put(key, "1");
-    }
 
     /**
      * 重置对方通道
@@ -165,4 +176,36 @@ public class PLCService {
             log.info("请求公用通道重置返回:{},{}", httpResponse.getStatus(), httpResponse.body());
         }
     }
+
+    public void cancelLocal() {
+        ReqBO reqBO = EventDataManager.getCacheData();
+        String bodyParams = JSONUtil.toJsonStr(reqBO);
+        if (StrUtil.isEmpty(reqBO.getCarNo())) {
+            return;
+        }
+        String line = SysConfig.serialSetting.getLed().getLine();
+        if (StrUtil.isEmpty(line)) {
+            line = "03";
+        }
+        ChannelCacheManager.addCache(reqBO.getCarNo());
+        log.info("Req local cancel weight:{}", bodyParams);
+        String api = SysConfig.managerSetting.getServerUrl() + "/open/cancelWeightLocal";
+        try (HttpResponse response = HttpUtil.createPost(api).body(WordHandlerUtils.AESEncrypt(bodyParams)).execute()) {
+            log.info("提交港内取消地磅数据-返回结果:{}", response.body());
+            if (response.getStatus() == 200) {
+                String body = response.body();
+                JSONObject jsonObject = JSONUtil.parseObj(body);
+                String data = WordHandlerUtils.AESDecrypt(jsonObject.get("data").toString());
+                CommandBO commandBO = JSONUtil.toBean(data, CommandBO.class);
+                LedOptions options = new LedOptions().setLine(line).setShowType("00");
+                int code = jsonObject.getInt("code");
+                if (code == 200) {
+                    eventBus.startEvent(ModuleEnum.PLC_MODULE.getModuleEn() + "." + PLCEvent.RAILING_RISE);
+                }
+                SystemObject.ledFactory.handler(SysConfig.serialSetting.getLed().getBrand())
+                        .sendMsg(commandBO.getCommand().getExtra(), options);
+            }
+        }
+
+    }
 }

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

@@ -102,7 +102,7 @@ public class BeiHaiWeightReport {
      * 备注
      */
     @JsonProperty("WWB_REMARK")
-    private String WWB_REMARK;
+    private String WWB_REMARK = "";
     /**
      * 仓单号
      */

+ 1 - 1
src/main/java/com/gzlh/device/print/client/PrintClientHandler.java

@@ -29,7 +29,7 @@ public class PrintClientHandler extends SimpleChannelInboundHandler<String> {
 
     @Override
     public void channelInactive(ChannelHandlerContext ctx) throws Exception {
-//        log.error("print 客户端 连接断开,10s后进行重连");
+        log.error("print 客户端 连接断开,10s后进行重连");
         DeviceCache.changeDeviceStatus(ModuleEnum.PRINT_MODULE.getModuleZh(), 0);
         ThreadUtil.sleep(6000);
         printNettyConfig.connect();

+ 1 - 1
src/main/java/com/gzlh/device/print/client/PrintNettyConfig.java

@@ -74,7 +74,7 @@ public class PrintNettyConfig {
         future.addListener((ChannelFutureListener) future1 -> {
             if (future1.isSuccess()) {
                 channel = future1.channel();
-                //log.info("print 服务器连接成功,{},{}", host, port);
+                log.info("print 服务器连接成功,{},{}", host, port);
                 DeviceCache.changeDeviceStatus(ModuleEnum.PRINT_MODULE.getModuleZh(), 1);
             } else {
                 log.error("-------------print 连接服务器失败,{},{}-----------,进行重连", host, port);

+ 26 - 4
src/main/java/com/gzlh/device/print/handler/impl/PrintYingMeiHandler.java

@@ -1,6 +1,9 @@
 package com.gzlh.device.print.handler.impl;
 
 
+import ch.qos.logback.core.util.TimeUtil;
+import cn.hutool.cache.CacheUtil;
+import cn.hutool.cache.impl.TimedCache;
 import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpResponse;
@@ -10,6 +13,8 @@ import cn.hutool.json.JSONUtil;
 import com.gzlh.bus.EventDataManager;
 import com.gzlh.bus.SysConfig;
 import com.gzlh.config.ModuleEnum;
+import com.gzlh.device.led.factory.LedFactory;
+import com.gzlh.device.led.utils.LedOptions;
 import com.gzlh.device.print.bo.BeiHaiWeightReport;
 import com.gzlh.device.print.brand.PrintBrandType;
 import com.gzlh.device.print.client.PrintNettyConfig;
@@ -32,9 +37,11 @@ import java.nio.charset.Charset;
 @Service
 @Slf4j
 public class PrintYingMeiHandler implements IPrintHandler {
-    private static final String STATUS_COMMAND = "1B76";
+    private static final String STATUS_COMMAND = "1d7201";
     @Resource
     private PrintNettyConfig printNettyConfig;
+    @Resource
+    private LedFactory ledFactory;
 
     @Override
     public PrintBrandType brandType() {
@@ -43,7 +50,7 @@ public class PrintYingMeiHandler implements IPrintHandler {
 
     @Override
     public void sendMsg(String content) {
-       // log.info(PrintBrandType.YING_MEI.getBrand() + "发送消息:{}", content);
+        // log.info(PrintBrandType.YING_MEI.getBrand() + "发送消息:{}", content);
         printNettyConfig.send(content);
     }
 
@@ -58,6 +65,7 @@ public class PrintYingMeiHandler implements IPrintHandler {
         if (StrUtil.equalsIgnoreCase(msg, "FF")) {
             return;
         }
+//        log.info("msg:{}",msg);
         // 将十六进制转换为二进制字符串
         int intValue = Integer.parseInt(msg, 16); // 将十六进制字符串转换为整数
         String binaryString = Integer.toBinaryString(intValue); // 将整数转换为二进制字符串
@@ -69,9 +77,9 @@ public class PrintYingMeiHandler implements IPrintHandler {
 //        log.info("二进制表示: " + binaryString);
         // 检查bit 2的状态
         // bit 2 是从右边数的第3位,对应索引为5(从0开始计数)
-        String bit2 = binaryString.charAt(5)+"";
+        String bit2 = binaryString.charAt(5) + "";
         // 输出bit 2的状态
-        String eMsg = StrUtil.equals(bit2,"1") ? "打印机缺纸" : "";
+        String eMsg = StrUtil.equals(bit2, "1") ? "打印机缺纸" : "";
         DeviceCache.changeDeviceStatus(ModuleEnum.PRINT_MODULE.getModuleZh(), eMsg);
     }
 
@@ -85,6 +93,8 @@ public class PrintYingMeiHandler implements IPrintHandler {
         log.info("action:{}", action);
     }
 
+    private final TimedCache<String, Integer> cache = CacheUtil.newTimedCache(3000);
+
     @Override
     public void reqPrint() {
         ReqBO reqBO = EventDataManager.getCacheData();
@@ -92,6 +102,11 @@ public class PrintYingMeiHandler implements IPrintHandler {
         if (StrUtil.isEmpty(reqBO.getCarNo())) {
             return;
         }
+        String channelCode = reqBO.getChannelCode();
+        if (cache.get(channelCode) != null) {
+            return;
+        }
+        cache.put(channelCode, 1);
         log.info("Req print weight:{}", bodyParams);
         String api = SysConfig.managerSetting.getServerUrl() + "/open/printWeight";
         try (HttpResponse response = HttpUtil.createPost(api).body(WordHandlerUtils.AESEncrypt(bodyParams)).execute()) {
@@ -104,6 +119,13 @@ public class PrintYingMeiHandler implements IPrintHandler {
                     String reportData = jsonObject.getStr("data");
                     BeiHaiWeightReport beiHaiWeightReport = JSONUtil.toBean(reportData, BeiHaiWeightReport.class);
                     doPrint(beiHaiWeightReport);
+                } else {
+                    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(jsonObject.getStr("msg"), options);
                 }
             }
         }

+ 5 - 0
src/main/java/com/gzlh/device/print/test/ImageConstants.java

@@ -0,0 +1,5 @@
+package com.gzlh.device.print.test;
+
+public class ImageConstants {
+    String qzImage="iVBORw0KGgoAAAANSUhEUgAAAJ0AAACdAQAAAACGXUd7AAAE10lEQVR42t3Wz2tcRRwA8FnWuBuMeYgiAde8QEtzKagINoGwE089Sa7eGmmx3loqwhPDzksj3S6KKXgpWMzRu4LXfdsVVkES600U87Yr2Uuhs1kwEzqZr/OdX7ub/gV1Idndz86beW/mO9/vEHj6JcizhjmJnkJBCKGnMdVYPIWSxMAJm8QcW6XRJKbYnyhOoCqYNzKBwl6Y03HU3waj3xymAINhE1RpHIvQWxYFCptjKCPoL0seQz6GItYt5UMKnI6QMxguHx8wkPEI9VXDsjjHQEUj3AL47XN+ju3jJ48l0cueezgDu9AKqCLRzl65v1o9YHlAGcv6z5Xfa/NXKGceBVtZbNy78Rk9D4J65LCw88fudXJhyd6TwS48v328+2Hy6Vv2ngy24G5do9r4GCBgG+62n/zNcnYGoO6xDreyIXZdxwYOI7h5Rc/ksZ5B3b9FFcOdA+wrnasx7pFefFBv4pddSoVDWSXZd2Z2+3RHMIuiNv1o0WAPHkjq8KTx1xsW04JyyMXW/JrBYV7QoxrsyoXqJYvybXDYU+fXXBDyP/E5EduqfMaH83v4VIid/AuP7bOsY7F+/2bf4Yvf07bFbbWgf4Z9/Vdp057FSK1va9jDJSw2HcbiLC4C/nAUYUhavBWDnd5/Y4f6wfC7+adXmHvsmDAx69oTBiWlmzZw9eSrosPaIvcI/AU9oYjs4nHAdFMaFGy66beSKhUcnphNbffXjURPPaIgOLCygb6uLB5+ctXsYxuaFrmauhyQv2pxoKZsS4zX9Ee9SIhyYS3g9jvg8LbtbUUP+NMcsyjeZ5hs9CsCnjkcfAWQoWEeeddiF1fVNNS9Hka2z54q2rREMAaoR72nJVoBQ0xfhwiHejUQ9dMOca0M+gyG80I9DsGOpC842nF4lLkEqG+3v+ewm5mnxMGh13eYV0z2wsEhH/jLV2IzEi7SPwmzyIlFbHlQ8ViAgP1Zh4OdMfSjH9+h9u6xT+ZQrFIzOmIuqHn2rnyZBWxl1E3y1w71W6fu1mhQjDEWKmblIo84PYrUTPKP/Wqum5Y2gzc9Pta7RRYgs2naID95rDeGLAE3ydMFmAl3nYExe3UCqsuYBE32ao1a4i5jZnvl1xwyXCRhN+KjNek2wl4bM5V57e57bJd8IVP3vnFIecVVJ5BTP9h9pCi/7nHQuiDc3my1/OWDwVWHcclXPOCH17jb75WXQsWsrrkkEPHE96lmLnVdYsk2QsXd2nE5ZLvDAuZNl4I6+3RUm6lLVm1oBlTUpbXeeBnXUWNT5URxd1lxAFJAlf2ip64PPn9ykIkiOuWkGyT2mVYwtaQIa0C6QmKfqCVTicEZdntHupQuqUq+Ja83YiJI5PO8igUpk5nG/AcafZmAWK6WSWW6ms4T2g1VBvuslqtklrBeqEfqIx105YRUCQv1SOd0RBONoXJ11ZyGafi1RuJQ47hakoQ2ml8mZDaUSLGRSPLaZqyHkaGYypWE6zudfRP6IpRdFZtIkgn0+aiUh0ORndtQ9P1qjjCEjcnrozODW7exMwMPZ6qxI4c9adgyEVD5UM7GzzabDovjmNlokhOnILsD/ZtD1yRlEwczMnYSC5jhXeelSTRL7c+FHhUhG6Rw+qyYu0w7gcrmpVPnT0We4cPz/xv/A2ArIshUwV9iAAAAAElFTkSuQmCC";
+}

+ 51 - 32
src/main/java/com/gzlh/device/print/test/JMPrintThread.java

@@ -1,13 +1,26 @@
 package com.gzlh.device.print.test;
 
+import cn.hutool.core.codec.Base64Decoder;
 import cn.hutool.core.thread.ThreadUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.json.JSONUtil;
+import com.github.anastaciocintra.escpos.EscPos;
+import com.github.anastaciocintra.escpos.EscPosConst;
+import com.github.anastaciocintra.escpos.Style;
+import com.github.anastaciocintra.escpos.image.*;
+import com.github.anastaciocintra.output.TcpIpOutputStream;
 import com.gzlh.bus.SysConfig;
 import com.gzlh.config.SystemObject;
+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 lombok.extern.slf4j.Slf4j;
 
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.net.Socket;
@@ -27,28 +40,25 @@ public class JMPrintThread implements Runnable {
 
     @Override
     public void run() {
-        Socket socket = null;
         try {
+            log.info("start print:{}",JSONUtil.toJsonStr(printBO));
             SystemObject.printFactory.handler(SysConfig.serialSetting.getPrint().getBrand()).close();
-            socket = new Socket(SysConfig.serialSetting.getPrint().getIp(), SysConfig.serialSetting.getPrint().getPort());
-            socket.setSoTimeout(3000);
-            boolean result = socket.isConnected();
-            if (!result) {
-                log.error("打印机:{},连接异常", SysConfig.serialSetting.getPrint().getIp());
-                return;
-            }
-            // 获取输出流
-            OutputStream outputStream = socket.getOutputStream();
             Charset charset = Charset.forName("GBK");
-            // 发送打印命令
-            String title = printBO.getTitle() + "\n";
-            outputStream.write(EpsonCommands.initPrinter());
-            outputStream.write(EpsonCommands.mergerByteArray(
-                    EpsonCommands.printLineHeight((byte) 50),
-                    EpsonCommands.fontSizeSetBig(7),
-                    EpsonCommands.emphasizedSetting(true),
-                    EpsonCommands.alignCenter(), title.getBytes(charset)
-            ));
+            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();
+
+            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" +
@@ -65,23 +75,32 @@ public class JMPrintThread implements Runnable {
                     "备注: " + 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), EpsonCommands.feedPaperCut());
-            outputStream.write(data);
-            // 关闭连接
-            outputStream.close();
-
+                    str, EpsonCommands.printLineFeed((byte) 1));
+            escpos.write(data, 0, data.length);
+            String base64Img = SysConfig.serialSetting.getPrint().getChapter();
+            if (StrUtil.isNotEmpty(base64Img)) {
+                BufferedImage githubBufferedImage = ImageIO
+                        .read(new ByteArrayInputStream(Base64Decoder.decode(base64Img)));
+                EscPosImage escposImage = new EscPosImage(new CoffeeImageImpl(githubBufferedImage), algorithm);
+                BitImageWrapper imageWrapper = new BitImageWrapper();
+                imageWrapper.setMode(BitImageWrapper.BitImageMode._24DotDoubleDensity_Default);
+                escpos.write(imageWrapper, escposImage);
+            }
+            escpos.feed(5);
+            escpos.cut(EscPos.CutMode.FULL);
+            escpos.close();
             log.info("print done======:{}", JSONUtil.toJsonStr(printBO));
+            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);
         } catch (IOException e) {
             throw new RuntimeException(e);
-        } finally {
-            if (socket != null) {
-                try {
-                    socket.close();
-                } catch (IOException e) {
-                    throw new RuntimeException(e);
-                }
-            }
         }
 
     }

+ 90 - 0
src/main/java/com/gzlh/device/print/test/JMPrintThreadB.java

@@ -0,0 +1,90 @@
+package com.gzlh.device.print.test;
+
+import cn.hutool.core.thread.ThreadUtil;
+import cn.hutool.json.JSONUtil;
+import com.gzlh.bus.SysConfig;
+import com.gzlh.config.SystemObject;
+import com.gzlh.device.print.bo.BeiHaiWeightReport;
+import com.gzlh.utils.EpsonCommands;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.nio.charset.Charset;
+
+/**
+ * 映美打印机
+ */
+@Slf4j
+public class JMPrintThreadB implements Runnable {
+
+    private BeiHaiWeightReport printBO;
+
+    public JMPrintThreadB(BeiHaiWeightReport printBO) {
+        this.printBO = printBO;
+    }
+
+    @Override
+    public void run() {
+        Socket socket = null;
+        try {
+            SystemObject.printFactory.handler(SysConfig.serialSetting.getPrint().getBrand()).close();
+            socket = new Socket(SysConfig.serialSetting.getPrint().getIp(), SysConfig.serialSetting.getPrint().getPort());
+            socket.setSoTimeout(3000);
+            boolean result = socket.isConnected();
+            if (!result) {
+                log.error("打印机:{},连接异常", SysConfig.serialSetting.getPrint().getIp());
+                return;
+            }
+            // 获取输出流
+            OutputStream outputStream = socket.getOutputStream();
+            Charset charset = Charset.forName("GBK");
+            // 发送打印命令
+            String title = printBO.getTitle() + "\n";
+            outputStream.write(EpsonCommands.initPrinter());
+            outputStream.write(EpsonCommands.mergerByteArray(
+                    EpsonCommands.printLineHeight((byte) 50),
+                    EpsonCommands.fontSizeSetBig(7),
+                    EpsonCommands.emphasizedSetting(true),
+                    EpsonCommands.alignCenter(), title.getBytes(charset)
+            ));
+
+            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.emphasizedSetting(false), EpsonCommands.alignLeft(),
+                    str, EpsonCommands.printLineFeed((byte) 1), EpsonCommands.feedPaperCut());
+            outputStream.write(data);
+            // 关闭连接
+            outputStream.close();
+
+            log.info("print done======:{}", JSONUtil.toJsonStr(printBO));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (socket != null) {
+                try {
+                    socket.close();
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        }
+
+    }
+
+}

+ 6 - 5
src/main/java/com/gzlh/device/weighbridge/handler/impl/WeighbridgeHandlerTuoLiDuo.java

@@ -110,6 +110,7 @@ public class WeighbridgeHandlerTuoLiDuo implements IWeighbridgeHandler {
             msg = StrUtil.replace(msg, "0090", "0010");
             msg = StrUtil.replace(msg, "0018", "0010");
             msg = StrUtil.replace(msg, "00 10", "0010");
+            msg = StrUtil.replace(msg, "0012", "0010");
             msg = StrUtil.subBefore(msg, " ", true);
             msg = StrUtil.subAfter(msg, " ", false);
             List<String> list = StrUtil.split(msg, "0010");
@@ -137,11 +138,11 @@ public class WeighbridgeHandlerTuoLiDuo implements IWeighbridgeHandler {
 //                "\u000210  40080    00\n" +
 //                "\u000210  40080    00\n" +
 //                "\u000210  40080    00";
-        String msg = "0  16080    00\n" +
-                "\u000210  16080    00\n" +
-                "\u000210  16080    00\n" +
-                "\u000210  16080    00\n" +
-                "\u000210  16080    00";
+        String msg = "8  44340    00\n" +
+                "\u000218  43900    00\n" +
+                "\u000218  43840    00\n" +
+                "\u000218  43300    00\n" +
+                "\u000218  42860    00";
         msg = StrUtil.removeAll(msg, "\u0002");
         msg = StrUtil.removeAll(msg, "\r");
         msg = StrUtil.removeAll(msg, "\n");

+ 14 - 8
src/main/java/com/gzlh/entity/ReqBO.java

@@ -39,6 +39,10 @@ public class ReqBO implements Serializable {
      */
     private String poleResult = "0";
     /**
+     * 核辐射检测
+     */
+    private String radiation = "0";
+    /**
      * 电子车牌 ERI
      */
     private String eri = "";
@@ -132,22 +136,24 @@ public class ReqBO implements Serializable {
 
     public static void main(String[] args) {
         //内港
-        String placeCode = "NA02";
-        String carNo = "桂ED000";
-        Double weight = 40000D;
+        String placeCode = "DLP02";
+        String carNo = "桂N12345";
+        Double weight = 25000D;
         ReqBO reqBO = new ReqBO();
-        reqBO.setChannelCode(placeCode)
-                .setCarNo(carNo).setId("15910")
+        reqBO.setChannelCode(placeCode).setId("16122")
+                .setCarNo(carNo)
                 .setGatherTime(new Date())
                 .setEri("G1D5425873")
+                .setRadiation("0")
                 .setWeight(weight)
                 .setCarImg("http://localhost.jpg");
         String str = JSONUtil.toJsonStr(reqBO);
 //        System.out.println(str);
         System.out.println(WordHandlerUtils.AESEncrypt(str));
-        System.out.println(HexUtil.encodeHexStr("esc"));
-        char i=1;
-        System.out.println(i==1);
+//        System.out.println(HexUtil.encodeHexStr("esc"));
+
+        String s="蓝桂AR0R18";
+
     }
 
 }

+ 2 - 2
src/main/java/com/gzlh/startup/StartupRunner.java

@@ -130,7 +130,7 @@ public class StartupRunner implements CommandLineRunner {
         if (SysConfig.serialSetting.getPrint() != null && SysConfig.serialSetting.getPrint().isEnable()) {
             ThreadUtil.execute(() -> printNettyConfig.connect());
             long initialDelay = 10;
-            long period = 30; // 10秒
+            long period = 5; // 10秒
             scheduler.scheduleAtFixedRate(new CheckPrintOnlineTask(), initialDelay, period, TimeUnit.SECONDS);
         }
         if (serialSetting.getElectron().getEnable()) {
@@ -155,7 +155,7 @@ public class StartupRunner implements CommandLineRunner {
                     long initialDelay = 10000;
                     long period = 5000; // 5秒
                     scheduler.scheduleAtFixedRate(new CheckCaptureStatusTask(), initialDelay, period, TimeUnit.MILLISECONDS);
-                    HKCacheManager.add(ModuleEnum.CAPTURE_MODULE, userId);
+                    HKCacheManager.add(ModuleEnum.CAPTURE_MODULE, result);
                     //taskService.addTask(new CheckInitTask(RandomUtil.randomNumbers(16), 10000, 0));
                 } else {
                     DeviceCache.changeDeviceStatus(ModuleEnum.CAPTURE_MODULE.getModuleZh(), 0, result.getMsg());

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

@@ -732,6 +732,7 @@ public class EpsonCommands {
         return result;
     }
 
+
     /**
      * 字体变大为标准的n倍
      *