Commit 1b4276e63647227926e303e2445bd145de599524
Merge branch 'minhang' of http://222.66.0.204:8090//panzhaov5/bsth_control into minhang
Showing
14 changed files
with
894 additions
and
774 deletions
Too many changes to show.
To preserve performance only 14 of 18 files are displayed.
src/main/java/com/bsth/XDApplication.java
| 1 | -package com.bsth; | ||
| 2 | - | ||
| 3 | -import com.bsth.data.BasicData; | ||
| 4 | -import com.bsth.data.ThreadMonotor; | ||
| 5 | -import com.bsth.data.car_out_info.UpdateDBThread; | ||
| 6 | -import com.bsth.data.directive.DirectivesPstThread; | ||
| 7 | -import com.bsth.data.gpsdata.thread.GpsDataLoaderThread; | ||
| 8 | -import com.bsth.data.gpsdata.thread.OfflineMonitorThread; | ||
| 9 | -import com.bsth.data.schedule.late_adjust.ScheduleLateThread; | ||
| 10 | -import com.bsth.data.schedule.thread.CalcOilThread; | ||
| 11 | -import com.bsth.data.schedule.thread.SchedulePstThread; | ||
| 12 | -import com.bsth.data.schedule.thread.ScheduleRefreshThread; | ||
| 13 | -import com.bsth.data.schedule.thread.SubmitToTrafficManage; | ||
| 14 | -import com.bsth.util.DateUtils; | ||
| 15 | -import com.bsth.util.Tools; | ||
| 16 | -import org.slf4j.Logger; | ||
| 17 | -import org.slf4j.LoggerFactory; | ||
| 18 | -import org.springframework.beans.factory.annotation.Autowired; | ||
| 19 | -import org.springframework.boot.CommandLineRunner; | ||
| 20 | -import org.springframework.stereotype.Component; | ||
| 21 | - | ||
| 22 | -import java.util.concurrent.ScheduledExecutorService; | ||
| 23 | -import java.util.concurrent.TimeUnit; | ||
| 24 | - | ||
| 25 | -/** | ||
| 26 | - * 线调大部分服务都在这里启动 | ||
| 27 | - * Created by panzhao on 2017/5/14. | ||
| 28 | - */ | ||
| 29 | -@Component | ||
| 30 | -public class XDApplication implements CommandLineRunner { | ||
| 31 | - | ||
| 32 | - Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 33 | - | ||
| 34 | - @Autowired | ||
| 35 | - BasicData.BasicDataLoader basicDataLoader; | ||
| 36 | - @Autowired | ||
| 37 | - UpdateDBThread fcxxUpdateThread; | ||
| 38 | - @Autowired | ||
| 39 | - GpsDataLoaderThread gpsDataLoader; | ||
| 40 | - @Autowired | ||
| 41 | - OfflineMonitorThread offlineMonitorThread; | ||
| 42 | - @Autowired | ||
| 43 | - ScheduleRefreshThread scheduleRefreshThread; | ||
| 44 | - @Autowired | ||
| 45 | - SchedulePstThread schedulePstThread; | ||
| 46 | - @Autowired | ||
| 47 | - ScheduleLateThread scheduleLateThread; | ||
| 48 | - @Autowired | ||
| 49 | - SubmitToTrafficManage submitToTrafficManage; | ||
| 50 | - @Autowired | ||
| 51 | - CalcOilThread calcOilThread; | ||
| 52 | - @Autowired | ||
| 53 | - DirectivesPstThread directivesPstThread; | ||
| 54 | - @Autowired | ||
| 55 | - ThreadMonotor threadMonotor; | ||
| 56 | - | ||
| 57 | - private static long timeDiff; | ||
| 58 | - | ||
| 59 | - static { | ||
| 60 | - timeDiff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis(); | ||
| 61 | - if (timeDiff < 0) | ||
| 62 | - timeDiff += (1000 * 60 * 60 * 24); | ||
| 63 | - } | ||
| 64 | - | ||
| 65 | - @Override | ||
| 66 | - public void run(String... strings) throws Exception { | ||
| 67 | - try { | ||
| 68 | - Tools tools = new Tools("application.properties"); | ||
| 69 | - String environment = tools.getValue("spring.profiles.active"); | ||
| 70 | - //预先加载基础的对照数据 | ||
| 71 | - basicDataLoader.loadAllData(); | ||
| 72 | - switch (environment){ | ||
| 73 | - case "dev": | ||
| 74 | - devInit(); | ||
| 75 | - break; | ||
| 76 | - case "prod": | ||
| 77 | - prodInit(); | ||
| 78 | - break; | ||
| 79 | - } | ||
| 80 | - }catch (Exception e){ | ||
| 81 | - log.error("线调后台启动出现异常!!", e); | ||
| 82 | - System.exit(1); | ||
| 83 | - } | ||
| 84 | - } | ||
| 85 | - | ||
| 86 | - public void devInit(){ | ||
| 87 | - ScheduledExecutorService sexec = Application.mainServices; | ||
| 88 | - //抓取GPS数据 | ||
| 89 | - gpsDataLoader.setFlag(-1); | ||
| 90 | - sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS); | ||
| 91 | - //实际排班更新线程 | ||
| 92 | - sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); | ||
| 93 | - //实际排班延迟入库线程 | ||
| 94 | - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 30, TimeUnit.SECONDS); | ||
| 95 | - | ||
| 96 | - //线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作) | ||
| 97 | - sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS); | ||
| 98 | - } | ||
| 99 | - | ||
| 100 | - public void prodInit(){ | ||
| 101 | - ScheduledExecutorService sexec = Application.mainServices; | ||
| 102 | - //发车信息 | ||
| 103 | - sexec.scheduleWithFixedDelay(fcxxUpdateThread, 60, 40, TimeUnit.SECONDS); | ||
| 104 | - //抓取GPS数据 | ||
| 105 | - sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS); | ||
| 106 | - //检查设备掉离线 | ||
| 107 | - sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS); | ||
| 108 | - //实际排班更新线程 | ||
| 109 | - sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); | ||
| 110 | - //实际排班延迟入库线程 | ||
| 111 | - sexec.scheduleWithFixedDelay(schedulePstThread, 60, 30, TimeUnit.SECONDS); | ||
| 112 | - //检查班次误点 | ||
| 113 | - sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS); | ||
| 114 | - //调度指令延迟入库 | ||
| 115 | - sexec.scheduleWithFixedDelay(directivesPstThread, 180, 180, TimeUnit.SECONDS); | ||
| 116 | - | ||
| 117 | - //运管处静态数据提交 | ||
| 118 | - log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处"); | ||
| 119 | - sexec.scheduleAtFixedRate(submitToTrafficManage, timeDiff / 1000, 60 * 60 * 24, TimeUnit.SECONDS); | ||
| 120 | - //计算油、公里加注 | ||
| 121 | - sexec.scheduleAtFixedRate(calcOilThread, timeDiff / 1000, 60 * 60 * 24, TimeUnit.SECONDS); | ||
| 122 | - | ||
| 123 | - //线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作) | ||
| 124 | - sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS); | ||
| 125 | - } | ||
| 126 | -} | 1 | +package com.bsth; |
| 2 | + | ||
| 3 | +import com.bsth.data.BasicData; | ||
| 4 | +import com.bsth.data.ThreadMonotor; | ||
| 5 | +import com.bsth.data.car_out_info.UpdateDBThread; | ||
| 6 | +import com.bsth.data.directive.DirectivesPstThread; | ||
| 7 | +import com.bsth.data.gpsdata.thread.GpsDataLoaderThread; | ||
| 8 | +import com.bsth.data.gpsdata.thread.OfflineMonitorThread; | ||
| 9 | +import com.bsth.data.schedule.late_adjust.ScheduleLateThread; | ||
| 10 | +import com.bsth.data.schedule.thread.CalcOilThread; | ||
| 11 | +import com.bsth.data.schedule.thread.SchedulePstThread; | ||
| 12 | +import com.bsth.data.schedule.thread.ScheduleRefreshThread; | ||
| 13 | +import com.bsth.data.schedule.thread.SubmitToTrafficManage; | ||
| 14 | +import com.bsth.util.DateUtils; | ||
| 15 | +import com.bsth.util.Tools; | ||
| 16 | +import org.slf4j.Logger; | ||
| 17 | +import org.slf4j.LoggerFactory; | ||
| 18 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 19 | +import org.springframework.boot.CommandLineRunner; | ||
| 20 | +import org.springframework.stereotype.Component; | ||
| 21 | + | ||
| 22 | +import java.util.concurrent.ScheduledExecutorService; | ||
| 23 | +import java.util.concurrent.TimeUnit; | ||
| 24 | + | ||
| 25 | +/** | ||
| 26 | + * 线调大部分服务都在这里启动 | ||
| 27 | + * Created by panzhao on 2017/5/14. | ||
| 28 | + */ | ||
| 29 | +@Component | ||
| 30 | +public class XDApplication implements CommandLineRunner { | ||
| 31 | + | ||
| 32 | + Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 33 | + | ||
| 34 | + @Autowired | ||
| 35 | + BasicData.BasicDataLoader basicDataLoader; | ||
| 36 | + @Autowired | ||
| 37 | + UpdateDBThread fcxxUpdateThread; | ||
| 38 | + @Autowired | ||
| 39 | + GpsDataLoaderThread gpsDataLoader; | ||
| 40 | + @Autowired | ||
| 41 | + OfflineMonitorThread offlineMonitorThread; | ||
| 42 | + @Autowired | ||
| 43 | + ScheduleRefreshThread scheduleRefreshThread; | ||
| 44 | + @Autowired | ||
| 45 | + SchedulePstThread schedulePstThread; | ||
| 46 | + @Autowired | ||
| 47 | + ScheduleLateThread scheduleLateThread; | ||
| 48 | + @Autowired | ||
| 49 | + SubmitToTrafficManage submitToTrafficManage; | ||
| 50 | + @Autowired | ||
| 51 | + CalcOilThread calcOilThread; | ||
| 52 | + @Autowired | ||
| 53 | + DirectivesPstThread directivesPstThread; | ||
| 54 | + @Autowired | ||
| 55 | + ThreadMonotor threadMonotor; | ||
| 56 | + | ||
| 57 | + private static long timeDiff; | ||
| 58 | + | ||
| 59 | + static { | ||
| 60 | + timeDiff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis(); | ||
| 61 | + if (timeDiff < 0) | ||
| 62 | + timeDiff += (1000 * 60 * 60 * 24); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @Override | ||
| 66 | + public void run(String... strings) throws Exception { | ||
| 67 | + try { | ||
| 68 | + Tools tools = new Tools("application.properties"); | ||
| 69 | + String environment = tools.getValue("spring.profiles.active"); | ||
| 70 | + //预先加载基础的对照数据 | ||
| 71 | + basicDataLoader.loadAllData(); | ||
| 72 | + switch (environment){ | ||
| 73 | + case "dev": | ||
| 74 | + devInit(); | ||
| 75 | + break; | ||
| 76 | + case "prod": | ||
| 77 | + prodInit(); | ||
| 78 | + break; | ||
| 79 | + } | ||
| 80 | + }catch (Exception e){ | ||
| 81 | + log.error("线调后台启动出现异常!!", e); | ||
| 82 | + System.exit(1); | ||
| 83 | + } | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + public void devInit(){ | ||
| 87 | + ScheduledExecutorService sexec = Application.mainServices; | ||
| 88 | + //抓取GPS数据 | ||
| 89 | + gpsDataLoader.setFlag(-1); | ||
| 90 | + sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS); | ||
| 91 | + //实际排班更新线程 | ||
| 92 | + sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); | ||
| 93 | + //实际排班延迟入库线程 | ||
| 94 | + sexec.scheduleWithFixedDelay(schedulePstThread, 60, 30, TimeUnit.SECONDS); | ||
| 95 | + | ||
| 96 | + //线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作) | ||
| 97 | + sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + public void prodInit(){ | ||
| 101 | + ScheduledExecutorService sexec = Application.mainServices; | ||
| 102 | + //发车信息 | ||
| 103 | + sexec.scheduleWithFixedDelay(fcxxUpdateThread, 60, 40, TimeUnit.SECONDS); | ||
| 104 | + //抓取GPS数据 | ||
| 105 | + sexec.scheduleWithFixedDelay(gpsDataLoader, 30, 2, TimeUnit.SECONDS); | ||
| 106 | + //检查设备掉离线 | ||
| 107 | + sexec.scheduleWithFixedDelay(offlineMonitorThread, 120, 60, TimeUnit.SECONDS); | ||
| 108 | + //实际排班更新线程 | ||
| 109 | + sexec.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); | ||
| 110 | + //实际排班延迟入库线程 | ||
| 111 | + sexec.scheduleWithFixedDelay(schedulePstThread, 60, 30, TimeUnit.SECONDS); | ||
| 112 | + //检查班次误点 | ||
| 113 | + sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS); | ||
| 114 | + //调度指令延迟入库 | ||
| 115 | + sexec.scheduleWithFixedDelay(directivesPstThread, 180, 180, TimeUnit.SECONDS); | ||
| 116 | + | ||
| 117 | + //运管处静态数据提交 | ||
| 118 | + log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处"); | ||
| 119 | + sexec.scheduleAtFixedRate(submitToTrafficManage, timeDiff / 1000, 60 * 60 * 24, TimeUnit.SECONDS); | ||
| 120 | + //计算油、公里加注 | ||
| 121 | + sexec.scheduleAtFixedRate(calcOilThread, timeDiff / 1000, 60 * 60 * 24, TimeUnit.SECONDS); | ||
| 122 | + | ||
| 123 | + //线程监听(防止重要的线程阻塞、异常结束。以及部分主备切换工作) | ||
| 124 | + sexec.scheduleWithFixedDelay(threadMonotor, 240, 60, TimeUnit.SECONDS); | ||
| 125 | + } | ||
| 126 | +} |
src/main/java/com/bsth/data/ThreadMonotor.java
| 1 | -package com.bsth.data; | ||
| 2 | - | ||
| 3 | -import com.bsth.data.gpsdata.arrival.GpsRealAnalyse; | ||
| 4 | -import com.bsth.data.gpsdata.thread.GpsDataLoaderThread; | ||
| 5 | -import com.bsth.data.msg_queue.DirectivePushQueue; | ||
| 6 | -import com.bsth.data.msg_queue.WebSocketPushQueue; | ||
| 7 | -import org.slf4j.Logger; | ||
| 8 | -import org.slf4j.LoggerFactory; | ||
| 9 | -import org.springframework.stereotype.Component; | ||
| 10 | - | ||
| 11 | -/** | ||
| 12 | - * Created by panzhao on 2017/5/11. | ||
| 13 | - */ | ||
| 14 | -@Component | ||
| 15 | -public class ThreadMonotor extends Thread{ | ||
| 16 | - | ||
| 17 | - Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 18 | - | ||
| 19 | - @Override | ||
| 20 | - public void run() { | ||
| 21 | - | ||
| 22 | - //线调GPS分析主线程 | ||
| 23 | - if(GpsRealAnalyse.isBlock()){ | ||
| 24 | - log.warn("GpsRealAnalyse isBlock true !!!!"); | ||
| 25 | - GpsRealAnalyse.shutdown(); | ||
| 26 | - } | ||
| 27 | - | ||
| 28 | - if(GpsRealAnalyse.isIdle()){ | ||
| 29 | - //尝试使用网关的GPS实时对照数据 | ||
| 30 | - GpsDataLoaderThread.setFlag(-1); | ||
| 31 | - } | ||
| 32 | - | ||
| 33 | - //webSocket 消息推送队列 | ||
| 34 | - if(WebSocketPushQueue.isIdle()){ | ||
| 35 | - log.warn("WebSocketPushQueue isIdle true !!!!"); | ||
| 36 | - WebSocketPushQueue.start(); | ||
| 37 | - } | ||
| 38 | - | ||
| 39 | - //网关指令推送队列(系统自动发送的) | ||
| 40 | - if(DirectivePushQueue.isIdle()){ | ||
| 41 | - log.warn("DirectivePushQueue isIdle true !!!!"); | ||
| 42 | - DirectivePushQueue.start(); | ||
| 43 | - } | ||
| 44 | - } | ||
| 45 | -} | 1 | +package com.bsth.data; |
| 2 | + | ||
| 3 | +import com.bsth.data.gpsdata.arrival.GpsRealAnalyse; | ||
| 4 | +import com.bsth.data.gpsdata.thread.GpsDataLoaderThread; | ||
| 5 | +import com.bsth.data.msg_queue.DirectivePushQueue; | ||
| 6 | +import com.bsth.data.msg_queue.WebSocketPushQueue; | ||
| 7 | +import org.slf4j.Logger; | ||
| 8 | +import org.slf4j.LoggerFactory; | ||
| 9 | +import org.springframework.stereotype.Component; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * Created by panzhao on 2017/5/11. | ||
| 13 | + */ | ||
| 14 | +@Component | ||
| 15 | +public class ThreadMonotor extends Thread{ | ||
| 16 | + | ||
| 17 | + Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 18 | + | ||
| 19 | + @Override | ||
| 20 | + public void run() { | ||
| 21 | + | ||
| 22 | + //线调GPS分析主线程 | ||
| 23 | + if(GpsRealAnalyse.isBlock()){ | ||
| 24 | + log.warn("GpsRealAnalyse isBlock true !!!!"); | ||
| 25 | + GpsRealAnalyse.shutdown(); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + if(GpsRealAnalyse.isIdle()){ | ||
| 29 | + //尝试使用网关的GPS实时对照数据 | ||
| 30 | + GpsDataLoaderThread.setFlag(-1); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + //webSocket 消息推送队列 | ||
| 34 | + if(WebSocketPushQueue.isIdle()){ | ||
| 35 | + log.warn("WebSocketPushQueue isIdle true !!!!"); | ||
| 36 | + WebSocketPushQueue.start(); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + //网关指令推送队列(系统自动发送的) | ||
| 40 | + if(DirectivePushQueue.isIdle()){ | ||
| 41 | + log.warn("DirectivePushQueue isIdle true !!!!"); | ||
| 42 | + DirectivePushQueue.start(); | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | +} |
src/main/java/com/bsth/data/car_out_info/UpdateDBThread.java
| 1 | -package com.bsth.data.car_out_info; | ||
| 2 | - | ||
| 3 | -import org.springframework.beans.factory.annotation.Autowired; | ||
| 4 | -import org.springframework.stereotype.Component; | ||
| 5 | - | ||
| 6 | -/** | ||
| 7 | - * 数据库发车信息表更新线程 | ||
| 8 | - * Created by panzhao on 2017/5/14. | ||
| 9 | - */ | ||
| 10 | -@Component | ||
| 11 | -public class UpdateDBThread extends Thread{ | ||
| 12 | - | ||
| 13 | - @Autowired | ||
| 14 | - CarOutInfoHandler carOutInfoHandler; | ||
| 15 | - | ||
| 16 | - @Override | ||
| 17 | - public void run() { | ||
| 18 | - carOutInfoHandler.updateAll(); | ||
| 19 | - } | ||
| 20 | -} | 1 | +package com.bsth.data.car_out_info; |
| 2 | + | ||
| 3 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 4 | +import org.springframework.stereotype.Component; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * 数据库发车信息表更新线程 | ||
| 8 | + * Created by panzhao on 2017/5/14. | ||
| 9 | + */ | ||
| 10 | +@Component | ||
| 11 | +public class UpdateDBThread extends Thread{ | ||
| 12 | + | ||
| 13 | + @Autowired | ||
| 14 | + CarOutInfoHandler carOutInfoHandler; | ||
| 15 | + | ||
| 16 | + @Override | ||
| 17 | + public void run() { | ||
| 18 | + carOutInfoHandler.updateAll(); | ||
| 19 | + } | ||
| 20 | +} |
src/main/java/com/bsth/data/msg_queue/DirectivePushQueue.java
| 1 | -package com.bsth.data.msg_queue; | ||
| 2 | - | ||
| 3 | -import com.bsth.entity.realcontrol.ScheduleRealInfo; | ||
| 4 | -import com.bsth.service.directive.DirectiveService; | ||
| 5 | -import org.slf4j.Logger; | ||
| 6 | -import org.slf4j.LoggerFactory; | ||
| 7 | -import org.springframework.beans.BeansException; | ||
| 8 | -import org.springframework.boot.CommandLineRunner; | ||
| 9 | -import org.springframework.context.ApplicationContext; | ||
| 10 | -import org.springframework.context.ApplicationContextAware; | ||
| 11 | -import org.springframework.stereotype.Component; | ||
| 12 | - | ||
| 13 | -import java.util.LinkedList; | ||
| 14 | - | ||
| 15 | -/** | ||
| 16 | - * 到网关的指令推送队列 (系统发送的队列, 用户手动发送的不走这里) | ||
| 17 | - * Created by panzhao on 2017/5/11. | ||
| 18 | - */ | ||
| 19 | -@Component | ||
| 20 | -public class DirectivePushQueue implements CommandLineRunner, ApplicationContextAware { | ||
| 21 | - | ||
| 22 | - static LinkedList<QueueData_Directive> linkedList; | ||
| 23 | - static DataPushThread thread; | ||
| 24 | - static DirectiveService directiveService; | ||
| 25 | - static long t; | ||
| 26 | - static final int IDLE_TIME = 1000 * 30; | ||
| 27 | - | ||
| 28 | - static { | ||
| 29 | - linkedList = new LinkedList<>(); | ||
| 30 | - } | ||
| 31 | - | ||
| 32 | - public static void put6002(ScheduleRealInfo sch, int finish, String sender){ | ||
| 33 | - QueueData_Directive qd6002 = new QueueData_Directive(); | ||
| 34 | - qd6002.setSch(sch); | ||
| 35 | - qd6002.setFinish(finish); | ||
| 36 | - qd6002.setSender(sender); | ||
| 37 | - qd6002.setCode("60_02"); | ||
| 38 | - | ||
| 39 | - linkedList.add(qd6002); | ||
| 40 | - } | ||
| 41 | - | ||
| 42 | - public static void put6003(String nbbm, int state, int upDown, ScheduleRealInfo sch, String sender){ | ||
| 43 | - QueueData_Directive qd6003 = new QueueData_Directive(); | ||
| 44 | - qd6003.setNbbm(nbbm); | ||
| 45 | - qd6003.setState(state); | ||
| 46 | - qd6003.setUpDown(upDown); | ||
| 47 | - qd6003.setSch(sch); | ||
| 48 | - qd6003.setSender(sender); | ||
| 49 | - | ||
| 50 | - qd6003.setCode("60_03"); | ||
| 51 | - | ||
| 52 | - linkedList.add(qd6003); | ||
| 53 | - } | ||
| 54 | - | ||
| 55 | - public static void put64(String nbbm, String lineCode, String sender){ | ||
| 56 | - QueueData_Directive qd64 = new QueueData_Directive(); | ||
| 57 | - qd64.setNbbm(nbbm); | ||
| 58 | - qd64.setLineCode(lineCode); | ||
| 59 | - qd64.setSender(sender); | ||
| 60 | - | ||
| 61 | - qd64.setCode("64"); | ||
| 62 | - | ||
| 63 | - linkedList.add(qd64); | ||
| 64 | - } | ||
| 65 | - | ||
| 66 | - public static boolean isIdle(){ | ||
| 67 | - return System.currentTimeMillis() - t > IDLE_TIME; | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - public static void start(){ | ||
| 71 | - if(thread != null){ | ||
| 72 | - thread.interrupt(); | ||
| 73 | - } | ||
| 74 | - thread = new DataPushThread(); | ||
| 75 | - thread.start(); | ||
| 76 | - } | ||
| 77 | - | ||
| 78 | - @Override | ||
| 79 | - public void run(String... strings) throws Exception { | ||
| 80 | - start(); | ||
| 81 | - } | ||
| 82 | - | ||
| 83 | - @Override | ||
| 84 | - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { | ||
| 85 | - directiveService = applicationContext.getBean(DirectiveService.class); | ||
| 86 | - } | ||
| 87 | - | ||
| 88 | - public static class DataPushThread extends Thread { | ||
| 89 | - | ||
| 90 | - Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 91 | - | ||
| 92 | - @Override | ||
| 93 | - public void run() { | ||
| 94 | - boolean sleepFlag = false; | ||
| 95 | - QueueData_Directive qd; | ||
| 96 | - String code; | ||
| 97 | - while (true) { | ||
| 98 | - try { | ||
| 99 | - qd = linkedList.pollFirst(); | ||
| 100 | - if (qd != null) { | ||
| 101 | - sleepFlag = false; | ||
| 102 | - code = qd.getCode(); | ||
| 103 | - | ||
| 104 | - if(code.equals("60_02")){ | ||
| 105 | - directiveService.send60Dispatch(qd.getSch(), qd.getFinish(), qd.getSender()); | ||
| 106 | - log.info("directive 60_02 sch id: " + qd.getSch().getId()); | ||
| 107 | - } | ||
| 108 | - else if(code.equals("60_03")){ | ||
| 109 | - directiveService.send60Operation(qd.getNbbm(), qd.getState(), qd.getUpDown(), null, qd.getSender()); | ||
| 110 | - log.info("directive 60_03 nbbm: " + qd.getNbbm()); | ||
| 111 | - } | ||
| 112 | - else if(code.equals("64")){ | ||
| 113 | - directiveService.lineChange(qd.getNbbm(), qd.getLineCode(), qd.getSender()); | ||
| 114 | - log.info("directive 64 nbbm: " + qd.getNbbm() + " lineCode: " + qd.getLineCode()); | ||
| 115 | - } | ||
| 116 | - | ||
| 117 | - } else{ | ||
| 118 | - Thread.sleep(500); | ||
| 119 | - if(!sleepFlag){ | ||
| 120 | - log.info("sleep..."); | ||
| 121 | - sleepFlag = true; | ||
| 122 | - } | ||
| 123 | - } | ||
| 124 | - t = System.currentTimeMillis(); | ||
| 125 | - } | ||
| 126 | - catch(InterruptedException e){ | ||
| 127 | - break; | ||
| 128 | - } | ||
| 129 | - catch (Exception e) { | ||
| 130 | - log.error("", e); | ||
| 131 | - } | ||
| 132 | - | ||
| 133 | - } | ||
| 134 | - } | ||
| 135 | - } | ||
| 136 | -} | 1 | +package com.bsth.data.msg_queue; |
| 2 | + | ||
| 3 | +import com.bsth.entity.realcontrol.ScheduleRealInfo; | ||
| 4 | +import com.bsth.service.directive.DirectiveService; | ||
| 5 | +import org.slf4j.Logger; | ||
| 6 | +import org.slf4j.LoggerFactory; | ||
| 7 | +import org.springframework.beans.BeansException; | ||
| 8 | +import org.springframework.boot.CommandLineRunner; | ||
| 9 | +import org.springframework.context.ApplicationContext; | ||
| 10 | +import org.springframework.context.ApplicationContextAware; | ||
| 11 | +import org.springframework.stereotype.Component; | ||
| 12 | + | ||
| 13 | +import java.util.LinkedList; | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * 到网关的指令推送队列 (系统发送的队列, 用户手动发送的不走这里) | ||
| 17 | + * Created by panzhao on 2017/5/11. | ||
| 18 | + */ | ||
| 19 | +@Component | ||
| 20 | +public class DirectivePushQueue implements CommandLineRunner, ApplicationContextAware { | ||
| 21 | + | ||
| 22 | + static LinkedList<QueueData_Directive> linkedList; | ||
| 23 | + static DataPushThread thread; | ||
| 24 | + static DirectiveService directiveService; | ||
| 25 | + static long t; | ||
| 26 | + static final int IDLE_TIME = 1000 * 30; | ||
| 27 | + | ||
| 28 | + static { | ||
| 29 | + linkedList = new LinkedList<>(); | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + public static void put6002(ScheduleRealInfo sch, int finish, String sender){ | ||
| 33 | + QueueData_Directive qd6002 = new QueueData_Directive(); | ||
| 34 | + qd6002.setSch(sch); | ||
| 35 | + qd6002.setFinish(finish); | ||
| 36 | + qd6002.setSender(sender); | ||
| 37 | + qd6002.setCode("60_02"); | ||
| 38 | + | ||
| 39 | + linkedList.add(qd6002); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + public static void put6003(String nbbm, int state, int upDown, ScheduleRealInfo sch, String sender){ | ||
| 43 | + QueueData_Directive qd6003 = new QueueData_Directive(); | ||
| 44 | + qd6003.setNbbm(nbbm); | ||
| 45 | + qd6003.setState(state); | ||
| 46 | + qd6003.setUpDown(upDown); | ||
| 47 | + qd6003.setSch(sch); | ||
| 48 | + qd6003.setSender(sender); | ||
| 49 | + | ||
| 50 | + qd6003.setCode("60_03"); | ||
| 51 | + | ||
| 52 | + linkedList.add(qd6003); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + public static void put64(String nbbm, String lineCode, String sender){ | ||
| 56 | + QueueData_Directive qd64 = new QueueData_Directive(); | ||
| 57 | + qd64.setNbbm(nbbm); | ||
| 58 | + qd64.setLineCode(lineCode); | ||
| 59 | + qd64.setSender(sender); | ||
| 60 | + | ||
| 61 | + qd64.setCode("64"); | ||
| 62 | + | ||
| 63 | + linkedList.add(qd64); | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + public static boolean isIdle(){ | ||
| 67 | + return System.currentTimeMillis() - t > IDLE_TIME; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + public static void start(){ | ||
| 71 | + if(thread != null){ | ||
| 72 | + thread.interrupt(); | ||
| 73 | + } | ||
| 74 | + thread = new DataPushThread(); | ||
| 75 | + thread.start(); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + @Override | ||
| 79 | + public void run(String... strings) throws Exception { | ||
| 80 | + start(); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @Override | ||
| 84 | + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { | ||
| 85 | + directiveService = applicationContext.getBean(DirectiveService.class); | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + public static class DataPushThread extends Thread { | ||
| 89 | + | ||
| 90 | + Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 91 | + | ||
| 92 | + @Override | ||
| 93 | + public void run() { | ||
| 94 | + boolean sleepFlag = false; | ||
| 95 | + QueueData_Directive qd; | ||
| 96 | + String code; | ||
| 97 | + while (true) { | ||
| 98 | + try { | ||
| 99 | + qd = linkedList.pollFirst(); | ||
| 100 | + if (qd != null) { | ||
| 101 | + sleepFlag = false; | ||
| 102 | + code = qd.getCode(); | ||
| 103 | + | ||
| 104 | + if(code.equals("60_02")){ | ||
| 105 | + directiveService.send60Dispatch(qd.getSch(), qd.getFinish(), qd.getSender()); | ||
| 106 | + log.info("directive 60_02 sch id: " + qd.getSch().getId()); | ||
| 107 | + } | ||
| 108 | + else if(code.equals("60_03")){ | ||
| 109 | + directiveService.send60Operation(qd.getNbbm(), qd.getState(), qd.getUpDown(), null, qd.getSender()); | ||
| 110 | + log.info("directive 60_03 nbbm: " + qd.getNbbm()); | ||
| 111 | + } | ||
| 112 | + else if(code.equals("64")){ | ||
| 113 | + directiveService.lineChange(qd.getNbbm(), qd.getLineCode(), qd.getSender()); | ||
| 114 | + log.info("directive 64 nbbm: " + qd.getNbbm() + " lineCode: " + qd.getLineCode()); | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + } else{ | ||
| 118 | + Thread.sleep(500); | ||
| 119 | + if(!sleepFlag){ | ||
| 120 | + log.info("sleep..."); | ||
| 121 | + sleepFlag = true; | ||
| 122 | + } | ||
| 123 | + } | ||
| 124 | + t = System.currentTimeMillis(); | ||
| 125 | + } | ||
| 126 | + catch(InterruptedException e){ | ||
| 127 | + break; | ||
| 128 | + } | ||
| 129 | + catch (Exception e) { | ||
| 130 | + log.error("", e); | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + } | ||
| 136 | +} |
src/main/java/com/bsth/data/msg_queue/QueueData.java
| 1 | -package com.bsth.data.msg_queue; | ||
| 2 | - | ||
| 3 | -import org.springframework.web.socket.TextMessage; | ||
| 4 | -import org.springframework.web.socket.WebSocketSession; | ||
| 5 | - | ||
| 6 | -/** | ||
| 7 | - * Created by panzhao on 2017/5/11. | ||
| 8 | - */ | ||
| 9 | -public class QueueData { | ||
| 10 | - | ||
| 11 | - private TextMessage message; | ||
| 12 | - | ||
| 13 | - private WebSocketSession session; | ||
| 14 | - | ||
| 15 | - | ||
| 16 | - public WebSocketSession getSession() { | ||
| 17 | - return session; | ||
| 18 | - } | ||
| 19 | - | ||
| 20 | - public void setSession(WebSocketSession session) { | ||
| 21 | - this.session = session; | ||
| 22 | - } | ||
| 23 | - | ||
| 24 | - public TextMessage getMessage() { | ||
| 25 | - return message; | ||
| 26 | - } | ||
| 27 | - | ||
| 28 | - public void setMessage(TextMessage message) { | ||
| 29 | - this.message = message; | ||
| 30 | - } | ||
| 31 | -} | 1 | +package com.bsth.data.msg_queue; |
| 2 | + | ||
| 3 | +import org.springframework.web.socket.TextMessage; | ||
| 4 | +import org.springframework.web.socket.WebSocketSession; | ||
| 5 | + | ||
| 6 | +/** | ||
| 7 | + * Created by panzhao on 2017/5/11. | ||
| 8 | + */ | ||
| 9 | +public class QueueData { | ||
| 10 | + | ||
| 11 | + private TextMessage message; | ||
| 12 | + | ||
| 13 | + private WebSocketSession session; | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + public WebSocketSession getSession() { | ||
| 17 | + return session; | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + public void setSession(WebSocketSession session) { | ||
| 21 | + this.session = session; | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + public TextMessage getMessage() { | ||
| 25 | + return message; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + public void setMessage(TextMessage message) { | ||
| 29 | + this.message = message; | ||
| 30 | + } | ||
| 31 | +} |
src/main/java/com/bsth/data/msg_queue/QueueData_Directive.java
| 1 | -package com.bsth.data.msg_queue; | ||
| 2 | - | ||
| 3 | -import com.bsth.entity.realcontrol.ScheduleRealInfo; | ||
| 4 | - | ||
| 5 | -/** | ||
| 6 | - * Created by panzhao on 2017/5/11. | ||
| 7 | - */ | ||
| 8 | -public class QueueData_Directive { | ||
| 9 | - | ||
| 10 | - /** | ||
| 11 | - * 指令类型 | ||
| 12 | - * 60_02 | ||
| 13 | - * 60_03 | ||
| 14 | - * 64 | ||
| 15 | - */ | ||
| 16 | - private String code; | ||
| 17 | - | ||
| 18 | - /** 60调度指令内容 60_02*/ | ||
| 19 | - private ScheduleRealInfo sch; | ||
| 20 | - private int finish; | ||
| 21 | - | ||
| 22 | - /** 60 营运指令 60_03*/ | ||
| 23 | - private String nbbm; | ||
| 24 | - private int state; | ||
| 25 | - private int upDown; | ||
| 26 | - | ||
| 27 | - /** 64指令内容 */ | ||
| 28 | - private String lineCode; | ||
| 29 | - | ||
| 30 | - private String sender; | ||
| 31 | - | ||
| 32 | - | ||
| 33 | - public ScheduleRealInfo getSch() { | ||
| 34 | - return sch; | ||
| 35 | - } | ||
| 36 | - | ||
| 37 | - public void setSch(ScheduleRealInfo sch) { | ||
| 38 | - this.sch = sch; | ||
| 39 | - } | ||
| 40 | - | ||
| 41 | - public int getFinish() { | ||
| 42 | - return finish; | ||
| 43 | - } | ||
| 44 | - | ||
| 45 | - public void setFinish(int finish) { | ||
| 46 | - this.finish = finish; | ||
| 47 | - } | ||
| 48 | - | ||
| 49 | - public String getSender() { | ||
| 50 | - return sender; | ||
| 51 | - } | ||
| 52 | - | ||
| 53 | - public void setSender(String sender) { | ||
| 54 | - this.sender = sender; | ||
| 55 | - } | ||
| 56 | - | ||
| 57 | - public String getNbbm() { | ||
| 58 | - return nbbm; | ||
| 59 | - } | ||
| 60 | - | ||
| 61 | - public void setNbbm(String nbbm) { | ||
| 62 | - this.nbbm = nbbm; | ||
| 63 | - } | ||
| 64 | - | ||
| 65 | - public int getState() { | ||
| 66 | - return state; | ||
| 67 | - } | ||
| 68 | - | ||
| 69 | - public void setState(int state) { | ||
| 70 | - this.state = state; | ||
| 71 | - } | ||
| 72 | - | ||
| 73 | - public int getUpDown() { | ||
| 74 | - return upDown; | ||
| 75 | - } | ||
| 76 | - | ||
| 77 | - public void setUpDown(int upDown) { | ||
| 78 | - this.upDown = upDown; | ||
| 79 | - } | ||
| 80 | - | ||
| 81 | - public String getCode() { | ||
| 82 | - return code; | ||
| 83 | - } | ||
| 84 | - | ||
| 85 | - public void setCode(String code) { | ||
| 86 | - this.code = code; | ||
| 87 | - } | ||
| 88 | - | ||
| 89 | - public String getLineCode() { | ||
| 90 | - return lineCode; | ||
| 91 | - } | ||
| 92 | - | ||
| 93 | - public void setLineCode(String lineCode) { | ||
| 94 | - this.lineCode = lineCode; | ||
| 95 | - } | ||
| 96 | -} | 1 | +package com.bsth.data.msg_queue; |
| 2 | + | ||
| 3 | +import com.bsth.entity.realcontrol.ScheduleRealInfo; | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | + * Created by panzhao on 2017/5/11. | ||
| 7 | + */ | ||
| 8 | +public class QueueData_Directive { | ||
| 9 | + | ||
| 10 | + /** | ||
| 11 | + * 指令类型 | ||
| 12 | + * 60_02 | ||
| 13 | + * 60_03 | ||
| 14 | + * 64 | ||
| 15 | + */ | ||
| 16 | + private String code; | ||
| 17 | + | ||
| 18 | + /** 60调度指令内容 60_02*/ | ||
| 19 | + private ScheduleRealInfo sch; | ||
| 20 | + private int finish; | ||
| 21 | + | ||
| 22 | + /** 60 营运指令 60_03*/ | ||
| 23 | + private String nbbm; | ||
| 24 | + private int state; | ||
| 25 | + private int upDown; | ||
| 26 | + | ||
| 27 | + /** 64指令内容 */ | ||
| 28 | + private String lineCode; | ||
| 29 | + | ||
| 30 | + private String sender; | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + public ScheduleRealInfo getSch() { | ||
| 34 | + return sch; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + public void setSch(ScheduleRealInfo sch) { | ||
| 38 | + this.sch = sch; | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + public int getFinish() { | ||
| 42 | + return finish; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + public void setFinish(int finish) { | ||
| 46 | + this.finish = finish; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + public String getSender() { | ||
| 50 | + return sender; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + public void setSender(String sender) { | ||
| 54 | + this.sender = sender; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + public String getNbbm() { | ||
| 58 | + return nbbm; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + public void setNbbm(String nbbm) { | ||
| 62 | + this.nbbm = nbbm; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + public int getState() { | ||
| 66 | + return state; | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + public void setState(int state) { | ||
| 70 | + this.state = state; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + public int getUpDown() { | ||
| 74 | + return upDown; | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + public void setUpDown(int upDown) { | ||
| 78 | + this.upDown = upDown; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + public String getCode() { | ||
| 82 | + return code; | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + public void setCode(String code) { | ||
| 86 | + this.code = code; | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + public String getLineCode() { | ||
| 90 | + return lineCode; | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + public void setLineCode(String lineCode) { | ||
| 94 | + this.lineCode = lineCode; | ||
| 95 | + } | ||
| 96 | +} |
src/main/java/com/bsth/data/msg_queue/WebSocketPushQueue.java
| 1 | -package com.bsth.data.msg_queue; | ||
| 2 | - | ||
| 3 | -import com.bsth.common.Constants; | ||
| 4 | -import org.slf4j.Logger; | ||
| 5 | -import org.slf4j.LoggerFactory; | ||
| 6 | -import org.springframework.boot.CommandLineRunner; | ||
| 7 | -import org.springframework.stereotype.Component; | ||
| 8 | -import org.springframework.web.socket.TextMessage; | ||
| 9 | -import org.springframework.web.socket.WebSocketSession; | ||
| 10 | - | ||
| 11 | -import java.util.LinkedList; | ||
| 12 | - | ||
| 13 | -/** | ||
| 14 | - * 线调web socket 推送队列 | ||
| 15 | - * Created by panzhao on 2017/5/11. | ||
| 16 | - */ | ||
| 17 | -@Component | ||
| 18 | -public class WebSocketPushQueue implements CommandLineRunner { | ||
| 19 | - | ||
| 20 | - static LinkedList<QueueData> linkedList; | ||
| 21 | - static DataPushThread thread; | ||
| 22 | - static Logger log = LoggerFactory.getLogger(WebSocketPushQueue.class); | ||
| 23 | - static long t; | ||
| 24 | - static final int IDLE_TIME = 1000 * 30; | ||
| 25 | - | ||
| 26 | - static { | ||
| 27 | - linkedList = new LinkedList(); | ||
| 28 | - } | ||
| 29 | - | ||
| 30 | - public static boolean isIdle() { | ||
| 31 | - return System.currentTimeMillis() - t > IDLE_TIME; | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - public static void put(WebSocketSession session, TextMessage msg) { | ||
| 35 | - QueueData qd = new QueueData(); | ||
| 36 | - qd.setMessage(msg); | ||
| 37 | - qd.setSession(session); | ||
| 38 | - | ||
| 39 | - log.info("put、[" + session.getAttributes().get(Constants.SESSION_USERNAME) + "] 、" + msg.getPayload()); | ||
| 40 | - linkedList.add(qd); | ||
| 41 | - } | ||
| 42 | - | ||
| 43 | - public static void start() { | ||
| 44 | - if (thread != null) { | ||
| 45 | - thread.interrupt(); | ||
| 46 | - } | ||
| 47 | - thread = new DataPushThread(); | ||
| 48 | - thread.start(); | ||
| 49 | - } | ||
| 50 | - | ||
| 51 | - @Override | ||
| 52 | - public void run(String... strings) throws Exception { | ||
| 53 | - start(); | ||
| 54 | - } | ||
| 55 | - | ||
| 56 | - public static class DataPushThread extends Thread { | ||
| 57 | - | ||
| 58 | - Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 59 | - | ||
| 60 | - @Override | ||
| 61 | - public void run() { | ||
| 62 | - QueueData qd; | ||
| 63 | - WebSocketSession session; | ||
| 64 | - | ||
| 65 | - boolean sleepFlag = false; | ||
| 66 | - while (true) { | ||
| 67 | - try { | ||
| 68 | - qd = linkedList.pollFirst(); | ||
| 69 | - if (qd != null) { | ||
| 70 | - sleepFlag = false; | ||
| 71 | - session = qd.getSession(); | ||
| 72 | - if (session.isOpen()) { | ||
| 73 | - log.info("push start、[" + session.getAttributes().get(Constants.SESSION_USERNAME) + "] 、" + qd.getMessage().getPayload()); | ||
| 74 | - session.sendMessage(qd.getMessage()); | ||
| 75 | - log.info("push end.."); | ||
| 76 | - } | ||
| 77 | - } else { | ||
| 78 | - Thread.sleep(500); | ||
| 79 | - if (!sleepFlag) { | ||
| 80 | - log.info("sleep..."); | ||
| 81 | - sleepFlag = true; | ||
| 82 | - } | ||
| 83 | - } | ||
| 84 | - t = System.currentTimeMillis(); | ||
| 85 | - } catch (InterruptedException e) { | ||
| 86 | - break; | ||
| 87 | - } catch (Exception e) { | ||
| 88 | - log.error("", e); | ||
| 89 | - } | ||
| 90 | - } | ||
| 91 | - } | ||
| 92 | - } | ||
| 93 | -} | 1 | +package com.bsth.data.msg_queue; |
| 2 | + | ||
| 3 | +import com.bsth.common.Constants; | ||
| 4 | +import org.slf4j.Logger; | ||
| 5 | +import org.slf4j.LoggerFactory; | ||
| 6 | +import org.springframework.boot.CommandLineRunner; | ||
| 7 | +import org.springframework.stereotype.Component; | ||
| 8 | +import org.springframework.web.socket.TextMessage; | ||
| 9 | +import org.springframework.web.socket.WebSocketSession; | ||
| 10 | + | ||
| 11 | +import java.util.LinkedList; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * 线调web socket 推送队列 | ||
| 15 | + * Created by panzhao on 2017/5/11. | ||
| 16 | + */ | ||
| 17 | +@Component | ||
| 18 | +public class WebSocketPushQueue implements CommandLineRunner { | ||
| 19 | + | ||
| 20 | + static LinkedList<QueueData> linkedList; | ||
| 21 | + static DataPushThread thread; | ||
| 22 | + static Logger log = LoggerFactory.getLogger(WebSocketPushQueue.class); | ||
| 23 | + static long t; | ||
| 24 | + static final int IDLE_TIME = 1000 * 30; | ||
| 25 | + | ||
| 26 | + static { | ||
| 27 | + linkedList = new LinkedList(); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + public static boolean isIdle() { | ||
| 31 | + return System.currentTimeMillis() - t > IDLE_TIME; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + public static void put(WebSocketSession session, TextMessage msg) { | ||
| 35 | + QueueData qd = new QueueData(); | ||
| 36 | + qd.setMessage(msg); | ||
| 37 | + qd.setSession(session); | ||
| 38 | + | ||
| 39 | + log.info("put、[" + session.getAttributes().get(Constants.SESSION_USERNAME) + "] 、" + msg.getPayload()); | ||
| 40 | + linkedList.add(qd); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public static void start() { | ||
| 44 | + if (thread != null) { | ||
| 45 | + thread.interrupt(); | ||
| 46 | + } | ||
| 47 | + thread = new DataPushThread(); | ||
| 48 | + thread.start(); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + @Override | ||
| 52 | + public void run(String... strings) throws Exception { | ||
| 53 | + start(); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + public static class DataPushThread extends Thread { | ||
| 57 | + | ||
| 58 | + Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 59 | + | ||
| 60 | + @Override | ||
| 61 | + public void run() { | ||
| 62 | + QueueData qd; | ||
| 63 | + WebSocketSession session; | ||
| 64 | + | ||
| 65 | + boolean sleepFlag = false; | ||
| 66 | + while (true) { | ||
| 67 | + try { | ||
| 68 | + qd = linkedList.pollFirst(); | ||
| 69 | + if (qd != null) { | ||
| 70 | + sleepFlag = false; | ||
| 71 | + session = qd.getSession(); | ||
| 72 | + if (session.isOpen()) { | ||
| 73 | + log.info("push start、[" + session.getAttributes().get(Constants.SESSION_USERNAME) + "] 、" + qd.getMessage().getPayload()); | ||
| 74 | + session.sendMessage(qd.getMessage()); | ||
| 75 | + log.info("push end.."); | ||
| 76 | + } | ||
| 77 | + } else { | ||
| 78 | + Thread.sleep(500); | ||
| 79 | + if (!sleepFlag) { | ||
| 80 | + log.info("sleep..."); | ||
| 81 | + sleepFlag = true; | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + t = System.currentTimeMillis(); | ||
| 85 | + } catch (InterruptedException e) { | ||
| 86 | + break; | ||
| 87 | + } catch (Exception e) { | ||
| 88 | + log.error("", e); | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | +} |
src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
| @@ -198,7 +198,16 @@ public class YlbServiceImpl extends BaseServiceImpl<Ylb,Integer> implements YlbS | @@ -198,7 +198,16 @@ public class YlbServiceImpl extends BaseServiceImpl<Ylb,Integer> implements YlbS | ||
| 198 | 198 | ||
| 199 | } | 199 | } |
| 200 | if(addList.size()>0){ | 200 | if(addList.size()>0){ |
| 201 | - new BatchSaveUtils<Ylb>().saveList(addList, Ylb.class); | 201 | + try { |
| 202 | + new BatchSaveUtils<Ylb>().saveList2(addList, Ylb.class); | ||
| 203 | + } catch (Exception e) { | ||
| 204 | + // TODO: handle exception | ||
| 205 | + if(e.getMessage().indexOf("PK_YLB_UK")>0){ | ||
| 206 | + newMap.put("fage", "存在相同数据,数据已经过滤"); | ||
| 207 | + logger.info("定时器:存在相同数据,数据已经过滤"); | ||
| 208 | + } | ||
| 209 | + } | ||
| 210 | +// new BatchSaveUtils<Ylb>().saveList(addList, Ylb.class); | ||
| 202 | } | 211 | } |
| 203 | result = "success"; | 212 | result = "success"; |
| 204 | }catch (Exception e) { | 213 | }catch (Exception e) { |
| @@ -363,7 +372,16 @@ public class YlbServiceImpl extends BaseServiceImpl<Ylb,Integer> implements YlbS | @@ -363,7 +372,16 @@ public class YlbServiceImpl extends BaseServiceImpl<Ylb,Integer> implements YlbS | ||
| 363 | } | 372 | } |
| 364 | } | 373 | } |
| 365 | if(addList.size()>0){ | 374 | if(addList.size()>0){ |
| 366 | - new BatchSaveUtils<Ylb>().saveList(addList, Ylb.class); | 375 | + try { |
| 376 | + new BatchSaveUtils<Ylb>().saveList2(addList, Ylb.class); | ||
| 377 | + } catch (Exception e) { | ||
| 378 | + // TODO: handle exception | ||
| 379 | + if(e.getMessage().indexOf("PK_YLB_UK")>0){ | ||
| 380 | + newMap.put("fage", "存在相同数据,数据已经过滤"); | ||
| 381 | + logger.info("获取:存在相同数据,数据已经过滤"); | ||
| 382 | + } | ||
| 383 | + } | ||
| 384 | + | ||
| 367 | } | 385 | } |
| 368 | 386 | ||
| 369 | if(updateList.size()>0){ | 387 | if(updateList.size()>0){ |
| @@ -372,7 +390,7 @@ public class YlbServiceImpl extends BaseServiceImpl<Ylb,Integer> implements YlbS | @@ -372,7 +390,7 @@ public class YlbServiceImpl extends BaseServiceImpl<Ylb,Integer> implements YlbS | ||
| 372 | } | 390 | } |
| 373 | } | 391 | } |
| 374 | newMap.put("status", ResponseCode.SUCCESS); | 392 | newMap.put("status", ResponseCode.SUCCESS); |
| 375 | - } catch (ParseException e) { | 393 | + } catch (Exception e) { |
| 376 | // TODO Auto-generated catch block | 394 | // TODO Auto-generated catch block |
| 377 | newMap.put("status", ResponseCode.ERROR); | 395 | newMap.put("status", ResponseCode.ERROR); |
| 378 | throw e; | 396 | throw e; |
| @@ -778,7 +796,16 @@ public class YlbServiceImpl extends BaseServiceImpl<Ylb,Integer> implements YlbS | @@ -778,7 +796,16 @@ public class YlbServiceImpl extends BaseServiceImpl<Ylb,Integer> implements YlbS | ||
| 778 | t.setYh(0.0); | 796 | t.setYh(0.0); |
| 779 | if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){ | 797 | if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){ |
| 780 | t.setCreatetime(new Date()); | 798 | t.setCreatetime(new Date()); |
| 781 | - repository.save(t); | 799 | + try { |
| 800 | + repository.save(t); | ||
| 801 | + } catch (Exception e) { | ||
| 802 | + // TODO: handle exception | ||
| 803 | + if(e.getMessage().indexOf("PK_YLB_UK")>0){ | ||
| 804 | + newMap.put("fage", "存在相同数据,数据已经过滤"); | ||
| 805 | + logger.info("核对有存油没里程:存在相同数据,数据已经过滤"); | ||
| 806 | + } | ||
| 807 | + } | ||
| 808 | + | ||
| 782 | /*if(null!=cyl){ | 809 | /*if(null!=cyl){ |
| 783 | cyl.setCyl(Arith.add(t.getJzl(), t.getCzyl())); | 810 | cyl.setCyl(Arith.add(t.getJzl(), t.getCzyl())); |
| 784 | cyl.setUpdatetime(y1.getYyrq()); | 811 | cyl.setUpdatetime(y1.getYyrq()); |
src/main/java/com/bsth/service/report/impl/CulateMileageServiceImpl.java
| @@ -222,7 +222,21 @@ public class CulateMileageServiceImpl implements CulateMileageService{ | @@ -222,7 +222,21 @@ public class CulateMileageServiceImpl implements CulateMileageService{ | ||
| 222 | if (!isInOut(scheduleRealInfo)) { | 222 | if (!isInOut(scheduleRealInfo)) { |
| 223 | if(!scheduleRealInfo.isDestroy()){ | 223 | if(!scheduleRealInfo.isDestroy()){ |
| 224 | if(scheduleRealInfo.isSflj()){ | 224 | if(scheduleRealInfo.isSflj()){ |
| 225 | - ljgl=Arith.add(ljgl,scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc()); | 225 | + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks(); |
| 226 | + if(childTaskPlans.isEmpty()){ | ||
| 227 | + ljgl=Arith.add(ljgl,scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc()); | ||
| 228 | + }else{ | ||
| 229 | + Iterator<ChildTaskPlan> it = childTaskPlans.iterator(); | ||
| 230 | + while (it.hasNext()) { | ||
| 231 | + ChildTaskPlan childTaskPlan = it.next(); | ||
| 232 | + if(childTaskPlan.getMileageType().equals("service")){ | ||
| 233 | + if (!childTaskPlan.isDestroy()) { | ||
| 234 | + Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage(); | ||
| 235 | + ljgl=Arith.add(ljgl,jhgl); | ||
| 236 | + } | ||
| 237 | + } | ||
| 238 | + } | ||
| 239 | + } | ||
| 226 | }else{ | 240 | }else{ |
| 227 | Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks(); | 241 | Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks(); |
| 228 | if(!childTaskPlans.isEmpty()){ | 242 | if(!childTaskPlans.isEmpty()){ |
src/main/java/com/bsth/service/schedule/impl/PeopleCarPlanServiceImpl.java
| @@ -869,50 +869,50 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | @@ -869,50 +869,50 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | ||
| 869 | Map<String, Object> m0 = new HashMap<String, Object>(); | 869 | Map<String, Object> m0 = new HashMap<String, Object>(); |
| 870 | m0.put("time", "首~6:30"); | 870 | m0.put("time", "首~6:30"); |
| 871 | m0.put("upbc", "0"); m0.put("dnbc", "0"); | 871 | m0.put("upbc", "0"); m0.put("dnbc", "0"); |
| 872 | - m0.put("upys", "--"); m0.put("dnys", "--"); | ||
| 873 | - m0.put("pjys", "--"); | 872 | + m0.put("upys", "/"); m0.put("dnys", "/"); |
| 873 | + m0.put("pjys", "/"); | ||
| 874 | tempList.add(m0); | 874 | tempList.add(m0); |
| 875 | Map<String, Object> m1 = new HashMap<String, Object>(); | 875 | Map<String, Object> m1 = new HashMap<String, Object>(); |
| 876 | m1.put("time", "6:31~8:30"); | 876 | m1.put("time", "6:31~8:30"); |
| 877 | m1.put("upbc", "0"); m1.put("dnbc", "0"); | 877 | m1.put("upbc", "0"); m1.put("dnbc", "0"); |
| 878 | - m1.put("upys", "--"); m1.put("dnys", "--"); | ||
| 879 | - m1.put("pjys", "--"); | 878 | + m1.put("upys", "/"); m1.put("dnys", "/"); |
| 879 | + m1.put("pjys", "/"); | ||
| 880 | tempList.add(m1); | 880 | tempList.add(m1); |
| 881 | Map<String, Object> m2 = new HashMap<String, Object>(); | 881 | Map<String, Object> m2 = new HashMap<String, Object>(); |
| 882 | m2.put("time", "8:31~11:00"); | 882 | m2.put("time", "8:31~11:00"); |
| 883 | m2.put("upbc", "0"); m2.put("dnbc", "0"); | 883 | m2.put("upbc", "0"); m2.put("dnbc", "0"); |
| 884 | - m2.put("upys", "--"); m2.put("dnys", "--"); | ||
| 885 | - m2.put("pjys", "--"); | 884 | + m2.put("upys", "/"); m2.put("dnys", "/"); |
| 885 | + m2.put("pjys", "/"); | ||
| 886 | tempList.add(m2); | 886 | tempList.add(m2); |
| 887 | Map<String, Object> m3 = new HashMap<String, Object>(); | 887 | Map<String, Object> m3 = new HashMap<String, Object>(); |
| 888 | m3.put("time", "11:01~13:30"); | 888 | m3.put("time", "11:01~13:30"); |
| 889 | m3.put("upbc", "0"); m3.put("dnbc", "0"); | 889 | m3.put("upbc", "0"); m3.put("dnbc", "0"); |
| 890 | - m3.put("upys", "--"); m3.put("dnys", "--"); | ||
| 891 | - m3.put("pjys", "--"); | 890 | + m3.put("upys", "/"); m3.put("dnys", "/"); |
| 891 | + m3.put("pjys", "/"); | ||
| 892 | tempList.add(m3); | 892 | tempList.add(m3); |
| 893 | Map<String, Object> m4 = new HashMap<String, Object>(); | 893 | Map<String, Object> m4 = new HashMap<String, Object>(); |
| 894 | m4.put("time", "13:31~16:00"); | 894 | m4.put("time", "13:31~16:00"); |
| 895 | m4.put("upbc", "0"); m4.put("dnbc", "0"); | 895 | m4.put("upbc", "0"); m4.put("dnbc", "0"); |
| 896 | - m4.put("upys", "--"); m4.put("dnys", "--"); | ||
| 897 | - m4.put("pjys", "--"); | 896 | + m4.put("upys", "/"); m4.put("dnys", "/"); |
| 897 | + m4.put("pjys", "/"); | ||
| 898 | tempList.add(m4); | 898 | tempList.add(m4); |
| 899 | Map<String, Object> m5 = new HashMap<String, Object>(); | 899 | Map<String, Object> m5 = new HashMap<String, Object>(); |
| 900 | m5.put("time", "16:01~18:00"); | 900 | m5.put("time", "16:01~18:00"); |
| 901 | m5.put("upbc", "0"); m5.put("dnbc", "0"); | 901 | m5.put("upbc", "0"); m5.put("dnbc", "0"); |
| 902 | - m5.put("upys", "--"); m5.put("dnys", "--"); | ||
| 903 | - m5.put("pjys", "--"); | 902 | + m5.put("upys", "/"); m5.put("dnys", "/"); |
| 903 | + m5.put("pjys", "/"); | ||
| 904 | tempList.add(m5); | 904 | tempList.add(m5); |
| 905 | Map<String, Object> m6 = new HashMap<String, Object>(); | 905 | Map<String, Object> m6 = new HashMap<String, Object>(); |
| 906 | m6.put("time", "18:01~20:30"); | 906 | m6.put("time", "18:01~20:30"); |
| 907 | m6.put("upbc", "0"); m6.put("dnbc", "0"); | 907 | m6.put("upbc", "0"); m6.put("dnbc", "0"); |
| 908 | - m6.put("upys", "--"); m6.put("dnys", "--"); | ||
| 909 | - m6.put("pjys", "--"); | 908 | + m6.put("upys", "/"); m6.put("dnys", "/"); |
| 909 | + m6.put("pjys", "/"); | ||
| 910 | tempList.add(m6); | 910 | tempList.add(m6); |
| 911 | Map<String, Object> m7 = new HashMap<String, Object>(); | 911 | Map<String, Object> m7 = new HashMap<String, Object>(); |
| 912 | m7.put("time", "20:31~末"); | 912 | m7.put("time", "20:31~末"); |
| 913 | m7.put("upbc", "0"); m7.put("dnbc", "0"); | 913 | m7.put("upbc", "0"); m7.put("dnbc", "0"); |
| 914 | - m7.put("upys", "--"); m7.put("dnys", "--"); | ||
| 915 | - m7.put("pjys", "--"); | 914 | + m7.put("upys", "/"); m7.put("dnys", "/"); |
| 915 | + m7.put("pjys", "/"); | ||
| 916 | tempList.add(m7); | 916 | tempList.add(m7); |
| 917 | } | 917 | } |
| 918 | 918 | ||
| @@ -1367,6 +1367,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | @@ -1367,6 +1367,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | ||
| 1367 | } | 1367 | } |
| 1368 | for(String key : keyMap.keySet()){ | 1368 | for(String key : keyMap.keySet()){ |
| 1369 | Map<String, Object> tempMap = new HashMap<String, Object>(); | 1369 | Map<String, Object> tempMap = new HashMap<String, Object>(); |
| 1370 | + Map<String, Object> m = new HashMap<String, Object>(); | ||
| 1370 | Map<Long, ScheduleRealInfo> temp0 = new HashMap<Long, ScheduleRealInfo>(); | 1371 | Map<Long, ScheduleRealInfo> temp0 = new HashMap<Long, ScheduleRealInfo>(); |
| 1371 | List<Long> longList0 = new ArrayList<Long>(); | 1372 | List<Long> longList0 = new ArrayList<Long>(); |
| 1372 | Map<Long, ScheduleRealInfo> temp1 = new HashMap<Long, ScheduleRealInfo>(); | 1373 | Map<Long, ScheduleRealInfo> temp1 = new HashMap<Long, ScheduleRealInfo>(); |
| @@ -1410,6 +1411,10 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | @@ -1410,6 +1411,10 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | ||
| 1410 | if(delay >= -3 && delay <= 1){ | 1411 | if(delay >= -3 && delay <= 1){ |
| 1411 | sjbc++; | 1412 | sjbc++; |
| 1412 | } | 1413 | } |
| 1414 | + m.put("qdzFirst0", shouban0.getQdzName()); | ||
| 1415 | + m.put("jhfcFirst0", shouban0.getFcsj()); | ||
| 1416 | + m.put("sjfcFirst0", shouban0.getFcsjActual()); | ||
| 1417 | + m.put("delayFirst0", delay>0?"+"+delay:delay); | ||
| 1413 | } | 1418 | } |
| 1414 | 1419 | ||
| 1415 | if(moban0.getFcsjActual() != null){ | 1420 | if(moban0.getFcsjActual() != null){ |
| @@ -1420,7 +1425,20 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | @@ -1420,7 +1425,20 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | ||
| 1420 | if(delay >= -3 && delay <= 1){ | 1425 | if(delay >= -3 && delay <= 1){ |
| 1421 | sjbc++; | 1426 | sjbc++; |
| 1422 | } | 1427 | } |
| 1428 | + m.put("qdzLast0", moban0.getQdzName()); | ||
| 1429 | + m.put("jhfcLast0", moban0.getFcsj()); | ||
| 1430 | + m.put("sjfcLast0", moban0.getFcsjActual()); | ||
| 1431 | + m.put("delayLast0", delay>0?"+"+delay:delay); | ||
| 1423 | } | 1432 | } |
| 1433 | + } else { | ||
| 1434 | + m.put("qdzFirst0", "--"); | ||
| 1435 | + m.put("jhfcFirst0", "/"); | ||
| 1436 | + m.put("sjfcFirst0", "/"); | ||
| 1437 | + m.put("delayFirst0", "/"); | ||
| 1438 | + m.put("qdzLast0", "--"); | ||
| 1439 | + m.put("jhfcLast0", "/"); | ||
| 1440 | + m.put("sjfcLast0", "/"); | ||
| 1441 | + m.put("delayLast0", "/"); | ||
| 1424 | } | 1442 | } |
| 1425 | 1443 | ||
| 1426 | if(longList1.size() != 0){ | 1444 | if(longList1.size() != 0){ |
| @@ -1435,7 +1453,12 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | @@ -1435,7 +1453,12 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | ||
| 1435 | if(delay >= -3 && delay <= 1){ | 1453 | if(delay >= -3 && delay <= 1){ |
| 1436 | sjbc++; | 1454 | sjbc++; |
| 1437 | } | 1455 | } |
| 1456 | + m.put("qdzFirst1", shouban1.getQdzName()); | ||
| 1457 | + m.put("jhfcFirst1", shouban1.getFcsj()); | ||
| 1458 | + m.put("sjfcFirst1", shouban1.getFcsjActual()); | ||
| 1459 | + m.put("delayFirst1", delay>0?"+"+delay:delay); | ||
| 1438 | } | 1460 | } |
| 1461 | + | ||
| 1439 | if(moban1.getFcsjActual() != null){ | 1462 | if(moban1.getFcsjActual() != null){ |
| 1440 | jhbc++; | 1463 | jhbc++; |
| 1441 | String[] split = moban1.getFcsjActual().split(":"); | 1464 | String[] split = moban1.getFcsjActual().split(":"); |
| @@ -1444,9 +1467,24 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | @@ -1444,9 +1467,24 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { | ||
| 1444 | if(delay >= -3 && delay <= 1){ | 1467 | if(delay >= -3 && delay <= 1){ |
| 1445 | sjbc++; | 1468 | sjbc++; |
| 1446 | } | 1469 | } |
| 1470 | + m.put("qdzLast1", moban1.getQdzName()); | ||
| 1471 | + m.put("jhfcLast1", moban1.getFcsj()); | ||
| 1472 | + m.put("sjfcLast1", moban1.getFcsjActual()); | ||
| 1473 | + m.put("delayLast1", delay>0?"+"+delay:delay); | ||
| 1447 | } | 1474 | } |
| 1475 | + } else { | ||
| 1476 | + m.put("qdzFirst1", "--"); | ||
| 1477 | + m.put("jhfcFirst1", "/"); | ||
| 1478 | + m.put("sjfcFirst1", "/"); | ||
| 1479 | + m.put("delayFirst1", "/"); | ||
| 1480 | + m.put("qdzLast1", "--"); | ||
| 1481 | + m.put("jhfcLast1", "/"); | ||
| 1482 | + m.put("sjfcLast1", "/"); | ||
| 1483 | + m.put("delayLast1", "/"); | ||
| 1448 | } | 1484 | } |
| 1449 | - | 1485 | + |
| 1486 | + m.put("line", key); | ||
| 1487 | + tempMap.put("map", m); | ||
| 1450 | tempMap.put("jhbc", jhbc); | 1488 | tempMap.put("jhbc", jhbc); |
| 1451 | tempMap.put("sjbc", sjbc); | 1489 | tempMap.put("sjbc", sjbc); |
| 1452 | tempMap.put("zdl", nf.format((float) sjbc / jhbc *100) + "%"); | 1490 | tempMap.put("zdl", nf.format((float) sjbc / jhbc *100) + "%"); |
src/main/java/com/bsth/service/schedule/rules/validate/ValidRepeatBcFunction.java
| 1 | -package com.bsth.service.schedule.rules.validate; | ||
| 2 | - | ||
| 3 | -import com.bsth.entity.schedule.SchedulePlanInfo; | ||
| 4 | -import org.kie.api.runtime.rule.AccumulateFunction; | ||
| 5 | - | ||
| 6 | -import java.io.*; | ||
| 7 | -import java.text.SimpleDateFormat; | ||
| 8 | -import java.util.ArrayList; | ||
| 9 | -import java.util.HashMap; | ||
| 10 | -import java.util.List; | ||
| 11 | -import java.util.Map; | ||
| 12 | - | ||
| 13 | -/** | ||
| 14 | - * 计算班次重复错误。 | ||
| 15 | - * 同一个路牌下,相同发车时间的班次数。 | ||
| 16 | - * 注意:使用这个函数时,要一天计算一次,多天计算无意义。 | ||
| 17 | - */ | ||
| 18 | -public class ValidRepeatBcFunction implements AccumulateFunction { | ||
| 19 | - @Override | ||
| 20 | - public void writeExternal(ObjectOutput out) throws IOException { | ||
| 21 | - } | ||
| 22 | - | ||
| 23 | - @Override | ||
| 24 | - public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { | ||
| 25 | - | ||
| 26 | - } | ||
| 27 | - | ||
| 28 | - protected static class RepeatBcInfo implements Externalizable { | ||
| 29 | - /** 错误描述 */ | ||
| 30 | - public List<ValidateResults_output.ValidInfo> validInfoList = new ArrayList<>(); | ||
| 31 | - /** 内部计数Map,key:{路牌Id}_{发车时间},value:个数 */ | ||
| 32 | - public Map<String, Integer> lpBcFcsjCount = new HashMap<>(); | ||
| 33 | - | ||
| 34 | - public RepeatBcInfo() { | ||
| 35 | - } | ||
| 36 | - | ||
| 37 | - @Override | ||
| 38 | - public void writeExternal(ObjectOutput out) throws IOException { | ||
| 39 | - out.writeObject(validInfoList); | ||
| 40 | - } | ||
| 41 | - | ||
| 42 | - @Override | ||
| 43 | - public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { | ||
| 44 | - validInfoList = (List<ValidateResults_output.ValidInfo>) in.readObject(); | ||
| 45 | - } | ||
| 46 | - } | ||
| 47 | - | ||
| 48 | - @Override | ||
| 49 | - public Serializable createContext() { | ||
| 50 | - System.out.println("create"); | ||
| 51 | - return new RepeatBcInfo(); | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - @Override | ||
| 55 | - public void init(Serializable serializable) throws Exception { | ||
| 56 | - // TODO: | ||
| 57 | - System.out.println("init"); | ||
| 58 | - } | ||
| 59 | - | ||
| 60 | - @Override | ||
| 61 | - public void accumulate(Serializable context, Object o) { | ||
| 62 | - RepeatBcInfo repeatBcInfo = (RepeatBcInfo) context; | ||
| 63 | - SchedulePlanInfo schedulePlanInfo = (SchedulePlanInfo) o; | ||
| 64 | - | ||
| 65 | - String key = schedulePlanInfo.getLp() + "_" + schedulePlanInfo.getFcsj(); | ||
| 66 | - SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日"); | ||
| 67 | - String infoformat = "日期(%s),路牌(%s),班次(%s),重复(%d)次"; | ||
| 68 | - if (repeatBcInfo.lpBcFcsjCount.get(key) == null) { | ||
| 69 | - repeatBcInfo.lpBcFcsjCount.put(key, 1); | ||
| 70 | - } else { | ||
| 71 | - int count = repeatBcInfo.lpBcFcsjCount.get(key) + 1; | ||
| 72 | - ValidateResults_output.ValidInfo validInfo = new ValidateResults_output.ValidInfo(); | ||
| 73 | - validInfo.setSd(schedulePlanInfo.getScheduleDate()); | ||
| 74 | - validInfo.setDesc(String.format( | ||
| 75 | - infoformat, | ||
| 76 | - sf.format(schedulePlanInfo.getScheduleDate()), | ||
| 77 | - schedulePlanInfo.getLpName(), | ||
| 78 | - schedulePlanInfo.getFcsj(), | ||
| 79 | - count)); | ||
| 80 | - repeatBcInfo.validInfoList.add(validInfo); | ||
| 81 | - repeatBcInfo.lpBcFcsjCount.put(key, count); | ||
| 82 | - } | ||
| 83 | - } | ||
| 84 | - | ||
| 85 | - @Override | ||
| 86 | - public boolean supportsReverse() { | ||
| 87 | - return true; | ||
| 88 | - } | ||
| 89 | - | ||
| 90 | - @Override | ||
| 91 | - public void reverse(Serializable context, Object o) throws Exception { | ||
| 92 | - RepeatBcInfo repeatBcInfo = (RepeatBcInfo) context; | ||
| 93 | - SchedulePlanInfo schedulePlanInfo = (SchedulePlanInfo) o; | ||
| 94 | - | ||
| 95 | - String key = schedulePlanInfo.getLp() + "_" + schedulePlanInfo.getFcsj(); | ||
| 96 | - repeatBcInfo.lpBcFcsjCount.remove(key); | ||
| 97 | - | ||
| 98 | - if (!repeatBcInfo.validInfoList.isEmpty()) { // 全部清空 | ||
| 99 | - repeatBcInfo.validInfoList.clear(); | ||
| 100 | - } | ||
| 101 | - } | ||
| 102 | - | ||
| 103 | - @Override | ||
| 104 | - public Class<?> getResultType() { | ||
| 105 | - return List.class; | ||
| 106 | - } | ||
| 107 | - | ||
| 108 | - @Override | ||
| 109 | - public Object getResult(Serializable context) throws Exception { | ||
| 110 | - RepeatBcInfo repeatBcInfo = (RepeatBcInfo) context; | ||
| 111 | - return repeatBcInfo.validInfoList; | ||
| 112 | - } | ||
| 113 | -} | 1 | +package com.bsth.service.schedule.rules.validate; |
| 2 | + | ||
| 3 | +import com.bsth.entity.schedule.SchedulePlanInfo; | ||
| 4 | +import org.kie.api.runtime.rule.AccumulateFunction; | ||
| 5 | + | ||
| 6 | +import java.io.*; | ||
| 7 | +import java.text.SimpleDateFormat; | ||
| 8 | +import java.util.ArrayList; | ||
| 9 | +import java.util.HashMap; | ||
| 10 | +import java.util.List; | ||
| 11 | +import java.util.Map; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * 计算班次重复错误。 | ||
| 15 | + * 同一个路牌下,相同发车时间的班次数。 | ||
| 16 | + * 注意:使用这个函数时,要一天计算一次,多天计算无意义。 | ||
| 17 | + */ | ||
| 18 | +public class ValidRepeatBcFunction implements AccumulateFunction { | ||
| 19 | + @Override | ||
| 20 | + public void writeExternal(ObjectOutput out) throws IOException { | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + @Override | ||
| 24 | + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { | ||
| 25 | + | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + protected static class RepeatBcInfo implements Externalizable { | ||
| 29 | + /** 错误描述 */ | ||
| 30 | + public List<ValidateResults_output.ValidInfo> validInfoList = new ArrayList<>(); | ||
| 31 | + /** 内部计数Map,key:{路牌Id}_{发车时间},value:个数 */ | ||
| 32 | + public Map<String, Integer> lpBcFcsjCount = new HashMap<>(); | ||
| 33 | + | ||
| 34 | + public RepeatBcInfo() { | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + @Override | ||
| 38 | + public void writeExternal(ObjectOutput out) throws IOException { | ||
| 39 | + out.writeObject(validInfoList); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { | ||
| 44 | + validInfoList = (List<ValidateResults_output.ValidInfo>) in.readObject(); | ||
| 45 | + } | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + @Override | ||
| 49 | + public Serializable createContext() { | ||
| 50 | + System.out.println("create"); | ||
| 51 | + return new RepeatBcInfo(); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + @Override | ||
| 55 | + public void init(Serializable serializable) throws Exception { | ||
| 56 | + // TODO: | ||
| 57 | + System.out.println("init"); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + @Override | ||
| 61 | + public void accumulate(Serializable context, Object o) { | ||
| 62 | + RepeatBcInfo repeatBcInfo = (RepeatBcInfo) context; | ||
| 63 | + SchedulePlanInfo schedulePlanInfo = (SchedulePlanInfo) o; | ||
| 64 | + | ||
| 65 | + String key = schedulePlanInfo.getLp() + "_" + schedulePlanInfo.getFcsj(); | ||
| 66 | + SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日"); | ||
| 67 | + String infoformat = "日期(%s),路牌(%s),班次(%s),重复(%d)次"; | ||
| 68 | + if (repeatBcInfo.lpBcFcsjCount.get(key) == null) { | ||
| 69 | + repeatBcInfo.lpBcFcsjCount.put(key, 1); | ||
| 70 | + } else { | ||
| 71 | + int count = repeatBcInfo.lpBcFcsjCount.get(key) + 1; | ||
| 72 | + ValidateResults_output.ValidInfo validInfo = new ValidateResults_output.ValidInfo(); | ||
| 73 | + validInfo.setSd(schedulePlanInfo.getScheduleDate()); | ||
| 74 | + validInfo.setDesc(String.format( | ||
| 75 | + infoformat, | ||
| 76 | + sf.format(schedulePlanInfo.getScheduleDate()), | ||
| 77 | + schedulePlanInfo.getLpName(), | ||
| 78 | + schedulePlanInfo.getFcsj(), | ||
| 79 | + count)); | ||
| 80 | + repeatBcInfo.validInfoList.add(validInfo); | ||
| 81 | + repeatBcInfo.lpBcFcsjCount.put(key, count); | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + @Override | ||
| 86 | + public boolean supportsReverse() { | ||
| 87 | + return true; | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + @Override | ||
| 91 | + public void reverse(Serializable context, Object o) throws Exception { | ||
| 92 | + RepeatBcInfo repeatBcInfo = (RepeatBcInfo) context; | ||
| 93 | + SchedulePlanInfo schedulePlanInfo = (SchedulePlanInfo) o; | ||
| 94 | + | ||
| 95 | + String key = schedulePlanInfo.getLp() + "_" + schedulePlanInfo.getFcsj(); | ||
| 96 | + repeatBcInfo.lpBcFcsjCount.remove(key); | ||
| 97 | + | ||
| 98 | + if (!repeatBcInfo.validInfoList.isEmpty()) { // 全部清空 | ||
| 99 | + repeatBcInfo.validInfoList.clear(); | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + @Override | ||
| 104 | + public Class<?> getResultType() { | ||
| 105 | + return List.class; | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + @Override | ||
| 109 | + public Object getResult(Serializable context) throws Exception { | ||
| 110 | + RepeatBcInfo repeatBcInfo = (RepeatBcInfo) context; | ||
| 111 | + return repeatBcInfo.validInfoList; | ||
| 112 | + } | ||
| 113 | +} |
src/main/java/com/bsth/service/schedule/rules/validate/ValidateParam.java
| 1 | -package com.bsth.service.schedule.rules.validate; | ||
| 2 | - | ||
| 3 | -import org.joda.time.DateTime; | ||
| 4 | -import org.joda.time.Period; | ||
| 5 | -import org.joda.time.PeriodType; | ||
| 6 | - | ||
| 7 | -/** | ||
| 8 | - * Created by xu on 17/5/11. | ||
| 9 | - */ | ||
| 10 | -public class ValidateParam { | ||
| 11 | - /** 开始计算日期 */ | ||
| 12 | - private DateTime fromDate; | ||
| 13 | - /** 结束计算日期 */ | ||
| 14 | - private DateTime toDate; | ||
| 15 | - | ||
| 16 | - /** 间隔天数 */ | ||
| 17 | - private Integer days; | ||
| 18 | - | ||
| 19 | - public ValidateParam(DateTime f, DateTime t) { | ||
| 20 | - this.fromDate = f; | ||
| 21 | - this.toDate = t; | ||
| 22 | - Period period = new Period(fromDate, toDate, PeriodType.days()); | ||
| 23 | - days = period.getDays() + 1; | ||
| 24 | - } | ||
| 25 | - | ||
| 26 | - public DateTime getFromDate() { | ||
| 27 | - return fromDate; | ||
| 28 | - } | ||
| 29 | - | ||
| 30 | - public void setFromDate(DateTime fromDate) { | ||
| 31 | - this.fromDate = fromDate; | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - public DateTime getToDate() { | ||
| 35 | - return toDate; | ||
| 36 | - } | ||
| 37 | - | ||
| 38 | - public void setToDate(DateTime toDate) { | ||
| 39 | - this.toDate = toDate; | ||
| 40 | - } | ||
| 41 | - | ||
| 42 | - public Integer getDays() { | ||
| 43 | - return days; | ||
| 44 | - } | ||
| 45 | - | ||
| 46 | - public void setDays(Integer days) { | ||
| 47 | - this.days = days; | ||
| 48 | - } | ||
| 49 | -} | 1 | +package com.bsth.service.schedule.rules.validate; |
| 2 | + | ||
| 3 | +import org.joda.time.DateTime; | ||
| 4 | +import org.joda.time.Period; | ||
| 5 | +import org.joda.time.PeriodType; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * Created by xu on 17/5/11. | ||
| 9 | + */ | ||
| 10 | +public class ValidateParam { | ||
| 11 | + /** 开始计算日期 */ | ||
| 12 | + private DateTime fromDate; | ||
| 13 | + /** 结束计算日期 */ | ||
| 14 | + private DateTime toDate; | ||
| 15 | + | ||
| 16 | + /** 间隔天数 */ | ||
| 17 | + private Integer days; | ||
| 18 | + | ||
| 19 | + public ValidateParam(DateTime f, DateTime t) { | ||
| 20 | + this.fromDate = f; | ||
| 21 | + this.toDate = t; | ||
| 22 | + Period period = new Period(fromDate, toDate, PeriodType.days()); | ||
| 23 | + days = period.getDays() + 1; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public DateTime getFromDate() { | ||
| 27 | + return fromDate; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + public void setFromDate(DateTime fromDate) { | ||
| 31 | + this.fromDate = fromDate; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + public DateTime getToDate() { | ||
| 35 | + return toDate; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public void setToDate(DateTime toDate) { | ||
| 39 | + this.toDate = toDate; | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + public Integer getDays() { | ||
| 43 | + return days; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + public void setDays(Integer days) { | ||
| 47 | + this.days = days; | ||
| 48 | + } | ||
| 49 | +} |
src/main/java/com/bsth/service/schedule/rules/validate/ValidateResults_output.java
| 1 | -package com.bsth.service.schedule.rules.validate; | ||
| 2 | - | ||
| 3 | -import java.util.ArrayList; | ||
| 4 | -import java.util.Date; | ||
| 5 | -import java.util.List; | ||
| 6 | - | ||
| 7 | -/** | ||
| 8 | - * 验证输出。 | ||
| 9 | - */ | ||
| 10 | -public class ValidateResults_output { | ||
| 11 | - private List<ValidInfo> infos = new ArrayList<>(); | ||
| 12 | - | ||
| 13 | - public static class ValidInfo { | ||
| 14 | - /** 日期 */ | ||
| 15 | - private Date sd; | ||
| 16 | - /** 描述 */ | ||
| 17 | - private String desc; | ||
| 18 | - | ||
| 19 | - public Date getSd() { | ||
| 20 | - return sd; | ||
| 21 | - } | ||
| 22 | - | ||
| 23 | - public void setSd(Date sd) { | ||
| 24 | - this.sd = sd; | ||
| 25 | - } | ||
| 26 | - | ||
| 27 | - public String getDesc() { | ||
| 28 | - return desc; | ||
| 29 | - } | ||
| 30 | - | ||
| 31 | - public void setDesc(String desc) { | ||
| 32 | - this.desc = desc; | ||
| 33 | - } | ||
| 34 | - } | ||
| 35 | - | ||
| 36 | - public List<ValidInfo> getInfos() { | ||
| 37 | - return infos; | ||
| 38 | - } | ||
| 39 | - | ||
| 40 | - public void setInfos(List<ValidInfo> infos) { | ||
| 41 | - this.infos = infos; | ||
| 42 | - } | ||
| 43 | -} | 1 | +package com.bsth.service.schedule.rules.validate; |
| 2 | + | ||
| 3 | +import java.util.ArrayList; | ||
| 4 | +import java.util.Date; | ||
| 5 | +import java.util.List; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * 验证输出。 | ||
| 9 | + */ | ||
| 10 | +public class ValidateResults_output { | ||
| 11 | + private List<ValidInfo> infos = new ArrayList<>(); | ||
| 12 | + | ||
| 13 | + public static class ValidInfo { | ||
| 14 | + /** 日期 */ | ||
| 15 | + private Date sd; | ||
| 16 | + /** 描述 */ | ||
| 17 | + private String desc; | ||
| 18 | + | ||
| 19 | + public Date getSd() { | ||
| 20 | + return sd; | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + public void setSd(Date sd) { | ||
| 24 | + this.sd = sd; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + public String getDesc() { | ||
| 28 | + return desc; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + public void setDesc(String desc) { | ||
| 32 | + this.desc = desc; | ||
| 33 | + } | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + public List<ValidInfo> getInfos() { | ||
| 37 | + return infos; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + public void setInfos(List<ValidInfo> infos) { | ||
| 41 | + this.infos = infos; | ||
| 42 | + } | ||
| 43 | +} |
src/main/java/com/bsth/util/BatchSaveUtils.java
| @@ -99,6 +99,47 @@ public class BatchSaveUtils<T> { | @@ -99,6 +99,47 @@ public class BatchSaveUtils<T> { | ||
| 99 | return 0; | 99 | return 0; |
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | + public int saveList2(List<T> list, Class<T> clazz) throws Exception{ | ||
| 103 | + //获取泛型 T 的字节码 | ||
| 104 | + Table table = clazz.getAnnotation(Table.class); | ||
| 105 | + if(null == table){ | ||
| 106 | + logger.error("找不到" + clazz.getSimpleName() + "类的表映射"); | ||
| 107 | + return -1; | ||
| 108 | + } | ||
| 109 | + List<Field> fs = fieldFilter(clazz.getDeclaredFields()); | ||
| 110 | + String sql = createSql(table, fs); | ||
| 111 | + logger.info(sql); | ||
| 112 | + | ||
| 113 | + //每5000条批量入库一次 | ||
| 114 | + Connection conn = null; | ||
| 115 | + PreparedStatement ps = null; | ||
| 116 | + try{ | ||
| 117 | + conn = getConn(); | ||
| 118 | + conn.setAutoCommit(false); | ||
| 119 | + ps = conn.prepareStatement(sql); | ||
| 120 | + | ||
| 121 | + int fsize = fs.size(), count = 0; | ||
| 122 | + for(T t : list){ | ||
| 123 | + count ++; | ||
| 124 | + for(int i = 0; i < fsize; i ++){ | ||
| 125 | + ps.setObject(i + 1, fs.get(i).get(t)); | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + ps.addBatch(); | ||
| 129 | + if(count % batchSize == 0){ | ||
| 130 | + ps.executeBatch(); | ||
| 131 | + conn.commit(); | ||
| 132 | + ps.clearBatch(); | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + ps.executeBatch(); | ||
| 136 | + conn.commit(); | ||
| 137 | + }finally { | ||
| 138 | + closeAll(conn, ps, null); | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + return 0; | ||
| 142 | + } | ||
| 102 | public String createSql(Table table, List<Field> fs){ | 143 | public String createSql(Table table, List<Field> fs){ |
| 103 | String sqlBefore = "insert into " + table.name() + "(" | 144 | String sqlBefore = "insert into " + table.name() + "(" |
| 104 | ,sqlValues = " values("; | 145 | ,sqlValues = " values("; |