CostShareParamServiceImpl.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package com.imed.costaccount.service.impl;
  2. import cn.hutool.core.collection.CollectionUtil;
  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.AccountingMapper;
  13. import com.imed.costaccount.mapper.CostShareParamMapper;
  14. import com.imed.costaccount.model.Accounting;
  15. import com.imed.costaccount.model.CostShareParam;
  16. import com.imed.costaccount.model.dto.CostShareParamAccountDto;
  17. import com.imed.costaccount.model.dto.CostShareParamEditDto;
  18. import com.imed.costaccount.model.dto.CostShareParamSaveDto;
  19. import com.imed.costaccount.model.vo.CostShareParamVO;
  20. import com.imed.costaccount.service.CostShareParamService;
  21. import io.swagger.annotations.ApiOperation;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Propagation;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import org.springframework.util.CollectionUtils;
  26. import org.springframework.util.StringUtils;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. @Service("costShareParamService")
  30. public class CostShareParamServiceImpl extends ServiceImpl<CostShareParamMapper, CostShareParam> implements CostShareParamService {
  31. private final AccountingMapper accountingMapper;
  32. public CostShareParamServiceImpl(AccountingMapper accountingMapper) {
  33. this.accountingMapper = accountingMapper;
  34. }
  35. /**
  36. * 分页查询相关的分摊参数数据
  37. *
  38. * @param current
  39. * @param pageSize
  40. * @param name
  41. * @return
  42. */
  43. @Override
  44. public PageUtils queryList(Integer current, Integer pageSize, String name,Long hospId) {
  45. Page<CostShareParam> costShareParamPage = new Page<>(current, pageSize);
  46. Page<CostShareParam> pages = this.page(costShareParamPage, new QueryWrapper<CostShareParam>().lambda()
  47. .eq(!StringUtils.isEmpty(hospId), CostShareParam::getHospId, hospId)
  48. .like(!StringUtils.isEmpty(name), CostShareParam::getShareParamName, name).orderByDesc(CostShareParam::getCreateTime))
  49. ;
  50. List<CostShareParam> records = pages.getRecords();
  51. List<CostShareParamVO> costShareParamVOList = BeanUtil.convertList(records, CostShareParamVO.class);
  52. PageUtils pageUtils = new PageUtils(pages);
  53. pageUtils.setList(costShareParamVOList);
  54. return pageUtils;
  55. }
  56. /**
  57. * 保存分摊参数
  58. * 保存的时候需要校验分摊参数
  59. * @param costShareParamSaveDto
  60. */
  61. @Override
  62. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  63. public void addCostShareParam(CostShareParamSaveDto costShareParamSaveDto) {
  64. //检验分摊参数是存在
  65. getCostShareParamByCode(costShareParamSaveDto);
  66. CostShareParam costShareParam = BeanUtil.convertObj(costShareParamSaveDto, CostShareParam.class);
  67. costShareParam.setCreateTime(System.currentTimeMillis());
  68. baseMapper.insert(costShareParam);
  69. }
  70. /**
  71. * 检验分摊参数是存在
  72. */
  73. private void getCostShareParamByCode(CostShareParamSaveDto costShareParamSaveDto) {
  74. List<CostShareParam> costShareParamList = baseMapper.selectList(new QueryWrapper<CostShareParam>().lambda()
  75. .eq(CostShareParam::getHospId, costShareParamSaveDto.getHospId()));
  76. // 检验添加的分摊参数是否存在
  77. if (!CollectionUtils.isEmpty(costShareParamList)){
  78. Map<String, List<CostShareParam>> costShareMap = costShareParamList.stream().collect(Collectors.groupingBy(CostShareParam::getShareParamCode));
  79. if (!CollectionUtils.isEmpty(costShareMap.get(costShareParamSaveDto.getShareParamCode()))){
  80. throw new CostException(500,"分摊参数已存在");
  81. }
  82. }
  83. }
  84. /**
  85. * 修改分摊参数
  86. *
  87. * @param costShareParamEditDto
  88. */
  89. @Override
  90. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  91. public void updateCostShareParam(CostShareParamEditDto costShareParamEditDto) {
  92. Long id = costShareParamEditDto.getId();
  93. CostShareParam costShareParam = baseMapper.selectById(id);
  94. if (Objects.isNull(costShareParam)){
  95. throw new CostException(500,"对不起分摊参数不存在");
  96. }
  97. baseMapper.deleteById(id);
  98. // 判断当前输入的Code以最初的Code是否一样
  99. List<CostShareParam> costShareParamList = baseMapper.selectList(new QueryWrapper<CostShareParam>().lambda().select(CostShareParam::getShareParamCode).eq(CostShareParam::getHospId, costShareParamEditDto.getHospId()));
  100. Map<String, List<CostShareParam>> map = costShareParamList.stream().collect(Collectors.groupingBy(CostShareParam::getShareParamCode));
  101. if (!CollectionUtils.isEmpty(map.get(costShareParamEditDto.getShareParamCode()))){
  102. throw new CostException(500,"对不起分摊参数代码已存在");
  103. }
  104. CostShareParam costShareParamRequest = BeanUtil.convertObj(costShareParamEditDto, CostShareParam.class);
  105. costShareParamRequest.setId(null);
  106. costShareParamRequest.setCreateTime(System.currentTimeMillis());
  107. if (NumberConstant.ONE.equals( costShareParamEditDto.getShareParamCode()) && NumberConstant.ONE.equals(costShareParamEditDto.getShareParamCode())){
  108. costShareParamRequest.setAccountingId(costShareParam.getAccountingId());
  109. }
  110. baseMapper.insert(costShareParamRequest);
  111. }
  112. /**
  113. * 为按照科目的计算方式添加成本科目
  114. *
  115. * @param costShareParamAccountDto
  116. * @return
  117. */
  118. @Override
  119. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  120. public CostShareParam updateCostShareParamByAccountId(CostShareParamAccountDto costShareParamAccountDto) {
  121. Long hospId = UserContext.getHospId();
  122. Long costShareParamId = costShareParamAccountDto.getCostShareParamId();
  123. CostShareParam costShareParam = baseMapper.selectById(costShareParamId);
  124. List<String> accoutingCodes = new LinkedList<>();
  125. Map<Long, String> accountingMap = accountingMapper.selectList(new QueryWrapper<Accounting>().lambda().eq(Accounting::getHospId, hospId)).stream().collect(Collectors.toMap(Accounting::getId, Accounting::getAccountingCode));
  126. // 判断当前操作的分层参数的计算方式是不是按科目计算
  127. if (NumberConstant.TWO.equals(costShareParam.getCalcType())){
  128. String[] accountIds = costShareParamAccountDto.getAccountIds();
  129. List<String> accountList = Arrays.asList(accountIds);
  130. if (!CollectionUtil.isEmpty(accountList)){
  131. String accountingIds = accountList.stream().map(String::valueOf).collect(Collectors.joining(StrUtil.COMMA));
  132. costShareParam.setAccountingId(accountingIds);
  133. accountList.forEach(i->{
  134. String accountCode = accountingMap.get(Long.parseLong(i));
  135. accoutingCodes.add(accountCode);
  136. });
  137. costShareParam.setAccountingCodes(accoutingCodes.stream().map(String::valueOf).collect(Collectors.joining(StrUtil.COMMA)));
  138. }else {
  139. costShareParam.setAccountingId(null);
  140. }
  141. baseMapper.updateById(costShareParam);
  142. }else {
  143. throw new CostException(500,"计算方式不是按会计科目计算");
  144. }
  145. return null;
  146. }
  147. /**
  148. * 获取所有分摊参数的集合信息
  149. *
  150. * @param hospId
  151. * @return
  152. */
  153. @Override
  154. @ApiOperation("获取所有的分摊参数的集合数据")
  155. public List<CostShareParamVO> getAll(Long hospId) {
  156. List<CostShareParam> costShareParamList = baseMapper.selectList(new QueryWrapper<CostShareParam>().lambda()
  157. .eq(CostShareParam::getHospId, hospId));
  158. List<CostShareParamVO> costShareParamVOList = BeanUtil.convertList(costShareParamList, CostShareParamVO.class);
  159. return costShareParamVOList;
  160. }
  161. /**
  162. * 根据医院的Id分摊参数的ID获取对应的分摊参数的数据
  163. *
  164. * @param id
  165. * @param hospId
  166. * @return
  167. */
  168. @Override
  169. public CostShareParamVO getByHospIdAndAPramId(Integer id, Long hospId) {
  170. CostShareParam costShareParam = baseMapper.selectOne(new QueryWrapper<CostShareParam>().lambda()
  171. .eq(CostShareParam::getHospId, hospId)
  172. .eq(CostShareParam::getId, id));
  173. CostShareParamVO costShareParamVO = BeanUtil.convertObj(costShareParam, CostShareParamVO.class);
  174. return costShareParamVO;
  175. }
  176. @Override
  177. public List<Long> selectIsSelect(Integer shareParamId) {
  178. CostShareParam byId = this.getById(shareParamId);
  179. if (Objects.isNull(byId)) {
  180. return Collections.emptyList();
  181. }
  182. String accountingId = byId.getAccountingId();
  183. if (!StringUtils.isEmpty(accountingId)){
  184. String[] split = accountingId.split(StrUtil.COMMA);
  185. List<Long> accountingIdList = Arrays.stream(split).map(Long::valueOf).collect(Collectors.toList());
  186. return accountingIdList;
  187. }else {
  188. return Collections.emptyList();
  189. }
  190. }
  191. }