Sfoglia il codice sorgente

成本1.0 迁入及bug修复

wangyongsheng 1 anno fa
parent
commit
bd283e80b5
44 ha cambiato i file con 1055 aggiunte e 336 eliminazioni
  1. 29 0
      src/main/java/com/kcim/common/util/excel/entity/ShareParamTemplateEntity.java
  2. 2 0
      src/main/java/com/kcim/dao/model/dto/ReportRelationDTO.java
  3. 100 0
      src/main/java/com/kcim/dao/model/dto/SysDepartment.java
  4. 26 0
      src/main/java/com/kcim/dao/repository/AccountingProductRepository.java
  5. 25 0
      src/main/java/com/kcim/dao/repository/CostResponsibilityDepartmentRepository.java
  6. 29 0
      src/main/java/com/kcim/dao/repository/ResponsibilityDepartmentRepository.java
  7. 0 1
      src/main/java/com/kcim/dao/repository/SpaceRepository.java
  8. 4 0
      src/main/java/com/kcim/endPoint/CenterEndPoint.java
  9. 3 0
      src/main/java/com/kcim/service/CenterService.java
  10. 2 1
      src/main/java/com/kcim/service/CostDepartmentProfitService.java
  11. 2 0
      src/main/java/com/kcim/service/DepartmentService.java
  12. 2 0
      src/main/java/com/kcim/service/ResponsibilityDepartmentService.java
  13. 9 4
      src/main/java/com/kcim/service/impl/AccountingItemMapServiceImpl.java
  14. 1 0
      src/main/java/com/kcim/service/impl/AccountingServiceImpl.java
  15. 7 0
      src/main/java/com/kcim/service/impl/CenterServiceImpl.java
  16. 62 18
      src/main/java/com/kcim/service/impl/ComputeClinicalPathwayCostServiceImpl.java
  17. 128 87
      src/main/java/com/kcim/service/impl/ComputeDiseaseCostServiceImpl.java
  18. 64 21
      src/main/java/com/kcim/service/impl/ComputeGroupCostServiceImpl.java
  19. 16 6
      src/main/java/com/kcim/service/impl/ComputeItemCostServiceImpl.java
  20. 26 19
      src/main/java/com/kcim/service/impl/ComputePatientCostServiceImpl.java
  21. 18 2
      src/main/java/com/kcim/service/impl/CostAccountShareServiceImpl.java
  22. 3 1
      src/main/java/com/kcim/service/impl/CostCostingGroupServiceImpl.java
  23. 60 4
      src/main/java/com/kcim/service/impl/CostDepartmentProfitServiceImpl.java
  24. 12 5
      src/main/java/com/kcim/service/impl/CostIncomeGroupServiceImpl.java
  25. 10 0
      src/main/java/com/kcim/service/impl/CostOtherPaymentsServiceImpl.java
  26. 26 1
      src/main/java/com/kcim/service/impl/CostResponsibilityDepartmentServiceImpl.java
  27. 23 13
      src/main/java/com/kcim/service/impl/DepartmentServiceImpl.java
  28. 7 0
      src/main/java/com/kcim/service/impl/EmpCostMapServiceImpl.java
  29. 67 3
      src/main/java/com/kcim/service/impl/HospProfitAndLossServiceImpl.java
  30. 52 75
      src/main/java/com/kcim/service/impl/IncomeCollectionServiceImpl.java
  31. 24 6
      src/main/java/com/kcim/service/impl/ProductServiceImpl.java
  32. 6 0
      src/main/java/com/kcim/service/impl/ReportFormServiceImpl.java
  33. 45 13
      src/main/java/com/kcim/service/impl/ReportRelationServiceImpl.java
  34. 5 0
      src/main/java/com/kcim/service/impl/ResponsibilityDepartmentServiceImpl.java
  35. 78 12
      src/main/java/com/kcim/service/impl/ResponsibilityServiceImpl.java
  36. 8 2
      src/main/java/com/kcim/service/impl/ShareParamValueServiceImpl.java
  37. 2 1
      src/main/java/com/kcim/vo/CostAccountShareVO.java
  38. 2 0
      src/main/java/com/kcim/vo/CostOtherPaymentsVO.java
  39. 1 1
      src/main/java/com/kcim/vo/RelationVO.java
  40. 4 1
      src/main/java/com/kcim/web/CostDepartmentProfitController.java
  41. 2 2
      src/main/java/com/kcim/web/CostIncomeFileController.java
  42. 60 34
      src/main/java/com/kcim/web/ExcelController.java
  43. 1 1
      src/main/resources/application-dev.yml
  44. 2 2
      src/main/resources/application.yml

+ 29 - 0
src/main/java/com/kcim/common/util/excel/entity/ShareParamTemplateEntity.java

@@ -0,0 +1,29 @@
+package com.kcim.common.util.excel.entity;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @program: CostAccount
+ * @description: 成本分摊参数导出模版
+ * @author: Wang.YS
+ * @create: 2023-12-11 10:43
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@ExcelTarget("ShareParamTemplateEntity")
+public class ShareParamTemplateEntity {
+
+    @Excel(name="空间编码",width = 20)
+    private String shareParamCode;
+
+
+
+
+}

+ 2 - 0
src/main/java/com/kcim/dao/model/dto/ReportRelationDTO.java

@@ -24,4 +24,6 @@ public class ReportRelationDTO {
 
     private List<String> relationCodes;
 
+    private Integer reportType;
+
 }

+ 100 - 0
src/main/java/com/kcim/dao/model/dto/SysDepartment.java

@@ -0,0 +1,100 @@
+package com.kcim.dao.model.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 
+ * 
+ * @author wangyongsheng
+ * @email 
+ * @date 2022-07-15 16:57:32
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+
+public class SysDepartment implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * id
+	 */
+	private Integer id;
+
+	/**
+	 * 院区id
+	 */
+	private Long hospId;
+
+	/**
+	 * 科室代码
+	 */
+	private String code;
+	/**
+	 * 科室名称
+	 */
+	private String name;
+	/**
+	 *  上级科室id
+	 */
+	private Integer parentId;
+	/**
+	 * 核算科室
+	 */
+	private Integer computeId;
+	/**
+	 * 创建人
+	 */
+	@JsonIgnore
+	private String createUser;
+	/**
+	 * 创建时间
+	 */
+	@JsonIgnore
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@JsonIgnore
+	private String updateUser;
+	/**
+	 * 修改时间
+	 */
+	@JsonIgnore
+	private Date updateTime;
+	/**
+	 * 删除人
+	 */
+	@JsonIgnore
+	private String deleteUser;
+	/**
+	 * 删除时间
+	 */
+	@JsonIgnore
+	private Date deleteTime;
+	/**
+	 * 作废标志
+	 */
+	@JsonIgnore
+	private Integer delFlag;
+
+
+
+	private String type;
+
+
+	private String remark;
+
+}

+ 26 - 0
src/main/java/com/kcim/dao/repository/AccountingProductRepository.java

@@ -0,0 +1,26 @@
+package com.kcim.dao.repository;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kcim.common.util.UserContext;
+import com.kcim.dao.mapper.AccountingProductMapper;
+import com.kcim.dao.model.AccountingProduct;
+import com.kcim.dao.model.CostResponsibilityDepartment;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @program: CostAccount
+ * @description:
+ * @author: Wang.YS
+ * @create: 2023-12-13 16:39
+ **/
+@Repository
+public class AccountingProductRepository extends ServiceImpl<AccountingProductMapper, AccountingProduct> {
+    public List<AccountingProduct> getList() {
+        LambdaQueryWrapper<AccountingProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AccountingProduct::getHospId, UserContext.getHospId());
+        return this.list(queryWrapper);
+    }
+}

+ 25 - 0
src/main/java/com/kcim/dao/repository/CostResponsibilityDepartmentRepository.java

@@ -0,0 +1,25 @@
+package com.kcim.dao.repository;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kcim.common.util.UserContext;
+import com.kcim.dao.mapper.CostResponsibilityDepartmentMapper;
+import com.kcim.dao.model.CostResponsibilityDepartment;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @program: CostAccount
+ * @description:
+ * @author: Wang.YS
+ * @create: 2023-12-13 16:22
+ **/
+@Repository
+public class CostResponsibilityDepartmentRepository extends ServiceImpl<CostResponsibilityDepartmentMapper, CostResponsibilityDepartment> {
+    public List<CostResponsibilityDepartment> getList() {
+        LambdaQueryWrapper<CostResponsibilityDepartment> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CostResponsibilityDepartment::getHospId, UserContext.getHospId());
+        return this.list(queryWrapper);
+    }
+}

+ 29 - 0
src/main/java/com/kcim/dao/repository/ResponsibilityDepartmentRepository.java

@@ -0,0 +1,29 @@
+package com.kcim.dao.repository;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kcim.common.util.UserContext;
+import com.kcim.dao.mapper.ResponsibilityDepartmentMapper;
+import com.kcim.dao.model.ResponsibilityDepartment;
+import jdk.internal.dynalink.linker.LinkerServices;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @program: CostAccount
+ * @description:
+ * @author: Wang.YS
+ * @create: 2023-12-08 15:07
+ **/
+@Repository
+public class ResponsibilityDepartmentRepository extends ServiceImpl<ResponsibilityDepartmentMapper,ResponsibilityDepartment> {
+
+
+    public List<ResponsibilityDepartment> getResponsibilityDepartment() {
+        LambdaQueryWrapper<ResponsibilityDepartment> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ResponsibilityDepartment::getHospId, UserContext.getHospId());
+        return this.list(queryWrapper);
+
+    }
+}

+ 0 - 1
src/main/java/com/kcim/dao/repository/SpaceRepository.java

@@ -65,7 +65,6 @@ public class SpaceRepository extends ServiceImpl<SpaceMapper, Space> {
         LambdaQueryWrapper<Space> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(Space::getHospId, UserContext.getCurrentLoginHospId());
         queryWrapper.eq(Space::getParentCode, NumberConstant.ZERO_S);
-        queryWrapper.eq(Space::getType, NumberConstant.ZERO_S);
         return this.list(queryWrapper);
     }
 

+ 4 - 0
src/main/java/com/kcim/endPoint/CenterEndPoint.java

@@ -37,6 +37,10 @@ public interface CenterEndPoint {
     @GetMapping("/api/getDepartment")
     Object getDepartment();
 
+    @GetMapping("/api/getDepartmentFilter")
+    Object getDepartmentFilter(@RequestParam(required = false,name = "departName") String departName);
+
+
     @GetMapping("/api/getParameter")
     Object getParameter(@RequestParam(required = false,name = "systemId")Long systemId,
                  @RequestParam(required = false,name="parameterCode") Long parameterCode);

+ 3 - 0
src/main/java/com/kcim/service/CenterService.java

@@ -1,5 +1,6 @@
 package com.kcim.service;
 
+import com.kcim.dao.model.dto.SysDepartment;
 import com.kcim.vo.CommonParameterVo;
 import com.kcim.vo.DictDataVo;
 import com.kcim.vo.KCClassVo;
@@ -27,6 +28,8 @@ public interface CenterService {
 
     Map<String, String> getDepartment();
 
+    List<SysDepartment>  getDepartmentFilter(String departmentName);
+
     CommonParameterVo getParameter(Long parameterCode);
 
     List<KCClassVo>  getKCClass();

+ 2 - 1
src/main/java/com/kcim/service/CostDepartmentProfitService.java

@@ -6,6 +6,7 @@ import com.kcim.common.util.PageUtils;
 import com.kcim.dao.model.CostDepartmentProfit;
 import org.apache.poi.ss.usermodel.Sheet;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -48,7 +49,7 @@ public interface CostDepartmentProfitService extends IService<CostDepartmentProf
      * @param hospId
      * @param reportType
      */
-    void getDepartProfitReport(String date, Long hospId, Integer reportType);
+    void getDepartProfitReport(String date, Long hospId, Integer reportType) throws IOException;
 
     /**
      *  删除科室损益数据

+ 2 - 0
src/main/java/com/kcim/service/DepartmentService.java

@@ -61,5 +61,7 @@ public interface DepartmentService extends IService<Department> {
      * @param idList 科室Id集合
      */
     void deleteByIds(List<Integer> idList);
+
+    List<Department> getDepartments();
 }
 

+ 2 - 0
src/main/java/com/kcim/service/ResponsibilityDepartmentService.java

@@ -29,5 +29,7 @@ public interface ResponsibilityDepartmentService extends IService<Responsibility
      * @param departDTO
      */
     void saveCenterDepart(DepartDTO departDTO);
+
+
 }
 

+ 9 - 4
src/main/java/com/kcim/service/impl/AccountingItemMapServiceImpl.java

@@ -64,7 +64,9 @@ public class AccountingItemMapServiceImpl implements AccountingItemMapService {
             Map<Long, Accounting> accountingMap = allIncome.stream().collect(Collectors.toMap(Accounting::getId, accounting -> accounting, (a, b) -> b));
             List<Accounting> parentAccounting = new ArrayList<>();
 
-            collect.forEach(accounting -> getParentAccount(accounting, accountingMap, parentAccounting));
+            for (Accounting accounting1 : collect) {
+                getParentAccount(accounting1, accountingMap, parentAccounting);
+            }
             if(!CollectionUtils.isEmpty(parentAccounting)){
                 accountingList.addAll(parentAccounting);
             }
@@ -146,10 +148,13 @@ public class AccountingItemMapServiceImpl implements AccountingItemMapService {
      */
     private void getParentAccount(Accounting accounting,Map<Long,Accounting> accountingMap,List<Accounting> parentAccounting ){
         Accounting parentAccount = accountingMap.get(accounting.getParentId());
-        parentAccounting.add(parentAccount);
-        if(!parentAccount.getParentId().equals(NumberConstant.ZERO_L)){
-            getParentAccount(parentAccount, accountingMap, parentAccounting );
+        if(Objects.nonNull(parentAccount)){
+            parentAccounting.add(parentAccount);
+            if(!parentAccount.getParentId().equals(NumberConstant.ZERO_L)){
+                getParentAccount(parentAccount, accountingMap, parentAccounting );
+            }
         }
+
     }
 
     private List<Accounting> getAccountTree(Accounting accountVO, List<Accounting> list) {

+ 1 - 0
src/main/java/com/kcim/service/impl/AccountingServiceImpl.java

@@ -127,6 +127,7 @@ public class AccountingServiceImpl extends ServiceImpl<AccountingMapper, Account
         accounting.setParentId(parentId);
         accounting.setAllParentIds(allParentIds);
         accounting.setCreateTime(System.currentTimeMillis());
+        accounting.setId(null);
         // 如果是支出类型
         if (accountingSaveDTO.getAccountingType().equals(2)) {
             Integer isBaseCode = accountingSaveDTO.getIsBaseCost();

+ 7 - 0
src/main/java/com/kcim/service/impl/CenterServiceImpl.java

@@ -1,6 +1,7 @@
 package com.kcim.service.impl;
 
 import com.alibaba.fastjson2.JSON;
+import com.kcim.dao.model.dto.SysDepartment;
 import com.kcim.endPoint.CenterEndPoint;
 import com.kcim.service.CenterService;
 import com.kcim.vo.CommonParameterVo;
@@ -64,6 +65,12 @@ public class CenterServiceImpl implements CenterService {
 
     }
 
+    @Override
+    public List<SysDepartment> getDepartmentFilter(String departmentName) {
+        Object departmentFilter = endPoint.getDepartmentFilter(departmentName);
+        return JSON.parseArray(JSON.toJSONString(departmentFilter), SysDepartment.class);
+    }
+
     @Override
     public CommonParameterVo getParameter(Long parameterCode) {
         Object dict = endPoint.getParameter(LOCAL_SYSTEM_ID, parameterCode);

+ 62 - 18
src/main/java/com/kcim/service/impl/ComputeClinicalPathwayCostServiceImpl.java

@@ -9,11 +9,9 @@ import com.kcim.common.util.PageUtils;
 import com.kcim.common.util.UserContext;
 import com.kcim.dao.model.*;
 import com.kcim.dao.model.dto.ComputeClinicalPathwayCostPageDto;
+import com.kcim.dao.model.dto.ComputeItemGroupByVisitNoDto;
 import com.kcim.dao.model.dto.ComputePatientCostGroupByDepartmentDto;
-import com.kcim.dao.repository.ComputeClinicalPathwayCostDetailRepository;
-import com.kcim.dao.repository.ComputeClinicalPathwayCostRepository;
-import com.kcim.dao.repository.ComputePatientCostRepository;
-import com.kcim.dao.repository.ImportPatientInfoRepository;
+import com.kcim.dao.repository.*;
 import com.kcim.service.ComputeClinicalPathwayCostService;
 import com.kcim.service.ComputeItemCostService;
 import lombok.AllArgsConstructor;
@@ -58,7 +56,7 @@ public class ComputeClinicalPathwayCostServiceImpl implements ComputeClinicalPat
      * 病人成本计算
      */
     ComputePatientCostRepository computePatientCostRepository;
-
+    ComputeItemCostRepository computeItemCostRepository;
     ComputeItemCostService computeItemCostService;
     /**
      * 临床路径分而查询
@@ -95,7 +93,15 @@ public class ComputeClinicalPathwayCostServiceImpl implements ComputeClinicalPat
         if(CollectionUtils.isEmpty(patientCostDepartmentGroup)){
             throw new CostException("当前核算年月【"+computeDate+"】未计算病人成本信息,请先计算病人成本信息,当前计算中止");
         }
-        Map<String, ComputePatientCostGroupByDepartmentDto> computeItemGroup = patientCostDepartmentGroup.stream().collect(Collectors.toMap(ComputePatientCostGroupByDepartmentDto::getDepartmentCode, dto -> dto, (a, b) -> b));
+
+        List<ComputeItemGroupByVisitNoDto> byComputeDateGroupByVisitNo = computeItemCostRepository.getByComputeDateGroupByVisitNo(computeDate);
+//            List<ComputePatientCostGroupByDepartmentDto> patientCostDepartmentGroup = computePatientCostRepository.getPatientCostDepartmentGroup(computeDate);
+        if(CollectionUtils.isEmpty(byComputeDateGroupByVisitNo)){
+            throw new CostException("当前核算年月【"+computeDate+"】未计算收费项目成本计算,请先计算收费项目成本,当前计算中止");
+        }
+        Map<String, ComputeItemGroupByVisitNoDto> computeItemGroup = byComputeDateGroupByVisitNo.stream().collect(Collectors.toMap(ComputeItemGroupByVisitNoDto::getVisitNo, dto -> dto, (a, b) -> b));
+
+//        Map<String, ComputePatientCostGroupByDepartmentDto> computeItemGroup = patientCostDepartmentGroup.stream().collect(Collectors.toMap(ComputePatientCostGroupByDepartmentDto::getDepartmentCode, dto -> dto, (a, b) -> b));
 
         //过滤掉分组为空的数据
         List<ImportPatientInfo> patientInfoList = patientInfos.stream().filter(patientInfo -> !StringUtils.isEmpty(patientInfo.getClinicalPathwayCode())).collect(Collectors.toList());
@@ -127,8 +133,10 @@ public class ComputeClinicalPathwayCostServiceImpl implements ComputeClinicalPat
                 groupCost.setDepartmentName(infos.get(0).getDepartmentName());
                 groupCost.setPatientNum(infos.size());
                 groupCost.setIndex(index);
-                ComputePatientCostGroupByDepartmentDto patientCost = computeItemGroup.get(departmentCode);
-                List<ComputeClinicalPathwayCostDetail> detail = getDetail(index, clinicalPathwayCostDetail, patientCost);
+                List<ComputeItemGroupByVisitNoDto> dtoList = infos.stream().map(info -> computeItemGroup.get(info.getVisitNo())).collect(Collectors.toList());
+
+//                ComputePatientCostGroupByDepartmentDto patientCost = computeItemGroup.get(departmentCode);
+                List<ComputeClinicalPathwayCostDetail> detail = getDetail(index, clinicalPathwayCostDetail, dtoList);
                 saveClinicalCost.add(groupCost);
                 details.addAll(detail);
                 index++;
@@ -157,7 +165,7 @@ public class ComputeClinicalPathwayCostServiceImpl implements ComputeClinicalPat
         }
     }
 
-    private List<ComputeClinicalPathwayCostDetail> getDetail(int i, ComputeClinicalPathwayCostDetail costDetail, ComputePatientCostGroupByDepartmentDto dto) {
+    private List<ComputeClinicalPathwayCostDetail> getDetail(int i, ComputeClinicalPathwayCostDetail costDetail, List<ComputeItemGroupByVisitNoDto> dtoList) {
         List<String> itemTypeList = computeItemCostService.getItemTypeList();
         List<ComputeClinicalPathwayCostDetail> details = new ArrayList<>();
         for (String s : itemTypeList) {
@@ -165,23 +173,59 @@ public class ComputeClinicalPathwayCostServiceImpl implements ComputeClinicalPat
             detail.setType(s);
             detail.setIndex(i);
             if(s.equals(ReportItemTypeEnum.DRUG_INCOME.getCode())){
-                detail.setComputeResult(dto.getDrugIncome());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getDrugIncome());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.MATERIAL_INCOME.getCode())) {
-                detail.setComputeResult(dto.getMaterialIncome());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getMaterialIncome());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.ITEM_INCOME.getCode())) {
-                detail.setComputeResult(dto.getItemIncome());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getItemIncome());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.DRUG_COST.getCode())) {
-                detail.setComputeResult(dto.getDrugCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getDrugCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.MATERIAL_COST.getCode())) {
-                detail.setComputeResult(dto.getMaterialCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getMaterialCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.ITEM_COST.getCode())) {
-                detail.setComputeResult(dto.getItemCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getItemCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.EMP_COST.getCode())) {
-                detail.setComputeResult(dto.getEmpCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getEmpCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.EQUIPMENT_COST.getCode())) {
-                detail.setComputeResult(dto.getEquipmentCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getEquipmentCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.SPACE_COST.getCode())) {
-                detail.setComputeResult(dto.getSpaceCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getSpaceCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }  else {
                 detail.setComputeResult(BigDecimal.ZERO);
             }

+ 128 - 87
src/main/java/com/kcim/service/impl/ComputeDiseaseCostServiceImpl.java

@@ -9,6 +9,7 @@ import com.kcim.common.util.PageUtils;
 import com.kcim.common.util.UserContext;
 import com.kcim.dao.model.*;
 import com.kcim.dao.model.dto.ComputeDiseaseCostPageDto;
+import com.kcim.dao.model.dto.ComputeItemGroupByVisitNoDto;
 import com.kcim.dao.model.dto.ComputePatientCostGroupByDepartmentDto;
 import com.kcim.dao.repository.*;
 import com.kcim.service.ComputeDiseaseCostService;
@@ -58,6 +59,8 @@ public class ComputeDiseaseCostServiceImpl implements ComputeDiseaseCostService
      */
     ComputePatientCostRepository computePatientCostRepository;
 
+    ComputeItemCostRepository computeItemCostRepository;
+
     ComputeItemCostService computeItemCostService;
 
     DiseaseTypeDiagMapRepository diagMapRepository;
@@ -94,91 +97,93 @@ public class ComputeDiseaseCostServiceImpl implements ComputeDiseaseCostService
             1 获取所有病人信息导入数据
             2 过滤掉未对照病种为空的数据
          */
-            List<ImportPatientInfo> patientInfos = importPatientInfoRepository.getByComputeDate(computeDate);
-            if(CollectionUtils.isEmpty(patientInfos)){
-                log.error("未导入当前核算年月【"+computeDate+"】患者信息,计算中止");
-                throw new CostException("未导入当前核算年月【"+computeDate+"】患者信息,当前计算中止");
-            }
-            Map<String, String> diseaseNameMap = diseaseTypeRepository.getDiseaseNameMap();
-            if(CollectionUtils.isEmpty(diseaseNameMap)){
-                log.error("病种字典未导入/编护,计算中止");
-                throw new CostException("病种字典未导入/编护,计算中止");
-            }
-            //获取计算过的项目信息
-            List<ComputePatientCostGroupByDepartmentDto> patientCostDepartmentGroup = computePatientCostRepository.getPatientCostDepartmentGroup(computeDate);
-            if(CollectionUtils.isEmpty(patientCostDepartmentGroup)){
-                throw new CostException("当前核算年月【"+computeDate+"】未计算病人成本信息,请先计算病人成本信息,当前计算中止");
-            }
-            Map<String, ComputePatientCostGroupByDepartmentDto> computeItemGroup = patientCostDepartmentGroup.stream().collect(Collectors.toMap(ComputePatientCostGroupByDepartmentDto::getDepartmentCode, dto -> dto, (a, b) -> b));
-            Map<String, String> diagDiseaseMap = diagMapRepository.getDiagDiseaseMap();
+        List<ImportPatientInfo> patientInfos = importPatientInfoRepository.getByComputeDate(computeDate);
+        if(CollectionUtils.isEmpty(patientInfos)){
+            log.error("未导入当前核算年月【"+computeDate+"】患者信息,计算中止");
+            throw new CostException("未导入当前核算年月【"+computeDate+"】患者信息,当前计算中止");
+        }
+        Map<String, String> diseaseNameMap = diseaseTypeRepository.getDiseaseNameMap();
+        if(CollectionUtils.isEmpty(diseaseNameMap)){
+            log.error("病种字典未导入/编护,计算中止");
+            throw new CostException("病种字典未导入/编护,计算中止");
+        }
+        //获取计算过的项目信息
+        List<ComputeItemGroupByVisitNoDto> byComputeDateGroupByVisitNo = computeItemCostRepository.getByComputeDateGroupByVisitNo(computeDate);
+//            List<ComputePatientCostGroupByDepartmentDto> patientCostDepartmentGroup = computePatientCostRepository.getPatientCostDepartmentGroup(computeDate);
+        if(CollectionUtils.isEmpty(byComputeDateGroupByVisitNo)){
+            throw new CostException("当前核算年月【"+computeDate+"】未计算收费项目成本计算,请先计算收费项目成本,当前计算中止");
+        }
+        Map<String, ComputeItemGroupByVisitNoDto> computeItemGroup = byComputeDateGroupByVisitNo.stream().collect(Collectors.toMap(ComputeItemGroupByVisitNoDto::getVisitNo, dto -> dto, (a, b) -> b));
+        Map<String, String> diagDiseaseMap = diagMapRepository.getDiagDiseaseMap();
             //病种与诊断对照
-            if(!CollectionUtils.isEmpty(diagDiseaseMap)){
-                for (ImportPatientInfo patientInfo : patientInfos) {
-                    if(!StringUtils.isEmpty(patientInfo.getPrimaryDiagCode())){
-                        String diseaseType = diagDiseaseMap.get(patientInfo.getPrimaryDiagCode());
-                        if(!StringUtils.isEmpty(diseaseType)){
-                            patientInfo.setDiseaseTypeCode(diseaseType);
-                        }
+        if(!CollectionUtils.isEmpty(diagDiseaseMap)){
+            for (ImportPatientInfo patientInfo : patientInfos) {
+                if(!StringUtils.isEmpty(patientInfo.getPrimaryDiagCode())){
+                    String diseaseType = diagDiseaseMap.get(patientInfo.getPrimaryDiagCode());
+                    if(!StringUtils.isEmpty(diseaseType)){
+                        patientInfo.setDiseaseTypeCode(diseaseType);
                     }
                 }
             }
-            //过滤掉病种分类为空的数据
-            List<ImportPatientInfo> patientInfoList = patientInfos.stream().filter(patientInfo -> !StringUtils.isEmpty(patientInfo.getDiseaseTypeCode())).collect(Collectors.toList());
-            //按病种分类和科室进行分组
-            Map<String, List<ImportPatientInfo>> diseaseGroup = patientInfoList.stream().collect(Collectors.groupingBy(ImportPatientInfo::getDiseaseTypeCode));
-
-            ComputeDiseaseCost computeDiseaseCost = new ComputeDiseaseCost();
-            computeDiseaseCost.setComputeDate(computeDate);
-            computeDiseaseCost.setHospId(UserContext.getHospId());
-            computeDiseaseCost.setCreateUser(String.valueOf(UserContext.getCurrentUser().getId()));
-            computeDiseaseCost.setCreateTime(new Date());
-            ComputeDiseaseCostDetail diseaseCostDetail = new ComputeDiseaseCostDetail();
-            diseaseCostDetail.setHospId(UserContext.getHospId());
-            diseaseCostDetail.setCreateUser(String.valueOf(UserContext.getCurrentUser().getId()));
-            diseaseCostDetail.setCreateTime(new Date());
-            int index = 0;
-            List<ComputeDiseaseCost> savePatientCost = new ArrayList<>();
-            List<ComputeDiseaseCostDetail> details = new ArrayList<>();
-            for (String diseaseTypeCode : diseaseGroup.keySet()) {
-                List<ImportPatientInfo> groups = diseaseGroup.get(diseaseTypeCode);
-                Map<String, List<ImportPatientInfo>> departmentGroup = groups.stream().collect(Collectors.groupingBy(ImportPatientInfo::getDepartmentCode));
-                for (String departmentCode : departmentGroup.keySet()) {
-                    ComputeDiseaseCost diseaseCost = BeanUtil.convertObj(computeDiseaseCost, ComputeDiseaseCost.class);
-                    diseaseCost.setCode(diseaseTypeCode);
-                    diseaseCost.setName(diseaseNameMap.get(diseaseTypeCode));
-                    diseaseCost.setDepartmentCode(departmentCode);
-                    List<ImportPatientInfo> infos = departmentGroup.get(departmentCode);
-                    diseaseCost.setDepartmentName(infos.get(0).getDepartmentName());
-                    diseaseCost.setPatientNum(infos.size());
-                    diseaseCost.setIndex(index);
-                    ComputePatientCostGroupByDepartmentDto patientCost = computeItemGroup.get(departmentCode);
-                    List<ComputeDiseaseCostDetail> detail = getDetail(index, diseaseCostDetail, patientCost);
-                    savePatientCost.add(diseaseCost);
-                    details.addAll(detail);
-                    index++;
-                }
+        }
+        //过滤掉病种分类为空的数据
+        List<ImportPatientInfo> patientInfoList = patientInfos.stream().filter(patientInfo -> !StringUtils.isEmpty(patientInfo.getDiseaseTypeCode())).collect(Collectors.toList());
+        //按病种分类和科室进行分组
+        Map<String, List<ImportPatientInfo>> diseaseGroup = patientInfoList.stream().collect(Collectors.groupingBy(ImportPatientInfo::getDiseaseTypeCode));
+
+        ComputeDiseaseCost computeDiseaseCost = new ComputeDiseaseCost();
+        computeDiseaseCost.setComputeDate(computeDate);
+        computeDiseaseCost.setHospId(UserContext.getHospId());
+        computeDiseaseCost.setCreateUser(String.valueOf(UserContext.getCurrentUser().getId()));
+        computeDiseaseCost.setCreateTime(new Date());
+        ComputeDiseaseCostDetail diseaseCostDetail = new ComputeDiseaseCostDetail();
+        diseaseCostDetail.setHospId(UserContext.getHospId());
+        diseaseCostDetail.setCreateUser(String.valueOf(UserContext.getCurrentUser().getId()));
+        diseaseCostDetail.setCreateTime(new Date());
+        int index = 0;
+        List<ComputeDiseaseCost> savePatientCost = new ArrayList<>();
+        List<ComputeDiseaseCostDetail> details = new ArrayList<>();
+        for (String diseaseTypeCode : diseaseGroup.keySet()) {
+            List<ImportPatientInfo> groups = diseaseGroup.get(diseaseTypeCode);
+            Map<String, List<ImportPatientInfo>> departmentGroup = groups.stream().collect(Collectors.groupingBy(ImportPatientInfo::getDepartmentCode));
+            for (String departmentCode : departmentGroup.keySet()) {
+                ComputeDiseaseCost diseaseCost = BeanUtil.convertObj(computeDiseaseCost, ComputeDiseaseCost.class);
+                diseaseCost.setCode(diseaseTypeCode);
+                diseaseCost.setName(diseaseNameMap.get(diseaseTypeCode));
+                diseaseCost.setDepartmentCode(departmentCode);
+                List<ImportPatientInfo> infos = departmentGroup.get(departmentCode);
+                diseaseCost.setDepartmentName(infos.get(0).getDepartmentName());
+                diseaseCost.setPatientNum(infos.size());
+                diseaseCost.setIndex(index);
+                List<ComputeItemGroupByVisitNoDto> dtoList = infos.stream().map(info -> computeItemGroup.get(info.getVisitNo())).collect(Collectors.toList());
+//                ComputePatientCostGroupByDepartmentDto patientCost = computeItemGroup.get(departmentCode);
+                List<ComputeDiseaseCostDetail> detail = getDetail(index, diseaseCostDetail, dtoList);
+                savePatientCost.add(diseaseCost);
+                details.addAll(detail);
+                index++;
             }
+        }
 
+        if(!CollectionUtils.isEmpty(savePatientCost)){
+            //作废当前核算年月已有数据
+            List<Integer> integers = repository.removeByComputeDate(computeDate);
+            if(!CollectionUtils.isEmpty(integers)){
+                detailRepository.removeByDiseaseCostId(integers);
+            }
+            repository.saveBatch(savePatientCost,100);
             if(!CollectionUtils.isEmpty(savePatientCost)){
-                //作废当前核算年月已有数据
-                List<Integer> integers = repository.removeByComputeDate(computeDate);
-                if(!CollectionUtils.isEmpty(integers)){
-                    detailRepository.removeByDiseaseCostId(integers);
-                }
-                repository.saveBatch(savePatientCost,100);
-                if(!CollectionUtils.isEmpty(savePatientCost)){
-                    Map<Integer,Integer> indexId = savePatientCost.stream().collect(Collectors.toMap(ComputeDiseaseCost::getIndex, ComputeDiseaseCost::getId, (a, b) -> b));
-                    Map<Integer, List<ComputeDiseaseCostDetail>> collect = details.stream().collect(Collectors.groupingBy(ComputeDiseaseCostDetail::getIndex));
-                    List<ComputeDiseaseCostDetail> saveCostDetails = new ArrayList<>();
-                    collect.keySet().forEach(integer -> {
-                        Integer costId = indexId.get(integer);
-                        List<ComputeDiseaseCostDetail> detailList = collect.get(integer);
-                        detailList.forEach(detail -> detail.setDiseaseCostId(costId));
-                        saveCostDetails.addAll(detailList);
-                    });
-                    detailRepository.saveBatch(saveCostDetails,500);
-                }
+                Map<Integer,Integer> indexId = savePatientCost.stream().collect(Collectors.toMap(ComputeDiseaseCost::getIndex, ComputeDiseaseCost::getId, (a, b) -> b));
+                Map<Integer, List<ComputeDiseaseCostDetail>> collect = details.stream().collect(Collectors.groupingBy(ComputeDiseaseCostDetail::getIndex));
+                List<ComputeDiseaseCostDetail> saveCostDetails = new ArrayList<>();
+                collect.keySet().forEach(integer -> {
+                    Integer costId = indexId.get(integer);
+                    List<ComputeDiseaseCostDetail> detailList = collect.get(integer);
+                    detailList.forEach(detail -> detail.setDiseaseCostId(costId));
+                    saveCostDetails.addAll(detailList);
+                });
+                detailRepository.saveBatch(saveCostDetails,500);
             }
+        }
 //        }catch (Exception e){
 //            log.error(e.getMessage());
 //            throw new CostException(e.getMessage());
@@ -189,7 +194,7 @@ public class ComputeDiseaseCostServiceImpl implements ComputeDiseaseCostService
 
     }
 
-    private List<ComputeDiseaseCostDetail> getDetail(int i, ComputeDiseaseCostDetail costDetail, ComputePatientCostGroupByDepartmentDto dto) {
+    private List<ComputeDiseaseCostDetail> getDetail(int i, ComputeDiseaseCostDetail costDetail, List<ComputeItemGroupByVisitNoDto> dtoList) {
         List<String> itemTypeList = computeItemCostService.getItemTypeList();
         List<ComputeDiseaseCostDetail> details = new ArrayList<>();
         for (String s : itemTypeList) {
@@ -197,23 +202,59 @@ public class ComputeDiseaseCostServiceImpl implements ComputeDiseaseCostService
             detail.setType(s);
             detail.setIndex(i);
             if(s.equals(ReportItemTypeEnum.DRUG_INCOME.getCode())){
-                detail.setComputeResult(dto.getDrugIncome());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getDrugIncome());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.MATERIAL_INCOME.getCode())) {
-                detail.setComputeResult(dto.getMaterialIncome());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getMaterialIncome());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.ITEM_INCOME.getCode())) {
-                detail.setComputeResult(dto.getItemIncome());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getItemIncome());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.DRUG_COST.getCode())) {
-                detail.setComputeResult(dto.getDrugCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getDrugCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.MATERIAL_COST.getCode())) {
-                detail.setComputeResult(dto.getMaterialCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getMaterialCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.ITEM_COST.getCode())) {
-                detail.setComputeResult(dto.getItemCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getItemCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.EMP_COST.getCode())) {
-                detail.setComputeResult(dto.getEmpCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getEmpCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.EQUIPMENT_COST.getCode())) {
-                detail.setComputeResult(dto.getEquipmentCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getEquipmentCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.SPACE_COST.getCode())) {
-                detail.setComputeResult(dto.getSpaceCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getSpaceCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }  else {
                 detail.setComputeResult(BigDecimal.ZERO);
             }

+ 64 - 21
src/main/java/com/kcim/service/impl/ComputeGroupCostServiceImpl.java

@@ -9,11 +9,9 @@ import com.kcim.common.util.PageUtils;
 import com.kcim.common.util.UserContext;
 import com.kcim.dao.model.*;
 import com.kcim.dao.model.dto.ComputeGroupCostPageDto;
+import com.kcim.dao.model.dto.ComputeItemGroupByVisitNoDto;
 import com.kcim.dao.model.dto.ComputePatientCostGroupByDepartmentDto;
-import com.kcim.dao.repository.ComputeGroupCostDetailRepository;
-import com.kcim.dao.repository.ComputeGroupCostRepository;
-import com.kcim.dao.repository.ComputePatientCostRepository;
-import com.kcim.dao.repository.ImportPatientInfoRepository;
+import com.kcim.dao.repository.*;
 import com.kcim.service.ComputeGroupCostService;
 import com.kcim.service.ComputeItemCostService;
 import lombok.AllArgsConstructor;
@@ -58,7 +56,7 @@ public class ComputeGroupCostServiceImpl implements ComputeGroupCostService {
      * 病人成本计算
      */
     ComputePatientCostRepository computePatientCostRepository;
-
+    ComputeItemCostRepository computeItemCostRepository;
     ComputeItemCostService computeItemCostService;
 
     /**
@@ -95,11 +93,17 @@ public class ComputeGroupCostServiceImpl implements ComputeGroupCostService {
             throw new CostException("未导入当前核算年月【"+computeDate+"】患者信息,当前计算中止");
         }
 //获取计算过的项目信息
-        List<ComputePatientCostGroupByDepartmentDto> patientCostDepartmentGroup = computePatientCostRepository.getPatientCostDepartmentGroup(computeDate);
-        if(CollectionUtils.isEmpty(patientCostDepartmentGroup)){
-            throw new CostException("当前核算年月【"+computeDate+"】未计算病人成本信息,请先计算病人成本信息,当前计算中止");
+//        List<ComputePatientCostGroupByDepartmentDto> patientCostDepartmentGroup = computePatientCostRepository.getPatientCostDepartmentGroup(computeDate);
+//        if(CollectionUtils.isEmpty(patientCostDepartmentGroup)){
+//            throw new CostException("当前核算年月【"+computeDate+"】未计算病人成本信息,请先计算病人成本信息,当前计算中止");
+//        }
+        List<ComputeItemGroupByVisitNoDto> byComputeDateGroupByVisitNo = computeItemCostRepository.getByComputeDateGroupByVisitNo(computeDate);
+        if(CollectionUtils.isEmpty(byComputeDateGroupByVisitNo)){
+            throw new CostException("当前核算年月【"+computeDate+"】未计算收费项目成本计算,请先计算收费项目成本,当前计算中止");
         }
-        Map<String, ComputePatientCostGroupByDepartmentDto> computeItemGroup = patientCostDepartmentGroup.stream().collect(Collectors.toMap(ComputePatientCostGroupByDepartmentDto::getDepartmentCode, dto -> dto, (a, b) -> b));
+        Map<String, ComputeItemGroupByVisitNoDto> computeItemGroup = byComputeDateGroupByVisitNo.stream().collect(Collectors.toMap(ComputeItemGroupByVisitNoDto::getVisitNo, dto -> dto, (a, b) -> b));
+
+//        Map<String, ComputePatientCostGroupByDepartmentDto> computeItemGroup = patientCostDepartmentGroup.stream().collect(Collectors.toMap(ComputePatientCostGroupByDepartmentDto::getDepartmentCode, dto -> dto, (a, b) -> b));
 
         //过滤掉分组为空的数据
         List<ImportPatientInfo> patientInfoList = patientInfos.stream().filter(patientInfo -> !StringUtils.isEmpty(patientInfo.getGroupCode())).collect(Collectors.toList());
@@ -131,8 +135,11 @@ public class ComputeGroupCostServiceImpl implements ComputeGroupCostService {
                 groupCost.setDepartmentName(infos.get(0).getDepartmentName());
                 groupCost.setPatientNum(infos.size());
                 groupCost.setIndex(index);
-                ComputePatientCostGroupByDepartmentDto patientCost = computeItemGroup.get(departmentCode);
-                List<ComputeGroupCostDetail> detail = getDetail(index, groupCostDetail, patientCost);
+                List<ComputeItemGroupByVisitNoDto> dtoList = infos.stream().map(info -> computeItemGroup.get(info.getVisitNo())).collect(Collectors.toList());
+//                ComputePatientCostGroupByDepartmentDto patientCost = computeItemGroup.get(departmentCode);
+//                List<ComputeDiseaseCostDetail> detail = getDetail(index, diseaseCostDetail, dtoList);
+//                ComputePatientCostGroupByDepartmentDto patientCost = computeItemGroup.get(departmentCode);
+                List<ComputeGroupCostDetail> detail = getDetail(index, groupCostDetail, dtoList);
                 saveGroupCost.add(groupCost);
                 details.addAll(detail);
                 index++;
@@ -162,7 +169,7 @@ public class ComputeGroupCostServiceImpl implements ComputeGroupCostService {
     }
 
 
-    private List<ComputeGroupCostDetail> getDetail(int i, ComputeGroupCostDetail costDetail, ComputePatientCostGroupByDepartmentDto dto) {
+    private List<ComputeGroupCostDetail> getDetail(int i, ComputeGroupCostDetail costDetail, List<ComputeItemGroupByVisitNoDto> dtoList) {
         List<String> itemTypeList = computeItemCostService.getItemTypeList();
         List<ComputeGroupCostDetail> details = new ArrayList<>();
         for (String s : itemTypeList) {
@@ -170,23 +177,59 @@ public class ComputeGroupCostServiceImpl implements ComputeGroupCostService {
             detail.setType(s);
             detail.setIndex(i);
             if(s.equals(ReportItemTypeEnum.DRUG_INCOME.getCode())){
-                detail.setComputeResult(dto.getDrugIncome());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getDrugIncome());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.MATERIAL_INCOME.getCode())) {
-                detail.setComputeResult(dto.getMaterialIncome());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getMaterialIncome());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.ITEM_INCOME.getCode())) {
-                detail.setComputeResult(dto.getItemIncome());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getItemIncome());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.DRUG_COST.getCode())) {
-                detail.setComputeResult(dto.getDrugCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getDrugCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.MATERIAL_COST.getCode())) {
-                detail.setComputeResult(dto.getMaterialCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getMaterialCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.ITEM_COST.getCode())) {
-                detail.setComputeResult(dto.getItemCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getItemCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.EMP_COST.getCode())) {
-                detail.setComputeResult(dto.getEmpCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getEmpCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.EQUIPMENT_COST.getCode())) {
-                detail.setComputeResult(dto.getEquipmentCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getEquipmentCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }else if (s.equals(ReportItemTypeEnum.SPACE_COST.getCode())) {
-                detail.setComputeResult(dto.getSpaceCost());
+                BigDecimal bigDecimal = new BigDecimal("0.0000");
+                for (ComputeItemGroupByVisitNoDto dto : dtoList) {
+                    bigDecimal = bigDecimal.add(dto.getSpaceCost());
+                }
+                detail.setComputeResult(bigDecimal);
             }  else {
                 detail.setComputeResult(BigDecimal.ZERO);
             }

+ 16 - 6
src/main/java/com/kcim/service/impl/ComputeItemCostServiceImpl.java

@@ -118,7 +118,7 @@ public class ComputeItemCostServiceImpl implements ComputeItemCostService {
     @Override
     @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
     public void itemCostCalculate(String computeDate) {
-        try {
+//        try {
             List<PatientItemVo> items = importPatientItemRepository.getAllGroupByCompute(computeDate);
             if(CollectionUtils.isEmpty(items)){
                 throw new CostException("当前核算年月【"+computeDate+"】未导入收费项目数据,计算中止");
@@ -196,10 +196,10 @@ public class ComputeItemCostServiceImpl implements ComputeItemCostService {
                     detailRepository.saveBatch(saveCostDetails,100);
                 }
             }
-        }catch (Exception e){
-            log.error(e.getMessage());
-            throw new CostException(e.getMessage());
-        }
+//        }catch (Exception e){
+//            log.error(e.getMessage());
+//            throw new CostException(e.getMessage());
+//        }
 
     }
 
@@ -246,12 +246,16 @@ public class ComputeItemCostServiceImpl implements ComputeItemCostService {
             income.setType(ReportItemTypeEnum.ITEM_INCOME.getCode());
             details.add(income);
             //当前项目的标准项目
+            BigDecimal num = item.getNum();
             StandItem standItem = standItemMap.get(item.getItemCode());
             if (Objects.nonNull(standItem)) {
                 //人力成本
                 List<StandItemEmpMap> empMaps = standItem.getEmpMaps();
                 BigDecimal empCost = getEmpCost(empMaps, empComputeCostGroup, empCostType, item);
                 ComputeItemCostDetail empCostResult = BeanUtil.convertObj(costDetail, ComputeItemCostDetail.class);
+                if(num != null){
+                    empCost = empCost.multiply(num);
+                }
                 empCostResult.setComputeResult(empCost);
                 empCostResult.setType(ReportItemTypeEnum.EMP_COST.getCode());
                 details.add(empCostResult);
@@ -259,6 +263,9 @@ public class ComputeItemCostServiceImpl implements ComputeItemCostService {
                 List<StandItemEquipmentMap> equipmentMaps = standItem.getEquipmentMaps();
                 BigDecimal equipmentCost = getEquipmentCost(equipmentMaps, equipmentMinuteMap);
                 ComputeItemCostDetail equipmentCostResult = BeanUtil.convertObj(costDetail, ComputeItemCostDetail.class);
+                if(num != null){
+                    equipmentCost = equipmentCost.multiply(num);
+                }
                 equipmentCostResult.setComputeResult(equipmentCost);
                 equipmentCostResult.setType(ReportItemTypeEnum.EQUIPMENT_COST.getCode());
                 details.add(equipmentCostResult);
@@ -266,6 +273,9 @@ public class ComputeItemCostServiceImpl implements ComputeItemCostService {
                 List<StandItemSpaceMap> spaceMaps = standItem.getSpaceMaps();
                 BigDecimal spaceCost = getSpaceCost(spaceMaps, spaceMinuteMap);
                 ComputeItemCostDetail spaceCostResult = BeanUtil.convertObj(costDetail, ComputeItemCostDetail.class);
+                if(num != null){
+                    spaceCost = spaceCost.multiply(num);
+                }
                 spaceCostResult.setComputeResult(spaceCost);
                 spaceCostResult.setType(ReportItemTypeEnum.SPACE_COST.getCode());
                 details.add(spaceCostResult);
@@ -469,7 +479,7 @@ public class ComputeItemCostServiceImpl implements ComputeItemCostService {
      */
     private ComputeItemCostDetail getIncome(ComputeItemCostDetail detail, PatientItemVo item) {
         ComputeItemCostDetail result = BeanUtil.convertObj(detail, ComputeItemCostDetail.class);
-        result.setComputeResult(item.getAmount().multiply(item.getNum()));
+        result.setComputeResult(item.getAmount());
         return result;
     }
 

+ 26 - 19
src/main/java/com/kcim/service/impl/ComputePatientCostServiceImpl.java

@@ -156,27 +156,34 @@ public class ComputePatientCostServiceImpl implements ComputePatientCostService
             ComputePatientCostDetail detail = BeanUtil.convertObj(patientCostDetail, ComputePatientCostDetail.class);
             detail.setType(s);
             detail.setIndex(i);
-            if(s.equals(ReportItemTypeEnum.DRUG_INCOME.getCode())){
-                detail.setComputeResult(dto.getDrugIncome());
-            }else if (s.equals(ReportItemTypeEnum.MATERIAL_INCOME.getCode())) {
-                detail.setComputeResult(dto.getMaterialIncome());
-            }else if (s.equals(ReportItemTypeEnum.ITEM_INCOME.getCode())) {
-                detail.setComputeResult(dto.getItemIncome());
-            }else if (s.equals(ReportItemTypeEnum.DRUG_COST.getCode())) {
-                detail.setComputeResult(dto.getDrugCost());
-            }else if (s.equals(ReportItemTypeEnum.MATERIAL_COST.getCode())) {
-                detail.setComputeResult(dto.getMaterialCost());
-            }else if (s.equals(ReportItemTypeEnum.ITEM_COST.getCode())) {
-                detail.setComputeResult(dto.getItemCost());
-            }else if (s.equals(ReportItemTypeEnum.EMP_COST.getCode())) {
-                detail.setComputeResult(dto.getEmpCost());
-            }else if (s.equals(ReportItemTypeEnum.EQUIPMENT_COST.getCode())) {
-                detail.setComputeResult(dto.getEquipmentCost());
-            }else if (s.equals(ReportItemTypeEnum.SPACE_COST.getCode())) {
-                detail.setComputeResult(dto.getSpaceCost());
-            }  else {
+            if(Objects.nonNull(dto)){
+                if(s.equals(ReportItemTypeEnum.DRUG_INCOME.getCode())){
+                    detail.setComputeResult(dto.getDrugIncome());
+                }else if (s.equals(ReportItemTypeEnum.MATERIAL_INCOME.getCode())) {
+                    detail.setComputeResult(dto.getMaterialIncome());
+                }else if (s.equals(ReportItemTypeEnum.ITEM_INCOME.getCode())) {
+                    detail.setComputeResult(dto.getItemIncome());
+                }else if (s.equals(ReportItemTypeEnum.DRUG_COST.getCode())) {
+                    detail.setComputeResult(dto.getDrugCost());
+                }else if (s.equals(ReportItemTypeEnum.MATERIAL_COST.getCode())) {
+                    detail.setComputeResult(dto.getMaterialCost());
+                }else if (s.equals(ReportItemTypeEnum.ITEM_COST.getCode())) {
+                    detail.setComputeResult(dto.getItemCost());
+                }else if (s.equals(ReportItemTypeEnum.EMP_COST.getCode())) {
+                    detail.setComputeResult(dto.getEmpCost());
+                }else if (s.equals(ReportItemTypeEnum.EQUIPMENT_COST.getCode())) {
+                    detail.setComputeResult(dto.getEquipmentCost());
+                }else if (s.equals(ReportItemTypeEnum.SPACE_COST.getCode())) {
+                    detail.setComputeResult(dto.getSpaceCost());
+                }  else {
+                    detail.setComputeResult(BigDecimal.ZERO);
+
+                }
+            }else {
                 detail.setComputeResult(BigDecimal.ZERO);
+
             }
+
             details.add(detail);
         }
         return details;

+ 18 - 2
src/main/java/com/kcim/service/impl/CostAccountShareServiceImpl.java

@@ -74,8 +74,21 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
                 .orderByAsc(CostAccountShare::getShareLevel));
         List<CostAccountShare> costAccountShareList = pages.getRecords();
 
+
+        List<Responsibility> responsibilities = responsibilityService.list(
+                new LambdaQueryWrapper<Responsibility>()
+                        .eq(Responsibility::getHospId, UserContext.getHospId())
+                        .orderByDesc(Responsibility::getCreateTime)
+        );
+
+        Map<Long,String> map = new HashMap<>();
+        if(!CollectionUtils.isEmpty(responsibilities)){
+            map = responsibilities.stream().collect(Collectors.toMap(Responsibility::getId, Responsibility::getShareName, (a, b) -> b));
+
+        }
+
         List<CostAccountShareVO> costAccountShareVOList = BeanUtil.convertList(costAccountShareList, CostAccountShareVO.class);
-        costAccountShareVOList.forEach(i -> {
+        for (CostAccountShareVO i : costAccountShareVOList) {
             String accountingIds = i.getAccountingIds();
             if (StrUtil.isNotBlank(accountingIds)) {
                 List<String> list = Arrays.asList(accountingIds.split(StrUtil.COMMA));
@@ -83,7 +96,10 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
             } else {
                 i.setAccountingIdList(null);
             }
-        });
+            if (!CollectionUtils.isEmpty(map)) {
+                i.setShareName(map.get(i.getResponsibilityId()));
+            }
+        }
 //        getMessage(hospId, costAccountShareVOList);
         PageUtils pageUtils = new PageUtils(pages);
         pageUtils.setList(costAccountShareVOList);

+ 3 - 1
src/main/java/com/kcim/service/impl/CostCostingGroupServiceImpl.java

@@ -28,6 +28,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.regex.Pattern;
 
 
 @Service("costCostingGroupService")
@@ -269,6 +270,7 @@ public class CostCostingGroupServiceImpl extends ServiceImpl<CostCostingGroupMap
      * @param costCostingGroupArrayList
      */
     private void checkCostData(List<List<Object>> list, List<IncomeErrorMessage> incomeErrorMessageList, Map<String, Department> departmentMap, Map<String, Product> productMap, Map<Long, Responsibility> responsibilityMap, Map<Long, Accounting> accountingMap, Map<Long, Long> responsibilityDepMap, Map<Long, Long> accountProMap, List<CostCostingGroup> costCostingGroupArrayList, Integer year, Integer month) {
+        Pattern pattern = Pattern.compile("^\\d+(\\.\\d+)?$");
         List<Object> departmentCodes = list.get(0);
         List<Object> departmentNames = list.get(1);
         //检验数据是否准确
@@ -280,7 +282,7 @@ public class CostCostingGroupServiceImpl extends ServiceImpl<CostCostingGroupMap
                 if (data.size() > j) {
                     if (Objects.isNull(data.get(j))) {
                         data.set(j, NumberConstant.ZERO);
-                    } else if (data.get(j).toString().contains("-") || !StringUtils.isNumeric(data.get(j).toString())) {
+                    } else if (data.get(j).toString().contains("-") || !pattern.matcher(data.get(j).toString()).matches()) {//!StringUtils.isNumeric(data.get(j).toString())
                         IncomeErrorMessage incomeErrorMessage = new IncomeErrorMessage();
                         incomeErrorMessage.setTotal(row);
                         incomeErrorMessage.setErrMessage("第" + row + "行 第" + column + "列数据不符合规范");

+ 60 - 4
src/main/java/com/kcim/service/impl/CostDepartmentProfitServiceImpl.java

@@ -1,8 +1,10 @@
 package com.kcim.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.poi.excel.ExcelUtil;
 import cn.hutool.poi.excel.ExcelWriter;
@@ -10,6 +12,7 @@ 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.kcim.common.enums.DateStyleEnum;
+import com.kcim.common.enums.ErrorCodeEnum;
 import com.kcim.common.exception.CostException;
 import com.kcim.common.file.MinioConfig;
 import com.kcim.common.file.MinioFileUtil;
@@ -23,12 +26,21 @@ import com.kcim.dao.model.*;
 import com.kcim.vo.AllocationQueryReportVO;
 import com.kcim.vo.CostDepartmentProfitVO;
 import com.kcim.service.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.FileItemHeaders;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.poi.ss.usermodel.Sheet;
+
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
-import java.io.File;
+import javax.servlet.ServletOutputStream;
+import java.io.*;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
@@ -36,6 +48,7 @@ import java.util.stream.Collectors;
 
 
 @Service("costDepartmentProfitService")
+@Slf4j
 public class CostDepartmentProfitServiceImpl extends ServiceImpl<CostDepartmentProfitMapper, CostDepartmentProfit> implements CostDepartmentProfitService {
 
 //    @Value("${file.filelocal}")
@@ -413,7 +426,7 @@ public class CostDepartmentProfitServiceImpl extends ServiceImpl<CostDepartmentP
      */
     @Override
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
-    public void getDepartProfitReport(String date, Long hospId, Integer reportType) {
+    public void getDepartProfitReport(String date, Long hospId, Integer reportType) throws IOException {
         DateTime dateTime = DateUtil.parse(date);
         int year = DateUtil.year(dateTime);
         int month = DateUtil.month(dateTime)+1;
@@ -422,23 +435,66 @@ public class CostDepartmentProfitServiceImpl extends ServiceImpl<CostDepartmentP
         String time = DateUtil.format(DateUtil.date(), "yyyy年MM月dd日HH时mm分ss秒");
 //        String bucketName = minioConfig.getBucketName();
 //        String uploadFileName = "file"+"/"+hospId + "/" + year + "/" + month + "/" + day + "/" + originalFilename;
+        FileItemFactory factory = new DiskFileItemFactory(5242880,null);
+
+        FileItem fileItem = factory.createItem("file", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8", true, "科室损益" + time + ".xlsx");
+        OutputStream outputStream = fileItem.getOutputStream();
 
-        String fileName = File.separator + hospId + File.separator + "hospReport" + File.separator + "科室损益" + time + ".xlsx";
+        String fileName = "科室损益" + time + ".xlsx";
         ExcelWriter writer = ExcelUtil.getWriter(fileName);
+
         Sheet sheet = writer.getSheet();
         getDepartmentProfit(writer,sheet,date);
+        writer.flush(outputStream,true);
+
+        MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
+        String file = uploadFile(multipartFile);
+
         FileRecord fileRecord = new FileRecord();
         fileRecord.setFileName("科室损益" + time + ".xlsx")
                 .setFileSource(reportType)
                 .setFileType("科室损益")
-                .setFileUrl( hospId + File.separator + "hospReport" + File.separator + "科室损益" + time + ".xlsx")
+                .setFileUrl( file)
                 .setHospId(hospId)
                 .setDateYear(year).setDateMonth(month)
                 .setCreateTime(System.currentTimeMillis());
         fileRecordService.save(fileRecord);
         writer.close();
+        fileItem.delete();
+    }
+
+
+    public String uploadFile(MultipartFile file) {
+        Long hospId = UserContext.getCurrentLoginHospId();
+        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf(".")) + System.currentTimeMillis() + ".xlsx";
+        DateTime date = DateUtil.date();
+        int month = DateUtil.month(date) + 1;
+        int year = DateUtil.year(date);
+        int day = DateUtil.dayOfMonth(date);
+        String fileUrl="";
+        try {
+//            file.transferTo(new File(localFilePath));
+            String format = DateUtil.format(date, DatePattern.PURE_DATETIME_PATTERN);
+            String originalFilename = format + fileName;
+
+            String dataDirectory = minioConfig.getBucketName();
+            String uploadFileName = "departReport"+"/"+hospId + "/" + year + "/" + month + "/" + day + "/" + originalFilename;
+
+
+            InputStream inputStream = file.getInputStream();
+
+            minioFileUtil.putObject(dataDirectory, uploadFileName, inputStream);
+            fileUrl = minioFileUtil.getObjectUrl(dataDirectory, uploadFileName);
+
+        } catch (IOException e) {
+            log.error("【文件上传至服务器】失败,绝对路径:{}", e.getMessage());
+            throw new CostException(ErrorCodeEnum.FILE_UPLOAD_ERROR);
+        }
+        return fileUrl;
     }
 
+
+
     /**
      * 删除科室损益数据
      *

+ 12 - 5
src/main/java/com/kcim/service/impl/CostIncomeGroupServiceImpl.java

@@ -291,7 +291,9 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
      * @return
      */
     public Map<String, Department> getDepartmentByCodeNameMap(Long hospId) {
-        return departmentService.list(new QueryWrapper<Department>().lambda().eq(Department::getHospId, hospId)).stream().collect(Collectors.toMap(k -> k.getDepartmentCode() + k.getDepartmentName(), synOe -> synOe));
+        List<Department> departments = departmentService.getDepartments();
+       return departments.stream().collect(Collectors.toMap(k -> k.getDepartmentCode() + k.getDepartmentName(), synOe -> synOe)) ;
+//        return departmentService.list(new QueryWrapper<Department>().lambda().eq(Department::getHospId, hospId)).stream().collect(Collectors.toMap(k -> k.getDepartmentCode() + k.getDepartmentName(), synOe -> synOe));
     }
 
     /**
@@ -478,10 +480,15 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
                 costIncomeGroup.setStartResponsibilityCode(null);
                 costIncomeGroup.setStartResponsibilityName(null);
             }
-            costIncomeGroup.setDoctorNumber(StrUtil.isBlank(data.get(6).toString()) ? null : Long.parseLong(data.get(6).toString())).setDoctorName(data.get(7).toString())
-                    .setPatientId(StrUtil.isBlank(data.get(8).toString()) ? null : Long.parseLong(data.get(8).toString())).setOutpatientId(StrUtil.isBlank(data.get(9).toString()) ? null : Long.parseLong(data.get(9).toString()))
-                    .setPatientName(data.get(10).toString()).setPatientFee(data.get(11).toString()).setReceiptFee(data.get(12).toString())
-                    .setTotalNumber(StrUtil.isBlank(data.get(13).toString()) ? null : Integer.parseInt(data.get(13).toString())).setUnit(data.get(14).toString())
+            costIncomeGroup.setDoctorNumber(StrUtil.isBlank(data.get(6).toString()) ? null : Long.parseLong(data.get(6).toString()))
+                    .setDoctorName(data.get(7).toString())
+                    .setPatientId(StrUtil.isBlank(data.get(8).toString()) ? null : Long.parseLong(data.get(8).toString()))
+                    .setOutpatientId(StrUtil.isBlank(data.get(9).toString()) ? null : Long.parseLong(data.get(9).toString()))
+                    .setPatientName(data.get(10).toString())
+                    .setPatientFee(data.get(11).toString())
+                    .setReceiptFee(data.get(12).toString())
+                    .setTotalNumber(StrUtil.isBlank(data.get(13).toString()) ? null : Integer.parseInt(data.get(13).toString()))
+                    .setUnit(data.get(14).toString())
                     .setFeeDatetime(StrUtil.isBlank(data.get(16).toString()) ? null : DateUtils.StringToDate(data.get(16).toString(), DateStyleEnum.YYYY_MM_DD_HH_MM_SS));
             costIncomeGroup.setHospId(hospId);
             costIncomeGroup.setCreateTime(System.currentTimeMillis());

+ 10 - 0
src/main/java/com/kcim/service/impl/CostOtherPaymentsServiceImpl.java

@@ -3,6 +3,7 @@ package com.kcim.service.impl;
 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.kcim.common.constants.NumberConstant;
 import com.kcim.common.exception.CostException;
 import com.kcim.common.util.BeanUtil;
 import com.kcim.common.util.PageUtils;
@@ -41,6 +42,15 @@ public class CostOtherPaymentsServiceImpl extends ServiceImpl<CostOtherPaymentsM
         List<CostOtherPayments> records = pages.getRecords();
         List<CostOtherPaymentsVO> costOtherPaymentsVOList = BeanUtil.convertList(records, CostOtherPaymentsVO.class);
         PageUtils pageUtils = new PageUtils(pages);
+        for (CostOtherPaymentsVO vo : costOtherPaymentsVOList) {
+            if(vo.getPaymentsType().equals(NumberConstant.ONE)){
+                vo.setPaymentsTypeName("收入");
+            } else if (vo.getPaymentsType().equals(NumberConstant.TWO)) {
+                vo.setPaymentsTypeName("支出");
+            }else {
+                vo.setPaymentsTypeName("未知");
+            }
+        }
         pageUtils.setList(costOtherPaymentsVOList);
         return pageUtils;
     }

+ 26 - 1
src/main/java/com/kcim/service/impl/CostResponsibilityDepartmentServiceImpl.java

@@ -8,25 +8,30 @@ import com.kcim.common.constants.NumberConstant;
 import com.kcim.dao.mapper.CostResponsibilityDepartmentMapper;
 import com.kcim.dao.model.CostResponsibilityDepartment;
 import com.kcim.dao.model.Department;
+import com.kcim.dao.repository.CostResponsibilityDepartmentRepository;
 import com.kcim.vo.CostDepartmentVO;
 import com.kcim.service.CostResponsibilityDepartmentService;
 import com.kcim.common.util.BeanUtil;
+import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
 
 @Service("/costResponsibilityDepartmentService")
+@AllArgsConstructor
 public class CostResponsibilityDepartmentServiceImpl extends ServiceImpl<CostResponsibilityDepartmentMapper, CostResponsibilityDepartment> implements CostResponsibilityDepartmentService {
 
-    @Autowired
     private DepartmentServiceImpl departmentService;
+
+    CostResponsibilityDepartmentRepository repository;
     /**
      * 根据责任中心的Id获取对应的科室信息的集合
      *
@@ -38,11 +43,31 @@ public class CostResponsibilityDepartmentServiceImpl extends ServiceImpl<CostRes
         if (responsibilityId<=0){
             throw new CostException("请选择责任中心数据");
         }
+
+        List<CostResponsibilityDepartment> list = repository.getList();
+
         // 当前医院责任中心所具有的的科室
         List<CostResponsibilityDepartment> costResponsibilityDepartmentList = baseMapper.selectList(new QueryWrapper<CostResponsibilityDepartment>().lambda().eq(CostResponsibilityDepartment::getResponsibilityId, responsibilityId));
         Map<Long, List<CostResponsibilityDepartment>> costResponsibilityDepartmentMap = costResponsibilityDepartmentList.stream().distinct().collect(Collectors.groupingBy(CostResponsibilityDepartment::getDepartmentId));
         // 所有科室
         List<Department> departmentList = departmentService.getByDepartment(null,null,null, UserContext.getHospId());
+        if(!CollectionUtils.isEmpty(list)){
+            //过滤出已对照过的科室
+            List<Long> collect = list.stream().map(CostResponsibilityDepartment::getDepartmentId).collect(Collectors.toList());
+            List<Department> removeList = new ArrayList<>();
+            for (Department department : departmentList) {
+                if(collect.contains(department.getId())){
+                    removeList.add(department);
+                }
+            }
+            if(!CollectionUtils.isEmpty(removeList)){
+                departmentList.removeAll(removeList);
+            }
+        }
+
+
+
+
         List<CostDepartmentVO> departVOList = BeanUtil.convertList(departmentList, CostDepartmentVO.class);
         departVOList.forEach(i->{
             if (!CollectionUtils.isEmpty(costResponsibilityDepartmentMap.get(i.getId()))){

+ 23 - 13
src/main/java/com/kcim/service/impl/DepartmentServiceImpl.java

@@ -17,6 +17,7 @@ import com.kcim.dao.mapper.DepartmentMapper;
 import com.kcim.dao.model.Department;
 import com.kcim.dao.model.Hospital;
 import com.kcim.dao.model.dto.DepartmentRequest;
+import com.kcim.dao.model.dto.SysDepartment;
 import com.kcim.service.CenterService;
 import com.kcim.vo.DepartmentVO;
 import com.kcim.service.DepartmentService;
@@ -87,24 +88,17 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
 //                .eq(!StringUtils.isEmpty(hospId), Department::getHospId, hospId)
 //                .orderByDesc(Department::getCreateTime);
 //        List<Department> departmentList = baseMapper.selectList(wrapper);
-        Map<String, String> department = centerService.getDepartment();
+        List<SysDepartment> departmentFilter = centerService.getDepartmentFilter(null);
         List<Department> departmentList = new ArrayList<>();
-        if(!CollectionUtils.isEmpty(department)){
-            Long i = 1L;
-            for (String s : department.keySet()) {
+        if(!CollectionUtils.isEmpty(departmentFilter)){
+            for (SysDepartment sysDepartment : departmentFilter) {
                 Department depart = new Department();
-                depart.setId(i);
-                depart.setDepartmentCode(s);
-                depart.setDepartmentName(department.get(s));
+                depart.setId(Long.valueOf(sysDepartment.getId()));
+                depart.setDepartmentCode(sysDepartment.getCode());
+                depart.setDepartmentName(sysDepartment.getName());
                 departmentList.add(depart);
-                i++;
             }
-
         }
-
-
-
-
         return departmentList;
     }
 
@@ -251,4 +245,20 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
     public void deleteByIds(List<Integer> idList) {
         this.removeByIds(idList);
     }
+
+    @Override
+    public List<Department> getDepartments() {
+        List<SysDepartment> departmentFilter = centerService.getDepartmentFilter(null);
+        List<Department> departmentList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(departmentFilter)){
+            for (SysDepartment sysDepartment : departmentFilter) {
+                Department depart = new Department();
+                depart.setId(Long.valueOf(sysDepartment.getId()));
+                depart.setDepartmentCode(sysDepartment.getCode());
+                depart.setDepartmentName(sysDepartment.getName());
+                departmentList.add(depart);
+            }
+        }
+        return departmentList;
+    }
 }

+ 7 - 0
src/main/java/com/kcim/service/impl/EmpCostMapServiceImpl.java

@@ -7,6 +7,7 @@ import com.kcim.common.exception.CostException;
 import com.kcim.common.util.PageUtils;
 import com.kcim.common.util.UserContext;
 import com.kcim.dao.model.EmpCostMap;
+import com.kcim.dao.model.dto.SysDepartment;
 import com.kcim.dao.repository.EmpCostMapRepository;
 import com.kcim.service.CenterService;
 import com.kcim.service.EmpCostMapService;
@@ -87,6 +88,12 @@ public class EmpCostMapServiceImpl implements EmpCostMapService {
         List<DictDataVo> dataVoList = centerDict.getDataVoList();
         Map<String,String> positionMap = dataVoList.stream().collect(Collectors.toMap(DictDataVo::getCode, DictDataVo::getName, (a, b) -> b));
         Map<Long,UserInfoVO> mapUser = userInfo.stream().collect(Collectors.toMap(UserInfoVO::getId, infoVO -> infoVO, (a, b) -> b));
+        List<SysDepartment> departmentFilter = centerService.getDepartmentFilter(null);
+        Map<Integer,String> departmentMap = new HashMap<>();
+        for (SysDepartment sysDepartment : departmentFilter) {
+            departmentMap.put(sysDepartment.getId(), sysDepartment.getCode());
+        }
+
         List<EmpCostMap> list = repository.getList();
         for (EmpCostMap empCostMap : list) {
             Long userId = empCostMap.getUserId();

+ 67 - 3
src/main/java/com/kcim/service/impl/HospProfitAndLossServiceImpl.java

@@ -1,6 +1,7 @@
 package com.kcim.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ReUtil;
@@ -11,9 +12,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kcim.common.enums.CalcTypeEnum;
+import com.kcim.common.enums.ErrorCodeEnum;
 import com.kcim.common.enums.ReportTypeEnum;
 import com.kcim.common.exception.CostException;
+import com.kcim.common.file.MinioConfig;
+import com.kcim.common.file.MinioFileUtil;
 import com.kcim.common.util.PageUtils;
+import com.kcim.common.util.UserContext;
 import com.kcim.dao.mapper.HospProfitAndLossMapper;
 import com.kcim.dao.model.*;
 import com.kcim.vo.RelationVO;
@@ -21,11 +26,19 @@ import com.kcim.vo.ReportFormVO;
 import com.kcim.common.constants.Constant;
 import com.kcim.service.*;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
@@ -53,6 +66,9 @@ public class HospProfitAndLossServiceImpl extends ServiceImpl<HospProfitAndLossM
     private final CostAccountShareService accountShareService;
     private final FileRecordService fileRecordService;
 
+    private final MinioConfig minioConfig;
+
+    private final MinioFileUtil minioFileUtil;
     public HospProfitAndLossServiceImpl(ReportFormService reportFormService,
                                         IncomeCollectionService collectionService,
                                         AllocationQueryService allocationQueryService,
@@ -60,7 +76,7 @@ public class HospProfitAndLossServiceImpl extends ServiceImpl<HospProfitAndLossM
                                         CostShareLevelService shareLevelService,
                                         CostOtherPaymentsDataService otherPaymentsDataService,
                                         ResponsibilityService responsibilityService,
-                                        CostAccountShareService accountShareService, FileRecordService fileRecordService) {
+                                        CostAccountShareService accountShareService, FileRecordService fileRecordService, MinioConfig minioConfig, MinioFileUtil minioFileUtil) {
         this.reportFormService = reportFormService;
         this.collectionService = collectionService;
         this.allocationQueryService = allocationQueryService;
@@ -70,6 +86,8 @@ public class HospProfitAndLossServiceImpl extends ServiceImpl<HospProfitAndLossM
         this.responsibilityService = responsibilityService;
         this.accountShareService = accountShareService;
         this.fileRecordService = fileRecordService;
+        this.minioConfig = minioConfig;
+        this.minioFileUtil = minioFileUtil;
     }
 
 
@@ -420,7 +438,7 @@ public class HospProfitAndLossServiceImpl extends ServiceImpl<HospProfitAndLossM
 //        ExcelWriter writer = ExcelUtil.getWriter();
         String time = DateUtil.format(DateUtil.date(), "yyyy年MM月dd日HH时mm分ss秒");
         //todo:后面调整为上传到文件服务器,先启动确认环境
-        String fileName =  File.separator + hospId + File.separator + "hospReport" + File.separator + "全院损益" + time + ".xlsx";
+        String fileName =   "全院损益" + time + ".xlsx";
         ExcelWriter writer = ExcelUtil.getWriter(fileName);
 
         List<String> secondTitleListCode = leafResp.stream().map(Responsibility::getResponsibilityCode).collect(Collectors.toList());
@@ -534,14 +552,60 @@ public class HospProfitAndLossServiceImpl extends ServiceImpl<HospProfitAndLossM
             }
             lastRow = lastRow + size;
         }
+
+        FileItemFactory factory = new DiskFileItemFactory(5242880,null);
+
+        FileItem fileItem = factory.createItem("file", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8", true, "全院损益" + time + ".xlsx");
+        String file = "";
+        try {
+            OutputStream outputStream = fileItem.getOutputStream();
+            writer.flush(outputStream,true);
+            MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
+             file = uploadFile(multipartFile);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+
         FileRecord fileRecord = new FileRecord();
-        fileRecord.setFileName("全院损益" + time + ".xlsx").setFileSource(1).setFileType("全院损益").setFileUrl( hospId + File.separator + "hospReport" + File.separator + "全院损益" + time + ".xlsx").setHospId(hospId)
+        fileRecord.setFileName("全院损益" + time + ".xlsx")
+                .setFileSource(1)
+                .setFileType("全院损益")
+                .setFileUrl( file)
+                .setHospId(hospId)
                 .setDateYear(year).setDateMonth(month)
                 .setCreateTime(System.currentTimeMillis());
         fileRecordService.save(fileRecord);
         writer.close();
     }
+    public String uploadFile(MultipartFile file) {
+        Long hospId = UserContext.getCurrentLoginHospId();
+        String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf(".")) + System.currentTimeMillis() + ".xlsx";
+        DateTime date = DateUtil.date();
+        int month = DateUtil.month(date) + 1;
+        int year = DateUtil.year(date);
+        int day = DateUtil.dayOfMonth(date);
+        String fileUrl="";
+        try {
+//            file.transferTo(new File(localFilePath));
+            String format = DateUtil.format(date, DatePattern.PURE_DATETIME_PATTERN);
+            String originalFilename = format + fileName;
 
+            String dataDirectory = minioConfig.getBucketName();
+            String uploadFileName = "hospReport"+"/"+hospId + "/" + year + "/" + month + "/" + day + "/" + originalFilename;
+
+
+            InputStream inputStream = file.getInputStream();
+
+            minioFileUtil.putObject(dataDirectory, uploadFileName, inputStream);
+            fileUrl = minioFileUtil.getObjectUrl(dataDirectory, uploadFileName);
+
+        } catch (IOException e) {
+            log.error("【文件上传至服务器】失败,绝对路径:{}", e.getMessage());
+            throw new CostException(ErrorCodeEnum.FILE_UPLOAD_ERROR);
+        }
+        return fileUrl;
+    }
     @Override
     public PageUtils hospProfitReports(Integer current, Integer pageSize, Long hospId, String date) {
         DateTime parse = DateUtil.parse(date);

+ 52 - 75
src/main/java/com/kcim/service/impl/IncomeCollectionServiceImpl.java

@@ -156,47 +156,15 @@ public class IncomeCollectionServiceImpl
                         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());
+//                                if (StrUtil.isBlank(accountCode)) {
+//                                    continue;
+//                                }
+                                if(StrUtil.isNotBlank(accountCode)){
+                                    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());
@@ -206,7 +174,7 @@ public class IncomeCollectionServiceImpl
                                         // 执行科室数据
 
                                         IncomeCollection startCollect = BeanUtil.convertObj(incomeCollection, IncomeCollection.class);
-                                        startCollect.setAmount(afterIncomegroup.getStartDepartmentDecimal());
+                                        startCollect.setAmount(costIncomeGroup.getAmount());
                                         startCollect.setDepartmentCode(afterIncomegroup.getStartDepartmentCode());
                                         startCollect.setDepartmentName(afterIncomegroup.getStartDepartmentName());
                                         startCollect.setResponsibilityCode(afterIncomegroup.getStartResponsibilityCode());
@@ -214,45 +182,18 @@ public class IncomeCollectionServiceImpl
                                         log.info("start:{}", startCollect);
                                         log.info("open:{}", incomeCollection);
                                         list.add(startCollect);
+                                    } else {
+                                        percentCollection(list, incomeCollection, afterIncomegroup);
                                     }
+                                }else {
+                                    percentCollection(list, incomeCollection, afterIncomegroup);
                                 }
+
                             }
                         }
                         return;
                     }
-                    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);
-                    }
+                    percentCollection(list, incomeCollection, afterIncomegroup);
 
                 });
 
@@ -282,6 +223,42 @@ public class IncomeCollectionServiceImpl
 
     }
 
+    private void percentCollection(List<IncomeCollection> list, IncomeCollection incomeCollection, AfterIncomeGroup afterIncomegroup) {
+        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);
+        }
+    }
+
     /**
      * 按年月撤销归集
      *

+ 24 - 6
src/main/java/com/kcim/service/impl/ProductServiceImpl.java

@@ -19,16 +19,16 @@ import com.kcim.common.util.excel.entity.PatientItemImportEntity;
 import com.kcim.common.util.excel.entity.ProductTemplateEntity;
 import com.kcim.common.util.excel.handler.ItemTypeHandler;
 import com.kcim.dao.mapper.ProductMapper;
-import com.kcim.dao.model.Hospital;
-import com.kcim.dao.model.ImportPatientItem;
-import com.kcim.dao.model.Product;
+import com.kcim.dao.model.*;
 import com.kcim.dao.model.dto.ProductDTO;
 import com.kcim.dao.model.dto.ProductEditDTO;
+import com.kcim.dao.repository.AccountingProductRepository;
 import com.kcim.vo.CommonVO;
 import com.kcim.vo.DictDataVo;
 import com.kcim.vo.ProductVO;
 import com.kcim.service.ProductService;
 import com.kcim.common.util.BeanUtil;
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -47,11 +47,13 @@ import static com.kcim.common.constants.Constant.CHARGE_ITEM_TYPE;
 
 @Slf4j
 @Service("productService")
+@AllArgsConstructor
 public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
 
-    @Autowired
     private HospitalServiceImpl hospitalService;
 
+    AccountingProductRepository accountingProductRepository;
+
     /**
      * 分页查询
      *
@@ -75,7 +77,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             return new PageUtils(new ArrayList<>(),NumberConstant.ZERO,pageSize,current);
         }
         List<ProductVO> list = BeanUtil.convertList(records, ProductVO.class);
-        return new PageUtils(list,NumberConstant.ZERO,pageSize,current);
+        return new PageUtils(list, Math.toIntExact(pages.getTotal()),pageSize,current);
 
     }
 
@@ -142,7 +144,23 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         if (list.isEmpty()) {
             return Collections.emptyList();
         }
-       return list.stream().map(i -> {
+
+        List<AccountingProduct> accountingProducts = accountingProductRepository.getList();
+        if(!CollectionUtils.isEmpty(accountingProducts)){
+            //过滤出已对照过的会计收入项目
+            List<Long> collect = accountingProducts.stream().map(AccountingProduct::getProductId).collect(Collectors.toList());
+            List<Product> removeList = new ArrayList<>();
+            for (Product product : list) {
+                if(collect.contains(product.getId())){
+                    removeList.add(product);
+                }
+            }
+            if(!CollectionUtils.isEmpty(removeList)){
+                list.removeAll(removeList);
+            }
+        }
+
+        return list.stream().map(i -> {
             CommonVO commonVO = new CommonVO();
             commonVO.setId(i.getId());
             commonVO.setName(i.getProductName() + "[" + i.getProductCode() + "]");

+ 6 - 0
src/main/java/com/kcim/service/impl/ReportFormServiceImpl.java

@@ -23,6 +23,7 @@ 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.util.*;
 import java.util.regex.Matcher;
@@ -355,10 +356,15 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
         if (relations.isEmpty() || newSonForms.isEmpty()) {
             return;
         }
+        if(!CollectionUtils.isEmpty(relations)){
+            relations.forEach(relation -> relation.setId(null));
+
+        }
         newSonForms.forEach(i -> {
             relations.forEach(j -> {
                 if (i.getOldId() != 0 && i.getOldId().equals(j.getReportId())) {
                     j.setReportId(i.getId());
+
                     reportRelationService.save(j);
                 }
             });

+ 45 - 13
src/main/java/com/kcim/service/impl/ReportRelationServiceImpl.java

@@ -2,6 +2,7 @@ package com.kcim.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kcim.common.exception.CostException;
@@ -16,6 +17,7 @@ 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.util.ArrayList;
 import java.util.List;
@@ -54,7 +56,12 @@ public class ReportRelationServiceImpl extends ServiceImpl<ReportRelationMapper,
      */
     @Override
     public List<RelationVO> getShareLevel(Long reportId, Long hospId) {
-        return baseMapper.getShareParam(reportId, hospId);
+        List<RelationVO> shareParam = baseMapper.getShareParam(reportId, hospId);
+        if(!CollectionUtils.isEmpty(shareParam)){
+            shareParam.forEach(relationVO -> relationVO.setId(relationVO.getCode()));
+
+        }
+        return shareParam;
     }
 
     /**
@@ -114,6 +121,7 @@ public class ReportRelationServiceImpl extends ServiceImpl<ReportRelationMapper,
         Integer relation = reportRelationDTO.getRelation();
         List<String> relationCodes = reportRelationDTO.getRelationCodes();
         Long reportId = reportRelationDTO.getReportId();
+        Integer reportType = reportRelationDTO.getReportType();
 
         // 校验这个report是否能绑定
         ReportForm byId = reportFormMapper.selectById(reportId);
@@ -141,7 +149,7 @@ public class ReportRelationServiceImpl extends ServiceImpl<ReportRelationMapper,
             return reportRelation;
         }).collect(Collectors.toList());
         // 校验 关联关系的id 是否已绑定过其他的报表项目
-        checkIfExist(hospId, relation, relationCodes);
+        checkIfExist(hospId, relation, relationCodes,reportType);
         this.saveBatch(reportRelations);
     }
 
@@ -151,18 +159,42 @@ public class ReportRelationServiceImpl extends ServiceImpl<ReportRelationMapper,
      * @param hospId        医院id
      * @param relation      关系
      * @param relationCodes 所有需要绑定的code 列表
+     * @param reportType
      */
-    private void checkIfExist(Long hospId, Integer relation, List<String> relationCodes) {
-        List<ReportRelation> relations = this.list(
-                new LambdaQueryWrapper<ReportRelation>().select(ReportRelation::getRelationCode)
-                        .in(ReportRelation::getRelationCode, relationCodes)
-                        .eq(ReportRelation::getRelation, relation)
-                        .eq(ReportRelation::getHospId, hospId)
-        );
-        if (CollUtil.isNotEmpty(relations)) {
-            throw new CostException(500, "编码为:" +
-                    StrUtil.join(StrUtil.COMMA, relations.stream().map(ReportRelation::getRelationCode).collect(Collectors.toList())) +
-                    "已被其他项目代码绑定");
+    private void checkIfExist(Long hospId, Integer relation, List<String> relationCodes, Integer reportType) {
+        LambdaQueryWrapper<ReportForm> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ReportForm::getHospId,hospId);
+        wrapper.eq(ReportForm::getReportType,reportType);
+        List<ReportForm> reportForms = reportFormMapper.selectList(wrapper);
+        if(!CollectionUtils.isEmpty(reportForms)){
+            List<Long> collect = reportForms.stream().map(ReportForm::getId).collect(Collectors.toList());
+            List<ReportRelation> relations = this.list(
+                    new LambdaQueryWrapper<ReportRelation>().select(ReportRelation::getRelationCode)
+                            .in(ReportRelation::getRelationCode, relationCodes)
+                            .eq(ReportRelation::getRelation, relation)
+                            .eq(ReportRelation::getHospId, hospId)
+                            .in(ReportRelation::getReportId,collect)
+            );
+            if (CollUtil.isNotEmpty(relations)) {
+                throw new CostException(500, "编码为:" +
+                        StrUtil.join(StrUtil.COMMA, relations.stream().map(ReportRelation::getRelationCode).collect(Collectors.toList())) +
+                        "已被其他项目代码绑定");
+            }
+        }else {
+            List<ReportRelation> relations = this.list(
+                    new LambdaQueryWrapper<ReportRelation>().select(ReportRelation::getRelationCode)
+                            .in(ReportRelation::getRelationCode, relationCodes)
+                            .eq(ReportRelation::getRelation, relation)
+                            .eq(ReportRelation::getHospId, hospId)
+            );
+            if (CollUtil.isNotEmpty(relations)) {
+                throw new CostException(500, "编码为:" +
+                        StrUtil.join(StrUtil.COMMA, relations.stream().map(ReportRelation::getRelationCode).collect(Collectors.toList())) +
+                        "已被其他项目代码绑定");
+            }
         }
+
+
+
     }
 }

+ 5 - 0
src/main/java/com/kcim/service/impl/ResponsibilityDepartmentServiceImpl.java

@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -64,6 +65,8 @@ public class ResponsibilityDepartmentServiceImpl
         if (CollUtil.isEmpty(departmentIds)) {
             return ;
         }
+        List<Long> remove = departmentIds.stream().filter(Objects::isNull).collect(Collectors.toList());
+        departmentIds.removeAll(remove);
         Responsibility byId = responsibilityService.getById(responsibilityId);
         if (Objects.isNull(byId)) {
             throw new CostException(500, "责任中心不存在或已被移除");
@@ -79,4 +82,6 @@ public class ResponsibilityDepartmentServiceImpl
 
         this.saveBatch(data);
     }
+
+
 }

+ 78 - 12
src/main/java/com/kcim/service/impl/ResponsibilityServiceImpl.java

@@ -12,8 +12,12 @@ import com.kcim.common.enums.ErrorCodeEnum;
 import com.kcim.dao.mapper.ResponsibilityDepartmentMapper;
 import com.kcim.dao.mapper.ResponsibilityMapper;
 import com.kcim.dao.model.Responsibility;
+import com.kcim.dao.model.ResponsibilityDepartment;
 import com.kcim.dao.model.dto.ResponsibilityEditDTO;
 import com.kcim.dao.model.dto.ResponsibilitySaveDTO;
+import com.kcim.dao.model.dto.SysDepartment;
+import com.kcim.dao.repository.ResponsibilityDepartmentRepository;
+import com.kcim.service.CenterService;
 import com.kcim.service.ResponsibilityService;
 import com.kcim.common.constants.Constant;
 import com.kcim.vo.*;
@@ -22,6 +26,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -33,10 +38,14 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
 
     private final CostShareLevelServiceImpl costShareLevelService;
     private final ResponsibilityDepartmentMapper responsibilityDepartMapper;
+    private final CenterService centerService;
 
-    public ResponsibilityServiceImpl(CostShareLevelServiceImpl costShareLevelService, ResponsibilityDepartmentMapper responsibilityDepartMapper) {
+    private final ResponsibilityDepartmentRepository responsibilityDepartmentRepository;
+    public ResponsibilityServiceImpl(CostShareLevelServiceImpl costShareLevelService, ResponsibilityDepartmentMapper responsibilityDepartMapper, CenterService centerService, ResponsibilityDepartmentRepository responsibilityDepartmentRepository) {
         this.costShareLevelService = costShareLevelService;
         this.responsibilityDepartMapper = responsibilityDepartMapper;
+        this.centerService = centerService;
+        this.responsibilityDepartmentRepository = responsibilityDepartmentRepository;
     }
 
     /**
@@ -351,18 +360,75 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
             return vo;
         }).collect(Collectors.toList());
 
-        return centerDepartmentVOS.stream().filter(i -> i.getParentId() == 0)
-                .peek(i -> {
-                    List<CenterDepartmentVO> responsibilityChildrenForRelation = this.getResponsibilityChildrenForRelation(i, centerDepartmentVOS);
-                    if (CollUtil.isEmpty(responsibilityChildrenForRelation)) {
-                        i.setDepartments(responsibilityDepartMapper.getDepartByCenterId(i.getResponsibilityId()));
-                        i.setIsParent(false);
-                        i.setDepartments(responsibilityDepartMapper.getDepartByCenterId(i.getResponsibilityId()));
+        List<SysDepartment> departmentFilter = centerService.getDepartmentFilter(null);
+        Map<Long,String> departmentMap = departmentFilter.stream().collect(Collectors.toMap(sysDepartment -> Long.valueOf(sysDepartment.getId()), SysDepartment::getName, (a, b) -> b));
+        Map<Long,String> departmentCodeMap = departmentFilter.stream().collect(Collectors.toMap(sysDepartment -> Long.valueOf(sysDepartment.getId()), SysDepartment::getCode, (a, b) -> b));
+
+        List<ResponsibilityDepartment> responsibilityDepartment = responsibilityDepartmentRepository.getResponsibilityDepartment();
+        if(!CollectionUtils.isEmpty(responsibilityDepartment)){
+            Map<Long, List<ResponsibilityDepartment>> collect = responsibilityDepartment.stream().collect(Collectors.groupingBy(ResponsibilityDepartment::getResponsibilityId));
+            //组装科室
+            Map<Long,List<DepartVO> > responsibilityDepartmentMap = new HashMap<>();
+            for (Long aLong : collect.keySet()) {
+                List<ResponsibilityDepartment> responsibilityDepartments = collect.get(aLong);
+                List<DepartVO> departVOS = new ArrayList<>();
+                for (ResponsibilityDepartment department : responsibilityDepartments) {
+                    DepartVO vo = new DepartVO();
+                    String departName = departmentMap.get(department.getDepartmentId());
+                    if(!StringUtils.isEmpty(departName)){
+                        vo.setDepartmentId(department.getDepartmentId());
+                        vo.setDepartmentName(departName +departmentCodeMap.get(department.getDepartmentId()));
                     }
-                    i.setChild(responsibilityChildrenForRelation);
-                    i.setIsParent(true);
-                })
-                .collect(Collectors.toList());
+                    departVOS.add(vo);
+                }
+                responsibilityDepartmentMap.put(aLong,departVOS);
+            }
+
+            centerDepartmentVOS.forEach(centerDepartmentVO -> centerDepartmentVO.setDepartments(responsibilityDepartmentMap.get(centerDepartmentVO.getResponsibilityId())));
+
+        }
+        //
+        Map<Long, List<CenterDepartmentVO>> collectParentGroup = centerDepartmentVOS.stream().collect(Collectors.groupingBy(CenterDepartmentVO::getParentId));
+        //获取父类
+        List<CenterDepartmentVO> voList = collectParentGroup.get(NumberConstant.ZERO_L);
+
+        for (CenterDepartmentVO centerDepartmentVO : voList) {
+            List<CenterDepartmentVO> departmentVOS = collectParentGroup.get(centerDepartmentVO.getId());
+            if(!CollectionUtils.isEmpty(departmentVOS)){
+                for (CenterDepartmentVO departmentVO : departmentVOS) {
+                    handleTree(departmentVO,collectParentGroup);
+                }
+            }
+
+            centerDepartmentVO.setIsParent(true);
+            centerDepartmentVO.setChild(departmentVOS);
+        }
+
+        return voList;//        return centerDepartmentVOS.stream().filter(i -> i.getParentId() == 0)
+//                .peek(i -> {
+//                    List<CenterDepartmentVO> responsibilityChildrenForRelation = this.getResponsibilityChildrenForRelation(i, centerDepartmentVOS);
+//                    if (CollUtil.isEmpty(responsibilityChildrenForRelation)) {
+//                        i.setDepartments(responsibilityDepartMapper.getDepartByCenterId(i.getResponsibilityId()));
+//                        i.setIsParent(false);
+//                        i.setDepartments(responsibilityDepartMapper.getDepartByCenterId(i.getResponsibilityId()));
+//                    }
+//                    i.setChild(responsibilityChildrenForRelation);
+//                    i.setIsParent(true);
+//                })
+//                .collect(Collectors.toList());
+
+    }
+    private void handleTree(CenterDepartmentVO vo,Map<Long, List<CenterDepartmentVO>> collectParentGroup){
+        List<CenterDepartmentVO> departmentVOS = collectParentGroup.get(vo.getId());
+        if(!CollectionUtils.isEmpty(departmentVOS)){
+            for (CenterDepartmentVO departmentVO : departmentVOS) {
+                handleTree(departmentVO,collectParentGroup);
+            }
+            vo.setIsParent(false);
+            vo.setChild(departmentVOS);
+        }
+
+
 
     }
 

+ 8 - 2
src/main/java/com/kcim/service/impl/ShareParamValueServiceImpl.java

@@ -31,6 +31,8 @@ import org.springframework.web.multipart.MultipartFile;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import static cn.hutool.core.date.DatePattern.PURE_DATE_PATTERN;
@@ -323,6 +325,11 @@ public class ShareParamValueServiceImpl extends ServiceImpl<ShareParamValueMappe
                                           Map<Long, Responsibility> responsibilityMap, Map<Long, Long> responsibilityDepMap,
                                           Map<String, CostShareParam> shareParamMap, List<ShareParamValue> shareParamValues,
                                           List<Object> departmentCodes, List<Object> departmentNames) {
+
+        Pattern pattern = Pattern.compile("^\\d+(\\.\\d+)?$");
+
+
+
         for (int i = 2; i < list.size(); i++) {
             int row = i + 4;
             List<Object> data = list.get(i);
@@ -344,7 +351,7 @@ public class ShareParamValueServiceImpl extends ServiceImpl<ShareParamValueMappe
                 if (data.size() > j) {
                     if (Objects.isNull(data.get(j))) {
                         data.set(j, NumberConstant.ZERO);
-                    } else if (data.get(j).toString().contains("-") || !StringUtils.isNumeric(data.get(j).toString())) {
+                    } else if (data.get(j).toString().contains("-") || !pattern.matcher(data.get(j).toString()).matches()) {//!StringUtils.isNumeric(data.get(j).toString())
                         IncomeErrorMessage incomeErrorMessage = new IncomeErrorMessage();
                         incomeErrorMessage.setTotal(row);
                         incomeErrorMessage.setErrMessage("第" + row + "行 第" + column + "列数据不符合规范");
@@ -381,7 +388,6 @@ public class ShareParamValueServiceImpl extends ServiceImpl<ShareParamValueMappe
                                 Responsibility responsibility = responsibilityMap.get(responsibilityId);
                                 if (Objects.nonNull(responsibility)) {
                                     shareParamValue.setResponsibilityCode(responsibility.getResponsibilityCode());
-
                                 } else {
                                     IncomeErrorMessage incomeErrorMessage = new IncomeErrorMessage();
                                     incomeErrorMessage.setTotal(j);

+ 2 - 1
src/main/java/com/kcim/vo/CostAccountShareVO.java

@@ -23,7 +23,8 @@ public class CostAccountShareVO {
 
     @ApiModelProperty(name = "shareLevel",value = "责任中心分摊层级")
     private Integer shareLevel;
-
+    @ApiModelProperty(name = "shareName", value = "分摊级别名称")
+    private String shareName;
     @ApiModelProperty(name = "responsibilityCode",value = "责任中心代码")
     private String responsibilityCode;
 

+ 2 - 0
src/main/java/com/kcim/vo/CostOtherPaymentsVO.java

@@ -22,6 +22,8 @@ public class CostOtherPaymentsVO {
      */
     @ApiModelProperty(name = "paymentsType",value = "收支类型 1收入 2支出")
     private Integer paymentsType;
+
+    private String paymentsTypeName;
     /**
      * 收支名称
      */

+ 1 - 1
src/main/java/com/kcim/vo/RelationVO.java

@@ -9,7 +9,7 @@ import lombok.Data;
 @Data
 @ApiModel("成本项目关联视图对象")
 public class RelationVO {
-
+    private String id;
     @ApiModelProperty(name = "code",value = "关联关系的code")
     private String code;
 

+ 4 - 1
src/main/java/com/kcim/web/CostDepartmentProfitController.java

@@ -7,6 +7,7 @@ import com.kcim.common.util.UserContext;
 import com.kcim.dao.model.CostDepartmentProfit;
 import com.kcim.service.CostDepartmentProfitService;
 import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -22,6 +23,7 @@ import java.util.Arrays;
 @RestController
 @RequestMapping("costdepartmentprofit")
 @Api(tags = "科室损益计算")
+@Slf4j
 public class CostDepartmentProfitController {
     @Autowired
     private CostDepartmentProfitService costDepartmentProfitService;
@@ -40,7 +42,7 @@ public class CostDepartmentProfitController {
     })
     public Result list(@RequestParam(value = "current", defaultValue = "1") Integer current,
                        @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
-                       @RequestParam(value = "responsibilityCode") String responsibilityCode,
+                       @RequestParam(value = "responsibilityCode",required = false) String responsibilityCode,
                        @RequestParam(value = "date") String date){
         Long hospId = UserContext.getHospId();
         PageUtils pageUtils = costDepartmentProfitService.queryList(current,pageSize,responsibilityCode,date,hospId);
@@ -57,6 +59,7 @@ public class CostDepartmentProfitController {
             Long hospId = UserContext.getHospId();
             costDepartmentProfitService.getDepartProfitReport(date,hospId,reportType);
         } catch (Exception e) {
+            log.error(e.getMessage());
             throw new CostException(500,"生成错误");
         }
 

+ 2 - 2
src/main/java/com/kcim/web/CostIncomeFileController.java

@@ -37,9 +37,9 @@ public class CostIncomeFileController {
     public Result list(@RequestParam(value = "current", defaultValue = "1") Integer current,
                        @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
                        @RequestParam(value = "fileName",required = false) String fileName,
-                       @RequestParam(value = "dateTime",required = false) String dateTime){
+                       @RequestParam(value = "computeDate",required = false) String computeDate){
         Long hospId = UserContext.getHospId();
-        PageUtils pageUtils = costIncomeFileService.queryList(current,pageSize,fileName,dateTime,hospId);
+        PageUtils pageUtils = costIncomeFileService.queryList(current,pageSize,fileName,computeDate,hospId);
         return Result.ok(pageUtils);
     }
 

+ 60 - 34
src/main/java/com/kcim/web/ExcelController.java

@@ -15,14 +15,11 @@ import com.kcim.common.util.Result;
 import com.kcim.common.util.UserContext;
 import com.kcim.common.constants.NumberConstant;
 import com.kcim.common.util.excel.ExcelStyleUtil;
-import com.kcim.common.util.excel.entity.PatientItemImportEntity;
 import com.kcim.common.util.excel.entity.ProductTemplateEntity;
-import com.kcim.common.util.excel.handler.ItemTypeHandler;
 import com.kcim.dao.model.*;
 import com.kcim.service.impl.DepartmentServiceImpl;
 import com.kcim.service.impl.ProductServiceImpl;
 import com.kcim.service.*;
-import com.kcim.vo.DictDataVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -41,8 +38,6 @@ import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.kcim.common.constants.Constant.CHARGE_ITEM_TYPE;
-
 /**
  * 相关导入导出操作
  */
@@ -79,15 +74,19 @@ public class ExcelController extends AbstractController{
 
     private final CostCostingCollectionService costCostingCollectionService;
 
-    private final AllocationService allocationServicel;
+    private final AllocationService allocationService;
 
     private final CostDepartmentProfitService costDepartmentProfitService;
 
+    private final CostShareLevelService shareLevelService;
+
     public ExcelController(UserService userService, DepartmentServiceImpl departmentService, ProductServiceImpl productService,
                            AccountingService accountingService, AccountingProductService accountingProductService,
                            ResponsibilityDepartmentService responsibilityDepartmentService,
                            CostShareParamService costShareParamService, CostIncomeGroupService costIncomeGroupService,
-                           CostCostingGroupService costCostingGroupService, ShareParamValueService shareParamValueService, CostCostingCollectionService costCostingCollectionService, AllocationService allocationServicel, CostDepartmentProfitService costDepartmentProfitService) {
+                           CostCostingGroupService costCostingGroupService, ShareParamValueService shareParamValueService,
+                           CostCostingCollectionService costCostingCollectionService, AllocationService allocationService,
+                           CostDepartmentProfitService costDepartmentProfitService, CostShareLevelService shareLevelService) {
         this.userService = userService;
         this.departmentService = departmentService;
         this.productService = productService;
@@ -99,8 +98,9 @@ public class ExcelController extends AbstractController{
         this.costCostingGroupService = costCostingGroupService;
         this.shareParamValueService = shareParamValueService;
         this.costCostingCollectionService = costCostingCollectionService;
-        this.allocationServicel = allocationServicel;
+        this.allocationService = allocationService;
         this.costDepartmentProfitService = costDepartmentProfitService;
+        this.shareLevelService = shareLevelService;
     }
 
     @ApiOperation("用户导出模板设置")
@@ -313,11 +313,11 @@ public class ExcelController extends AbstractController{
     @GetMapping("/getImportIncomeProductAccountTemplate")
     public void getImportProductAccountTemplate(HttpServletResponse response,String token) throws IOException {
         Long hospId = UserContext.getHospId();
-        String uuid = UUID.randomUUID().toString();
-        String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls";
-        FileUtil.del(FileUtil.file(url));
+//        String uuid = UUID.randomUUID().toString();
+//        String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls";
+//        FileUtil.del(FileUtil.file(url));
 
-        ExcelWriter writer = new ExcelWriter(url);
+        ExcelWriter writer = new ExcelWriter();
         // 样式
         Sheet sheet = writer.getSheet();
         // 内容
@@ -332,9 +332,9 @@ public class ExcelController extends AbstractController{
                 "病人ID",	"住院号/门诊号",	"患者姓名",	"病人费别",	"收据费别",	"数量",	"单位",	"金额",	"费用发生时间"));
         int accountType = NumberConstant.ONE;
         int column = NumberConstant.FOUR;
-        FileOutputStream outputStream = new FileOutputStream("E:\\收入数据导出模板设置.xlsx");
+//        FileOutputStream outputStream = new FileOutputStream("E:\\收入数据导出模板设置.xlsx");
 
-        getProductByAccountType(hospId, writer, accountType, column);
+//        getProductByAccountType(hospId, writer, accountType, column);
         writer.setColumnWidth(0, 20);
         writer.setColumnWidth(1, 20);
         writer.setColumnWidth(2, 10);
@@ -352,8 +352,12 @@ public class ExcelController extends AbstractController{
         writer.setColumnWidth(14, 10);
         writer.setColumnWidth(15, 10);
         writer.setColumnWidth(16, 15);
-        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
-        response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/vnd.ms-excel");
+        String fileName ="收入数据导入模板";
+        response.setHeader("Content-Disposition",  URLEncoder.encode(fileName, "UTF-8"));
+//        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
+//        response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
         ServletOutputStream out = null;
         out = response.getOutputStream();
         writer.flush(out, true);
@@ -372,11 +376,11 @@ public class ExcelController extends AbstractController{
 //            throw new CostException(500,"用户不存在");
 //        }
         Long hospId = UserContext.getHospId();
-        String uuid = UUID.randomUUID().toString();
-        String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls";
-        FileUtil.del(FileUtil.file(url));
+//        String uuid = UUID.randomUUID().toString();
+//        String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls";
+//        FileUtil.del(FileUtil.file(url));
 
-        ExcelWriter writer = new ExcelWriter(url);
+        ExcelWriter writer = new ExcelWriter();
         // 样式
         // 所有科室里面对应存在责任中心对应的科室
         List<Department> departmentLinkedList = getDepartments(hospId);
@@ -406,8 +410,12 @@ public class ExcelController extends AbstractController{
         getProductByAccountType(hospId, writer, accountType, column);
         writer.setColumnWidth(0, 15);
         writer.setColumnWidth(1, 15);
-        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
-        response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
+//        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
+//        response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/vnd.ms-excel");
+        String fileName ="成本数据导入模板";
+        response.setHeader("Content-Disposition",  URLEncoder.encode(fileName, "UTF-8"));
         ServletOutputStream out = null;
         out = response.getOutputStream();
         writer.flush(out, true);
@@ -451,15 +459,21 @@ public class ExcelController extends AbstractController{
 //            throw new CostException(500,"用户不存在");
 //        }
         Long hospId = UserContext.getHospId();
-        String uuid = UUID.randomUUID().toString();
-        String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls";
-        FileUtil.del(FileUtil.file(url));
-        ExcelWriter writer = new ExcelWriter(url);
+//        String uuid = UUID.randomUUID().toString();
+//        String url = System.getProperty("java.io.tmpdir") + File.separator + uuid + File.separator + uuid + ".xls";
+//        FileUtil.del(FileUtil.file(url));
+        ExcelWriter writer = new ExcelWriter();
         Sheet sheet = writer.getSheet();
-        // 第几次分摊
-        writer= allocationServicel.getShareReportTemplate(writer,levelSort,sheet,year,month,shareLevelId);
-        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
-        response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
+
+        CostShareLevel service = shareLevelService.getById(shareLevelId);        // 第几次分摊
+        writer= allocationService.getShareReportTemplate(writer,levelSort,sheet,year,month,shareLevelId);
+//        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
+//        response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
+
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/vnd.ms-excel");
+        String fileName = service.getShareName()+"分摊";
+        response.setHeader("Content-Disposition",  URLEncoder.encode(fileName, "UTF-8"));
         ServletOutputStream out = null;
         out = response.getOutputStream();
         writer.flush(out, true);
@@ -561,7 +575,7 @@ public class ExcelController extends AbstractController{
         writer.passCurrentRow();
         writer.merge(2, 2, 0, departmentCodeList.size()==0?3:departmentCodeList.size()+1, "医院成本分摊参数数据批量导入", false);
         writer.passCurrentRow();
-        writer.merge(3,3,2,departmentCodeList.size()==0?3:departmentCodeList.size()+1,"科室",false);
+        writer.merge(3,3,2,departmentCodeList.size()==0?3:departmentCodeList.size()+1,"科室",true);
         writer.passCurrentRow();
         departmentCodeList.add(0, null);
         departmentCodeList.add(1, null);
@@ -579,17 +593,29 @@ public class ExcelController extends AbstractController{
         }
         writer.setColumnWidth(0, 15);
         writer.setColumnWidth(1, 22);
-        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
-        response.setHeader("Content-Disposition", "attachment;filename=" + uuid + ".xls");
+//        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
+//        response.setHeader("Content-Disposition", "attachment;filename=" + "成本分摊参数值导出模板" + ".xls");
+
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/vnd.ms-excel");
+        String fileName ="成本分摊参数值导入模板";
+        response.setHeader("Content-Disposition",  URLEncoder.encode(fileName, "UTF-8"));
+
+
+
         ServletOutputStream out = null;
+//        FileOutputStream outputStream = new FileOutputStream("E:\\患者信息导入模版.xlsx");
         out = response.getOutputStream();
         writer.flush(out, true);
         writer.close();
         IoUtil.close(out);
     }
     private List<Department> getDepartments(Long hospId) {
+
+
         List<Department> departmentLinkedList = new LinkedList<>();
-        List<Department> departmentList = departmentService.list(new QueryWrapper<Department>().lambda().eq(Department::getHospId, hospId).orderByDesc(Department::getCreateTime));
+        List<Department> departmentList = departmentService.getDepartments();
+//        List<Department> departmentList = departmentService.list(new QueryWrapper<Department>().lambda().eq(Department::getHospId, hospId).orderByDesc(Department::getCreateTime));
         List<ResponsibilityDepartment> responsibilityDepartmentList = responsibilityDepartmentService.list(new QueryWrapper<ResponsibilityDepartment>().lambda()
                 .eq(ResponsibilityDepartment::getHospId, hospId));
         Map<Long, List<ResponsibilityDepartment>> responsibilityDepartmentMap = responsibilityDepartmentList.stream().collect(Collectors.groupingBy(ResponsibilityDepartment::getDepartmentId));

+ 1 - 1
src/main/resources/application-dev.yml

@@ -118,4 +118,4 @@ minio:
   port: 9000
   access-key: UOxpxcO0loqZqKzH
   secret-key: KfHhDLRWL0PtaWW0JTXqz6Gn685P2EWY
-  bucket-name: kcim-account
+  bucket-name: kcim-cost

+ 2 - 2
src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: dev
+#    active: dev
 #    active: demonstrate
-#    active: prod
+    active: prod