柯桥增值式服务
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

285 linhas
12KB

  1. package com.ningdatech.kqapi.zzsfw.manage;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.date.StopWatch;
  5. import cn.hutool.core.lang.Assert;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.ningdatech.kqapi.common.enumeration.CommonEnum;
  8. import com.ningdatech.kqapi.common.helper.MatterCacheHelper;
  9. import com.ningdatech.kqapi.zzsfw.constants.ZzsfwMenuConstant;
  10. import com.ningdatech.kqapi.zzsfw.entity.dto.NdKqZzsfwMattersDeduplicateDTO;
  11. import com.ningdatech.kqapi.zzsfw.entity.dto.NdKqZzsfwMenuDTO;
  12. import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMattersDeduplicate;
  13. import com.ningdatech.kqapi.zzsfw.entity.entity.NdKqZzsfwMenu;
  14. import com.ningdatech.kqapi.zzsfw.entity.vo.MatterTopVO;
  15. import com.ningdatech.kqapi.zzsfw.entity.vo.TreeVO;
  16. import com.ningdatech.kqapi.zzsfw.enumeration.ItemTypeEnum;
  17. import com.ningdatech.kqapi.zzsfw.service.INdKqZzsfwMatterDeduplicateService;
  18. import com.ningdatech.kqapi.zzsfw.service.INdKqZzsfwMenuService;
  19. import lombok.RequiredArgsConstructor;
  20. import lombok.extern.slf4j.Slf4j;
  21. import org.apache.commons.lang3.StringUtils;
  22. import org.apache.poi.ss.usermodel.CellType;
  23. import org.apache.poi.ss.usermodel.Row;
  24. import org.apache.poi.ss.usermodel.Sheet;
  25. import org.apache.poi.ss.usermodel.Workbook;
  26. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  27. import org.springframework.beans.factory.annotation.Value;
  28. import org.springframework.stereotype.Component;
  29. import org.springframework.web.multipart.MultipartFile;
  30. import java.io.IOException;
  31. import java.io.InputStream;
  32. import java.sql.Connection;
  33. import java.sql.DriverManager;
  34. import java.sql.Statement;
  35. import java.text.DecimalFormat;
  36. import java.time.LocalDateTime;
  37. import java.util.*;
  38. import java.util.stream.Collectors;
  39. /**
  40. * @Classname MatterManage
  41. * @Description
  42. * @Date 2023/10/25 14:55
  43. * @Author PoffyZhang
  44. */
  45. @Component
  46. @Slf4j
  47. @RequiredArgsConstructor
  48. public class MatterManage {
  49. @Value("${spring.datasource.url}")
  50. public String url;
  51. @Value("${spring.datasource.username}")
  52. public String username;
  53. @Value("${spring.datasource.password}")
  54. public String password;
  55. private final INdKqZzsfwMenuService menuService;
  56. private final INdKqZzsfwMatterDeduplicateService matterDeduplicateService;
  57. public List<TreeVO> getMatters() {
  58. List<NdKqZzsfwMenu> matters = menuService.list(Wrappers.lambdaQuery(NdKqZzsfwMenu.class)
  59. .orderByAsc(NdKqZzsfwMenu::getSort));
  60. if(CollUtil.isEmpty(matters)){
  61. return Collections.emptyList();
  62. }
  63. //如果是政府类型的 就隐藏 没有链接的
  64. List<NdKqZzsfwMenu> finalMatters = matters.stream().filter(m -> Objects.nonNull(m.getType()) &&
  65. (!m.getType().equals(ItemTypeEnum.GOV.getCode()) || Objects.nonNull(m.getWebapplyurl())))
  66. .collect(Collectors.toList());
  67. Set<String> zoneSet = new HashSet<>();
  68. List<TreeVO> res = matters.stream().filter(m -> zoneSet.add(m.getZoneName())).map(m -> {
  69. TreeVO zone = new TreeVO();
  70. zone.setName(m.getZoneName());
  71. zone.setChilren(generateWindows(m, finalMatters));
  72. zone.setType(ZzsfwMenuConstant.MENU_TYPE_ZONE);
  73. return zone;
  74. }).collect(Collectors.toList());
  75. return res;
  76. }
  77. private List<TreeVO> generateWindows(NdKqZzsfwMenu menu, List<NdKqZzsfwMenu> matters) {
  78. Set<String> windowSet = new HashSet<>();
  79. return matters.stream().filter(m -> StringUtils.isNotBlank(m.getZoneName()) && m.getZoneName().equals(menu.getZoneName())
  80. && windowSet.add(m.getWindow()))
  81. .map(m -> {
  82. TreeVO window = new TreeVO();
  83. window.setName(m.getWindow());
  84. window.setChilren(generateDepartment(m,matters));
  85. window.setType(ZzsfwMenuConstant.MENU_TYPE_WINDOW);
  86. return window;
  87. }).collect(Collectors.toList());
  88. }
  89. private List<TreeVO> generateDepartment(NdKqZzsfwMenu menu, List<NdKqZzsfwMenu> matters) {
  90. Set<String> departmentSet = new HashSet<>();
  91. return matters.stream().filter( m -> StringUtils.isNotBlank(m.getWindow()) && m.getWindow().equals(menu.getWindow()) &&
  92. m.getZoneName().equals(menu.getZoneName()) && departmentSet.add(m.getDepartment()))
  93. .map(m -> {
  94. TreeVO department = new TreeVO();
  95. department.setName(m.getDepartment());
  96. department.setChilren(generateItemType(m,matters));
  97. department.setType(ZzsfwMenuConstant.MENU_TYPE_DEPARTMENT);
  98. return department;
  99. }).collect(Collectors.toList());
  100. }
  101. private List<TreeVO> generateItemType(NdKqZzsfwMenu menu, List<NdKqZzsfwMenu> matters) {
  102. Set<Integer> typeSet = new HashSet<>();
  103. return matters.stream().filter(m -> StringUtils.isNotBlank(m.getWindow()) && m.getWindow().equals(menu.getWindow()) &&
  104. m.getZoneName().equals(menu.getZoneName()) && Objects.nonNull(m.getType()) && typeSet.add(m.getType()))
  105. .map(m -> {
  106. TreeVO menuType = new TreeVO();
  107. ItemTypeEnum itemTypeEnum = ItemTypeEnum.match(m.getType());
  108. if(Objects.nonNull(itemTypeEnum)){
  109. menuType.setName(itemTypeEnum.getDesc());
  110. menuType.setChilren(generateMatters(m,matters));
  111. menuType.setType(ZzsfwMenuConstant.MENU_ITEM_TYPE);
  112. return menuType;
  113. }
  114. return null;
  115. })
  116. .filter(Objects::nonNull)
  117. .collect(Collectors.toList());
  118. }
  119. private List<TreeVO> generateMatters(NdKqZzsfwMenu menu, List<NdKqZzsfwMenu> matters) {
  120. return matters.stream().filter(m -> Objects.nonNull(m.getType()) && m.getType().equals(menu.getType()) &&
  121. (!m.getType().equals(ItemTypeEnum.GOV.getCode()) || Objects.nonNull(m.getHasUrl()) && m.getHasUrl() == 1) &&
  122. StringUtils.isNotBlank(m.getDepartment()) &&
  123. m.getDepartment().equals(menu.getDepartment()) && m.getWindow().equals(menu.getWindow()) &&
  124. m.getZoneName().equals(menu.getZoneName()))
  125. .map(m -> {
  126. TreeVO matter = new TreeVO();
  127. matter.setName(m.getItemName());
  128. matter.setUrl(m.getWebapplyurl());
  129. matter.setId(m.getItemRowid());
  130. matter.setSort(m.getSort());
  131. matter.setType(ZzsfwMenuConstant.MENU_TYPE_MATTER);
  132. matter.setServiceContent(m.getServiceContent());
  133. matter.setServiceProcess(m.getServiceProcess());
  134. matter.setTelephone(m.getTelephone());
  135. return matter;
  136. }).collect(Collectors.toList());
  137. }
  138. public List<MatterTopVO> topTen() {
  139. List<NdKqZzsfwMattersDeduplicate> topTen = matterDeduplicateService.list(Wrappers.lambdaQuery(NdKqZzsfwMattersDeduplicate.class)
  140. .orderByDesc(NdKqZzsfwMattersDeduplicate::getCountNum)
  141. .last("limit 10"));
  142. return topTen.stream().map(m -> {
  143. MatterTopVO vo = new MatterTopVO();
  144. vo.setMatterName(m.getQlName());
  145. vo.setWebapplyurl(m.getWebapplyurl());
  146. vo.setCount(m.getCountNum());
  147. return vo;
  148. }).collect(Collectors.toList());
  149. }
  150. public String save(NdKqZzsfwMenuDTO dto) {
  151. if(Objects.isNull(dto)){
  152. return "保存失败 传入为空";
  153. }
  154. NdKqZzsfwMenu entity = BeanUtil.copyProperties(dto,NdKqZzsfwMenu.class);
  155. if(menuService.save(entity)){
  156. return "保存成功 :" + entity;
  157. }else{
  158. return "保存失败";
  159. }
  160. }
  161. public String saveDup(NdKqZzsfwMattersDeduplicateDTO dto) {
  162. if(Objects.isNull(dto)){
  163. return "保存失败 传入为空";
  164. }
  165. NdKqZzsfwMattersDeduplicate entity = BeanUtil.copyProperties(dto,NdKqZzsfwMattersDeduplicate.class);
  166. if(matterDeduplicateService.save(entity)){
  167. return "保存成功 :" + entity;
  168. }else{
  169. return "保存失败";
  170. }
  171. }
  172. public String removeAll() {
  173. menuService.remove(Wrappers.lambdaQuery(NdKqZzsfwMenu.class));
  174. return "删除成功";
  175. }
  176. public String removeAllDup() {
  177. matterDeduplicateService.remove(Wrappers.lambdaQuery(NdKqZzsfwMattersDeduplicate.class));
  178. return "删除成功";
  179. }
  180. public String uploadMenu(MultipartFile file) throws IOException {
  181. InputStream inputStream = file.getInputStream();
  182. Workbook workbook = new XSSFWorkbook(inputStream);
  183. Assert.notNull(workbook);
  184. Row row;
  185. //获取最大行数
  186. Sheet sheet = workbook.getSheetAt(0);
  187. int rownum = sheet.getPhysicalNumberOfRows();
  188. //获取最大列数
  189. Integer num = 1;
  190. for (int i = 2; i < rownum; i++) {
  191. row = sheet.getRow(i);
  192. if (row.getZeroHeight()) {
  193. continue;
  194. }
  195. System.out.println("记数:" + (num++));
  196. String zoneName = row.getCell(0).getStringCellValue();
  197. System.out.println(zoneName);
  198. DecimalFormat decimalFormat = new DecimalFormat("#");
  199. Integer sort = Integer.valueOf(decimalFormat.format(row.getCell(1).getNumericCellValue()));
  200. System.out.println(sort);
  201. String windowName = row.getCell(2).getStringCellValue();
  202. System.out.println(windowName);
  203. String department = row.getCell(3).getStringCellValue();
  204. System.out.println(department);
  205. String itemName = row.getCell(4).getStringCellValue();
  206. System.out.println(itemName);
  207. String serviceContent = row.getCell(5).getStringCellValue();
  208. System.out.println(serviceContent);
  209. String serviceProcess = row.getCell(6).getStringCellValue();
  210. System.out.println(serviceProcess);
  211. String telephone = "";
  212. CellType cellType = row.getCell(7).getCellType();
  213. if (cellType.equals(CellType.STRING)) {
  214. telephone = row.getCell(7).getStringCellValue();
  215. System.out.println(telephone);
  216. } else if (cellType.equals(CellType.NUMERIC)) {
  217. DecimalFormat decimalFormat2 = new DecimalFormat("#.#######");
  218. telephone = decimalFormat2.format(row.getCell(7).getNumericCellValue());
  219. System.out.println(telephone);
  220. }
  221. NdKqZzsfwMenu menu = new NdKqZzsfwMenu();
  222. menu.setItemName(itemName);
  223. menu.setZoneName(zoneName);
  224. menu.setWindow(windowName);
  225. menu.setDepartment(department);
  226. menu.setServiceContent(serviceContent);
  227. menu.setServiceProcess(serviceProcess);
  228. menu.setTelephone(telephone);
  229. menu.setType(ItemTypeEnum.ADDED.getCode());
  230. menu.setCreateOn(LocalDateTime.now());
  231. menu.setSort(sort);
  232. menuService.save(menu);
  233. }
  234. return "upload success!";
  235. }
  236. public String ddl(String sql) {
  237. try {
  238. // 1. 加载数据库驱动
  239. Class.forName("com.mysql.cj.jdbc.Driver");
  240. // 2. 建立数据库连接
  241. Connection connection = DriverManager.getConnection(url, username, password);
  242. // 3. 创建Statement对象
  243. Statement statement = connection.createStatement();
  244. // 4. 编写并执行DDL语句(创建一个名为`users`的表)
  245. statement.executeUpdate(sql);
  246. System.out.println(" Table updated successfully.");
  247. // 5. 关闭资源
  248. statement.close();
  249. connection.close();
  250. } catch (Exception e) {
  251. e.printStackTrace();
  252. }
  253. return "success!";
  254. }
  255. }