CostIncomeGroupSetServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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. if (NumberConstant.ONE.equals(i.getOpenDepartmentStatus()) && NumberConstant.ONE.equals(i.getStartDepartmentStatus())){
  62. i.setAccountStatus(NumberConstant.ONE);
  63. }else {
  64. i.setAccountStatus(NumberConstant.ZERO);
  65. }
  66. });
  67. }
  68. PageUtils pageUtils = new PageUtils(pages);
  69. pageUtils.setList(costIncomeGroupSetVOList);
  70. return pageUtils;
  71. }
  72. /**
  73. * 根据Id获取对应的收入归集设置的数据
  74. *
  75. * @param id 收入归集设置的Id
  76. * @param hospId 医院的Id
  77. * @return CostIncomeGroupSetVO
  78. */
  79. @Override
  80. public CostIncomeGroupSetVO getByIncomeGroupId(Long id, Long hospId) {
  81. CostIncomeGroupSet costIncomeGroupSet = baseMapper.selectById(id);
  82. if (Objects.isNull(costIncomeGroupSet)) {
  83. return null;
  84. }
  85. CostIncomeGroupSetVO costIncomeGroupSetVO = BeanUtil.convertObj(costIncomeGroupSet, CostIncomeGroupSetVO.class);
  86. List<Responsibility> responsibilityList = responsibilityService.list(new QueryWrapper<Responsibility>().lambda()
  87. .eq(Responsibility::getHospId, hospId));
  88. if (!CollectionUtils.isEmpty(responsibilityList)) {
  89. Map<String, List<Responsibility>> listMap = responsibilityList.stream().collect(Collectors.groupingBy(Responsibility::getResponsibilityCode));
  90. String responsibilityCode = costIncomeGroupSetVO.getResponsibilityCode();
  91. if (!StringUtils.isEmpty(responsibilityCode)) {
  92. List<Responsibility> responsibilities = listMap.get(responsibilityCode);
  93. if (!CollectionUtils.isEmpty(responsibilities)) {
  94. costIncomeGroupSetVO.setResponsibilityName(responsibilities.get(0).getResponsibilityName());
  95. }
  96. }
  97. }
  98. return costIncomeGroupSetVO;
  99. }
  100. /**
  101. * 保存收入归集设置的数据
  102. *
  103. * @param costIncomeGroupSetSaveDto
  104. */
  105. @Override
  106. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  107. public void addCostIncomeGroupSet(CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto, Long hospId) {
  108. // 检验输入的数据是否符合要求
  109. checkIncomeGroupSet(costIncomeGroupSetSaveDto, hospId);
  110. CostIncomeGroupSet costIncomeGroupSet = BeanUtil.convertObj(costIncomeGroupSetSaveDto, CostIncomeGroupSet.class);
  111. costIncomeGroupSet.setCreateTime(System.currentTimeMillis());
  112. costIncomeGroupSet.setHospId(hospId);
  113. baseMapper.insert(costIncomeGroupSet);
  114. }
  115. /**
  116. * 检验输入的数据是否符合要求
  117. * @param costIncomeGroupSetSaveDto 需要保存的收入归集设置的数据
  118. * @param hospId 医院Id
  119. */
  120. private void checkIncomeGroupSet(CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto, Long hospId) {
  121. Integer sum = costIncomeGroupSetSaveDto.getOpenDepartmentProportion() + costIncomeGroupSetSaveDto.getStartDepartmentProportion();
  122. if (!NumberConstant.ONE_HUNDRED.equals(sum)) {
  123. throw new CostException(500, "输入的比例和不是100");
  124. }
  125. if (NumberConstant.TWO.equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus())
  126. && NumberConstant.TWO.equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())) {
  127. if (StringUtils.isEmpty(costIncomeGroupSetSaveDto.getResponsibilityCodes())){
  128. throw new CostException(500, "两个成本中心需要输入对应的责任中心");
  129. }else {
  130. costIncomeGroupSetSaveDto.setOpenDepartmentProportion(NumberConstant.ZERO);
  131. costIncomeGroupSetSaveDto.setStartDepartmentProportion(NumberConstant.ZERO);
  132. }
  133. }
  134. if (!StringUtils.isEmpty(costIncomeGroupSetSaveDto.getResponsibilityCodes())){
  135. if (NumberConstant.ONE.equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus()) ||
  136. NumberConstant.ONE.equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())){
  137. throw new CostException(500,"存在收益中心 不允许设置责任中心");
  138. }
  139. }
  140. // 检验原始数据里面是否存在
  141. List<CostIncomeGroupSet> costIncomeGroupSets = baseMapper.selectList(new QueryWrapper<CostIncomeGroupSet>().lambda()
  142. .eq(CostIncomeGroupSet::getHospId, hospId));
  143. List<CostIncomeGroupSet> costIncomeGroupSetList = costIncomeGroupSets.stream().filter(i ->
  144. i.getOpenDepartmentStatus().equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus()) &&
  145. i.getStartDepartmentStatus().equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())
  146. ).collect(Collectors.toList());
  147. if (!CollectionUtils.isEmpty(costIncomeGroupSetList)){
  148. throw new CostException(500,"开单与执行的对应类型已经存在");
  149. }
  150. // 如果一个是收入中心一个是成本中心 那本自动调整比例设置为0 100 如果两个收益中心的话需要按照不理 都是成本中心就是0
  151. if (!costIncomeGroupSetSaveDto.getOpenDepartmentStatus().equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())){
  152. if (NumberConstant.ONE.equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus())){
  153. costIncomeGroupSetSaveDto.setOpenDepartmentProportion(NumberConstant.ONE_HUNDRED);
  154. costIncomeGroupSetSaveDto.setStartDepartmentProportion(NumberConstant.ZERO);
  155. }else {
  156. costIncomeGroupSetSaveDto.setOpenDepartmentProportion(NumberConstant.ZERO);
  157. costIncomeGroupSetSaveDto.setStartDepartmentProportion(NumberConstant.ONE_HUNDRED);
  158. }
  159. }
  160. }
  161. /**
  162. * 修改收入归集设置的数据
  163. *
  164. * @param costIncomeGroupSetEditDto 需要修改的收入归集设置的数据
  165. * @param hospId 医院Id
  166. */
  167. @Override
  168. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  169. public void updateByIncomeGroup(CostIncomeGroupSetEditDto costIncomeGroupSetEditDto, Long hospId) {
  170. Long id = costIncomeGroupSetEditDto.getId();
  171. CostIncomeGroupSet costIncomeGroupSet = baseMapper.selectById(id);
  172. if (Objects.isNull(costIncomeGroupSet)) {
  173. throw new CostException(500, "收入归集设置数据不存在");
  174. }
  175. baseMapper.deleteById(id);
  176. CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto = BeanUtil.convertObj(costIncomeGroupSetEditDto, CostIncomeGroupSetSaveDto.class);
  177. // 检验输入的数据是否存在
  178. checkIncomeGroupSet(costIncomeGroupSetSaveDto,hospId);
  179. CostIncomeGroupSet incomeGroupSet = BeanUtil.convertObj(costIncomeGroupSetSaveDto, CostIncomeGroupSet.class);
  180. incomeGroupSet.setHospId(hospId);
  181. incomeGroupSet.setCreateTime(System.currentTimeMillis());
  182. incomeGroupSet.setResponsibilityCodes(costIncomeGroupSetSaveDto.getResponsibilityCodes());
  183. incomeGroupSet.setAccountCode(costIncomeGroupSet.getAccountCode());
  184. baseMapper.insert(incomeGroupSet);
  185. }
  186. /**
  187. * 查询当前收入归集设置里面对应的会计科目的Id集合
  188. *
  189. * @param incomeGroutSetId 收入归集设置的Id
  190. * @return List<String>
  191. */
  192. @Override
  193. public List<String> selectIsSelect(Integer incomeGroutSetId) {
  194. CostIncomeGroupSet incomeGroupSet = this.getById(incomeGroutSetId);
  195. if (Objects.isNull(incomeGroupSet)) {
  196. return Collections.emptyList();
  197. }
  198. String accountCode = incomeGroupSet.getAccountCode();
  199. if (!StringUtils.isEmpty(accountCode)){
  200. return Arrays.stream(accountCode.split(StrUtil.COMMA)).map(String::valueOf).collect(Collectors.toList());
  201. }else {
  202. return Collections.emptyList();
  203. }
  204. }
  205. /**
  206. * 设置对应的排除成本科目
  207. * @param incomeAccountDto 需要排除的会计科目数据对象
  208. */
  209. @Override
  210. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  211. public void updateAccountCode(IncomeAccountDto incomeAccountDto) {
  212. Long id = incomeAccountDto.getId();
  213. List<String> accountCodeList = Arrays.asList(incomeAccountDto.getAccountCodes());
  214. CostIncomeGroupSet incomeGroupSet = this.getById(id);
  215. if (Objects.isNull(incomeGroupSet)){
  216. throw new CostException(500,"收入归集设置不存在");
  217. }
  218. if (NumberConstant.TWO.equals(incomeGroupSet.getOpenDepartmentStatus())|| NumberConstant.TWO.equals(incomeGroupSet.getStartDepartmentStatus())){
  219. throw new CostException(500,"存在成本中心 不允许设置排除的会计科目");
  220. }
  221. if(CollUtil.isNotEmpty(accountCodeList)){
  222. String accountCodes = accountCodeList.stream().map(String::valueOf).collect(Collectors.joining(StrUtil.COMMA));
  223. incomeGroupSet.setAccountCode(accountCodes);
  224. }else{
  225. incomeGroupSet.setAccountCode(null);
  226. }
  227. baseMapper.updateById(incomeGroupSet);
  228. }
  229. }