0216be374e7f7f7ae4c76b4de3d136593eb2d6aa.svn-base 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. package cn.com.goldenwater.dcproj.service.impl;
  2. import cn.com.goldenwater.core.service.AbstractCrudService;
  3. import cn.com.goldenwater.dcproj.dao.BisInspTaskDthDayDao;
  4. import cn.com.goldenwater.dcproj.dao.TaskDthDayCountDao;
  5. import cn.com.goldenwater.dcproj.dto.BisInspTaskDthDayDto;
  6. import cn.com.goldenwater.dcproj.model.BisInspTaskDthDay;
  7. import cn.com.goldenwater.dcproj.param.BisInspTaskDthDayParam;
  8. import cn.com.goldenwater.dcproj.service.BisInspTaskDthDayService;
  9. import cn.com.goldenwater.dcproj.service.OlBisInspOrgService;
  10. import cn.com.goldenwater.dcproj.service.TacProvincePlanDictService;
  11. import cn.com.goldenwater.dcproj.utils.AdLevelUtil;
  12. import cn.com.goldenwater.dcproj.utils.TaskDateUtils;
  13. import cn.com.goldenwater.id.util.UuidUtil;
  14. import org.apache.commons.lang3.StringUtils;
  15. import org.apache.poi.hssf.usermodel.HSSFCell;
  16. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  17. import org.apache.poi.hssf.usermodel.HSSFRow;
  18. import org.apache.poi.hssf.usermodel.HSSFSheet;
  19. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  20. import org.apache.poi.ss.usermodel.Cell;
  21. import org.apache.poi.ss.usermodel.CellStyle;
  22. import org.apache.poi.ss.usermodel.HorizontalAlignment;
  23. import org.apache.poi.ss.usermodel.Sheet;
  24. import org.apache.poi.ss.util.CellRangeAddress;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. import org.springframework.beans.BeanUtils;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.stereotype.Service;
  30. import org.springframework.transaction.annotation.Transactional;
  31. import javax.servlet.http.HttpServletResponse;
  32. import java.io.IOException;
  33. import java.io.OutputStream;
  34. import java.math.BigDecimal;
  35. import java.net.URLEncoder;
  36. import java.util.ArrayList;
  37. import java.util.Arrays;
  38. import java.util.Comparator;
  39. import java.util.Date;
  40. import java.util.HashMap;
  41. import java.util.LinkedHashMap;
  42. import java.util.List;
  43. import java.util.Map;
  44. import java.util.Optional;
  45. import java.util.Set;
  46. import java.util.stream.Collectors;
  47. /**
  48. * @author lhc
  49. * @date 2020-10-13
  50. */
  51. @Service
  52. @Transactional
  53. public class BisInspTaskDthDayServiceImpl extends AbstractCrudService<BisInspTaskDthDay, BisInspTaskDthDayParam> implements BisInspTaskDthDayService {
  54. private Logger logger = LoggerFactory.getLogger(getClass());
  55. @Autowired
  56. private BisInspTaskDthDayDao bisInspTaskDthDayDao;
  57. @Autowired
  58. private TaskDthDayCountDao taskDthDayCountDao;
  59. @Autowired
  60. private OlBisInspOrgService olBisInspOrgService;
  61. @Autowired
  62. private TacProvincePlanDictService tacProvincePlanDictService;
  63. public BisInspTaskDthDayServiceImpl(BisInspTaskDthDayDao bisInspTaskDthDayDao) {
  64. super(bisInspTaskDthDayDao);
  65. this.bisInspTaskDthDayDao = bisInspTaskDthDayDao;
  66. }
  67. @Override
  68. public int insert(BisInspTaskDthDay bisInspTaskDthDay) {
  69. // 插入前判断是否存在 存在则更新,不存在则插入
  70. BisInspTaskDthDayParam bisInspTaskDthDayParam = new BisInspTaskDthDayParam();
  71. bisInspTaskDthDayParam.setAdCode(bisInspTaskDthDay.getAdCode());
  72. bisInspTaskDthDayParam.setObjType(bisInspTaskDthDay.getObjType());
  73. bisInspTaskDthDayParam.setTm(bisInspTaskDthDay.getTm());
  74. List<BisInspTaskDthDay> bisInspTaskDthDays = bisInspTaskDthDayDao.findList(bisInspTaskDthDayParam);
  75. bisInspTaskDthDay.setIntm(new Date());
  76. bisInspTaskDthDay.setUptm(new Date());
  77. bisInspTaskDthDay.setDataStat("0");
  78. if (bisInspTaskDthDays.size() == 1) {
  79. bisInspTaskDthDay.setId(bisInspTaskDthDays.get(0).getId());
  80. logger.info("更新{}", bisInspTaskDthDay.toString());
  81. return this.bisInspTaskDthDayDao.update(bisInspTaskDthDay);
  82. } else {
  83. // 生成uuid
  84. String uuid = UuidUtil.uuid();
  85. bisInspTaskDthDay.setId(uuid);
  86. // logger.info("新增{}", bisInspTaskDthDay.toString());
  87. return this.bisInspTaskDthDayDao.insert(bisInspTaskDthDay);
  88. }
  89. }
  90. @Override
  91. public int update(BisInspTaskDthDay bisInspTaskDthDay) {
  92. bisInspTaskDthDay.setUptm(new Date());
  93. return this.bisInspTaskDthDayDao.update(bisInspTaskDthDay);
  94. }
  95. @Override
  96. public int delete(String id) {
  97. return this.bisInspTaskDthDayDao.delete(id);
  98. }
  99. @Override
  100. public List<BisInspTaskDthDay> find(BisInspTaskDthDayDto bisInspTaskDthDayDto) {
  101. // 设置时间
  102. TaskDateUtils.setDate(bisInspTaskDthDayDto);
  103. bisInspTaskDthDayDto.setProvince(olBisInspOrgService.getRlProvince(bisInspTaskDthDayDto.getOrgId()));
  104. String adCode = AdLevelUtil.getAddvcd(bisInspTaskDthDayDto.getProvince());
  105. // 如果有传AD_CODE,判断市县级别,默认市级数据
  106. bisInspTaskDthDayDto.setAdGrad("3");
  107. String sourceAdCode = bisInspTaskDthDayDto.getAdCode() ;
  108. if (StringUtils.isNotBlank(bisInspTaskDthDayDto.getAdCode())) {
  109. String addvcd = AdLevelUtil.getAddvcd(bisInspTaskDthDayDto.getAdCode());
  110. if (addvcd.contains(adCode)) {
  111. adCode = addvcd;
  112. }
  113. }
  114. // 如果传的是市级adCode, 要获取该市下所有县级数据
  115. if (adCode.length() == 4 || adCode.length() == 6) {
  116. // 市级编码
  117. bisInspTaskDthDayDto.setAdGrad("4");
  118. }
  119. bisInspTaskDthDayDto.setAdCode(adCode);
  120. if("359900000000".equals(sourceAdCode)){
  121. // 福建省 省本级
  122. bisInspTaskDthDayDto.setAdGrad("3");
  123. bisInspTaskDthDayDto.setAdCode("3500");
  124. }
  125. if (StringUtils.isNotBlank(bisInspTaskDthDayDto.getObjType())) {
  126. bisInspTaskDthDayDto.setObjType(String.valueOf(Integer.parseInt(bisInspTaskDthDayDto.getObjType())));
  127. if ("8".equals(bisInspTaskDthDayDto.getObjType())) {
  128. // 如果是稽察, 查询最后一步ID
  129. bisInspTaskDthDayDto.setLastStepId(tacProvincePlanDictService.getJcStepId(bisInspTaskDthDayDto.getOrgId()));
  130. }
  131. }
  132. BisInspTaskDthDayParam bisInspTaskDthDayParam = new BisInspTaskDthDayParam();
  133. BeanUtils.copyProperties(bisInspTaskDthDayDto, bisInspTaskDthDayParam);
  134. List<BisInspTaskDthDay> bisInspTaskDthDayList = bisInspTaskDthDayDao.findForCity(bisInspTaskDthDayParam);
  135. // 加上 整改率
  136. if (bisInspTaskDthDayList != null && bisInspTaskDthDayList.size() > 0) {
  137. BisInspTaskDthDay total = new BisInspTaskDthDay();
  138. total.setAdCode(bisInspTaskDthDayList.get(0).getAdCode().substring(0, 2) + "0000000000");
  139. total.setAdName("合计");
  140. int objSize = 0;
  141. int pblmSize = 0;
  142. int mendSize = 0;
  143. int pblmLogSize = 0;
  144. int submitPblm = 0;
  145. int infoPlbm = 0;
  146. int warmPlbm = 0;
  147. int errorPlbm = 0;
  148. int errorsPlbm = 0;
  149. for (BisInspTaskDthDay bisInspTaskDthDay : bisInspTaskDthDayList) {
  150. if ("8".equals(bisInspTaskDthDayDto.getObjType())) {
  151. BigDecimal pblmAvgSize = bisInspTaskDthDay.getObjSize() == 0 ?
  152. new BigDecimal(0) :
  153. BigDecimal.valueOf((double) bisInspTaskDthDay.getPblmSize() / bisInspTaskDthDay.getObjSize())
  154. .setScale(2, BigDecimal.ROUND_HALF_UP);
  155. bisInspTaskDthDay.setPblmAvgSize(pblmAvgSize);
  156. }
  157. bisInspTaskDthDay.setMendSizeRant(bisInspTaskDthDay.getPblmSize() == 0 ?
  158. BigDecimal.valueOf(0) : BigDecimal.valueOf((double) bisInspTaskDthDay.getMendSize() / bisInspTaskDthDay.getPblmSize() * 100).setScale(2,BigDecimal.ROUND_HALF_UP));
  159. // 问题整改完成率 完成销号数量/总数量 * 100% 百分比
  160. bisInspTaskDthDay.setMendAccomplishRant(bisInspTaskDthDay.getPblmSize() == 0 ?
  161. BigDecimal.valueOf(0) : BigDecimal.valueOf(Double.valueOf(String.valueOf(bisInspTaskDthDay.getPblmLogSize()))).divide(new BigDecimal(bisInspTaskDthDay.getPblmSize()),4,BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2,BigDecimal.ROUND_HALF_UP));
  162. objSize += bisInspTaskDthDay.getObjSize();
  163. pblmSize += bisInspTaskDthDay.getPblmSize();
  164. submitPblm += bisInspTaskDthDay.getSubmitPlbm();
  165. mendSize += bisInspTaskDthDay.getMendSize();
  166. pblmLogSize += bisInspTaskDthDay.getPblmLogSize();
  167. infoPlbm += bisInspTaskDthDay.getInfoPlbm();
  168. warmPlbm += bisInspTaskDthDay.getWarmPlbm();
  169. errorPlbm += bisInspTaskDthDay.getErrorPlbm();
  170. errorsPlbm += bisInspTaskDthDay.getErrorsPlbm();
  171. }
  172. // 排除 市辖区
  173. bisInspTaskDthDayList = bisInspTaskDthDayList.stream().filter(f->!f.getAdName().contains("市辖区")).collect(Collectors.toList());
  174. // 按问题数量倒序排列
  175. bisInspTaskDthDayList = bisInspTaskDthDayList.stream().sorted(Comparator.comparing(BisInspTaskDthDay::getPblmSize).reversed()).collect(Collectors.toList());
  176. total.setObjSize(objSize);
  177. total.setPblmSize(pblmSize);
  178. total.setSubmitPlbm(submitPblm);
  179. total.setMendSize(mendSize);
  180. total.setPblmLogSize(pblmLogSize);
  181. total.setInfoPlbm(infoPlbm);
  182. total.setWarmPlbm(warmPlbm);
  183. total.setErrorPlbm(errorPlbm);
  184. total.setErrorsPlbm(errorsPlbm);
  185. bisInspTaskDthDayList.add(total);
  186. }
  187. return bisInspTaskDthDayList;
  188. }
  189. @Override
  190. public List<BisInspTaskDthDay> findForObjType(BisInspTaskDthDayDto bisInspTaskDthDayDto) {
  191. // 设置时间
  192. TaskDateUtils.setDate(bisInspTaskDthDayDto);
  193. String adCode = AdLevelUtil.getAddvcd(olBisInspOrgService.getRlProvince(bisInspTaskDthDayDto.getOrgId()));
  194. // 如果有传AD_CODE,判断市县级别,默认市级数据
  195. bisInspTaskDthDayDto.setAdGrad("3");
  196. String sourceAdCode = bisInspTaskDthDayDto.getAdCode() ;
  197. if (StringUtils.isNotBlank(bisInspTaskDthDayDto.getAdCode())) {
  198. String addvcd = AdLevelUtil.getAddvcd(bisInspTaskDthDayDto.getAdCode());
  199. if (addvcd.contains(adCode)) {
  200. adCode = addvcd;
  201. }
  202. }
  203. // 如果传的是市级adCode, 要获取该市下所有县级数据
  204. if (adCode.length() == 4 || adCode.length() == 6) {
  205. // 市级编码
  206. bisInspTaskDthDayDto.setAdGrad("4");
  207. }
  208. bisInspTaskDthDayDto.setAdCode(adCode);
  209. if("359900000000".equals(sourceAdCode)){
  210. // 福建省 省本级
  211. bisInspTaskDthDayDto.setAdGrad("3");
  212. bisInspTaskDthDayDto.setAdCode("3500");
  213. }
  214. if (StringUtils.isNotBlank(bisInspTaskDthDayDto.getObjType())) {
  215. bisInspTaskDthDayDto.setObjType(String.valueOf(Integer.parseInt(bisInspTaskDthDayDto.getObjType())));
  216. }
  217. BisInspTaskDthDayParam bisInspTaskDthDayParam = new BisInspTaskDthDayParam();
  218. BeanUtils.copyProperties(bisInspTaskDthDayDto, bisInspTaskDthDayParam);
  219. List<BisInspTaskDthDay> bisInspTaskDthDayList = bisInspTaskDthDayDao.findForObjType(bisInspTaskDthDayParam);
  220. // 按问题数倒序排序
  221. bisInspTaskDthDayList = bisInspTaskDthDayList.stream().sorted(Comparator.comparing(BisInspTaskDthDay::getPblmSize).reversed()).collect(Collectors.toList());
  222. return bisInspTaskDthDayList;
  223. }
  224. @Override
  225. public Map<String,List> findForCityObjType(BisInspTaskDthDayDto bisInspTaskDthDayDto) {
  226. // 设置时间
  227. TaskDateUtils.setDate(bisInspTaskDthDayDto);
  228. bisInspTaskDthDayDto.setProvince(olBisInspOrgService.getRlProvince(bisInspTaskDthDayDto.getOrgId()));
  229. String adCode = AdLevelUtil.getAddvcd(bisInspTaskDthDayDto.getProvince());
  230. // 如果有传AD_CODE,判断市县级别,默认市级数据
  231. bisInspTaskDthDayDto.setAdGrad("3");
  232. String sourceAdCode = bisInspTaskDthDayDto.getAdCode() ;
  233. if (StringUtils.isNotBlank(bisInspTaskDthDayDto.getAdCode())) {
  234. String addvcd = AdLevelUtil.getAddvcd(bisInspTaskDthDayDto.getAdCode());
  235. if (addvcd.contains(adCode)) {
  236. adCode = addvcd;
  237. }
  238. }
  239. // 如果传的是市级adCode, 要获取该市下所有县级数据
  240. if (adCode.length() == 4 || adCode.length() == 6) {
  241. // 县级编码
  242. bisInspTaskDthDayDto.setAdGrad("4");
  243. }
  244. bisInspTaskDthDayDto.setAdCode(adCode);
  245. if("359900000000".equals(sourceAdCode)){
  246. // 福建省 省本级
  247. bisInspTaskDthDayDto.setAdGrad("3");
  248. bisInspTaskDthDayDto.setAdCode("3500");
  249. }
  250. if (StringUtils.isNotBlank(bisInspTaskDthDayDto.getObjType())) {
  251. bisInspTaskDthDayDto.setObjType(String.valueOf(Integer.parseInt(bisInspTaskDthDayDto.getObjType())));
  252. }
  253. BisInspTaskDthDayParam bisInspTaskDthDayParam = new BisInspTaskDthDayParam();
  254. BeanUtils.copyProperties(bisInspTaskDthDayDto, bisInspTaskDthDayParam);
  255. List<BisInspTaskDthDay> bisInspTaskDthDayList = bisInspTaskDthDayDao.findForCityObjType(bisInspTaskDthDayParam);
  256. Map<String, List<BisInspTaskDthDay>> adListMap = bisInspTaskDthDayList.stream().collect(Collectors.groupingBy(e -> e.getAdName()));
  257. // 按问题数量的倒序排列 行政区
  258. List<BisInspTaskDthDay> xAxisList = new ArrayList<>(adListMap.size());
  259. Set<String> keySet = adListMap.keySet();
  260. for(String key : keySet){
  261. BisInspTaskDthDay item = new BisInspTaskDthDay();
  262. List<BisInspTaskDthDay> itemList = adListMap.get(key);
  263. int sum = itemList.stream().mapToInt(m -> m.getPblmSize()).sum();
  264. item.setAdName(key);
  265. item.setPblmSize(sum);
  266. xAxisList.add(item);
  267. }
  268. xAxisList = xAxisList.stream().sorted(Comparator.comparing(BisInspTaskDthDay::getPblmSize).reversed()).collect(Collectors.toList());
  269. List<String> xAxis = xAxisList.stream().map(m->m.getAdName()).collect(Collectors.toList());
  270. Map<String,List> resultMap = new LinkedHashMap<>();
  271. resultMap.put("xAxis" ,xAxis);
  272. List<BisInspTaskDthDay> specialtyTypeList = bisInspTaskDthDayDao.selectCurObjTypeList(bisInspTaskDthDayParam);
  273. List<String> typeCodeList = specialtyTypeList.stream().map(m -> m.getObjType()).collect(Collectors.toList());
  274. resultMap.put("yTypeCode" ,typeCodeList);
  275. for(String pType :typeCodeList){
  276. String objName = specialtyTypeList.stream().filter(f->pType.equals(f.getObjType())).map(m->m.getObjName()).collect(Collectors.joining());
  277. List<Integer> sizeList = new ArrayList<>(xAxis.size());
  278. for(String adName: xAxis){
  279. Optional<BisInspTaskDthDay> first = bisInspTaskDthDayList.stream().filter(f -> adName.equals(f.getAdName()) && pType.equals(f.getObjType())).findFirst();
  280. if(first.isPresent()){
  281. sizeList.add(first.get().getPblmSize());
  282. }else {
  283. sizeList.add(0);
  284. }
  285. }
  286. resultMap.put(objName ,sizeList);
  287. }
  288. return resultMap;
  289. }
  290. /**
  291. *me
  292. *
  293. * */
  294. @Override
  295. public List<BisInspTaskDthDay> findForObjType1(BisInspTaskDthDayDto bisInspTaskDthDayDto) {
  296. // 设置时间
  297. TaskDateUtils.setDate(bisInspTaskDthDayDto);
  298. String adCode = AdLevelUtil.getAddvcd(olBisInspOrgService.getRlProvince(bisInspTaskDthDayDto.getOrgId()));
  299. // 如果有传AD_CODE,判断市县级别,默认市级数据
  300. bisInspTaskDthDayDto.setAdGrad("3");
  301. String sourceAdCode = bisInspTaskDthDayDto.getAdCode() ;
  302. if (StringUtils.isNotBlank(bisInspTaskDthDayDto.getAdCode())) {
  303. String addvcd = AdLevelUtil.getAddvcd(bisInspTaskDthDayDto.getAdCode());
  304. if (addvcd.contains(adCode)) {
  305. adCode = addvcd;
  306. }
  307. }
  308. // 如果传的是市级adCode, 要获取该市下所有县级数据
  309. if (adCode.length() == 4 || adCode.length() == 6) {
  310. // 市级编码
  311. bisInspTaskDthDayDto.setAdGrad("4");
  312. }
  313. bisInspTaskDthDayDto.setAdCode(adCode);
  314. if("359900000000".equals(sourceAdCode)){
  315. // 福建省 省本级
  316. bisInspTaskDthDayDto.setAdGrad("3");
  317. bisInspTaskDthDayDto.setAdCode("3500");
  318. }
  319. if (StringUtils.isNotBlank(bisInspTaskDthDayDto.getObjType())) {
  320. bisInspTaskDthDayDto.setObjType(String.valueOf(Integer.parseInt(bisInspTaskDthDayDto.getObjType())));
  321. }
  322. BisInspTaskDthDayParam bisInspTaskDthDayParam = new BisInspTaskDthDayParam();
  323. BeanUtils.copyProperties(bisInspTaskDthDayDto, bisInspTaskDthDayParam);
  324. List<BisInspTaskDthDay> bisInspTaskDthDayList1 = bisInspTaskDthDayDao.findForObjType1(bisInspTaskDthDayParam);
  325. // 按问题数倒序排序
  326. bisInspTaskDthDayList1 = bisInspTaskDthDayList1.stream().sorted(Comparator.comparing(BisInspTaskDthDay::getPblmSize).reversed()).collect(Collectors.toList());
  327. return bisInspTaskDthDayList1;
  328. }
  329. /**
  330. * 查询多年的、行政区划、督查类型 查询 督查对象数量,督查问题数量 督查问题整改数量 督查问题整改率
  331. * @param bisInspTaskDthDayDto
  332. * @return
  333. */
  334. @Override
  335. public Map<String,List> findForCityObjTypeYearsCompare(BisInspTaskDthDayDto bisInspTaskDthDayDto) {
  336. // 设置时间
  337. TaskDateUtils.setDate(bisInspTaskDthDayDto);
  338. // 没有选择行政区划 查询 当前用户所属行政区划的所有
  339. String adCode = AdLevelUtil.getAddvcd(olBisInspOrgService.getRlProvince(bisInspTaskDthDayDto.getOrgId()));
  340. // 设置行政区划
  341. String queryAdCode = bisInspTaskDthDayDto.getAdCode();
  342. if(StringUtils.isNotBlank(queryAdCode)){
  343. // 有选择的行政区划 查询 选择的 行政区划
  344. String addvcd = AdLevelUtil.getAddvcd(queryAdCode) ;
  345. if (addvcd.contains(adCode)) {
  346. adCode = addvcd;
  347. }
  348. bisInspTaskDthDayDto.setAdCode(adCode);
  349. // 省本级的特殊处理
  350. if("359900000000".equals(queryAdCode)){
  351. // 福建省 省本级
  352. bisInspTaskDthDayDto.setAdCode("3500");
  353. }
  354. }
  355. // 处理督查类型
  356. if (StringUtils.isNotBlank(bisInspTaskDthDayDto.getObjType())) {
  357. bisInspTaskDthDayDto.setObjType(String.valueOf(Integer.parseInt(bisInspTaskDthDayDto.getObjType())));
  358. }
  359. BisInspTaskDthDayParam bisInspTaskDthDayParam = new BisInspTaskDthDayParam();
  360. BeanUtils.copyProperties(bisInspTaskDthDayDto, bisInspTaskDthDayParam);
  361. List<BisInspTaskDthDay> bisInspTaskDthDayList = bisInspTaskDthDayDao.findForCityObjTypeYearsCompare(bisInspTaskDthDayParam);
  362. Map<String, List<BisInspTaskDthDay>> adListMap = bisInspTaskDthDayList.stream().collect(Collectors.groupingBy(e -> e.getCheckYear()));
  363. Set<String> keySet = adListMap.keySet();
  364. String join = StringUtils.join(keySet, ",");
  365. List<String> xAxis = Arrays.asList(join.split(","));
  366. Map<String,List> resultMap = new LinkedHashMap<>();
  367. xAxis = xAxis.stream().sorted().collect(Collectors.toList());
  368. resultMap.put("xAxis" ,xAxis);
  369. List<Map<String,Object>> yAxis= new ArrayList<>();
  370. List<Map<String, String>> specialtyType = taskDthDayCountDao.statisticsFjIndexBySpecialtyType(bisInspTaskDthDayDto);
  371. List<Integer> typeCodeList = specialtyType.stream().map(m -> Integer.valueOf(m.get("PTYPE"))).collect(Collectors.toList());
  372. // 1 督查对象数量 2 发现问题数量 3确认问题数量 4 整改问题数量
  373. String compareType = bisInspTaskDthDayDto.getCompareType();
  374. for(Integer pType :typeCodeList){
  375. Map<String,Object> typeMap = new HashMap<>();
  376. String objName = specialtyType.stream().filter(f->pType.toString().equals(f.get("PTYPE"))).map(m->m.get("NAME")).collect(Collectors.joining());
  377. List<Integer> sizeList = new ArrayList<>(xAxis.size());
  378. for(String curYear: xAxis){
  379. Optional<BisInspTaskDthDay> first = bisInspTaskDthDayList.stream().filter(f -> curYear.equals(f.getCheckYear()) && pType.toString().equals(f.getObjType())).findFirst();
  380. if(first.isPresent()){
  381. if("1".equals(compareType)){
  382. // 督查对象数
  383. sizeList.add(first.get().getObjSize());
  384. }else if("3".equals(compareType)){
  385. // 确认问题数
  386. sizeList.add(first.get().getSubmitPlbm());
  387. }else if("4".equals(compareType)){
  388. // 整改问题数
  389. sizeList.add(first.get().getMendSize());
  390. }else {
  391. // 发现问题数
  392. sizeList.add(first.get().getPblmSize());
  393. }
  394. }else {
  395. sizeList.add(0);
  396. }
  397. }
  398. typeMap.put("typeName",objName);
  399. typeMap.put("typeValue" ,sizeList);
  400. yAxis.add(typeMap);
  401. }
  402. resultMap.put("yAxis" ,yAxis);
  403. return resultMap;
  404. }
  405. /**
  406. * 导出 excel
  407. * @param bisInspTaskDthDayDto
  408. * @param response
  409. */
  410. @Override
  411. public void exportBisInspTaskDthDay(BisInspTaskDthDayDto bisInspTaskDthDayDto, HttpServletResponse response){
  412. List<BisInspTaskDthDay> news = find(bisInspTaskDthDayDto);
  413. HSSFWorkbook wb = new HSSFWorkbook();
  414. HSSFSheet sheet = wb.createSheet("督查对象、问题区域分布汇和严重等级汇总表");
  415. HSSFCellStyle cellStyle = wb.createCellStyle();
  416. cellStyle.setAlignment(HorizontalAlignment.CENTER);
  417. cellStyle.setAlignment(HorizontalAlignment.CENTER);
  418. // 8列
  419. int columnSize = 9 ;
  420. int rowSize = (null == news)? 0: news.size();
  421. for(int r=0;r<rowSize+3 ; r++){
  422. HSSFRow row = sheet.createRow(r);
  423. for(int c=0; c<columnSize; c++){
  424. HSSFCell cell = row.createCell(c);
  425. cell.setCellStyle(cellStyle);
  426. }
  427. }
  428. // 合并 第一行 至 第二行 第1列
  429. addMergedRegion(sheet,0, 1, 0, 0,0,0,"地区");
  430. // 合并 第一行 至 第二行 第2列
  431. addMergedRegion(sheet,0, 1, 1, 1,0,1,"督查对象数");
  432. // 合并 第一行 至 第二行 第3列
  433. addMergedRegion(sheet,0, 1, 2, 2,0,2,"问题总数");
  434. // 合并 第一行 第4列 至 第7列
  435. addMergedRegion(sheet,0, 0, 3, 6,0,3,"问题分类");
  436. // 合并 第一行 至 第二行 第8列
  437. addMergedRegion(sheet,0, 1, 7, 7,0,7,"销号数");
  438. // 合并 第一行 至 第二行 第9列
  439. addMergedRegion(sheet,0, 1, 8, 8,0,8,"整改完成率");
  440. setCell(sheet,1,3,"比较严重",cellStyle);
  441. setCell(sheet,1,4,"严重",cellStyle);
  442. setCell(sheet,1,5,"较重",cellStyle);
  443. setCell(sheet,1,6,"一般",cellStyle);
  444. if(null != news && news.size()>0){
  445. // 从第3行开始
  446. for(int r=0;r<rowSize ;r++){
  447. BisInspTaskDthDay bisInspTaskDthDay = news.get(r);
  448. // 设置 单元格内容
  449. setCellValue(sheet,2+r,0,bisInspTaskDthDay.getAdName() );
  450. setCellValue(sheet,2+r,1,bisInspTaskDthDay.getObjSize() );
  451. setCellValue(sheet,2+r,2,bisInspTaskDthDay.getPblmSize());
  452. setCellValue(sheet,2+r,3,bisInspTaskDthDay.getErrorsPlbm() );
  453. setCellValue(sheet,2+r,4,bisInspTaskDthDay.getErrorPlbm() );
  454. setCellValue(sheet,2+r,5,bisInspTaskDthDay.getWarmPlbm() );
  455. setCellValue(sheet,2+r,6,bisInspTaskDthDay.getInfoPlbm() );
  456. setCellValue(sheet,2+r,7,bisInspTaskDthDay.getPblmLogSize() );
  457. if(null != bisInspTaskDthDay.getMendAccomplishRant()){
  458. setCellValue(sheet,2+r,8,bisInspTaskDthDay.getMendAccomplishRant().toString().concat("%"));
  459. }
  460. }
  461. }
  462. try {
  463. response.setContentType("application/x-msdownload");
  464. String fileNameURL = URLEncoder.encode("督查对象、问题区域分布汇和严重等级汇总表.xls", "UTF-8");
  465. response.setHeader("Content-disposition", "attachment;filename=" + fileNameURL + ";filename*=utf-8''" + fileNameURL);
  466. OutputStream out = response.getOutputStream();
  467. wb.write(out);
  468. out.flush();
  469. out.close();
  470. } catch (IOException e) {
  471. e.printStackTrace();
  472. }
  473. }
  474. private void addMergedRegion(HSSFSheet sheet,int firstRow, int lastRow, int firstCol, int lastCol , int curRow, int curCol, String value){
  475. CellRangeAddress region1 = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
  476. sheet.addMergedRegion(region1);
  477. Cell mergeCell1 = sheet.getRow(curRow).getCell(curCol) ;
  478. mergeCell1.setCellValue(value);
  479. CellStyle mergeCellCellStyle = mergeCell1.getCellStyle();
  480. mergeCellCellStyle.setAlignment(HorizontalAlignment.CENTER);
  481. mergeCellCellStyle.setAlignment(HorizontalAlignment.CENTER);
  482. mergeCell1.setCellStyle(mergeCellCellStyle);
  483. }
  484. private void setCell(HSSFSheet sheet,int row ,int col ,String value, HSSFCellStyle cellStyle){
  485. HSSFCell cell1 = sheet.getRow(row).getCell(col);
  486. cell1.setCellValue(value);
  487. cell1.setCellStyle(cellStyle);
  488. }
  489. private void setCellValue(Sheet sheet, int rownum, int cellnum, Object value) {
  490. if(null != value){
  491. Cell cell = sheet.getRow(rownum).getCell(cellnum);
  492. if(value instanceof String){
  493. cell.setCellValue(value.toString());
  494. }else if(value instanceof Long){
  495. cell.setCellValue(Double.valueOf(String.valueOf((Long)value)));
  496. }else if(value instanceof Integer){
  497. cell.setCellValue(Double.valueOf(String.valueOf((Integer)value)));
  498. }else if(value instanceof Number){
  499. cell.setCellValue(Double.valueOf(String.valueOf((Number)value)));
  500. }else if(value instanceof Date){
  501. cell.setCellValue((Date)value);
  502. }else if(value instanceof Boolean){
  503. cell.setCellValue((Boolean)value);
  504. }else {
  505. cell.setCellValue(String.valueOf(value));
  506. }
  507. }
  508. }
  509. }