Commit ba993fd05e1fc4df6c7d1272cc356f06156a79d7

Authored by 潘钊
1 parent b1a880e3

update...

src/main/java/com/bsth/StartCommand.java
@@ -2,11 +2,11 @@ package com.bsth; @@ -2,11 +2,11 @@ package com.bsth;
2 2
3 3
4 import com.bsth.data.msg_queue.SignalAndAttConsumeQueue; 4 import com.bsth.data.msg_queue.SignalAndAttConsumeQueue;
5 -import com.bsth.data.real_park.BerthDataBuffer;  
6 import com.bsth.data.real_park.CarParkRealHandler; 5 import com.bsth.data.real_park.CarParkRealHandler;
7 import com.bsth.data.real_park.thread.RealParkDataPersistenceThread; 6 import com.bsth.data.real_park.thread.RealParkDataPersistenceThread;
8 import com.bsth.data.signal.thread.SignalPstThread; 7 import com.bsth.data.signal.thread.SignalPstThread;
9 import com.bsth.security.SecurityMetadataSourceService; 8 import com.bsth.security.SecurityMetadataSourceService;
  9 +import com.bsth.service.berth.impl.BerthServiceImpl;
10 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.boot.CommandLineRunner; 11 import org.springframework.boot.CommandLineRunner;
12 import org.springframework.stereotype.Component; 12 import org.springframework.stereotype.Component;
@@ -28,13 +28,14 @@ public class StartCommand implements CommandLineRunner{ @@ -28,13 +28,14 @@ public class StartCommand implements CommandLineRunner{
28 @Autowired 28 @Autowired
29 SignalPstThread signalPstThread; 29 SignalPstThread signalPstThread;
30 @Autowired 30 @Autowired
31 - BerthDataBuffer.BerthCacheRefreshThread berthCacheRefreshThread;  
32 - @Autowired  
33 RealParkDataPersistenceThread realParkDataPersistenceThread; 31 RealParkDataPersistenceThread realParkDataPersistenceThread;
34 32
35 @Autowired 33 @Autowired
36 CarParkRealHandler carParkRealHandler; 34 CarParkRealHandler carParkRealHandler;
37 35
  36 + @Autowired
  37 + BerthServiceImpl.BerthCacheRefreshThread berthCacheRefreshThread;
  38 +
38 @Override 39 @Override
39 public void run(String... arg0){ 40 public void run(String... arg0){
40 41
@@ -49,8 +50,8 @@ public class StartCommand implements CommandLineRunner{ @@ -49,8 +50,8 @@ public class StartCommand implements CommandLineRunner{
49 //进出场数据入库线程 50 //进出场数据入库线程
50 sexec.scheduleWithFixedDelay(signalPstThread, 30, 10, TimeUnit.SECONDS); 51 sexec.scheduleWithFixedDelay(signalPstThread, 30, 10, TimeUnit.SECONDS);
51 52
52 - //泊位缓存刷新  
53 - sexec.scheduleWithFixedDelay(berthCacheRefreshThread, 0, 60 * 2, TimeUnit.SECONDS); 53 + //泊位数据刷新
  54 + sexec.scheduleWithFixedDelay(berthCacheRefreshThread, 0, 60 * 15, TimeUnit.SECONDS);
54 55
55 //从数据库恢复场内实时停放数据 56 //从数据库恢复场内实时停放数据
56 carParkRealHandler.recovery(); 57 carParkRealHandler.recovery();
src/main/java/com/bsth/controller/berth/BerthController.java
@@ -17,14 +17,4 @@ public class BerthController extends BaseController<RegionBerth, Integer> { @@ -17,14 +17,4 @@ public class BerthController extends BaseController<RegionBerth, Integer> {
17 @Autowired 17 @Autowired
18 BerthService berthService; 18 BerthService berthService;
19 19
20 -/* @RequestMapping(value = "real_change", method = RequestMethod.POST)  
21 - public Map<String, Object> realChange(@RequestParam String s,@RequestParam String d){  
22 - return null;//berthService.realChange(s, d);  
23 - }*/  
24 -  
25 - @RequestMapping("max_order_no")  
26 - public String maxOrderNo() {  
27 - String rs = berthService.maxOrderNo();  
28 - return rs==null?"0":rs;  
29 - }  
30 } 20 }
src/main/java/com/bsth/data/real_park/BerthDataBuffer.java deleted 100644 → 0
1 -package com.bsth.data.real_park;  
2 -  
3 -import com.bsth.entity.berth.RegionBerth;  
4 -import com.bsth.repository.berth.BerthRepository;  
5 -import org.slf4j.Logger;  
6 -import org.slf4j.LoggerFactory;  
7 -import org.springframework.beans.factory.annotation.Autowired;  
8 -import org.springframework.stereotype.Component;  
9 -  
10 -import java.util.List;  
11 -  
12 -/**  
13 - * 预设泊位数据缓存  
14 - * Created by panzhao on 2017/9/14.  
15 - */  
16 -public class BerthDataBuffer {  
17 -  
18 - private static List<RegionBerth> allList;  
19 -  
20 - static Logger logger = LoggerFactory.getLogger(BerthDataBuffer.class);  
21 -  
22 - private static void update(RegionBerth b){  
23 - RegionBerth cacheB = getById(b.getId());  
24 - if(null == cacheB)  
25 - allList.add(cacheB);  
26 - else{  
27 - //cacheB.setNbbm(b.getNbbm());  
28 - cacheB.setOrderNo(b.getOrderNo());  
29 - cacheB.setName(b.getName());  
30 - cacheB.setRegion(b.getRegion());  
31 - cacheB.setUpdateDate(b.getUpdateDate());  
32 - cacheB.setRemark(b.getRemark());  
33 - }  
34 - }  
35 -  
36 - private static RegionBerth getById(Integer id) {  
37 - for(RegionBerth b : allList){  
38 - if(id.equals(b.getId()))  
39 - return b;  
40 - }  
41 - return null;  
42 - }  
43 -/*  
44 - public static RegionBerth get(String nbbm) {  
45 - for(RegionBerth b : allList){  
46 - if(nbbm.equals(b.getNbbm()))  
47 - return b;  
48 - }  
49 - return null;  
50 - }*/  
51 -  
52 - /**  
53 - * 泊位缓存刷新线程  
54 - */  
55 - @Component  
56 - public static class BerthCacheRefreshThread extends Thread {  
57 -  
58 - @Autowired  
59 - BerthRepository berthRepository;  
60 -  
61 - @Override  
62 - public void run() {  
63 - /*try{  
64 - List<RegionBerth> list = (List<RegionBerth>) berthRepository.findAll();  
65 - Map<String, RegionBerth> nbbm2BerthMapCopy = new HashMap<>();  
66 - for (RegionBerth b : list) {  
67 - if (StringUtils.isNotEmpty(b.getName())) {  
68 - //nbbm2BerthMapCopy.put(b.getNbbm(), b);  
69 - }  
70 - }  
71 -  
72 - list = new ArrayList(nbbm2BerthMapCopy.values());  
73 -  
74 - if (null == allList)  
75 - allList = list;  
76 - else {  
77 - //增量更新  
78 - for (RegionBerth b : list) {  
79 - update(b);  
80 - }  
81 - }  
82 -  
83 - //排序  
84 - Collections.sort(allList, new Comparator<RegionBerth>() {  
85 - @Override  
86 - public int compare(RegionBerth o1, RegionBerth o2) {  
87 - return Integer.parseInt(o1.getOrderNo()) - Integer.parseInt(o2.getOrderNo());  
88 - }  
89 - });  
90 - }catch (Exception e){  
91 - logger.error("泊位数据刷新失败!!", e);  
92 - }*/  
93 - }  
94 - }  
95 -}  
src/main/java/com/bsth/data/real_park/CarParkRealHandler.java
@@ -5,8 +5,10 @@ import com.bsth.data.basic.bus.BusDataBuffer; @@ -5,8 +5,10 @@ import com.bsth.data.basic.bus.BusDataBuffer;
5 import com.bsth.data.electric.CarElectricBuffer; 5 import com.bsth.data.electric.CarElectricBuffer;
6 import com.bsth.entity.Bus; 6 import com.bsth.entity.Bus;
7 import com.bsth.entity.ac.CarInOutEntity; 7 import com.bsth.entity.ac.CarInOutEntity;
  8 +import com.bsth.entity.berth.RegionBerth;
8 import com.bsth.entity.electric.BusElectric; 9 import com.bsth.entity.electric.BusElectric;
9 import com.bsth.entity.real.RealCarPark; 10 import com.bsth.entity.real.RealCarPark;
  11 +import com.bsth.service.berth.BerthService;
10 import org.apache.commons.lang3.StringUtils; 12 import org.apache.commons.lang3.StringUtils;
11 import org.slf4j.Logger; 13 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory; 14 import org.slf4j.LoggerFactory;
@@ -26,6 +28,9 @@ import java.util.concurrent.ConcurrentMap; @@ -26,6 +28,9 @@ import java.util.concurrent.ConcurrentMap;
26 @Component 28 @Component
27 public class CarParkRealHandler { 29 public class CarParkRealHandler {
28 30
  31 + @Autowired
  32 + BerthService berthService;
  33 +
29 /** 34 /**
30 * 公交车 35 * 公交车
31 * K: 自编号 36 * K: 自编号
@@ -57,6 +62,22 @@ public class CarParkRealHandler { @@ -57,6 +62,22 @@ public class CarParkRealHandler {
57 } 62 }
58 } 63 }
59 64
  65 + /**
  66 + * 最大电量的泊位名称
  67 + * @return
  68 +
  69 + public String getMaxElecBerth(){
  70 + String name = null;
  71 + double maxSoc=0.0;
  72 + Collection<RealCarPark> vs = allBus();
  73 +
  74 + for(RealCarPark rcp : vs){
  75 + if(Double.parseDouble(rcp.getSoc()) > maxSoc)
  76 + name = rcp.getBerthName();
  77 + }
  78 + return name;
  79 + }*/
  80 +
60 public static Collection<RealCarPark> allBus() { 81 public static Collection<RealCarPark> allBus() {
61 return busRcps.values(); 82 return busRcps.values();
62 } 83 }
@@ -100,9 +121,10 @@ public class CarParkRealHandler { @@ -100,9 +121,10 @@ public class CarParkRealHandler {
100 121
101 RealCarPark rcp = new RealCarPark(); 122 RealCarPark rcp = new RealCarPark();
102 //泊位信息 123 //泊位信息
103 - /*RegionBerth b = BerthDataBuffer.get(nbbm);  
104 - if (null != b)  
105 - rcp.setBerthName(b.getName());*/ 124 + RegionBerth b = berthService.next();
  125 + //泊位设置车辆
  126 + b.setNbbm(nbbm);
  127 + rcp.setBerthName(b.getName());
106 128
107 rcp.setNbbm(nbbm); 129 rcp.setNbbm(nbbm);
108 rcp.setInTime(System.currentTimeMillis()); 130 rcp.setInTime(System.currentTimeMillis());
@@ -169,6 +191,11 @@ public class CarParkRealHandler { @@ -169,6 +191,11 @@ public class CarParkRealHandler {
169 return null; 191 return null;
170 } 192 }
171 193
  194 + public Double soc(String nbbm){
  195 + RealCarPark rcp = busRcps.get(nbbm);
  196 + return rcp!=null?Double.parseDouble(rcp.getSoc()):null;
  197 + }
  198 +
172 @Autowired 199 @Autowired
173 JdbcTemplate jdbcTemplate; 200 JdbcTemplate jdbcTemplate;
174 201
src/main/java/com/bsth/entity/berth/RegionBerth.java
@@ -11,7 +11,7 @@ import java.util.Date; @@ -11,7 +11,7 @@ import java.util.Date;
11 */ 11 */
12 @Entity 12 @Entity
13 @Table(name = "bsth_p_berth") 13 @Table(name = "bsth_p_berth")
14 -public class RegionBerth { 14 +public class RegionBerth implements Cloneable{
15 15
16 @Id 16 @Id
17 @GeneratedValue 17 @GeneratedValue
@@ -60,13 +60,6 @@ public class RegionBerth { @@ -60,13 +60,6 @@ public class RegionBerth {
60 private int chargePile; 60 private int chargePile;
61 61
62 /** 62 /**
63 - * 是否是充电桩的第一个泊位  
64 - *  
65 - * 默认 1 个桩 2个 泊位  
66 - */  
67 - private boolean first;  
68 -  
69 - /**  
70 * 状态 63 * 状态
71 * 0: 可用 64 * 0: 可用
72 * -1: 禁用 65 * -1: 禁用
@@ -85,6 +78,27 @@ public class RegionBerth { @@ -85,6 +78,27 @@ public class RegionBerth {
85 @Column(name = "update_date", columnDefinition = "timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") 78 @Column(name = "update_date", columnDefinition = "timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
86 private Date updateDate; 79 private Date updateDate;
87 80
  81 + /**
  82 + * 停放车辆
  83 + */
  84 + @Transient
  85 + private String nbbm;
  86 +
  87 + @Override
  88 + public int hashCode() {
  89 + return this.toString().hashCode();
  90 + }
  91 +
  92 + @Override
  93 + public boolean equals(Object obj) {
  94 + return this.toString().equals(obj.toString());
  95 + }
  96 +
  97 + @Override
  98 + public String toString() {
  99 + return ("berth_" + this.getName());
  100 + }
  101 +
88 public Integer getId() { 102 public Integer getId() {
89 return id; 103 return id;
90 } 104 }
@@ -181,14 +195,6 @@ public class RegionBerth { @@ -181,14 +195,6 @@ public class RegionBerth {
181 this.type = type; 195 this.type = type;
182 } 196 }
183 197
184 - public boolean isFirst() {  
185 - return first;  
186 - }  
187 -  
188 - public void setFirst(boolean first) {  
189 - this.first = first;  
190 - }  
191 -  
192 public int getChargePile() { 198 public int getChargePile() {
193 return chargePile; 199 return chargePile;
194 } 200 }
@@ -196,4 +202,12 @@ public class RegionBerth { @@ -196,4 +202,12 @@ public class RegionBerth {
196 public void setChargePile(int chargePile) { 202 public void setChargePile(int chargePile) {
197 this.chargePile = chargePile; 203 this.chargePile = chargePile;
198 } 204 }
  205 +
  206 + public String getNbbm() {
  207 + return nbbm;
  208 + }
  209 +
  210 + public void setNbbm(String nbbm) {
  211 + this.nbbm = nbbm;
  212 + }
199 } 213 }
src/main/java/com/bsth/repository/berth/BerthRepository.java
@@ -2,7 +2,6 @@ package com.bsth.repository.berth; @@ -2,7 +2,6 @@ package com.bsth.repository.berth;
2 2
3 import com.bsth.entity.berth.RegionBerth; 3 import com.bsth.entity.berth.RegionBerth;
4 import com.bsth.repository.BaseRepository; 4 import com.bsth.repository.BaseRepository;
5 -import org.springframework.data.jpa.repository.Query;  
6 import org.springframework.stereotype.Repository; 5 import org.springframework.stereotype.Repository;
7 6
8 /** 7 /**
@@ -11,6 +10,6 @@ import org.springframework.stereotype.Repository; @@ -11,6 +10,6 @@ import org.springframework.stereotype.Repository;
11 @Repository 10 @Repository
12 public interface BerthRepository extends BaseRepository<RegionBerth, Integer>{ 11 public interface BerthRepository extends BaseRepository<RegionBerth, Integer>{
13 12
14 - @Query("select max(b.orderNo) from RegionBerth b")  
15 - String maxOrderNo(); 13 +/* @Query("select max(b.orderNo) from RegionBerth b")
  14 + String maxOrderNo();*/
16 } 15 }
src/main/java/com/bsth/service/berth/BerthService.java
@@ -7,7 +7,8 @@ import com.bsth.service.BaseService; @@ -7,7 +7,8 @@ import com.bsth.service.BaseService;
7 * Created by panzhao on 2017/8/22. 7 * Created by panzhao on 2017/8/22.
8 */ 8 */
9 public interface BerthService extends BaseService<RegionBerth, Integer>{ 9 public interface BerthService extends BaseService<RegionBerth, Integer>{
10 - String maxOrderNo(); 10 + RegionBerth next();
  11 + //String maxOrderNo();
11 12
12 //void berthInOut(Bus bus); 13 //void berthInOut(Bus bus);
13 14
src/main/java/com/bsth/service/berth/impl/BerthServiceImpl.java
1 package com.bsth.service.berth.impl; 1 package com.bsth.service.berth.impl;
2 2
  3 +import com.bsth.data.real_park.CarParkRealHandler;
3 import com.bsth.entity.berth.RegionBerth; 4 import com.bsth.entity.berth.RegionBerth;
4 import com.bsth.repository.berth.BerthRepository; 5 import com.bsth.repository.berth.BerthRepository;
5 import com.bsth.service.berth.BerthService; 6 import com.bsth.service.berth.BerthService;
6 import com.bsth.service.impl.BaseServiceImpl; 7 import com.bsth.service.impl.BaseServiceImpl;
  8 +import com.bsth.util.ConvertUtil;
  9 +import com.google.common.collect.ArrayListMultimap;
7 import org.slf4j.Logger; 10 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory; 11 import org.slf4j.LoggerFactory;
9 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.beans.factory.annotation.Autowired;
  13 +import org.springframework.stereotype.Component;
10 import org.springframework.stereotype.Service; 14 import org.springframework.stereotype.Service;
11 15
12 -import java.util.List; 16 +import java.util.*;
13 17
14 /** 18 /**
15 * Created by panzhao on 2017/8/22. 19 * Created by panzhao on 2017/8/22.
@@ -17,77 +21,145 @@ import java.util.List; @@ -17,77 +21,145 @@ import java.util.List;
17 @Service 21 @Service
18 public class BerthServiceImpl extends BaseServiceImpl<RegionBerth, Integer> implements BerthService { 22 public class BerthServiceImpl extends BaseServiceImpl<RegionBerth, Integer> implements BerthService {
19 23
  24 + //泊位集合
  25 + private static List<RegionBerth> berthList;
  26 +
20 @Autowired 27 @Autowired
21 - BerthRepository berthRepository; 28 + CarParkRealHandler carParkRealHandler;
22 29
23 - private static List<RegionBerth> allList;  
24 - /** 待入库的  
25 - private static LinkedList<RegionBerth> psts = new LinkedList<>(); 30 + /**
  31 + * 充电枪状态
  32 + * -404 空闲
  33 + * 其他:当前充电车辆电量
26 */ 34 */
  35 + private static Map<String, Double> chargeMap;
27 Logger logger = LoggerFactory.getLogger(this.getClass()); 36 Logger logger = LoggerFactory.getLogger(this.getClass());
28 37
29 - @Override  
30 - public String maxOrderNo() {  
31 - return berthRepository.maxOrderNo(); 38 +
  39 + static {
  40 + berthList = new ArrayList<>();
  41 + chargeMap = new HashMap<>();
32 } 42 }
33 -/* 43 +
  44 + /**
  45 + * 获取下一个可用泊位
  46 + *
  47 + * @return
  48 + */
34 @Override 49 @Override
35 - public void berthInOut(Bus bus) { 50 + public RegionBerth next() {
  51 + RegionBerth b = null;
  52 +
  53 + try {
  54 + b = nextChargeBerth();
  55 + if (null != b)
  56 + return b;
  57 +
  58 + //最快充电完成枪的空余泊位
  59 + b = maxElecBerth();
  60 + } catch (Exception e) {
  61 + logger.error("", e);
  62 + }
  63 + return b;
  64 + }
  65 +
  66 + private RegionBerth maxElecBerth() {
  67 + RegionBerth near = null;
  68 + //按充电桩分组
  69 + try {
  70 + ArrayListMultimap<String, RegionBerth> multimap = new ConvertUtil<RegionBerth>()
  71 + .groupMultiList(berthList, "", RegionBerth.class.getDeclaredField("chargePile"));
  72 +
  73 + Set<String> cps = multimap.keySet();
  74 + int status;
  75 + double maxSoc = 0.0;
  76 + List<RegionBerth> list;
  77 + for (String cp : cps) {
  78 + list = multimap.get(cp);
  79 + //充电枪状态
  80 + status = calcCpStatus(list);
  81 + if (status == 1) {
  82 + double soc = calcCpMaxSoc(list);
  83 + RegionBerth tempBerth = nearBerthByCp(list);
  84 +
  85 + if (soc > maxSoc) {
  86 + maxSoc = soc;
  87 + near = tempBerth;
  88 + }
  89 + }
  90 + }
  91 + } catch (NoSuchFieldException e) {
  92 + logger.error("", e);
  93 + }
  94 + return near;
  95 + }
36 96
37 - String nbbm = bus.getNbbm();  
38 - RegionBerth b = get(nbbm);  
39 - if(null != b){  
40 - b.setNbbmReal(nbbm);  
41 - //通知客户端 97 + private RegionBerth nearBerthByCp(List<RegionBerth> list) {
  98 + Collections.sort(list, new Comparator<RegionBerth>() {
  99 + @Override
  100 + public int compare(RegionBerth b1, RegionBerth b2) {
  101 + return b1.getOrderNo().compareTo(b2.getOrderNo());
  102 + }
  103 + });
  104 + for (RegionBerth b : list) {
  105 + if (null == b.getNbbm())
  106 + return b;
  107 + }
  108 + return null;
  109 + }
42 110
43 - //入库  
44 - psts.add(b); 111 + private double calcCpMaxSoc(List<RegionBerth> list) {
  112 + Double maxSoc = 0.0, soc;
  113 + for (RegionBerth b : list) {
  114 + soc = carParkRealHandler.soc(b.getNbbm());
  115 + if (null != soc && soc > maxSoc)
  116 + maxSoc = soc;
45 } 117 }
46 - }*/ 118 + return maxSoc;
  119 + }
47 120
48 /** 121 /**
49 - * 车辆泊位交换  
50 - * @param s  
51 - * @param d 122 + * 充电桩状态
  123 + * 0:枪空闲(2个泊位都空闲)
  124 + * 1:有车充电且有空余泊位
  125 + * 2:无空余泊位
  126 + *
  127 + * @param regionBerths
52 * @return 128 * @return
  129 + */
  130 + private int calcCpStatus(List<RegionBerth> list) {
  131 + int count = 0;
  132 + for (RegionBerth b : list) {
  133 + if (null != b.getNbbm())
  134 + count++;
  135 + }
53 136
54 - @Override  
55 - public Map<String, Object> realChange(String s, String d) { 137 + if (count == 0)
  138 + return 0;
56 139
57 - Map<String, Object> rs = new HashMap<>();  
58 - try{  
59 - RegionBerth berthS = getByName(s);  
60 - RegionBerth berthD = getByName(d); 140 + if (count >= list.size())
  141 + return 2;
  142 + return 1;
  143 + }
61 144
62 - String sNbbm = berthS.getNbbmReal();  
63 - berthS.setNbbmReal(berthD.getNbbmReal());  
64 - berthD.setNbbmReal(sNbbm); 145 + /**
  146 + * 获取下一个可充电的泊位
  147 + *
  148 + * @return
  149 + */
  150 + private RegionBerth nextChargeBerth() {
  151 + for (RegionBerth b : berthList) {
  152 + if (null == b.getNbbm()
  153 + && (!chargeMap.containsKey(b.getChargePile()) || chargeMap.get(b.getChargePile()) == -404))
  154 + return b;
65 155
66 - rs.put("status", ResponseCode.SUCCESS);  
67 - rs.put("list", allList);  
68 - }catch (Exception e){  
69 - logger.error("", e);  
70 - rs.put("status", ResponseCode.ERROR);  
71 } 156 }
72 -  
73 - return rs;  
74 - }*/  
75 -  
76 - /*@Override  
77 - public Iterable<RegionBerth> list(Map<String, Object> map) {  
78 - return allList; 157 + return null;
79 } 158 }
80 -*/  
81 -/* @Override  
82 - public void putElec(BusElectric be){  
83 - RegionBerth rb = get(be.getNbbm());  
84 - if(null != rb)  
85 - rb.setBe(be);  
86 - }*/  
87 -  
88 -/* *//**  
89 - * 泊位缓存刷新线程  
90 - *//* 159 +
  160 + /**
  161 + * 定时将泊位数据load 到内存
  162 + */
91 @Component 163 @Component
92 public static class BerthCacheRefreshThread extends Thread { 164 public static class BerthCacheRefreshThread extends Thread {
93 165
@@ -97,104 +169,24 @@ public class BerthServiceImpl extends BaseServiceImpl&lt;RegionBerth, Integer&gt; impl @@ -97,104 +169,24 @@ public class BerthServiceImpl extends BaseServiceImpl&lt;RegionBerth, Integer&gt; impl
97 @Override 169 @Override
98 public void run() { 170 public void run() {
99 List<RegionBerth> list = (List<RegionBerth>) berthRepository.findAll(); 171 List<RegionBerth> list = (List<RegionBerth>) berthRepository.findAll();
100 - Map<String, RegionBerth> nbbm2BerthMapCopy = new HashMap<>();  
101 - for (RegionBerth b : list) {  
102 - if (StringUtils.isNotEmpty(b.getName())) {  
103 - nbbm2BerthMapCopy.put(b.getNbbm(), b);  
104 - }  
105 - }  
106 172
107 - list = new ArrayList(nbbm2BerthMapCopy.values()); 173 + List<RegionBerth> listCopy = new ArrayList<>();
  174 + Collections.copy(listCopy, berthList);
108 175
109 - if(null == allList)  
110 - allList = list;  
111 - else{  
112 - //增量更新  
113 - for(RegionBerth b : list){  
114 - update(b);  
115 - } 176 + for (RegionBerth b : list) {
  177 + if (!listCopy.contains(b))
  178 + listCopy.add(b);
116 } 179 }
117 180
118 //排序 181 //排序
119 - Collections.sort(allList, new Comparator<RegionBerth>() { 182 + Collections.sort(listCopy, new Comparator<RegionBerth>() {
120 @Override 183 @Override
121 - public int compare(RegionBerth o1, RegionBerth o2) {  
122 - return Integer.parseInt(o1.getOrderNo()) - Integer.parseInt(o2.getOrderNo()); 184 + public int compare(RegionBerth b1, RegionBerth b2) {
  185 + return b1.getOrderNo().compareTo(b2.getOrderNo());
123 } 186 }
124 }); 187 });
125 - }  
126 - }*/  
127 -  
128 - /**  
129 - * 泊位实时停放信息持久化线程  
130 -  
131 - @Component  
132 - public static class BerthCachePersistenceThread extends Thread {  
133 -  
134 - @Autowired  
135 - JdbcTemplate jdbcTemplate;  
136 -  
137 - Logger logger = LoggerFactory.getLogger(this.getClass());  
138 -  
139 - @Override  
140 - public void run() {  
141 - RegionBerth b;  
142 - for(int i = 0; i < 10; i++){  
143 - b = psts.poll();  
144 - if(null == b)  
145 - break;  
146 188
147 - updateDb(b);  
148 - }  
149 - }  
150 -  
151 - private void updateDb(RegionBerth b){  
152 - try{  
153 - String sql = "update bsth_p_berth set nbbm_real=?, charging = ? where id=?";  
154 - jdbcTemplate.update(sql, b.getNbbmReal(), b.getCharging() , b.getId());  
155 - }catch (Exception e){  
156 - logger.error("", e);  
157 - }  
158 - }  
159 - }  
160 - */  
161 -/*  
162 - private static RegionBerth get(String nbbm) {  
163 - for(RegionBerth b : allList){  
164 - if(nbbm.equals(b.getNbbm()))  
165 - return b; 189 + berthList = listCopy;
166 } 190 }
167 - return null;  
168 } 191 }
169 -*/  
170 -  
171 -/* private static RegionBerth getById(Integer id) {  
172 - for(RegionBerth b : allList){  
173 - if(id.equals(b.getId()))  
174 - return b;  
175 - }  
176 - return null;  
177 - }  
178 -  
179 - private static RegionBerth getByName(String name) {  
180 - for(RegionBerth b : allList){  
181 - if(name.equals(b.getName()))  
182 - return b;  
183 - }  
184 - return null;  
185 - }*/  
186 -  
187 -/* private static void update(RegionBerth b){  
188 - RegionBerth cacheB = getById(b.getId());  
189 - if(null == cacheB)  
190 - allList.add(cacheB);  
191 - else{  
192 - cacheB.setNbbm(b.getNbbm());  
193 - cacheB.setOrderNo(b.getOrderNo());  
194 - cacheB.setName(b.getName());  
195 - cacheB.setRegion(b.getRegion());  
196 - cacheB.setUpdateDate(b.getUpdateDate());  
197 - cacheB.setRemark(b.getRemark());  
198 - }  
199 - }*/  
200 } 192 }
src/main/java/com/bsth/util/ConvertUtil.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import com.google.common.collect.ArrayListMultimap;
  4 +import org.joda.time.format.DateTimeFormat;
  5 +import org.joda.time.format.DateTimeFormatter;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
  8 +
  9 +import java.lang.reflect.Field;
  10 +import java.util.*;
  11 +
  12 +/**
  13 + * 数据转换
  14 + * Created by panzhao on 2017/3/13.
  15 + */
  16 +public class ConvertUtil<T> {
  17 +
  18 + Logger logger = LoggerFactory.getLogger(this.getClass());
  19 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyyMMdd");
  20 +
  21 + /**
  22 + * 根据指定字段 将 list 分组
  23 + *
  24 + * @param list
  25 + * @param separator 字段使用分隔符连接 组成key
  26 + * @param fields
  27 + * @return
  28 + */
  29 + public ArrayListMultimap<String, T> groupMultiList(List<T> list, String separator, Field... fields) {
  30 + ArrayListMultimap<String, T> multimap = ArrayListMultimap.create();
  31 +
  32 + String key;
  33 + //Object field;
  34 + try {
  35 + for (T t : list) {
  36 +
  37 + key = "";
  38 + for (Field f : fields) {
  39 + f.setAccessible(true);
  40 + if(null == f.get(t))
  41 + continue;
  42 + //日期类型格式化为 YYYY-MM-DD
  43 + if (f.getType().equals(Date.class))
  44 + key += (separator + fmtyyyyMMdd.print(((Date) f.get(t)).getTime()));
  45 + else
  46 + key += (separator + f.get(t).toString());
  47 + }
  48 + if(key.length() > 1)
  49 + key = key.substring(1);
  50 +
  51 + multimap.put(key, t);
  52 + }
  53 + } catch (Exception e) {
  54 + logger.error("", e);
  55 + }
  56 +
  57 + return multimap;
  58 + }
  59 +
  60 + /**
  61 + * 根据指定字段 将 list 分组
  62 + *
  63 + * @param list
  64 + * @param separator 字段使用分隔符连接 组成key
  65 + * @param fields
  66 + * @return
  67 + */
  68 + public Map<String, T> groupList(List<T> list, String separator, Field... fields) {
  69 + Map<String, T> map = new HashMap<>();
  70 +
  71 + String key;
  72 + //Object field;
  73 + try {
  74 + for (T t : list) {
  75 +
  76 + key = "";
  77 + for (Field f : fields) {
  78 + f.setAccessible(true);
  79 + //日期类型格式化为 YYYY-MM-DD
  80 + if (f.getType().equals(Date.class))
  81 + key += (separator + fmtyyyyMMdd.print(((Date) f.get(t)).getTime()));
  82 + else
  83 + key += (separator + f.get(t).toString());
  84 + }
  85 + key = key.substring(1);
  86 +
  87 + map.put(key, t);
  88 + }
  89 + } catch (Exception e) {
  90 + logger.error("", e);
  91 + }
  92 +
  93 + return map;
  94 + }
  95 +
  96 + /**
  97 + * 计算并集
  98 + *
  99 + * @param all
  100 + * @param sub
  101 + * @return
  102 + */
  103 + public List<String> calcUnion(Collection<String> all, Collection<String> sub) {
  104 + List<String> rs = new ArrayList<>();
  105 +
  106 + for (String str : all) {
  107 + if (sub.contains(str))
  108 + rs.add(str);
  109 + }
  110 + return rs;
  111 + }
  112 +
  113 + /**
  114 + * 计算补集
  115 + *
  116 + * @param all
  117 + * @param sub
  118 + * @return
  119 + */
  120 + public List<String> calcComplement(Collection<String> all, Collection<String> sub) {
  121 + List<String> rs = new ArrayList<>();
  122 +
  123 + for (String str : all) {
  124 + if (!sub.contains(str))
  125 + rs.add(str);
  126 + }
  127 + return rs;
  128 + }
  129 +}