Pārlūkot izejas kodu

08 13 fix return

hr 4 gadi atpakaļ
vecāks
revīzija
a946c6cc47

+ 103 - 38
src/main/java/com/imed/costaccount/service/impl/IncomeCollectionServiceImpl.java

@@ -1,36 +1,32 @@
 package com.imed.costaccount.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.RedisLock;
-import com.imed.costaccount.constants.NumberConstant;
-import com.imed.costaccount.enums.DateStyleEnum;
 import com.imed.costaccount.mapper.CostIncomeGroupMapper;
 import com.imed.costaccount.mapper.IncomeCollectionMapper;
 import com.imed.costaccount.model.*;
 import com.imed.costaccount.model.dto.CollectDTO;
 import com.imed.costaccount.model.vo.*;
-import com.imed.costaccount.service.AccountingService;
+import com.imed.costaccount.service.CostIncomeGroupSetService;
 import com.imed.costaccount.service.IncomeCollectionService;
-import com.imed.costaccount.service.ResponsibilityService;
 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;
+import java.util.stream.Stream;
 
 import static com.imed.costaccount.common.constants.Constant.LIMIT;
 
@@ -45,15 +41,12 @@ public class IncomeCollectionServiceImpl
 
     private final CostIncomeGroupMapper incomeGroupMapper;
 
-    private final ResponsibilityService responsibilityService;
+    private final CostIncomeGroupSetService incomeGroupSetService;
 
-    private final AccountingService accountingService;
-
-    public IncomeCollectionServiceImpl(RedisLock redisLock, CostIncomeGroupMapper incomeGroupMapper, ResponsibilityService responsibilityService, AccountingService accountingService) {
+    public IncomeCollectionServiceImpl(RedisLock redisLock, CostIncomeGroupMapper incomeGroupMapper, CostIncomeGroupSetService incomeGroupSetService) {
         this.redisLock = redisLock;
         this.incomeGroupMapper = incomeGroupMapper;
-        this.responsibilityService = responsibilityService;
-        this.accountingService = accountingService;
+        this.incomeGroupSetService = incomeGroupSetService;
     }
 
     /**
@@ -108,14 +101,12 @@ public class IncomeCollectionServiceImpl
         boolean lock = redisLock.lock(key, timestamp);
         try {
             if (lock) {
-                List<CostIncomeGroupAllAmountBO> costIncomeGroups = incomeGroupMapper.selectListAndMoney(year,month,hospId);
-//                List<CostIncomeGroup> costIncomeGroups = incomeGroupMapper.selectList(
-//                        new LambdaQueryWrapper<CostIncomeGroup>()
-//                                .eq(CostIncomeGroup::getDateYear, year)
-//                                .eq(CostIncomeGroup::getDateMonth, month)
-//                                .eq(CostIncomeGroup::getHospId, hospId)
-//                                .groupBy(CostIncomeGroup::getOpenDepartmentCode, CostIncomeGroup::getStartDepartmentCode, CostIncomeGroup::getProductCode)
-//                );
+                List<CostIncomeGroup> costIncomeGroups = incomeGroupMapper.selectList(
+                        new LambdaQueryWrapper<CostIncomeGroup>()
+                                .eq(CostIncomeGroup::getDateYear, year)
+                                .eq(CostIncomeGroup::getDateMonth, month)
+                                .eq(CostIncomeGroup::getHospId, hospId)
+                );
 
                 if (costIncomeGroups.isEmpty()) {
                     String format = StrUtil.format("{}年{}月数据不存在,请先导入数据", year, month);
@@ -127,21 +118,13 @@ public class IncomeCollectionServiceImpl
                         new LambdaQueryWrapper<IncomeCollection>().eq(IncomeCollection::getYear, year).eq(IncomeCollection::getMonth, month).eq(IncomeCollection::getHospId, hospId)
                 );
                 // 根据会计科目和成本项目归纳所有数据
-                Map<String, List<CostIncomeGroupAllAmountBO>> collectMap = costIncomeGroups.stream()
+                Map<String, List<CostIncomeGroup>> collectMap = costIncomeGroups.stream()
                         .collect(Collectors.groupingBy(i -> i.getOpenDepartmentCode() + "cost" + i.getStartDepartmentCode() + "cost" + i.getProductCode()));
 
                 // 遍历map 组装成List保存
                 List<IncomeCollection> list = new LinkedList<>();
-                Set<Map.Entry<String, List<CostIncomeGroupAllAmountBO>>> entries = collectMap.entrySet();
+                Set<Map.Entry<String, List<CostIncomeGroup>>> entries = collectMap.entrySet();
                 entries.stream().map(Map.Entry::getValue).flatMap(Collection::stream).forEach(costIncomeGroup -> {
-                    String allMoney = costIncomeGroup.getAllMoney();
-                    if (StrUtil.isNotBlank(allMoney) && allMoney.contains(StrUtil.COMMA)) {
-                        // 存在,在进行求和
-                        BigDecimal sum;
-                        List<BigDecimal> bigDecimals = Arrays.stream(allMoney.split(StrUtil.COMMA)).map(BigDecimal::new).collect(Collectors.toList());
-                        sum = bigDecimals.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
-                        costIncomeGroup.setAmount(sum);
-                    }
                     //TODO 统计总金额
                     IncomeCollection incomeCollection = new IncomeCollection();
                     incomeCollection.setYear(year);
@@ -150,7 +133,6 @@ public class IncomeCollectionServiceImpl
                     incomeCollection.setAccountingName(costIncomeGroup.getAccountName());
                     incomeCollection.setProductName(costIncomeGroup.getProductName());
                     incomeCollection.setProductCode(costIncomeGroup.getProductCode());
-//                    incomeCollection.setAmount(costIncomeGroup.getAmount());
                     incomeCollection.setHospId(hospId);
                     // todo 来源id暂时不确定
                     incomeCollection.setFileId(costIncomeGroup.getFileId());
@@ -161,15 +143,83 @@ public class IncomeCollectionServiceImpl
                         throw new CostException("未能正确归集对应的....");
                     }
                     // 转换一下其他的
+                    if (afterIncomegroup.getOpenDepartmentStatus() == 1 && afterIncomegroup.getStartDepartmentStatus() == 1) {
+                        // 排除会计科目
+                        List<CostIncomeGroupSet> sets = incomeGroupSetService.list(
+                                new LambdaQueryWrapper<CostIncomeGroupSet>()
+                                        .eq(CostIncomeGroupSet::getOpenDepartmentStatus, 1).eq(CostIncomeGroupSet::getStartDepartmentStatus, 1).eq(CostIncomeGroupSet::getHospId, hospId)
+                        );
+                        if (!sets.isEmpty()) {
+                            for (CostIncomeGroupSet set : sets) {
+                                String accountCode = set.getAccountCode();
+                                if (StrUtil.isBlank(accountCode)) {
+                                    continue;
+                                }
+                                String[] split = accountCode.split(StrUtil.COMMA);
+                                boolean contains = CollUtil.newArrayList(split).contains(costIncomeGroup.getAccountCode());
+                                if (contains) {
+                                    // 钱全给执行科室
+                                    incomeCollection.setAmount(new BigDecimal("0.0000"));
+                                    incomeCollection.setDepartmentCode(afterIncomegroup.getOpenDepartmentCode());
+                                    incomeCollection.setDepartmentName(afterIncomegroup.getOpenDepartmentName());
+                                    incomeCollection.setResponsibilityCode(afterIncomegroup.getOpenResponsibilityCode());
+                                    incomeCollection.setResponsibilityName(afterIncomegroup.getOpenResponsibilityName());
+
+                                    list.add(incomeCollection);
+                                    // 执行科室数据
+
+                                    IncomeCollection startCollect = BeanUtil.convertObj(incomeCollection, IncomeCollection.class);
+                                    startCollect.setAmount(costIncomeGroup.getAmount());
+                                    startCollect.setDepartmentCode(afterIncomegroup.getStartDepartmentCode());
+                                    startCollect.setDepartmentName(afterIncomegroup.getStartDepartmentName());
+                                    startCollect.setResponsibilityCode(afterIncomegroup.getStartResponsibilityCode());
+                                    startCollect.setResponsibilityName(afterIncomegroup.getStartResponsibilityName());
+                                    log.info("start:{}", startCollect);
+                                    log.info("open:{}", incomeCollection);
+                                    list.add(startCollect);
+                                } else {
+                                    if (afterIncomegroup.getDirectStatus() == 2) {
+                                        afterIncomegroup.setDirectStatus(0);
+                                    }
+                                    incomeCollection.setIsDirectIncome(afterIncomegroup.getDirectStatus());
+                                    String responsibilityCode = afterIncomegroup.getResponsibilityCode();
+                                    if (StrUtil.isNotBlank(responsibilityCode)) {
+                                        incomeCollection.setDepartmentName(afterIncomegroup.getOpenDepartmentName() + "|" + afterIncomegroup.getStartDepartmentName());
+                                        incomeCollection.setDepartmentCode(afterIncomegroup.getOpenDepartmentCode() + "|" + afterIncomegroup.getStartDepartmentCode());
+                                        incomeCollection.setResponsibilityCode(responsibilityCode);
+                                        incomeCollection.setResponsibilityName(afterIncomegroup.getResponsibilityName());
+                                        incomeCollection.setAmount(afterIncomegroup.getOtherResponsibilityDecimal());
+                                        list.add(incomeCollection);
+                                    } else {
+                                        // 开单中心的数据
+                                        incomeCollection.setAmount(afterIncomegroup.getOpenDepartmentDecimal());
+                                        incomeCollection.setDepartmentCode(afterIncomegroup.getOpenDepartmentCode());
+                                        incomeCollection.setDepartmentName(afterIncomegroup.getOpenDepartmentName());
+                                        incomeCollection.setResponsibilityCode(afterIncomegroup.getOpenResponsibilityCode());
+                                        incomeCollection.setResponsibilityName(afterIncomegroup.getOpenResponsibilityName());
+
+                                        list.add(incomeCollection);
+                                        // 执行科室数据
+
+                                        IncomeCollection startCollect = BeanUtil.convertObj(incomeCollection, IncomeCollection.class);
+                                        startCollect.setAmount(afterIncomegroup.getStartDepartmentDecimal());
+                                        startCollect.setDepartmentCode(afterIncomegroup.getStartDepartmentCode());
+                                        startCollect.setDepartmentName(afterIncomegroup.getStartDepartmentName());
+                                        startCollect.setResponsibilityCode(afterIncomegroup.getStartResponsibilityCode());
+                                        startCollect.setResponsibilityName(afterIncomegroup.getStartResponsibilityName());
+                                        log.info("start:{}", startCollect);
+                                        log.info("open:{}", incomeCollection);
+                                        list.add(startCollect);
+                                    }
+                                }
+                            }
+                        }
+                        return;
+                    }
                     if (afterIncomegroup.getDirectStatus() == 2) {
                         afterIncomegroup.setDirectStatus(0);
                     }
                     incomeCollection.setIsDirectIncome(afterIncomegroup.getDirectStatus());
-//                    String responsibilityCode = afterIncomegroup.getResponsibilityCode();
-//                    if (StrUtil.isBlank(responsibilityCode)) {
-//                        responsibilityCode = "-";
-//                        afterIncomegroup.setResponsibilityName("-");
-//                    }
                     String responsibilityCode = afterIncomegroup.getResponsibilityCode();
                     if (StrUtil.isNotBlank(responsibilityCode)) {
                         incomeCollection.setDepartmentName(afterIncomegroup.getOpenDepartmentName() + "|" + afterIncomegroup.getStartDepartmentName());
@@ -199,11 +249,26 @@ public class IncomeCollectionServiceImpl
                         log.info("open:{}", incomeCollection);
                         list.add(startCollect);
                     }
+
                 });
 
 
                 // TODO: 2021/8/10 几十万条数据如何处理 待测试处理
-                this.saveBatch(list);
+
+                Map<String, List<IncomeCollection>> collect = list.stream().collect(Collectors.groupingBy(i -> i.getDepartmentCode() + "cost" + i.getResponsibilityCode() + "cost" + i.getAccountingCode() + "cost" + i.getProductCode()));
+                List<IncomeCollection> realList = new LinkedList<>();
+                Set<String> strings = collect.keySet();
+                for (String str : strings) {
+                    List<IncomeCollection> incomeCollections = collect.get(str);
+                    if (CollUtil.isNotEmpty(incomeCollections)) {
+                        BigDecimal reduce = incomeCollections.stream().map(IncomeCollection::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                        IncomeCollection incomeCollection = incomeCollections.get(0);
+                        incomeCollection.setAmount(reduce);
+                        realList.add(incomeCollection);
+                    }
+                }
+
+                this.saveBatch(realList);
             } else {
                 throw new CostException("已有人在操作,请稍后重试");
             }

+ 1 - 1
src/main/resources/mapper/CostIncomeGroupMapper.xml

@@ -89,7 +89,7 @@
           and date_month = #{month}
           and hosp_id = #{hospId}
         and delete_time = 0
-        group by open_department_code, start_department_code, product_code
+
 
     </select>