Commit ba641265ef49f4ec5749fd2635147d145ccf86e0

Authored by 王通
1 parent 7ad9e686

1.线路调查表按线路名排序、第一列加序号、数字数据导出时保持数字格式

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/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 </script> 361 </script>
360 \ No newline at end of file 362 \ No newline at end of file
src/main/resources/static/pages/forms/mould/calcInvestigateMonth.xls
No preview for this file type