html复杂标题+表格背景色

淡淡的烟草味﹌ 2022-08-29 10:54 233阅读 0赞

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTcyMjkyOA_size_16_color_FFFFFF_t_70

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">




多表头表格


2021-07-30—【全基地合计】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
21210
13275
7936
10116
3484
6632
-11094
-9791
-1304
海信洗衣机
4572
2168
2403
1072
458
614
-3500
-1710
-1789
容声洗衣机
604
296
308
4
4
0
-600
-292
-308
容声冰箱
9236
6482
2753
6916
2610
4306
-2320
-3872
1553
海信冷柜
807
338
469
80
0
80
-727
-338
-389
容声酒柜
0
0
0
0
0
0
0
0
0
容声冷柜
1803
562
1241
352
92
260
-1451
-470
-981
海信冰箱
4189
3428
761
1692
320
1372
-2497
-3108
611
2021-07-30—【冰箱扬州】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
6101
4319
1782
4708
1668
3040
-1393
-2651
1258
容声冷柜
68
0
68
0
0
0
-68
0
-68
容声冰箱
4319
2918
1401
3835
1518
2317
-484
-1400
916
海信冷柜
42
0
42
0
0
0
-42
0
-42
海信冰箱
1666
1401
265
873
150
723
-793
-1251
458
海信洗衣机
0
0
0
0
0
0
0
0
0
容声酒柜
0
0
0
0
0
0
0
0
0
容声洗衣机
5
0
5
0
0
0
-5
0
-5
2021-07-30—【冰箱中山东菱OEM】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
36
0
36
0
0
0
-36
0
-36
海信洗衣机
36
0
36
0
0
0
-36
0
-36
2021-07-30—【冰箱成都】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
2085
1524
561
661
400
261
-1424
-1124
-300
容声冰箱
881
458
423
491
230
261
-390
-228
-162
海信冰箱
1204
1066
138
170
170
0
-1034
-896
-138
2021-07-30—【冰箱顺德】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
1943
1377
567
1246
632
614
-697
-745
47
容声冰箱
1262
1017
245
1216
632
584
-46
-385
339
海信冰箱
77
58
19
10
0
10
-67
-58
-9
容声冷柜
561
301
259
20
0
20
-541
-301
-239
海信冷柜
44
0
44
0
0
0
-44
0
-44
2021-07-30—【冰箱宿迁双鹿】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
1
0
1
0
0
0
-1
0
-1
容声冰箱
1
0
1
0
0
0
-1
0
-1
海信冰箱
0
0
0
0
0
0
0
0
0
2021-07-30—【冰箱宁波申丝】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
98
30
68
120
0
120
22
-30
52
海信洗衣机
87
30
57
120
0
120
33
-30
63
容声洗衣机
11
0
11
0
0
0
-11
0
-11
2021-07-30—【冰箱平度】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
10939
6024
4915
3381
784
2597
-7558
-5240
-2318
海信冷柜
721
338
383
80
0
80
-641
-338
-303
容声冰箱
2769
2089
680
1374
230
1144
-1395
-1859
464
容声冷柜
1175
261
914
332
92
240
-843
-169
-674
海信洗衣机
4449
2138
2311
952
458
494
-3497
-1680
-1817
海信冰箱
1238
903
335
639
0
639
-599
-903
304
容声洗衣机
588
296
292
4
4
0
-584
-292
-292
2021-07-30—【冰箱盐城】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
4
0
4
0
0
0
-4
0
-4
容声冰箱
4
0
4
0
0
0
-4
0
-4
2021-07-30—【冰箱南京】-基地下单情况
基地 合计 下单目标 下单实际 下单差异
线上
线下
合计
线上
线下
合计
线上
线下
合计
4
0
4
0
0
0
-4
0
-4
容声冰箱
0
0
0
0
0
0
0
0
0
海信冰箱
4
0
4
0
0
0
-4
0
-4



  1. package com.hisense.iam800;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.math.BigDecimal;
  6. import java.util.ArrayList;
  7. import java.util.Date;
  8. import java.util.HashMap;
  9. import java.util.HashSet;
  10. import java.util.LinkedHashSet;
  11. import java.util.List;
  12. import java.util.Map;
  13. import java.util.Set;
  14. import org.apache.commons.lang3.StringEscapeUtils;
  15. import org.apache.log4j.Logger;
  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.ss.usermodel.FillPatternType;
  22. import org.apache.poi.ss.usermodel.IndexedColors;
  23. import org.apache.poi.ss.usermodel.Workbook;
  24. import com.alibaba.fastjson.JSONArray;
  25. import com.alibaba.fastjson.JSONObject;
  26. import com.ibm.wsdl.util.StringUtils;
  27. import cn.afterturn.easypoi.excel.ExcelExportUtil;
  28. import cn.afterturn.easypoi.excel.entity.ExportParams;
  29. import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
  30. /*各个基地表格汇总*/
  31. public class BaseTableUtils {
  32. private static Logger logger = Logger.getLogger(TableUtils.class);
  33. private static String styleCss=" style='table-layout: fixed;border:1px solid #cad9ea;padding:0 1em 0;width=100%;'";
  34. private static String tdTitleCss=" style='text-align:center;vertical-align:middle;background:#E3E3A4'";
  35. private static String tdTitleCss2=" style='text-align:center;vertical-align:middle;background:#FF9900'";
  36. private static String tdCss=" style='text-align:center;vertical-align:middle;'";
  37. // 时间处理类
  38. static DataUtils dataUtils = new DataUtils();
  39. public static void main(String[] args) {
  40. List<BaseDto> baseList = getBaseApiData();
  41. Map<String, Object> map=exportToKV(baseList);
  42. Set<String> line=(LinkedHashSet<String>) map.get("line");
  43. String allTable="<div style='width:100%; height:2800px; overflow:scroll;'>";
  44. for(String n:line) {
  45. allTable+=map.get(n);
  46. logger.info("line>>>>>"+n+">>>allTable>>>>>>>>>>"+allTable);
  47. }
  48. allTable+="<div>";
  49. logger.info(">>>allTable>>>>>>>>>>"+allTable);
  50. // for(String n:line) {
  51. // logger.info("line>>>>>"+n);
  52. // }
  53. //String content=(String) map.get("全基地合计");
  54. //logger.info("content>>>>>>>>>>"+content);
  55. }
  56. public static String getAllContent(List<BaseDto> baseList) {
  57. Map<String, Object> map=exportToKV(baseList);
  58. Set<String> line=(LinkedHashSet<String>) map.get("line");
  59. String allTable="<div style='width:100%; height:2800px; overflow:scroll;'>";
  60. for(String n:line) {
  61. allTable+=map.get(n);
  62. logger.info("line>>>>>"+n+">>>allTable>>>>>>>>>>"+allTable);
  63. }
  64. allTable+="<div>";
  65. logger.info(">>>allTable>>>>>>>>>>"+allTable);
  66. return allTable;
  67. }
  68. public static Map<String, Object> exportToKV(List<BaseDto> base) {
  69. //产品基地类型==表格内容
  70. Map<String,Object> fileMap=new HashMap<>();
  71. //基础分类数据
  72. Set<String> lineBase=new LinkedHashSet(); //产品线-基地
  73. lineBase.add("全基地合计");
  74. for(BaseDto b:base) {
  75. if(b.getProduct_line().equals("冰箱")) {
  76. lineBase.add(b.getProduct_line()+b.getStorage_base());
  77. } else {
  78. continue;
  79. }
  80. }
  81. lineBase.remove("冰箱全基地合计");
  82. //k-V 产品线基地:汇总集合
  83. Map<String,Object> typeList=new HashMap<>();
  84. for(String type:lineBase) {
  85. //产品线基地
  86. List<BaseDto> list=new ArrayList<>();
  87. BaseDto total=new BaseDto();
  88. for(BaseDto b:base) {
  89. if(org.apache.commons.lang3.StringUtils.isNotEmpty(b.getStorage_base())) {
  90. //全品类
  91. if(type.equals("全基地合计")&&type.equals(b.getStorage_base())&&b.getProduct_line().equals("冰箱")) {
  92. //全品类---各个数据集合
  93. if(!b.getGoods_type_name().contains("合计")) {
  94. list.add(b);
  95. }
  96. //全品类---合计
  97. if(b.getGoods_type_name().equals("合计")){
  98. logger.info(">>>>111>>>>"+b.getGoods_type_name()+type);
  99. total=new BaseDto();
  100. total=b;
  101. //合计对象
  102. typeList.put("全品类合计", total);
  103. }
  104. }else if(!type.equals("全基地合计")&&b.getProduct_line().equals("冰箱")){
  105. //产品线基地---各个数据集合
  106. String str1=b.getProduct_line()+b.getStorage_base();
  107. if(type.equals(str1)&&(!b.getGoods_type_name().contains("合计"))) {
  108. list.add(b);
  109. }
  110. //产品线基地---合计
  111. if(b.getGoods_type_name().equals("合计")){
  112. total=b;
  113. //合计对象
  114. typeList.put("合计"+b.getProduct_line()+b.getStorage_base(), total);
  115. }
  116. }
  117. }else {
  118. continue;
  119. }
  120. }
  121. typeList.put(type, list);
  122. }
  123. fileMap.put("line", lineBase);
  124. //产品基地类型==表格内容封装
  125. for (String t : lineBase) {
  126. // 全部数据汇总
  127. List<BaseDto> list = (List<BaseDto>) typeList.get(t);
  128. BaseDto total=new BaseDto();
  129. if(t.contains("冰箱")) {
  130. total= (BaseDto) typeList.get("合计"+t);
  131. }else if(t.contains("空调")){
  132. total= (BaseDto) typeList.get("合计"+t);
  133. } else if(t.contains("全基地合计")){
  134. total= (BaseDto) typeList.get("全品类合计");
  135. }
  136. List<String> small=new ArrayList<>();
  137. small.add("下单实际");
  138. small.add("下单差异");
  139. // 标题
  140. String day = dataUtils.getYesterday(new Date(), 0);
  141. String title = day + "--【" + t + "】-基地下单情况";
  142. String allstr = //"<div style='width:1000px; height:280px; overflow:scroll;'>"+
  143. "<table cellpadding='1' cellspacing='1' border='1'> "
  144. + "<caption align='top'>" + title + "</caption>";
  145. // 动态标题
  146. String t1 = getTitle(small);
  147. // 动态标题数据
  148. String t2 = getTitleDate(list,total,small);
  149. allstr+=t1;
  150. allstr+=t2;
  151. allstr += "</table>";
  152. //+ "</div>";
  153. logger.info("【table-content】---"+allstr);
  154. // 数据封装
  155. fileMap.put(t, allstr);
  156. }
  157. return fileMap;
  158. }
  159. // 【动态标题】
  160. private static String getTitle(List<String> small) {
  161. String title="<tr "+styleCss+">" +
  162. " <td"+tdTitleCss+" rowspan='2'>基地 </td>" +
  163. " <td"+tdTitleCss+" rowspan='2'>合计 </td>" +
  164. " <td"+tdTitleCss+" colspan='2'>下单目标</td>" ;
  165. for(String sm:small) {
  166. title+=" <td"+tdTitleCss+" colspan='3'>"+sm+"</td>" ;
  167. }
  168. title+="</tr> "
  169. + "<tr "+styleCss+">" +
  170. " <td"+tdTitleCss2+"><div style='width:80px'>线上</div></td>" +
  171. " <td"+tdTitleCss2+"><div style='width:80px'>线下</div></td>" ;
  172. for(String sm:small) {
  173. title+= "<td"+tdTitleCss2+"><div style='width:80px'>合计</div></td>"
  174. + "<td"+tdTitleCss2+"><div style='width:80px'>线上</div></td>"
  175. + "<td"+tdTitleCss2+"><div style='width:80px'>线下</div></td>" ;
  176. }
  177. title+= "</tr> ";
  178. return title;
  179. }
  180. // 【动态数据】
  181. private static String getTitleDate(List<BaseDto> list,BaseDto total, List<String> small) {
  182. String titleData = "";
  183. //合计行
  184. titleData+="<tr "+styleCss+">" +
  185. " <td"+tdCss+"><div style='width:80px'>合计</div></td>" +
  186. " <td"+tdCss+"><div style='width:80px'>"+total.getObjective_all()+"</div></td>" +
  187. " <td"+tdCss+"><div style='width:80px'>"+total.getOn_line_up_esqty()+"</div></td>" +
  188. " <td"+tdCss+"><div style='width:80px'>"+total.getOn_line_down_esqty()+"</div></td>" ;
  189. //实际下单
  190. titleData+=
  191. "<td"+tdCss+"><div style='width:80px'>"+total.getReality_all()+"</div></td>"
  192. + "<td"+tdCss+"><div style='width:80px'>"+total.getOn_line_up_reqty()+"</div></td>"
  193. + "<td"+tdCss+"><div style='width:80px'>"+total.getOn_line_down_reqty()+"</div></td>" ;
  194. //差异下单
  195. titleData+=
  196. "<td"+tdCss+"><div style='width:80px'>"+total.getDifference_all()+"</div></td>"
  197. + "<td"+tdCss+"><div style='width:80px'>"+total.getOn_line_up_difference()+"</div></td>"
  198. + "<td"+tdCss+"><div style='width:80px'>"+total.getOn_line_down_difference()+"</div></td>" ;
  199. titleData+= "</tr> ";
  200. //基地行
  201. for(BaseDto ba:list) {
  202. titleData+="<tr "+styleCss+">" +
  203. " <td"+tdCss+"><div style='width:80px'>"+ba.getGoods_type_name()+"</div></td>"+
  204. " <td"+tdCss+"><div style='width:80px'>"+ba.getObjective_all()+"</div></td>" +
  205. " <td"+tdCss+"><div style='width:80px'>"+ba.getOn_line_up_esqty()+"</div></td>" +
  206. " <td"+tdCss+"><div style='width:80px'>"+ba.getOn_line_down_esqty()+"</div></td>";
  207. //实际下单
  208. titleData+=
  209. "<td"+tdCss+"><div style='width:80px'>"+ba.getReality_all()+"</div></td>"
  210. + "<td"+tdCss+"><div style='width:80px'>"+ba.getOn_line_up_reqty()+"</div></td>"
  211. + "<td"+tdCss+"><div style='width:80px'>"+ba.getOn_line_down_reqty()+"</div></td>" ;
  212. //差异下单
  213. titleData+=
  214. "<td"+tdCss+"><div style='width:80px'>"+ba.getDifference_all()+"</div></td>"
  215. + "<td"+tdCss+"><div style='width:80px'>"+ba.getOn_line_up_difference()+"</div></td>"
  216. + "<td"+tdCss+"><div style='width:80px'>"+ba.getOn_line_down_difference()+"</div></td>" ;
  217. titleData+= "</tr>" ;
  218. }
  219. return titleData;
  220. }
  221. private static List<BaseDto> getBaseApiData() {
  222. List<BaseDto> res = new ArrayList<>();
  223. String date = dataUtils.getYesterday(new Date(), 0);
  224. String url ="http://api-gw.hisense.com/sd/ords/edw_apex/sd/dwsd_lr_tf_base_daily_ship_p_s?user_key=47919b0749133c83a3f5cef2dc4fa290&";
  225. // url += "zdate=2021-06-22";
  226. url += "zdate=" + date;
  227. logger.info("【调用接口API参数】0 时间=" + date + ">>>>>>>>url" + url);
  228. String getData = HttpParam.Get(url);
  229. JSONObject json = JSONObject.parseObject(getData);
  230. //
  231. String items = null;
  232. if (json.get("items") == null) {
  233. return res;
  234. } else {
  235. items = json.get("items") + "";
  236. JSONArray jsons = JSONArray.parseArray(items);
  237. for (int i = 0; i < jsons.size(); i++) {
  238. BaseDto dto = JSONObject.toJavaObject(jsons.getJSONObject(i), BaseDto.class);
  239. res.add(dto);
  240. }
  241. return res;
  242. }
  243. }
  244. }

发表评论

表情:
评论列表 (有 0 条评论,233人围观)

还没有评论,来说两句吧...

相关阅读