ReportColumnServiceImpl.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package com.kcim.service.impl;
  2. import com.kcim.common.constants.Constant;
  3. import com.kcim.common.constants.NumberConstant;
  4. import com.kcim.common.enums.ComputeTypeEnum;
  5. import com.kcim.common.exception.CostException;
  6. import com.kcim.common.util.UserContext;
  7. import com.kcim.dao.model.ReportColumn;
  8. import com.kcim.dao.repository.ReportColumnRepository;
  9. import com.kcim.service.CenterService;
  10. import com.kcim.service.ReportColumnService;
  11. import com.kcim.vo.DictDataVo;
  12. import lombok.AllArgsConstructor;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.util.CollectionUtils;
  16. import org.springframework.util.StringUtils;
  17. import java.util.*;
  18. import java.util.stream.Collectors;
  19. /**
  20. * @program: CostAccount
  21. * @description: 报表设置实现类
  22. * @author: Wang.YS
  23. * @create: 2023-10-17 16:17
  24. **/
  25. @Service("ReportColumnService")
  26. @Slf4j
  27. @AllArgsConstructor
  28. public class ReportColumnServiceImpl implements ReportColumnService {
  29. ReportColumnRepository repository;
  30. CenterService centerService;
  31. /**
  32. * 基础设置-其他设置-报表项目设置-获取报表代码
  33. *
  34. * @return 报表列表
  35. */
  36. @Override
  37. public Object getReport() {
  38. DictDataVo dict = centerService.getDict(Constant.REPORT_TYPE);
  39. if(Objects.nonNull(dict)){
  40. List<DictDataVo> dataVoList = dict.getDataVoList();
  41. if(!CollectionUtils.isEmpty(dataVoList)){
  42. return dataVoList;
  43. }
  44. }
  45. return new ArrayList<>();
  46. }
  47. /**
  48. * 基础设置-其他设置-报表项目设置-获取报表列
  49. *
  50. * @param reportCode 报表代码
  51. * @return 报表列数据
  52. */
  53. @Override
  54. public Object getReportColumn(String reportCode) {
  55. List<ReportColumn> columns = repository.getByReportCode(reportCode);
  56. if(!CollectionUtils.isEmpty(columns)){
  57. matchDict(columns);
  58. //取出合计项
  59. List<ReportColumn> parent = columns.stream().filter(f -> f.getParentColumnCode().equals(NumberConstant.ZERO_L)).collect(Collectors.toList());
  60. if(!CollectionUtils.isEmpty(parent)){
  61. columns.removeAll(parent);
  62. }
  63. //按父类代码分组
  64. if(!CollectionUtils.isEmpty(columns)){
  65. Map<Long, List<ReportColumn>> collect = columns.stream().collect(Collectors.groupingBy(ReportColumn::getParentColumnCode));
  66. if(!CollectionUtils.isEmpty(parent)){
  67. for (ReportColumn reportColumn : parent) {
  68. Long columnCode = reportColumn.getColumnCode();
  69. List<ReportColumn> reportColumns = collect.get(columnCode);
  70. if(!CollectionUtils.isEmpty(reportColumns)){
  71. reportColumn.setChildColumns(reportColumns);
  72. }
  73. }
  74. return parent;
  75. }
  76. }else {
  77. if(!CollectionUtils.isEmpty(parent)){
  78. return parent;
  79. }
  80. }
  81. }
  82. return new ArrayList<>();
  83. }
  84. private void matchDict(List<ReportColumn> columns) {
  85. //获取字典数据
  86. DictDataVo reportItemType = centerService.getDict(Constant.REPORT_ITEM_TYPE);
  87. Map<String,String> reportItemTypeMap = reportItemType.getDataVoList().stream().collect(Collectors.toMap(DictDataVo::getCode, DictDataVo::getName, (a, b) -> b));
  88. DictDataVo reportRedirectPath = centerService.getDict(Constant.REPORT_REDIRECT_PATH);
  89. Map<String,String> reportRedirectPathMap = reportRedirectPath.getDataVoList().stream().collect(Collectors.toMap(DictDataVo::getCode, DictDataVo::getName, (a, b) -> b));
  90. DictDataVo reportRedirectParam = centerService.getDict(Constant.REPORT_REDIRECT_PARAM);
  91. Map<String,String> reportRedirectParamMap = reportRedirectParam.getDataVoList().stream().collect(Collectors.toMap(DictDataVo::getCode, DictDataVo::getName, (a, b) -> b));
  92. for (ReportColumn column : columns) {
  93. Integer computeType = column.getComputeType();
  94. if(computeType.equals(ComputeTypeEnum.ITEM_TYPE.getCode())){
  95. String computeSource = column.getComputeSource();
  96. column.setComputeSourceName(reportItemTypeMap.get(computeSource));
  97. column.setComputeTypeName(ComputeTypeEnum.ITEM_TYPE.getName());
  98. } else if (computeType.equals(ComputeTypeEnum.CALCULATION_FORMULA.getCode())) {
  99. column.setComputeTypeName(ComputeTypeEnum.CALCULATION_FORMULA.getName());
  100. column.setComputeSourceName(column.getComputeSource());
  101. } else if (computeType.equals(ComputeTypeEnum.SUM.getCode())) {
  102. column.setComputeTypeName(ComputeTypeEnum.SUM.getName());
  103. }
  104. String redirect = column.getRedirect();
  105. if(!StringUtils.isEmpty(redirect)){
  106. String s = reportRedirectPathMap.get(redirect);
  107. column.setRedirectName(s);
  108. }
  109. String redirectParameter = column.getRedirectParameter();
  110. //判断是否有多个
  111. if(!StringUtils.isEmpty(redirectParameter)) {
  112. if (redirectParameter.contains("|")) {
  113. String[] split = StringUtils.split(redirectParameter, "|");
  114. StringBuilder sb = new StringBuilder();
  115. if (split != null) {
  116. for (String s : split) {
  117. sb.append(reportRedirectParamMap.get(s)).append("|");
  118. }
  119. }
  120. column.setRedirectParameterName(sb.toString());
  121. } else {
  122. //单个
  123. column.setRedirectParameterName(reportRedirectParamMap.get(redirectParameter));
  124. }
  125. }
  126. }
  127. }
  128. /**
  129. * 基础设置-其他设置-报表项目设置-添加报表列
  130. *
  131. * @param column 报表列数据
  132. */
  133. @Override
  134. public void addReportColumn(ReportColumn column) {
  135. Integer computeType = column.getComputeType();
  136. //判断是否是合计
  137. if(computeType.equals(NumberConstant.THREE)){
  138. //是合计 parentCode 默认为 0
  139. column.setParentColumnCode(NumberConstant.ZERO_L);
  140. }else {
  141. //其他类型判断父类代码是否存在 如果存在不处理 不存在 添加为最上层
  142. Long parentColumnCode = column.getParentColumnCode();
  143. if(StringUtils.isEmpty(parentColumnCode)){
  144. column.setParentColumnCode(NumberConstant.ZERO_L);
  145. }
  146. }
  147. column.setCreateUser(String.valueOf(UserContext.getCurrentUser().getId()));
  148. column.setCreateTime(new Date());
  149. column.setHospId(UserContext.getHospId());
  150. column.setColumnCode(getColumnCode(column.getReportCode()));
  151. repository.save(column);
  152. }
  153. private Long getColumnCode(String reportCode) {
  154. List<ReportColumn> columns = repository.getByReportCode(reportCode);
  155. if(!CollectionUtils.isEmpty(columns)){
  156. OptionalLong max = columns.stream().mapToLong(ReportColumn::getColumnCode).max();
  157. if(max.isPresent()){
  158. long asLong = max.getAsLong();
  159. return asLong + 1L;
  160. }else {
  161. return 1L;
  162. }
  163. }else {
  164. return 1L;
  165. }
  166. }
  167. @Override
  168. public void deleteReportColumn(Integer id) {
  169. ReportColumn reportColumn = repository.getById(id);
  170. if(Objects.nonNull(reportColumn)){
  171. Long parentColumnCode = reportColumn.getParentColumnCode();
  172. if(parentColumnCode.equals(NumberConstant.ZERO_L)){
  173. List<ReportColumn> byParentCode = repository.getByParentCode(reportColumn.getColumnCode());
  174. if(!CollectionUtils.isEmpty(byParentCode)){
  175. for (ReportColumn column : byParentCode) {
  176. column.setDeleteTime(new Date());
  177. column.setDeleteUser(String.valueOf(UserContext.getCurrentUser().getId()));
  178. }
  179. repository.updateBatchById(byParentCode);
  180. List<Integer> collect = byParentCode.stream().map(ReportColumn::getId).collect(Collectors.toList());
  181. repository.removeByIds(collect);
  182. }
  183. }
  184. reportColumn.setDeleteTime(new Date());
  185. reportColumn.setDeleteUser(String.valueOf(UserContext.getCurrentUser().getId()));
  186. repository.updateById(reportColumn);
  187. repository.removeById(id);
  188. }else {
  189. throw new CostException("未找到需要删除的数据!请确认数据是否存在");
  190. }
  191. }
  192. @Override
  193. public void editReportColumn(ReportColumn column) {
  194. Integer id = column.getId();
  195. ReportColumn reportColumn = repository.getById(id);
  196. if(Objects.nonNull(reportColumn)){
  197. reportColumn.setColumnName(column.getColumnName());
  198. reportColumn.setComputeType(column.getComputeType());
  199. reportColumn.setComputeSource(column.getComputeSource());
  200. reportColumn.setSort(column.getSort());
  201. reportColumn.setDataType(column.getDataType());
  202. reportColumn.setRedirect(column.getRedirect());
  203. reportColumn.setRedirectParameter(column.getRedirectParameter());
  204. reportColumn.setUpdateUser(String.valueOf(UserContext.getCurrentUser().getId()));
  205. reportColumn.setUpdateTime(new Date());
  206. repository.updateById(reportColumn);
  207. }
  208. }
  209. }