Commit b6518a3fca1d9bf21c7d55e80ae25f62d70764cc

Authored by 娄高锋
2 parents ab03bee0 607273cc

Merge branch 'pudong_jdk8' of http://101.95.0.106:8888/panzhaov5/bsth_control into pudong_jdk8

src/main/java/com/bsth/data/directive/DirectivesPstThread.java
1   -package com.bsth.data.directive;
2   -
3   -import com.alibaba.fastjson.JSON;
4   -import com.bsth.data.schedule.DayOfSchedule;
5   -import com.bsth.entity.directive.D60;
6   -import com.bsth.entity.directive.D64;
7   -import com.bsth.entity.directive.Directive;
8   -import com.bsth.repository.directive.D60Repository;
9   -import com.bsth.repository.directive.D64Repository;
10   -import org.joda.time.format.DateTimeFormat;
11   -import org.joda.time.format.DateTimeFormatter;
12   -import org.slf4j.Logger;
13   -import org.slf4j.LoggerFactory;
14   -import org.springframework.beans.factory.annotation.Autowired;
15   -import org.springframework.jdbc.core.BatchPreparedStatementSetter;
16   -import org.springframework.jdbc.core.JdbcTemplate;
17   -import org.springframework.jdbc.datasource.DataSourceTransactionManager;
18   -import org.springframework.stereotype.Component;
19   -import org.springframework.transaction.TransactionDefinition;
20   -import org.springframework.transaction.TransactionStatus;
21   -import org.springframework.transaction.support.DefaultTransactionDefinition;
22   -
23   -import java.sql.PreparedStatement;
24   -import java.sql.SQLException;
25   -import java.sql.Types;
26   -import java.util.ArrayList;
27   -import java.util.List;
28   -import java.util.concurrent.ConcurrentLinkedQueue;
29   -
30   -/**
31   - * 指令持久化线程
32   - * Created by panzhao on 2017/3/6.
33   - */
34   -@Component
35   -public class DirectivesPstThread extends Thread {
36   -
37   - Logger logger = LoggerFactory.getLogger(this.getClass());
38   -
39   - @Autowired
40   - D60Repository d60Repository;
41   -
42   - @Autowired
43   - D64Repository d64Repository;
44   -
45   - @Autowired
46   - DayOfSchedule dayOfSchedule;
47   -
48   - @Autowired
49   - JdbcTemplate jdbcTemplate;
50   -
51   - private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
52   -
53   - @Override
54   - public void run() {
55   - try{
56   - ConcurrentLinkedQueue<Directive> list = DayOfDirectives.pstDirectives;
57   -
58   - List<D60> d60s = new ArrayList<>();
59   - List<D64> d64s = new ArrayList<>();
60   - //按 60 和 64 分组
61   - Directive directive;
62   - D60 d60;
63   - for (int i = 0; i < 2000; i++) {
64   - directive = list.poll();
65   - if(null == directive)
66   - break;
67   -
68   - //日期
69   - directive.setRq(fmtyyyyMMdd.print(directive.getTimestamp()));
70   -
71   - if (directive instanceof D60) {
72   - d60 = (D60) directive;
73   - if(isDelete(d60))
74   - continue;
75   - d60s.add(d60);
76   - }
77   - else if(directive instanceof D64)
78   - d64s.add((D64) directive);
79   - }
80   -
81   - //入库60
82   - save60(d60s);
83   - //入库64
84   - save64(d64s);
85   -
86   -
87   - // 60 指令更新(车载响应)
88   - ConcurrentLinkedQueue<D60> updateD60s = DayOfDirectives.pstD60s;
89   - d60s = new ArrayList<>();
90   - for (int i = 0; i < 2000; i++) {
91   - d60 = updateD60s.poll();
92   - if(null == d60)
93   - break;
94   - d60s.add(d60);
95   - }
96   -
97   - if(d60s.size() > 0)
98   - update60(d60s);
99   - }catch (Exception e){
100   - logger.error("指令入库出现异常", e);
101   - }
102   - }
103   -
104   - private void save64(final List<D64> d64s) {
105   - if(null == d64s || d64s.size() == 0)
106   - return;
107   -
108   - String sql = "insert into bsth_v_directive_64(device_id,error_text,http_code,oper_code,rq,sender,timestamp,city_code,line_id,txt_content,resp_ack) " +
109   - " values(?,?,?,?,?,?,?,?,?,?,?)";
110   -
111   - //编程式事务
112   - DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
113   - DefaultTransactionDefinition def = new DefaultTransactionDefinition();
114   - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
115   - TransactionStatus status = tran.getTransaction(def);
116   -
117   - try{
118   - jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
119   - @Override
120   - public void setValues(PreparedStatement ps, int i) throws SQLException {
121   - D64 d64 = d64s.get(i);
122   - ps.setString(1 , d64.getDeviceId());
123   - ps.setString(2, isNvl(d64.getErrorText()));
124   - ps.setInt(3, d64.getHttpCode());
125   - ps.setShort(4, isNvl(d64.getOperCode()));
126   - ps.setString(5, d64.getRq());
127   -
128   - ps.setString(6, isNvl(d64.getSender()));
129   - ps.setLong(7, d64.getTimestamp());
130   -
131   - ps.setShort(8, isNvl(d64.getData().getCityCode()));
132   - ps.setString(9, isNvl(d64.getData().getLineId()));
133   - ps.setString(10, isNvl(d64.getData().getTxtContent()));
134   - ps.setShort(11, isNvl(d64.getRespAck()));
135   - }
136   -
137   - @Override
138   - public int getBatchSize() {
139   - return d64s.size();
140   - }
141   - });
142   -
143   - tran.commit(status);
144   -
145   - logger.info("64 入库成功: " + d64s.size());
146   - }catch (Exception e){
147   - tran.rollback(status);
148   - logger.error("", e);
149   - logger.warn("失败的数据:" + JSON.toJSONString(d64s));
150   - }
151   - }
152   -
153   - private void update60(final List<D60> d60s) {
154   - if(null == d60s || d60s.size() == 0)
155   - return;
156   -
157   - String sql = "update bsth_v_directive_60 set reply46=?,reply46time=?,reply47=?,reply47time=? where device_id=? and timestamp=? and msg_id=?";
158   -
159   - //编程式事务
160   - DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
161   - DefaultTransactionDefinition def = new DefaultTransactionDefinition();
162   - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
163   - TransactionStatus status = tran.getTransaction(def);
164   -
165   - try{
166   - jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
167   - @Override
168   - public void setValues(PreparedStatement ps, int i) throws SQLException {
169   - D60 d60 = d60s.get(i);
170   - ps.setShort(1, isNvl(d60.getReply46()));
171   - if(null == d60.getReply46Time())
172   - ps.setNull(2, Types.BIGINT);
173   - else
174   - ps.setLong(2, d60.getReply46Time());
175   -
176   - ps.setShort(3, isNvl(d60.getReply47()));
177   -
178   - if(null == d60.getReply47Time())
179   - ps.setNull(4, Types.BIGINT);
180   - else
181   - ps.setLong(4, d60.getReply47Time());
182   - ps.setString(5, d60.getDeviceId());
183   - ps.setLong(6, d60.getTimestamp());
184   - ps.setInt(7, d60.getMsgId());
185   - }
186   -
187   - @Override
188   - public int getBatchSize() {
189   - return d60s.size();
190   - }
191   - });
192   -
193   - tran.commit(status);
194   -
195   - logger.info("60 更新成功: " + d60s.size());
196   - }catch (Exception e){
197   - tran.rollback(status);
198   - logger.error("", e);
199   - logger.warn("失败的数据:" + JSON.toJSONString(d60s));
200   - }
201   - }
202   -
203   - private void save60(final List<D60> d60s) {
204   - if(null == d60s || d60s.size() == 0)
205   - return;
206   -
207   - String sql = "insert into bsth_v_directive_60(device_id,error_text,http_code,oper_code,rq,sender,timestamp" +
208   - ",alarm_time,company_code,dispatch_instruct,instruct_type,msg_id,service_state,txt_content,is_dispatch" +
209   - ",line_code,reply46,reply46time,reply47,reply47time,sch) " +
210   - " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
211   -
212   - //编程式事务
213   - DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
214   - DefaultTransactionDefinition def = new DefaultTransactionDefinition();
215   - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
216   - TransactionStatus status = tran.getTransaction(def);
217   -
218   - try{
219   - jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
220   - @Override
221   - public void setValues(PreparedStatement ps, int i) throws SQLException {
222   - D60 d60 = d60s.get(i);
223   - ps.setString(1, d60.getDeviceId());
224   - ps.setString(2, isNvl(d60.getErrorText()));
225   - ps.setInt(3, d60.getHttpCode());
226   - ps.setShort(4, d60.getOperCode());
227   - ps.setString(5, d60.getRq());
228   - ps.setString(6, d60.getSender());
229   - ps.setLong(7, d60.getTimestamp());
230   -
231   - ps.setLong(8, isNvl(d60.getData().getAlarmTime()));
232   - ps.setShort(9, isNvl(d60.getData().getCompanyCode()));
233   - ps.setShort(10, isNvl(d60.getData().getDispatchInstruct()));
234   - ps.setInt(11, d60.getData().getInstructType());
235   - ps.setInt(12, d60.getData().getMsgId());
236   - ps.setLong(13, d60.getData().getServiceState());
237   - ps.setString(14, d60.getData().getTxtContent());
238   - ps.setBoolean(15, d60.isDispatch());
239   -
240   - ps.setString(16, isNvl(d60.getLineCode()));
241   - ps.setShort(17, isNvl(d60.getReply46()));
242   -
243   - if(null == d60.getReply46Time())
244   - ps.setNull(18, Types.BIGINT);
245   - else
246   - ps.setLong(18, d60.getReply46Time());
247   -
248   - ps.setShort(19, isNvl(d60.getReply47()));
249   -
250   - if(null == d60.getReply47Time())
251   - ps.setNull(20, Types.BIGINT);
252   - else
253   - ps.setLong(20, d60.getReply47Time());
254   -
255   - if(d60.getSch()==null)
256   - ps.setNull(21, Types.BIGINT);
257   - else
258   - ps.setLong(21, d60.getSch().getId());
259   - }
260   -
261   - @Override
262   - public int getBatchSize() {
263   - return d60s.size();
264   - }
265   - });
266   -
267   - tran.commit(status);
268   -
269   - logger.info("60 入库成功: " + d60s.size());
270   - }catch (Exception e){
271   - tran.rollback(status);
272   - logger.error("", e);
273   - logger.warn("失败的数据:" + JSON.toJSONString(d60s));
274   - }
275   - }
276   -
277   - private String isNvl(String v) {
278   - return v==null?"":v;
279   - }
280   -
281   - private short isNvl(Short v) {
282   - return v==null?0:v;
283   - }
284   -
285   - private long isNvl(Long v) {
286   - return v==null?0:v;
287   - }
288   -
289   - private boolean isDelete(D60 d60){
290   - try{
291   - //如果关联的班次已经不存在了,放弃入库,很低概率出现
292   - if(d60.isDispatch() && d60.getSch().isDeleted()){
293   - logger.warn("save 指令,发现 deleted=true 的班次,id=" + d60.getSch().getId());
294   - return true;
295   - }
296   - }catch (Exception e){
297   - logger.error("", e);
298   - }
299   -
300   - return false;
301   - }
302   -}
  1 +package com.bsth.data.directive;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.bsth.data.schedule.DayOfSchedule;
  5 +import com.bsth.entity.directive.D60;
  6 +import com.bsth.entity.directive.D64;
  7 +import com.bsth.entity.directive.Directive;
  8 +import com.bsth.repository.directive.D60Repository;
  9 +import com.bsth.repository.directive.D64Repository;
  10 +import org.joda.time.format.DateTimeFormat;
  11 +import org.joda.time.format.DateTimeFormatter;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.jdbc.core.BatchPreparedStatementSetter;
  16 +import org.springframework.jdbc.core.JdbcTemplate;
  17 +import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  18 +import org.springframework.stereotype.Component;
  19 +import org.springframework.transaction.TransactionDefinition;
  20 +import org.springframework.transaction.TransactionStatus;
  21 +import org.springframework.transaction.support.DefaultTransactionDefinition;
  22 +
  23 +import java.sql.PreparedStatement;
  24 +import java.sql.SQLException;
  25 +import java.sql.Types;
  26 +import java.util.ArrayList;
  27 +import java.util.List;
  28 +import java.util.concurrent.ConcurrentLinkedQueue;
  29 +
  30 +/**
  31 + * 指令持久化线程
  32 + * Created by panzhao on 2017/3/6.
  33 + */
  34 +@Component
  35 +public class DirectivesPstThread extends Thread {
  36 +
  37 + Logger logger = LoggerFactory.getLogger(this.getClass());
  38 +
  39 + @Autowired
  40 + D60Repository d60Repository;
  41 +
  42 + @Autowired
  43 + D64Repository d64Repository;
  44 +
  45 + @Autowired
  46 + DayOfSchedule dayOfSchedule;
  47 +
  48 + @Autowired
  49 + JdbcTemplate jdbcTemplate;
  50 +
  51 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
  52 +
  53 + @Override
  54 + public void run() {
  55 + try{
  56 + ConcurrentLinkedQueue<Directive> list = DayOfDirectives.pstDirectives;
  57 +
  58 + List<D60> d60s = new ArrayList<>();
  59 + List<D64> d64s = new ArrayList<>();
  60 + //按 60 和 64 分组
  61 + Directive directive;
  62 + D60 d60;
  63 + for (int i = 0; i < 2000; i++) {
  64 + directive = list.poll();
  65 + if(null == directive)
  66 + break;
  67 +
  68 + //日期
  69 + directive.setRq(fmtyyyyMMdd.print(directive.getTimestamp()));
  70 +
  71 + if (directive instanceof D60) {
  72 + d60 = (D60) directive;
  73 + if(isDelete(d60))
  74 + continue;
  75 + d60s.add(d60);
  76 + }
  77 + else if(directive instanceof D64)
  78 + d64s.add((D64) directive);
  79 + }
  80 +
  81 + //入库60
  82 + save60(d60s);
  83 + //入库64
  84 + save64(d64s);
  85 +
  86 +
  87 + // 60 指令更新(车载响应)
  88 + ConcurrentLinkedQueue<D60> updateD60s = DayOfDirectives.pstD60s;
  89 + d60s = new ArrayList<>();
  90 + for (int i = 0; i < 2000; i++) {
  91 + d60 = updateD60s.poll();
  92 + if(null == d60)
  93 + break;
  94 + d60s.add(d60);
  95 + }
  96 +
  97 + if(d60s.size() > 0)
  98 + update60(d60s);
  99 + }catch (Exception e){
  100 + logger.error("指令入库出现异常", e);
  101 + }
  102 + }
  103 +
  104 + private void save64(final List<D64> d64s) {
  105 + if(null == d64s || d64s.size() == 0)
  106 + return;
  107 +
  108 + String sql = "insert into bsth_v_directive_64(device_id,error_text,http_code,oper_code,rq,sender,timestamp,city_code,line_id,txt_content,resp_ack) " +
  109 + " values(?,?,?,?,?,?,?,?,?,?,?)";
  110 +
  111 + //编程式事务
  112 + DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
  113 + DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  114 + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
  115 + TransactionStatus status = tran.getTransaction(def);
  116 +
  117 + try{
  118 + jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
  119 + @Override
  120 + public void setValues(PreparedStatement ps, int i) throws SQLException {
  121 + D64 d64 = d64s.get(i);
  122 + ps.setString(1 , d64.getDeviceId());
  123 + ps.setString(2, isNvl(d64.getErrorText()));
  124 + ps.setInt(3, d64.getHttpCode());
  125 + ps.setShort(4, isNvl(d64.getOperCode()));
  126 + ps.setString(5, d64.getRq());
  127 +
  128 + ps.setString(6, isNvl(d64.getSender()));
  129 + ps.setLong(7, d64.getTimestamp());
  130 +
  131 + ps.setShort(8, isNvl(d64.getData().getCityCode()));
  132 + ps.setString(9, isNvl(d64.getData().getLineId()));
  133 + ps.setString(10, isNvl(d64.getData().getTxtContent()));
  134 + ps.setShort(11, isNvl(d64.getRespAck()));
  135 + }
  136 +
  137 + @Override
  138 + public int getBatchSize() {
  139 + return d64s.size();
  140 + }
  141 + });
  142 +
  143 + tran.commit(status);
  144 +
  145 + logger.info("64 入库成功: " + d64s.size());
  146 + }catch (Exception e){
  147 + logger.error(String.format("错误数据:%s", JSON.toJSONString(d64s)), e);
  148 + tran.rollback(status);
  149 + }
  150 + }
  151 +
  152 + private void update60(final List<D60> d60s) {
  153 + if(null == d60s || d60s.size() == 0)
  154 + return;
  155 +
  156 + String sql = "update bsth_v_directive_60 set reply46=?,reply46time=?,reply47=?,reply47time=? where device_id=? and timestamp=? and msg_id=?";
  157 +
  158 + //编程式事务
  159 + DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
  160 + DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  161 + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
  162 + TransactionStatus status = tran.getTransaction(def);
  163 +
  164 + try{
  165 + jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
  166 + @Override
  167 + public void setValues(PreparedStatement ps, int i) throws SQLException {
  168 + D60 d60 = d60s.get(i);
  169 + ps.setShort(1, isNvl(d60.getReply46()));
  170 + if(null == d60.getReply46Time())
  171 + ps.setNull(2, Types.BIGINT);
  172 + else
  173 + ps.setLong(2, d60.getReply46Time());
  174 +
  175 + ps.setShort(3, isNvl(d60.getReply47()));
  176 +
  177 + if(null == d60.getReply47Time())
  178 + ps.setNull(4, Types.BIGINT);
  179 + else
  180 + ps.setLong(4, d60.getReply47Time());
  181 + ps.setString(5, d60.getDeviceId());
  182 + ps.setLong(6, d60.getTimestamp());
  183 + ps.setInt(7, d60.getMsgId());
  184 + }
  185 +
  186 + @Override
  187 + public int getBatchSize() {
  188 + return d60s.size();
  189 + }
  190 + });
  191 +
  192 + tran.commit(status);
  193 +
  194 + logger.info("60 更新成功: " + d60s.size());
  195 + }catch (Exception e){
  196 + logger.error(String.format("错误数据:%s", JSON.toJSONString(d60s)), e);
  197 + tran.rollback(status);
  198 + }
  199 + }
  200 +
  201 + private void save60(final List<D60> d60s) {
  202 + if(null == d60s || d60s.size() == 0)
  203 + return;
  204 +
  205 + String sql = "insert into bsth_v_directive_60(device_id,error_text,http_code,oper_code,rq,sender,timestamp" +
  206 + ",alarm_time,company_code,dispatch_instruct,instruct_type,msg_id,service_state,txt_content,is_dispatch" +
  207 + ",line_code,reply46,reply46time,reply47,reply47time,sch) " +
  208 + " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  209 +
  210 + //编程式事务
  211 + DataSourceTransactionManager tran = new DataSourceTransactionManager(jdbcTemplate.getDataSource());
  212 + DefaultTransactionDefinition def = new DefaultTransactionDefinition();
  213 + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
  214 + TransactionStatus status = tran.getTransaction(def);
  215 +
  216 + try{
  217 + jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
  218 + @Override
  219 + public void setValues(PreparedStatement ps, int i) throws SQLException {
  220 + D60 d60 = d60s.get(i);
  221 + ps.setString(1, d60.getDeviceId());
  222 + ps.setString(2, isNvl(d60.getErrorText()));
  223 + ps.setInt(3, d60.getHttpCode());
  224 + ps.setShort(4, d60.getOperCode());
  225 + ps.setString(5, d60.getRq());
  226 + ps.setString(6, d60.getSender());
  227 + ps.setLong(7, d60.getTimestamp());
  228 +
  229 + ps.setLong(8, isNvl(d60.getData().getAlarmTime()));
  230 + ps.setShort(9, isNvl(d60.getData().getCompanyCode()));
  231 + ps.setShort(10, isNvl(d60.getData().getDispatchInstruct()));
  232 + ps.setInt(11, d60.getData().getInstructType());
  233 + ps.setInt(12, d60.getData().getMsgId());
  234 + ps.setLong(13, d60.getData().getServiceState());
  235 + ps.setString(14, d60.getData().getTxtContent());
  236 + ps.setBoolean(15, d60.isDispatch());
  237 +
  238 + ps.setString(16, isNvl(d60.getLineCode()));
  239 + ps.setShort(17, isNvl(d60.getReply46()));
  240 +
  241 + if(null == d60.getReply46Time())
  242 + ps.setNull(18, Types.BIGINT);
  243 + else
  244 + ps.setLong(18, d60.getReply46Time());
  245 +
  246 + ps.setShort(19, isNvl(d60.getReply47()));
  247 +
  248 + if(null == d60.getReply47Time())
  249 + ps.setNull(20, Types.BIGINT);
  250 + else
  251 + ps.setLong(20, d60.getReply47Time());
  252 +
  253 + if(d60.getSch()==null)
  254 + ps.setNull(21, Types.BIGINT);
  255 + else
  256 + ps.setLong(21, d60.getSch().getId());
  257 + }
  258 +
  259 + @Override
  260 + public int getBatchSize() {
  261 + return d60s.size();
  262 + }
  263 + });
  264 +
  265 + tran.commit(status);
  266 +
  267 + logger.info("60 入库成功: " + d60s.size());
  268 + }catch (Exception e){
  269 + logger.error(String.format("错误数据:%s", JSON.toJSONString(d60s)), e);
  270 + tran.rollback(status);
  271 + }
  272 + }
  273 +
  274 + private String isNvl(String v) {
  275 + return v==null?"":v;
  276 + }
  277 +
  278 + private short isNvl(Short v) {
  279 + return v==null?0:v;
  280 + }
  281 +
  282 + private long isNvl(Long v) {
  283 + return v==null?0:v;
  284 + }
  285 +
  286 + private boolean isDelete(D60 d60){
  287 + try{
  288 + //如果关联的班次已经不存在了,放弃入库,很低概率出现
  289 + if(d60.isDispatch() && d60.getSch().isDeleted()){
  290 + logger.warn("save 指令,发现 deleted=true 的班次,id=" + d60.getSch().getId());
  291 + return true;
  292 + }
  293 + }catch (Exception e){
  294 + logger.error("", e);
  295 + }
  296 +
  297 + return false;
  298 + }
  299 +}
... ...
src/main/java/com/bsth/filter/WhiteIpFilter.java
... ... @@ -54,6 +54,7 @@ public class WhiteIpFilter implements Filter {
54 54 for (WhiteIp whiteIp : whiteIps) {
55 55 if (ip.equals(whiteIp.getIp())) {
56 56 isMatch = true;
  57 + break;
57 58 }
58 59 }
59 60 }
... ...
src/main/java/com/bsth/repository/calc/CalcInvestigateMonthRepository.java
1   -package com.bsth.repository.calc;
2   -
3   -
4   -import java.util.List;
5   -
6   -import org.springframework.data.jpa.repository.Query;
7   -import org.springframework.stereotype.Repository;
8   -
9   -import com.bsth.entity.calc.CalcInvestigateMonth;
10   -import com.bsth.repository.BaseRepository;
11   -
12   -@Repository
13   -public interface CalcInvestigateMonthRepository extends BaseRepository<CalcInvestigateMonth, Integer>{
14   -
15   - @Query(value="select c from CalcInvestigateMonth c where month = ?1")
16   - List<CalcInvestigateMonth> findByMonth(String month);
17   -
18   - @Query(value="select c from CalcInvestigateMonth c where month = ?1 and gsbm like %?2% and fgsbm like %?3%")
19   - List<CalcInvestigateMonth> findByMonth(String month, String gsbm, String fgsbm);
20   -
21   - @Query(value="select c from CalcInvestigateMonth c where month = ?1 and xl = ?2")
22   - List<CalcInvestigateMonth> findByMonthAndLine(String month, String line);
23   -
24   -}
  1 +package com.bsth.repository.calc;
  2 +
  3 +
  4 +import java.util.List;
  5 +
  6 +import org.springframework.data.jpa.repository.Query;
  7 +import org.springframework.stereotype.Repository;
  8 +
  9 +import com.bsth.entity.calc.CalcInvestigateMonth;
  10 +import com.bsth.repository.BaseRepository;
  11 +
  12 +@Repository
  13 +public interface CalcInvestigateMonthRepository extends BaseRepository<CalcInvestigateMonth, Integer>{
  14 +
  15 + @Query(value="select c from CalcInvestigateMonth c where month = ?1 order by c.xlmc")
  16 + List<CalcInvestigateMonth> findByMonth(String month);
  17 +
  18 + @Query(value="select c from CalcInvestigateMonth c where month = ?1 and gsbm like %?2% and fgsbm like %?3% order by c.xlmc")
  19 + List<CalcInvestigateMonth> findByMonth(String month, String gsbm, String fgsbm);
  20 +
  21 + @Query(value="select c from CalcInvestigateMonth c where month = ?1 and xl = ?2 order by c.xlmc")
  22 + List<CalcInvestigateMonth> findByMonthAndLine(String month, String line);
  23 +
  24 +}
... ...
src/main/java/com/bsth/service/calc/impl/CalcMixServiceImpl.java
1   -package com.bsth.service.calc.impl;
2   -
3   -import java.sql.ResultSet;
4   -import java.sql.SQLException;
5   -import java.text.SimpleDateFormat;
6   -import java.util.ArrayList;
7   -import java.util.HashMap;
8   -import java.util.Iterator;
9   -import java.util.List;
10   -import java.util.Map;
11   -
12   -import com.bsth.data.BasicData;
13   -import com.bsth.entity.calc.CalcWaybill;
14   -import com.bsth.entity.calc.CalcInvestigateMonth;
15   -import com.bsth.entity.mcy_forms.Singledata;
16   -import com.bsth.repository.calc.CalcInvestigateMonthRepository;
17   -import com.bsth.repository.calc.CalcWaybillRepository;
18   -import com.bsth.service.LineService;
19   -import com.bsth.service.calc.CalcMixService;
20   -import com.bsth.util.Arith;
21   -import com.bsth.util.ReportUtils;
22   -
23   -import org.slf4j.Logger;
24   -import org.slf4j.LoggerFactory;
25   -import org.springframework.beans.factory.annotation.Autowired;
26   -import org.springframework.jdbc.core.JdbcTemplate;
27   -import org.springframework.jdbc.core.RowMapper;
28   -import org.springframework.stereotype.Service;
29   -
30   -/**
31   - * Created by 19/02/28.
32   - */
33   -@Service
34   -public class CalcMixServiceImpl implements CalcMixService {
35   -
36   - @Autowired
37   - private CalcWaybillRepository calcRepository;
38   -
39   - @Autowired
40   - private CalcInvestigateMonthRepository calcInvestigateMonthRepository;
41   -
42   - @Autowired
43   - private LineService lineService;
44   -
45   - @Autowired
46   - JdbcTemplate jdbcTemplate;
47   -
48   -
49   - Logger logger = LoggerFactory.getLogger(this.getClass());
50   -
51   -
52   - @Override
53   - public List<Map<String, Object>> calcjsyspy(String line, String date, String date2,
54   - String empnames, String cont, String gsdm, String fgsdm) {
55   -
56   - List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
57   - List<CalcWaybill> list = null;
58   -
59   - int flag = 0;
60   - if("驾驶员".equals(empnames)){
61   - flag = 1;
62   - list = calcRepository.scheduleByJsy(line, date, date2, gsdm, fgsdm, cont);
63   - } else if("售票员".equals(empnames)){
64   - flag = 2;
65   - list = calcRepository.scheduleBySpy(line, date, date2, gsdm, fgsdm, cont);
66   - } else if("车辆自编号".equals(empnames)){
67   - flag = 3;
68   - list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont);
69   - }
70   -
71   - List<CalcWaybill> calcList = new ArrayList<CalcWaybill>();
72   - Map<String, CalcWaybill> calcMap = new HashMap<String, CalcWaybill>();
73   -
74   - CalcWaybill zjCalc = this.initCalcWaybill();
75   - zjCalc.setjName("合计");
76   - for(CalcWaybill c : list){
77   - String key = "";
78   - if(flag == 1){
79   - if(c.getjGh() != null && c.getjName() != null)
80   - key = c.getjGh() + "/" + c.getjName();
81   - } else if(flag == 2){
82   - if(c.getsGh() != null && c.getsName() != null)
83   - key = c.getsGh() + "/" + c.getsName();
84   - } else if(flag == 3){
85   - if(c.getCl() != null)
86   - key = c.getCl();
87   - }
88   -
89   - if(key.trim().length() == 0 || "/".equals(key))
90   - continue;
91   -
92   - CalcWaybill calc = null;
93   - if(calcMap.containsKey(key)){
94   - calc = calcMap.get(key);
95   - } else {
96   - calc = this.initCalcWaybill();
97   - calc.setjName(key);
98   - calcList.add(calc);
99   - calcMap.put(key, calc);
100   - }
101   -
102   - this.summation(calc, c);
103   -
104   - this.summation(zjCalc, c);
105   -
106   - }
107   - calcList.add(zjCalc);
108   - calcMap.put("合计", zjCalc);
109   -
110   - for(CalcWaybill c : calcList){
111   - Map<String, Object> m = new HashMap<String, Object>();
112   - m.put("jName", c.getjName());
113   - m.put("jhyybc", c.getJhyybc());
114   - m.put("jhfyybc", c.getJhfyybc());
115   - m.put("sjyybc", c.getSjyybc());
116   - m.put("sjfyybc", c.getSjfyybc());
117   - m.put("lbbc", c.getLbbc());
118   - m.put("ljbc", c.getLjbc());
119   - m.put("jhzlc", Arith.add(c.getJhyylc(), c.getJhfyylc()));
120   - m.put("jhyylc", c.getJhyylc());
121   - m.put("jhfyylc", c.getJhfyylc());
122   - m.put("sjzlc", Arith.add(c.getSjyylc(), c.getSjfyylc()));
123   - m.put("sjyylc", c.getSjyylc());
124   - m.put("sjfyylc", c.getSjfyylc());
125   - m.put("lblc", c.getLblc());
126   - m.put("ljyylc", c.getLjyylc());
127   - m.put("ljfyylc", c.getLjfyylc());
128   - resList.add(m);
129   - }
130   -
131   - return resList;
132   - }
133   -
134   - public CalcWaybill initCalcWaybill(){
135   - CalcWaybill calc = new CalcWaybill();
136   - calc.setJhyybc(0);
137   - calc.setJhyylc(0d);
138   - calc.setJhfyybc(0);
139   - calc.setJhfyylc(0d);
140   - calc.setSjyybc(0);
141   - calc.setSjyylc(0d);
142   - calc.setSjfyybc(0);
143   - calc.setSjfyylc(0d);
144   - calc.setLbbc(0);
145   - calc.setLblc(0d);
146   - calc.setLjbc(0);
147   - calc.setLjyylc(0d);
148   - calc.setLjfyylc(0d);
149   - return calc;
150   - }
151   -
152   - public CalcWaybill summation(CalcWaybill c1, CalcWaybill c2){
153   - c1.setJhyybc(c1.getJhyybc() + c2.getJhyybc());
154   - c1.setJhyylc(Arith.add(c1.getJhyylc(), c2.getJhyylc()));
155   - c1.setJhfyybc(c1.getJhfyybc() + c2.getJhfyybc());
156   - c1.setJhfyylc(Arith.add(c1.getJhfyylc(), c2.getJhfyylc()));
157   - c1.setSjyybc(c1.getSjyybc() + c2.getSjyybc());
158   - c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getSjyylc()));
159   - c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getLjyylc()));
160   - c1.setSjfyybc(c1.getSjfyybc() + c2.getSjfyybc());
161   - c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getSjfyylc()));
162   - c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getLjfyylc()));
163   - c1.setLbbc(c1.getLbbc() + c2.getLbbc());
164   - c1.setLblc(Arith.add(c1.getLblc(), c2.getLblc()));
165   - c1.setLjbc(c1.getLjbc() + c2.getLjbc());
166   - c1.setLjyylc(Arith.add(c1.getLjyylc(), c2.getLjyylc()));
167   - c1.setLjfyylc(Arith.add(c1.getLjfyylc(), c2.getLjfyylc()));
168   - return c1;
169   - }
170   -
171   - @Override
172   - public List<Map<String, Object>> singledatatj(String line,
173   - String date, String date2,
174   - String tjtype, String cont,
175   - String gsdm, String fgsdm, String sfdc) {
176   -
177   - List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
178   - List<CalcWaybill> list = null;
179   -
180   - int flag = 0;
181   - if("驾驶员".equals(tjtype)){
182   - flag = 1;
183   - list = calcRepository.scheduleByJsy(line, date, date2, gsdm, fgsdm, cont);
184   - } else if("售票员".equals(tjtype)){
185   - flag = 2;
186   - list = calcRepository.scheduleBySpy(line, date, date2, gsdm, fgsdm, cont);
187   - } else if("车辆自编号".equals(tjtype)){
188   - flag = 3;
189   - if("1".equals(sfdc)){
190   - list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont, true);
191   - } else if("0".equals(sfdc)){
192   - list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont, false);
193   - } else {
194   - list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont);
195   - }
196   - }
197   -
198   - List<CalcWaybill> calcList = new ArrayList<CalcWaybill>();
199   - Map<String, CalcWaybill> calcMap = new HashMap<String, CalcWaybill>();
200   -
201   - CalcWaybill zjCalc = this.initCalcWaybill();
202   - zjCalc.setjName("合计");
203   - for(CalcWaybill c : list){
204   - String key = "";
205   - if(flag == 1){
206   - if(c.getjGh() != null && c.getjName() != null)
207   - key += c.getjGh() + "/" + c.getjName();
208   - } else if(flag == 2){
209   - if(c.getsGh() != null && c.getsName() != null)
210   - key += c.getsGh() + "/" + c.getsName();
211   - } else if(flag == 3){
212   - if(c.getCl() != null)
213   - key += c.getCl();
214   - }
215   -
216   - if(key.trim().length() == 0 || "/".equals(key))
217   - continue;
218   -
219   - String jName = key;
220   - key = c.getXl() + "/" + key;
221   -
222   - CalcWaybill calc = null;
223   - if(calcMap.containsKey(key)){
224   - calc = calcMap.get(key);
225   - } else {
226   - calc = this.initCalcWaybill();
227   - calc.setXlName(c.getXlName());
228   - calc.setXl(c.getXl());
229   - calc.setjName(jName);
230   - calcList.add(calc);
231   - calcMap.put(key, calc);
232   - }
233   -
234   - this.summation(calc, c);
235   -
236   - this.summation(zjCalc, c);
237   -
238   - }
239   - calcList.add(zjCalc);
240   - calcMap.put("合计", zjCalc);
241   -
242   - Map<String, Map<String, Object>> keyMap = new HashMap<String, Map<String, Object>>();
243   - for(CalcWaybill c : calcList){
244   - Map<String, Object> m = new HashMap<String, Object>();
245   - m.put("gS", BasicData.businessFgsCodeNameMap.get(fgsdm+"_"+gsdm));
246   - m.put("xl", c.getXl());
247   - m.put("xlName", c.getXlName());
248   - m.put("jName", c.getjName());
249   - m.put("jhyybc", c.getJhyybc());
250   - m.put("jhfyybc", c.getJhfyybc());
251   - m.put("sjyybc", c.getSjyybc());
252   - m.put("sjfyybc", c.getSjfyybc());
253   - m.put("lbbc", c.getLbbc());
254   - m.put("ljbc", c.getLjbc());
255   - m.put("jhzlc", Arith.add(c.getJhyylc(), c.getJhfyylc()));
256   - m.put("jhyylc", c.getJhyylc());
257   - m.put("jhfyylc", c.getJhfyylc());
258   - m.put("sjzlc", Arith.add(c.getSjyylc(), c.getSjfyylc()));
259   - m.put("sjyylc", c.getSjyylc());
260   - m.put("sjfyylc", c.getSjfyylc());
261   - m.put("lblc", c.getLblc());
262   - m.put("ljyylc", c.getLjyylc());
263   - m.put("ljfyylc", c.getLjfyylc());
264   - if(flag != 2){
265   - m.put("hyl", 0);
266   - m.put("jzl", 0);
267   - m.put("sh", 0);
268   - }
269   - resList.add(m);
270   - keyMap.put(c.getXl() + "/" + c.getjName(), m);
271   - }
272   -
273   - String linesql="";
274   - if(!line.equals("")){
275   - linesql +=" and xlbm ='"+line+"' ";
276   - }
277   - if(!gsdm.equals("")){
278   - linesql +=" and ssgsdm ='"+gsdm+"' ";
279   - }
280   - if(!fgsdm.equals("")){
281   - linesql +=" and fgsdm ='"+fgsdm+"' ";
282   - }
283   - String nysql="SELECT id,xlbm,nbbm,jsy,jzl as jzl,yh as yh,sh as sh,fgsdm FROM bsth_c_ylb"
284   - + " WHERE rq >= '"+date+"' and rq <= '"+date2+"'"
285   - + linesql
286   - + " union"
287   - + " SELECT id,xlbm,nbbm,jsy,cdl as jzl,hd as yh,sh as sh,fgsdm FROM bsth_c_dlb"
288   - + " WHERE rq >= '"+date+"' and rq <= '"+date2+"'"
289   - + linesql;
290   - List<Singledata> listNy = jdbcTemplate.query(nysql, new RowMapper<Singledata>() {
291   - @Override
292   - public Singledata mapRow(ResultSet arg0, int arg1) throws SQLException {
293   - Singledata sin = new Singledata();
294   - sin.setxL(arg0.getString("xlbm"));
295   - sin.setJsy(arg0.getString("jsy"));
296   - sin.setClzbh(arg0.getString("nbbm"));
297   - sin.setJzl(arg0.getString("jzl"));
298   - sin.setHyl(arg0.getString("yh"));
299   - sin.setUnyyyl(arg0.getString("sh"));
300   - sin.setgS(arg0.getString("fgsdm"));
301   - return sin;
302   - }
303   - });
304   -
305   - if(flag != 2){
306   - Map<String, Object> last = resList.get(resList.size()-1);
307   - last.put("hyl", 0);
308   - last.put("jzl", 0);
309   - last.put("sh", 0);
310   -
311   - //统计油,电表中手动添加的或者有加注没里程的数据
312   - for (int i = 0; i < listNy.size(); i++) {
313   - Singledata sin_=listNy.get(i);
314   - String xl=sin_.getxL();
315   - String str = "";
316   - if(flag == 1){
317   - str = sin_.getJsy() + "/" + BasicData.allPerson.get(gsdm+"-"+sin_.getJsy());
318   - } else {
319   - str = sin_.getClzbh();
320   - }
321   -// boolean fages=true;
322   - if(keyMap.containsKey(xl + "/" + str)){
323   - Map<String, Object> m = keyMap.get(xl + "/" + str);
324   - m.put("hyl", Arith.add(m.get("hyl"), sin_.getHyl()!=null?sin_.getHyl():0));
325   - m.put("jzl", Arith.add(m.get("jzl"), sin_.getJzl()!=null?sin_.getJzl():0));
326   - m.put("sh", Arith.add(m.get("sh"), sin_.getUnyyyl()!=null?sin_.getUnyyyl():0));
327   - last.put("hyl", Arith.add(last.get("hyl"), sin_.getHyl()!=null?sin_.getHyl():0));
328   - last.put("jzl", Arith.add(last.get("jzl"), sin_.getJzl()!=null?sin_.getJzl():0));
329   - last.put("sh", Arith.add(last.get("sh"), sin_.getUnyyyl()!=null?sin_.getUnyyyl():0));
330   - } else {
331   - Map<String, Object> m = new HashMap<String, Object>();
332   - m.put("gS", BasicData.businessFgsCodeNameMap.get(fgsdm+"_"+gsdm));
333   - m.put("xl", xl);
334   - m.put("xlName", BasicData.lineCodeAllNameMap.get(xl));
335   - m.put("jName", str);
336   - m.put("jhzlc", 0);
337   - m.put("sjzlc", 0);
338   - m.put("sjfyylc", 0);
339   - m.put("hyl", sin_.getHyl()!=null?sin_.getHyl():0);
340   - m.put("jzl", sin_.getJzl()!=null?sin_.getJzl():0);
341   - m.put("sh", sin_.getUnyyyl()!=null?sin_.getUnyyyl():0);
342   - last.put("hyl", Arith.add(last.get("hyl"), m.get("hyl")));
343   - last.put("jzl", Arith.add(last.get("jzl"), m.get("jzl")));
344   - last.put("sh", Arith.add(last.get("sh"), m.get("sh")));
345   -
346   - keyMap.put(xl + "/" + str, m);
347   - }
348   - }
349   - resList.remove(last);
350   - resList.add(last);
351   - }
352   -
353   - return resList;
354   - }
355   -
356   - //浦东公交线路调查表
357   - @Override
358   - public List<CalcInvestigateMonth> calcInvestigateMonth(String gsbm, String fgsbm, String month, String line,
359   - String xlName, String nature, String type) {
360   - List<CalcInvestigateMonth> resList = new ArrayList<CalcInvestigateMonth>();
361   -
362   - Map<String, Boolean> lineNature = lineService.lineNature();
363   -
364   - List<CalcInvestigateMonth> list = new ArrayList<CalcInvestigateMonth>();
365   - if(line != null && line.length() > 0){
366   - list = calcInvestigateMonthRepository.findByMonthAndLine(month, line);
367   - } else if(gsbm != null && gsbm.length() > 0){
368   - list = calcInvestigateMonthRepository.findByMonth(month, gsbm, fgsbm);
369   - } else {
370   - list = calcInvestigateMonthRepository.findByMonth(month);
371   - }
372   -
373   - for(CalcInvestigateMonth c : list){
374   - if("1".equals(nature)){
375   - if(lineNature.containsKey(c.getXl()) && lineNature.get(c.getXl())){
376   - resList.add(c);
377   - }
378   - } else if("2".equals(nature)){
379   - if(!lineNature.containsKey(c.getXl()) || !lineNature.get(c.getXl())){
380   - resList.add(c);
381   - }
382   - } else {
383   - resList.add(c);
384   - }
385   - }
386   -
387   - if (type != null && type.length() != 0 && type.equals("export")) {
388   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
389   - sdfSimple = new SimpleDateFormat("yyyyMMdd"),
390   - monSimple = new SimpleDateFormat("yyyy-MM");
391   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
392   - Map<String, Object> m = new HashMap<String, Object>();
393   - m.put("date", month);
394   - m.put("currMonth", "(" + month + ")");
395   - ReportUtils ee = new ReportUtils();
396   - try {
397   - List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
398   - for(CalcInvestigateMonth c : resList){
399   - Map<String, Object> map = new HashMap<String, Object>();
400   - map.put("xlmc", c.getXlmc()!=null?c.getXlmc():"");
401   - map.put("qzpcs", c.getQzpcs()!=null?c.getQzpcs():"");
402   - map.put("xlsx", c.getXlsx()!=null?c.getXlsx():"");
403   - map.put("xllx", c.getXllx()!=null?c.getXllx():"");
404   - map.put("xlcd", c.getXlcd()!=null?c.getXlcd():"");
405   - map.put("sfgp", c.getSfgp()!=null?c.getSfgp():"");
406   - map.put("sflpxl", c.getSflpxl()!=null?c.getSflpxl():"");
407   - map.put("smbsj", c.getSmbsj()!=null?c.getSmbsj():"");
408   - if("常规".equals(c.getDdfs())){
409   - map.put("ddfsCg", "√");
410   - map.put("ddfsDyh", "");
411   - } else if("多样化".equals(c.getDdfs())){
412   - map.put("ddfsCg", "");
413   - map.put("ddfsDyh", "√");
414   - } else {
415   - map.put("ddfsCg", "");
416   - map.put("ddfsDyh", "");
417   - }
418   - map.put("gfjgsj", c.getGfjgsj()!=null?c.getGfjgsj():"");
419   - map.put("dgjgsj", c.getDgjgsj()!=null?c.getDgjgsj():"");
420   - map.put("sfxjgj", c.getSfxjgj()!=null?c.getSfxjgj():"");
421   - map.put("rjlc", c.getRjlc()!=null?c.getRjlc():"");
422   - map.put("rjbc", c.getRjbc()!=null?c.getRjbc():"");
423   - map.put("rjrc", c.getRjrc()!=null?c.getRjrc():"");
424   - map.put("rjdcrc", c.getRjdcrc()!=null?c.getRjdcrc():"");
425   - map.put("mbcrc", c.getMbcrc()!=null?c.getMbcrc():"");
426   - map.put("jhzgl", c.getJhzgl()!=null?c.getJhzgl():"");
427   - map.put("sjzgl", c.getSjzgl()!=null?c.getSjzgl():"");
428   - map.put("sjyylc", c.getSjyylc()!=null?c.getSjyylc():"");
429   - map.put("lclyl", c.getLclyl()!=null?c.getLclyl():"");
430   - map.put("bglrc", c.getBglrc()!=null?c.getBglrc():"");
431   - map.put("yrc", c.getYrc()!=null?c.getYrc():"");
432   - map.put("yys", c.getYys()!=null?c.getYys():"");
433   - map.put("pj", c.getPj()!=null?c.getPj():"");
434   - map.put("bglys", c.getBglys()!=null?c.getBglys():"");
435   - map.put("tjgjz", c.getTjgjz()!=null?c.getTjgjz():"");
436   - map.put("tjsjyy", c.getTjsjyy()!=null?c.getTjsjyy():"");
437   - map.put("wyx", c.getWyx()!=null?c.getWyx():"");
438   - map.put("xlzx", c.getXlzx()!=null?c.getXlzx():"");
439   - map.put("xlzd", c.getXlzd()!=null?c.getXlzd():"");
440   - map.put("bz", c.getBz()!=null?c.getBz():"");
441   - mapList.add(map);
442   - }
443   - listI.add(mapList.iterator());
444   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
445   - ee.excelReplace(listI, new Object[]{m}, path + "mould/calcInvestigateMonth.xls",
446   - path + "export/" + "浦东公交线路调查表"+month+".xls");
447   - } catch (Exception e) {
448   - // TODO: handle exception
449   - e.printStackTrace();
450   - logger.info("" , e);
451   - }
452   - }
453   - return resList;
454   - }
455   -
456   -}
  1 +package com.bsth.service.calc.impl;
  2 +
  3 +import java.sql.ResultSet;
  4 +import java.sql.SQLException;
  5 +import java.text.SimpleDateFormat;
  6 +import java.util.ArrayList;
  7 +import java.util.HashMap;
  8 +import java.util.Iterator;
  9 +import java.util.List;
  10 +import java.util.Map;
  11 +
  12 +import com.bsth.data.BasicData;
  13 +import com.bsth.entity.calc.CalcWaybill;
  14 +import com.bsth.entity.calc.CalcInvestigateMonth;
  15 +import com.bsth.entity.mcy_forms.Singledata;
  16 +import com.bsth.repository.calc.CalcInvestigateMonthRepository;
  17 +import com.bsth.repository.calc.CalcWaybillRepository;
  18 +import com.bsth.service.LineService;
  19 +import com.bsth.service.calc.CalcMixService;
  20 +import com.bsth.util.Arith;
  21 +import com.bsth.util.ReportUtils;
  22 +
  23 +import org.slf4j.Logger;
  24 +import org.slf4j.LoggerFactory;
  25 +import org.springframework.beans.factory.annotation.Autowired;
  26 +import org.springframework.jdbc.core.JdbcTemplate;
  27 +import org.springframework.jdbc.core.RowMapper;
  28 +import org.springframework.stereotype.Service;
  29 +
  30 +/**
  31 + * Created by 19/02/28.
  32 + */
  33 +@Service
  34 +public class CalcMixServiceImpl implements CalcMixService {
  35 +
  36 + @Autowired
  37 + private CalcWaybillRepository calcRepository;
  38 +
  39 + @Autowired
  40 + private CalcInvestigateMonthRepository calcInvestigateMonthRepository;
  41 +
  42 + @Autowired
  43 + private LineService lineService;
  44 +
  45 + @Autowired
  46 + JdbcTemplate jdbcTemplate;
  47 +
  48 +
  49 + Logger logger = LoggerFactory.getLogger(this.getClass());
  50 +
  51 +
  52 + @Override
  53 + public List<Map<String, Object>> calcjsyspy(String line, String date, String date2,
  54 + String empnames, String cont, String gsdm, String fgsdm) {
  55 +
  56 + List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  57 + List<CalcWaybill> list = null;
  58 +
  59 + int flag = 0;
  60 + if("驾驶员".equals(empnames)){
  61 + flag = 1;
  62 + list = calcRepository.scheduleByJsy(line, date, date2, gsdm, fgsdm, cont);
  63 + } else if("售票员".equals(empnames)){
  64 + flag = 2;
  65 + list = calcRepository.scheduleBySpy(line, date, date2, gsdm, fgsdm, cont);
  66 + } else if("车辆自编号".equals(empnames)){
  67 + flag = 3;
  68 + list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont);
  69 + }
  70 +
  71 + List<CalcWaybill> calcList = new ArrayList<CalcWaybill>();
  72 + Map<String, CalcWaybill> calcMap = new HashMap<String, CalcWaybill>();
  73 +
  74 + CalcWaybill zjCalc = this.initCalcWaybill();
  75 + zjCalc.setjName("合计");
  76 + for(CalcWaybill c : list){
  77 + String key = "";
  78 + if(flag == 1){
  79 + if(c.getjGh() != null && c.getjName() != null)
  80 + key = c.getjGh() + "/" + c.getjName();
  81 + } else if(flag == 2){
  82 + if(c.getsGh() != null && c.getsName() != null)
  83 + key = c.getsGh() + "/" + c.getsName();
  84 + } else if(flag == 3){
  85 + if(c.getCl() != null)
  86 + key = c.getCl();
  87 + }
  88 +
  89 + if(key.trim().length() == 0 || "/".equals(key))
  90 + continue;
  91 +
  92 + CalcWaybill calc = null;
  93 + if(calcMap.containsKey(key)){
  94 + calc = calcMap.get(key);
  95 + } else {
  96 + calc = this.initCalcWaybill();
  97 + calc.setjName(key);
  98 + calcList.add(calc);
  99 + calcMap.put(key, calc);
  100 + }
  101 +
  102 + this.summation(calc, c);
  103 +
  104 + this.summation(zjCalc, c);
  105 +
  106 + }
  107 + calcList.add(zjCalc);
  108 + calcMap.put("合计", zjCalc);
  109 +
  110 + for(CalcWaybill c : calcList){
  111 + Map<String, Object> m = new HashMap<String, Object>();
  112 + m.put("jName", c.getjName());
  113 + m.put("jhyybc", c.getJhyybc());
  114 + m.put("jhfyybc", c.getJhfyybc());
  115 + m.put("sjyybc", c.getSjyybc());
  116 + m.put("sjfyybc", c.getSjfyybc());
  117 + m.put("lbbc", c.getLbbc());
  118 + m.put("ljbc", c.getLjbc());
  119 + m.put("jhzlc", Arith.add(c.getJhyylc(), c.getJhfyylc()));
  120 + m.put("jhyylc", c.getJhyylc());
  121 + m.put("jhfyylc", c.getJhfyylc());
  122 + m.put("sjzlc", Arith.add(c.getSjyylc(), c.getSjfyylc()));
  123 + m.put("sjyylc", c.getSjyylc());
  124 + m.put("sjfyylc", c.getSjfyylc());
  125 + m.put("lblc", c.getLblc());
  126 + m.put("ljyylc", c.getLjyylc());
  127 + m.put("ljfyylc", c.getLjfyylc());
  128 + resList.add(m);
  129 + }
  130 +
  131 + return resList;
  132 + }
  133 +
  134 + public CalcWaybill initCalcWaybill(){
  135 + CalcWaybill calc = new CalcWaybill();
  136 + calc.setJhyybc(0);
  137 + calc.setJhyylc(0d);
  138 + calc.setJhfyybc(0);
  139 + calc.setJhfyylc(0d);
  140 + calc.setSjyybc(0);
  141 + calc.setSjyylc(0d);
  142 + calc.setSjfyybc(0);
  143 + calc.setSjfyylc(0d);
  144 + calc.setLbbc(0);
  145 + calc.setLblc(0d);
  146 + calc.setLjbc(0);
  147 + calc.setLjyylc(0d);
  148 + calc.setLjfyylc(0d);
  149 + return calc;
  150 + }
  151 +
  152 + public CalcWaybill summation(CalcWaybill c1, CalcWaybill c2){
  153 + c1.setJhyybc(c1.getJhyybc() + c2.getJhyybc());
  154 + c1.setJhyylc(Arith.add(c1.getJhyylc(), c2.getJhyylc()));
  155 + c1.setJhfyybc(c1.getJhfyybc() + c2.getJhfyybc());
  156 + c1.setJhfyylc(Arith.add(c1.getJhfyylc(), c2.getJhfyylc()));
  157 + c1.setSjyybc(c1.getSjyybc() + c2.getSjyybc());
  158 + c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getSjyylc()));
  159 + c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getLjyylc()));
  160 + c1.setSjfyybc(c1.getSjfyybc() + c2.getSjfyybc());
  161 + c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getSjfyylc()));
  162 + c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getLjfyylc()));
  163 + c1.setLbbc(c1.getLbbc() + c2.getLbbc());
  164 + c1.setLblc(Arith.add(c1.getLblc(), c2.getLblc()));
  165 + c1.setLjbc(c1.getLjbc() + c2.getLjbc());
  166 + c1.setLjyylc(Arith.add(c1.getLjyylc(), c2.getLjyylc()));
  167 + c1.setLjfyylc(Arith.add(c1.getLjfyylc(), c2.getLjfyylc()));
  168 + return c1;
  169 + }
  170 +
  171 + @Override
  172 + public List<Map<String, Object>> singledatatj(String line,
  173 + String date, String date2,
  174 + String tjtype, String cont,
  175 + String gsdm, String fgsdm, String sfdc) {
  176 +
  177 + List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  178 + List<CalcWaybill> list = null;
  179 +
  180 + int flag = 0;
  181 + if("驾驶员".equals(tjtype)){
  182 + flag = 1;
  183 + list = calcRepository.scheduleByJsy(line, date, date2, gsdm, fgsdm, cont);
  184 + } else if("售票员".equals(tjtype)){
  185 + flag = 2;
  186 + list = calcRepository.scheduleBySpy(line, date, date2, gsdm, fgsdm, cont);
  187 + } else if("车辆自编号".equals(tjtype)){
  188 + flag = 3;
  189 + if("1".equals(sfdc)){
  190 + list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont, true);
  191 + } else if("0".equals(sfdc)){
  192 + list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont, false);
  193 + } else {
  194 + list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont);
  195 + }
  196 + }
  197 +
  198 + List<CalcWaybill> calcList = new ArrayList<CalcWaybill>();
  199 + Map<String, CalcWaybill> calcMap = new HashMap<String, CalcWaybill>();
  200 +
  201 + CalcWaybill zjCalc = this.initCalcWaybill();
  202 + zjCalc.setjName("合计");
  203 + for(CalcWaybill c : list){
  204 + String key = "";
  205 + if(flag == 1){
  206 + if(c.getjGh() != null && c.getjName() != null)
  207 + key += c.getjGh() + "/" + c.getjName();
  208 + } else if(flag == 2){
  209 + if(c.getsGh() != null && c.getsName() != null)
  210 + key += c.getsGh() + "/" + c.getsName();
  211 + } else if(flag == 3){
  212 + if(c.getCl() != null)
  213 + key += c.getCl();
  214 + }
  215 +
  216 + if(key.trim().length() == 0 || "/".equals(key))
  217 + continue;
  218 +
  219 + String jName = key;
  220 + key = c.getXl() + "/" + key;
  221 +
  222 + CalcWaybill calc = null;
  223 + if(calcMap.containsKey(key)){
  224 + calc = calcMap.get(key);
  225 + } else {
  226 + calc = this.initCalcWaybill();
  227 + calc.setXlName(c.getXlName());
  228 + calc.setXl(c.getXl());
  229 + calc.setjName(jName);
  230 + calcList.add(calc);
  231 + calcMap.put(key, calc);
  232 + }
  233 +
  234 + this.summation(calc, c);
  235 +
  236 + this.summation(zjCalc, c);
  237 +
  238 + }
  239 + calcList.add(zjCalc);
  240 + calcMap.put("合计", zjCalc);
  241 +
  242 + Map<String, Map<String, Object>> keyMap = new HashMap<String, Map<String, Object>>();
  243 + for(CalcWaybill c : calcList){
  244 + Map<String, Object> m = new HashMap<String, Object>();
  245 + m.put("gS", BasicData.businessFgsCodeNameMap.get(fgsdm+"_"+gsdm));
  246 + m.put("xl", c.getXl());
  247 + m.put("xlName", c.getXlName());
  248 + m.put("jName", c.getjName());
  249 + m.put("jhyybc", c.getJhyybc());
  250 + m.put("jhfyybc", c.getJhfyybc());
  251 + m.put("sjyybc", c.getSjyybc());
  252 + m.put("sjfyybc", c.getSjfyybc());
  253 + m.put("lbbc", c.getLbbc());
  254 + m.put("ljbc", c.getLjbc());
  255 + m.put("jhzlc", Arith.add(c.getJhyylc(), c.getJhfyylc()));
  256 + m.put("jhyylc", c.getJhyylc());
  257 + m.put("jhfyylc", c.getJhfyylc());
  258 + m.put("sjzlc", Arith.add(c.getSjyylc(), c.getSjfyylc()));
  259 + m.put("sjyylc", c.getSjyylc());
  260 + m.put("sjfyylc", c.getSjfyylc());
  261 + m.put("lblc", c.getLblc());
  262 + m.put("ljyylc", c.getLjyylc());
  263 + m.put("ljfyylc", c.getLjfyylc());
  264 + if(flag != 2){
  265 + m.put("hyl", 0);
  266 + m.put("jzl", 0);
  267 + m.put("sh", 0);
  268 + }
  269 + resList.add(m);
  270 + keyMap.put(c.getXl() + "/" + c.getjName(), m);
  271 + }
  272 +
  273 + String linesql="";
  274 + if(!line.equals("")){
  275 + linesql +=" and xlbm ='"+line+"' ";
  276 + }
  277 + if(!gsdm.equals("")){
  278 + linesql +=" and ssgsdm ='"+gsdm+"' ";
  279 + }
  280 + if(!fgsdm.equals("")){
  281 + linesql +=" and fgsdm ='"+fgsdm+"' ";
  282 + }
  283 + String nysql="SELECT id,xlbm,nbbm,jsy,jzl as jzl,yh as yh,sh as sh,fgsdm FROM bsth_c_ylb"
  284 + + " WHERE rq >= '"+date+"' and rq <= '"+date2+"'"
  285 + + linesql
  286 + + " union"
  287 + + " SELECT id,xlbm,nbbm,jsy,cdl as jzl,hd as yh,sh as sh,fgsdm FROM bsth_c_dlb"
  288 + + " WHERE rq >= '"+date+"' and rq <= '"+date2+"'"
  289 + + linesql;
  290 + List<Singledata> listNy = jdbcTemplate.query(nysql, new RowMapper<Singledata>() {
  291 + @Override
  292 + public Singledata mapRow(ResultSet arg0, int arg1) throws SQLException {
  293 + Singledata sin = new Singledata();
  294 + sin.setxL(arg0.getString("xlbm"));
  295 + sin.setJsy(arg0.getString("jsy"));
  296 + sin.setClzbh(arg0.getString("nbbm"));
  297 + sin.setJzl(arg0.getString("jzl"));
  298 + sin.setHyl(arg0.getString("yh"));
  299 + sin.setUnyyyl(arg0.getString("sh"));
  300 + sin.setgS(arg0.getString("fgsdm"));
  301 + return sin;
  302 + }
  303 + });
  304 +
  305 + if(flag != 2){
  306 + Map<String, Object> last = resList.get(resList.size()-1);
  307 + last.put("hyl", 0);
  308 + last.put("jzl", 0);
  309 + last.put("sh", 0);
  310 +
  311 + //统计油,电表中手动添加的或者有加注没里程的数据
  312 + for (int i = 0; i < listNy.size(); i++) {
  313 + Singledata sin_=listNy.get(i);
  314 + String xl=sin_.getxL();
  315 + String str = "";
  316 + if(flag == 1){
  317 + str = sin_.getJsy() + "/" + BasicData.allPerson.get(gsdm+"-"+sin_.getJsy());
  318 + } else {
  319 + str = sin_.getClzbh();
  320 + }
  321 +// boolean fages=true;
  322 + if(keyMap.containsKey(xl + "/" + str)){
  323 + Map<String, Object> m = keyMap.get(xl + "/" + str);
  324 + m.put("hyl", Arith.add(m.get("hyl"), sin_.getHyl()!=null?sin_.getHyl():0));
  325 + m.put("jzl", Arith.add(m.get("jzl"), sin_.getJzl()!=null?sin_.getJzl():0));
  326 + m.put("sh", Arith.add(m.get("sh"), sin_.getUnyyyl()!=null?sin_.getUnyyyl():0));
  327 + last.put("hyl", Arith.add(last.get("hyl"), sin_.getHyl()!=null?sin_.getHyl():0));
  328 + last.put("jzl", Arith.add(last.get("jzl"), sin_.getJzl()!=null?sin_.getJzl():0));
  329 + last.put("sh", Arith.add(last.get("sh"), sin_.getUnyyyl()!=null?sin_.getUnyyyl():0));
  330 + } else {
  331 + Map<String, Object> m = new HashMap<String, Object>();
  332 + m.put("gS", BasicData.businessFgsCodeNameMap.get(fgsdm+"_"+gsdm));
  333 + m.put("xl", xl);
  334 + m.put("xlName", BasicData.lineCodeAllNameMap.get(xl));
  335 + m.put("jName", str);
  336 + m.put("jhzlc", 0);
  337 + m.put("sjzlc", 0);
  338 + m.put("sjfyylc", 0);
  339 + m.put("hyl", sin_.getHyl()!=null?sin_.getHyl():0);
  340 + m.put("jzl", sin_.getJzl()!=null?sin_.getJzl():0);
  341 + m.put("sh", sin_.getUnyyyl()!=null?sin_.getUnyyyl():0);
  342 + last.put("hyl", Arith.add(last.get("hyl"), m.get("hyl")));
  343 + last.put("jzl", Arith.add(last.get("jzl"), m.get("jzl")));
  344 + last.put("sh", Arith.add(last.get("sh"), m.get("sh")));
  345 +
  346 + keyMap.put(xl + "/" + str, m);
  347 + }
  348 + }
  349 + resList.remove(last);
  350 + resList.add(last);
  351 + }
  352 +
  353 + return resList;
  354 + }
  355 +
  356 + //浦东公交线路调查表
  357 + @Override
  358 + public List<CalcInvestigateMonth> calcInvestigateMonth(String gsbm, String fgsbm, String month, String line,
  359 + String xlName, String nature, String type) {
  360 + List<CalcInvestigateMonth> resList = new ArrayList<CalcInvestigateMonth>();
  361 +
  362 + Map<String, Boolean> lineNature = lineService.lineNature();
  363 +
  364 + List<CalcInvestigateMonth> list = new ArrayList<CalcInvestigateMonth>();
  365 + if(line != null && line.length() > 0){
  366 + list = calcInvestigateMonthRepository.findByMonthAndLine(month, line);
  367 + } else if(gsbm != null && gsbm.length() > 0){
  368 + list = calcInvestigateMonthRepository.findByMonth(month, gsbm, fgsbm);
  369 + } else {
  370 + list = calcInvestigateMonthRepository.findByMonth(month);
  371 + }
  372 +
  373 + for(CalcInvestigateMonth c : list){
  374 + if("1".equals(nature)){
  375 + if(lineNature.containsKey(c.getXl()) && lineNature.get(c.getXl())){
  376 + resList.add(c);
  377 + }
  378 + } else if("2".equals(nature)){
  379 + if(!lineNature.containsKey(c.getXl()) || !lineNature.get(c.getXl())){
  380 + resList.add(c);
  381 + }
  382 + } else {
  383 + resList.add(c);
  384 + }
  385 + }
  386 +
  387 + if (type != null && type.length() != 0 && type.equals("export")) {
  388 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  389 + sdfSimple = new SimpleDateFormat("yyyyMMdd"),
  390 + monSimple = new SimpleDateFormat("yyyy-MM");
  391 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  392 + Map<String, Object> m = new HashMap<String, Object>();
  393 + m.put("date", month);
  394 + m.put("currMonth", "(" + month + ")");
  395 + ReportUtils ee = new ReportUtils();
  396 + try {
  397 + List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
  398 + int row = 0;
  399 + for(CalcInvestigateMonth c : resList){
  400 + Map<String, Object> map = new HashMap<String, Object>();
  401 + map.put("row", ++row);
  402 + map.put("xlmc", c.getXlmc()!=null?c.getXlmc():"");
  403 + map.put("qzpcs", c.getQzpcs()!=null?c.getQzpcs():"");
  404 + map.put("xlsx", c.getXlsx()!=null?c.getXlsx():"");
  405 + map.put("xllx", c.getXllx()!=null?c.getXllx():"");
  406 + map.put("xlcd", c.getXlcd()!=null?c.getXlcd():"");
  407 + map.put("sfgp", c.getSfgp()!=null?c.getSfgp():"");
  408 + map.put("sflpxl", c.getSflpxl()!=null?c.getSflpxl():"");
  409 + map.put("smbsj", c.getSmbsj()!=null?c.getSmbsj():"");
  410 + if("常规".equals(c.getDdfs())){
  411 + map.put("ddfsCg", "√");
  412 + map.put("ddfsDyh", "");
  413 + } else if("多样化".equals(c.getDdfs())){
  414 + map.put("ddfsCg", "");
  415 + map.put("ddfsDyh", "√");
  416 + } else {
  417 + map.put("ddfsCg", "");
  418 + map.put("ddfsDyh", "");
  419 + }
  420 + map.put("gfjgsj", c.getGfjgsj()!=null?c.getGfjgsj():"");
  421 + map.put("dgjgsj", c.getDgjgsj()!=null?c.getDgjgsj():"");
  422 + map.put("sfxjgj", c.getSfxjgj()!=null?c.getSfxjgj():"");
  423 + map.put("rjlc", c.getRjlc()!=null?c.getRjlc():"");
  424 + map.put("rjbc", c.getRjbc()!=null?c.getRjbc():"");
  425 + map.put("rjrc", c.getRjrc()!=null?c.getRjrc():"");
  426 + map.put("rjdcrc", c.getRjdcrc()!=null?c.getRjdcrc():"");
  427 + map.put("mbcrc", c.getMbcrc()!=null?c.getMbcrc():"");
  428 + map.put("jhzgl", c.getJhzgl()!=null?c.getJhzgl():"");
  429 + map.put("sjzgl", c.getSjzgl()!=null?c.getSjzgl():"");
  430 + map.put("sjyylc", c.getSjyylc()!=null?c.getSjyylc():"");
  431 + map.put("lclyl", c.getLclyl()!=null?c.getLclyl():"");
  432 + map.put("bglrc", c.getBglrc()!=null?c.getBglrc():"");
  433 + map.put("yrc", c.getYrc()!=null?c.getYrc():"");
  434 + map.put("yys", c.getYys()!=null?c.getYys():"");
  435 + map.put("pj", c.getPj()!=null?c.getPj():"");
  436 + map.put("bglys", c.getBglys()!=null?c.getBglys():"");
  437 + map.put("tjgjz", c.getTjgjz()!=null?c.getTjgjz():"");
  438 + map.put("tjsjyy", c.getTjsjyy()!=null?c.getTjsjyy():"");
  439 + map.put("wyx", c.getWyx()!=null?c.getWyx():"");
  440 + map.put("xlzx", c.getXlzx()!=null?c.getXlzx():"");
  441 + map.put("xlzd", c.getXlzd()!=null?c.getXlzd():"");
  442 + map.put("bz", c.getBz()!=null?c.getBz():"");
  443 + mapList.add(map);
  444 + }
  445 + listI.add(mapList.iterator());
  446 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  447 + ee.excelReplace(listI, new Object[]{m}, path + "mould/calcInvestigateMonth.xls",
  448 + path + "export/" + "浦东公交线路调查表"+month+".xls");
  449 + } catch (Exception e) {
  450 + // TODO: handle exception
  451 + e.printStackTrace();
  452 + logger.info("" , e);
  453 + }
  454 + }
  455 + return resList;
  456 + }
  457 +
  458 +}
... ...
src/main/java/com/bsth/util/ReportUtils.java
1   -package com.bsth.util;
2   -
3   -import java.io.File;
4   -import java.io.FileInputStream;
5   -import java.io.FileOutputStream;
6   -import java.util.ArrayList;
7   -import java.util.HashMap;
8   -import java.util.Iterator;
9   -import java.util.List;
10   -import java.util.Map;
11   -import java.util.TreeMap;
12   -import java.util.regex.Matcher;
13   -import java.util.regex.Pattern;
14   -
15   -import com.bsth.common.ResponseCode;
16   -import org.apache.poi.hssf.usermodel.HSSFCell;
17   -import org.apache.poi.hssf.usermodel.HSSFCellStyle;
18   -import org.apache.poi.hssf.usermodel.HSSFFont;
19   -import org.apache.poi.hssf.usermodel.HSSFRow;
20   -import org.apache.poi.hssf.usermodel.HSSFSheet;
21   -import org.apache.poi.hssf.usermodel.HSSFWorkbook;
22   -import org.apache.poi.poifs.filesystem.POIFSFileSystem;
23   -import org.apache.poi.ss.usermodel.Cell;
24   -import org.apache.poi.ss.usermodel.Workbook;
25   -import org.apache.poi.ss.util.CellRangeAddress;
26   -
27   -import com.bsth.entity.Line;
28   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
29   -import org.apache.poi.ss.util.RegionUtil;
30   -import org.apache.poi.xssf.usermodel.XSSFCell;
31   -
32   -public class ReportUtils {
33   - // private final String packaegName = "com.bsth.entity.";
34   - private final String packaegName = "com.bsth.entity.realcontrol.";
35   -
36   - /**
37   - * /**
38   - *
39   - * @param list
40   - * 模板中,需要重复显示的行所需的数据
41   - * @param map
42   - * 模板中除以上list外所有的数据
43   - * @param index
44   - * 需要重复的行号,该值为行号减1
45   - * @param sourcePath
46   - * 模板路径
47   - * @param targetPath
48   - * 生成路径
49   - */
50   - public void excelReplace(List<Iterator<?>> list, Object[] tArray,
51   - String sourcePath, String targetPath) {
52   - try {
53   - // 把源文件放入流中
54   - POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(
55   - sourcePath));
56   - HSSFWorkbook wb = new HSSFWorkbook(fs);
57   - if(tArray.length != 0 && tArray[0] instanceof java.util.Map){
58   - Map<String, Object> m = (Map<String, Object>)tArray[0];
59   - if(m.containsKey("sheetName") && m.get("sheetName")!=null
60   - && m.get("sheetName").toString().trim().length()!=0)
61   - wb.setSheetName(0, m.get("sheetName").toString());
62   - }
63   - HSSFSheet sheet = wb.getSheetAt(0);
64   - HSSFRow row;
65   - HSSFCell cell = null;
66   - String key;
67   - // 取得总行数
68   - int rowNum = sheet.getLastRowNum();
69   - // 取得总列数
70   - int cellNum = sheet.getRow(0).getLastCellNum();
71   -
72   - // 遍历行
73   - for (int i = 0; i < rowNum; i++) {
74   - row = sheet.getRow(i);
75   - // 遍历列
76   - for (int j = 0; j < cellNum; j++) {
77   - if (row == null) {
78   - continue;
79   - }
80   - cell = row.getCell(j);
81   - if (cell == null) {
82   - continue;
83   - }
84   - // 取得每列的内容,如果列内容是$key$格式,则替换内容
85   - key = getCellValue(cell);
86   - if (key != null && (key.indexOf("$") != -1 || key.indexOf("#list#") != -1)) {
87   - // * 列中内容有#list#,则表示该行为模板行,需要以该行为模板
88   - // * 例如:模板行格式 #list#0_0 $Car.id$
89   - // * 第一个0表示需要在list中取iterator的索引值
90   - // * 第二个0表示在iterator中取的第几个对象,如果不为0,则取下一个对象,而不是沿用前面获取的对象
91   - // * $Car.id$表示所取的对象为Car的对象,并且取值为id的值
92   - if (key.indexOf("#list#") != -1) {
93   - key = key.replace("#list#", "").trim();
94   - String[] lists = key.split(" ");
95   - // 取得list中的索引值
96   - int listIndex = Integer
97   - .valueOf(lists[0].split("_")[0]);
98   - Iterator<?> iterator = list.get(listIndex);
99   - // 根据模板创建行并填弃数据,返回增加的行数
100   - int rowCount = iteratorFillCellValue(wb, sheet,
101   - cell, iterator, i, rowNum, key);
102   - rowNum += rowCount;
103   - i += rowCount;
104   - break;
105   - } else {
106   - // 直接填充数据的列,从对象数组中取得值,这里的数组不传值
107   - getValueAndSetCellValue(cell, key, tArray, new String[]{""});
108   - }
109   - }
110   -
111   - }
112   - }
113   - // 创建目标文件夹
114   - createFolder(targetPath);
115   - // 输出文件
116   - FileOutputStream fileOut = new FileOutputStream(targetPath);
117   - wb.write(fileOut);
118   - fileOut.close();
119   - } catch (Exception e) {
120   - e.printStackTrace();
121   - }
122   - }
123   -
124   -
125   - /**
126   - *
127   - * @param sheetList 多sheet模板中,需要重复显示的行所需的数据
128   - * @param tArray
129   - * @param sourcePath 模板路径
130   - * @param targetPath 生成路径
131   - */
132   - public void excelMoreSheetReplace(List<List<Iterator<?>>> sheetList, Object[] tArray,
133   - String sourcePath, String targetPath) {
134   - try {
135   - // 把源文件放入流中
136   - POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(
137   - sourcePath));
138   - HSSFWorkbook wb = new HSSFWorkbook(fs);
139   - for (int s=0; s<sheetList.size(); s++){
140   - List<Iterator<?>> list = sheetList.get(s);
141   - if(tArray.length != 0 && tArray[0] instanceof java.util.Map){
142   - Map<String, Object> m = (Map<String, Object>)tArray[0];
143   - if(m.containsKey("sheetName"+s+1) && m.get("sheetName"+s+1)!=null
144   - && m.get("sheetName"+s+1).toString().trim().length()!=0)
145   - wb.setSheetName(0, m.get("sheetName"+s+1).toString());
146   - }
147   - HSSFSheet sheet = wb.getSheetAt(s);
148   - HSSFRow row;
149   - HSSFCell cell = null;
150   - String key;
151   - // 取得总行数
152   - int rowNum = sheet.getLastRowNum();
153   - // 取得总列数
154   - int cellNum = sheet.getRow(0).getLastCellNum();
155   -
156   - // 遍历行
157   - for (int i = 0; i <= rowNum; i++) {
158   - row = sheet.getRow(i);
159   - // 遍历列
160   - for (int j = 0; j < cellNum; j++) {
161   - if (row == null) {
162   - continue;
163   - }
164   - cell = row.getCell(j);
165   - if (cell == null) {
166   - continue;
167   - }
168   - // 取得每列的内容,如果列内容是$key$格式,则替换内容
169   - key = getCellValue(cell);
170   - if (key != null && (key.indexOf("$") != -1 || key.indexOf("#list#") != -1)) {
171   - // * 列中内容有#list#,则表示该行为模板行,需要以该行为模板
172   - // * 例如:模板行格式 #list#0_0 $Car.id$
173   - // * 第一个0表示需要在list中取iterator的索引值
174   - // * 第二个0表示在iterator中取的第几个对象,如果不为0,则取下一个对象,而不是沿用前面获取的对象
175   - // * $Car.id$表示所取的对象为Car的对象,并且取值为id的值
176   - if (key.indexOf("#list#") != -1) {
177   - key = key.replace("#list#", "").trim();
178   - String[] lists = key.split(" ");
179   - // 取得list中的索引值
180   - int listIndex = Integer
181   - .valueOf(lists[0].split("_")[0]);
182   - Iterator<?> iterator = list.get(listIndex);
183   - // 根据模板创建行并填充数据,返回增加的行数
184   - int rowCount = iteratorFillCellValue(wb, sheet,
185   - cell, iterator, i, rowNum, key);
186   - rowNum += rowCount;
187   - i += rowCount;
188   - break;
189   - } else {
190   - // 直接填充数据的列,从对象数组中取得值,这里的数组不传值
191   - getValueAndSetCellValue(cell, key, tArray, new String[]{""});
192   - }
193   - }
194   -
195   - }
196   - }
197   - }
198   -
199   - // 创建目标文件夹
200   - createFolder(targetPath);
201   - // 输出文件
202   - FileOutputStream fileOut = new FileOutputStream(targetPath);
203   - wb.write(fileOut);
204   - fileOut.close();
205   - } catch (Exception e) {
206   - e.printStackTrace();
207   - }
208   - }
209   -
210   - /**
211   - * 将file1中的一页sheet复制到file2中
212   - *
213   - * @param file1
214   - * 原sheet所在的excel文件
215   - * @param file2
216   - * 目标excel文件
217   - * @param page
218   - * 原excel中要被复制的sheet的位置(从0开始)
219   - * @param rate
220   - * 调整复制后的缩放倍率(列如:145,则为缩放145%)
221   - */
222   - public void copySheetByFile(File file1, File file2, int page, int rate) {
223   - try {
224   - // 把源文件放入流中
225   - POIFSFileSystem fs1 = new POIFSFileSystem(new FileInputStream(file1));
226   - HSSFWorkbook wb1 = new HSSFWorkbook(fs1);
227   - HSSFSheet sheet = wb1.getSheetAt(page);
228   - POIFSFileSystem fs2 = new POIFSFileSystem(new FileInputStream(file2));
229   - HSSFWorkbook wb2 = new HSSFWorkbook(fs2);
230   - HSSFSheet createSheet = wb2.createSheet(sheet.getSheetName());
231   - HSSFCellStyle createCellStyle = wb2.createCellStyle();
232   - HSSFRow row;
233   -
234   - createSheet.setZoom(rate, 100);
235   - for(int i = 0; i < sheet.getRow(0).getPhysicalNumberOfCells(); i++){
236   - createSheet.setColumnWidth(i, sheet.getColumnWidth(i));
237   - }
238   -
239   - List<CellRangeAddress> mergedRegions = sheet.getMergedRegions();
240   - for(int l = 0; l < mergedRegions.size(); l++){
241   - //复制源表中的合并单元格
242   - createSheet.addMergedRegion(mergedRegions.get(l));
243   - }
244   - int firstRow = sheet.getFirstRowNum();
245   - int lastRow = sheet.getLastRowNum();
246   - for(int k = firstRow; k <= lastRow; k++){
247   - // 创建新建excel Sheet的行
248   - HSSFRow rowCreat = createSheet.createRow(k);
249   - // 取得源有excel Sheet的行
250   - row = sheet.getRow(k);
251   -// rowCreat.setHeight(row.getHeight()); //设置行高
252   - // 单元格式样
253   - int firstCell = row.getFirstCellNum();
254   - int lastCell = row.getLastCellNum();
255   - for (int j = firstCell; j < lastCell; j++) {
256   - // 自动适应列宽 貌似不起作用
257   -// createSheet.autoSizeColumn(j);
258   -// System.out.println(row.getCell(j));
259   - rowCreat.createCell(j);
260   - String strVal = "";
261   - if (row.getCell(j)==null) {
262   -
263   - } else {
264   - strVal = row.getCell(j).getStringCellValue();
265   - rowCreat.getCell(j).setCellValue(strVal);
266   - copyCellStyle(wb1, row.getCell(j).getCellStyle(), createCellStyle);
267   - createCellStyle.setBorderTop((short)1);
268   - createCellStyle.setBorderLeft((short)1);
269   - createCellStyle.setBorderRight((short)1);
270   - createCellStyle.setBorderBottom((short)1);
271   - rowCreat.getCell(j).setCellStyle(createCellStyle);
272   - }
273   - }
274   - }
275   -
276   -// int firstRowNum = createSheet.getFirstRowNum();
277   -// int lastRowNum = createSheet.getLastRowNum();
278   -// int test = 0;
279   -// for(int k = firstRowNum; k <= lastRowNum; k++){
280   -// HSSFRow createRow = createSheet.getRow(k);
281   -// int firstCellNum = createRow.getFirstCellNum();
282   -// int lastCellNum = createRow.getLastCellNum();
283   -// for(int i = firstCellNum; i < lastCellNum; i++){
284   -// HSSFCell cell = createRow.getCell(i);
285   -// cell.getCellStyle().setBorderTop(HSSFCellStyle.BORDER_THIN);
286   -// cell.getCellStyle().setBorderLeft(HSSFCellStyle.BORDER_THIN);
287   -// cell.getCellStyle().setBorderRight(HSSFCellStyle.BORDER_THIN);
288   -// cell.getCellStyle().setBorderBottom(HSSFCellStyle.BORDER_THIN);
289   -// test ++;
290   -// }
291   -// }
292   -// System.out.println("test = " + test);
293   -
294   - FileOutputStream fileOut = new FileOutputStream(file2);
295   - wb2.write(fileOut);
296   - fileOut.close();
297   - wb2.close();
298   - wb1.close();
299   - fs2.close();
300   - fs1.close();
301   - file1.delete();
302   -// // 创建目标文件夹
303   -// createFolder(targetPath);
304   - // 输出文件
305   - } catch (Exception e) {
306   - e.printStackTrace();
307   - }
308   - }
309   -
310   - public void test(File file){
311   - POIFSFileSystem fs;
312   - try {
313   - fs = new POIFSFileSystem(new FileInputStream(file));
314   - HSSFWorkbook wb = new HSSFWorkbook(fs);
315   - for(int j = 0; j < wb.getNumberOfSheets(); j++){
316   - HSSFSheet sheet = wb.getSheetAt(j);
317   - int firstRowNum = sheet.getFirstRowNum();
318   - int lastRowNum = sheet.getLastRowNum();
319   - int test = 0;
320   - for(int k = firstRowNum; k <= lastRowNum; k++){
321   - HSSFRow createRow = sheet.getRow(k);
322   - int firstCellNum = createRow.getFirstCellNum();
323   - int lastCellNum = createRow.getLastCellNum();
324   - for(int i = firstCellNum; i < lastCellNum; i++){
325   - HSSFCell cell = createRow.getCell(i);
326   - HSSFCellStyle cellStyle = wb.createCellStyle();
327   -
328   - cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
329   - cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
330   - cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
331   - cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
332   - cell.setCellStyle(cellStyle);
333   - test ++;
334   - }
335   - }
336   - System.out.println("test = " + test);
337   -
338   - FileOutputStream fileOut = new FileOutputStream(file);
339   - wb.write(fileOut);
340   - fileOut.close();
341   - }
342   - } catch (Exception e) {
343   - // TODO Auto-generated catch block
344   - e.printStackTrace();
345   - }
346   -
347   - }
348   -
349   - public String getCellValue(HSSFCell cell) {
350   - int cellType = 0;
351   - String result = "";
352   - double d;
353   - if(cell != null) {
354   - // 获取列数据类型
355   - cellType = cell.getCellType();
356   - // 不同列数据类型,取值方法不同
357   - switch(cellType) {
358   - // String
359   - case HSSFCell.CELL_TYPE_STRING:
360   - result = cell.getStringCellValue().toString();
361   - break;
362   - // numeric类型,excel中,日期格式会转成数字格式存储
363   - case HSSFCell.CELL_TYPE_NUMERIC:
364   - result = cell.getNumericCellValue()+"";
365   - break;
366   - // 公式类型
367   - case HSSFCell.CELL_TYPE_FORMULA:
368   - result = cell.getCellFormula() + "";
369   - break;
370   - // boolean类型
371   - case HSSFCell.CELL_TYPE_BOOLEAN:
372   - result = cell.getBooleanCellValue() + "";
373   - break;
374   - // 空格
375   - case HSSFCell.CELL_TYPE_BLANK:
376   - result = null;
377   - break;
378   - // 错误值
379   - case HSSFCell.CELL_TYPE_ERROR:
380   - result = null;
381   - break;
382   - default :
383   - System.out.println("其它");
384   - break;
385   - }
386   - }
387   - return result;
388   - }
389   -
390   - /**
391   - * 根据iterator,以及模板中的标识,填充模板
392   - *
393   - * @param wb
394   - * @param sheet
395   - * @param cell
396   - * @param iterator
397   - * iterator
398   - * @param index
399   - * 模板行索引
400   - * @param rowNum
401   - * 表格总行数
402   - * @param key
403   - * 表格内容
404   - * @return
405   - */
406   - private int iteratorFillCellValue(HSSFWorkbook wb, HSSFSheet sheet,
407   - HSSFCell cell, Iterator<?> iterator, int index, int rowNum,
408   - String key) {
409   - int rowCount = 0;
410   - Object obj = null;
411   - int p = 0;
412   - int i = index;
413   - HSSFRow newRow = null;
414   - int tmpCellNum = 0;
415   - int k = 0;
416   - int listIndex = 0;
417   - // 取得模板行
418   - HSSFRow orgRow = sheet.getRow(index);
419   - HSSFCellStyle style= wb.createCellStyle();
420   - try {
421   - while (iterator.hasNext()) {
422   - // 取得iterator的对象
423   - obj = iterator.next();
424   - // 移动当前编辑行以下的所有行
425   - if (p != 0) {
426   - rowNum += 1;
427   - i += 1;
428   - rowCount += 1;// 增加的总行数
429   - // 把当前行以下的所有行往下移动1行
430   - sheet.shiftRows(i, rowNum, 1);
431   - }
432   - p = 1;
433   - // 创建新行
434   - newRow = sheet.createRow(index + k++);
435   - // 把新行的内容换成和模板行一样
436   - copyRow(wb, orgRow, newRow, true,style);
437   - tmpCellNum = newRow.getLastCellNum();
438   - for (int l = 0; l < tmpCellNum; l++) {
439   - cell = newRow.getCell(l);
440   - key = getCellValue(cell);
441   - /**
442   - * 如果单无格内容为#list#,表示该行是模板行 #list#0_0
443   - * 第一个0表示需要在list中取iterator的索引值
444   - * 第二个0表示在iterator中取的第几个对象,如果不为0,则取下一个对象,而不是沿用前面获取的对象
445   - */
446   - if(key == null || key.equals("")){
447   - obj = iterator.next();
448   - }
449   - if (key.indexOf("#list#") != -1 && key.indexOf("_0") == -1) {
450   - if (iterator.hasNext()) {
451   - obj = iterator.next();
452   - } else {
453   - obj = null;
454   - }
455   - }
456   - if (key.trim().indexOf(" ") != -1) {
457   - key = key.split(" ")[1];
458   - }
459   - getValueAndSetCellValue(cell, key, obj,new String[]{listIndex+""});
460   - }
461   - // list的数量
462   - listIndex ++;
463   - }
464   - } catch (Exception e) {
465   - e.printStackTrace();
466   - }
467   - return rowCount;
468   - }
469   -
470   - /**
471   - * 取到相应的值并填入相应的列中
472   - *
473   - * @param cell 列
474   - * @param key 列内容
475   - * @param obj 数据源对象
476   - * @param args 其他参数 数组
477   - * 数组内容:
478   - * 0位:在list中的第几条数据
479   - */
480   - private void getValueAndSetCellValue(HSSFCell cell, String key, Object obj, String[] args) {
481   - try {
482   - // 保有存单元格的内容
483   - String cellValue = key = key.replace("\\n", "");
484   - String tmpKey;
485   - // 判断单元格内容是否是公式
486   - if(cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
487   - Pattern p=Pattern.compile("(\\d+)"); //
488   - Matcher m=p.matcher(key);
489   - if(m.find()){
490   - cellValue = key.replace(m.group(1),
491   - Integer.valueOf(m.group(1))+Integer.valueOf(args[0])+"");
492   - cell.setCellFormula(cellValue);
493   - return;
494   - }
495   - }else{//其他格式
496   -
497   - // 循环截取两个$中间的内容,反射出值
498   - while (key.indexOf("$") != -1) {
499   - key = key.substring(key.indexOf("$") + 1);
500   - // 取两个$中间的内容
501   - tmpKey = key.substring(0, key.indexOf("$"));
502   - key = key.substring(key.indexOf("$") + 1);
503   - // 如果内容是如下格式Cars.id,则从obj中值得相应的对象的值
504   - if (tmpKey.indexOf(".") != -1) {
505   - String className = tmpKey.substring(0, tmpKey.indexOf("."));
506   - // 取得类的全限定名
507   - String classWholeName = packaegName + className;
508   - String fieldName = tmpKey.substring(tmpKey.indexOf(".") + 1);
509   - // 如果obj是数组,循环判断哪个对象是对应的
510   - if (obj instanceof Object[]) {
511   - Object[] objs = (Object[]) obj;
512   - for (int k = 0; k < objs.length; k++) {
513   - if (objs[k].getClass().getName().equals(classWholeName)) {
514   - cellValue = cellValue.replace("$" + tmpKey
515   - + "$", getKeyValue(objs[k], fieldName)
516   - + "");
517   - } else if(objs[k].getClass().getName().equals("java.util.HashMap")){
518   - Map<String,Object> map = (HashMap<String,Object>)objs[k];
519   - cellValue = cellValue.replace("$" + tmpKey + "$",map.get(fieldName)+"");
520   - }
521   - }
522   - } else if (obj.getClass().getName().equals(classWholeName)) {
523   - cellValue = cellValue.replace("$" + tmpKey + "$",getKeyValue(obj, fieldName) + "");
524   - } else if (obj.getClass().getName().equals("java.util.HashMap")){
525   - Map<String,Object> map = (HashMap<String,Object>)obj;
526   - cellValue = cellValue.replace("$" + tmpKey + "$",map.get(fieldName)+"");
527   - }
528   - }
529   - }
530   - }
531   - cell.setCellValue(cellValue);
532   - } catch (Exception e) {
533   - e.printStackTrace();
534   - }
535   -
536   - }
537   -
538   - /**
539   - * 给列填充数据
540   - *
541   - * @param cell
542   - * 列
543   - * @param obj
544   - * 数据源对象
545   - * @param fieldName
546   - * 需要取数据的字段
547   - */
548   - private Object getKeyValue(Object obj, String fieldName) {
549   - Object value = "";
550   - try {
551   - if (obj != null) {
552   - ReportRelatedUtils test = new ReportRelatedUtils();
553   - value = test.getValue(obj, fieldName) == null ? "" : test .getValue(obj, fieldName);
554   - }
555   - } catch (Exception e) {
556   - e.printStackTrace();
557   - }
558   - return value;
559   - }
560   -
561   - public static void main(String[] args) {
562   -
563   - try {
564   - ReportUtils ee = new ReportUtils();
565   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
566   - Line line = new Line();
567   - line.setId(1);
568   - line.setName("line1");
569   -
570   - List<Object> dataList = new ArrayList<Object>();
571   -
572   -
573   - ScheduleRealInfo srr = new ScheduleRealInfo();
574   - srr.setId((long) 111);
575   - srr.setXlName("abc11");
576   -
577   - ScheduleRealInfo sr = new ScheduleRealInfo();
578   - sr.setZdsj("06:10");
579   - sr.setZdsjActual("06:25");
580   - dataList.add(sr);
581   - sr = new ScheduleRealInfo();
582   - sr.setZdsj("06:20");
583   - sr.setZdsjActual("");
584   - dataList.add(sr);
585   - list.add(dataList.iterator());
586   -
587   - ee.excelReplace(list, new Object[] { srr }, "D:/waybill.xls",
588   - "D:/22.xls");
589   - System.out.println("ok");
590   - } catch (Exception e) {
591   - e.printStackTrace();
592   - }
593   - }
594   -
595   - /**
596   - * 行复制功能
597   - *
598   - * @param fromRow
599   - * @param toRow
600   - */
601   - private void copyRow(HSSFWorkbook wb, HSSFRow fromRow, HSSFRow toRow,
602   - boolean copyValueFlag, HSSFCellStyle style) {
603   - for (Iterator<Cell> cellIt = fromRow.cellIterator(); cellIt.hasNext();) {
604   - HSSFCell tmpCell = (HSSFCell) cellIt.next();
605   - HSSFCell newCell = toRow.createCell(tmpCell.getColumnIndex(), 0);
606   - copyCell(wb, tmpCell, newCell, copyValueFlag, tmpCell.getCellStyle());
607   - }
608   - }
609   -
610   - /**
611   - * 复制单元格
612   - *
613   - * @param srcCell
614   - * @param distCell
615   - * @param copyValueFlag
616   - * true则连同cell的内容一起复制
617   - */
618   - public void copyCell(HSSFWorkbook wb, HSSFCell srcCell, HSSFCell distCell,
619   - boolean copyValueFlag, HSSFCellStyle newstyle) {
620   -// HSSFCellStyle newstyle = wb.createCellStyle();
621   - copyCellStyle(wb, srcCell.getCellStyle(), newstyle);
622   - // 样式
623   - distCell.setCellStyle(newstyle);
624   - // 评论
625   - if (srcCell.getCellComment() != null) {
626   - distCell.setCellComment(srcCell.getCellComment());
627   - }
628   - // 不同数据类型处理
629   - int srcCellType = srcCell.getCellType();
630   - distCell.setCellType(srcCellType);
631   - if (copyValueFlag) {
632   - if (srcCellType == HSSFCell.CELL_TYPE_NUMERIC) {
633   - distCell.setCellValue(srcCell.getDateCellValue());
634   - } else if (srcCellType == HSSFCell.CELL_TYPE_STRING) {
635   - distCell.setCellValue(srcCell.getRichStringCellValue());
636   - } else if (srcCellType == HSSFCell.CELL_TYPE_BLANK) {
637   -
638   - } else if (srcCellType == HSSFCell.CELL_TYPE_BOOLEAN) {
639   - distCell.setCellValue(srcCell.getBooleanCellValue());
640   - } else if (srcCellType == HSSFCell.CELL_TYPE_ERROR) {
641   - distCell.setCellErrorValue(srcCell.getErrorCellValue());
642   - } else if (srcCellType == HSSFCell.CELL_TYPE_FORMULA) {
643   - distCell.setCellFormula(srcCell.getCellFormula());
644   - } else {
645   - }
646   - }
647   - }
648   -
649   - /**
650   - * 复制一个单元格样式到目的单元格样式
651   - *
652   - * @param fromStyle
653   - * @param toStyle
654   - */
655   - public void copyCellStyle(HSSFWorkbook wb, HSSFCellStyle fromStyle,
656   - HSSFCellStyle toStyle) {
657   - toStyle.setAlignment(fromStyle.getAlignment());
658   - // 边框和边框颜色
659   - toStyle.setBorderBottom(fromStyle.getBorderBottom());
660   - toStyle.setBorderLeft(fromStyle.getBorderLeft());
661   - toStyle.setBorderRight(fromStyle.getBorderRight());
662   - toStyle.setBorderTop(fromStyle.getBorderTop());
663   - toStyle.setTopBorderColor(fromStyle.getTopBorderColor());
664   - toStyle.setBottomBorderColor(fromStyle.getBottomBorderColor());
665   - toStyle.setRightBorderColor(fromStyle.getRightBorderColor());
666   - toStyle.setLeftBorderColor(fromStyle.getLeftBorderColor());
667   -
668   - // 背景和前景
669   - toStyle.setFillBackgroundColor(fromStyle.getFillBackgroundColor());
670   - toStyle.setFillForegroundColor(fromStyle.getFillForegroundColor());
671   -
672   - toStyle.setDataFormat(fromStyle.getDataFormat());
673   - toStyle.setFillPattern(fromStyle.getFillPattern());
674   - toStyle.setHidden(fromStyle.getHidden());
675   - toStyle.setIndention(fromStyle.getIndention());// 首行缩进
676   - toStyle.setLocked(fromStyle.getLocked());
677   - toStyle.setRotation(fromStyle.getRotation());// 旋转
678   - toStyle.setVerticalAlignment(fromStyle.getVerticalAlignment());
679   - toStyle.setWrapText(fromStyle.getWrapText());
680   - // 字体
681   - toStyle.setFont(fromStyle.getFont(wb));
682   -
683   - }
684   -
685   - /**
686   - * 创建文件夹,并删除原有文件
687   - *
688   - * @param path
689   - */
690   - private void createFolder(String path) {
691   - File targetFile = null;
692   - targetFile = new File(path);
693   - if (targetFile.exists()) {// 删除原有文件
694   - targetFile.delete();
695   - }
696   - // 创建目标文件夹
697   - targetFile = new File(path.substring(0, path.lastIndexOf("/")));
698   - if (!targetFile.exists()) {
699   - targetFile.mkdirs();
700   - }
701   - }
702   -
703   - public void createFlie(List<List<String>> list, String name, String type){
704   - HSSFWorkbook workbook = new HSSFWorkbook();
705   - // 生成一个样式
706   - HSSFCellStyle style = workbook.createCellStyle();
707   - // 设置这些样式
708   -// style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
709   -// style.setFillPattern(HSSFCellStyle.BORDER_THIN);
710   - style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
711   - style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
712   - style.setBorderRight(HSSFCellStyle.BORDER_THIN);
713   - style.setBorderTop(HSSFCellStyle.BORDER_THIN);
714   - style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
715   - // 生成一个字体
716   - HSSFFont font = workbook.createFont();
717   -// font.setColor(HSSFColor.VIOLET.index);
718   - font.setFontHeightInPoints((short) 12);
719   - font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
720   - // 把字体应用到当前的样式
721   - style.setFont(font);
722   - HSSFCellStyle cellStyle =workbook.createCellStyle();
723   - cellStyle.setFont(font);
724   - cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中
725   - cellStyle.setWrapText(true);
726   -
727   - //设置wordsheet名
728   - HSSFSheet sheetYS = workbook.createSheet();//设置wordsheet名
729   - HSSFRow row = sheetYS.createRow(0);
730   - setCellStyleAndValue(row, style, 0, name);
731   - CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,list.get(0).size()-1);
732   - sheetYS.addMergedRegion(callRangeAddress);
733   - // 样式
734   - setMergeCellStyle (callRangeAddress, sheetYS, workbook);
735   -
736   - try{
737   - for(int i=0; i<list.size(); i++){
738   - HSSFRow rowYSi = sheetYS.createRow(i+1);
739   - List<String> stringList = list.get(i);
740   - int num = 4;
741   - if("xl".equals(type))
742   - num = 2;
743   - else if("cl".equals(type))
744   - num = 5;
745   - for(int j=0; j<stringList.size(); j++){
746   - String str = stringList.get(j);
747   - if(i == list.size()-1){
748   - if(j==0) {
749   - setCellStyleAndValue(rowYSi, style, j, str);
750   - CellRangeAddress callRangeAddressYSi = new CellRangeAddress(i+1,i+1,0,num);
751   - sheetYS.addMergedRegion(callRangeAddressYSi);
752   - // 样式
753   - setMergeCellStyle (callRangeAddressYSi, sheetYS, workbook);
754   - }else
755   - setCellStyleAndValue(rowYSi,style,j+num,str);
756   - } else {
757   - setCellStyleAndValue(rowYSi,style,j,str);
758   - }
759   - }
760   - }
761   -
762   - // 给列设置宽度自适应
763   - setSizeColumn1(sheetYS,1,list.get(0).size());
764   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/export/";
765   - String targetPath = path+name+".xls";
766   - createFolder(targetPath);
767   - FileOutputStream fout = new FileOutputStream(targetPath);
768   - //5.输出
769   - workbook.write(fout);
770   - fout.close();
771   - } catch (Exception e) {
772   - e.printStackTrace();
773   - }
774   - }
775   -
776   - /**
777   - * 自适应宽度(中文支持)
778   - * @param sheet
779   - * @param size
780   - */
781   - private static void setSizeColumn(HSSFSheet sheet, int size) {
782   - for (int columnNum = 0; columnNum < size; columnNum++) {
783   - int columnWidth = sheet.getColumnWidth(columnNum) / 256;
784   - for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
785   - HSSFRow currentRow;
786   - //当前行未被使用过
787   - if (sheet.getRow(rowNum) == null) {
788   - currentRow = sheet.createRow(rowNum);
789   - } else {
790   - currentRow = sheet.getRow(rowNum);
791   - }
792   - if (currentRow.getCell(columnNum) != null) {
793   - HSSFCell currentCell = currentRow.getCell(columnNum);
794   - if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
795   - int length = currentCell.getStringCellValue().getBytes().length;
796   - if (columnWidth < length) {
797   - columnWidth = length;
798   - }
799   - }
800   - }
801   - }
802   - sheet.setColumnWidth(columnNum, columnWidth * 300);
803   -// sheet.setColumnWidth(columnNum, columnWidth * 256);
804   - }
805   - }
806   -
807   - /**
808   - * 自适应宽度(中文支持)
809   - * @param sheet
810   - * @param index 从那一行开始自适应
811   - * @param size
812   - */
813   - private static void setSizeColumn1(HSSFSheet sheet,int index, int size) {
814   - for (int columnNum = index; columnNum < size; columnNum++) {
815   - int columnWidth = sheet.getColumnWidth(columnNum) / 256;
816   - for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
817   - HSSFRow currentRow;
818   - //当前行未被使用过
819   - if (sheet.getRow(rowNum) == null) {
820   - currentRow = sheet.createRow(rowNum);
821   - } else {
822   - currentRow = sheet.getRow(rowNum);
823   - }
824   - if (currentRow.getCell(columnNum) != null) {
825   - HSSFCell currentCell = currentRow.getCell(columnNum);
826   - if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
827   - int length = currentCell.getStringCellValue().getBytes().length;
828   - if (columnWidth < length) {
829   - columnWidth = length;
830   - }
831   - }
832   - }
833   - }
834   - sheet.setColumnWidth(columnNum, columnWidth * 300);
835   -// sheet.setColumnWidth(columnNum, columnWidth * 256);
836   - }
837   - }
838   -
839   - /**
840   - * 设置单元格值和样式
841   - * @param row
842   - * @param style
843   - * @param index
844   - * @param value
845   - */
846   - public static void setCellStyleAndValue(HSSFRow row,HSSFCellStyle style,int index,String value){
847   - HSSFCell cell = row.createCell(index);
848   - cell.setCellValue(value);
849   - cell.setCellStyle(style);
850   - }
851   - /**
852   - * 设置合并单元格样式
853   - * @param cra
854   - * @param sheet
855   - * @param workbook
856   - */
857   - public static void setMergeCellStyle (CellRangeAddress cra, HSSFSheet sheet, Workbook workbook){
858   - // 使用RegionUtil类为合并后的单元格添加边框
859   - RegionUtil.setBorderBottom(1, cra, sheet, workbook); // 下边框
860   - RegionUtil.setBorderLeft(1, cra, sheet, workbook); // 左边框
861   - RegionUtil.setBorderRight(1, cra, sheet, workbook); // 有边框
862   - RegionUtil.setBorderTop(1, cra, sheet, workbook); // 上边框
863   - }
864   -}
  1 +package com.bsth.util;
  2 +
  3 +import java.io.File;
  4 +import java.io.FileInputStream;
  5 +import java.io.FileOutputStream;
  6 +import java.util.ArrayList;
  7 +import java.util.HashMap;
  8 +import java.util.Iterator;
  9 +import java.util.List;
  10 +import java.util.Map;
  11 +import java.util.TreeMap;
  12 +import java.util.regex.Matcher;
  13 +import java.util.regex.Pattern;
  14 +
  15 +import com.bsth.common.ResponseCode;
  16 +import org.apache.commons.lang3.StringUtils;
  17 +import org.apache.poi.hssf.usermodel.HSSFCell;
  18 +import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  19 +import org.apache.poi.hssf.usermodel.HSSFFont;
  20 +import org.apache.poi.hssf.usermodel.HSSFRow;
  21 +import org.apache.poi.hssf.usermodel.HSSFSheet;
  22 +import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  23 +import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  24 +import org.apache.poi.ss.usermodel.Cell;
  25 +import org.apache.poi.ss.usermodel.Workbook;
  26 +import org.apache.poi.ss.util.CellRangeAddress;
  27 +
  28 +import com.bsth.entity.Line;
  29 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  30 +import org.apache.poi.ss.util.RegionUtil;
  31 +import org.apache.poi.xssf.usermodel.XSSFCell;
  32 +
  33 +public class ReportUtils {
  34 + // private final String packaegName = "com.bsth.entity.";
  35 + private final String packaegName = "com.bsth.entity.realcontrol.";
  36 +
  37 + private final Pattern pattern = Pattern.compile("^\\d+(\\.\\d*)?$");
  38 +
  39 + /**
  40 + * /**
  41 + *
  42 + * @param list
  43 + * 模板中,需要重复显示的行所需的数据
  44 + * @param map
  45 + * 模板中除以上list外所有的数据
  46 + * @param index
  47 + * 需要重复的行号,该值为行号减1
  48 + * @param sourcePath
  49 + * 模板路径
  50 + * @param targetPath
  51 + * 生成路径
  52 + */
  53 + public void excelReplace(List<Iterator<?>> list, Object[] tArray,
  54 + String sourcePath, String targetPath) {
  55 + try {
  56 + // 把源文件放入流中
  57 + POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(
  58 + sourcePath));
  59 + HSSFWorkbook wb = new HSSFWorkbook(fs);
  60 + if(tArray.length != 0 && tArray[0] instanceof java.util.Map){
  61 + Map<String, Object> m = (Map<String, Object>)tArray[0];
  62 + if(m.containsKey("sheetName") && m.get("sheetName")!=null
  63 + && m.get("sheetName").toString().trim().length()!=0)
  64 + wb.setSheetName(0, m.get("sheetName").toString());
  65 + }
  66 + HSSFSheet sheet = wb.getSheetAt(0);
  67 + HSSFRow row;
  68 + HSSFCell cell = null;
  69 + String key;
  70 + // 取得总行数
  71 + int rowNum = sheet.getLastRowNum();
  72 + // 取得总列数
  73 + int cellNum = sheet.getRow(0).getLastCellNum();
  74 +
  75 + // 遍历行
  76 + for (int i = 0; i < rowNum; i++) {
  77 + row = sheet.getRow(i);
  78 + // 遍历列
  79 + for (int j = 0; j < cellNum; j++) {
  80 + if (row == null) {
  81 + continue;
  82 + }
  83 + cell = row.getCell(j);
  84 + if (cell == null) {
  85 + continue;
  86 + }
  87 + // 取得每列的内容,如果列内容是$key$格式,则替换内容
  88 + key = getCellValue(cell);
  89 + if (key != null && (key.indexOf("$") != -1 || key.indexOf("#list#") != -1)) {
  90 + // * 列中内容有#list#,则表示该行为模板行,需要以该行为模板
  91 + // * 例如:模板行格式 #list#0_0 $Car.id$
  92 + // * 第一个0表示需要在list中取iterator的索引值
  93 + // * 第二个0表示在iterator中取的第几个对象,如果不为0,则取下一个对象,而不是沿用前面获取的对象
  94 + // * $Car.id$表示所取的对象为Car的对象,并且取值为id的值
  95 + if (key.indexOf("#list#") != -1) {
  96 + key = key.replace("#list#", "").trim();
  97 + String[] lists = key.split(" ");
  98 + // 取得list中的索引值
  99 + int listIndex = Integer
  100 + .valueOf(lists[0].split("_")[0]);
  101 + Iterator<?> iterator = list.get(listIndex);
  102 + // 根据模板创建行并填弃数据,返回增加的行数
  103 + int rowCount = iteratorFillCellValue(wb, sheet,
  104 + cell, iterator, i, rowNum, key);
  105 + rowNum += rowCount;
  106 + i += rowCount;
  107 + break;
  108 + } else {
  109 + // 直接填充数据的列,从对象数组中取得值,这里的数组不传值
  110 + getValueAndSetCellValue(cell, key, tArray, new String[]{""});
  111 + }
  112 + }
  113 +
  114 + }
  115 + }
  116 + // 创建目标文件夹
  117 + createFolder(targetPath);
  118 + // 输出文件
  119 + FileOutputStream fileOut = new FileOutputStream(targetPath);
  120 + wb.write(fileOut);
  121 + fileOut.close();
  122 + } catch (Exception e) {
  123 + e.printStackTrace();
  124 + }
  125 + }
  126 +
  127 +
  128 + /**
  129 + *
  130 + * @param sheetList 多sheet模板中,需要重复显示的行所需的数据
  131 + * @param tArray
  132 + * @param sourcePath 模板路径
  133 + * @param targetPath 生成路径
  134 + */
  135 + public void excelMoreSheetReplace(List<List<Iterator<?>>> sheetList, Object[] tArray,
  136 + String sourcePath, String targetPath) {
  137 + try {
  138 + // 把源文件放入流中
  139 + POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(
  140 + sourcePath));
  141 + HSSFWorkbook wb = new HSSFWorkbook(fs);
  142 + for (int s=0; s<sheetList.size(); s++){
  143 + List<Iterator<?>> list = sheetList.get(s);
  144 + if(tArray.length != 0 && tArray[0] instanceof java.util.Map){
  145 + Map<String, Object> m = (Map<String, Object>)tArray[0];
  146 + if(m.containsKey("sheetName"+s+1) && m.get("sheetName"+s+1)!=null
  147 + && m.get("sheetName"+s+1).toString().trim().length()!=0)
  148 + wb.setSheetName(0, m.get("sheetName"+s+1).toString());
  149 + }
  150 + HSSFSheet sheet = wb.getSheetAt(s);
  151 + HSSFRow row;
  152 + HSSFCell cell = null;
  153 + String key;
  154 + // 取得总行数
  155 + int rowNum = sheet.getLastRowNum();
  156 + // 取得总列数
  157 + int cellNum = sheet.getRow(0).getLastCellNum();
  158 +
  159 + // 遍历行
  160 + for (int i = 0; i <= rowNum; i++) {
  161 + row = sheet.getRow(i);
  162 + // 遍历列
  163 + for (int j = 0; j < cellNum; j++) {
  164 + if (row == null) {
  165 + continue;
  166 + }
  167 + cell = row.getCell(j);
  168 + if (cell == null) {
  169 + continue;
  170 + }
  171 + // 取得每列的内容,如果列内容是$key$格式,则替换内容
  172 + key = getCellValue(cell);
  173 + if (key != null && (key.indexOf("$") != -1 || key.indexOf("#list#") != -1)) {
  174 + // * 列中内容有#list#,则表示该行为模板行,需要以该行为模板
  175 + // * 例如:模板行格式 #list#0_0 $Car.id$
  176 + // * 第一个0表示需要在list中取iterator的索引值
  177 + // * 第二个0表示在iterator中取的第几个对象,如果不为0,则取下一个对象,而不是沿用前面获取的对象
  178 + // * $Car.id$表示所取的对象为Car的对象,并且取值为id的值
  179 + if (key.indexOf("#list#") != -1) {
  180 + key = key.replace("#list#", "").trim();
  181 + String[] lists = key.split(" ");
  182 + // 取得list中的索引值
  183 + int listIndex = Integer
  184 + .valueOf(lists[0].split("_")[0]);
  185 + Iterator<?> iterator = list.get(listIndex);
  186 + // 根据模板创建行并填充数据,返回增加的行数
  187 + int rowCount = iteratorFillCellValue(wb, sheet,
  188 + cell, iterator, i, rowNum, key);
  189 + rowNum += rowCount;
  190 + i += rowCount;
  191 + break;
  192 + } else {
  193 + // 直接填充数据的列,从对象数组中取得值,这里的数组不传值
  194 + getValueAndSetCellValue(cell, key, tArray, new String[]{""});
  195 + }
  196 + }
  197 +
  198 + }
  199 + }
  200 + }
  201 +
  202 + // 创建目标文件夹
  203 + createFolder(targetPath);
  204 + // 输出文件
  205 + FileOutputStream fileOut = new FileOutputStream(targetPath);
  206 + wb.write(fileOut);
  207 + fileOut.close();
  208 + } catch (Exception e) {
  209 + e.printStackTrace();
  210 + }
  211 + }
  212 +
  213 + /**
  214 + * 将file1中的一页sheet复制到file2中
  215 + *
  216 + * @param file1
  217 + * 原sheet所在的excel文件
  218 + * @param file2
  219 + * 目标excel文件
  220 + * @param page
  221 + * 原excel中要被复制的sheet的位置(从0开始)
  222 + * @param rate
  223 + * 调整复制后的缩放倍率(列如:145,则为缩放145%)
  224 + */
  225 + public void copySheetByFile(File file1, File file2, int page, int rate) {
  226 + try {
  227 + // 把源文件放入流中
  228 + POIFSFileSystem fs1 = new POIFSFileSystem(new FileInputStream(file1));
  229 + HSSFWorkbook wb1 = new HSSFWorkbook(fs1);
  230 + HSSFSheet sheet = wb1.getSheetAt(page);
  231 + POIFSFileSystem fs2 = new POIFSFileSystem(new FileInputStream(file2));
  232 + HSSFWorkbook wb2 = new HSSFWorkbook(fs2);
  233 + HSSFSheet createSheet = wb2.createSheet(sheet.getSheetName());
  234 + HSSFCellStyle createCellStyle = wb2.createCellStyle();
  235 + HSSFRow row;
  236 +
  237 + createSheet.setZoom(rate, 100);
  238 + for(int i = 0; i < sheet.getRow(0).getPhysicalNumberOfCells(); i++){
  239 + createSheet.setColumnWidth(i, sheet.getColumnWidth(i));
  240 + }
  241 +
  242 + List<CellRangeAddress> mergedRegions = sheet.getMergedRegions();
  243 + for(int l = 0; l < mergedRegions.size(); l++){
  244 + //复制源表中的合并单元格
  245 + createSheet.addMergedRegion(mergedRegions.get(l));
  246 + }
  247 + int firstRow = sheet.getFirstRowNum();
  248 + int lastRow = sheet.getLastRowNum();
  249 + for(int k = firstRow; k <= lastRow; k++){
  250 + // 创建新建excel Sheet的行
  251 + HSSFRow rowCreat = createSheet.createRow(k);
  252 + // 取得源有excel Sheet的行
  253 + row = sheet.getRow(k);
  254 +// rowCreat.setHeight(row.getHeight()); //设置行高
  255 + // 单元格式样
  256 + int firstCell = row.getFirstCellNum();
  257 + int lastCell = row.getLastCellNum();
  258 + for (int j = firstCell; j < lastCell; j++) {
  259 + // 自动适应列宽 貌似不起作用
  260 +// createSheet.autoSizeColumn(j);
  261 +// System.out.println(row.getCell(j));
  262 + rowCreat.createCell(j);
  263 + String strVal = "";
  264 + if (row.getCell(j)==null) {
  265 +
  266 + } else {
  267 + strVal = row.getCell(j).getStringCellValue();
  268 + rowCreat.getCell(j).setCellValue(strVal);
  269 + copyCellStyle(wb1, row.getCell(j).getCellStyle(), createCellStyle);
  270 + createCellStyle.setBorderTop((short)1);
  271 + createCellStyle.setBorderLeft((short)1);
  272 + createCellStyle.setBorderRight((short)1);
  273 + createCellStyle.setBorderBottom((short)1);
  274 + rowCreat.getCell(j).setCellStyle(createCellStyle);
  275 + }
  276 + }
  277 + }
  278 +
  279 +// int firstRowNum = createSheet.getFirstRowNum();
  280 +// int lastRowNum = createSheet.getLastRowNum();
  281 +// int test = 0;
  282 +// for(int k = firstRowNum; k <= lastRowNum; k++){
  283 +// HSSFRow createRow = createSheet.getRow(k);
  284 +// int firstCellNum = createRow.getFirstCellNum();
  285 +// int lastCellNum = createRow.getLastCellNum();
  286 +// for(int i = firstCellNum; i < lastCellNum; i++){
  287 +// HSSFCell cell = createRow.getCell(i);
  288 +// cell.getCellStyle().setBorderTop(HSSFCellStyle.BORDER_THIN);
  289 +// cell.getCellStyle().setBorderLeft(HSSFCellStyle.BORDER_THIN);
  290 +// cell.getCellStyle().setBorderRight(HSSFCellStyle.BORDER_THIN);
  291 +// cell.getCellStyle().setBorderBottom(HSSFCellStyle.BORDER_THIN);
  292 +// test ++;
  293 +// }
  294 +// }
  295 +// System.out.println("test = " + test);
  296 +
  297 + FileOutputStream fileOut = new FileOutputStream(file2);
  298 + wb2.write(fileOut);
  299 + fileOut.close();
  300 + wb2.close();
  301 + wb1.close();
  302 + fs2.close();
  303 + fs1.close();
  304 + file1.delete();
  305 +// // 创建目标文件夹
  306 +// createFolder(targetPath);
  307 + // 输出文件
  308 + } catch (Exception e) {
  309 + e.printStackTrace();
  310 + }
  311 + }
  312 +
  313 + public void test(File file){
  314 + POIFSFileSystem fs;
  315 + try {
  316 + fs = new POIFSFileSystem(new FileInputStream(file));
  317 + HSSFWorkbook wb = new HSSFWorkbook(fs);
  318 + for(int j = 0; j < wb.getNumberOfSheets(); j++){
  319 + HSSFSheet sheet = wb.getSheetAt(j);
  320 + int firstRowNum = sheet.getFirstRowNum();
  321 + int lastRowNum = sheet.getLastRowNum();
  322 + int test = 0;
  323 + for(int k = firstRowNum; k <= lastRowNum; k++){
  324 + HSSFRow createRow = sheet.getRow(k);
  325 + int firstCellNum = createRow.getFirstCellNum();
  326 + int lastCellNum = createRow.getLastCellNum();
  327 + for(int i = firstCellNum; i < lastCellNum; i++){
  328 + HSSFCell cell = createRow.getCell(i);
  329 + HSSFCellStyle cellStyle = wb.createCellStyle();
  330 +
  331 + cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  332 + cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  333 + cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
  334 + cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  335 + cell.setCellStyle(cellStyle);
  336 + test ++;
  337 + }
  338 + }
  339 + System.out.println("test = " + test);
  340 +
  341 + FileOutputStream fileOut = new FileOutputStream(file);
  342 + wb.write(fileOut);
  343 + fileOut.close();
  344 + }
  345 + } catch (Exception e) {
  346 + // TODO Auto-generated catch block
  347 + e.printStackTrace();
  348 + }
  349 +
  350 + }
  351 +
  352 + public String getCellValue(HSSFCell cell) {
  353 + int cellType = 0;
  354 + String result = "";
  355 + double d;
  356 + if(cell != null) {
  357 + // 获取列数据类型
  358 + cellType = cell.getCellType();
  359 + // 不同列数据类型,取值方法不同
  360 + switch(cellType) {
  361 + // String
  362 + case HSSFCell.CELL_TYPE_STRING:
  363 + result = cell.getStringCellValue().toString();
  364 + break;
  365 + // numeric类型,excel中,日期格式会转成数字格式存储
  366 + case HSSFCell.CELL_TYPE_NUMERIC:
  367 + result = cell.getNumericCellValue()+"";
  368 + break;
  369 + // 公式类型
  370 + case HSSFCell.CELL_TYPE_FORMULA:
  371 + result = cell.getCellFormula() + "";
  372 + break;
  373 + // boolean类型
  374 + case HSSFCell.CELL_TYPE_BOOLEAN:
  375 + result = cell.getBooleanCellValue() + "";
  376 + break;
  377 + // 空格
  378 + case HSSFCell.CELL_TYPE_BLANK:
  379 + result = null;
  380 + break;
  381 + // 错误值
  382 + case HSSFCell.CELL_TYPE_ERROR:
  383 + result = null;
  384 + break;
  385 + default :
  386 + System.out.println("其它");
  387 + break;
  388 + }
  389 + }
  390 + return result;
  391 + }
  392 +
  393 + /**
  394 + * 根据iterator,以及模板中的标识,填充模板
  395 + *
  396 + * @param wb
  397 + * @param sheet
  398 + * @param cell
  399 + * @param iterator
  400 + * iterator
  401 + * @param index
  402 + * 模板行索引
  403 + * @param rowNum
  404 + * 表格总行数
  405 + * @param key
  406 + * 表格内容
  407 + * @return
  408 + */
  409 + private int iteratorFillCellValue(HSSFWorkbook wb, HSSFSheet sheet,
  410 + HSSFCell cell, Iterator<?> iterator, int index, int rowNum,
  411 + String key) {
  412 + int rowCount = 0;
  413 + Object obj = null;
  414 + int p = 0;
  415 + int i = index;
  416 + HSSFRow newRow = null;
  417 + int tmpCellNum = 0;
  418 + int k = 0;
  419 + int listIndex = 0;
  420 + // 取得模板行
  421 + HSSFRow orgRow = sheet.getRow(index);
  422 + HSSFCellStyle style= wb.createCellStyle();
  423 + try {
  424 + while (iterator.hasNext()) {
  425 + // 取得iterator的对象
  426 + obj = iterator.next();
  427 + // 移动当前编辑行以下的所有行
  428 + if (p != 0) {
  429 + rowNum += 1;
  430 + i += 1;
  431 + rowCount += 1;// 增加的总行数
  432 + // 把当前行以下的所有行往下移动1行
  433 + sheet.shiftRows(i, rowNum, 1);
  434 + }
  435 + p = 1;
  436 + // 创建新行
  437 + newRow = sheet.createRow(index + k++);
  438 + // 把新行的内容换成和模板行一样
  439 + copyRow(wb, orgRow, newRow, true,style);
  440 + tmpCellNum = newRow.getLastCellNum();
  441 + for (int l = 0; l < tmpCellNum; l++) {
  442 + cell = newRow.getCell(l);
  443 + key = getCellValue(cell);
  444 + /**
  445 + * 如果单无格内容为#list#,表示该行是模板行 #list#0_0
  446 + * 第一个0表示需要在list中取iterator的索引值
  447 + * 第二个0表示在iterator中取的第几个对象,如果不为0,则取下一个对象,而不是沿用前面获取的对象
  448 + */
  449 + if(key == null || key.equals("")){
  450 + obj = iterator.next();
  451 + }
  452 + if (key.indexOf("#list#") != -1 && key.indexOf("_0") == -1) {
  453 + if (iterator.hasNext()) {
  454 + obj = iterator.next();
  455 + } else {
  456 + obj = null;
  457 + }
  458 + }
  459 + if (key.trim().indexOf(" ") != -1) {
  460 + key = key.split(" ")[1];
  461 + }
  462 + getValueAndSetCellValue(cell, key, obj,new String[]{listIndex+""});
  463 + }
  464 + // list的数量
  465 + listIndex ++;
  466 + }
  467 + } catch (Exception e) {
  468 + e.printStackTrace();
  469 + }
  470 + return rowCount;
  471 + }
  472 +
  473 + /**
  474 + * 取到相应的值并填入相应的列中
  475 + *
  476 + * @param cell 列
  477 + * @param key 列内容
  478 + * @param obj 数据源对象
  479 + * @param args 其他参数 数组
  480 + * 数组内容:
  481 + * 0位:在list中的第几条数据
  482 + */
  483 + private void getValueAndSetCellValue(HSSFCell cell, String key, Object obj, String[] args) {
  484 + try {
  485 + // 保有存单元格的内容
  486 + String cellValue = key = key.replace("\\n", "");
  487 + String tmpKey;
  488 + // 判断单元格内容是否是公式
  489 + if(cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
  490 + Pattern p=Pattern.compile("(\\d+)"); //
  491 + Matcher m=p.matcher(key);
  492 + if(m.find()){
  493 + cellValue = key.replace(m.group(1),
  494 + Integer.valueOf(m.group(1))+Integer.valueOf(args[0])+"");
  495 + cell.setCellFormula(cellValue);
  496 + return;
  497 + }
  498 + }else{//其他格式
  499 +
  500 + // 循环截取两个$中间的内容,反射出值
  501 + while (key.indexOf("$") != -1) {
  502 + key = key.substring(key.indexOf("$") + 1);
  503 + // 取两个$中间的内容
  504 + tmpKey = key.substring(0, key.indexOf("$"));
  505 + key = key.substring(key.indexOf("$") + 1);
  506 + // 如果内容是如下格式Cars.id,则从obj中值得相应的对象的值
  507 + if (tmpKey.indexOf(".") != -1) {
  508 + String className = tmpKey.substring(0, tmpKey.indexOf("."));
  509 + // 取得类的全限定名
  510 + String classWholeName = packaegName + className;
  511 + String fieldName = tmpKey.substring(tmpKey.indexOf(".") + 1);
  512 + // 如果obj是数组,循环判断哪个对象是对应的
  513 + if (obj instanceof Object[]) {
  514 + Object[] objs = (Object[]) obj;
  515 + for (int k = 0; k < objs.length; k++) {
  516 + if (objs[k].getClass().getName().equals(classWholeName)) {
  517 + cellValue = cellValue.replace("$" + tmpKey
  518 + + "$", getKeyValue(objs[k], fieldName)
  519 + + "");
  520 + } else if(objs[k].getClass().getName().equals("java.util.HashMap")){
  521 + Map<String,Object> map = (HashMap<String,Object>)objs[k];
  522 + cellValue = cellValue.replace("$" + tmpKey + "$",map.get(fieldName)+"");
  523 + }
  524 + }
  525 + } else if (obj.getClass().getName().equals(classWholeName)) {
  526 + cellValue = cellValue.replace("$" + tmpKey + "$",getKeyValue(obj, fieldName) + "");
  527 + } else if (obj.getClass().getName().equals("java.util.HashMap")){
  528 + Map<String,Object> map = (HashMap<String,Object>)obj;
  529 + cellValue = cellValue.replace("$" + tmpKey + "$",map.get(fieldName)+"");
  530 + }
  531 + }
  532 + }
  533 + }
  534 + cell.setCellValue(cellValue);
  535 + Matcher matcher = pattern.matcher(cellValue);
  536 + if (matcher.matches()) {
  537 + if (cellValue.indexOf(".") > -1) {
  538 + cell.setCellValue(Double.parseDouble(cellValue));
  539 + } else {
  540 + cell.setCellValue(Integer.parseInt(cellValue));
  541 + }
  542 + }
  543 + } catch (Exception e) {
  544 + e.printStackTrace();
  545 + }
  546 +
  547 + }
  548 +
  549 + /**
  550 + * 给列填充数据
  551 + *
  552 + * @param cell
  553 + * 列
  554 + * @param obj
  555 + * 数据源对象
  556 + * @param fieldName
  557 + * 需要取数据的字段
  558 + */
  559 + private Object getKeyValue(Object obj, String fieldName) {
  560 + Object value = "";
  561 + try {
  562 + if (obj != null) {
  563 + ReportRelatedUtils test = new ReportRelatedUtils();
  564 + value = test.getValue(obj, fieldName) == null ? "" : test .getValue(obj, fieldName);
  565 + }
  566 + } catch (Exception e) {
  567 + e.printStackTrace();
  568 + }
  569 + return value;
  570 + }
  571 +
  572 + public static void main(String[] args) {
  573 +
  574 + try {
  575 + ReportUtils ee = new ReportUtils();
  576 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  577 + Line line = new Line();
  578 + line.setId(1);
  579 + line.setName("line1");
  580 +
  581 + List<Object> dataList = new ArrayList<Object>();
  582 +
  583 +
  584 + ScheduleRealInfo srr = new ScheduleRealInfo();
  585 + srr.setId((long) 111);
  586 + srr.setXlName("abc11");
  587 +
  588 + ScheduleRealInfo sr = new ScheduleRealInfo();
  589 + sr.setZdsj("06:10");
  590 + sr.setZdsjActual("06:25");
  591 + dataList.add(sr);
  592 + sr = new ScheduleRealInfo();
  593 + sr.setZdsj("06:20");
  594 + sr.setZdsjActual("");
  595 + dataList.add(sr);
  596 + list.add(dataList.iterator());
  597 +
  598 + ee.excelReplace(list, new Object[] { srr }, "D:/waybill.xls",
  599 + "D:/22.xls");
  600 + System.out.println("ok");
  601 + } catch (Exception e) {
  602 + e.printStackTrace();
  603 + }
  604 + }
  605 +
  606 + /**
  607 + * 行复制功能
  608 + *
  609 + * @param fromRow
  610 + * @param toRow
  611 + */
  612 + private void copyRow(HSSFWorkbook wb, HSSFRow fromRow, HSSFRow toRow,
  613 + boolean copyValueFlag, HSSFCellStyle style) {
  614 + for (Iterator<Cell> cellIt = fromRow.cellIterator(); cellIt.hasNext();) {
  615 + HSSFCell tmpCell = (HSSFCell) cellIt.next();
  616 + HSSFCell newCell = toRow.createCell(tmpCell.getColumnIndex(), 0);
  617 + copyCell(wb, tmpCell, newCell, copyValueFlag, tmpCell.getCellStyle());
  618 + }
  619 + }
  620 +
  621 + /**
  622 + * 复制单元格
  623 + *
  624 + * @param srcCell
  625 + * @param distCell
  626 + * @param copyValueFlag
  627 + * true则连同cell的内容一起复制
  628 + */
  629 + public void copyCell(HSSFWorkbook wb, HSSFCell srcCell, HSSFCell distCell,
  630 + boolean copyValueFlag, HSSFCellStyle newstyle) {
  631 +// HSSFCellStyle newstyle = wb.createCellStyle();
  632 + copyCellStyle(wb, srcCell.getCellStyle(), newstyle);
  633 + // 样式
  634 + distCell.setCellStyle(newstyle);
  635 + // 评论
  636 + if (srcCell.getCellComment() != null) {
  637 + distCell.setCellComment(srcCell.getCellComment());
  638 + }
  639 + // 不同数据类型处理
  640 + int srcCellType = srcCell.getCellType();
  641 + distCell.setCellType(srcCellType);
  642 + if (copyValueFlag) {
  643 + if (srcCellType == HSSFCell.CELL_TYPE_NUMERIC) {
  644 + distCell.setCellValue(srcCell.getDateCellValue());
  645 + } else if (srcCellType == HSSFCell.CELL_TYPE_STRING) {
  646 + distCell.setCellValue(srcCell.getRichStringCellValue());
  647 + } else if (srcCellType == HSSFCell.CELL_TYPE_BLANK) {
  648 +
  649 + } else if (srcCellType == HSSFCell.CELL_TYPE_BOOLEAN) {
  650 + distCell.setCellValue(srcCell.getBooleanCellValue());
  651 + } else if (srcCellType == HSSFCell.CELL_TYPE_ERROR) {
  652 + distCell.setCellErrorValue(srcCell.getErrorCellValue());
  653 + } else if (srcCellType == HSSFCell.CELL_TYPE_FORMULA) {
  654 + distCell.setCellFormula(srcCell.getCellFormula());
  655 + } else {
  656 + }
  657 + }
  658 + }
  659 +
  660 + /**
  661 + * 复制一个单元格样式到目的单元格样式
  662 + *
  663 + * @param fromStyle
  664 + * @param toStyle
  665 + */
  666 + public void copyCellStyle(HSSFWorkbook wb, HSSFCellStyle fromStyle,
  667 + HSSFCellStyle toStyle) {
  668 + toStyle.setAlignment(fromStyle.getAlignment());
  669 + // 边框和边框颜色
  670 + toStyle.setBorderBottom(fromStyle.getBorderBottom());
  671 + toStyle.setBorderLeft(fromStyle.getBorderLeft());
  672 + toStyle.setBorderRight(fromStyle.getBorderRight());
  673 + toStyle.setBorderTop(fromStyle.getBorderTop());
  674 + toStyle.setTopBorderColor(fromStyle.getTopBorderColor());
  675 + toStyle.setBottomBorderColor(fromStyle.getBottomBorderColor());
  676 + toStyle.setRightBorderColor(fromStyle.getRightBorderColor());
  677 + toStyle.setLeftBorderColor(fromStyle.getLeftBorderColor());
  678 +
  679 + // 背景和前景
  680 + toStyle.setFillBackgroundColor(fromStyle.getFillBackgroundColor());
  681 + toStyle.setFillForegroundColor(fromStyle.getFillForegroundColor());
  682 +
  683 + toStyle.setDataFormat(fromStyle.getDataFormat());
  684 + toStyle.setFillPattern(fromStyle.getFillPattern());
  685 + toStyle.setHidden(fromStyle.getHidden());
  686 + toStyle.setIndention(fromStyle.getIndention());// 首行缩进
  687 + toStyle.setLocked(fromStyle.getLocked());
  688 + toStyle.setRotation(fromStyle.getRotation());// 旋转
  689 + toStyle.setVerticalAlignment(fromStyle.getVerticalAlignment());
  690 + toStyle.setWrapText(fromStyle.getWrapText());
  691 + // 字体
  692 + toStyle.setFont(fromStyle.getFont(wb));
  693 +
  694 + }
  695 +
  696 + /**
  697 + * 创建文件夹,并删除原有文件
  698 + *
  699 + * @param path
  700 + */
  701 + private void createFolder(String path) {
  702 + File targetFile = null;
  703 + targetFile = new File(path);
  704 + if (targetFile.exists()) {// 删除原有文件
  705 + targetFile.delete();
  706 + }
  707 + // 创建目标文件夹
  708 + targetFile = new File(path.substring(0, path.lastIndexOf("/")));
  709 + if (!targetFile.exists()) {
  710 + targetFile.mkdirs();
  711 + }
  712 + }
  713 +
  714 + public void createFlie(List<List<String>> list, String name, String type){
  715 + HSSFWorkbook workbook = new HSSFWorkbook();
  716 + // 生成一个样式
  717 + HSSFCellStyle style = workbook.createCellStyle();
  718 + // 设置这些样式
  719 +// style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
  720 +// style.setFillPattern(HSSFCellStyle.BORDER_THIN);
  721 + style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  722 + style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  723 + style.setBorderRight(HSSFCellStyle.BORDER_THIN);
  724 + style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  725 + style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  726 + // 生成一个字体
  727 + HSSFFont font = workbook.createFont();
  728 +// font.setColor(HSSFColor.VIOLET.index);
  729 + font.setFontHeightInPoints((short) 12);
  730 + font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  731 + // 把字体应用到当前的样式
  732 + style.setFont(font);
  733 + HSSFCellStyle cellStyle =workbook.createCellStyle();
  734 + cellStyle.setFont(font);
  735 + cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中
  736 + cellStyle.setWrapText(true);
  737 +
  738 + //设置wordsheet名
  739 + HSSFSheet sheetYS = workbook.createSheet();//设置wordsheet名
  740 + HSSFRow row = sheetYS.createRow(0);
  741 + setCellStyleAndValue(row, style, 0, name);
  742 + CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,list.get(0).size()-1);
  743 + sheetYS.addMergedRegion(callRangeAddress);
  744 + // 样式
  745 + setMergeCellStyle (callRangeAddress, sheetYS, workbook);
  746 +
  747 + try{
  748 + for(int i=0; i<list.size(); i++){
  749 + HSSFRow rowYSi = sheetYS.createRow(i+1);
  750 + List<String> stringList = list.get(i);
  751 + int num = 4;
  752 + if("xl".equals(type))
  753 + num = 2;
  754 + else if("cl".equals(type))
  755 + num = 5;
  756 + for(int j=0; j<stringList.size(); j++){
  757 + String str = stringList.get(j);
  758 + if(i == list.size()-1){
  759 + if(j==0) {
  760 + setCellStyleAndValue(rowYSi, style, j, str);
  761 + CellRangeAddress callRangeAddressYSi = new CellRangeAddress(i+1,i+1,0,num);
  762 + sheetYS.addMergedRegion(callRangeAddressYSi);
  763 + // 样式
  764 + setMergeCellStyle (callRangeAddressYSi, sheetYS, workbook);
  765 + }else
  766 + setCellStyleAndValue(rowYSi,style,j+num,str);
  767 + } else {
  768 + setCellStyleAndValue(rowYSi,style,j,str);
  769 + }
  770 + }
  771 + }
  772 +
  773 + // 给列设置宽度自适应
  774 + setSizeColumn1(sheetYS,1,list.get(0).size());
  775 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/export/";
  776 + String targetPath = path+name+".xls";
  777 + createFolder(targetPath);
  778 + FileOutputStream fout = new FileOutputStream(targetPath);
  779 + //5.输出
  780 + workbook.write(fout);
  781 + fout.close();
  782 + } catch (Exception e) {
  783 + e.printStackTrace();
  784 + }
  785 + }
  786 +
  787 + /**
  788 + * 自适应宽度(中文支持)
  789 + * @param sheet
  790 + * @param size
  791 + */
  792 + private static void setSizeColumn(HSSFSheet sheet, int size) {
  793 + for (int columnNum = 0; columnNum < size; columnNum++) {
  794 + int columnWidth = sheet.getColumnWidth(columnNum) / 256;
  795 + for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
  796 + HSSFRow currentRow;
  797 + //当前行未被使用过
  798 + if (sheet.getRow(rowNum) == null) {
  799 + currentRow = sheet.createRow(rowNum);
  800 + } else {
  801 + currentRow = sheet.getRow(rowNum);
  802 + }
  803 + if (currentRow.getCell(columnNum) != null) {
  804 + HSSFCell currentCell = currentRow.getCell(columnNum);
  805 + if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
  806 + int length = currentCell.getStringCellValue().getBytes().length;
  807 + if (columnWidth < length) {
  808 + columnWidth = length;
  809 + }
  810 + }
  811 + }
  812 + }
  813 + sheet.setColumnWidth(columnNum, columnWidth * 300);
  814 +// sheet.setColumnWidth(columnNum, columnWidth * 256);
  815 + }
  816 + }
  817 +
  818 + /**
  819 + * 自适应宽度(中文支持)
  820 + * @param sheet
  821 + * @param index 从那一行开始自适应
  822 + * @param size
  823 + */
  824 + private static void setSizeColumn1(HSSFSheet sheet,int index, int size) {
  825 + for (int columnNum = index; columnNum < size; columnNum++) {
  826 + int columnWidth = sheet.getColumnWidth(columnNum) / 256;
  827 + for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
  828 + HSSFRow currentRow;
  829 + //当前行未被使用过
  830 + if (sheet.getRow(rowNum) == null) {
  831 + currentRow = sheet.createRow(rowNum);
  832 + } else {
  833 + currentRow = sheet.getRow(rowNum);
  834 + }
  835 + if (currentRow.getCell(columnNum) != null) {
  836 + HSSFCell currentCell = currentRow.getCell(columnNum);
  837 + if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
  838 + int length = currentCell.getStringCellValue().getBytes().length;
  839 + if (columnWidth < length) {
  840 + columnWidth = length;
  841 + }
  842 + }
  843 + }
  844 + }
  845 + sheet.setColumnWidth(columnNum, columnWidth * 300);
  846 +// sheet.setColumnWidth(columnNum, columnWidth * 256);
  847 + }
  848 + }
  849 +
  850 + /**
  851 + * 设置单元格值和样式
  852 + * @param row
  853 + * @param style
  854 + * @param index
  855 + * @param value
  856 + */
  857 + public static void setCellStyleAndValue(HSSFRow row,HSSFCellStyle style,int index,String value){
  858 + HSSFCell cell = row.createCell(index);
  859 + cell.setCellValue(value);
  860 + cell.setCellStyle(style);
  861 + }
  862 + /**
  863 + * 设置合并单元格样式
  864 + * @param cra
  865 + * @param sheet
  866 + * @param workbook
  867 + */
  868 + public static void setMergeCellStyle (CellRangeAddress cra, HSSFSheet sheet, Workbook workbook){
  869 + // 使用RegionUtil类为合并后的单元格添加边框
  870 + RegionUtil.setBorderBottom(1, cra, sheet, workbook); // 下边框
  871 + RegionUtil.setBorderLeft(1, cra, sheet, workbook); // 左边框
  872 + RegionUtil.setBorderRight(1, cra, sheet, workbook); // 有边框
  873 + RegionUtil.setBorderTop(1, cra, sheet, workbook); // 上边框
  874 + }
  875 +}
... ...
src/main/resources/application-cloud.properties
... ... @@ -57,7 +57,7 @@ admin.mail= 3090342880@qq.com
57 57 ## enabled
58 58 enabled.whiteip= true
59 59  
60   -sso.enabled= true
  60 +sso.enabled= false
61 61 sso.systemcode = SYS0019
62 62 sso.http.url.login= http://180.169.154.251:28090/portal/index.html#/login
63 63 sso.http.url.logout= http://180.169.154.251:18080/information/api/v1/logout
... ...
src/main/resources/static/pages/control/lineallot_v2/main.html
1   -<!DOCTYPE html>
2   -<html lang="zh-cn">
3   -
4   -<head>
5   - <meta charset="UTF-8">
6   - <link rel="stylesheet" href="/assets/plugins/uk3.0/uikit.min.css"/>
7   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css"/>
8   - <!-- flatpickr -->
9   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.css">
10   - <style>
11   - html, body {
12   - height: 100%;
13   - }
14   -
15   - .ct_page {
16   - padding: 25px 15px;
17   - height: 100%;
18   - height: calc(100% - 65px);
19   - }
20   -
21   - .ct_cont {
22   - height: calc(100% - 41px);
23   - }
24   -
25   - .ct_cont > div > div.uk-card {
26   - height: 99%;
27   - }
28   -
29   - .loading {
30   - height: 100%;
31   - text-align: center;
32   - }
33   -
34   - .loading .uk-spinner {
35   - margin-top: 200px;
36   - }
37   -
38   - .loading circle {
39   - stroke: red;
40   - }
41   -
42   - .ps-container > .ps-scrollbar-x-rail, .ps-container > .ps-scrollbar-y-rail {
43   - opacity: 0.6 !important;
44   - padding: 0 !important;
45   - }
46   -
47   - .line_list_all_wrap {
48   - height: 200px;
49   - overflow: auto;
50   - position: relative;
51   - -webkit-user-select:none;
52   - -moz-user-select:none;
53   - -ms-user-select:none;
54   - user-select:none;
55   - }
56   -
57   - .line_list_all_wrap > .item {
58   - background: #fff;
59   - color: #666;
60   - box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.08);
61   - padding: 7px 12px;
62   - border: 1px solid #ececec;
63   - display: inline-block;
64   - margin: 5px;
65   - min-width: 70px;
66   - text-align: center;
67   - cursor: default;
68   - }
69   -
70   - .line_list_all_wrap > .item.active{
71   - background: #ffe9a5;
72   - }
73   -
74   - .checked_list {
75   - padding-left: 4px;
76   - -webkit-user-select:none;
77   - -moz-user-select:none;
78   - -ms-user-select:none;
79   - user-select:none;
80   - }
81   -
82   - .checked_list > .item {
83   - color: #fbfbfb;
84   - box-shadow: 0px 3px 12px rgba(50, 197, 210, 0.3);
85   - padding: 7px 12px;
86   - border: 1px solid #ececec;
87   - display: inline-block;
88   - margin: 5px 2px;
89   - min-width: 70px;
90   - text-align: center;
91   - background: #32C5D2;
92   - cursor: move;
93   - }
94   -
95   - .company_search_wrap {
96   - width: 610px;
97   - margin-left: 6px;
98   - }
99   -
100   - .company_search_wrap select {
101   - display: inline-block;
102   - width: 128px;
103   - margin-right: 12px;
104   - }
105   -
106   - .uk-card {
107   - border: 1px solid #eeeeee;
108   - }
109   -
110   - .footer_tools_card {
111   - margin-top: 20px;
112   - padding: 20px 40px;
113   - }
114   -
115   - .footer_tools_card label {
116   - vertical-align: bottom;
117   - display: inline-block;
118   - font-size: 13px;
119   - margin-left: 13px;
120   - margin-bottom: 3px !important;
121   - }
122   -
123   - .uk-button-default{
124   - background: #e0e0e0 !important;
125   - }
126   -
127   - .line_list_all_wrap > .item.destroy{
128   - color: #f64242;
129   - }
130   -
131   - .checked_list > .item.destroy{
132   - background: #ff5c5c;
133   - }
134   - </style>
135   -</head>
136   -
137   -<body>
138   -<div class="loading">
139   - <div uk-spinner></div>
140   -</div>
141   -<div class="ct_page" style="display: none;">
142   - <h2 class="uk-heading-line uk-heading-bullet"><span>线调 <h5 style="display: inline-block;">-选择线路</h5></span></h2>
143   - <div class="ct_cont">
144   - <div class="allot_wrap uk-flex-center" uk-grid>
145   - <div class="uk-card uk-card-hover uk-card-body uk-width-2-3@m"
146   - style="padding-top: 20px;padding-bottom: 20px;">
147   - <div class="company_search_wrap">
148   - <select class="uk-select company_search_select"></select>
149   - <select class="uk-select fgs_search_select" disabled>
150   - <option value="">分公司搜索</option>
151   - </select>
152   - <div class="uk-inline">
153   - <span class="uk-form-icon uk-form-icon-flip" uk-icon="icon: search"></span>
154   - <input class="uk-input line_search_input" style="width: 310px;" placeholder="搜索线路">
155   - </div>
156   - </div>
157   - <hr>
158   - <div class="line_list_all_wrap"></div>
159   - <hr>
160   - <div class="checked_list" uk-sortable> </div>
161   - </div>
162   -
163   - <div class="uk-card uk-card-hover uk-card-body uk-width-2-3@m footer_tools_card">
164   - <button class="uk-button uk-button-default uk-button-large" style="font-size: 16px" id="go_to_real_system_btn"><i
165   - uk-icon=" icon: sign-in" style="margin-right: 5px;" ></i>进入线路调度
166   - </button>
167   - <label class="pattern_type_label"><input class="uk-checkbox" type="checkbox" > 主调模式登录</label>
168   - <label class="new_window_open_label" title="可能会被浏览器阻止新建窗口" uk-tooltip><input class="uk-checkbox" type="checkbox"> 新窗口打开</label>
169   - </div>
170   -
171   - <div class="uk-alert-warning uk-width-2-3@m " uk-alert>
172   - <p>注意!!! 相关“设备调试人员”和“测试人员”不要以主调模式进入线调。</p>
173   - </div>
174   - </div>
175   - </div>
176   -</div>
177   -
178   -<script id="line_list_items_temp" type="text/html">
179   - {{each list as obj i}}
180   - <span class="item {{obj.destroy==1?'destroy':''}}" data-id="{{obj.lineCode}}" data-gsbm="{{obj.company}}_{{obj.brancheCompany}}">{{obj.name}}</span>
181   - {{/each}}
182   -</script>
183   -
184   -<script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>
185   -<script src="/assets/plugins/uk3.0/uikit.min.js"></script>
186   -<script src="/assets/plugins/uk3.0/uikit-icons.min.js"></script>
187   -<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js"></script>
188   -<!-- EventProxy -->
189   -<script src="/assets/js/eventproxy.js"></script>
190   -<!-- art-template 模版引擎 -->
191   -<script src="/assets/plugins/template.js"></script>
192   -<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>
193   -<script src="/assets/plugins/pinyin.js"></script>
194   -<script>
195   - var allMapps = {};//线路搜索映射
196   - var companyData = {};
197   - var codeMapps={}; //线路编码映射
198   - //滚动条
199   - $('.line_list_all_wrap').perfectScrollbar();
200   -
201   - var ep = EventProxy.create('all_lines', 'user_author', 'company_data', function (allLines, userAuthor, company_data) {
202   - //按用户权限过滤线路
203   - var authArray = userAuthor.lineCodeStr.split(','),
204   - newArray = [];
205   - $.each(allLines, function () {
206   - if (this.lineCode && authArray.indexOf(this.lineCode) != -1) {
207   - newArray.push(this);
208   - codeMapps[this.lineCode] = this;
209   - }
210   - });
211   - //排序
212   - newArray.sort(function (a, b) {
213   - return a.name.localeCompare(b.name);
214   - });
215   - //创建线路搜索映射
216   - createLineSearchMapps(newArray);
217   -
218   - var htmlStr = template('line_list_items_temp', {list: newArray});
219   - $('.line_list_all_wrap').html(htmlStr);
220   -
221   - //过滤公司编码数据
222   - filter_company_data.filter(newArray, convert_buss_data(company_data));
223   - initCompanySelect();
224   - //更新滚动条高度
225   - setTimeout(function () {
226   - $('.line_list_all_wrap').perfectScrollbar('update');
227   - }, 1000);
228   -
229   - //登录模式
230   - changePattern(userAuthor.pattern);
231   - if(!userAuthor.pattern)
232   - $('.pattern_type_label').hide().find('input')[0].checked=false;
233   - else
234   - $('input','.pattern_type_label')[0].checked=true;
235   -
236   - $('.loading').remove();
237   - $('.ct_page').show();
238   -
239   - //默认选中上次记录
240   - var lineControlItems = window.localStorage.getItem('lineControlItems');
241   - if (lineControlItems) {
242   - var array = JSON.parse(lineControlItems);
243   - $.each(array, function (i, line) {
244   - $('.item[data-id='+line.lineCode+']','.line_list_all_wrap').trigger('click');
245   - });
246   - }
247   - });
248   -
249   - $('.pattern_type_label').on('click', function () {
250   - var checked = $('input',this)[0].checked;
251   - changePattern(checked);
252   - });
253   -
254   - function changePattern(status) {
255   - var btn = $('#go_to_real_system_btn'),
256   - def='uk-button-default',
257   - prim='uk-button-primary';
258   - if(status){
259   - btn.removeClass(def).addClass(prim);
260   - }
261   - else{
262   - btn.removeClass(prim).addClass(def);
263   - }
264   - }
265   -
266   - /**
267   - * 查询所有线路
268   - */
269   - $.get('/line/all', {remove_ne: 1}, function (list) {
270   - ep.emit('all_lines', list);
271   - });
272   -
273   - /**用户分配的线路*/
274   - $.get('/realControAuthority/findByCurrentUser', function (t) {
275   - ep.emit('user_author', t);
276   - });
277   -
278   - /** 查询公司编码 */
279   - $.get('/business/all', function (rs) {
280   - ep.emit('company_data', rs);
281   - });
282   -
283   - //点击选择线路
284   - $('.line_list_all_wrap').on('click', 'span.item', function () {
285   - var lineCode = $(this).data('id'),
286   - name = $(this).text();
287   - if ($(this).hasClass('active')) {
288   - $(this).removeClass('active');
289   -
290   - $('.item[data-id='+lineCode+']','.checked_list').remove();
291   - }
292   - else {
293   - $(this).addClass('active');
294   - var span = $('<span data-id="'+lineCode+'" class="item uk-card uk-card-default uk-animation-slide-bottom '+($(this).hasClass('destroy')?"destroy":"")+'">'+name+'</span>')
295   - .one('webkitAnimationEnd', function () {
296   - $(this).removeClass('uk-animation-slide-bottom');
297   - });
298   - $('.checked_list').append(span);
299   - }
300   - });
301   -
302   - $('.checked_list').on('click', '.item', function () {
303   - var lineCode = $(this).data('id');
304   - $('.item[data-id='+lineCode+']','.line_list_all_wrap').removeClass('active');
305   - $(this).remove();
306   - });
307   -
308   - /**
309   - * 搜索线路
310   - */
311   - function search_line_list() {
312   - var comp = $('select.company_search_select').val(),
313   - fgs = $('select.fgs_search_select').val(),
314   - gsbm = comp + '_' + fgs;
315   -
316   - if(gsbm=='_')
317   - gsbm=null;
318   - var allDoms = $('.line_list_all_wrap span.item');
319   - //线路
320   - var lineCodeArray = [];
321   - var t = $('.line_search_input').val();
322   - if(t){
323   - t = t.toUpperCase();
324   - for(var m in allMapps){
325   - if(m.indexOf(t)!=-1)
326   - lineCodeArray.push(allMapps[m]);
327   - }
328   - }
329   -
330   - //搜索
331   - var show_elems = [];
332   - for (var i=0, dom; dom = allDoms[i++];) {
333   - if(gsbm && $(dom).data('gsbm').indexOf(gsbm)==-1)
334   - continue;
335   -
336   - if(t && lineCodeArray.indexOf($(dom).data('id')+'') == -1)
337   - continue;
338   -
339   - show_elems.push($(dom));
340   - }
341   -
342   - //show
343   - allDoms.hide();
344   - for(var j=0,$dom;$dom=show_elems[j++];)
345   - $dom.show();
346   - }
347   -
348   - function createLineSearchMapps(list) {
349   - allMapps = {};
350   - var name, code;
351   - for (var i = 0, line; line = list[i++];) {
352   - name = line.name;
353   - code = line.lineCode;
354   - //拼音映射
355   - allMapps[pinyin.getCamelChars(name)] = code;
356   - allMapps[pinyin.getFullChars(name).toUpperCase()] = code;
357   - //中文映射
358   - allMapps[name] = code;
359   - }
360   - }
361   -
362   -
363   - //构建公司级联下拉框
364   - function initCompanySelect() {
365   - var opts = '<option value="">公司搜索</option>';
366   - for (var k in companyData) {
367   - opts += '<option value="' + k + '">' + companyData[k].name + '</option>';
368   - }
369   - $('select.company_search_select').html(opts);
370   - }
371   -
372   - //公司切换
373   - $('select.company_search_select').on('change', function () {
374   - var opts = '<option value="">分公司搜索</option>',
375   - t = $(this).val(),
376   - fgsSelect = $('select.fgs_search_select');
377   - if (!t) {
378   - fgsSelect.html(opts).attr('disabled', 'disabled');
379   - }
380   - else{
381   - var array = companyData[t].childs;
382   - for (var i = 0, fgs; fgs = array[i++];) {
383   - opts += '<option value="' + fgs.businessCode + '">' + fgs.businessName + '</option>';
384   - }
385   -
386   - fgsSelect.html(opts).removeAttr('disabled');
387   - }
388   - search_line_list();
389   - });
390   -
391   - //分公司切换
392   - $('select.fgs_search_select').on('change', search_line_list);
393   -
394   - //线路文本框输入
395   - var flag;
396   - $('.line_search_input').on('input', function () {
397   - if(flag)
398   - return;
399   - flag = true;
400   - setTimeout(function () {
401   - //延迟
402   - search_line_list();
403   - flag = false;
404   - }, 200);
405   - });
406   -
407   - function convert_buss_data(rs) {
408   - var baseCode;
409   - //找到跟节点
410   - $.each(rs, function () {
411   - if (this.upCode == 0) {
412   - baseCode = this.businessCode;
413   - return false;
414   - }
415   - });
416   - if (!baseCode)return;
417   - //提取二级节点
418   - var secondMap = {};
419   - $.each(rs, function () {
420   - if (this.upCode == baseCode)
421   - secondMap[this.businessCode] = {name: this.businessName, childs: []};
422   - });
423   - //分公司节点
424   - $.each(rs, function () {
425   - if (secondMap[this.upCode])
426   - secondMap[this.upCode].childs.push(this);
427   - });
428   - //排序
429   - for (var sid in secondMap)
430   - secondMap[sid].childs.sort(naturalSort);
431   - return secondMap;
432   - }
433   -
434   - var naturalSort = function (a, b) {
435   - return a.businessName.localeCompare(b.businessName);
436   - };
437   -
438   - /**
439   - * 根据用户线路权限过滤公司编码数据
440   - */
441   - var filter_company_data = (function () {
442   - var filter = function (lineArray, data) {
443   - companyData = {};
444   - var com, fCom;
445   - $.each(lineArray, function () {
446   - com = this.company;
447   - fCom = this.brancheCompany;
448   - if (!companyData[com]) {
449   - companyData[com] = {name: data[com].name, childs: []};
450   - }
451   -
452   - if (!get(fCom, companyData[com].childs)) {
453   - companyData[com].childs.push(get(fCom, data[com].childs));
454   - }
455   - });
456   - };
457   -
458   - function get(fgsCode, fgsArray) {
459   - for (var i = 0, fgs; fgs = fgsArray[i++];) {
460   - if (fgs.businessCode == fgsCode)
461   - return fgs;
462   - }
463   - return null;
464   - }
465   -
466   - return {
467   - filter: filter
468   - }
469   - })();
470   - var storage = window.localStorage;
471   - $('#go_to_real_system_btn').on('click', go_to_xd_sys);
472   - /**
473   - * 进入线调
474   - */
475   - function go_to_xd_sys() {
476   - var items = $('.checked_list .item');
477   - if(items.length==0)
478   - return UIkit.notification({message: '你还没有选择线路!', pos: 'bottom-center', status: 'danger'});
479   - $(this).attr('disabled', 'disabled');
480   -
481   - show_btn_load(this, '更新缓存数据...');
482   - (function () {
483   - var ls_line_data = [];
484   - $.each(items, function () {
485   - ls_line_data.push(codeMapps[$(this).data('id')]);
486   - });
487   - //监控模式还是主调模式
488   - storage.setItem('operationMode', $('.pattern_type_label>input')[0].checked?1:0);
489   -
490   - //进入线调
491   - var eq = EventProxy.create('cache_line_level', 'cache_mv_route', 'cache_route', 'check_line_config', function (lineLevel) {
492   - debugger;
493   - var newWinOpen = $('input','.new_window_open_label')[0].checked;
494   - if(!newWinOpen)
495   - top.window.location.href = "/real_control/v2";
496   - else{
497   - window.open("/real_control/v2");
498   - $('#go_to_real_system_btn').html('已经尝试打开新窗口,如看不到,可能被浏览器阻止了');
499   - }
500   -
501   - // 将线路级别赋值
502   - $.each(ls_line_data, function () {
503   - this.lineLevel = lineLevel[this.lineCode];
504   - });
505   - // 将线路基础信息写入localStorage
506   - storage.setItem('lineControlItems', JSON.stringify(ls_line_data));
507   - });
508   -
509   - //拼接线路编码
510   - var idx='';
511   - $.each(ls_line_data, function () {
512   - idx+=(this.lineCode + ',');
513   - });
514   - //缓存路由
515   - idx=idx.substr(0, idx.length - 1);
516   -
517   - $.get('/realSchedule/lineLevel', {idx: idx}, function (rs) {
518   - if (rs) {
519   - eq.emit('cache_line_level', rs);
520   - }
521   - });
522   -
523   - $.get('/realMap/findRouteAndVersionByLine', {idx: idx}, function (rs) {
524   - if (rs) {
525   - for(var lineCode in rs)
526   - storage.setItem(lineCode + '_route', JSON.stringify(rs[lineCode]));
527   - eq.emit('cache_mv_route');
528   - }
529   - });
530   -
531   - $.get('/realMap/findRouteByLine', {idx: idx}, function (rs) {
532   - if (rs) {
533   - for(var lineCode in rs)
534   - storage.setItem(lineCode + '_route', JSON.stringify(rs[lineCode]));
535   -
536   - eq.emit('cache_route');
537   - }
538   - });
539   -
540   -
541   - //检查线路配置
542   - checkLineConfig(ls_line_data, function (rs) {
543   - if (rs.status == 0)
544   - eq.emit('check_line_config');
545   - else if (rs.status == 1){
546   - initLineConfig(rs.not, function () {
547   - eq.emit('check_line_config');
548   - });
549   - }
550   - })
551   - })();
552   - }
553   -
554   - function checkLineConfig(lsData, cb) {
555   - var lineCodeArray = [];
556   - $.each(lsData, function () {
557   - lineCodeArray.push(this.lineCode);
558   - });
559   -
560   - $.ajax({
561   - url: '/lineConfig/check',
562   - traditional: true,
563   - data: {codeArray: lineCodeArray},
564   - method: 'POST',
565   - success: cb
566   - });
567   - }
568   -
569   - function initLineConfig(arr, cb) {
570   - var i = 0;
571   - (function () {
572   - if (i >= arr.length) {
573   - cb && cb();
574   - return;
575   - }
576   - var f = arguments.callee
577   - , lineCode = arr[i];
578   -
579   - //showLoad('初始化' + lineIds[lineCode] + '配置信息...');
580   - $.post('/lineConfig/init/' + lineCode, function (rs) {
581   - if (rs == 1) {
582   - i++;
583   - f();
584   - }
585   - });
586   - })();
587   - }
588   -
589   - /**
590   - * 按钮转菊花
591   - */
592   - function show_btn_load(btn, msg) {
593   - $(btn).html('<div uk-spinner></div> ' + msg);
594   - }
595   -</script>
596   -</body>
  1 +<!DOCTYPE html>
  2 +<html lang="zh-cn">
  3 +
  4 +<head>
  5 + <meta charset="UTF-8">
  6 + <link rel="stylesheet" href="/assets/plugins/uk3.0/uikit.min.css"/>
  7 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css"/>
  8 + <!-- flatpickr -->
  9 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.css">
  10 + <style>
  11 + html, body {
  12 + height: 100%;
  13 + }
  14 +
  15 + .ct_page {
  16 + padding: 25px 15px;
  17 + height: 100%;
  18 + height: calc(100% - 65px);
  19 + }
  20 +
  21 + .ct_cont {
  22 + height: calc(100% - 41px);
  23 + }
  24 +
  25 + .ct_cont > div > div.uk-card {
  26 + height: 99%;
  27 + }
  28 +
  29 + .loading {
  30 + height: 100%;
  31 + text-align: center;
  32 + }
  33 +
  34 + .loading .uk-spinner {
  35 + margin-top: 200px;
  36 + }
  37 +
  38 + .loading circle {
  39 + stroke: red;
  40 + }
  41 +
  42 + .ps-container > .ps-scrollbar-x-rail, .ps-container > .ps-scrollbar-y-rail {
  43 + opacity: 0.6 !important;
  44 + padding: 0 !important;
  45 + }
  46 +
  47 + .line_list_all_wrap {
  48 + height: 200px;
  49 + overflow: auto;
  50 + position: relative;
  51 + -webkit-user-select:none;
  52 + -moz-user-select:none;
  53 + -ms-user-select:none;
  54 + user-select:none;
  55 + }
  56 +
  57 + .line_list_all_wrap > .item {
  58 + background: #fff;
  59 + color: #666;
  60 + box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.08);
  61 + padding: 7px 12px;
  62 + border: 1px solid #ececec;
  63 + display: inline-block;
  64 + margin: 5px;
  65 + min-width: 70px;
  66 + text-align: center;
  67 + cursor: default;
  68 + }
  69 +
  70 + .line_list_all_wrap > .item.active{
  71 + background: #ffe9a5;
  72 + }
  73 +
  74 + .checked_list {
  75 + padding-left: 4px;
  76 + -webkit-user-select:none;
  77 + -moz-user-select:none;
  78 + -ms-user-select:none;
  79 + user-select:none;
  80 + }
  81 +
  82 + .checked_list > .item {
  83 + color: #fbfbfb;
  84 + box-shadow: 0px 3px 12px rgba(50, 197, 210, 0.3);
  85 + padding: 7px 12px;
  86 + border: 1px solid #ececec;
  87 + display: inline-block;
  88 + margin: 5px 2px;
  89 + min-width: 70px;
  90 + text-align: center;
  91 + background: #32C5D2;
  92 + cursor: move;
  93 + }
  94 +
  95 + .company_search_wrap {
  96 + width: 610px;
  97 + margin-left: 6px;
  98 + }
  99 +
  100 + .company_search_wrap select {
  101 + display: inline-block;
  102 + width: 128px;
  103 + margin-right: 12px;
  104 + }
  105 +
  106 + .uk-card {
  107 + border: 1px solid #eeeeee;
  108 + }
  109 +
  110 + .footer_tools_card {
  111 + margin-top: 20px;
  112 + padding: 20px 40px;
  113 + }
  114 +
  115 + .footer_tools_card label {
  116 + vertical-align: bottom;
  117 + display: inline-block;
  118 + font-size: 13px;
  119 + margin-left: 13px;
  120 + margin-bottom: 3px !important;
  121 + }
  122 +
  123 + .uk-button-default{
  124 + background: #e0e0e0 !important;
  125 + }
  126 +
  127 + .line_list_all_wrap > .item.destroy{
  128 + color: #f64242;
  129 + }
  130 +
  131 + .checked_list > .item.destroy{
  132 + background: #ff5c5c;
  133 + }
  134 + </style>
  135 +</head>
  136 +
  137 +<body>
  138 +<div class="loading">
  139 + <div uk-spinner></div>
  140 +</div>
  141 +<div class="ct_page" style="display: none;">
  142 + <h2 class="uk-heading-line uk-heading-bullet"><span>线调 <h5 style="display: inline-block;">-选择线路</h5></span></h2>
  143 + <div class="ct_cont">
  144 + <div class="allot_wrap uk-flex-center" uk-grid>
  145 + <div class="uk-card uk-card-hover uk-card-body uk-width-2-3@m"
  146 + style="padding-top: 20px;padding-bottom: 20px;">
  147 + <div class="company_search_wrap">
  148 + <select class="uk-select company_search_select"></select>
  149 + <select class="uk-select fgs_search_select" disabled>
  150 + <option value="">分公司搜索</option>
  151 + </select>
  152 + <div class="uk-inline">
  153 + <span class="uk-form-icon uk-form-icon-flip" uk-icon="icon: search"></span>
  154 + <input class="uk-input line_search_input" style="width: 310px;" placeholder="搜索线路">
  155 + </div>
  156 + </div>
  157 + <hr>
  158 + <div class="line_list_all_wrap"></div>
  159 + <hr>
  160 + <div class="checked_list" uk-sortable> </div>
  161 + </div>
  162 +
  163 + <div class="uk-card uk-card-hover uk-card-body uk-width-2-3@m footer_tools_card">
  164 + <button class="uk-button uk-button-default uk-button-large" style="font-size: 16px" id="go_to_real_system_btn"><i
  165 + uk-icon=" icon: sign-in" style="margin-right: 5px;" ></i>进入线路调度
  166 + </button>
  167 + <label class="pattern_type_label"><input class="uk-checkbox" type="checkbox" > 主调模式登录</label>
  168 + <label class="new_window_open_label" title="可能会被浏览器阻止新建窗口" uk-tooltip><input class="uk-checkbox" type="checkbox"> 新窗口打开</label>
  169 + </div>
  170 +
  171 + <div class="uk-alert-warning uk-width-2-3@m " uk-alert>
  172 + <p>注意!!! 相关“设备调试人员”和“测试人员”不要以主调模式进入线调。</p>
  173 + </div>
  174 + </div>
  175 + </div>
  176 +</div>
  177 +
  178 +<script id="line_list_items_temp" type="text/html">
  179 + {{each list as obj i}}
  180 + <span class="item {{obj.destroy==1?'destroy':''}}" data-id="{{obj.lineCode}}" data-gsbm="{{obj.company}}_{{obj.brancheCompany}}">{{obj.name}}</span>
  181 + {{/each}}
  182 +</script>
  183 +
  184 +<script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>
  185 +<script src="/assets/plugins/uk3.0/uikit.min.js"></script>
  186 +<script src="/assets/plugins/uk3.0/uikit-icons.min.js"></script>
  187 +<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js"></script>
  188 +<!-- EventProxy -->
  189 +<script src="/assets/js/eventproxy.js"></script>
  190 +<!-- art-template 模版引擎 -->
  191 +<script src="/assets/plugins/template.js"></script>
  192 +<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>
  193 +<script src="/assets/plugins/pinyin.js"></script>
  194 +<script>
  195 + var allMapps = {};//线路搜索映射
  196 + var companyData = {};
  197 + var codeMapps={}; //线路编码映射
  198 + //滚动条
  199 + $('.line_list_all_wrap').perfectScrollbar();
  200 +
  201 + var ep = EventProxy.create('all_lines', 'user_author', 'company_data', function (allLines, userAuthor, company_data) {
  202 + //按用户权限过滤线路
  203 + var authArray = userAuthor.lineCodeStr.split(','),
  204 + newArray = [];
  205 + $.each(allLines, function () {
  206 + if (this.lineCode && authArray.indexOf(this.lineCode) != -1) {
  207 + newArray.push(this);
  208 + codeMapps[this.lineCode] = this;
  209 + }
  210 + });
  211 + //排序
  212 + newArray.sort(function (a, b) {
  213 + return a.name.localeCompare(b.name);
  214 + });
  215 + //创建线路搜索映射
  216 + createLineSearchMapps(newArray);
  217 +
  218 + var htmlStr = template('line_list_items_temp', {list: newArray});
  219 + $('.line_list_all_wrap').html(htmlStr);
  220 +
  221 + //过滤公司编码数据
  222 + filter_company_data.filter(newArray, convert_buss_data(company_data));
  223 + initCompanySelect();
  224 + //更新滚动条高度
  225 + setTimeout(function () {
  226 + $('.line_list_all_wrap').perfectScrollbar('update');
  227 + }, 1000);
  228 +
  229 + //登录模式
  230 + changePattern(userAuthor.pattern);
  231 + if(!userAuthor.pattern)
  232 + $('.pattern_type_label').hide().find('input')[0].checked=false;
  233 + else
  234 + $('input','.pattern_type_label')[0].checked=true;
  235 +
  236 + $('.loading').remove();
  237 + $('.ct_page').show();
  238 +
  239 + //默认选中上次记录
  240 + var lineControlItems = window.localStorage.getItem('lineControlItems');
  241 + if (lineControlItems) {
  242 + var array = JSON.parse(lineControlItems);
  243 + $.each(array, function (i, line) {
  244 + $('.item[data-id='+line.lineCode+']','.line_list_all_wrap').trigger('click');
  245 + });
  246 + }
  247 +
  248 + var storage = window.localStorage, keys = new Array();
  249 + for (var i = 0;i < storage.length;i++) {
  250 + var key=storage.key(i);
  251 + if (key.indexOf('_route') > 0) {
  252 + keys.push(key);
  253 + }
  254 + }
  255 + for (var i = 0;i < keys.length;i++) {
  256 + storage.removeItem(keys[i]);
  257 + }
  258 + });
  259 +
  260 + $('.pattern_type_label').on('click', function () {
  261 + var checked = $('input',this)[0].checked;
  262 + changePattern(checked);
  263 + });
  264 +
  265 + function changePattern(status) {
  266 + var btn = $('#go_to_real_system_btn'),
  267 + def='uk-button-default',
  268 + prim='uk-button-primary';
  269 + if(status){
  270 + btn.removeClass(def).addClass(prim);
  271 + }
  272 + else{
  273 + btn.removeClass(prim).addClass(def);
  274 + }
  275 + }
  276 +
  277 + /**
  278 + * 查询所有线路
  279 + */
  280 + $.get('/line/all', {remove_ne: 1}, function (list) {
  281 + ep.emit('all_lines', list);
  282 + });
  283 +
  284 + /**用户分配的线路*/
  285 + $.get('/realControAuthority/findByCurrentUser', function (t) {
  286 + ep.emit('user_author', t);
  287 + });
  288 +
  289 + /** 查询公司编码 */
  290 + $.get('/business/all', function (rs) {
  291 + ep.emit('company_data', rs);
  292 + });
  293 +
  294 + //点击选择线路
  295 + $('.line_list_all_wrap').on('click', 'span.item', function () {
  296 + var lineCode = $(this).data('id'),
  297 + name = $(this).text();
  298 + if ($(this).hasClass('active')) {
  299 + $(this).removeClass('active');
  300 +
  301 + $('.item[data-id='+lineCode+']','.checked_list').remove();
  302 + }
  303 + else {
  304 + $(this).addClass('active');
  305 + var span = $('<span data-id="'+lineCode+'" class="item uk-card uk-card-default uk-animation-slide-bottom '+($(this).hasClass('destroy')?"destroy":"")+'">'+name+'</span>')
  306 + .one('webkitAnimationEnd', function () {
  307 + $(this).removeClass('uk-animation-slide-bottom');
  308 + });
  309 + $('.checked_list').append(span);
  310 + }
  311 + });
  312 +
  313 + $('.checked_list').on('click', '.item', function () {
  314 + var lineCode = $(this).data('id');
  315 + $('.item[data-id='+lineCode+']','.line_list_all_wrap').removeClass('active');
  316 + $(this).remove();
  317 + });
  318 +
  319 + /**
  320 + * 搜索线路
  321 + */
  322 + function search_line_list() {
  323 + var comp = $('select.company_search_select').val(),
  324 + fgs = $('select.fgs_search_select').val(),
  325 + gsbm = comp + '_' + fgs;
  326 +
  327 + if(gsbm=='_')
  328 + gsbm=null;
  329 + var allDoms = $('.line_list_all_wrap span.item');
  330 + //线路
  331 + var lineCodeArray = [];
  332 + var t = $('.line_search_input').val();
  333 + if(t){
  334 + t = t.toUpperCase();
  335 + for(var m in allMapps){
  336 + if(m.indexOf(t)!=-1)
  337 + lineCodeArray.push(allMapps[m]);
  338 + }
  339 + }
  340 +
  341 + //搜索
  342 + var show_elems = [];
  343 + for (var i=0, dom; dom = allDoms[i++];) {
  344 + if(gsbm && $(dom).data('gsbm').indexOf(gsbm)==-1)
  345 + continue;
  346 +
  347 + if(t && lineCodeArray.indexOf($(dom).data('id')+'') == -1)
  348 + continue;
  349 +
  350 + show_elems.push($(dom));
  351 + }
  352 +
  353 + //show
  354 + allDoms.hide();
  355 + for(var j=0,$dom;$dom=show_elems[j++];)
  356 + $dom.show();
  357 + }
  358 +
  359 + function createLineSearchMapps(list) {
  360 + allMapps = {};
  361 + var name, code;
  362 + for (var i = 0, line; line = list[i++];) {
  363 + name = line.name;
  364 + code = line.lineCode;
  365 + //拼音映射
  366 + allMapps[pinyin.getCamelChars(name)] = code;
  367 + allMapps[pinyin.getFullChars(name).toUpperCase()] = code;
  368 + //中文映射
  369 + allMapps[name] = code;
  370 + }
  371 + }
  372 +
  373 +
  374 + //构建公司级联下拉框
  375 + function initCompanySelect() {
  376 + var opts = '<option value="">公司搜索</option>';
  377 + for (var k in companyData) {
  378 + opts += '<option value="' + k + '">' + companyData[k].name + '</option>';
  379 + }
  380 + $('select.company_search_select').html(opts);
  381 + }
  382 +
  383 + //公司切换
  384 + $('select.company_search_select').on('change', function () {
  385 + var opts = '<option value="">分公司搜索</option>',
  386 + t = $(this).val(),
  387 + fgsSelect = $('select.fgs_search_select');
  388 + if (!t) {
  389 + fgsSelect.html(opts).attr('disabled', 'disabled');
  390 + }
  391 + else{
  392 + var array = companyData[t].childs;
  393 + for (var i = 0, fgs; fgs = array[i++];) {
  394 + opts += '<option value="' + fgs.businessCode + '">' + fgs.businessName + '</option>';
  395 + }
  396 +
  397 + fgsSelect.html(opts).removeAttr('disabled');
  398 + }
  399 + search_line_list();
  400 + });
  401 +
  402 + //分公司切换
  403 + $('select.fgs_search_select').on('change', search_line_list);
  404 +
  405 + //线路文本框输入
  406 + var flag;
  407 + $('.line_search_input').on('input', function () {
  408 + if(flag)
  409 + return;
  410 + flag = true;
  411 + setTimeout(function () {
  412 + //延迟
  413 + search_line_list();
  414 + flag = false;
  415 + }, 200);
  416 + });
  417 +
  418 + function convert_buss_data(rs) {
  419 + var baseCode;
  420 + //找到跟节点
  421 + $.each(rs, function () {
  422 + if (this.upCode == 0) {
  423 + baseCode = this.businessCode;
  424 + return false;
  425 + }
  426 + });
  427 + if (!baseCode)return;
  428 + //提取二级节点
  429 + var secondMap = {};
  430 + $.each(rs, function () {
  431 + if (this.upCode == baseCode)
  432 + secondMap[this.businessCode] = {name: this.businessName, childs: []};
  433 + });
  434 + //分公司节点
  435 + $.each(rs, function () {
  436 + if (secondMap[this.upCode])
  437 + secondMap[this.upCode].childs.push(this);
  438 + });
  439 + //排序
  440 + for (var sid in secondMap)
  441 + secondMap[sid].childs.sort(naturalSort);
  442 + return secondMap;
  443 + }
  444 +
  445 + var naturalSort = function (a, b) {
  446 + return a.businessName.localeCompare(b.businessName);
  447 + };
  448 +
  449 + /**
  450 + * 根据用户线路权限过滤公司编码数据
  451 + */
  452 + var filter_company_data = (function () {
  453 + var filter = function (lineArray, data) {
  454 + companyData = {};
  455 + var com, fCom;
  456 + $.each(lineArray, function () {
  457 + com = this.company;
  458 + fCom = this.brancheCompany;
  459 + if (!companyData[com]) {
  460 + companyData[com] = {name: data[com].name, childs: []};
  461 + }
  462 +
  463 + if (!get(fCom, companyData[com].childs)) {
  464 + companyData[com].childs.push(get(fCom, data[com].childs));
  465 + }
  466 + });
  467 + };
  468 +
  469 + function get(fgsCode, fgsArray) {
  470 + for (var i = 0, fgs; fgs = fgsArray[i++];) {
  471 + if (fgs.businessCode == fgsCode)
  472 + return fgs;
  473 + }
  474 + return null;
  475 + }
  476 +
  477 + return {
  478 + filter: filter
  479 + }
  480 + })();
  481 + var storage = window.localStorage;
  482 + $('#go_to_real_system_btn').on('click', go_to_xd_sys);
  483 + /**
  484 + * 进入线调
  485 + */
  486 + function go_to_xd_sys() {
  487 + var items = $('.checked_list .item');
  488 + if(items.length==0)
  489 + return UIkit.notification({message: '你还没有选择线路!', pos: 'bottom-center', status: 'danger'});
  490 + $(this).attr('disabled', 'disabled');
  491 +
  492 + show_btn_load(this, '更新缓存数据...');
  493 + (function () {
  494 + var ls_line_data = [];
  495 + $.each(items, function () {
  496 + ls_line_data.push(codeMapps[$(this).data('id')]);
  497 + });
  498 + //监控模式还是主调模式
  499 + storage.setItem('operationMode', $('.pattern_type_label>input')[0].checked?1:0);
  500 +
  501 + //进入线调
  502 + var eq = EventProxy.create('cache_line_level', 'cache_mv_route', 'cache_route', 'check_line_config', function (lineLevel) {
  503 + debugger;
  504 + var newWinOpen = $('input','.new_window_open_label')[0].checked;
  505 + if(!newWinOpen)
  506 + top.window.location.href = "/real_control/v2";
  507 + else{
  508 + window.open("/real_control/v2");
  509 + $('#go_to_real_system_btn').html('已经尝试打开新窗口,如看不到,可能被浏览器阻止了');
  510 + }
  511 +
  512 + // 将线路级别赋值
  513 + $.each(ls_line_data, function () {
  514 + this.lineLevel = lineLevel[this.lineCode];
  515 + });
  516 + // 将线路基础信息写入localStorage
  517 + storage.setItem('lineControlItems', JSON.stringify(ls_line_data));
  518 + });
  519 +
  520 + //拼接线路编码
  521 + var idx='';
  522 + $.each(ls_line_data, function () {
  523 + idx+=(this.lineCode + ',');
  524 + });
  525 + //缓存路由
  526 + idx=idx.substr(0, idx.length - 1);
  527 +
  528 + $.get('/realSchedule/lineLevel', {idx: idx}, function (rs) {
  529 + if (rs) {
  530 + eq.emit('cache_line_level', rs);
  531 + }
  532 + });
  533 +
  534 + $.get('/realMap/findRouteAndVersionByLine', {idx: idx}, function (rs) {
  535 + if (rs) {
  536 + for(var lineCode in rs)
  537 + storage.setItem(lineCode + '_route', JSON.stringify(rs[lineCode]));
  538 + eq.emit('cache_mv_route');
  539 + }
  540 + });
  541 +
  542 + $.get('/realMap/findRouteByLine', {idx: idx}, function (rs) {
  543 + if (rs) {
  544 + for(var lineCode in rs)
  545 + storage.setItem(lineCode + '_route', JSON.stringify(rs[lineCode]));
  546 +
  547 + eq.emit('cache_route');
  548 + }
  549 + });
  550 +
  551 +
  552 + //检查线路配置
  553 + checkLineConfig(ls_line_data, function (rs) {
  554 + if (rs.status == 0)
  555 + eq.emit('check_line_config');
  556 + else if (rs.status == 1){
  557 + initLineConfig(rs.not, function () {
  558 + eq.emit('check_line_config');
  559 + });
  560 + }
  561 + })
  562 + })();
  563 + }
  564 +
  565 + function checkLineConfig(lsData, cb) {
  566 + var lineCodeArray = [];
  567 + $.each(lsData, function () {
  568 + lineCodeArray.push(this.lineCode);
  569 + });
  570 +
  571 + $.ajax({
  572 + url: '/lineConfig/check',
  573 + traditional: true,
  574 + data: {codeArray: lineCodeArray},
  575 + method: 'POST',
  576 + success: cb
  577 + });
  578 + }
  579 +
  580 + function initLineConfig(arr, cb) {
  581 + var i = 0;
  582 + (function () {
  583 + if (i >= arr.length) {
  584 + cb && cb();
  585 + return;
  586 + }
  587 + var f = arguments.callee
  588 + , lineCode = arr[i];
  589 +
  590 + //showLoad('初始化' + lineIds[lineCode] + '配置信息...');
  591 + $.post('/lineConfig/init/' + lineCode, function (rs) {
  592 + if (rs == 1) {
  593 + i++;
  594 + f();
  595 + }
  596 + });
  597 + })();
  598 + }
  599 +
  600 + /**
  601 + * 按钮转菊花
  602 + */
  603 + function show_btn_load(btn, msg) {
  604 + $(btn).html('<div uk-spinner></div> ' + msg);
  605 + }
  606 +</script>
  607 +</body>
597 608 </html>
598 609 \ No newline at end of file
... ...
src/main/resources/static/pages/forms/calc/calcInvestigateMonth.html
1   -<style type="text/css">
2   - .table-bordered {
3   - border: 1px solid; }
4   - .table-bordered > thead > tr > th,
5   - .table-bordered > thead > tr > td,
6   - .table-bordered > tbody > tr > th,
7   - .table-bordered > tbody > tr > td,
8   - .table-bordered > tfoot > tr > th,
9   - .table-bordered > tfoot > tr > td {
10   - border: 1px solid; }
11   - .table-bordered > thead > tr > th,
12   - .table-bordered > thead > tr > td {
13   - border-bottom-width: 2px; }
14   -
15   - .table > tbody + tbody {
16   - border-top: 1px solid; }
17   -
18   - #forms > thead > tr> td >span{
19   - width: 5px;
20   - word-wrap: break-word;
21   - letter-spacing: 20px;
22   - }
23   -
24   - #forms > thead > tr> td >label{
25   - word-break: keep-all;white-space:nowrap;
26   - }
27   -
28   - .table > thead > tr > td{
29   - min-width: 80px;
30   - text-align:center;
31   - }
32   - .table > tbody > tr > td{
33   - text-align:center;
34   - }
35   -</style>
36   -
37   -<div class="page-head">
38   - <div class="page-title">
39   - <h1>浦东公交线路调查表</h1>
40   - </div>
41   -</div>
42   -
43   -<!-- <div class="row"> -->
44   - <div class="col-md-12 portlet light porttlet-fit bordered" style="height:calc(100% - 56px)">
45   -<!-- <div> -->
46   - <div class="portlet-title">
47   - <form class="form-inline" action="">
48   - <div style="display: inline-block;margin-left: 15px;" id="gsbmDiv">
49   - <span class="item-label" style="width: 80px;">公司: </span>
50   - <select class="form-control" name="company" id="gsbm" style="width: 180px;"></select>
51   - </div>
52   - <div style="display: inline-block; margin-left: 9px;" id="fgsbmDiv">
53   - <span class="item-label" style="width: 80px;">分公司: </span>
54   - <select class="form-control" name="subCompany" id="fgsbm" style="width: 180px;"></select>
55   - </div>
56   - <div style="margin-top: 2px"></div>
57   - <div style="display: inline-block;margin-left: 15px;">
58   - <span class="item-label" style="width: 80px;">月份: </span>
59   - <input class="form-control" type="text" id="month" style="width: 180px;"/>
60   - </div>
61   - <div style="display: inline-block; margin-left: 23px;">
62   - <span class="item-label" style="width: 80px;">线路: </span>
63   - <select class="form-control" name="line" id="line" style="width: 180px;"></select>
64   - </div>
65   - <div style="display: inline-block;">
66   - <span class="item-label" style="width: 80px;">线路性质: </span>
67   - <select
68   - class="form-control" name="nature" id="nature" style="width: 180px;">
69   - <option value="0" selected="selected">全部线路</option>
70   - <option value="1">营运线路</option>
71   - <option value="2">非营运线路</option>
72   - </select>
73   - </div>
74   - <div class="form-group">
75   - <input class="btn btn-default" type="button" id="query" value="查询"/>
76   - <input class="btn btn-default" type="button" id="export" value="导出"/>
77   - </div>
78   - </form>
79   - </div>
80   - <label><b id="currMonth"></b></label>
81   - <div class="portlet-body" id="tjrbBody" style="overflow:auto;height: calc(100% - 80px)">
82   - <div class="table-container" style="margin-top: 10px;min-width: 906px">
83   - <table class="table table-bordered table-hover table-checkable" id="forms">
84   - <thead>
85   - <tr>
86   - <th colspan="34"><label id="tjrq"></label>浦东公交线路调查表</th>
87   - </tr>
88   - <tr>
89   - <td rowspan="2" style="min-width:90px">线路</td>
90   - <td rowspan="2" style="min-width:90px">权证配车数</td>
91   - <td rowspan="2">线路属性</td>
92   - <td rowspan="2">线路类型</td>
93   - <td rowspan="2">线路长度</td>
94   - <td rowspan="2">是否挂牌线路</td>
95   - <td rowspan="2">是否冷僻线路</td>
96   - <td rowspan="2" style="min-width:175px">首末班时间</td>
97   -
98   - <td colspan="2">调度方式</td>
99   - <td colspan="2">间隔时间</td>
100   -
101   - <td rowspan="2">是否衔接轨交末班</td>
102   - <td rowspan="2">日均里程</td>
103   - <td rowspan="2">日均班次</td>
104   - <td rowspan="2">日均人次</td>
105   - <td rowspan="2">日均单车人次</td>
106   - <td rowspan="2">每班次单车人次</td>
107   -
108   - <td colspan="3">里程</td>
109   -
110   - <td rowspan="2" style="min-width:104px">里程利用率%</td>
111   - <td rowspan="2" style="min-width:104px">百公里人次(载客公里)</td>
112   - <td rowspan="2">月人次(票务)</td>
113   - <td rowspan="2">月营收(票务)</td>
114   - <td rowspan="2">票价(元)</td>
115   - <td rowspan="2" style="min-width:104px">百公里营收(元)</td>
116   -
117   - <td colspan="3">线路特征</td>
118   -
119   - <td rowspan="2" style="min-width:400px">线路走向</td>
120   - <td rowspan="2" style="min-width:600px">线路站点</td>
121   - <td rowspan="2" style="min-width:160px">备注</td>
122   - </tr>
123   - <tr>
124   - <td rowspan="1" style="min-width:60px">常规</td>
125   - <td rowspan="1" style="min-width:60px">多样化</td>
126   - <td rowspan="1">高峰</td>
127   - <td rowspan="1">低谷</td>
128   - <td rowspan="1" style="min-width:104px">运营总公里(含空驶)</td>
129   - <td rowspan="1" style="min-width:104px">集调实际公里(含空驶)</td>
130   - <td rowspan="1" style="min-width:104px">集调营运公里(载客公里)</td>
131   - <td rowspan="1">途径轨交站</td>
132   - <td rowspan="1">途径三级医院</td>
133   - <td rowspan="1">唯一线</td>
134   - </tr>
135   - </thead>
136   - <tbody class="calcInvestigateMonth">
137   -
138   - </tbody>
139   - </table>
140   - </div>
141   - </div>
142   - </div>
143   -<!-- </div> -->
144   -<!-- </div> -->
145   -
146   -<script>
147   - $(function(){
148   - $('#export').attr('disabled', "true");
149   -
150   - // 关闭左侧栏
151   - if (!$('body').hasClass('page-sidebar-closed'))
152   - $('.menu-toggler.sidebar-toggler').click();
153   -
154   - var d = new Date();
155   - d.setTime(d.getTime() - 4*1000*60*60*24);
156   - var year = d.getFullYear();
157   - var month = d.getMonth() + 1;
158   - var day = d.getDate();
159   - if(month < 10)
160   - month = "0" + month;
161   - if(day < 10)
162   - day = "0" + day;
163   - var dateTime = year + "-" + month + "-" + day;
164   - var initMonth = year + "-" + month;
165   - $("#month").datetimepicker({
166   - format : 'YYYY-MM',
167   - locale : 'zh-cn',
168   - maxDate : initMonth
169   - });
170   - $("#month").val(initMonth);
171   -
172   -
173   - var fage=false;
174   - var obj = [];
175   - var xlList;
176   - $.get('/report/lineList',function(result){
177   - xlList=result;
178   - $.get('/user/companyData', function(result){
179   - obj = result;
180   - var options = '<option value="">全部公司</option>';
181   - for(var i = 0; i < obj.length; i++){
182   - options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
183   - }
184   -
185   - if(obj.length ==0){
186   - $("#gsbmDiv").css('display','none');
187   - }else if(obj.length ==1){
188   - $("#gsbmDiv").css('display','none');
189   - if(obj[0].children.length == 1 || obj[0].children.length ==0)
190   - $('#fgsbmDiv').css('display','none');
191   - }
192   - $('#gsbm').html(options);
193   - updateCompany();
194   - });
195   - })
196   - $("#gsbm").on("change",updateCompany);
197   - function updateCompany(){
198   - var company = $('#gsbm').val();
199   - var options = '<option value="">全部分公司</option>';
200   - for(var i = 0; i < obj.length; i++){
201   - if(obj[i].companyCode == company){
202   - var children = obj[i].children;
203   - for(var j = 0; j < children.length; j++){
204   - options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';
205   - }
206   - }
207   - }
208   - $('#fgsbm').html(options);
209   -// initXl();
210   - }
211   -
212   - var tempData = {};
213   - $.get('/report/lineList',function(xlList){
214   - var data = [];
215   - data.push({id: " ", text: "全部线路"});
216   - $.get('/user/companyData', function(result){
217   - for(var i = 0; i < result.length; i++){
218   - var companyCode = result[i].companyCode;
219   - var children = result[i].children;
220   - for(var j = 0; j < children.length; j++){
221   - var code = children[j].code;
222   - for(var k=0;k < xlList.length;k++ ){
223   - if(xlList[k]["fgsbm"]==code && xlList[k]["gsbm"]==companyCode){
224   - data.push({id: xlList[k]["xlbm"], text: xlList[k]["xlname"]});
225   - tempData[xlList[k]["xlbm"]] = companyCode+":"+code;
226   - }
227   - }
228   - }
229   - }
230   - initPinYinSelect2('#line',data,'');
231   -
232   - });
233   - });
234   -
235   - $("#line").on("change", function(){
236   - if($("#line").val() == " "){
237   - $("#gsbm").attr("disabled", false);
238   - $("#fgsbm").attr("disabled", false);
239   - } else {
240   - var temp = tempData[$("#line").val()].split(":");
241   - $("#gsbm").val(temp[0]);
242   - updateCompany();
243   - $("#fgsbm").val(temp[1]);
244   - $("#gsbm").attr("disabled", true);
245   - $("#fgsbm").attr("disabled", true);
246   - $("#nature").val(0);
247   - }
248   - });
249   -
250   -
251   - var line ="";
252   - var xlName ="";
253   - var nature ="";
254   - var month = "";
255   - var gsbm = "";
256   - var fgsbm = "";
257   - $("#query").on("click",function(){
258   - if($("#month").val() == null || $("#month").val().trim().length == 0){
259   - layer.msg("请选择月份!");
260   - return;
261   - }
262   -// $("#tjrbBody").height($(window).height()-100);
263   - line = $("#line").val();
264   - xlName = $("#select2-line-container").html();
265   - nature = $("#nature").val();
266   - month = $("#month").val();
267   - gsbm = $("#gsbm").val();
268   - fgsbm = $("#fgsbm").val();
269   - if(line=="请选择"){
270   - line="";
271   - }
272   - if(month==null || month ==""){
273   - layer.msg('请选择月份!');
274   - }else{
275   -// $("#tjrq").html(date+"至"+date2);
276   - var params = {};
277   - params['gsbm'] = gsbm;
278   - params['fgsbm'] = fgsbm;
279   - params['month'] = month;
280   - params['line'] = line;
281   - params['xlName'] = xlName;
282   - params['nature'] = nature;
283   - params['type'] = "query";
284   - $get('/calc_mix/calcInvestigateMonth',params,function(result){
285   - $("#currMonth").html("("+month+")");
286   - // 把数据填充到模版中
287   - var tbodyHtml = template('calcInvestigateMonth',{list:result});
288   - // 把渲染好的模版html文本追加到表格中
289   - $('#forms .calcInvestigateMonth').html(tbodyHtml);
290   -
291   - if(result.length == 0)
292   - $("#export").attr('disabled',"true");
293   - else
294   - $("#export").removeAttr("disabled");
295   - });
296   - }
297   -
298   - });
299   -// $("#tjrbBody").height($(window).height()-100);
300   - $("#export").on("click",function(){
301   - var params = {};
302   - params['gsbm'] = gsbm;
303   - params['fgsbm'] = fgsbm;
304   - params['month'] = month;
305   - params['line'] = line;
306   - params['xlName'] = xlName;
307   - params['nature'] = nature;
308   - params['type'] = "export";
309   - $get('/calc_mix/calcInvestigateMonth',params,function(result){
310   - window.open("/downloadFile/download?fileName=浦东公交线路调查表"+moment(month).format("YYYY-MM"));
311   - });
312   - });
313   -
314   - });
315   -</script>
316   -<script type="text/html" id="calcInvestigateMonth">
317   - {{each list as obj i}}
318   - <tr>
319   - <td>{{obj.xlmc}}</td>
320   - <td>{{obj.qzpcs}}</td>
321   - <td>{{obj.xlsx}}</td>
322   - <td>{{obj.xllx}}</td>
323   - <td>{{obj.xlcd}}</td>
324   - <td>{{obj.sfgp}}</td>
325   - <td>{{obj.sflpxl}}</td>
326   - <td>{{obj.smbsj}}</td>
327   - <td>{{if obj.ddfs == '常规'}}√{{/if}}</td>
328   - <td>{{if obj.ddfs == '多样化'}}√{{/if}}</td>
329   - <td>{{obj.gfjgsj}}</td>
330   - <td>{{obj.dgjgsj}}</td>
331   - <td>{{obj.sfxjgj}}</td>
332   - <td>{{obj.rjlc}}</td>
333   - <td>{{obj.rjbc}}</td>
334   - <td>{{obj.rjrc}}</td>
335   - <td>{{obj.rjdcrc}}</td>
336   - <td>{{obj.mbcrc}}</td>
337   - <td>{{obj.jhzgl}}</td>
338   - <td>{{obj.sjzgl}}</td>
339   - <td>{{obj.sjyylc}}</td>
340   - <td>{{obj.lclyl}}</td>
341   - <td>{{obj.bglrc}}</td>
342   - <td>{{obj.yrc}}</td>
343   - <td>{{obj.yys}}</td>
344   - <td>{{obj.pj}}</td>
345   - <td>{{obj.bglys}}</td>
346   - <td>{{obj.tjgjz}}</td>
347   - <td>{{obj.tjsjyy}}</td>
348   - <td>{{obj.wyx}}</td>
349   - <td>{{obj.xlzx}}</td>
350   - <td>{{obj.xlzd}}</td>
351   - <td>{{obj.bz}}</td>
352   - </tr>
353   - {{/each}}
354   - {{if list.length == 0}}
355   - <tr>
356   - <td colspan="34"><h6 class="muted">没有找到相关数据</h6></td>
357   - </tr>
358   - {{/if}}
  1 +<style type="text/css">
  2 + .table-bordered {
  3 + border: 1px solid; }
  4 + .table-bordered > thead > tr > th,
  5 + .table-bordered > thead > tr > td,
  6 + .table-bordered > tbody > tr > th,
  7 + .table-bordered > tbody > tr > td,
  8 + .table-bordered > tfoot > tr > th,
  9 + .table-bordered > tfoot > tr > td {
  10 + border: 1px solid; }
  11 + .table-bordered > thead > tr > th,
  12 + .table-bordered > thead > tr > td {
  13 + border-bottom-width: 2px; }
  14 +
  15 + .table > tbody + tbody {
  16 + border-top: 1px solid; }
  17 +
  18 + #forms > thead > tr> td >span{
  19 + width: 5px;
  20 + word-wrap: break-word;
  21 + letter-spacing: 20px;
  22 + }
  23 +
  24 + #forms > thead > tr> td >label{
  25 + word-break: keep-all;white-space:nowrap;
  26 + }
  27 +
  28 + .table > thead > tr > td{
  29 + min-width: 80px;
  30 + text-align:center;
  31 + }
  32 + .table > tbody > tr > td{
  33 + text-align:center;
  34 + }
  35 +</style>
  36 +
  37 +<div class="page-head">
  38 + <div class="page-title">
  39 + <h1>浦东公交线路调查表</h1>
  40 + </div>
  41 +</div>
  42 +
  43 +<!-- <div class="row"> -->
  44 + <div class="col-md-12 portlet light porttlet-fit bordered" style="height:calc(100% - 56px)">
  45 +<!-- <div> -->
  46 + <div class="portlet-title">
  47 + <form class="form-inline" action="">
  48 + <div style="display: inline-block;margin-left: 15px;" id="gsbmDiv">
  49 + <span class="item-label" style="width: 80px;">公司: </span>
  50 + <select class="form-control" name="company" id="gsbm" style="width: 180px;"></select>
  51 + </div>
  52 + <div style="display: inline-block; margin-left: 9px;" id="fgsbmDiv">
  53 + <span class="item-label" style="width: 80px;">分公司: </span>
  54 + <select class="form-control" name="subCompany" id="fgsbm" style="width: 180px;"></select>
  55 + </div>
  56 + <div style="margin-top: 2px"></div>
  57 + <div style="display: inline-block;margin-left: 15px;">
  58 + <span class="item-label" style="width: 80px;">月份: </span>
  59 + <input class="form-control" type="text" id="month" style="width: 180px;"/>
  60 + </div>
  61 + <div style="display: inline-block; margin-left: 23px;">
  62 + <span class="item-label" style="width: 80px;">线路: </span>
  63 + <select class="form-control" name="line" id="line" style="width: 180px;"></select>
  64 + </div>
  65 + <div style="display: inline-block;">
  66 + <span class="item-label" style="width: 80px;">线路性质: </span>
  67 + <select
  68 + class="form-control" name="nature" id="nature" style="width: 180px;">
  69 + <option value="0" selected="selected">全部线路</option>
  70 + <option value="1">营运线路</option>
  71 + <option value="2">非营运线路</option>
  72 + </select>
  73 + </div>
  74 + <div class="form-group">
  75 + <input class="btn btn-default" type="button" id="query" value="查询"/>
  76 + <input class="btn btn-default" type="button" id="export" value="导出"/>
  77 + </div>
  78 + </form>
  79 + </div>
  80 + <label><b id="currMonth"></b></label>
  81 + <div class="portlet-body" id="tjrbBody" style="overflow:auto;height: calc(100% - 80px)">
  82 + <div class="table-container" style="margin-top: 10px;min-width: 906px">
  83 + <table class="table table-bordered table-hover table-checkable" id="forms">
  84 + <thead>
  85 + <tr>
  86 + <th colspan="35"><label id="tjrq"></label>浦东公交线路调查表</th>
  87 + </tr>
  88 + <tr>
  89 + <td rowspan="2">序号</td>
  90 + <td rowspan="2" style="min-width:90px">线路</td>
  91 + <td rowspan="2" style="min-width:90px">权证配车数</td>
  92 + <td rowspan="2">线路属性</td>
  93 + <td rowspan="2">线路类型</td>
  94 + <td rowspan="2">线路长度</td>
  95 + <td rowspan="2">是否挂牌线路</td>
  96 + <td rowspan="2">是否冷僻线路</td>
  97 + <td rowspan="2" style="min-width:175px">首末班时间</td>
  98 +
  99 + <td colspan="2">调度方式</td>
  100 + <td colspan="2">间隔时间</td>
  101 +
  102 + <td rowspan="2">是否衔接轨交末班</td>
  103 + <td rowspan="2">日均里程</td>
  104 + <td rowspan="2">日均班次</td>
  105 + <td rowspan="2">日均人次</td>
  106 + <td rowspan="2">日均单车人次</td>
  107 + <td rowspan="2">每班次单车人次</td>
  108 +
  109 + <td colspan="3">里程</td>
  110 +
  111 + <td rowspan="2" style="min-width:104px">里程利用率%</td>
  112 + <td rowspan="2" style="min-width:104px">百公里人次(载客公里)</td>
  113 + <td rowspan="2">月人次(票务)</td>
  114 + <td rowspan="2">月营收(票务)</td>
  115 + <td rowspan="2">票价(元)</td>
  116 + <td rowspan="2" style="min-width:104px">百公里营收(元)</td>
  117 +
  118 + <td colspan="3">线路特征</td>
  119 +
  120 + <td rowspan="2" style="min-width:400px">线路走向</td>
  121 + <td rowspan="2" style="min-width:600px">线路站点</td>
  122 + <td rowspan="2" style="min-width:160px">备注</td>
  123 + </tr>
  124 + <tr>
  125 + <td rowspan="1" style="min-width:60px">常规</td>
  126 + <td rowspan="1" style="min-width:60px">多样化</td>
  127 + <td rowspan="1">高峰</td>
  128 + <td rowspan="1">低谷</td>
  129 + <td rowspan="1" style="min-width:104px">运营总公里(含空驶)</td>
  130 + <td rowspan="1" style="min-width:104px">集调实际公里(含空驶)</td>
  131 + <td rowspan="1" style="min-width:104px">集调营运公里(载客公里)</td>
  132 + <td rowspan="1">途径轨交站</td>
  133 + <td rowspan="1">途径三级医院</td>
  134 + <td rowspan="1">唯一线</td>
  135 + </tr>
  136 + </thead>
  137 + <tbody class="calcInvestigateMonth">
  138 +
  139 + </tbody>
  140 + </table>
  141 + </div>
  142 + </div>
  143 + </div>
  144 +<!-- </div> -->
  145 +<!-- </div> -->
  146 +
  147 +<script>
  148 + $(function(){
  149 + $('#export').attr('disabled', "true");
  150 +
  151 + // 关闭左侧栏
  152 + if (!$('body').hasClass('page-sidebar-closed'))
  153 + $('.menu-toggler.sidebar-toggler').click();
  154 +
  155 + var d = new Date();
  156 + d.setTime(d.getTime() - 4*1000*60*60*24);
  157 + var year = d.getFullYear();
  158 + var month = d.getMonth() + 1;
  159 + var day = d.getDate();
  160 + if(month < 10)
  161 + month = "0" + month;
  162 + if(day < 10)
  163 + day = "0" + day;
  164 + var dateTime = year + "-" + month + "-" + day;
  165 + var initMonth = year + "-" + month;
  166 + $("#month").datetimepicker({
  167 + format : 'YYYY-MM',
  168 + locale : 'zh-cn',
  169 + maxDate : initMonth
  170 + });
  171 + $("#month").val(initMonth);
  172 +
  173 +
  174 + var fage=false;
  175 + var obj = [];
  176 + var xlList;
  177 + $.get('/report/lineList',function(result){
  178 + xlList=result;
  179 + $.get('/user/companyData', function(result){
  180 + obj = result;
  181 + var options = '<option value="">全部公司</option>';
  182 + for(var i = 0; i < obj.length; i++){
  183 + options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
  184 + }
  185 +
  186 + if(obj.length ==0){
  187 + $("#gsbmDiv").css('display','none');
  188 + }else if(obj.length ==1){
  189 + $("#gsbmDiv").css('display','none');
  190 + if(obj[0].children.length == 1 || obj[0].children.length ==0)
  191 + $('#fgsbmDiv').css('display','none');
  192 + }
  193 + $('#gsbm').html(options);
  194 + updateCompany();
  195 + });
  196 + })
  197 + $("#gsbm").on("change",updateCompany);
  198 + function updateCompany(){
  199 + var company = $('#gsbm').val();
  200 + var options = '<option value="">全部分公司</option>';
  201 + for(var i = 0; i < obj.length; i++){
  202 + if(obj[i].companyCode == company){
  203 + var children = obj[i].children;
  204 + for(var j = 0; j < children.length; j++){
  205 + options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';
  206 + }
  207 + }
  208 + }
  209 + $('#fgsbm').html(options);
  210 +// initXl();
  211 + }
  212 +
  213 + var tempData = {};
  214 + $.get('/report/lineList',function(xlList){
  215 + var data = [];
  216 + data.push({id: " ", text: "全部线路"});
  217 + $.get('/user/companyData', function(result){
  218 + for(var i = 0; i < result.length; i++){
  219 + var companyCode = result[i].companyCode;
  220 + var children = result[i].children;
  221 + for(var j = 0; j < children.length; j++){
  222 + var code = children[j].code;
  223 + for(var k=0;k < xlList.length;k++ ){
  224 + if(xlList[k]["fgsbm"]==code && xlList[k]["gsbm"]==companyCode){
  225 + data.push({id: xlList[k]["xlbm"], text: xlList[k]["xlname"]});
  226 + tempData[xlList[k]["xlbm"]] = companyCode+":"+code;
  227 + }
  228 + }
  229 + }
  230 + }
  231 + initPinYinSelect2('#line',data,'');
  232 +
  233 + });
  234 + });
  235 +
  236 + $("#line").on("change", function(){
  237 + if($("#line").val() == " "){
  238 + $("#gsbm").attr("disabled", false);
  239 + $("#fgsbm").attr("disabled", false);
  240 + } else {
  241 + var temp = tempData[$("#line").val()].split(":");
  242 + $("#gsbm").val(temp[0]);
  243 + updateCompany();
  244 + $("#fgsbm").val(temp[1]);
  245 + $("#gsbm").attr("disabled", true);
  246 + $("#fgsbm").attr("disabled", true);
  247 + $("#nature").val(0);
  248 + }
  249 + });
  250 +
  251 +
  252 + var line ="";
  253 + var xlName ="";
  254 + var nature ="";
  255 + var month = "";
  256 + var gsbm = "";
  257 + var fgsbm = "";
  258 + $("#query").on("click",function(){
  259 + if($("#month").val() == null || $("#month").val().trim().length == 0){
  260 + layer.msg("请选择月份!");
  261 + return;
  262 + }
  263 +// $("#tjrbBody").height($(window).height()-100);
  264 + line = $("#line").val();
  265 + xlName = $("#select2-line-container").html();
  266 + nature = $("#nature").val();
  267 + month = $("#month").val();
  268 + gsbm = $("#gsbm").val();
  269 + fgsbm = $("#fgsbm").val();
  270 + if(line=="请选择"){
  271 + line="";
  272 + }
  273 + if(month==null || month ==""){
  274 + layer.msg('请选择月份!');
  275 + }else{
  276 +// $("#tjrq").html(date+"至"+date2);
  277 + var params = {};
  278 + params['gsbm'] = gsbm;
  279 + params['fgsbm'] = fgsbm;
  280 + params['month'] = month;
  281 + params['line'] = line;
  282 + params['xlName'] = xlName;
  283 + params['nature'] = nature;
  284 + params['type'] = "query";
  285 + $get('/calc_mix/calcInvestigateMonth',params,function(result){
  286 + $("#currMonth").html("("+month+")");
  287 + // 把数据填充到模版中
  288 + var tbodyHtml = template('calcInvestigateMonth',{list:result});
  289 + // 把渲染好的模版html文本追加到表格中
  290 + $('#forms .calcInvestigateMonth').html(tbodyHtml);
  291 +
  292 + if(result.length == 0)
  293 + $("#export").attr('disabled',"true");
  294 + else
  295 + $("#export").removeAttr("disabled");
  296 + });
  297 + }
  298 +
  299 + });
  300 +// $("#tjrbBody").height($(window).height()-100);
  301 + $("#export").on("click",function(){
  302 + var params = {};
  303 + params['gsbm'] = gsbm;
  304 + params['fgsbm'] = fgsbm;
  305 + params['month'] = month;
  306 + params['line'] = line;
  307 + params['xlName'] = xlName;
  308 + params['nature'] = nature;
  309 + params['type'] = "export";
  310 + $get('/calc_mix/calcInvestigateMonth',params,function(result){
  311 + window.open("/downloadFile/download?fileName=浦东公交线路调查表"+moment(month).format("YYYY-MM"));
  312 + });
  313 + });
  314 +
  315 + });
  316 +</script>
  317 +<script type="text/html" id="calcInvestigateMonth">
  318 + {{each list as obj i}}
  319 + <tr>
  320 + <td>{{i + 1}}</td>
  321 + <td>{{obj.xlmc}}</td>
  322 + <td>{{obj.qzpcs}}</td>
  323 + <td>{{obj.xlsx}}</td>
  324 + <td>{{obj.xllx}}</td>
  325 + <td>{{obj.xlcd}}</td>
  326 + <td>{{obj.sfgp}}</td>
  327 + <td>{{obj.sflpxl}}</td>
  328 + <td>{{obj.smbsj}}</td>
  329 + <td>{{if obj.ddfs == '常规'}}√{{/if}}</td>
  330 + <td>{{if obj.ddfs == '多样化'}}√{{/if}}</td>
  331 + <td>{{obj.gfjgsj}}</td>
  332 + <td>{{obj.dgjgsj}}</td>
  333 + <td>{{obj.sfxjgj}}</td>
  334 + <td>{{obj.rjlc}}</td>
  335 + <td>{{obj.rjbc}}</td>
  336 + <td>{{obj.rjrc}}</td>
  337 + <td>{{obj.rjdcrc}}</td>
  338 + <td>{{obj.mbcrc}}</td>
  339 + <td>{{obj.jhzgl}}</td>
  340 + <td>{{obj.sjzgl}}</td>
  341 + <td>{{obj.sjyylc}}</td>
  342 + <td>{{obj.lclyl}}</td>
  343 + <td>{{obj.bglrc}}</td>
  344 + <td>{{obj.yrc}}</td>
  345 + <td>{{obj.yys}}</td>
  346 + <td>{{obj.pj}}</td>
  347 + <td>{{obj.bglys}}</td>
  348 + <td>{{obj.tjgjz}}</td>
  349 + <td>{{obj.tjsjyy}}</td>
  350 + <td>{{obj.wyx}}</td>
  351 + <td>{{obj.xlzx}}</td>
  352 + <td>{{obj.xlzd}}</td>
  353 + <td>{{obj.bz}}</td>
  354 + </tr>
  355 + {{/each}}
  356 + {{if list.length == 0}}
  357 + <tr>
  358 + <td colspan="34"><h6 class="muted">没有找到相关数据</h6></td>
  359 + </tr>
  360 + {{/if}}
359 361 </script>
360 362 \ No newline at end of file
... ...
src/main/resources/static/pages/forms/mould/calcInvestigateMonth.xls
No preview for this file type
src/main/resources/static/real_control_v2/mapmonitor/fragments/map_infowindow.html
1   -<div>
2   - <script id="map-win-gps-detail-temp" type="text/html">
3   - <div class="gps_info_win" style="width: 200px;">
4   - <h4>{{nbbm}}</h4>
5   - <h5>
6   - {{lineName}}
7   - </h5>
8   - <h5>
9   - {{if stationName!=null}}
10   - {{stationName}} 站
11   - {{else}}
12   - 未知站点
13   - {{/if}}
14   - </h5>
15   - <p>设备状态:
16   - {{if valid==1}}
17   - invalid(-1
18   - {{else if abnormalStatus=='outBounds'}}
19   - 越界
20   - {{else if abnormalStatus=='overspeed'}}
21   - 超速
22   - {{else if abnormalStatus=='gps-offline'}}
23   - GPS掉线
24   - {{else if abnormalStatus=='offline'}}
25   - 离线
26   - {{else}}
27   - .
28   - {{/if}}
29   - </p>
30   - <p>设备号:{{deviceId}}</p>
31   - <p>速度:{{speed>99?'..':speed}}</p>
32   - <p>角度:{{direction}}</p>
33   - <p>经度:{{lon}}</p>
34   - <p>纬度:{{lat}}</p>
35   -
36   - <p class="date-str">{{dateStr}}</p>
37   - <hr>
38   - {{if expectStopTime!=null}}
39   - <a href="javascript:;" style="color: #07D;margin-right: 7px;">预计 {{expectStopTime}} 分钟到达终点</a>
40   - {{/if}}
41   - <a href="javascript:;" style="float: left;" onclick="javascript:window.open('http://211.95.61.66:9020/transport_server/dvr_monitor2.html?userid=4&zbh={{nbbm}}');">DVR</a>
42   - <a href="W9:1@139.196.29.203@?method=call&1111:{{dvrcode}}" style="margin-left: 50px;" >拨打电话</a>
43   - <a href="javascript:;" style="float: right;" onclick="javascript:gb_map_play_back.initParams('{{deviceId}}', '{{nbbm}}');">轨迹回放</a>
44   - </div>
45   - </script>
46   -
47   - <script id="map-win-station-detail-temp" type="text/html">
48   - <div class="gps_info_win">
49   - <h4>{{stationName}}</h4>
50   - <p>站点编码: {{stationCode}}</p>
51   - <p>站点类型:
52   - {{if stationMark=='B'}}
53   - 起点站
54   - {{else if stationMark=='E'}}
55   - 终点站
56   - {{else if stationMark=='Z'}}
57   - 中途站
58   - {{/if}}
59   - </p>
60   - <p>
61   - 经度: {{lon}}
62   - </p>
63   - <p>纬度: {{lat}}</p>
64   - {{if distances > 0}}
65   - <p>到站距离: {{distances}} 公里</p>
66   - {{/if}}
67   - <p>
68   - 电子围栏类型:
69   - {{if shapesType=='r'}}
70   - 圆形
71   - {{else if shapesType=='d'}}
72   - 多边形
73   - {{/if}}
74   - </p>
75   - <p>
76   - {{if shapesType=='r'}}
77   - 半径:{{radius}}
78   - {{else if shapesType=='d'}}
79   - 面积:{{_polygonArea}} 平方米
80   - {{/if}}
81   - </p>
82   - </div>
83   - </script>
84   -
85   - <script id="map-win-carpark-detail-temp" type="text/html">
86   - <div class="gps_info_win">
87   - <h4>{{parkName}}</h4>
88   - <p>停车场编码: {{parkCode}}</p>
89   - <p>面积:{{area}}</p>
90   - <p>
91   - {{if shapesType=='r'}}
92   - 电子围栏半径:{{radius}}
93   - {{else if shapesType=='d'}}
94   - 电子围栏面积:{{_polygonArea}} 平方米
95   - {{/if}}
96   - </p>
97   - </div>
98   - </script>
  1 +<div>
  2 + <script id="map-win-gps-detail-temp" type="text/html">
  3 + <div class="gps_info_win" style="width: 200px;">
  4 + <h4>{{nbbm}}</h4>
  5 + <h5>
  6 + {{lineName}}
  7 + </h5>
  8 + <h5>
  9 + {{if stationName!=null}}
  10 + {{stationName}} 站
  11 + {{else}}
  12 + 未知站点
  13 + {{/if}}
  14 + </h5>
  15 + <p>设备状态:
  16 + {{if valid==1}}
  17 + invalid(-1
  18 + {{else if abnormalStatus=='outBounds'}}
  19 + 越界
  20 + {{else if abnormalStatus=='overspeed'}}
  21 + 超速
  22 + {{else if abnormalStatus=='gps-offline'}}
  23 + GPS掉线
  24 + {{else if abnormalStatus=='offline'}}
  25 + 离线
  26 + {{else}}
  27 + .
  28 + {{/if}}
  29 + </p>
  30 + <p>设备号:{{deviceId}}</p>
  31 + <p>速度:{{speed>99?'..':speed}}</p>
  32 + <p>角度:{{direction}}</p>
  33 + <p>经度:{{lon}}</p>
  34 + <p>纬度:{{lat}}</p>
  35 +
  36 + <p class="date-str">{{dateStr}}</p>
  37 + <hr>
  38 + {{if expectStopTime!=null}}
  39 + <a href="javascript:;" style="color: #07D;margin-right: 7px;">预计 {{expectStopTime}} 分钟到达终点</a>
  40 + {{/if}}
  41 + <a href="javascript:;" style="float: left;" onclick="javascript:window.open('http://211.95.61.66:9020/transport_server/dvr_monitor2.html?userid=4&zbh={{nbbm}}');">DVR</a>
  42 + {{if dvrcode != null}}<a href="W9:1@139.196.29.203@?method=call&1111:{{dvrcode}}" style="margin-left: 50px;" >拨打电话</a>{{/if}}
  43 + <a href="javascript:;" style="float: right;" onclick="javascript:gb_map_play_back.initParams('{{deviceId}}', '{{nbbm}}');">轨迹回放</a>
  44 + </div>
  45 + </script>
  46 +
  47 + <script id="map-win-station-detail-temp" type="text/html">
  48 + <div class="gps_info_win">
  49 + <h4>{{stationName}}</h4>
  50 + <p>站点编码: {{stationCode}}</p>
  51 + <p>站点类型:
  52 + {{if stationMark=='B'}}
  53 + 起点站
  54 + {{else if stationMark=='E'}}
  55 + 终点站
  56 + {{else if stationMark=='Z'}}
  57 + 中途站
  58 + {{/if}}
  59 + </p>
  60 + <p>
  61 + 经度: {{lon}}
  62 + </p>
  63 + <p>纬度: {{lat}}</p>
  64 + {{if distances > 0}}
  65 + <p>到站距离: {{distances}} 公里</p>
  66 + {{/if}}
  67 + <p>
  68 + 电子围栏类型:
  69 + {{if shapesType=='r'}}
  70 + 圆形
  71 + {{else if shapesType=='d'}}
  72 + 多边形
  73 + {{/if}}
  74 + </p>
  75 + <p>
  76 + {{if shapesType=='r'}}
  77 + 半径:{{radius}}
  78 + {{else if shapesType=='d'}}
  79 + 面积:{{_polygonArea}} 平方米
  80 + {{/if}}
  81 + </p>
  82 + </div>
  83 + </script>
  84 +
  85 + <script id="map-win-carpark-detail-temp" type="text/html">
  86 + <div class="gps_info_win">
  87 + <h4>{{parkName}}</h4>
  88 + <p>停车场编码: {{parkCode}}</p>
  89 + <p>面积:{{area}}</p>
  90 + <p>
  91 + {{if shapesType=='r'}}
  92 + 电子围栏半径:{{radius}}
  93 + {{else if shapesType=='d'}}
  94 + 电子围栏面积:{{_polygonArea}} 平方米
  95 + {{/if}}
  96 + </p>
  97 + </div>
  98 + </script>
99 99 </div>
100 100 \ No newline at end of file
... ...