Преглед на файлове

Merge branch 'master' of huangrui/CostAccount into dev

lijiaxi преди 4 години
родител
ревизия
ed1b7c3d0d
променени са 48 файла, в които са добавени 735 реда и са изтрити 101 реда
  1. 27 0
      src/main/java/com/imed/costaccount/common/enums/CalcTypeEnum.java
  2. 1 1
      src/main/java/com/imed/costaccount/common/enums/CheckStatusEnum.java
  3. 1 1
      src/main/java/com/imed/costaccount/common/enums/DateStyleEnum.java
  4. 1 1
      src/main/java/com/imed/costaccount/common/enums/ErrorCodeEnum.java
  5. 1 1
      src/main/java/com/imed/costaccount/common/enums/NoticeBusinessEnum.java
  6. 1 1
      src/main/java/com/imed/costaccount/common/enums/NoticeOriginEnum.java
  7. 1 1
      src/main/java/com/imed/costaccount/common/enums/NoticeTemplateEnum.java
  8. 1 1
      src/main/java/com/imed/costaccount/common/enums/PermissionEnum.java
  9. 1 1
      src/main/java/com/imed/costaccount/common/enums/PlanStatusEnum.java
  10. 25 0
      src/main/java/com/imed/costaccount/common/enums/ReportTypeEnum.java
  11. 1 1
      src/main/java/com/imed/costaccount/common/enums/ResponseCodeEnum.java
  12. 1 1
      src/main/java/com/imed/costaccount/common/enums/ResultCodeEnum.java
  13. 1 1
      src/main/java/com/imed/costaccount/common/enums/SituationEnum.java
  14. 1 1
      src/main/java/com/imed/costaccount/common/enums/TaskCirculationEnum.java
  15. 1 1
      src/main/java/com/imed/costaccount/common/enums/WSMessageTypeEnum.java
  16. 1 1
      src/main/java/com/imed/costaccount/common/enums/WeekEnum.java
  17. 1 2
      src/main/java/com/imed/costaccount/common/exception/CostException.java
  18. 2 2
      src/main/java/com/imed/costaccount/common/util/DateUtils.java
  19. 1 1
      src/main/java/com/imed/costaccount/common/util/Result.java
  20. 16 0
      src/main/java/com/imed/costaccount/mapper/HospProfitAndLossMapper.java
  21. 73 0
      src/main/java/com/imed/costaccount/model/HospProfitAndLoss.java
  22. 1 1
      src/main/java/com/imed/costaccount/model/dto/ReportRelationDTO.java
  23. 8 2
      src/main/java/com/imed/costaccount/model/vo/CenterDepartmentVO.java
  24. 2 0
      src/main/java/com/imed/costaccount/model/vo/CostResponsibilityVO.java
  25. 9 0
      src/main/java/com/imed/costaccount/service/AllocationQueryService.java
  26. 10 0
      src/main/java/com/imed/costaccount/service/AllocationService.java
  27. 1 0
      src/main/java/com/imed/costaccount/service/DemoService.java
  28. 22 0
      src/main/java/com/imed/costaccount/service/HospProfitAndLossService.java
  29. 8 0
      src/main/java/com/imed/costaccount/service/IncomeCollectionService.java
  30. 15 0
      src/main/java/com/imed/costaccount/service/ReportFormService.java
  31. 19 0
      src/main/java/com/imed/costaccount/service/impl/AllocationQueryServiceImpl.java
  32. 20 0
      src/main/java/com/imed/costaccount/service/impl/AllocationServiceImpl.java
  33. 1 1
      src/main/java/com/imed/costaccount/service/impl/CostCostingGroupServiceImpl.java
  34. 1 1
      src/main/java/com/imed/costaccount/service/impl/CostDepartmentProfitServiceImpl.java
  35. 1 1
      src/main/java/com/imed/costaccount/service/impl/CostIncomeFileServiceImpl.java
  36. 2 2
      src/main/java/com/imed/costaccount/service/impl/CostIncomeGroupServiceImpl.java
  37. 1 1
      src/main/java/com/imed/costaccount/service/impl/CostOtherPaymentsDataServiceImpl.java
  38. 9 1
      src/main/java/com/imed/costaccount/service/impl/DemoServiceImpl.java
  39. 283 0
      src/main/java/com/imed/costaccount/service/impl/HospProfitAndLossServiceImpl.java
  40. 19 0
      src/main/java/com/imed/costaccount/service/impl/IncomeCollectionServiceImpl.java
  41. 48 12
      src/main/java/com/imed/costaccount/service/impl/ReportFormServiceImpl.java
  42. 1 1
      src/main/java/com/imed/costaccount/service/impl/ReportRelationServiceImpl.java
  43. 2 15
      src/main/java/com/imed/costaccount/service/impl/ResponsibilityDepartmentServiceImpl.java
  44. 33 43
      src/main/java/com/imed/costaccount/service/impl/ResponsibilityServiceImpl.java
  45. 1 1
      src/main/java/com/imed/costaccount/service/impl/ShareParamValueServiceImpl.java
  46. 9 0
      src/main/java/com/imed/costaccount/web/DemoController.java
  47. 29 0
      src/main/java/com/imed/costaccount/web/HospProfitAndLossController.java
  48. 21 0
      src/main/resources/mapper/HospProfitAndLossMapper.xml

+ 27 - 0
src/main/java/com/imed/costaccount/common/enums/CalcTypeEnum.java

@@ -0,0 +1,27 @@
+package com.imed.costaccount.common.enums;
+
+import lombok.Getter;
+
+/**
+ * 计算方式 (报表设置里面)
+ * 0.不设置,1.对应会计科目,2.对应分摊层级,3.小计,4.计算公式,5.按责任中心
+ */
+@Getter
+public enum CalcTypeEnum {
+
+    NO_CONFIG(0, "不设置"),
+    BY_ACCOUNT(1, "对应会计科目"),
+    BY_SHARE_LEVEL(2, "对应分摊层级"),
+    LITTER_COUNT(3, "小计"),
+    CALC_FORMULA(4, "计算公式"),
+    BY_RESPONSIBILITY(5, "按责任中心"),
+    ;
+
+    int type;
+    String name;
+
+    CalcTypeEnum(int type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+}

+ 1 - 1
src/main/java/com/imed/costaccount/enums/CheckStatusEnum.java → src/main/java/com/imed/costaccount/common/enums/CheckStatusEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 import java.util.Objects;
 

+ 1 - 1
src/main/java/com/imed/costaccount/enums/DateStyleEnum.java → src/main/java/com/imed/costaccount/common/enums/DateStyleEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 public enum DateStyleEnum {
     DD("dd"),

+ 1 - 1
src/main/java/com/imed/costaccount/enums/ErrorCodeEnum.java → src/main/java/com/imed/costaccount/common/enums/ErrorCodeEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 public enum ErrorCodeEnum {
     DATA_NOT_EXIST(500, "数据不存在或已被移除"),

+ 1 - 1
src/main/java/com/imed/costaccount/enums/NoticeBusinessEnum.java → src/main/java/com/imed/costaccount/common/enums/NoticeBusinessEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 import java.util.Objects;
 

+ 1 - 1
src/main/java/com/imed/costaccount/enums/NoticeOriginEnum.java → src/main/java/com/imed/costaccount/common/enums/NoticeOriginEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 public enum NoticeOriginEnum {
     SITUATION("SITUATION", "情境创建或修改(来源id为情境id)"),

+ 1 - 1
src/main/java/com/imed/costaccount/enums/NoticeTemplateEnum.java → src/main/java/com/imed/costaccount/common/enums/NoticeTemplateEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 import java.util.Objects;
 

+ 1 - 1
src/main/java/com/imed/costaccount/enums/PermissionEnum.java → src/main/java/com/imed/costaccount/common/enums/PermissionEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 import java.util.Objects;
 

+ 1 - 1
src/main/java/com/imed/costaccount/enums/PlanStatusEnum.java → src/main/java/com/imed/costaccount/common/enums/PlanStatusEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 import java.util.Objects;
 

+ 25 - 0
src/main/java/com/imed/costaccount/common/enums/ReportTypeEnum.java

@@ -0,0 +1,25 @@
+package com.imed.costaccount.common.enums;
+
+import lombok.Getter;
+
+/**
+ * 报表类型:0.科室损益表、1.完全成本法表、2.变动成本表、3.全院损益表、4.全成本报表
+ * 报表类型枚举
+ */
+@Getter
+public enum ReportTypeEnum {
+    DEPARTMENT_PROFIT_LOSS(0, "科室损益"),
+    COMPLETE_COSTING(1, "完全成本法表"),
+    VARIABLE_COSTING(2, "变动成本表"),
+    HOSP_PROFIT_LOSS(3, "全院损益表"),
+    FULL_COST(4, "全成本报表"),
+    ;
+
+    Integer type;
+    String name;
+
+    ReportTypeEnum(Integer type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+}

+ 1 - 1
src/main/java/com/imed/costaccount/enums/ResponseCodeEnum.java → src/main/java/com/imed/costaccount/common/enums/ResponseCodeEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 public enum ResponseCodeEnum {
     SUCCESS("SUCCESS", "返回成功"),

+ 1 - 1
src/main/java/com/imed/costaccount/enums/ResultCodeEnum.java → src/main/java/com/imed/costaccount/common/enums/ResultCodeEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 /**
  * @author 李加喜

+ 1 - 1
src/main/java/com/imed/costaccount/enums/SituationEnum.java → src/main/java/com/imed/costaccount/common/enums/SituationEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 import lombok.Getter;
 

+ 1 - 1
src/main/java/com/imed/costaccount/enums/TaskCirculationEnum.java → src/main/java/com/imed/costaccount/common/enums/TaskCirculationEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 /**
  * @description: imed-pfm

+ 1 - 1
src/main/java/com/imed/costaccount/enums/WSMessageTypeEnum.java → src/main/java/com/imed/costaccount/common/enums/WSMessageTypeEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 public enum WSMessageTypeEnum {
     /**

+ 1 - 1
src/main/java/com/imed/costaccount/enums/WeekEnum.java → src/main/java/com/imed/costaccount/common/enums/WeekEnum.java

@@ -1,4 +1,4 @@
-package com.imed.costaccount.enums;
+package com.imed.costaccount.common.enums;
 
 /**
  * 星期一 ~ 星期日

+ 1 - 2
src/main/java/com/imed/costaccount/common/exception/CostException.java

@@ -1,7 +1,6 @@
 package com.imed.costaccount.common.exception;
 
-import com.imed.costaccount.common.constants.CommonConstant;
-import com.imed.costaccount.enums.ErrorCodeEnum;
+import com.imed.costaccount.common.enums.ErrorCodeEnum;
 
 public class CostException extends RuntimeException{
 

+ 2 - 2
src/main/java/com/imed/costaccount/common/util/DateUtils.java

@@ -1,7 +1,7 @@
 package com.imed.costaccount.common.util;
 
-import com.imed.costaccount.enums.DateStyleEnum;
-import com.imed.costaccount.enums.WeekEnum;
+import com.imed.costaccount.common.enums.DateStyleEnum;
+import com.imed.costaccount.common.enums.WeekEnum;
 import lombok.extern.slf4j.Slf4j;
 
 import java.sql.Timestamp;

+ 1 - 1
src/main/java/com/imed/costaccount/common/util/Result.java

@@ -2,7 +2,7 @@ package com.imed.costaccount.common.util;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.imed.costaccount.enums.ResultCodeEnum;
+import com.imed.costaccount.common.enums.ResultCodeEnum;
 
 /**
  * 统一封装返回对象

+ 16 - 0
src/main/java/com/imed/costaccount/mapper/HospProfitAndLossMapper.java

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.HospProfitAndLoss;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 全院损益表
+ * 
+ * @author huangrui
+ * @date 2021-08-27 14:20:53
+ */
+@Mapper
+public interface HospProfitAndLossMapper extends BaseMapper<HospProfitAndLoss> {
+	
+}

+ 73 - 0
src/main/java/com/imed/costaccount/model/HospProfitAndLoss.java

@@ -0,0 +1,73 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * 全院损益表
+ * 
+ * @author huangrui
+ * @email 
+ * @date 2021-08-27 14:20:53
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_hosp_profit_and_loss")
+public class HospProfitAndLoss implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Long id;
+	/**
+	 * 年
+	 */
+	private Integer dateYear;
+	/**
+	 * 月
+	 */
+	private Integer dateMonth;
+	/**
+	 * 报表项目id
+
+	 */
+	private Integer reportNum;
+	/**
+	 * 报表项目名称
+	 */
+	private String reportName;
+	/**
+	 * 成本类型
+	 */
+	private Integer costType;
+	/**
+	 * 收入类型
+	 */
+	private Integer incomeType;
+	/**
+	 * 金额
+	 */
+	private BigDecimal amount;
+	/**
+	 * 创建时间
+	 */
+	private Long createTime;
+	/**
+	 * 删除时间
+	 */
+	private Long deleteTime;
+
+}

+ 1 - 1
src/main/java/com/imed/costaccount/model/dto/ReportRelationDTO.java

@@ -18,7 +18,7 @@ public class ReportRelationDTO {
     @NotNull(message = "报表id不为空")
     private Long reportId;
 
-    @ApiModelProperty(name = "relation",value = "1.对应会计科目设置,2.对应分摊参数设置")
+    @ApiModelProperty(name = "relation",value = "1.对应会计科目设置,2.对应分摊参数设置,3.责任中心")
     @NotNull(message = "报表项目关联关系不能为空")
     private Integer relation;
 

+ 8 - 2
src/main/java/com/imed/costaccount/model/vo/CenterDepartmentVO.java

@@ -1,5 +1,6 @@
 package com.imed.costaccount.model.vo;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
@@ -10,18 +11,23 @@ import java.util.List;
 @ApiModel("责任中心对照视图对象")
 public class CenterDepartmentVO {
 
-//    private Integer id;
+    @JsonIgnore
+    private Long id;
 
     private Long responsibilityId;
 
     private String responsibilityName;
 
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
     private List<DepartVO> departments;
 
     private Boolean isParent;
 
     private Integer isGatherCenter;
 
-    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonIgnore
+    private Long parentId;
+
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
     private List<CenterDepartmentVO> child;
 }

+ 2 - 0
src/main/java/com/imed/costaccount/model/vo/CostResponsibilityVO.java

@@ -55,4 +55,6 @@ public class CostResponsibilityVO {
      */
     @JsonInclude(value = JsonInclude.Include.NON_EMPTY)
     private List<CostResponsibilityVO> child;
+
+    private Boolean isChild;
 }

+ 9 - 0
src/main/java/com/imed/costaccount/service/AllocationQueryService.java

@@ -35,5 +35,14 @@ public interface AllocationQueryService extends IService<AllocationQuery> {
     BigDecimal getTotalByAccountAndResps(Long hospId, int dateYear, int month, String code, List<String> respCodes);
 
     BigDecimal getTotalByAccountAndRespCode(Long hospId, int dateYear, int month, String accountCode, String responsibilityCode);
+
+    /**
+     * 获取这个月的分摊数据
+     * @param hospId 医院id
+     * @param year 年
+     * @param month 月
+     * @return 分摊数据查询
+     */
+    List<AllocationQuery> getAllByDate(Long hospId, int year, int month);
 }
 

+ 10 - 0
src/main/java/com/imed/costaccount/service/AllocationService.java

@@ -68,5 +68,15 @@ public interface AllocationService extends IService<Allocation> {
      * @return List
      */
     List<AfterAllocationFormVO> afterAllocationFormList(String date, Long hospId);
+
+    /**
+     * 按时间计算分摊数据
+     * @param year 年月
+     * @param month 月
+     * @param hospId
+     * @param levelSorts
+     * @return
+     */
+    List<Allocation> getByDate(int year, int month, Long hospId, List<Integer> levelSorts);
 }
 

+ 1 - 0
src/main/java/com/imed/costaccount/service/DemoService.java

@@ -4,4 +4,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.imed.costaccount.model.Demo;
 
 public interface DemoService extends IService<Demo> {
+    void test();
 }

+ 22 - 0
src/main/java/com/imed/costaccount/service/HospProfitAndLossService.java

@@ -0,0 +1,22 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.model.HospProfitAndLoss;
+
+/**
+ * 全院损益表
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-08-27 14:20:53
+ */
+public interface HospProfitAndLossService extends IService<HospProfitAndLoss> {
+
+    /**
+     * 计算全院损益
+     * @param date yyyy-MM-dd 时间
+     * @param hospId 医院id
+     */
+    void calc(String date, Long hospId);
+}
+

+ 8 - 0
src/main/java/com/imed/costaccount/service/IncomeCollectionService.java

@@ -61,5 +61,13 @@ public interface IncomeCollectionService extends IService<IncomeCollection> {
      */
     CollectDataFormVO collectDataForm(CollectDTO collectDTO);
 
+    /**
+     * 获取某个时间的手机数据
+     * @param year 年
+     * @param month 月
+     * @param hospId 医院id
+     * @return 收入数据
+     */
+    List<IncomeCollection> getCollectionsByDate(int year, int month, Long hospId);
 }
 

+ 15 - 0
src/main/java/com/imed/costaccount/service/ReportFormService.java

@@ -48,5 +48,20 @@ public interface ReportFormService extends IService<ReportForm> {
      */
     void copyReport(CopyReportDTO copyReportDTO, Long hospId);
 
+    /**
+     * 通过报表类型获取该医院报表列表
+     * @param hospId 医院id
+     * @param type 报表类型 0.损益表、1.完全成本法表、2.变动成本表、3.全院损益表、4.全成本报表
+     * @return ReportFrom List
+     */
+    List<ReportForm> getListByReportType(Long hospId, Integer type);
+
+    /**
+     * 通过parentId 得到下面所有的分类
+     * @param hospId 医院id
+     * @param parentId 父级id
+     * @return List
+     */
+    List<ReportForm> getByParentId(Long hospId, Long parentId);
 }
 

+ 19 - 0
src/main/java/com/imed/costaccount/service/impl/AllocationQueryServiceImpl.java

@@ -59,4 +59,23 @@ public class AllocationQueryServiceImpl extends ServiceImpl<AllocationQueryMappe
     public BigDecimal getTotalByAccountAndRespCode(Long hospId, int dateYear, int month, String accountCode, String responsibilityCode) {
         return baseMapper.getTotalByAccountAndRespCode(hospId, dateYear, month, accountCode, responsibilityCode);
     }
+
+    /**
+     * 获取这个月的分摊数据
+     *
+     * @param hospId 医院id
+     * @param year   年
+     * @param month  月
+     * @return 分摊数据查询
+     */
+    @Override
+    public List<AllocationQuery> getAllByDate(Long hospId, int year, int month) {
+        List<AllocationQuery> list = this.list(
+                new LambdaQueryWrapper<AllocationQuery>()
+                        .eq(AllocationQuery::getDateYear, year)
+                        .eq(AllocationQuery::getDateMonth, month)
+                        .eq(AllocationQuery::getHospId, hospId)
+        );
+        return list;
+    }
 }

+ 20 - 0
src/main/java/com/imed/costaccount/service/impl/AllocationServiceImpl.java

@@ -701,4 +701,24 @@ public class AllocationServiceImpl extends ServiceImpl<AllocationMapper, Allocat
         }).collect(Collectors.toList());
         return vos;
     }
+
+    /**
+     * 按时间计算分摊数据
+     *
+     * @param year       年月
+     * @param month      月
+     * @param hospId
+     * @param levelSorts
+     * @return
+     */
+    @Override
+    public List<Allocation> getByDate(int year, int month, Long hospId, List<Integer> levelSorts) {
+        return this.list(
+                new LambdaQueryWrapper<Allocation>()
+                        .eq(Allocation::getDateYear, year)
+                        .eq(Allocation::getDateMonth, month)
+                        .eq(Allocation::getHospId, hospId)
+                        .in(Allocation::getLevelSort, levelSorts)
+        );
+    }
 }

+ 1 - 1
src/main/java/com/imed/costaccount/service/impl/CostCostingGroupServiceImpl.java

@@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.*;
 import com.imed.costaccount.constants.NumberConstant;
-import com.imed.costaccount.enums.DateStyleEnum;
+import com.imed.costaccount.common.enums.DateStyleEnum;
 import com.imed.costaccount.mapper.AllocationMapper;
 import com.imed.costaccount.mapper.CostCostingGroupMapper;
 import com.imed.costaccount.model.*;

+ 1 - 1
src/main/java/com/imed/costaccount/service/impl/CostDepartmentProfitServiceImpl.java

@@ -11,7 +11,7 @@ import com.imed.costaccount.common.util.BeanUtil;
 import com.imed.costaccount.common.util.DateUtils;
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.constants.NumberConstant;
-import com.imed.costaccount.enums.DateStyleEnum;
+import com.imed.costaccount.common.enums.DateStyleEnum;
 import com.imed.costaccount.mapper.CostDepartmentProfitMapper;
 import com.imed.costaccount.model.*;
 import com.imed.costaccount.model.vo.AllocationQueryReportVO;

+ 1 - 1
src/main/java/com/imed/costaccount/service/impl/CostIncomeFileServiceImpl.java

@@ -12,7 +12,7 @@ import com.imed.costaccount.common.util.DateUtils;
 import com.imed.costaccount.common.util.JacksonUtil;
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.constants.NumberConstant;
-import com.imed.costaccount.enums.DateStyleEnum;
+import com.imed.costaccount.common.enums.DateStyleEnum;
 import com.imed.costaccount.mapper.CostCostingGroupMapper;
 import com.imed.costaccount.mapper.CostIncomeFileMapper;
 import com.imed.costaccount.mapper.CostIncomeGroupMapper;

+ 2 - 2
src/main/java/com/imed/costaccount/service/impl/CostIncomeGroupServiceImpl.java

@@ -8,8 +8,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.*;
 import com.imed.costaccount.constants.NumberConstant;
-import com.imed.costaccount.enums.DateStyleEnum;
-import com.imed.costaccount.enums.ErrorCodeEnum;
+import com.imed.costaccount.common.enums.DateStyleEnum;
+import com.imed.costaccount.common.enums.ErrorCodeEnum;
 import com.imed.costaccount.mapper.CostIncomeGroupMapper;
 import com.imed.costaccount.model.*;
 import com.imed.costaccount.model.vo.CostIncomeGroupAllAmountVO;

+ 1 - 1
src/main/java/com/imed/costaccount/service/impl/CostOtherPaymentsDataServiceImpl.java

@@ -9,7 +9,7 @@ import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.BeanUtil;
 import com.imed.costaccount.common.util.DateUtils;
 import com.imed.costaccount.common.util.PageUtils;
-import com.imed.costaccount.enums.DateStyleEnum;
+import com.imed.costaccount.common.enums.DateStyleEnum;
 import com.imed.costaccount.mapper.CostOtherPaymentsDataMapper;
 import com.imed.costaccount.model.CostOtherPaymentsData;
 import com.imed.costaccount.model.dto.CostOtherPaymentsDataEditDto;

+ 9 - 1
src/main/java/com/imed/costaccount/service/impl/DemoServiceImpl.java

@@ -5,9 +5,17 @@ import com.imed.costaccount.mapper.DemoMapper;
 import com.imed.costaccount.model.Demo;
 import com.imed.costaccount.service.DemoService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
 public class DemoServiceImpl extends ServiceImpl<DemoMapper, Demo> implements DemoService {
 
-
+    @Override
+    @Transactional
+    public void test() {
+        Demo byId = this.getById(1);
+        this.removeById(1);
+        Demo byId1 = this.getById(1);
+        System.out.println(1111);
+    }
 }

+ 283 - 0
src/main/java/com/imed/costaccount/service/impl/HospProfitAndLossServiceImpl.java

@@ -0,0 +1,283 @@
+package com.imed.costaccount.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ReUtil;
+import cn.hutool.core.util.StrUtil;
+import com.imed.costaccount.common.enums.CalcTypeEnum;
+import com.imed.costaccount.common.enums.ReportTypeEnum;
+import com.imed.costaccount.common.exception.CostException;
+import com.imed.costaccount.model.*;
+import com.imed.costaccount.model.vo.RelationVO;
+import com.imed.costaccount.service.*;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.imed.costaccount.mapper.HospProfitAndLossMapper;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+
+@Service("hospProfitAndLossService")
+public class HospProfitAndLossServiceImpl extends ServiceImpl<HospProfitAndLossMapper, HospProfitAndLoss> implements HospProfitAndLossService {
+
+    private final ReportFormService reportFormService;
+    private final IncomeCollectionService collectionService;
+    private final AllocationQueryService allocationQueryService;
+    private final AllocationService allocationService;
+
+    private final ReportRelationService reportRelationService;
+    private final CostShareLevelService shareLevelService;
+
+    public HospProfitAndLossServiceImpl(ReportFormService reportFormService,
+                                        IncomeCollectionService collectionService,
+                                        AllocationQueryService allocationQueryService,
+                                        AllocationService allocationService, ReportRelationService reportRelationService, CostShareLevelService shareLevelService) {
+        this.reportFormService = reportFormService;
+        this.collectionService = collectionService;
+        this.allocationQueryService = allocationQueryService;
+        this.allocationService = allocationService;
+        this.reportRelationService = reportRelationService;
+        this.shareLevelService = shareLevelService;
+    }
+
+
+    /**
+     * 计算全院损益
+     *
+     * @param date   yyyy-MM-dd 时间
+     * @param hospId 医院id
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public void calc(String date, Long hospId) {
+        // 得到全院损益计算报表
+        List<ReportForm> reportForms = reportFormService.getListByReportType(hospId, ReportTypeEnum.HOSP_PROFIT_LOSS.getType());
+        if (CollUtil.isEmpty(reportForms)) {
+            throw new CostException("医院未设置全院损益计算报表");
+        }
+        DateTime parse = DateUtil.parse(date);
+        int year = DateUtil.year(parse);
+        int month = DateUtil.month(parse) + 1;
+        // 得到这个月所有收入数据
+        List<IncomeCollection> incomes = collectionService.getCollectionsByDate(year, month, hospId);
+        if (incomes.isEmpty()) {
+            throw new CostException("医院未归集本月收入数据");
+        }
+
+        // 得到这个月的所有成本数据
+        List<AllocationQuery> allocationQueries = allocationQueryService.getAllByDate(hospId, year, month);
+        if (allocationQueries.isEmpty()) {
+            throw new CostException("医院未分摊本月数据");
+        }
+        List<HospProfitAndLoss> list = new ArrayList<>();
+        reportForms.forEach(i -> {
+            Integer calcType = i.getCalcType();
+            if (calcType == CalcTypeEnum.BY_ACCOUNT.getType()) {
+                // 按会计科目计算
+                HospProfitAndLoss loss = new HospProfitAndLoss();
+                calcByAccount(hospId, i, loss, incomes, allocationQueries);
+                loss.setDateMonth(month);
+                loss.setDateYear(year);
+                list.add(loss);
+                return;
+            } else if (calcType == CalcTypeEnum.BY_SHARE_LEVEL.getType()) {
+                // 分摊层级计算
+                HospProfitAndLoss loss = new HospProfitAndLoss();
+                calcByShareLevel(hospId, i, loss, year, month);
+                loss.setDateMonth(month);
+                loss.setDateYear(year);
+                list.add(loss);
+                return;
+            } else if (calcType == CalcTypeEnum.LITTER_COUNT.getType()) {
+                // todo 留在最后直接加 减
+//                HospProfitAndLoss loss = new HospProfitAndLoss();
+//                loss.setDateYear(year).setDateMonth(month).setAmount(BigDecimal.ZERO)
+//                        .setReportName(i.getReportName()).setReportNum(i.getNum())
+//                        .setCreateTime(System.currentTimeMillis());
+//                list.add(loss);
+                return;
+            } else if (calcType == CalcTypeEnum.CALC_FORMULA.getType()) {
+                // todo 留在最后加减
+//                HospProfitAndLoss loss = new HospProfitAndLoss();
+//                loss.setDateYear(year).setDateMonth(month).setAmount(BigDecimal.ZERO)
+//                        .setReportName(i.getReportName()).setReportNum(i.getNum())
+//                        .setCreateTime(System.currentTimeMillis());
+//                list.add(loss);
+                return;
+            } else if (calcType == CalcTypeEnum.BY_RESPONSIBILITY.getType()) {
+                // 责任中心
+                HospProfitAndLoss loss = new HospProfitAndLoss();
+                calcByResponsibility(hospId, i, loss, incomes, allocationQueries);
+                loss.setDateMonth(month);
+                loss.setDateYear(year);
+                list.add(loss);
+            } else {
+                // 不设置不计算
+                return;
+            }
+        });
+
+        // 先处理按公式
+        List<ReportForm> calcFormulas = reportForms.stream().filter(i -> i.getCalcType() == CalcTypeEnum.CALC_FORMULA.getType()).collect(Collectors.toList());
+        calcFormulas.forEach(i -> {
+            String calcFormula = i.getCalcFormula();
+            // TODO: 2021/8/27 校验公式合法性
+            if (StrUtil.isBlank(calcFormula)) {
+                throw new CostException("reportForm名称为" + i.getReportName() + "计算公式不正确");
+            }
+            String replace = calcFormula.replace("[", "").replace("]", "").replace("-", ",").replace("+", ",");
+//            ArrayList<String> strings = CollUtil.newArrayList(replace.split(StrUtil.COMMA));
+            ArrayList<String> strings = CollUtil.newArrayList(replace.split(","));
+            Map<Integer, Object> map = new ConcurrentHashMap<>();
+            for (int j = 0; j < strings.size(); j++) {
+                map.put(j, strings.get(j));
+            }
+//            ReUtil.contains(, "+" + calcFormula);
+        });
+        // 处理小计
+        this.saveBatch(list);
+    }
+
+    /**
+     * 按责任中心计算
+     *
+     * @param hospId            医院id
+     * @param reportForm        报表
+     * @param loss              创建的对象
+     * @param incomes           归集收入数据
+     * @param allocationQueries 分摊成本数据
+     */
+    private void calcByResponsibility(Long hospId, ReportForm reportForm, HospProfitAndLoss loss, List<IncomeCollection> incomes, List<AllocationQuery> allocationQueries) {
+        List<RelationVO> responsibilities = reportRelationService.getAccountRelation(reportForm.getId(), hospId);
+        if (responsibilities.isEmpty()) {
+            return;
+        }
+        List<String> accountCodes = responsibilities.stream().map(RelationVO::getCode).collect(Collectors.toList());
+        AtomicReference<BigDecimal> calcTotal = new AtomicReference<>();
+        calcTotal.set(BigDecimal.ZERO);
+        accountCodes.forEach(i -> {
+//            BigDecimal incomeAmount = incomes.stream().filter(j -> i.equals(j.getResponsibilityCode())).map(IncomeCollection::getAmount)
+//                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal costAmount = allocationQueries.stream().filter(j -> i.equals(j.getResponsibilityCode())).map(AllocationQuery::getAmount)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+//            BigDecimal total = incomeAmount.subtract(costAmount);
+            calcTotal.set(calcTotal.get().add(costAmount));
+        });
+        loss.setReportName(reportForm.getReportName()).setReportNum(reportForm.getNum())
+                .setAmount(calcTotal.get()).setCreateTime(System.currentTimeMillis());
+
+
+    }
+
+
+    /**
+     * 按计算公式计算
+     *
+     * @param hospId            医院id
+     * @param reportForm        报表
+     * @param loss              创建的对象
+     * @param incomes           归集收入数据
+     * @param allocationQueries 分摊成本数据
+     */
+    private void calcByFormula(Long hospId, ReportForm reportForm, HospProfitAndLoss loss, List<IncomeCollection> incomes, List<AllocationQuery> allocationQueries) {
+        String calcFormula = reportForm.getCalcFormula();
+        // TODO: 2021/8/27 校验公式合法性
+        if (StrUtil.isBlank(calcFormula)) {
+            throw new CostException("reportForm名称为" + reportForm.getReportName() + "计算公式不正确");
+        }
+        // 得到11 + 12 - 1
+        String sub = StrUtil.removeAny(calcFormula, "[", "]");
+        // TODO: 2021/8/27
+
+    }
+
+    /**
+     * 按小计计算
+     *
+     * @param hospId            医院id
+     * @param reportForm        报表
+     * @param loss              创建的对象
+     * @param incomes           归集收入数据
+     * @param allocationQueries 分摊成本数据
+     */
+    private void calcByLitterCount(Long hospId, ReportForm reportForm, HospProfitAndLoss loss, List<IncomeCollection> incomes, List<AllocationQuery> allocationQueries) {
+        Long parentId = reportForm.getParentId();
+        List<ReportForm> forms = reportFormService.getByParentId(hospId, parentId);
+        forms.forEach(i -> {
+            // 排除自己
+            if (i.getId().equals(reportForm.getId())) {
+                return;
+            }
+            // 计算其他几项之和
+            // TODO: 2021/8/27
+
+        });
+    }
+
+    /**
+     * 按分摊层级计算
+     *
+     * @param hospId     医院id
+     * @param reportForm 报表
+     * @param loss       创建的对象
+     * @param year
+     * @param month
+     */
+    private void calcByShareLevel(Long hospId, ReportForm reportForm, HospProfitAndLoss loss, int year, int month) {
+        List<RelationVO> shareLevels = reportRelationService.getAccountRelation(reportForm.getId(), hospId);
+        List<Long> shareLevelId = shareLevels.stream().map(RelationVO::getCode).map(Long::valueOf).collect(Collectors.toList());
+        List<CostShareLevel> costShareLevels = shareLevelService.listByIds(shareLevelId);
+        if (costShareLevels.isEmpty()) {
+            throw new CostException("医院分摊层级设置错误," + reportForm.getReportName());
+        }
+        List<Integer> levelSorts = costShareLevels.stream().map(CostShareLevel::getLeverSort).collect(Collectors.toList());
+        List<Allocation> allocations = allocationService.getByDate(year, month, hospId, levelSorts);
+        if (allocations.isEmpty()) {
+            throw new CostException("医院未分摊本月数据");
+        }
+        BigDecimal reduce = allocations.stream().map(Allocation::getAmount).reduce(BigDecimal.ZERO, BigDecimal::subtract);
+
+        loss.setReportName(reportForm.getReportName()).setReportNum(reportForm.getNum())
+                .setAmount(reduce).setCreateTime(System.currentTimeMillis()).setDateYear(year).setDateMonth(month);
+    }
+
+    /**
+     * 计算按会计科目下的科目名称
+     *
+     * @param hospId            医院id
+     * @param reportForm        报表
+     * @param loss              创建的对象
+     * @param incomes           归集收入数据
+     * @param allocationQueries 分摊成本数据
+     */
+    private void calcByAccount(Long hospId, ReportForm reportForm, HospProfitAndLoss loss, List<IncomeCollection> incomes, List<AllocationQuery> allocationQueries) {
+        List<RelationVO> accountRelations = reportRelationService.getAccountRelation(reportForm.getId(), hospId);
+        if (accountRelations.isEmpty()) {
+            return;
+        }
+        List<String> accountCodes = accountRelations.stream().map(RelationVO::getCode).collect(Collectors.toList());
+        AtomicReference<BigDecimal> calcTotal = new AtomicReference<>();
+        calcTotal.set(BigDecimal.ZERO);
+        accountCodes.forEach(i -> {
+            BigDecimal incomeAmount = incomes.stream().filter(j -> i.equals(j.getAccountingCode())).map(IncomeCollection::getAmount)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal costAmount = allocationQueries.stream().filter(j -> i.equals(j.getAccountingCode())).map(AllocationQuery::getAmount)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal total = incomeAmount.subtract(costAmount);
+            calcTotal.set(calcTotal.get().add(total));
+        });
+        loss.setReportName(reportForm.getReportName()).setReportNum(reportForm.getNum())
+                .setAmount(calcTotal.get()).setCreateTime(System.currentTimeMillis());
+
+    }
+}

+ 19 - 0
src/main/java/com/imed/costaccount/service/impl/IncomeCollectionServiceImpl.java

@@ -400,4 +400,23 @@ public class IncomeCollectionServiceImpl
 
         return new CollectDataFormVO(titleMap, realDatas, map);
     }
+
+    /**
+     * 获取某个时间的手机数据
+     *
+     * @param year   年
+     * @param month  月
+     * @param hospId 医院id
+     * @return 收入数据id 可能给为null 调用者自行判断
+     */
+    @Override
+    public List<IncomeCollection> getCollectionsByDate(int year, int month, Long hospId) {
+        List<IncomeCollection> list = this.list(
+                new LambdaQueryWrapper<IncomeCollection>()
+                        .eq(IncomeCollection::getYear, year)
+                        .eq(IncomeCollection::getMonth, month)
+                        .eq(IncomeCollection::getHospId, hospId)
+        );
+        return list;
+    }
 }

+ 48 - 12
src/main/java/com/imed/costaccount/service/impl/ReportFormServiceImpl.java

@@ -157,7 +157,7 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
      */
     private void checkCalcFormula(String calcFormula, Long hospId, Integer reportType) {
         // 校验公式不存在单独的'[' 或 ']',中括号未闭合
-        if (StrUtil.isBlank(calcFormula)){
+        if (StrUtil.isBlank(calcFormula)) {
             throw new CostException("计算公式未传递");
         }
         boolean flag = CommonUtil.whetherStringClose(calcFormula);
@@ -271,7 +271,7 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
 
     /**
      * 辅助数据
-     *  计算过于复杂建议多线程处理
+     * 计算过于复杂建议多线程处理
      *
      * @param copyReportDTO {@link CopyReportDTO}
      * @param hospId        医院id
@@ -310,7 +310,7 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
         List<ReportForm> childrenForms = list.stream().filter(i -> i.getParentId() != 0).collect(Collectors.toList());
         List<ReportForm> newParentForms = this.list(
                 new LambdaQueryWrapper<ReportForm>()
-                        .select(ReportForm::getOldId,ReportForm::getId)
+                        .select(ReportForm::getOldId, ReportForm::getId)
                         .eq(ReportForm::getHospId, hospId)
                         .eq(ReportForm::getReportType, toReportType)
                         .eq(ReportForm::getParentId, 0)
@@ -342,7 +342,7 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
         // 得到新的子节点
         List<ReportForm> newSonForms = this.list(
                 new LambdaQueryWrapper<ReportForm>()
-                        .select(ReportForm::getOldId,ReportForm::getId)
+                        .select(ReportForm::getOldId, ReportForm::getId)
                         .eq(ReportForm::getHospId, hospId)
                         .eq(ReportForm::getReportType, toReportType)
                         .ne(ReportForm::getParentId, 0)
@@ -351,13 +351,49 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
         if (relations.isEmpty() || newSonForms.isEmpty()) {
             return;
         }
-       newSonForms.forEach(i -> {
-           relations.forEach(j -> {
-               if (i.getOldId() != 0 && i.getOldId().equals(j.getReportId())) {
-                   j.setReportId(i.getId());
-                   reportRelationService.save(j);
-               }
-           });
-       });
+        newSonForms.forEach(i -> {
+            relations.forEach(j -> {
+                if (i.getOldId() != 0 && i.getOldId().equals(j.getReportId())) {
+                    j.setReportId(i.getId());
+                    reportRelationService.save(j);
+                }
+            });
+        });
+    }
+
+    /**
+     * 通过报表类型获取该医院报表列表
+     *
+     * @param hospId 医院id
+     * @param type   报表类型 0.损益表、1.完全成本法表、2.变动成本表、3.全院损益表、4.全成本报表
+     * @return ReportFrom List ,可能返回null 调用者自行判断
+     */
+    @Override
+    public List<ReportForm> getListByReportType(Long hospId, Integer type) {
+        List<ReportForm> list = this.list(
+                new LambdaQueryWrapper<ReportForm>()
+                        .eq(ReportForm::getReportType, type)
+                        .eq(ReportForm::getHospId, hospId)
+                        .orderByAsc(ReportForm::getSort)
+        );
+        return list;
+    }
+
+    /**
+     * 通过parentId 得到下面所有的分类
+     *
+     * @param hospId   医院id
+     * @param parentId 父级id
+     * @return List
+     */
+    @Override
+    public List<ReportForm> getByParentId(Long hospId, Long parentId) {
+        List<ReportForm> list = this.list(
+                new LambdaQueryWrapper<ReportForm>()
+                        .eq(ReportForm::getHospId, hospId)
+                        .eq(ReportForm::getParentId, parentId)
+                        .orderByAsc(ReportForm::getSort)
+        );
+        return list;
     }
 }

+ 1 - 1
src/main/java/com/imed/costaccount/service/impl/ReportRelationServiceImpl.java

@@ -109,7 +109,7 @@ public class ReportRelationServiceImpl extends ServiceImpl<ReportRelationMapper,
             throw new CostException("选择的报表项目不存在");
         }
         Integer calcType = byId.getCalcType();
-        if (calcType != 1 && calcType != 2 && calcType!=5) {
+        if (calcType != 1 && calcType != 2 && calcType != 5) {
             throw new CostException("选择的报表项目不能绑定关联关系");
         }
 

+ 2 - 15
src/main/java/com/imed/costaccount/service/impl/ResponsibilityDepartmentServiceImpl.java

@@ -10,6 +10,7 @@ import com.imed.costaccount.model.ResponsibilityDepartment;
 import com.imed.costaccount.model.User;
 import com.imed.costaccount.model.dto.DepartDTO;
 import com.imed.costaccount.model.vo.CenterDepartmentVO;
+import com.imed.costaccount.model.vo.CostResponsibilityVO;
 import com.imed.costaccount.model.vo.DepartVO;
 import com.imed.costaccount.service.ResponsibilityDepartmentService;
 import com.imed.costaccount.service.ResponsibilityService;
@@ -42,21 +43,7 @@ public class ResponsibilityDepartmentServiceImpl
      */
     @Override
     public List<CenterDepartmentVO> getCenterDepart(User user) {
-        List<CenterDepartmentVO> list = responsibilityService.getParentSon(user);
-        for (CenterDepartmentVO centerDepartmentVO : list) {
-            if (centerDepartmentVO.getIsGatherCenter() == 2) {
-                centerDepartmentVO.setDepartments(baseMapper.getDepartByCenterId(centerDepartmentVO.getResponsibilityId()));
-            }
-            List<CenterDepartmentVO> child = centerDepartmentVO.getChild();
-            if (CollUtil.isEmpty(child)) {
-                child = new ArrayList<>();
-            }
-            for (CenterDepartmentVO departmentVO : child) {
-                List<DepartVO> departVOS = baseMapper.getDepartByCenterId(departmentVO.getResponsibilityId());
-                departmentVO.setDepartments(departVOS);
-            }
-        }
-        return list;
+        return responsibilityService.getParentSon(user);
     }
 
     /**

+ 33 - 43
src/main/java/com/imed/costaccount/service/impl/ResponsibilityServiceImpl.java

@@ -7,7 +7,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.BeanUtil;
 import com.imed.costaccount.constants.NumberConstant;
-import com.imed.costaccount.enums.ErrorCodeEnum;
+import com.imed.costaccount.common.enums.ErrorCodeEnum;
+import com.imed.costaccount.mapper.ResponsibilityDepartmentMapper;
 import com.imed.costaccount.mapper.ResponsibilityMapper;
 import com.imed.costaccount.model.Responsibility;
 import com.imed.costaccount.model.User;
@@ -32,9 +33,11 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
 
 
     private final CostShareLevelServiceImpl costShareLevelService;
+    private final ResponsibilityDepartmentMapper responsibilityDepartMapper;
 
-    public ResponsibilityServiceImpl(CostShareLevelServiceImpl costShareLevelService) {
+    public ResponsibilityServiceImpl(CostShareLevelServiceImpl costShareLevelService, ResponsibilityDepartmentMapper responsibilityDepartMapper) {
         this.costShareLevelService = costShareLevelService;
+        this.responsibilityDepartMapper = responsibilityDepartMapper;
     }
 
     /**
@@ -347,49 +350,36 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
      */
     @Override
     public List<CenterDepartmentVO> getParentSon(User user) {
-        // 获取所有数据
-        // 1. 获取所有的列表然后组装
-        List<Responsibility> parentList = this.list(
-                new LambdaQueryWrapper<Responsibility>()
-                        .eq(Responsibility::getHospId, user.getHospId())
-                        .eq(Responsibility::getParentId, 0)
-                        .orderByDesc(Responsibility::getCreateTime)
-        );
-        if (CollUtil.isEmpty(parentList)) {
-            return Collections.emptyList();
-        }
-        List<Responsibility> sonList = this.list(
-                new LambdaQueryWrapper<Responsibility>()
-                        .eq(Responsibility::getHospId, user.getHospId())
-                        .ne(Responsibility::getParentId, 0)
-        );
+        List<CostResponsibilityVO> costResponsibilityVOS = this.getCostResponsibilityVO(user);
+        List<CenterDepartmentVO> centerDepartmentVOS = costResponsibilityVOS.stream().map(i -> {
+            CenterDepartmentVO vo = BeanUtil.convertObj(i, CenterDepartmentVO.class);
+            vo.setResponsibilityId(i.getId());
+            return vo;
+        }).collect(Collectors.toList());
 
-        List<CenterDepartmentVO> list = new ArrayList<>();
-        // 拷贝组合
-        for (Responsibility parent : parentList) {
-            CenterDepartmentVO centerDepartmentVO = new CenterDepartmentVO();
-            centerDepartmentVO.setResponsibilityId(parent.getId());
-            centerDepartmentVO.setIsGatherCenter(parent.getIsGatherCenter());
-            centerDepartmentVO.setResponsibilityName(parent.getResponsibilityName());
-            centerDepartmentVO.setIsParent(true);
-            for (Responsibility son : sonList) {
-                CenterDepartmentVO sonVO = new CenterDepartmentVO();
-                if (parent.getId().equals(son.getParentId())) {
-                    sonVO.setResponsibilityId(son.getId());
-                    sonVO.setResponsibilityName(son.getResponsibilityName());
-                    sonVO.setIsParent(false);
-                    sonVO.setIsGatherCenter(son.getIsGatherCenter());
-                    List<CenterDepartmentVO> child = centerDepartmentVO.getChild();
-                    if (CollUtil.isEmpty(child)) {
-                        child = new ArrayList<>();
+        return centerDepartmentVOS.stream().filter(i -> i.getParentId() == 0)
+                .peek(i -> {
+                    i.setChild(this.getResponsibilityChildrenForRelation(i, centerDepartmentVOS));
+                    i.setIsParent(true);
+                })
+                .collect(Collectors.toList());
+
+    }
+
+    private List<CenterDepartmentVO> getResponsibilityChildrenForRelation(CenterDepartmentVO parent, List<CenterDepartmentVO> costResponsibilityVOS) {
+        return costResponsibilityVOS.stream().filter(o -> o.getParentId().equals(parent.getId()))
+                .peek(o -> {
+                    o.setIsParent(true);
+                    List<CenterDepartmentVO> responsibilityChildrenForRelation = this.getResponsibilityChildrenForRelation(o, costResponsibilityVOS);
+                    if (CollUtil.isEmpty(responsibilityChildrenForRelation)) {
+                        o.setIsParent(false);
+                        o.setDepartments(responsibilityDepartMapper.getDepartByCenterId(o.getResponsibilityId()));
                     }
-                    child.add(sonVO);
-                    centerDepartmentVO.setChild(child);
-                }
-            }
-            list.add(centerDepartmentVO);
-        }
-        return list;
+                    o.setChild(responsibilityChildrenForRelation);
+
+                })
+                .collect(Collectors.toList());
+
     }
 
 

+ 1 - 1
src/main/java/com/imed/costaccount/service/impl/ShareParamValueServiceImpl.java

@@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.*;
 import com.imed.costaccount.constants.NumberConstant;
-import com.imed.costaccount.enums.DateStyleEnum;
+import com.imed.costaccount.common.enums.DateStyleEnum;
 import com.imed.costaccount.mapper.ShareParamValueMapper;
 import com.imed.costaccount.model.*;
 import com.imed.costaccount.model.dto.CopyShareParamValueDTO;

+ 9 - 0
src/main/java/com/imed/costaccount/web/DemoController.java

@@ -1,6 +1,7 @@
 package com.imed.costaccount.web;
 
 import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.service.DemoService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -9,8 +10,16 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/demo")
 public class DemoController {
 
+    private final DemoService demoService;
+
+    public DemoController(DemoService demoService) {
+        this.demoService = demoService;
+    }
+
+
     @GetMapping
     public Result demo() {
+        demoService.test();
         return Result.ok();
     }
 }

+ 29 - 0
src/main/java/com/imed/costaccount/web/HospProfitAndLossController.java

@@ -0,0 +1,29 @@
+package com.imed.costaccount.web;
+
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.service.HospProfitAndLossService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "全院损益相关")
+@RestController("/costAccount/hospProfitAndLoss")
+public class HospProfitAndLossController extends AbstractController{
+
+    private final HospProfitAndLossService hospProfitAndLossService;
+
+    public HospProfitAndLossController(HospProfitAndLossService hospProfitAndLossService) {
+        this.hospProfitAndLossService = hospProfitAndLossService;
+    }
+
+
+    @ApiOperation("计算全院损益")
+    @PostMapping("/calc")
+    public Result calc(@RequestParam @ApiParam(name = "date",value = "yyyy-MM-dd") String date) {
+        hospProfitAndLossService.calc(date, getHospId());
+        return Result.ok();
+    }
+}

+ 21 - 0
src/main/resources/mapper/HospProfitAndLossMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.imed.costaccount.mapper.HospProfitAndLossMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.HospProfitAndLoss" id="hospProfitAndLossMap">
+        <result property="id" column="id"/>
+        <result property="dateYear" column="date_year"/>
+        <result property="dateMonth" column="date_month"/>
+        <result property="reportNum" column="report_num"/>
+        <result property="reportName" column="report_name"/>
+        <result property="costType" column="cost_type"/>
+        <result property="incomeType" column="income_type"/>
+        <result property="amount" column="amount"/>
+        <result property="createTime" column="create_time"/>
+        <result property="deleteTime" column="delete_time"/>
+    </resultMap>
+
+
+</mapper>