2
0

CostIncomeGroupSetServiceImpl.java 11 KB

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