123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- package com.imed.costaccount.service.impl;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.imed.costaccount.common.exception.CostException;
- import com.imed.costaccount.common.util.BeanUtil;
- import com.imed.costaccount.common.util.DateUtils;
- import com.imed.costaccount.common.util.PageUtils;
- import com.imed.costaccount.common.util.Result;
- import com.imed.costaccount.constants.NumberConstant;
- import com.imed.costaccount.mapper.CostIncomeGroupMapper;
- import com.imed.costaccount.model.*;
- import com.imed.costaccount.model.vo.CostIncomeGroupAllAmountVO;
- import com.imed.costaccount.model.vo.CostIncomeGroupBeforeVO;
- import com.imed.costaccount.model.vo.IncomeErrorMessage;
- import com.imed.costaccount.service.*;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Propagation;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.util.CollectionUtils;
- import java.math.BigDecimal;
- import java.util.*;
- import java.util.stream.Collectors;
- @Slf4j
- @Service("costIncomeGroupService")
- public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMapper, CostIncomeGroup> implements CostIncomeGroupService {
- private final DepartmentService departmentService;
- private final ResponsibilityService responsibilityService;
- private final ProductService productService;
- private final AccountingService accountingService;
- private final ResponsibilityDepartmentService responsibilityDepartmentService;
- private final AccountingProductService accountingProductService;
- public CostIncomeGroupServiceImpl(DepartmentService departmentService, ResponsibilityService responsibilityService, ProductService productService, AccountingService accountingService, ResponsibilityDepartmentService responsibilityDepartmentService, AccountingProductService accountingProductService) {
- this.departmentService = departmentService;
- this.responsibilityService = responsibilityService;
- this.productService = productService;
- this.accountingService = accountingService;
- this.responsibilityDepartmentService = responsibilityDepartmentService;
- this.accountingProductService = accountingProductService;
- }
- /**
- * 分页查询收入归集前的数据
- *
- * @param current 当前页
- * @param pageSize 当前页大小
- * @param dateTime 年月
- * @param responsibilityCode 责任中心代码
- * @param accountCode 会计科目的Code
- * @param hospId 医院Id
- * @return
- */
- @Override
- public PageUtils queryList(Integer current, Integer pageSize, String dateTime, String responsibilityCode, String accountCode, Long hospId) {
- int year = 0;
- int month=0;
- if (StrUtil.isNotBlank(dateTime)){
- year = DateUtils.getYear(dateTime);
- month=DateUtils.getMonth(dateTime);
- }
- Page<CostIncomeGroup> costIncomeGroupPage = new Page<>(current, pageSize);
- Page<CostIncomeGroup> pages= this.page(costIncomeGroupPage,new QueryWrapper<CostIncomeGroup>().lambda()
- .eq(Objects.nonNull(hospId),CostIncomeGroup::getHospId,hospId)
- .eq(!NumberConstant.ZERO.equals(year),CostIncomeGroup::getDateYear,year)
- .eq(!NumberConstant.ONE.equals(month),CostIncomeGroup::getDateMonth,month)
- .and(StrUtil.isNotBlank(responsibilityCode),i->i.like(CostIncomeGroup::getOpenResponsibilityCode,responsibilityCode)
- .or().like(CostIncomeGroup::getStartResponsibilityCode, responsibilityCode))
- .like(StrUtil.isNotBlank(accountCode),CostIncomeGroup::getAccountCode,accountCode));
- List<CostIncomeGroup> records = pages.getRecords();
- List<CostIncomeGroupBeforeVO> costIncomeGroupBeforeVOList = BeanUtil.convertList(records, CostIncomeGroupBeforeVO.class);
- // 查询所有的责任中心 科室 会计科目 成本项目的数据 处理名字
- setCodeName(hospId, costIncomeGroupBeforeVOList);
- // 进行金额合并
- List<CostIncomeGroupAllAmountVO> costIncomeGroupAllAmountVoS =baseMapper.countMoney(costIncomeGroupBeforeVOList);
- // 对,的金额进行合并
- costIncomeGroupAllAmountVoS.forEach(i->{
- String allMoney = i.getAllMoney();
- if (allMoney.contains(StrUtil.COMMA)){
- // 存在,在进行求和
- long sum;
- List<Long> list = Arrays.stream(allMoney.split(StrUtil.COMMA)).map(Long::valueOf).collect(Collectors.toList());
- sum = list.stream().mapToLong(m -> m).sum();
- i.setAmount(BigDecimal.valueOf(sum));
- }
- });
- PageUtils pageUtils = new PageUtils(pages);
- pageUtils.setList(costIncomeGroupAllAmountVoS);
- return pageUtils;
- }
- /**
- * 批量导入收入数据
- *
- * @param list 输入的文件
- * @param hospId 医院Id
- * @return
- */
- @Override
- @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
- public Result importIncomeGroup(List<List<Object>> list, Long hospId) {
- // 移除前几行的抬头内容 list的大小对应的就是行数的大小
- for (int i = list.size() - 1; i >= 0; i--) {
- if (i == NumberConstant.ZERO || i == NumberConstant.ONE || i == NumberConstant.TWO || i == NumberConstant.THREE) {
- list.remove(list.get(i));
- }
- }
- log.info("读取的数据为:{}", list);
- List<CostIncomeGroup> costIncomeGroupList = new ArrayList<>();
- List<IncomeErrorMessage> incomeErrorMessageList = new ArrayList<>();
- //获取所有的科室 成本项目 责任中心 会计科目
- Map<String, Department> departmentMap = departmentService.list(new QueryWrapper<Department>().lambda().eq(Department::getHospId, hospId)).stream().collect(Collectors.toMap(k -> k.getDepartmentCode() + k.getDepartmentName(), synOe -> synOe));
- Map<String,Product> productMap= productService.list(new QueryWrapper<Product>().lambda().eq(Product::getHospId, hospId)).stream().collect(Collectors.toMap(k -> k.getProductCode() + k.getProductName(), synOe -> synOe));
- Map<Long, Responsibility> responsibilityMap = responsibilityService.list(new QueryWrapper<Responsibility>().lambda().eq(Responsibility::getHospId, hospId)).stream().collect(Collectors.toMap(Responsibility::getId,synOe->synOe));
- Map<Long, Accounting> accountingMap = accountingService.list(new QueryWrapper<Accounting>().lambda().eq(Accounting::getHospId, hospId)).stream().collect(Collectors.toMap(Accounting::getId, synOe -> synOe));
- List<ResponsibilityDepartment> responsibilityDepartmentList = responsibilityDepartmentService.list(new QueryWrapper<ResponsibilityDepartment>().lambda()
- .eq(ResponsibilityDepartment::getHospId, hospId));
- if (CollectionUtils.isEmpty(responsibilityDepartmentList)){
- throw new CostException(500,"没有科室责任中心对照数据");
- }
- List<AccountingProduct> accountingProductList = accountingProductService.list(new QueryWrapper<AccountingProduct>().lambda().eq(AccountingProduct::getHospId, hospId));
- if (CollectionUtils.isEmpty(accountingProductList)){
- throw new CostException(500,"没有成本会计对照数据");
- }
- Map<Long, Long> responsibilityDepMap = responsibilityDepartmentList.stream().collect(Collectors.toMap(ResponsibilityDepartment::getDepartmentId, ResponsibilityDepartment::getResponsibilityId));
- Map<Long, Long> accountProMap = accountingProductList.stream().collect(Collectors.toMap(AccountingProduct::getProductId, AccountingProduct::getAccountingId));
- for (int i = 0; i < list.size(); i++) {
- // 用来检验数据合理性的循环
- IncomeErrorMessage incomeErrorMessage = new IncomeErrorMessage();
- List<Object> data = list.get(i);
- log.info("用户输入的数据是{}",data);
- Object money = data.get(data.size() - 1);
- if (!Objects.isNull(money) && !NumberConstant.ZERO.equals(Integer.parseInt(money.toString()))){
- // 要求这一行的数据必须全部填写
- for (int j=0;j<data.size();j++){
- if (Objects.isNull(data.get(j))){
- incomeErrorMessage.setTotal(i);
- int row=i+1;
- int column=j+1;
- incomeErrorMessage.setErrMessage("第{"+row+"}行第{"+column+"}列数据为空");
- incomeErrorMessageList.add(incomeErrorMessage);
- }
- }
- // TODO 暂时不走循环 直接获取数据的处理
- // 成本项目的代码和名称
- String productCode = data.get(0).toString();
- String productName = data.get(1).toString();
- // 开单科室 执行科室的代码和名称
- String openDepartmentName = data.get(2).toString();
- String openDepartmentCode = data.get(3).toString();
- String startDepartmentName = data.get(4).toString();
- String startDepartmentCode = data.get(5).toString();
- // 检验数据是否存在
- Product product = productMap.get(productCode + productName);
- Department department = departmentMap.get(openDepartmentCode + openDepartmentName);
- Department department1 = departmentMap.get(startDepartmentCode + startDepartmentName);
- if (Objects.isNull(product)){
- incomeErrorMessage.setTotal(i);
- incomeErrorMessage.setErrMessage("代码:"+productCode+" 名称:"+productName+"成本项目不存在");
- incomeErrorMessageList.add(incomeErrorMessage);
- }else {
- // 检验对应的会计科目是否存在
- Long id = product.getId();
- }
- if (Objects.isNull(department)){
- incomeErrorMessage.setTotal(i);
- incomeErrorMessage.setErrMessage("代码:"+productCode+" 名称:"+productName+"开单科室不存在");
- incomeErrorMessageList.add(incomeErrorMessage);
- }
- if (Objects.isNull(department1)){
- incomeErrorMessage.setTotal(i);
- incomeErrorMessage.setErrMessage("代码:"+productCode+" 名称:"+productName+"执行科室不存在");
- incomeErrorMessageList.add(incomeErrorMessage);
- }
- // 检验科室对应的责任中心是否存在
- // 检验成本项目对应的会计科目是否存在
- }
- }
- return Result.ok();
- }
- /**
- * 设置相关名称
- * @param hospId
- * @param costIncomeGroupBeforeVOList
- */
- private void setCodeName(Long hospId, List<CostIncomeGroupBeforeVO> costIncomeGroupBeforeVOList) {
- List<Responsibility> responsibilityList = responsibilityService.list(new QueryWrapper<Responsibility>().lambda().eq(Responsibility::getHospId, hospId));
- Map<String, String> responsibilityMap = responsibilityList.stream().collect(Collectors.toMap(Responsibility::getResponsibilityCode,Responsibility::getResponsibilityName));
- List<Department> departmentList = departmentService.list(new QueryWrapper<Department>().lambda().eq(Department::getHospId, hospId));
- Map<String, String> departmentMap = departmentList.stream().collect(Collectors.toMap(Department::getDepartmentCode,Department::getDepartmentName));
- List<Product> productList = productService.list(new QueryWrapper<Product>().lambda().eq(Product::getHospId, hospId));
- Map<String, String> productMap = productList.stream().collect(Collectors.toMap(Product::getProductCode,Product::getProductName));
- List<Accounting> accountingList = accountingService.list(new QueryWrapper<Accounting>().lambda().eq(Accounting::getHospId, hospId));
- Map<String, String> accountMap = accountingList.stream().collect(Collectors.toMap(Accounting::getAccountingCode,Accounting::getAccountingName));
- costIncomeGroupBeforeVOList.forEach(i->{
- // 以为这里的数据导入的 在导入的时候进行数据校验
- // 设置开单科室名称 执行科室名称 开单责任中心名称 执行责任中心名称 成本项目的名称 会计科目名称
- i.setOpenDepartmentCodeName("["+i.getOpenDepartmentCode()+"]"+departmentMap.get(i.getOpenDepartmentCode()));
- i.setOpenResponsibilityCodeName("["+i.getOpenResponsibilityCode()+"]"+responsibilityMap.get(i.getOpenResponsibilityCode()));
- i.setStartDepartmentCodeName("["+i.getStartDepartmentCode()+"]"+departmentMap.get(i.getStartDepartmentCode()));
- i.setStartResponsibilityCodeName("["+i.getStartResponsibilityCode()+"]"+responsibilityMap.get(i.getStartResponsibilityCode()));
- i.setProductCodeName("["+i.getProductCode()+"]"+productMap.get(i.getProductCode()));
- i.setAccountCodeName("["+i.getAccountCode()+"]"+accountMap.get(i.getAccountCode()));
- });
- }
- /**
- * 收入数据导入
- */
- }
|