CostNumberBedSetServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  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<String, ReportForm> reportFormMap = reportFormService.list(
  56. // new QueryWrapper<ReportForm>().lambda()
  57. // .eq(ReportForm::getHospId, hospId)).stream()
  58. // .collect(Collectors.toMap(k->k.getNum().toString()+k.getReportType().toString(), synOe -> synOe));
  59. // costNumberBedSetVOList.forEach(i->{
  60. // setName(reportFormMap, i);
  61. // });
  62. PageUtils pageUtils = new PageUtils(pages);
  63. pageUtils.setList(costNumberBedSetVOList);
  64. return pageUtils;
  65. }
  66. /**
  67. * 设置成本分摊参数的名称 相关报表的名称
  68. * @param reportFormMap
  69. * @param i
  70. */
  71. private void setName( Map<Integer, ReportForm> reportFormMap, CostNumberBedSetVO i) {
  72. Integer incomeFieldNum = i.getIncomeFieldNum();
  73. Integer costCorresponding = i.getCostCorresponding();
  74. ReportForm reportForm = reportFormMap.get(incomeFieldNum);
  75. ReportForm reportForm1 = reportFormMap.get(costCorresponding);
  76. if (Objects.nonNull(reportForm)){
  77. Integer reportType = reportForm.getReportType();
  78. String reportName = reportForm.getReportName();
  79. reportName = getString(reportType, reportName);
  80. i.setIncomeFileName(reportName);
  81. }
  82. if (Objects.nonNull(reportForm1)){
  83. Integer reportType = reportForm1.getReportType();
  84. String costCorrespondingName = reportForm1.getReportName();
  85. costCorrespondingName = getString(reportType, costCorrespondingName);
  86. i.setCostCorrespondingName(costCorrespondingName);
  87. }
  88. }
  89. /**
  90. * 根据Id获取诊次/床日设置的数据
  91. *
  92. * @param id
  93. * @return
  94. */
  95. @Override
  96. public CostNumberBedSetVO getByNumberBedId(Long id) {
  97. Long hospId = UserContext.getHospId();
  98. CostNumberBedSet costNumberBedSet = this.getById(id);
  99. if (Objects.isNull(costNumberBedSet)){
  100. throw new CostException(500,"数据不存在");
  101. }
  102. Map<Integer, ReportForm> reportFormMap = reportFormService.list(new QueryWrapper<ReportForm>().lambda().eq(ReportForm::getHospId, hospId)).stream().collect(Collectors.toMap(ReportForm::getNum, synOe -> synOe));
  103. CostNumberBedSetVO costNumberBedSetVO = BeanUtil.convertObj(costNumberBedSet, CostNumberBedSetVO.class);
  104. setName(reportFormMap,costNumberBedSetVO);
  105. return costNumberBedSetVO;
  106. }
  107. private String getString(Integer reportType, String reportName) {
  108. switch (reportType) {
  109. case 0:
  110. reportName = "损益表" + reportName;
  111. break;
  112. case 1:
  113. reportName = "完全成本法表" + reportName;
  114. break;
  115. case 2:
  116. reportName = "变动成本表" + reportName;
  117. break;
  118. case 3:
  119. reportName = "全院损益表" + reportName;
  120. break;
  121. case 4:
  122. reportName = "全成本报表" + reportName;
  123. break;
  124. default:
  125. reportName = "";
  126. }
  127. return reportName;
  128. }
  129. /**
  130. * 添加诊次/床日设置的数据
  131. * 后期要考虑支持多选
  132. * @param costNumberBedSetSaveDto
  133. * @param hospId
  134. */
  135. @Override
  136. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  137. public void addNumberBedSet(CostNumberBedSetSaveDto costNumberBedSetSaveDto, Long hospId) {
  138. String shareParamCodes = costNumberBedSetSaveDto.getShareParamCode();
  139. Integer incomeFieldNums = costNumberBedSetSaveDto.getIncomeFieldNum();
  140. CostNumberBedSet costNumberBedSet = this.getOne(new QueryWrapper<CostNumberBedSet>().lambda().eq(CostNumberBedSet::getHospId, hospId)
  141. .eq(CostNumberBedSet::getShareParamCode, shareParamCodes)
  142. .eq(CostNumberBedSet::getIncomeFieldNum, incomeFieldNums));
  143. if (Objects.nonNull(costNumberBedSet)){
  144. throw new CostException(500,"数据已经存在");
  145. }
  146. CostNumberBedSet costNumberBedSetRequest = BeanUtil.convertObj(costNumberBedSetSaveDto, CostNumberBedSet.class);
  147. costNumberBedSetRequest.setCreateTime(System.currentTimeMillis());
  148. costNumberBedSetRequest.setHospId(hospId);
  149. this.save(costNumberBedSetRequest);
  150. }
  151. /**
  152. * 修改诊次/床日的设置数据
  153. *
  154. * @param costNumberBedSetEditDto
  155. * @param hospId
  156. */
  157. @Override
  158. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  159. public void updateNumberBedById(CostNumberBedSetEditDto costNumberBedSetEditDto, Long hospId) {
  160. Long id = costNumberBedSetEditDto.getId();
  161. CostNumberBedSet costNumberBedSet = this.getById(id);
  162. if (Objects.isNull(costNumberBedSet)){
  163. throw new CostException(500,"原始数据不存在");
  164. }
  165. String shareParamCodes = costNumberBedSetEditDto.getShareParamCode();
  166. Integer incomeFieldNums = costNumberBedSetEditDto.getIncomeFieldNum();
  167. this.removeById(id);
  168. CostNumberBedSet costNumberBedSetResponse = this.getOne(new QueryWrapper<CostNumberBedSet>().lambda().eq(CostNumberBedSet::getHospId, hospId)
  169. .eq(CostNumberBedSet::getShareParamCode, shareParamCodes)
  170. .eq(CostNumberBedSet::getIncomeFieldNum, incomeFieldNums));
  171. if (Objects.nonNull(costNumberBedSetResponse)){
  172. throw new CostException(500,"数据已经存在");
  173. }
  174. CostNumberBedSet costNumberBedSetRequest = BeanUtil.convertObj(costNumberBedSetEditDto, CostNumberBedSet.class);
  175. costNumberBedSetRequest.setHospId(hospId);
  176. costNumberBedSetRequest.setCreateTime(System.currentTimeMillis());
  177. costNumberBedSetRequest.setId(null);
  178. this.save(costNumberBedSetRequest);
  179. }
  180. /**
  181. * 获取当前诊次/床日设置里面关联的成本分摊参数
  182. *
  183. * @param id
  184. * @param hospId
  185. * @return
  186. */
  187. @Override
  188. public List<CheckShareParamStatusVO> checkStatus(Long id, Long hospId) {
  189. List<CostShareParam> costShareParamList = costShareParamService.list(new QueryWrapper<CostShareParam>().lambda()
  190. .eq(CostShareParam::getHospId, hospId));
  191. CostNumberBedSet costNumberBedSet = this.getById(id);
  192. String shareParamCode=null;
  193. if (Objects.nonNull(costNumberBedSet)){
  194. shareParamCode = costNumberBedSet.getShareParamCode();
  195. }
  196. List<CheckShareParamStatusVO> checkShareParamStatusVOList = BeanUtil.convertList(costShareParamList, CheckShareParamStatusVO.class);
  197. String finalShareParamCode = shareParamCode;
  198. checkShareParamStatusVOList.forEach(i->{
  199. String code = i.getShareParamCode();
  200. if (code.equals(finalShareParamCode)){
  201. i.setShareParamNumberBedSetStatus(NumberConstant.ONE);
  202. }
  203. });
  204. return checkShareParamStatusVOList;
  205. }
  206. /**
  207. * 获取报表 显示报表被选中的状态
  208. *
  209. * @param reportType 报表类型
  210. * @param hospId 医院Id
  211. * @param id
  212. * @return
  213. */
  214. @Override
  215. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  216. public List<ReportFormVO> getReportNumberBedStatus(Integer reportType, Long hospId, Integer id) {
  217. List<ReportForm> list = reportFormService.list(new QueryWrapper<ReportForm>().lambda()
  218. .eq(ReportForm::getReportType, reportType)
  219. .eq(ReportForm::getHospId, hospId)
  220. .orderByAsc(ReportForm::getSort));
  221. if (CollUtil.isEmpty(list)) {
  222. return Collections.emptyList();
  223. }
  224. List<ReportFormVO> reportFormVOS = list.stream().map(i -> {
  225. ReportFormVO reportFormVO = BeanUtil.convertObj(i, ReportFormVO.class);
  226. if (i.getCalcType() == 1) {
  227. reportFormVO.setShowAddRelation(1);
  228. } else if (i.getCalcType() == 2) {
  229. reportFormVO.setShowAddRelation(2);
  230. }
  231. return reportFormVO;
  232. }).collect(Collectors.toList());
  233. if (Objects.nonNull(id)){
  234. CostNumberBedSet costNumberBedSet = this.getById(id);
  235. if (Objects.nonNull(costNumberBedSet)){
  236. Integer incomeFieldNum = costNumberBedSet.getIncomeFieldNum();
  237. Integer costCorresponding = costNumberBedSet.getCostCorresponding();
  238. reportFormVOS.forEach(i->{
  239. if (incomeFieldNum.equals(i.getNum()) && NumberConstant.ZERO.equals(reportType)){
  240. i.setReportNumberSetStatus(NumberConstant.ONE);
  241. }else if (costCorresponding.equals(i.getNum()) && NumberConstant.THREE.equals(reportType)){
  242. i.setReportNumberSetStatus(NumberConstant.ONE);
  243. }
  244. });
  245. }
  246. }
  247. List<ReportFormVO> roots = reportFormVOS.stream().filter(i -> i.getParentId() == 0L).collect(Collectors.toList());
  248. for (ReportFormVO root : roots) {
  249. List<ReportFormVO> children = root.getChildren();
  250. if (CollUtil.isEmpty(children)) {
  251. children = new ArrayList<>();
  252. }
  253. for (ReportFormVO reportFormVO : reportFormVOS) {
  254. if (reportFormVO.getParentId().equals(root.getId())) {
  255. children.add(reportFormVO);
  256. // this.setRelation(reportFormVO, user.getHospId());
  257. }
  258. }
  259. root.setChildren(children);
  260. }
  261. return roots;
  262. }
  263. }