柯桥增值式服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

368 lines
16KB

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