ReportServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. package jnpf.service.impl;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import cn.hutool.http.Method;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import jnpf.base.ActionResult;
  8. import jnpf.base.UserInfo;
  9. import jnpf.base.service.SuperServiceImpl;
  10. import jnpf.constant.CodeConst;
  11. import jnpf.constant.MsgCode;
  12. import jnpf.consts.ApiConst;
  13. import jnpf.emnus.DataSetTypeEnum;
  14. import jnpf.entity.ReportEntity;
  15. import jnpf.entity.ReportVersionEntity;
  16. import jnpf.entity.SystemEntity;
  17. import jnpf.exception.DataException;
  18. import jnpf.mapper.ReportMapper;
  19. import jnpf.model.data.DataForm;
  20. import jnpf.model.data.DataSetInfo;
  21. import jnpf.model.data.DataSetPagination;
  22. import jnpf.model.report.ReportCrForm;
  23. import jnpf.model.report.ReportInfoVO;
  24. import jnpf.model.report.ReportPagination;
  25. import jnpf.model.report.ReportUpForm;
  26. import jnpf.service.CodeNumService;
  27. import jnpf.service.ReportService;
  28. import jnpf.service.ReportVersionService;
  29. import jnpf.service.SystemService;
  30. import jnpf.util.*;
  31. import jnpf.util.context.RequestContext;
  32. import org.apache.commons.collections4.CollectionUtils;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.stereotype.Service;
  35. import java.util.*;
  36. /**
  37. * @author :JNPF开发平台组
  38. * @version: V3.1.0
  39. * @copyright 引迈信息技术有限公司
  40. * @date :2024/5/11 下午4:35
  41. */
  42. @Service
  43. public class ReportServiceImpl extends SuperServiceImpl<ReportMapper, ReportEntity> implements ReportService {
  44. @Autowired
  45. private CodeNumService codeNumService;
  46. @Autowired
  47. private SystemService systemService;
  48. @Autowired
  49. private ReportVersionService versionService;
  50. @Override
  51. public List<ReportEntity> getList(ReportPagination pagination) {
  52. QueryWrapper<ReportEntity> queryWrapper = new QueryWrapper<>();
  53. String keyword = pagination.getKeyword();
  54. if (ObjectUtil.isNotEmpty(keyword)) {
  55. queryWrapper.lambda().and(t -> t.like(ReportEntity::getEnCode, keyword).or().like(ReportEntity::getFullName, keyword));
  56. }
  57. if (ObjectUtil.isNotEmpty(pagination.getCategory())) {
  58. queryWrapper.lambda().eq(ReportEntity::getCategory, pagination.getCategory());
  59. }
  60. if (ObjectUtil.isNotEmpty(pagination.getState())) {
  61. queryWrapper.lambda().eq(ReportEntity::getEnabledMark, pagination.getState());
  62. }
  63. if (ObjectUtil.isNotEmpty(pagination.getSystemId())) {
  64. queryWrapper.lambda().eq(ReportEntity::getSystemId, pagination.getSystemId());
  65. }
  66. queryWrapper.lambda().orderByAsc(ReportEntity::getSortCode).orderByDesc(ReportEntity::getCreatorTime);
  67. Page<ReportEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
  68. IPage<ReportEntity> userPage = this.page(page, queryWrapper);
  69. return pagination.setData(userPage.getRecords(), page.getTotal());
  70. }
  71. @Override
  72. public void create(ReportCrForm form) {
  73. if (StringUtil.isEmpty(form.getEnCode())) {
  74. form.setEnCode(codeNumService.getCodeOnce(CodeConst.BB));
  75. }
  76. ReportEntity entity = JsonUtil.getJsonToBean(form, ReportEntity.class);
  77. UserInfo userInfo = UserProvider.getUser();
  78. this.creUpdateCheck(entity, true, true);
  79. String id = StringUtil.isNotEmpty(entity.getId()) ? entity.getId() : RandomUtil.uuId();
  80. entity.setId(id);
  81. entity.setEnabledMark(0);
  82. entity.setCreatorUserId(userInfo.getUserId());
  83. entity.setCreatorTime(new Date());
  84. entity.setLastModifyUserId(null);
  85. entity.setLastModifyTime(null);
  86. this.setIgnoreLogicDelete().removeById(entity.getId());
  87. this.setIgnoreLogicDelete().saveOrUpdate(entity);
  88. this.clearIgnoreLogicDelete();
  89. form.setId(id);
  90. List<ReportVersionEntity> list = versionService.getList(id, ReportVersionEntity::getId);
  91. if (CollectionUtils.isEmpty(list)) {
  92. versionService.create(form);
  93. }
  94. }
  95. @Override
  96. public void update(String id, ReportEntity entity) {
  97. ReportEntity report = getById(id);
  98. if (StringUtil.isEmpty(entity.getEnCode())) {
  99. entity.setEnCode(codeNumService.getCodeOnce(CodeConst.BB));
  100. }
  101. this.creUpdateCheck(entity, !report.getFullName().equals(entity.getFullName()), !report.getEnCode().equals(entity.getEnCode()));
  102. entity.setId(id);
  103. updateById(entity);
  104. }
  105. @Override
  106. public ReportInfoVO getVersionInfo(String versionId) {
  107. ReportVersionEntity versionEntity = versionService.getById(versionId);
  108. ReportEntity entity = this.getById(versionEntity.getTemplateId());
  109. ReportInfoVO vo = JsonUtil.getJsonToBean(versionEntity, ReportInfoVO.class);
  110. vo.setVersionId(versionId);
  111. vo.setId(entity.getId());
  112. vo.setFullName(entity.getFullName());
  113. vo.setAllowExport(entity.getAllowExport());
  114. vo.setAllowWatermark(entity.getAllowWatermark());
  115. vo.setWatermarkConfig(entity.getWatermarkConfig());
  116. vo.setAllowPrint(entity.getAllowPrint());
  117. vo.setCategory(entity.getCategory());
  118. vo.setEnCode(entity.getEnCode());
  119. vo.setSortCode(entity.getSortCode());
  120. DataSetPagination pagination = new DataSetPagination();
  121. pagination.setObjectId(versionId);
  122. pagination.setObjectType(DataSetTypeEnum.REPORT_VER.getCode());
  123. String json = ReportUtil.http(ApiConst.DATASET_LIST, Method.GET, JsonUtil.entityToMap(pagination));
  124. ActionResult result = JsonUtil.getJsonToBean(json, ActionResult.class);
  125. List<DataSetInfo> dataSetList = new ArrayList<>();
  126. if (ObjectUtil.isNotEmpty(result.getData())) {
  127. dataSetList = JsonUtil.getJsonToList(result.getData(), DataSetInfo.class);
  128. }
  129. vo.setDataSetList(dataSetList);
  130. return vo;
  131. }
  132. @Override
  133. public void saveOrRelease(ReportUpForm form) {
  134. ReportVersionEntity versionEntity = versionService.getById(form.getVersionId());
  135. ReportVersionEntity versionNew = JsonUtil.getJsonToBean(form, ReportVersionEntity.class);
  136. versionNew.setFenceList(form.getColumnList());
  137. versionNew.setId(versionEntity.getId());
  138. versionNew.setState(versionEntity.getState());
  139. ReportEntity entity = this.getById(form.getId());
  140. //发布流程
  141. if (Objects.equals(form.getType(), 1)) {
  142. //改流程版本
  143. if (StringUtil.isNotEmpty(form.getVersionId())) {
  144. boolean isRelease = Objects.equals(versionNew.getState(), 2);
  145. ReportVersionEntity info = versionService.getList(form.getId(), ReportVersionEntity::getId, ReportVersionEntity::getState).stream().filter(t -> Objects.equals(t.getState(), 1)).findFirst().orElse(null);
  146. if (info != null) {
  147. // 变更归档状态,排序码
  148. info.setSortCode(0L);
  149. info.setState(2);
  150. versionService.updateById(info);
  151. }
  152. versionNew.setState(1);
  153. versionNew.setSortCode(1L);
  154. entity.setEnabledMark(1);
  155. if (isRelease) {
  156. versionService.updateById(versionNew);
  157. return;
  158. }
  159. }
  160. }
  161. versionService.updateById(versionNew);
  162. //数据集创建
  163. String versionId = versionNew.getId();
  164. List<DataSetInfo> dataSetList = form.getDataSetList() != null ? form.getDataSetList() : new ArrayList<>();
  165. DataForm dataForm = new DataForm();
  166. dataForm.setObjectId(versionId);
  167. dataForm.setObjectType(DataSetTypeEnum.REPORT_VER.getCode());
  168. dataForm.setList(dataSetList);
  169. ReportUtil.http(ApiConst.DATASET_SAVE, Method.POST, JsonUtil.entityToMap(dataForm));
  170. entity.setAllowExport(form.getAllowExport());
  171. entity.setAllowPrint(form.getAllowPrint());
  172. entity.setAllowWatermark(form.getAllowWatermark());
  173. entity.setWatermarkConfig(form.getWatermarkConfig());
  174. entity.setLastModifyTime(new Date());
  175. entity.setLastModifyUserId(UserProvider.getLoginUserId());
  176. this.updateById(entity);
  177. }
  178. @Override
  179. public List<ReportEntity> getTreeList() {
  180. SystemEntity infoByEnCode = systemService.getInfoByEnCode(RequestContext.getAppCode());
  181. if (infoByEnCode == null) {
  182. return new ArrayList<>();
  183. }
  184. QueryWrapper<ReportEntity> query = new QueryWrapper<>();
  185. query.lambda().eq(ReportEntity::getEnabledMark, 1);
  186. query.lambda().eq(ReportEntity::getSystemId, infoByEnCode.getId());
  187. query.lambda().orderByAsc(ReportEntity::getSortCode).orderByDesc(ReportEntity::getCreatorTime);
  188. return this.list(query);
  189. }
  190. @Override
  191. public void delete(String id) {
  192. removeById(id);
  193. versionService.removeByTemplateId(id);
  194. }
  195. @Override
  196. public String importData(ReportInfoVO infoVO, Integer type, Boolean idCheck) {
  197. ReportEntity entity = JsonUtil.getJsonToBean(infoVO, ReportEntity.class);
  198. StringJoiner stringJoiner = new StringJoiner("、");
  199. //id为空切名称不存在时
  200. QueryWrapper<ReportEntity> queryWrapper = new QueryWrapper<>();
  201. if (idCheck) {
  202. queryWrapper.lambda().eq(ReportEntity::getId, entity.getId());
  203. if (this.getById(infoVO.getId()) != null) {
  204. if (Objects.equals(type, 1)) {
  205. entity.setId(RandomUtil.uuId());
  206. } else {
  207. stringJoiner.add("ID");
  208. }
  209. }
  210. }
  211. if (ObjectUtil.equal(type, 1)) {
  212. String copyNum = UUID.randomUUID().toString().substring(0, 5);
  213. entity.setFullName(entity.getFullName() + ".副本" + copyNum);
  214. entity.setEnCode(entity.getEnCode() + copyNum);
  215. } else if (ObjectUtil.equal(type, 0) && stringJoiner.length() > 0) {
  216. return stringJoiner + MsgCode.IMP007.get();
  217. }
  218. entity.setEnabledMark(0);
  219. entity.setCreatorTime(new Date());
  220. entity.setCreatorUserId(UserProvider.getLoginUserId());
  221. entity.setLastModifyTime(null);
  222. entity.setLastModifyUserId(null);
  223. if (type != 1) {
  224. this.creUpdateCheck(entity, true, true);
  225. }
  226. this.setIgnoreLogicDelete().removeById(entity);
  227. this.setIgnoreLogicDelete().saveOrUpdate(entity);
  228. this.clearIgnoreLogicDelete();
  229. //版本添加
  230. ReportVersionEntity versionEntity = JsonUtil.getJsonToBean(infoVO, ReportVersionEntity.class);
  231. String versionId = RandomUtil.uuId();
  232. versionEntity.setId(versionId);
  233. versionEntity.setTemplateId(entity.getId());
  234. versionEntity.setCreatorUserId(UserProvider.getLoginUserId());
  235. versionEntity.setCreatorTime(new Date());
  236. versionEntity.setVersion(1);
  237. versionEntity.setState(0);
  238. versionEntity.setSortCode(0L);
  239. versionService.save(versionEntity);
  240. //数据集创建
  241. List<DataSetInfo> dataSetList = infoVO.getDataSetList() != null ? infoVO.getDataSetList() : new ArrayList<>();
  242. if (!dataSetList.isEmpty()) {
  243. DataForm dataForm = new DataForm();
  244. dataForm.setObjectId(versionId);
  245. dataForm.setObjectType(DataSetTypeEnum.REPORT_VER.getCode());
  246. dataForm.setList(dataSetList);
  247. ReportUtil.http(ApiConst.DATASET_SAVE, Method.POST, JsonUtil.entityToMap(dataForm));
  248. }
  249. return "";
  250. }
  251. @Override
  252. public Boolean isEncodeExist(String encode) {
  253. QueryWrapper<ReportEntity> queryWrapper = new QueryWrapper<>();
  254. queryWrapper.lambda().eq(ReportEntity::getEnCode, encode);
  255. if (!this.list(queryWrapper).isEmpty()) {
  256. return true;
  257. }
  258. return false;
  259. }
  260. public void creUpdateCheck(ReportEntity entity, Boolean fullNameCheck, Boolean encodeCheck) {
  261. String fullName = entity.getFullName();
  262. String encode = entity.getEnCode();
  263. String systemId = entity.getSystemId();
  264. // 名称长度验证
  265. if (fullName.length() > 80) {
  266. throw new DataException(MsgCode.EXIST005.get());
  267. }
  268. QueryWrapper<ReportEntity> query = new QueryWrapper<>();
  269. //重名验证
  270. if (fullNameCheck) {
  271. query.lambda().eq(ReportEntity::getFullName, fullName);
  272. query.lambda().eq(ReportEntity::getSystemId, systemId);
  273. if (!this.list(query).isEmpty()) {
  274. throw new DataException(MsgCode.EXIST003.get());
  275. }
  276. }
  277. //编码验证
  278. if (encodeCheck) {
  279. query.clear();
  280. query.lambda().eq(ReportEntity::getEnCode, encode);
  281. if (!this.list(query).isEmpty()) {
  282. throw new DataException(MsgCode.EXIST002.get());
  283. }
  284. }
  285. }
  286. }