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