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