CostNumberBedSetServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. package com.imed.costaccount.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.imed.costaccount.common.exception.CostException;
  8. import com.imed.costaccount.common.util.BeanUtil;
  9. import com.imed.costaccount.common.util.PageUtils;
  10. import com.imed.costaccount.common.util.UserContext;
  11. import com.imed.costaccount.constants.NumberConstant;
  12. import com.imed.costaccount.mapper.CostNumberBedSetMapper;
  13. import com.imed.costaccount.model.CostNumberBedSet;
  14. import com.imed.costaccount.model.CostShareParam;
  15. import com.imed.costaccount.model.ReportForm;
  16. import com.imed.costaccount.model.dto.CostNumberBedSetEditDto;
  17. import com.imed.costaccount.model.dto.CostNumberBedSetSaveDto;
  18. import com.imed.costaccount.model.vo.CheckShareParamStatusVO;
  19. import com.imed.costaccount.model.vo.CostNumberBedSetVO;
  20. import com.imed.costaccount.model.vo.ReportFormVO;
  21. import com.imed.costaccount.service.CostNumberBedSetService;
  22. import com.imed.costaccount.service.CostShareParamService;
  23. import com.imed.costaccount.service.ReportFormService;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Propagation;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. @Service("costNumberBedSetService")
  30. public class CostNumberBedSetServiceImpl extends ServiceImpl<CostNumberBedSetMapper, CostNumberBedSet> implements CostNumberBedSetService {
  31. private final CostShareParamService costShareParamService;
  32. private final ReportFormService reportFormService;
  33. public CostNumberBedSetServiceImpl(CostShareParamService costShareParamService, ReportFormService reportFormService) {
  34. this.costShareParamService = costShareParamService;
  35. this.reportFormService = reportFormService;
  36. }
  37. /**
  38. * 分页查询诊次/床日设置
  39. *
  40. * @param current
  41. * @param pageSize
  42. * @param name
  43. * @param hospId
  44. * @return
  45. */
  46. @Override
  47. public PageUtils queryList(Integer current, Integer pageSize, String name, Long hospId) {
  48. Page<CostNumberBedSet> costNumberBedSetPage = new Page<>(current, pageSize);
  49. Page<CostNumberBedSet> pages = this.page(costNumberBedSetPage, new QueryWrapper<CostNumberBedSet>().lambda()
  50. .eq(CostNumberBedSet::getHospId, hospId)
  51. .like(StrUtil.isNotBlank(name),CostNumberBedSet::getIncomeFileName,name));
  52. List<CostNumberBedSet> records = pages.getRecords();
  53. List<CostNumberBedSetVO> costNumberBedSetVOList = BeanUtil.convertList(records, CostNumberBedSetVO.class);
  54. // 具体的名称根据Code Id 进行获取
  55. Map<Integer, ReportForm> reportFormMap = reportFormService.list(new QueryWrapper<ReportForm>().lambda().eq(ReportForm::getHospId, hospId)).stream().collect(Collectors.toMap(ReportForm::getNum, synOe -> synOe));
  56. costNumberBedSetVOList.forEach(i->{
  57. setName(reportFormMap, i);
  58. });
  59. PageUtils pageUtils = new PageUtils(pages);
  60. pageUtils.setList(costNumberBedSetVOList);
  61. return pageUtils;
  62. }
  63. /**
  64. * 设置成本分摊参数的名称 相关报表的名称
  65. * @param reportFormMap
  66. * @param i
  67. */
  68. private void setName( Map<Integer, ReportForm> reportFormMap, CostNumberBedSetVO i) {
  69. Integer incomeFieldNum = i.getIncomeFieldNum();
  70. Integer costCorresponding = i.getCostCorresponding();
  71. ReportForm reportForm = reportFormMap.get(incomeFieldNum);
  72. ReportForm reportForm1 = reportFormMap.get(costCorresponding);
  73. if (Objects.nonNull(reportForm)){
  74. Integer reportType = reportForm.getReportType();
  75. String reportName = reportForm.getReportName();
  76. reportName = getString(reportType, reportName);
  77. i.setIncomeFileName(reportName);
  78. }
  79. if (Objects.nonNull(reportForm1)){
  80. Integer reportType = reportForm1.getReportType();
  81. String costCorrespondingName = reportForm1.getReportName();
  82. costCorrespondingName = getString(reportType, costCorrespondingName);
  83. i.setCostCorrespondingName(costCorrespondingName);
  84. }
  85. }
  86. /**
  87. * 根据Id获取诊次/床日设置的数据
  88. *
  89. * @param id
  90. * @return
  91. */
  92. @Override
  93. public CostNumberBedSetVO getByNumberBedId(Long id) {
  94. Long hospId = UserContext.getHospId();
  95. CostNumberBedSet costNumberBedSet = this.getById(id);
  96. if (Objects.isNull(costNumberBedSet)){
  97. throw new CostException(500,"数据不存在");
  98. }
  99. Map<Integer, ReportForm> reportFormMap = reportFormService.list(new QueryWrapper<ReportForm>().lambda().eq(ReportForm::getHospId, hospId)).stream().collect(Collectors.toMap(ReportForm::getNum, synOe -> synOe));
  100. CostNumberBedSetVO costNumberBedSetVO = BeanUtil.convertObj(costNumberBedSet, CostNumberBedSetVO.class);
  101. setName(reportFormMap,costNumberBedSetVO);
  102. return costNumberBedSetVO;
  103. }
  104. private String getString(Integer reportType, String reportName) {
  105. switch (reportType) {
  106. case 0:
  107. reportName = "损益表" + reportName;
  108. break;
  109. case 1:
  110. reportName = "完全成本法表" + reportName;
  111. break;
  112. case 2:
  113. reportName = "变动成本表" + reportName;
  114. break;
  115. case 3:
  116. reportName = "全院损益表" + reportName;
  117. break;
  118. case 4:
  119. reportName = "全成本报表" + reportName;
  120. break;
  121. default:
  122. reportName = "";
  123. }
  124. return reportName;
  125. }
  126. /**
  127. * 添加诊次/床日设置的数据
  128. * 后期要考虑支持多选
  129. * @param costNumberBedSetSaveDto
  130. * @param hospId
  131. */
  132. @Override
  133. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  134. public void addNumberBedSet(CostNumberBedSetSaveDto costNumberBedSetSaveDto, Long hospId) {
  135. String shareParamCodes = costNumberBedSetSaveDto.getShareParamCode();
  136. Integer incomeFieldNums = costNumberBedSetSaveDto.getIncomeFieldNum();
  137. CostNumberBedSet costNumberBedSet = this.getOne(new QueryWrapper<CostNumberBedSet>().lambda().eq(CostNumberBedSet::getHospId, hospId)
  138. .eq(CostNumberBedSet::getShareParamCode, shareParamCodes)
  139. .eq(CostNumberBedSet::getIncomeFieldNum, incomeFieldNums));
  140. if (Objects.nonNull(costNumberBedSet)){
  141. throw new CostException(500,"数据已经存在");
  142. }
  143. CostNumberBedSet costNumberBedSetRequest = BeanUtil.convertObj(costNumberBedSetSaveDto, CostNumberBedSet.class);
  144. costNumberBedSetRequest.setCreateTime(System.currentTimeMillis());
  145. costNumberBedSetRequest.setHospId(hospId);
  146. this.save(costNumberBedSetRequest);
  147. }
  148. /**
  149. * 修改诊次/床日的设置数据
  150. *
  151. * @param costNumberBedSetEditDto
  152. * @param hospId
  153. */
  154. @Override
  155. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  156. public void updateNumberBedById(CostNumberBedSetEditDto costNumberBedSetEditDto, Long hospId) {
  157. Long id = costNumberBedSetEditDto.getId();
  158. CostNumberBedSet costNumberBedSet = this.getById(id);
  159. if (Objects.isNull(costNumberBedSet)){
  160. throw new CostException(500,"原始数据不存在");
  161. }
  162. String shareParamCodes = costNumberBedSetEditDto.getShareParamCode();
  163. Integer incomeFieldNums = costNumberBedSetEditDto.getIncomeFieldNum();
  164. this.removeById(id);
  165. CostNumberBedSet costNumberBedSetResponse = this.getOne(new QueryWrapper<CostNumberBedSet>().lambda().eq(CostNumberBedSet::getHospId, hospId)
  166. .eq(CostNumberBedSet::getShareParamCode, shareParamCodes)
  167. .eq(CostNumberBedSet::getIncomeFieldNum, incomeFieldNums));
  168. if (Objects.nonNull(costNumberBedSetResponse)){
  169. throw new CostException(500,"数据已经存在");
  170. }
  171. CostNumberBedSet costNumberBedSetRequest = BeanUtil.convertObj(costNumberBedSetEditDto, CostNumberBedSet.class);
  172. costNumberBedSetRequest.setHospId(hospId);
  173. costNumberBedSetRequest.setCreateTime(System.currentTimeMillis());
  174. costNumberBedSetRequest.setId(null);
  175. this.save(costNumberBedSetRequest);
  176. }
  177. /**
  178. * 获取当前诊次/床日设置里面关联的成本分摊参数
  179. *
  180. * @param id
  181. * @param hospId
  182. * @return
  183. */
  184. @Override
  185. public List<CheckShareParamStatusVO> checkStatus(Long id, Long hospId) {
  186. List<CostShareParam> costShareParamList = costShareParamService.list(new QueryWrapper<CostShareParam>().lambda()
  187. .eq(CostShareParam::getHospId, hospId));
  188. CostNumberBedSet costNumberBedSet = this.getById(id);
  189. String shareParamCode=null;
  190. if (Objects.nonNull(costNumberBedSet)){
  191. shareParamCode = costNumberBedSet.getShareParamCode();
  192. }
  193. List<CheckShareParamStatusVO> checkShareParamStatusVOList = BeanUtil.convertList(costShareParamList, CheckShareParamStatusVO.class);
  194. String finalShareParamCode = shareParamCode;
  195. checkShareParamStatusVOList.forEach(i->{
  196. String code = i.getShareParamCode();
  197. if (code.equals(finalShareParamCode)){
  198. i.setShareParamNumberBedSetStatus(NumberConstant.ONE);
  199. }
  200. });
  201. return checkShareParamStatusVOList;
  202. }
  203. /**
  204. * 获取报表 显示报表被选中的状态
  205. *
  206. * @param reportType 报表类型
  207. * @param hospId 医院Id
  208. * @param id
  209. * @return
  210. */
  211. @Override
  212. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  213. public List<ReportFormVO> getReportNumberBedStatus(Integer reportType, Long hospId, Integer id) {
  214. List<ReportForm> list = reportFormService.list(new QueryWrapper<ReportForm>().lambda()
  215. .eq(ReportForm::getReportType, reportType)
  216. .eq(ReportForm::getHospId, hospId)
  217. .orderByAsc(ReportForm::getSort));
  218. if (CollUtil.isEmpty(list)) {
  219. return Collections.emptyList();
  220. }
  221. List<ReportFormVO> reportFormVOS = list.stream().map(i -> {
  222. ReportFormVO reportFormVO = BeanUtil.convertObj(i, ReportFormVO.class);
  223. if (i.getCalcType() == 1) {
  224. reportFormVO.setShowAddRelation(1);
  225. } else if (i.getCalcType() == 2) {
  226. reportFormVO.setShowAddRelation(2);
  227. }
  228. return reportFormVO;
  229. }).collect(Collectors.toList());
  230. if (Objects.nonNull(id)){
  231. CostNumberBedSet costNumberBedSet = this.getById(id);
  232. if (Objects.nonNull(costNumberBedSet)){
  233. Integer incomeFieldNum = costNumberBedSet.getIncomeFieldNum();
  234. Integer costCorresponding = costNumberBedSet.getCostCorresponding();
  235. reportFormVOS.forEach(i->{
  236. if (incomeFieldNum.equals(i.getNum()) && NumberConstant.ZERO.equals(reportType)){
  237. i.setReportNumberSetStatus(NumberConstant.ONE);
  238. }else if (costCorresponding.equals(i.getNum()) && NumberConstant.THREE.equals(reportType)){
  239. i.setReportNumberSetStatus(NumberConstant.ONE);
  240. }
  241. });
  242. }
  243. }
  244. List<ReportFormVO> roots = reportFormVOS.stream().filter(i -> i.getParentId() == 0L).collect(Collectors.toList());
  245. for (ReportFormVO root : roots) {
  246. List<ReportFormVO> children = root.getChildren();
  247. if (CollUtil.isEmpty(children)) {
  248. children = new ArrayList<>();
  249. }
  250. for (ReportFormVO reportFormVO : reportFormVOS) {
  251. if (reportFormVO.getParentId().equals(root.getId())) {
  252. children.add(reportFormVO);
  253. // this.setRelation(reportFormVO, user.getHospId());
  254. }
  255. }
  256. root.setChildren(children);
  257. }
  258. return roots;
  259. }
  260. }