CostIncomeGroupSetServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  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.constants.NumberConstant;
  11. import com.imed.costaccount.mapper.CostIncomeGroupSetMapper;
  12. import com.imed.costaccount.model.CostIncomeGroupSet;
  13. import com.imed.costaccount.model.Responsibility;
  14. import com.imed.costaccount.model.dto.CostIncomeGroupSetEditDto;
  15. import com.imed.costaccount.model.dto.CostIncomeGroupSetSaveDto;
  16. import com.imed.costaccount.model.dto.IncomeAccountDto;
  17. import com.imed.costaccount.model.vo.CostIncomeGroupSetVO;
  18. import com.imed.costaccount.service.CostIncomeGroupSetService;
  19. import com.imed.costaccount.service.ResponsibilityService;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Propagation;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import org.springframework.util.CollectionUtils;
  24. import org.springframework.util.StringUtils;
  25. import java.util.*;
  26. import java.util.stream.Collectors;
  27. @Service("costIncomeGroupSetService")
  28. public class CostIncomeGroupSetServiceImpl extends ServiceImpl<CostIncomeGroupSetMapper, CostIncomeGroupSet> implements CostIncomeGroupSetService {
  29. private final ResponsibilityService responsibilityService;
  30. public CostIncomeGroupSetServiceImpl(ResponsibilityService responsibilityService) {
  31. this.responsibilityService = responsibilityService;
  32. }
  33. /**
  34. * 分页查询
  35. *
  36. * @param current 当前页
  37. * @param pageSize 每一页大小
  38. * @param hospId 医院Id
  39. * @return PageUtils
  40. */
  41. @Override
  42. public PageUtils queryList(Integer current, Integer pageSize, Long hospId) {
  43. Page<CostIncomeGroupSet> costIncomeGroupSetPage = new Page<>(current, pageSize);
  44. Page<CostIncomeGroupSet> pages = this.page(costIncomeGroupSetPage, new QueryWrapper<CostIncomeGroupSet>().lambda()
  45. .eq(CostIncomeGroupSet::getHospId, hospId)
  46. .orderByDesc(CostIncomeGroupSet::getCreateTime));
  47. List<CostIncomeGroupSet> records = pages.getRecords();
  48. List<Responsibility> responsibilityList = responsibilityService.list(new QueryWrapper<Responsibility>().lambda()
  49. .eq(Responsibility::getHospId, hospId));
  50. List<CostIncomeGroupSetVO> costIncomeGroupSetVOList = BeanUtil.convertList(records, CostIncomeGroupSetVO.class);
  51. if (!CollectionUtils.isEmpty(responsibilityList)) {
  52. Map<String, List<Responsibility>> listMap = responsibilityList.stream().collect(Collectors.groupingBy(Responsibility::getResponsibilityCode));
  53. costIncomeGroupSetVOList.forEach(i -> {
  54. String responsibilityCode = i.getResponsibilityCode();
  55. if (!StringUtils.isEmpty(responsibilityCode)) {
  56. List<Responsibility> responsibilities = listMap.get(responsibilityCode);
  57. if (!CollectionUtils.isEmpty(responsibilities)) {
  58. i.setResponsibilityName(responsibilities.get(0).getResponsibilityName());
  59. }
  60. }
  61. });
  62. }
  63. PageUtils pageUtils = new PageUtils(pages);
  64. pageUtils.setList(costIncomeGroupSetVOList);
  65. return pageUtils;
  66. }
  67. /**
  68. * 根据Id获取对应的收入归集设置的数据
  69. *
  70. * @param id 收入归集设置的Id
  71. * @param hospId 医院的Id
  72. * @return CostIncomeGroupSetVO
  73. */
  74. @Override
  75. public CostIncomeGroupSetVO getByIncomeGroupId(Long id, Long hospId) {
  76. CostIncomeGroupSet costIncomeGroupSet = baseMapper.selectById(id);
  77. if (Objects.isNull(costIncomeGroupSet)) {
  78. return null;
  79. }
  80. CostIncomeGroupSetVO costIncomeGroupSetVO = BeanUtil.convertObj(costIncomeGroupSet, CostIncomeGroupSetVO.class);
  81. List<Responsibility> responsibilityList = responsibilityService.list(new QueryWrapper<Responsibility>().lambda()
  82. .eq(Responsibility::getHospId, hospId));
  83. if (!CollectionUtils.isEmpty(responsibilityList)) {
  84. Map<String, List<Responsibility>> listMap = responsibilityList.stream().collect(Collectors.groupingBy(Responsibility::getResponsibilityCode));
  85. String responsibilityCode = costIncomeGroupSetVO.getResponsibilityCode();
  86. if (!StringUtils.isEmpty(responsibilityCode)) {
  87. List<Responsibility> responsibilities = listMap.get(responsibilityCode);
  88. if (!CollectionUtils.isEmpty(responsibilities)) {
  89. costIncomeGroupSetVO.setResponsibilityName(responsibilities.get(0).getResponsibilityName());
  90. }
  91. }
  92. }
  93. return costIncomeGroupSetVO;
  94. }
  95. /**
  96. * 保存收入归集设置的数据
  97. *
  98. * @param costIncomeGroupSetSaveDto
  99. */
  100. @Override
  101. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  102. public void addCostIncomeGroupSet(CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto, Long hospId) {
  103. // 检验输入的数据是否符合要求
  104. checkIncomeGroupSet(costIncomeGroupSetSaveDto, hospId);
  105. CostIncomeGroupSet costIncomeGroupSet = BeanUtil.convertObj(costIncomeGroupSetSaveDto, CostIncomeGroupSet.class);
  106. costIncomeGroupSet.setCreateTime(System.currentTimeMillis());
  107. costIncomeGroupSet.setHospId(hospId);
  108. baseMapper.insert(costIncomeGroupSet);
  109. }
  110. /**
  111. * 检验输入的数据是否符合要求
  112. * @param costIncomeGroupSetSaveDto 需要保存的收入归集设置的数据
  113. * @param hospId 医院Id
  114. */
  115. private void checkIncomeGroupSet(CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto, Long hospId) {
  116. Integer sum = costIncomeGroupSetSaveDto.getOpenDepartmentProportion() + costIncomeGroupSetSaveDto.getStartDepartmentProportion();
  117. if (!NumberConstant.ONE_HUNDRED.equals(sum)) {
  118. throw new CostException(500, "输入的比例和不是100");
  119. }
  120. if (NumberConstant.TWO.equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus())
  121. && NumberConstant.TWO.equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())) {
  122. if (StringUtils.isEmpty(costIncomeGroupSetSaveDto.getResponsibilityCode())){
  123. throw new CostException(500, "两个成本中心需要输入对应的责任中心");
  124. }else {
  125. costIncomeGroupSetSaveDto.setOpenDepartmentProportion(NumberConstant.ZERO);
  126. costIncomeGroupSetSaveDto.setStartDepartmentProportion(NumberConstant.ZERO);
  127. }
  128. }
  129. if (!StringUtils.isEmpty(costIncomeGroupSetSaveDto.getResponsibilityCode())){
  130. if (NumberConstant.ONE.equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus()) ||
  131. NumberConstant.ONE.equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())){
  132. throw new CostException(500,"存在收益中心 不允许设置责任中心");
  133. }
  134. }
  135. // 检验原始数据里面是否存在
  136. List<CostIncomeGroupSet> costIncomeGroupSets = baseMapper.selectList(new QueryWrapper<CostIncomeGroupSet>().lambda()
  137. .eq(CostIncomeGroupSet::getHospId, hospId));
  138. List<CostIncomeGroupSet> costIncomeGroupSetList = costIncomeGroupSets.stream().filter(i ->
  139. i.getOpenDepartmentStatus().equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus()) &&
  140. i.getStartDepartmentStatus().equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())
  141. ).collect(Collectors.toList());
  142. if (!CollectionUtils.isEmpty(costIncomeGroupSetList)){
  143. throw new CostException(500,"开单与执行的对应类型已经存在");
  144. }
  145. // 如果一个是收入中心一个是成本中心 那本自动调整比例设置为0 100 如果两个收益中心的话需要按照不理 都是成本中心就是0
  146. if (!costIncomeGroupSetSaveDto.getOpenDepartmentStatus().equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())){
  147. if (NumberConstant.ONE.equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus())){
  148. costIncomeGroupSetSaveDto.setOpenDepartmentProportion(NumberConstant.ONE_HUNDRED);
  149. costIncomeGroupSetSaveDto.setStartDepartmentProportion(NumberConstant.ZERO);
  150. }else {
  151. costIncomeGroupSetSaveDto.setOpenDepartmentProportion(NumberConstant.ZERO);
  152. costIncomeGroupSetSaveDto.setStartDepartmentProportion(NumberConstant.ONE_HUNDRED);
  153. }
  154. }
  155. }
  156. /**
  157. * 修改收入归集设置的数据
  158. *
  159. * @param costIncomeGroupSetEditDto 需要修改的收入归集设置的数据
  160. * @param hospId 医院Id
  161. */
  162. @Override
  163. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  164. public void updateByIncomeGroup(CostIncomeGroupSetEditDto costIncomeGroupSetEditDto, Long hospId) {
  165. Long id = costIncomeGroupSetEditDto.getId();
  166. CostIncomeGroupSet costIncomeGroupSet = baseMapper.selectById(id);
  167. if (Objects.isNull(costIncomeGroupSet)) {
  168. throw new CostException(500, "收入归集设置数据不存在");
  169. }
  170. baseMapper.deleteById(id);
  171. CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto = BeanUtil.convertObj(costIncomeGroupSetEditDto, CostIncomeGroupSetSaveDto.class);
  172. // 检验输入的数据是否存在
  173. checkIncomeGroupSet(costIncomeGroupSetSaveDto,hospId);
  174. CostIncomeGroupSet incomeGroupSet = BeanUtil.convertObj(costIncomeGroupSetSaveDto, CostIncomeGroupSet.class);
  175. incomeGroupSet.setHospId(hospId);
  176. incomeGroupSet.setCreateTime(System.currentTimeMillis());
  177. incomeGroupSet.setResponsibilityCode(costIncomeGroupSetSaveDto.getResponsibilityCode());
  178. incomeGroupSet.setAccountCode(costIncomeGroupSet.getAccountCode());
  179. baseMapper.insert(incomeGroupSet);
  180. }
  181. /**
  182. * 查询当前收入归集设置里面对应的会计科目的Id集合
  183. *
  184. * @param incomeGroutSetId 收入归集设置的Id
  185. * @return List<String>
  186. */
  187. @Override
  188. public List<String> selectIsSelect(Integer incomeGroutSetId) {
  189. CostIncomeGroupSet incomeGroupSet = this.getById(incomeGroutSetId);
  190. if (Objects.isNull(incomeGroupSet)) {
  191. return Collections.emptyList();
  192. }
  193. String accountCode = incomeGroupSet.getAccountCode();
  194. if (!StringUtils.isEmpty(accountCode)){
  195. return Arrays.stream(accountCode.split(StrUtil.COMMA)).map(String::valueOf).collect(Collectors.toList());
  196. }else {
  197. return Collections.emptyList();
  198. }
  199. }
  200. /**
  201. * 设置对应的排除成本科目
  202. * @param incomeAccountDto 需要排除的会计科目数据对象
  203. */
  204. @Override
  205. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  206. public void updateAccountCode(IncomeAccountDto incomeAccountDto) {
  207. Long id = incomeAccountDto.getId();
  208. List<String> accountCodeList = Arrays.asList(incomeAccountDto.getAccountCodes());
  209. CostIncomeGroupSet incomeGroupSet = this.getById(id);
  210. if (Objects.isNull(incomeGroupSet)){
  211. throw new CostException(500,"收入归集设置不存在");
  212. }
  213. if (NumberConstant.TWO.equals(incomeGroupSet.getOpenDepartmentStatus())|| NumberConstant.TWO.equals(incomeGroupSet.getStartDepartmentStatus())){
  214. throw new CostException(500,"存在成本中心 不允许设置排除的会计科目");
  215. }
  216. if(CollUtil.isNotEmpty(accountCodeList)){
  217. String accountCodes = accountCodeList.stream().map(String::valueOf).collect(Collectors.joining(StrUtil.COMMA));
  218. incomeGroupSet.setAccountCode(accountCodes);
  219. }else{
  220. incomeGroupSet.setAccountCode(null);
  221. }
  222. baseMapper.updateById(incomeGroupSet);
  223. }
  224. }