ReportProjectService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.business.PatentProjectDTO;
  3. import cn.cslg.pas.common.model.cronModel.*;
  4. import cn.cslg.pas.common.model.request.GroupRequest;
  5. import cn.cslg.pas.common.model.request.QueryRequest;
  6. import cn.cslg.pas.common.model.request.StringRequest;
  7. import cn.cslg.pas.common.utils.CacheUtils;
  8. import cn.cslg.pas.common.utils.LoginUtils;
  9. import cn.cslg.pas.common.vo.business.EventCountVO;
  10. import cn.cslg.pas.common.vo.business.EventVO;
  11. import cn.cslg.pas.domain.business.AssoEventFile;
  12. import cn.cslg.pas.domain.business.PatentProject;
  13. import cn.cslg.pas.domain.business.ReportProject;
  14. import cn.cslg.pas.domain.business.SystemDict;
  15. import cn.cslg.pas.exception.XiaoShiException;
  16. import cn.cslg.pas.factorys.businessFactory.Business;
  17. import cn.cslg.pas.factorys.reGroupFactory.QueryGroupFactory;
  18. import cn.cslg.pas.factorys.reGroupFactory.QueryGroupImp;
  19. import cn.cslg.pas.mapper.AssoProjectEventMapper;
  20. import cn.cslg.pas.mapper.EventMapper;
  21. import cn.cslg.pas.mapper.PatentProjectMapper;
  22. import cn.cslg.pas.mapper.ReportProjectMapper;
  23. import cn.cslg.pas.service.common.FileManagerService;
  24. import cn.cslg.pas.service.permissions.PermissionService;
  25. import cn.cslg.pas.service.query.FormatQueryService;
  26. import com.alibaba.fastjson.JSON;
  27. import com.alibaba.fastjson.JSONObject;
  28. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  29. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  30. import lombok.extern.slf4j.Slf4j;
  31. import org.springframework.beans.BeanUtils;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.transaction.annotation.Transactional;
  35. import org.springframework.web.multipart.MultipartFile;
  36. import java.io.IOException;
  37. import java.util.ArrayList;
  38. import java.util.Arrays;
  39. import java.util.List;
  40. import java.util.stream.Collectors;
  41. @Service
  42. @Slf4j
  43. public class ReportProjectService extends ServiceImpl<ReportProjectMapper,ReportProject> implements Business {
  44. @Autowired
  45. private EventMapper eventMapper;
  46. @Autowired
  47. private FormatQueryService formatQueryService;
  48. @Autowired
  49. private FileManagerService fileManagerService;
  50. @Autowired
  51. private AssoEventFileService assoEventFileService;
  52. @Autowired
  53. private QueryGroupFactory queryGroupFactory;
  54. @Autowired
  55. private PermissionService permissionService;
  56. @Autowired
  57. private SystemDictService systemDictService;
  58. @Autowired
  59. private AssoProjectEventMapper assoProjectEventMapper;
  60. @Autowired
  61. private CacheUtils cacheUtils;
  62. @Autowired
  63. private LoginUtils loginUtils;
  64. @Override
  65. @Transactional(rollbackFor = Exception.class)
  66. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  67. List<String> sqls = formatQueryService.reSqls(queryRequest,"event");
  68. //根据sql查询事件信息
  69. List<EventVO> eventVOS = eventMapper.getEvent(sqls.get(0),sqls.get(1),sqls.get(2));
  70. //查询总数
  71. Long total = eventMapper.getEventCount(sqls.get(0));
  72. //装载事件信息
  73. this.loadEvent(eventVOS);
  74. Records records = new Records();
  75. records.setCurrent(queryRequest.getCurrent());
  76. records.setSize(queryRequest.getSize());
  77. records.setData(eventVOS);
  78. records.setTotal(total);
  79. return records;
  80. }
  81. @Override
  82. @Transactional(rollbackFor = Exception.class)
  83. public Integer addMessage(Object object, List<MultipartFile> files) {
  84. return null;
  85. }
  86. @Override
  87. @Transactional(rollbackFor = Exception.class)
  88. public Object deleteMessage(List<Integer> ids) throws IOException {
  89. //根据事件id删除事件和文件关联
  90. LambdaQueryWrapper<AssoEventFile> queryWrapper = new LambdaQueryWrapper<>();
  91. queryWrapper.in(AssoEventFile::getEventId, ids);
  92. List<AssoEventFile> assoEventFiles = assoEventFileService.list(queryWrapper);
  93. List<String> guids = assoEventFiles.stream().map(AssoEventFile::getFileGuid).collect(Collectors.toList());
  94. // 根据guid删除文件
  95. if (guids.size() != 0) {
  96. fileManagerService.deleteFileFromFMS(guids);
  97. }
  98. //删除事件和文件关联表
  99. assoEventFiles.remove(queryWrapper);
  100. //根据事件id删除事件
  101. this.removeBatchByIds(ids);
  102. return ids;
  103. }
  104. /**
  105. * 更新事件接口
  106. *
  107. * @param object
  108. * @param files
  109. * @return
  110. */
  111. @Override
  112. @Transactional(rollbackFor = Exception.class)
  113. public Object updateMessage(Object object, List<MultipartFile> files) {
  114. return null;
  115. }
  116. /**
  117. * 查询事件分组信息
  118. *
  119. * @param groupRequest
  120. * @return
  121. * @throws Exception
  122. */
  123. @Transactional(rollbackFor = Exception.class)
  124. public Object getGroup(GroupRequest groupRequest,String tableName) throws Exception {
  125. StringRequest stringRequest =new StringRequest();
  126. BeanUtils.copyProperties(groupRequest,stringRequest);
  127. List<String> sqls = formatQueryService.reSqls(stringRequest,tableName);
  128. //格式化 分组
  129. GroupConfig groupConfig=null;
  130. if (groupRequest.getGroupBy() != null) {
  131. String json = CommonService.readJsonFile(tableName+".json");
  132. List<GroupConfig> groupConfigs = JSON.parseArray(json, GroupConfig.class);
  133. groupConfig = groupConfigs.stream().filter(item -> groupRequest.getGroupBy().equals(item.getField())).findFirst().orElse(null);
  134. if (groupConfig == null) {
  135. throw new XiaoShiException("未找到配置");
  136. }
  137. }
  138. //返回分组数据
  139. QueryGroupImp queryGroupImp = queryGroupFactory.getClass(groupConfig.getGroupClass());
  140. ReGroupDataVO reGroupDataVO = queryGroupImp.getGroup(sqls, tableName, groupConfig.getSqlField());
  141. //装载数据
  142. GroupVO groupVO = new GroupVO();
  143. groupVO.setField(groupRequest.getGroupBy());
  144. groupVO.setValues(reGroupDataVO.getValues());
  145. Records records = new Records();
  146. records.setCurrent(groupRequest.getCurrent());
  147. records.setSize(groupRequest.getSize());
  148. records.setData(groupVO);
  149. records.setTotal(reGroupDataVO.getTotal());
  150. return records;
  151. }
  152. @Override
  153. public Object addMessage(Object object) {
  154. PatentProjectDTO patentProjectDTO =(PatentProjectDTO)object;
  155. return null;
  156. }
  157. @Override
  158. public Object updateMessage(Object object) {
  159. return null;
  160. }
  161. /**
  162. * 装载事件返回类
  163. *
  164. * @param eventVOs
  165. */
  166. private void loadEvent(List<EventVO> eventVOs) throws IOException {
  167. List<String> createIds = new ArrayList<>();
  168. List<Integer> clientIds = new ArrayList<>();
  169. List<Integer> ids = new ArrayList<>();
  170. List<EventCountVO> eventCountVOS = new ArrayList<>();
  171. //获得所有文件的guid
  172. eventVOs.forEach(
  173. item -> {
  174. if (item.getClientId() != null) {
  175. clientIds.add(item.getClientId());
  176. }
  177. if (item.getCreateId() != null) {
  178. createIds.add(item.getCreateId());
  179. }
  180. if (item.getId() != null) {
  181. ids.add(item.getId());
  182. }
  183. }
  184. );
  185. List<Personnel> personnels = new ArrayList<>();
  186. List<Client> clients = new ArrayList<>();
  187. List<String> guids = new ArrayList<>();
  188. List<SystemFile> systemFiles = new ArrayList<>();
  189. List<AssoEventFile> assoEventFiles = new ArrayList<>();
  190. if (ids.size() != 0) {
  191. //根据事件id获得事件文件关联表
  192. LambdaQueryWrapper<AssoEventFile> queryWrapper = new LambdaQueryWrapper<>();
  193. queryWrapper.in(AssoEventFile::getEventId, ids);
  194. assoEventFiles = assoEventFileService.list(queryWrapper);
  195. guids = assoEventFiles.stream().map(AssoEventFile::getFileGuid).collect(Collectors.toList());
  196. //根据事件id分组查询事件关联专题库或报告数量
  197. eventCountVOS = assoProjectEventMapper.getEventProjectCount(ids);
  198. }
  199. //查询创建人名称
  200. if (createIds.size() != 0) {
  201. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  202. JSONObject jsonObject = JSONObject.parseObject(res);
  203. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  204. }
  205. //查询客户名称
  206. if (clientIds.size() != 0) {
  207. String res = permissionService.getClientByIdsFromPCS(clientIds);
  208. JSONObject jsonObject = JSONObject.parseObject(res);
  209. clients = JSONObject.parseArray(jsonObject.getString("data"), Client.class);
  210. }
  211. //查询文件
  212. if (guids.size() != 0) {
  213. String res = fileManagerService.getSystemFileFromFMS(guids);
  214. JSONObject jsonObject = JSONObject.parseObject(res);
  215. systemFiles = JSONObject.parseArray(jsonObject.getString("data"), SystemFile.class);
  216. }
  217. //查询关联报告或专题库
  218. //查询应用场景
  219. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList("ENTERPRISE_APPLICATION_SCENARIO"));
  220. //查询专题库数量
  221. //装载信息
  222. for (EventVO eventVO : eventVOs) {
  223. //装载人员信息
  224. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(eventVO.getCreateId())).findFirst().orElse(null);
  225. if (personnel != null) {
  226. eventVO.setCreateName(personnel.getPersonnelName());
  227. }
  228. //装载客户信息
  229. Client client = clients.stream().filter(item -> item.getId().equals(eventVO.getClientId())).findFirst().orElse(null);
  230. if (client != null) {
  231. eventVO.setClientName(client.getName());
  232. }
  233. //装载场景
  234. SystemDict systemDict = systemDictList.stream().filter(item -> item.getValue().equals(eventVO.getScenarioId().toString())).findFirst().orElse(null);
  235. if (systemDict != null) {
  236. eventVO.setScenarioName(systemDict.getLabel());
  237. }
  238. //装载文件信息
  239. List<AssoEventFile> assoEventFileTemp = assoEventFiles.stream().filter(item -> item.getEventId().equals(eventVO.getId())).collect(Collectors.toList());
  240. if (assoEventFileTemp.size() != 0) {
  241. List<String> guidTemp = assoEventFileTemp.stream().map(AssoEventFile::getFileGuid).collect(Collectors.toList());
  242. if (guidTemp.size() != 0) {
  243. List<SystemFile> systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList());
  244. if (systemFileTemp.size() != 0) {
  245. eventVO.setSystemFileList(systemFileTemp);
  246. }
  247. }
  248. }
  249. //装载专题库或报告数量
  250. if (eventCountVOS.size() != 0) {
  251. //专题库数量
  252. EventCountVO eventCountVO1 = eventCountVOS.stream().filter(item ->
  253. item.getEventId().equals(eventVO.getId()) && item.getProjectType().equals(1)).findFirst().orElse(null);
  254. //报告数量
  255. EventCountVO eventCountVO2 = eventCountVOS.stream().filter(item ->
  256. item.getEventId().equals(eventVO.getId()) && item.getProjectType().equals(2)).findFirst().orElse(null);
  257. //设置专题库数量
  258. if (eventCountVO1 != null) {
  259. eventVO.setPatentProjectNum(eventCountVO1.getProjectCount());
  260. } else {
  261. eventVO.setPatentProjectNum(0);
  262. }
  263. //设置报告数量
  264. if (eventCountVO2 != null) {
  265. eventVO.setReportProjectNum(eventCountVO2.getProjectCount());
  266. } else {
  267. eventVO.setReportProjectNum(0);
  268. }
  269. } else {
  270. eventVO.setReportProjectNum(0);
  271. eventVO.setPatentProjectNum(0);
  272. }
  273. }
  274. }
  275. }