Forráskód Böngészése

Merge branch 'master' of huangrui/CostAccount into dev

huangrui 4 éve
szülő
commit
ee3ecee788
36 módosított fájl, 1336 hozzáadás és 44 törlés
  1. 5 1
      pom.xml
  2. 144 0
      src/main/java/com/imed/costaccount/common/util/JsonUtil.java
  3. 16 0
      src/main/java/com/imed/costaccount/mapper/AccountingProductMapper.java
  4. 16 0
      src/main/java/com/imed/costaccount/mapper/CostAccountShareMapper.java
  5. 2 4
      src/main/java/com/imed/costaccount/model/Accounting.java
  6. 57 0
      src/main/java/com/imed/costaccount/model/AccountingProduct.java
  7. 84 0
      src/main/java/com/imed/costaccount/model/CostAccountShare.java
  8. 21 0
      src/main/java/com/imed/costaccount/model/dto/AccountProductSaveDTO.java
  9. 2 2
      src/main/java/com/imed/costaccount/model/dto/AccountingEditDTO.java
  10. 43 0
      src/main/java/com/imed/costaccount/model/dto/CostAccountShareEditDto.java
  11. 42 0
      src/main/java/com/imed/costaccount/model/dto/CostAccountShareSaveDto.java
  12. 18 0
      src/main/java/com/imed/costaccount/model/dto/ProductAccountDTO.java
  13. 23 0
      src/main/java/com/imed/costaccount/model/dto/ProductEditDTO.java
  14. 28 0
      src/main/java/com/imed/costaccount/model/vo/AccountProductVO.java
  15. 45 0
      src/main/java/com/imed/costaccount/model/vo/CostAccountShareVO.java
  16. 32 0
      src/main/java/com/imed/costaccount/model/vo/CostResponsibilityLevelVO.java
  17. 34 0
      src/main/java/com/imed/costaccount/service/AccountingProductService.java
  18. 38 0
      src/main/java/com/imed/costaccount/service/CostAccountShareService.java
  19. 18 0
      src/main/java/com/imed/costaccount/service/CostShareParamService.java
  20. 18 0
      src/main/java/com/imed/costaccount/service/ProductService.java
  21. 8 0
      src/main/java/com/imed/costaccount/service/ResponsibilityService.java
  22. 135 0
      src/main/java/com/imed/costaccount/service/impl/AccountingProductServiceImpl.java
  23. 2 1
      src/main/java/com/imed/costaccount/service/impl/AccountingServiceImpl.java
  24. 116 0
      src/main/java/com/imed/costaccount/service/impl/CostAccountShareServiceImpl.java
  25. 1 1
      src/main/java/com/imed/costaccount/service/impl/CostShareLevelServiceImpl.java
  26. 31 0
      src/main/java/com/imed/costaccount/service/impl/CostShareParamServiceImpl.java
  27. 61 4
      src/main/java/com/imed/costaccount/service/impl/ProductServiceImpl.java
  28. 56 19
      src/main/java/com/imed/costaccount/service/impl/ResponsibilityServiceImpl.java
  29. 55 0
      src/main/java/com/imed/costaccount/web/AccountingProductController.java
  30. 88 0
      src/main/java/com/imed/costaccount/web/CostAccountShareController.java
  31. 25 3
      src/main/java/com/imed/costaccount/web/CostShareParamController.java
  32. 19 4
      src/main/java/com/imed/costaccount/web/ProductController.java
  33. 12 0
      src/main/java/com/imed/costaccount/web/ResponsibilityController.java
  34. 0 5
      src/main/java/com/imed/costaccount/web/test.json
  35. 17 0
      src/main/resources/mapper/AccountingProductMapper.xml
  36. 24 0
      src/main/resources/mapper/CostAccountShareMapper.xml

+ 5 - 1
pom.xml

@@ -106,7 +106,11 @@
             <version>5.1.17</version>
         </dependency>
 
-
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.7</version>
+        </dependency>
         <!--数据连接池-->
         <dependency>
             <groupId>com.alibaba</groupId>

+ 144 - 0
src/main/java/com/imed/costaccount/common/util/JsonUtil.java

@@ -0,0 +1,144 @@
+package com.imed.costaccount.common.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializeConfig;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Auther: mukehua
+ * @Date: 2018/10/18 10:20
+ * @Description:
+ */
+public final class JsonUtil {
+
+    private static final SerializeConfig config;
+
+    static {
+        config = new SerializeConfig();
+//        config.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
+//        config.put(java.sql.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
+    }
+
+    private static final SerializerFeature[] features = {SerializerFeature.WriteMapNullValue, // 输出空置字段
+            SerializerFeature.WriteNullListAsEmpty, // list字段如果为null,输出为[],而不是null
+            SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null,输出为0,而不是null
+            SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null,输出为false,而不是null
+            SerializerFeature.WriteNullStringAsEmpty // 字符类型字段如果为null,输出为"",而不是null
+    };
+
+    /**
+     * 将对象转为JSON字符串
+     * @param object
+     * @return
+     */
+    public static String toJSONString(Object object) {
+        return JSON.toJSONString(object, config, features);
+    }
+
+    public static String toJSONStringNoFeatures(Object object) {
+        return JSON.toJSONString(object, config);
+    }
+
+    public static Object toBean(String text) {
+        return JSON.parse(text);
+    }
+
+    /**
+     * 将字符串转成指定类型bean
+     * @param text
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> T toBean(String text, Class<T> clazz) {
+        return JSON.parseObject(text, clazz);
+    }
+
+    // 转换为数组
+    public static Object[] toArray(String text) {
+        return toArray(text, null);
+    }
+
+    /**
+     * 将字符串转成指定类型数组
+     * @param text
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> Object[] toArray(String text, Class<T> clazz) {
+        return JSON.parseArray(text, clazz).toArray();
+    }
+
+    /**
+     * 将字符串转成指定类型集合
+     * @param text
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> toList(String text, Class<T> clazz) {
+        return JSON.parseArray(text, clazz);
+    }
+
+//    /**
+//     * 将javabean转化为序列化的json字符串
+//     * @param keyvalue
+//     * @return
+//     */
+    /*public static Object beanToJson(KeyValue keyvalue) {
+        String textJson = JSON.toJSONString(keyvalue);
+        Object objectJson  = JSON.parse(textJson);
+        return objectJson;
+    }*/
+
+    /**
+     * 将string转化为序列化的json字符串
+     * @param text
+     * @return
+     */
+    public static Object textToJson(String text) {
+        Object objectJson  = JSON.parse(text);
+        return objectJson;
+    }
+
+    /**
+     * json字符串转化为map
+     * @param s
+     * @return
+     */
+    public static <K, V> Map<K, V>  stringToCollect(String s) {
+        Map<K, V> m = (Map<K, V>) JSONObject.parseObject(s);
+        return m;
+    }
+
+    /**
+     * 转换JSON字符串为对象
+     * @param jsonData
+     * @param clazz
+     * @return
+     */
+    public static Object convertJsonToObject(String jsonData, Class<?> clazz) {
+        return JSONObject.parseObject(jsonData, clazz);
+    }
+
+    public static Object convertJSONToObject(String content, Class<?> clazz) {
+        return JSONObject.parseObject(content, clazz);
+    }
+
+    /**
+     * 将map转化为string
+     * @param m
+     * @return
+     */
+    public static <K, V> String collectToString(Map<K, V> m) {
+        String s = JSONObject.toJSONString(m);
+        return s;
+    }
+}
+
+

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.AccountingProduct;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 会计科目成本对照表
+ * 
+ * @author huangrui
+ * @date 2021-07-28 20:20:53
+ */
+@Mapper
+public interface AccountingProductMapper extends BaseMapper<AccountingProduct> {
+	
+}

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.CostAccountShare;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 责任中心成本对照表
+ * 
+ * @author KCYG
+ * @date 2021-07-28 18:34:52
+ */
+@Mapper
+public interface CostAccountShareMapper extends BaseMapper<CostAccountShare> {
+	
+}

+ 2 - 4
src/main/java/com/imed/costaccount/model/Accounting.java

@@ -3,15 +3,13 @@ package com.imed.costaccount.model;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-
-import java.io.Serializable;
-import java.util.Date;
-
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+
 /**
  * 会计科目管理表
  * 

+ 57 - 0
src/main/java/com/imed/costaccount/model/AccountingProduct.java

@@ -0,0 +1,57 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+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-07-28 20:20:53
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_accounting_product")
+public class AccountingProduct implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Integer id;
+	/**
+	 * 会计科目Id
+	 */
+	private Integer accountingId;
+	/**
+	 * 医院Id
+	 */
+	private Integer hospId;
+	/**
+	 * 成本收入Id
+	 */
+	private Integer productId;
+	/**
+	 * 创建时间13位时间戳
+	 */
+	private Long createTime;
+	/**
+	 * 删除时间,如果存在表示已删除13位时间戳
+	 */
+	@TableLogic(value = "0",delval = "UNIX_TIMESTAMP(NOW()) * 1000")
+	private Long deleteTime;
+
+}

+ 84 - 0
src/main/java/com/imed/costaccount/model/CostAccountShare.java

@@ -0,0 +1,84 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 责任中心成本对照表
+ * 
+ * @author KCYG
+ * @email KCYG@xinxicom
+ * @date 2021-07-28 18:34:52
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_account_share")
+public class CostAccountShare implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Integer id;
+	/**
+	 * 责任中心Id
+	 */
+	private Integer responsibilityId;
+	/**
+	 * 责任中心分摊级别
+	 */
+	private Integer shareLevel;
+	/**
+	 * 责任中心代码
+	 */
+	private String responsibilityCode;
+	/**
+	 * 责任中心名称
+	 */
+	private String responsibilityName;
+	/**
+	 * 医院Id
+	 */
+	private Integer hospId;
+	/**
+	 * 成本项目Id
+	 *
+	 */
+	private Integer accountingId;
+	/**
+	 * 成本项目名称
+	 */
+	private String accountingName;
+	/**
+	 * 成本项目代码
+	 */
+	private String accountingCode;
+	/**
+	 * 分摊参数集合
+	 */
+	private String paramList;
+	/**
+	 * 备注
+	 */
+	private String costNode;
+	/**
+	 * 创建时间13位时间戳
+	 */
+	private Long createTime;
+	/**
+	 * 删除时间,如果存在表示已删除13位时间戳
+	 */
+	@TableLogic(value = "0",delval = "UNIX_TIMESTAMP(NOW()) * 1000")
+	private Long deleteTime;
+
+}

+ 21 - 0
src/main/java/com/imed/costaccount/model/dto/AccountProductSaveDTO.java

@@ -0,0 +1,21 @@
+package com.imed.costaccount.model.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@ApiModel
+public class AccountProductSaveDTO {
+
+    @NotNull(message = "会计科目id不能为空")
+    private Integer id;
+
+    @NotEmpty(message = "成本项目id不能为空")
+    private List<Integer> products;
+}

+ 2 - 2
src/main/java/com/imed/costaccount/model/dto/AccountingEditDTO.java

@@ -17,6 +17,6 @@ public class AccountingEditDTO {
     @NotEmpty(message = "科目名称不能为空")
     private String accountingName;
 
-    @NotNull(message = "会计科目类型不能为空")
-    private Integer accountingType;
+//    @NotNull(message = "会计科目类型不能为空")
+//    private Integer accountingType;
 }

+ 43 - 0
src/main/java/com/imed/costaccount/model/dto/CostAccountShareEditDto.java

@@ -0,0 +1,43 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.dto
+ * @date 2021-07-28 19:44
+ */
+@Data
+public class CostAccountShareEditDto {
+
+    // 责任中心成本对照表的id
+    private Integer id;
+
+    @ApiModelProperty(name = "responsibilityId",value = "责任中心的Id")
+    @NotNull(message = "责任中心Id不能为空")
+    private Integer responsibilityId;
+
+    @ApiModelProperty(name = "shareLevel",value = "责任中心分摊层级")
+    private Integer shareLevel;
+
+    @ApiModelProperty(name = "responsibilityCode",value = "责任中心代码")
+    private String responsibilityCode;
+
+    @ApiModelProperty(name = "responsibilityCode",value = "责任中心名称")
+    private String responsibilityName;
+
+    @ApiModelProperty(name = "accountingId",value = "成本项目的Id")
+    private Integer accountingId;
+
+    @ApiModelProperty(name = "accountingName",value = "成本项目名称")
+    private String accountingName;
+
+    @ApiModelProperty(name = "accountingCode",value = "成本项目代码")
+    private String accountingCode;
+
+    @ApiModelProperty(name = "costNode",value = "备注")
+    private String costNode;
+}

+ 42 - 0
src/main/java/com/imed/costaccount/model/dto/CostAccountShareSaveDto.java

@@ -0,0 +1,42 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.dto
+ * @date 2021-07-28 19:01
+ */
+@Data
+@ApiModel
+public class CostAccountShareSaveDto {
+
+    @ApiModelProperty(name = "responsibilityId",value = "责任中心的Id")
+    @NotNull(message = "责任中心Id不能为空")
+    private Integer responsibilityId;
+
+    @ApiModelProperty(name = "shareLevel",value = "责任中心分摊层级")
+    private Integer shareLevel;
+
+    @ApiModelProperty(name = "responsibilityCode",value = "责任中心代码")
+    private String responsibilityCode;
+
+    @ApiModelProperty(name = "responsibilityCode",value = "责任中心名称")
+    private String responsibilityName;
+
+    @ApiModelProperty(name = "accountingId",value = "成本项目的Id")
+    private Integer accountingId;
+
+    @ApiModelProperty(name = "accountingName",value = "成本项目名称")
+    private String accountingName;
+
+    @ApiModelProperty(name = "accountingCode",value = "成本项目代码")
+    private String accountingCode;
+
+    @ApiModelProperty(name = "costNode",value = "备注")
+    private String costNode;
+}

+ 18 - 0
src/main/java/com/imed/costaccount/model/dto/ProductAccountDTO.java

@@ -0,0 +1,18 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel
+public class ProductAccountDTO {
+
+    @NotNull(message = "id不能为空")
+    private Integer id;
+
+    @NotBlank(message = "成本名称不能为空")
+    private String productName;
+}

+ 23 - 0
src/main/java/com/imed/costaccount/model/dto/ProductEditDTO.java

@@ -0,0 +1,23 @@
+package com.imed.costaccount.model.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel
+public class ProductEditDTO {
+
+    @NotNull(message = "id不能为空")
+    private Integer id;
+
+    @NotBlank(message = "成本名称不能为空")
+    private String productName;
+
+    @NotBlank(message = "成本科目代码不能为空")
+    private String productCode;
+
+}

+ 28 - 0
src/main/java/com/imed/costaccount/model/vo/AccountProductVO.java

@@ -0,0 +1,28 @@
+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;
+
+import java.util.List;
+
+@Data
+@ApiModel
+public class AccountProductVO {
+
+    private Integer id;
+
+    private String accountingName;
+
+    private String accountingCode;
+
+    @JsonIgnore
+    private Integer parentId;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private List<ProductVO> productVOs;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private List<AccountProductVO> child;
+}

+ 45 - 0
src/main/java/com/imed/costaccount/model/vo/CostAccountShareVO.java

@@ -0,0 +1,45 @@
+package com.imed.costaccount.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.vo
+ * @date 2021-07-28 18:51
+ */
+@Data
+@ApiModel
+public class CostAccountShareVO {
+
+    @ApiModelProperty(name = "id",value = "责任中心成本对照相关Id")
+    private Integer id;
+
+    @ApiModelProperty(name = "responsibilityId",value = "责任中心的Id")
+    private Integer responsibilityId;
+
+    @ApiModelProperty(name = "shareLevel",value = "责任中心分摊层级")
+    private Integer shareLevel;
+
+    @ApiModelProperty(name = "responsibilityCode",value = "责任中心代码")
+    private String responsibilityCode;
+
+    @ApiModelProperty(name = "responsibilityCode",value = "责任中心名称")
+    private String responsibilityName;
+
+    @ApiModelProperty(name = "accountingId",value = "成本项目的Id")
+    private Integer accountingId;
+
+    @ApiModelProperty(name = "accountingName",value = "成本项目名称")
+    private String accountingName;
+
+    @ApiModelProperty(name = "accountingCode",value = "成本项目代码")
+    private String accountingCode;
+
+    @ApiModelProperty(name = "shareparamId",value = "关联的分摊参数的Id集合")
+    private String shareparamId;
+
+    @ApiModelProperty(name = "costNode",value = "备注")
+    private String costNode;
+}

+ 32 - 0
src/main/java/com/imed/costaccount/model/vo/CostResponsibilityLevelVO.java

@@ -0,0 +1,32 @@
+package com.imed.costaccount.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.vo
+ * @date 2021-07-28 20:58
+ */
+@Data
+@ApiModel
+public class CostResponsibilityLevelVO {
+    @ApiModelProperty(name = "id",value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(name = "responsibilityName",value = "名称")
+    private String responsibilityName;
+
+    @ApiModelProperty(name = "responsibilityCode",value = "责任中心代码")
+    private String responsibilityCode;
+
+    @ApiModelProperty(name = "shareLevel",value = "分摊级别 如果是顶层默认为0")
+    private Integer shareLevel;
+
+    @ApiModelProperty(name = "shareName",value = "分摊级别名称")
+    private String shareName;
+
+    // 设置设置当前责任中心的分摊层级的计算方式
+    private Integer calcType;
+}

+ 34 - 0
src/main/java/com/imed/costaccount/service/AccountingProductService.java

@@ -0,0 +1,34 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.model.dto.AccountProductSaveDTO;
+import com.imed.costaccount.model.vo.AccountProductVO;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.AccountingProduct;
+
+import java.util.List;
+
+/**
+ * 会计科目成本对照表
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-07-28 20:20:53
+ */
+public interface AccountingProductService extends IService<AccountingProduct> {
+
+    /**
+     * 列表
+     * @param user
+     * @return
+     */
+    List<AccountProductVO> selectList(User user);
+
+    /**
+     * 保存或修改会计科目对照
+     * @param accountProductSaveDTO
+     * @param user
+     */
+    void saveAccountProduct(AccountProductSaveDTO accountProductSaveDTO, User user);
+}
+

+ 38 - 0
src/main/java/com/imed/costaccount/service/CostAccountShareService.java

@@ -0,0 +1,38 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.model.CostAccountShare;
+import com.imed.costaccount.model.dto.CostAccountShareEditDto;
+import com.imed.costaccount.model.dto.CostAccountShareSaveDto;
+
+/**
+ * 责任中心成本对照表
+ *
+ * @author KCYG
+ * @email KCYG@xinxicom
+ * @date 2021-07-28 18:34:52
+ */
+public interface CostAccountShareService extends IService<CostAccountShare> {
+    /**
+     * 分页查询责任中心成本对照相关数据
+     * @param page
+     * @param pageSize
+     * @param name
+     * @return
+     */
+    PageUtils queryList(Integer page, Integer pageSize, String name,Integer hospId);
+
+    /**
+     * 保存责任中心成本对照表
+     * @param costAccountShareSaveDto
+     */
+    void addCostAccountShare(CostAccountShareSaveDto costAccountShareSaveDto);
+
+    /**
+     * 修改成本中心责任对照表
+     * @param costAccountShareEditDto
+     */
+    void updateByCostAccountShare(CostAccountShareEditDto costAccountShareEditDto);
+}
+

+ 18 - 0
src/main/java/com/imed/costaccount/service/CostShareParamService.java

@@ -6,6 +6,9 @@ import com.imed.costaccount.model.CostShareParam;
 import com.imed.costaccount.model.dto.CostShareParamAccountDto;
 import com.imed.costaccount.model.dto.CostShareParamEditDto;
 import com.imed.costaccount.model.dto.CostShareParamSaveDto;
+import com.imed.costaccount.model.vo.CostShareParamVO;
+
+import java.util.List;
 
 /**
  * 分摊参数对照表
@@ -42,5 +45,20 @@ public interface CostShareParamService extends IService<CostShareParam> {
      * @return
      */
     CostShareParam updateCostShareParamByAccountId(CostShareParamAccountDto costShareParamAccountDto);
+
+    /**
+     * 获取所有分摊参数的集合信息
+     * @param hospId
+     * @return
+     */
+    List<CostShareParamVO> getAll(Integer hospId);
+
+    /**
+     * 根据医院的Id分摊参数的ID获取对应的分摊参数的数据
+     * @param id
+     * @param hospId
+     * @return
+     */
+    CostShareParamVO getByHospIdAndAPramId(Integer id, Integer hospId);
 }
 

+ 18 - 0
src/main/java/com/imed/costaccount/service/ProductService.java

@@ -5,6 +5,10 @@ import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.model.Product;
 import com.imed.costaccount.model.ProductDTO;
 import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.ProductEditDTO;
+import com.imed.costaccount.model.vo.CommonVO;
+
+import java.util.List;
 
 /**
  * 成本管理表
@@ -31,5 +35,19 @@ public interface ProductService extends IService<Product> {
      * @param user
      */
     void saveProduct(ProductDTO productDTO, User user);
+
+    /**
+     * 编辑某个成本项目
+     * @param productEditDTO
+     * @param user
+     */
+    void editProduct(ProductEditDTO productEditDTO, User user);
+
+    /**
+     * 修改或新增会计科目对照列表
+     * @param user
+     * @return
+     */
+    List<CommonVO> getProducts(User user);
 }
 

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

@@ -6,6 +6,7 @@ import com.imed.costaccount.model.dto.ResponsibilityEditDTO;
 import com.imed.costaccount.model.dto.ResponsibilitySaveDTO;
 import com.imed.costaccount.model.vo.CenterDepartmentVO;
 import com.imed.costaccount.model.vo.CommonVO;
+import com.imed.costaccount.model.vo.CostResponsibilityLevelVO;
 import com.imed.costaccount.model.vo.CostResponsibilityVO;
 import com.imed.costaccount.model.Responsibility;
 
@@ -55,5 +56,12 @@ public interface ResponsibilityService extends IService<Responsibility> {
     List<CenterDepartmentVO> getParentSon(User user);
 
     List<CommonVO> getParentList(User user);
+
+    /**
+     * 获取第二级别的责任中心的代码
+     * @param hospId
+     * @return
+     */
+    List<CostResponsibilityLevelVO> getLevelTwo(Integer hospId);
 }
 

+ 135 - 0
src/main/java/com/imed/costaccount/service/impl/AccountingProductServiceImpl.java

@@ -0,0 +1,135 @@
+package com.imed.costaccount.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.mapper.AccountingMapper;
+import com.imed.costaccount.mapper.AccountingProductMapper;
+import com.imed.costaccount.mapper.ProductMapper;
+import com.imed.costaccount.model.*;
+import com.imed.costaccount.model.dto.AccountProductSaveDTO;
+import com.imed.costaccount.model.dto.ProductAccountDTO;
+import com.imed.costaccount.model.vo.AccountProductVO;
+import com.imed.costaccount.model.vo.ProductVO;
+import com.imed.costaccount.service.AccountingProductService;
+import com.imed.costaccount.utils.BeanUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+@Service("accountingProductService")
+public class AccountingProductServiceImpl extends ServiceImpl<AccountingProductMapper, AccountingProduct> implements AccountingProductService {
+
+    private final AccountingMapper accountingMapper;
+
+    private final ProductMapper productMapper;
+
+    public AccountingProductServiceImpl(AccountingMapper accountingMapper, ProductMapper productMapper) {
+        this.accountingMapper = accountingMapper;
+        this.productMapper = productMapper;
+    }
+
+    /**
+     * 列表
+     *
+     * @param user
+     * @return
+     */
+    @Override
+    public List<AccountProductVO> selectList(User user) {
+        List<Accounting> list = accountingMapper.selectList(
+                new LambdaQueryWrapper<Accounting>()
+                        .eq(Accounting::getHospId, user.getHospId())
+        );
+
+        if (CollUtil.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        List<AccountProductVO> accountProductVOS = BeanUtil.convertList(list, AccountProductVO.class);
+        // 所有的
+        List<AccountProductVO> all = accountProductVOS.stream().map(i -> BeanUtil.convertObj(i, AccountProductVO.class)).collect(Collectors.toList());
+        // 顶层的
+        List<AccountProductVO> parents = all.stream().filter(i -> i.getParentId() == 0).collect(Collectors.toList());
+        List<AccountProductVO> accountVOS = new ArrayList<>();
+        for (AccountProductVO parent : parents) {
+            List<AccountProductVO> accountTree = this.getAccountTree(parent, all);
+            accountVOS.addAll(accountTree);
+        }
+        return accountVOS;
+    }
+
+
+    /**
+     * 递归处理
+     *
+     * @param accountVO
+     * @param list
+     * @return
+     */
+    private List<AccountProductVO> getAccountTree(AccountProductVO accountVO, List<AccountProductVO> list) {
+        List<AccountProductVO> accountVOS = new ArrayList<>();
+        for (AccountProductVO account : list) {
+            // 如果是父子关系
+            if (accountVO.getId().equals(account.getParentId())) {
+                List<AccountingProduct> accountingProducts = baseMapper.selectList(
+                        new LambdaQueryWrapper<AccountingProduct>().select(AccountingProduct::getId, AccountingProduct::getProductId)
+                                .eq(AccountingProduct::getAccountingId, account.getId())
+                );
+                if (CollUtil.isNotEmpty(accountingProducts)) {
+                    List<Integer> productIds = accountingProducts.stream().map(AccountingProduct::getProductId).collect(Collectors.toList());
+                    List<Product> products = productMapper.selectList(
+                            new LambdaQueryWrapper<Product>().in(Product::getId, productIds)
+                    );
+                    if (CollUtil.isNotEmpty(products)) {
+                        List<ProductVO> productVOS = BeanUtil.convertList(products, ProductVO.class);
+                        account.setProductVOs(productVOS);
+                    }
+                }
+
+                List<AccountProductVO> child = accountVO.getChild();
+                if (CollUtil.isEmpty(child)) {
+                    child = new ArrayList<>();
+                }
+                child.add(account);
+                accountVO.setChild(child);
+                // 处理子节点
+                this.getAccountTree(account, list);
+
+                accountVOS.add(accountVO);
+            }
+        }
+        return accountVOS;
+    }
+
+    /**
+     * 保存或修改会计科目对照
+     *
+     * @param accountProductSaveDTO
+     * @param user
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public void saveAccountProduct(AccountProductSaveDTO accountProductSaveDTO, User user) {
+        // 删除所有原来的关系
+        Integer accountId = accountProductSaveDTO.getId();
+        this.remove(new LambdaQueryWrapper<AccountingProduct>().eq(AccountingProduct::getAccountingId, accountId));
+
+        List<Integer> products = accountProductSaveDTO.getProducts();
+        List<AccountingProduct> accountingProducts = products.stream().map(i -> {
+            AccountingProduct accountingProduct = new AccountingProduct();
+            accountingProduct.setAccountingId(accountId)
+                    .setProductId(i)
+                    .setHospId(user.getHospId())
+                    .setCreateTime(System.currentTimeMillis());
+            return accountingProduct;
+        }).collect(Collectors.toList());
+
+        this.saveBatch(accountingProducts);
+    }
+}

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

@@ -196,6 +196,7 @@ public class AccountingServiceImpl extends ServiceImpl<AccountingMapper, Account
     @Override
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
     public void updateAccount(AccountingEditDTO accountingEditDTO, User user) {
+        // TODO: 2021/7/28 追踪溯源需求不满足
         Integer id = accountingEditDTO.getId();
         this.checkAccountingCode(accountingEditDTO.getAccountingCode(), user.getHospId());
         Accounting byId = this.getById(id);
@@ -206,7 +207,7 @@ public class AccountingServiceImpl extends ServiceImpl<AccountingMapper, Account
         byId.setAccountingCode(accountingEditDTO.getAccountingCode());
         byId.setAccountingName(accountingEditDTO.getAccountingName());
         byId.setCreateTime(System.currentTimeMillis());
-        byId.setAccountingType(accountingEditDTO.getAccountingType());
+//        byId.setAccountingType(accountingEditDTO.getAccountingType());
         this.updateById(byId);
 //        this.removeById(id);
 //        Accounting accounting = BeanUtil.convertObj(byId, Accounting.class);

+ 116 - 0
src/main/java/com/imed/costaccount/service/impl/CostAccountShareServiceImpl.java

@@ -0,0 +1,116 @@
+package com.imed.costaccount.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.imed.costaccount.common.exception.CostException;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.mapper.CostAccountShareMapper;
+import com.imed.costaccount.model.CostAccountShare;
+import com.imed.costaccount.model.Responsibility;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.CostAccountShareEditDto;
+import com.imed.costaccount.model.dto.CostAccountShareSaveDto;
+import com.imed.costaccount.model.vo.CostAccountShareVO;
+import com.imed.costaccount.service.CostAccountShareService;
+import com.imed.costaccount.utils.BeanUtil;
+import org.apache.shiro.SecurityUtils;
+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 org.springframework.util.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+@Service("costAccountShareService")
+public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMapper, CostAccountShare> implements CostAccountShareService {
+
+    @Autowired
+    private ResponsibilityServiceImpl responsibilityService;
+
+    /**
+     * 分页查询责任中心成本对照相关数据
+     *
+     * @param page
+     * @param pageSize
+     * @param name
+     * @return
+     */
+    @Override
+    public PageUtils queryList(Integer page, Integer pageSize, String name, Integer hospId) {
+        Page<CostAccountShare> costAccountSharePage = new Page<>(page, pageSize);
+        Page<CostAccountShare> pages = this.page(costAccountSharePage, new QueryWrapper<CostAccountShare>().lambda()
+                .eq(!StringUtils.isEmpty(hospId), CostAccountShare::getHospId, hospId)
+                .like(!StringUtils.isEmpty(name), CostAccountShare::getAccountingName, name)
+                .orderByAsc(CostAccountShare::getShareLevel));
+        List<CostAccountShare> costAccountShareList = pages.getRecords();
+        List<CostAccountShareVO> costAccountShareVOList = BeanUtil.convertList(costAccountShareList, CostAccountShareVO.class);
+        PageUtils pageUtils = new PageUtils(pages);
+        pageUtils.setList(costAccountShareVOList);
+        return pageUtils;
+    }
+
+    /**
+     * 保存责任中心成本对照表
+     *
+     * @param costAccountShareSaveDto
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void addCostAccountShare(CostAccountShareSaveDto costAccountShareSaveDto) {
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        // 检验输入的责任中心是否存在
+        Integer responsibilityId = costAccountShareSaveDto.getResponsibilityId();
+        Responsibility responsibility = responsibilityService.getOne(new QueryWrapper<Responsibility>().lambda().eq(Responsibility::getId, responsibilityId));
+        if (Objects.isNull(responsibility)){
+            throw new CostException(500,"输入的责任不存在");
+        }
+        if (costAccountShareSaveDto.getAccountingId() > 0){
+            throw new CostException(500,"输入的成本科目不存在");
+        }
+        // 检验输入的责任中心与匹配的成本科目是否存在
+        List<CostAccountShare> costAccountShareList = baseMapper.selectList(new QueryWrapper<CostAccountShare>().lambda().eq(CostAccountShare::getHospId,hospId));
+        Map<String, List<CostAccountShare>> costAccountMap = costAccountShareList.stream().collect(Collectors.groupingBy(CostAccountShare::getResponsibilityCode));
+        List<CostAccountShare> list = costAccountMap.get(costAccountShareSaveDto.getResponsibilityCode());
+        if (!CollectionUtils.isEmpty(list)){
+            String accountingCode = list.get(0).getAccountingCode();
+            if (accountingCode.equals(costAccountShareSaveDto.getAccountingCode())){
+                throw new CostException(500,"输入的责任中心对应的成本科目已存在");
+            }
+        }
+        CostAccountShare costAccountShareRequest = BeanUtil.convertObj(costAccountShareSaveDto, CostAccountShare.class);
+        costAccountShareRequest.setHospId(hospId);
+        costAccountShareRequest.setCreateTime(System.currentTimeMillis());
+        baseMapper.insert(costAccountShareRequest);
+    }
+
+    /**
+     * 修改成本中心责任对照表
+     *
+     * @param costAccountShareEditDto
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void updateByCostAccountShare(CostAccountShareEditDto costAccountShareEditDto) {
+        Integer id = costAccountShareEditDto.getId();
+        CostAccountShare costAccountShare = baseMapper.selectById(id);
+        if (Objects.isNull(costAccountShare)){
+            throw new CostException(500,"责任中心成本数据不存在");
+        }
+        baseMapper.deleteById(id);
+        // 新增责任中心成本对照数据
+        CostAccountShare costAccountShareRequest = BeanUtil.convertObj(costAccountShareEditDto, CostAccountShare.class);
+        costAccountShareRequest.setId(null);
+        costAccountShareRequest.setParamList(costAccountShare.getParamList());
+        costAccountShareRequest.setCreateTime(System.currentTimeMillis());
+        baseMapper.insert(costAccountShareRequest);
+    }
+
+}

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

@@ -42,7 +42,7 @@ public class CostShareLevelServiceImpl extends ServiceImpl<CostShareLevelMapper,
         Page<CostShareLevel> pages = this.page(costShareLevelPage, new QueryWrapper<CostShareLevel>().lambda()
                 .eq(!StringUtils.isEmpty(hospId), CostShareLevel::getHospId, hospId)
                 .like(!StringUtils.isEmpty(name), CostShareLevel::getShareName, name)
-                .orderByDesc(CostShareLevel::getLeverSort));
+                .orderByAsc(CostShareLevel::getLeverSort));
         List<CostShareLevel> costShareLevelList = pages.getRecords();
         List<CostShareLevelVO> costShareLevelVOList = BeanUtil.convertList(costShareLevelList, CostShareLevelVO.class);
         PageUtils pageUtils = new PageUtils(pages);

+ 31 - 0
src/main/java/com/imed/costaccount/service/impl/CostShareParamServiceImpl.java

@@ -103,6 +103,7 @@ public class CostShareParamServiceImpl extends ServiceImpl<CostShareParamMapper,
             throw new CostException(500,"对不起分摊参数代码已存在");
         }
         CostShareParam costShareParamRequest = BeanUtil.convertObj(costShareParamEditDto, CostShareParam.class);
+        costShareParamRequest.setId(null);
         costShareParamRequest.setCreateTime(System.currentTimeMillis());
         if (NumberConstant.TWO.equals( costShareParamEditDto.getShareParamCode()) && NumberConstant.TWO.equals(costShareParamEditDto.getShareParamCode())){
             costShareParamRequest.setAccountingId(costShareParam.getAccountingId());
@@ -135,4 +136,34 @@ public class CostShareParamServiceImpl extends ServiceImpl<CostShareParamMapper,
         }
         return null;
     }
+
+    /**
+     * 获取所有分摊参数的集合信息
+     *
+     * @param hospId
+     * @return
+     */
+    @Override
+    public List<CostShareParamVO> getAll(Integer hospId) {
+        List<CostShareParam> costShareParamList = baseMapper.selectList(new QueryWrapper<CostShareParam>().lambda()
+                .eq(CostShareParam::getHospId, hospId));
+        List<CostShareParamVO> costShareParamVOList = BeanUtil.convertList(costShareParamList, CostShareParamVO.class);
+        return costShareParamVOList;
+    }
+
+    /**
+     * 根据医院的Id分摊参数的ID获取对应的分摊参数的数据
+     *
+     * @param id
+     * @param hospId
+     * @return
+     */
+    @Override
+    public CostShareParamVO getByHospIdAndAPramId(Integer id, Integer hospId) {
+        CostShareParam costShareParam = baseMapper.selectOne(new QueryWrapper<CostShareParam>().lambda()
+                .eq(CostShareParam::getHospId, hospId)
+                .eq(CostShareParam::getId, id));
+        CostShareParamVO costShareParamVO = BeanUtil.convertObj(costShareParam, CostShareParamVO.class);
+        return costShareParamVO;
+    }
 }

+ 61 - 4
src/main/java/com/imed/costaccount/service/impl/ProductServiceImpl.java

@@ -4,15 +4,22 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.model.ProductDTO;
 import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.ProductEditDTO;
+import com.imed.costaccount.model.vo.CommonVO;
 import com.imed.costaccount.model.vo.ProductVO;
 import com.imed.costaccount.utils.BeanUtil;
 import io.swagger.models.auth.In;
 import org.springframework.stereotype.Service;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
@@ -58,20 +65,70 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
      * @param user
      */
     @Override
-    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void saveProduct(ProductDTO productDTO, User user) {
         // 校验code
-
+        this.checkProductCode(productDTO.getProductCode(), user.getHospId());
+        Product product = BeanUtil.convertObj(productDTO, Product.class);
+        product.setCreateTime(System.currentTimeMillis());
+        product.setHospId(user.getHospId());
+        this.save(product);
     }
 
-    private void checkProductCode(Integer code, Integer hospId) {
+    private void checkProductCode(String code, Integer hospId) {
         List<Product> list = this.list(
                 new LambdaQueryWrapper<Product>()
                         .eq(Product::getProductCode, code)
                         .eq(Product::getHospId, hospId)
         );
         if (CollUtil.isNotEmpty(list)) {
-            
+            throw new CostException(500, "成本代码已存在");
+        }
+    }
+
+
+    /**
+     * 编辑某个成本项目
+     *
+     * @param productEditDTO
+     * @param user
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public void editProduct(ProductEditDTO productEditDTO, User user) {
+        Product byId = this.getById(productEditDTO.getId());
+        if (Objects.isNull(byId)) {
+            throw new CostException(500, "选中的会计科目不存在");
+        }
+        this.removeById(productEditDTO.getId());
+        this.checkProductCode(productEditDTO.getProductCode(), user.getHospId());
+        Product product = byId.setId(null).setHospId(user.getHospId())
+                        .setProductCode(productEditDTO.getProductCode())
+                        .setProductName(productEditDTO.getProductName())
+                        .setCreateTime(System.currentTimeMillis());
+        this.save(product);
+    }
+
+    /**
+     * 修改或新增会计科目对照列表
+     *
+     * @param user
+     * @return
+     */
+    @Override
+    public List<CommonVO> getProducts(User user) {
+        List<Product> list = this.list(
+                new LambdaQueryWrapper<Product>().select(Product::getId, Product::getProductCode, Product::getProductName)
+                        .eq(Product::getHospId, user.getHospId())
+        );
+        if (list.isEmpty()) {
+            return Collections.emptyList();
         }
+       return list.stream().map(i -> {
+            CommonVO commonVO = new CommonVO();
+            commonVO.setId(i.getId());
+            commonVO.setName(i.getProductName() + "[" + i.getProductCode() + "]");
+            return commonVO;
+        }).collect(Collectors.toList());
     }
 }

+ 56 - 19
src/main/java/com/imed/costaccount/service/impl/ResponsibilityServiceImpl.java

@@ -12,15 +12,15 @@ import com.imed.costaccount.model.Responsibility;
 import com.imed.costaccount.model.User;
 import com.imed.costaccount.model.dto.ResponsibilityEditDTO;
 import com.imed.costaccount.model.dto.ResponsibilitySaveDTO;
-import com.imed.costaccount.model.vo.CenterDepartmentVO;
-import com.imed.costaccount.model.vo.CommonVO;
-import com.imed.costaccount.model.vo.CostResponsibilityVO;
+import com.imed.costaccount.model.vo.*;
 import com.imed.costaccount.service.ResponsibilityService;
 import com.imed.costaccount.utils.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
+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.*;
 import java.util.stream.Collectors;
@@ -30,6 +30,9 @@ import java.util.stream.Collectors;
 public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper, Responsibility> implements ResponsibilityService {
 
 
+    @Autowired
+    private CostShareLevelServiceImpl costShareLevelService;
+
     /**
      * 责任中心列表不分页
      *
@@ -84,15 +87,7 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
         if (Objects.isNull(id)) {
             id = 0;
         }
-        // 校验责任代码唯一性
-        Responsibility one = this.getOne(
-                new LambdaQueryWrapper<Responsibility>().select(Responsibility::getId)
-                        .eq(Responsibility::getResponsibilityCode, responsibilitySaveDTO.getResponsibilityCode())
-                        .eq(Responsibility::getHospId, user.getHospId()).last("limit 1")
-        );
-        if (Objects.nonNull(one)) {
-            throw new CostException(ErrorCodeEnum.RESPONSIBILITY_CODE_EXIST);
-        }
+        checkCode(responsibilitySaveDTO.getResponsibilityCode(), user.getHospId());
 
         Responsibility center = BeanUtil.convertObj(responsibilitySaveDTO, Responsibility.class);
         center.setCreateTime(System.currentTimeMillis()).setId(null).setParentId(id).setHospId(user.getHospId()).setResponsibilityLevel(2);
@@ -101,9 +96,22 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
             center.setShareLevel(0);
             center.setShareName("");
         }
+
         this.save(center);
     }
 
+    private void checkCode(String code,Integer hospId) {
+        // 校验责任代码唯一性
+        Responsibility one = this.getOne(
+                new LambdaQueryWrapper<Responsibility>().select(Responsibility::getId)
+                        .eq(Responsibility::getResponsibilityCode, code)
+                        .eq(Responsibility::getHospId, hospId).last("limit 1")
+        );
+        if (Objects.nonNull(one)) {
+            throw new CostException(ErrorCodeEnum.RESPONSIBILITY_CODE_EXIST);
+        }
+    }
+
 
     /**
      * 编辑责任中心
@@ -121,24 +129,25 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
         }
         // 如果修改父节点节点(只有两层的情况)
         if (center.getResponsibilityLevel() == 1) {
-            this.updateParent(responsibilityEditDTO, center);
+            this.updateParent(responsibilityEditDTO, center, user.getHospId());
             return;
         }
 
-        this.updateCurrent(responsibilityEditDTO, center);
+        this.updateCurrent(responsibilityEditDTO, center,user.getHospId());
     }
 
     /**
      * 修的是父节点
-     *
-     * @param dto
+     *  @param dto
      * @param responsibility
+     * @param hospId
      */
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public void updateParent(ResponsibilityEditDTO dto, Responsibility responsibility) {
+    public void updateParent(ResponsibilityEditDTO dto, Responsibility responsibility, Integer hospId) {
         // 删除原有的父节点数据
         Integer id = dto.getId();
         this.removeById(id);
+        this.checkCode(dto.getResponsibilityCode(),hospId);
         // 新增父节点数据
         Responsibility newResponsibility = BeanUtil.convertObj(dto, Responsibility.class);
         newResponsibility.setId(null).setHospId(responsibility.getHospId()).setCreateTime(new Date().getTime()).setResponsibilityLevel(1);
@@ -153,14 +162,17 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
     /**
      * 修改当前的节点
      *
-     * @param responsibility
      * @param dto
+     * @param responsibility
+     * @param hospId
      */
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public void updateCurrent(ResponsibilityEditDTO dto, Responsibility responsibility) {
+    public void updateCurrent(ResponsibilityEditDTO dto, Responsibility responsibility, Integer hospId) {
         // 删除原有的父节点数据
         Integer id = dto.getId();
         this.removeById(id);
+
+        this.checkCode(dto.getResponsibilityCode(),hospId);
         // 新增父节点数据
         Responsibility newResponsibility = BeanUtil.convertObj(dto, Responsibility.class);
         newResponsibility.setId(null).setHospId(responsibility.getHospId()).setCreateTime(new Date().getTime()).setResponsibilityLevel(1);
@@ -260,4 +272,29 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
             return commonVO;
         }).collect(Collectors.toList());
     }
+
+    /**
+     * 获取第二级别的责任中心的数据
+     *
+     * @param hospId
+     * @return
+     */
+    @Override
+    public List<CostResponsibilityLevelVO> getLevelTwo(Integer hospId) {
+        List<Responsibility> responsibilities = baseMapper.selectList(new QueryWrapper<Responsibility>().lambda()
+                .eq(Responsibility::getHospId, hospId)
+                .eq(Responsibility::getResponsibilityLevel, NumberConstant.TWO));
+        List<CostResponsibilityLevelVO> costResponsibilityLevelVOS = BeanUtil.convertList(responsibilities, CostResponsibilityLevelVO.class);
+        List<CostShareLevelVO> costShareLevelServiceAll = costShareLevelService.getAll(hospId);
+        Map<Integer, List<CostShareLevelVO>> listMap = costShareLevelServiceAll.stream().collect(Collectors.groupingBy(CostShareLevelVO::getId));
+        // 设置责任中心的计算方式
+        costResponsibilityLevelVOS.forEach(i->{
+            Integer shareLevel = i.getShareLevel();
+            List<CostShareLevelVO> costShareLevelVOList = listMap.get(shareLevel);
+            if (!CollectionUtils.isEmpty(costShareLevelVOList)){
+                i.setCalcType(costShareLevelVOList.get(0).getCalcType());
+            }
+        });
+        return costResponsibilityLevelVOS;
+    }
 }

+ 55 - 0
src/main/java/com/imed/costaccount/web/AccountingProductController.java

@@ -0,0 +1,55 @@
+package com.imed.costaccount.web;
+
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.model.dto.AccountProductSaveDTO;
+import com.imed.costaccount.model.vo.AccountProductVO;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.service.AccountingProductService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+
+/**
+ * 会计科目成本对照表
+ *
+ * @author huangrui
+ * @date 2021-07-28 20:20:53
+ */
+@Api(tags="会计科目成本对照表")
+@RestController
+@RequestMapping("/costAccount/accountProduct")
+public class AccountingProductController {
+
+    private final AccountingProductService accountingProductService;
+
+    public AccountingProductController(AccountingProductService accountingProductService) {
+        this.accountingProductService = accountingProductService;
+    }
+
+    /**
+     * 分页查询列表
+     */
+    @ApiOperation("会计科目成本对照列表")
+    @GetMapping("/list")
+    public Result list() {
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        List<AccountProductVO> list = accountingProductService.selectList(user);
+        PageUtils pageUtils = new PageUtils(list, 0, 0, 0);
+        return Result.ok(pageUtils);
+    }
+
+    @ApiOperation("会计科目成本新增或修改")
+    @PostMapping("/save")
+    public Result save(@RequestBody @Valid AccountProductSaveDTO accountProductSaveDTO) {
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        accountingProductService.saveAccountProduct(accountProductSaveDTO, user);
+        return Result.ok();
+    }
+
+}

+ 88 - 0
src/main/java/com/imed/costaccount/web/CostAccountShareController.java

@@ -0,0 +1,88 @@
+package com.imed.costaccount.web;
+
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.model.CostAccountShare;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.CostAccountShareEditDto;
+import com.imed.costaccount.model.dto.CostAccountShareSaveDto;
+import com.imed.costaccount.service.CostAccountShareService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Arrays;
+
+
+/**
+ * 责任中心成本对照表
+ *
+ * @author KCYG
+ * @date 2021-07-28 18:34:52
+ */
+@RestController
+@RequestMapping("/costAccount/costaccountshare")
+@Api(tags = "责任中心成本相关操作")
+public class CostAccountShareController {
+    @Autowired
+    private CostAccountShareService costAccountShareService;
+
+    /**
+     * 分页查询列表
+     */
+    @GetMapping("/list")
+    @ApiOperation("分页获取责任中心成本数据")
+    public Result list(@RequestParam(defaultValue = "1", value = "page") Integer page,
+                       @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
+                       @RequestParam(value = "name", required = false) String name){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        PageUtils pageUtils = costAccountShareService.queryList(page,pageSize,name,hospId);
+        return Result.ok(pageUtils);
+    }
+
+
+    /**
+     * 获取相关的责任中心成本对照表数据
+     */
+    @GetMapping("/getCostAccountShare")
+    @ApiOperation("根据责任中心成本对照表的Id获取")
+    public Result getCostAccountShare(Integer id){
+		CostAccountShare costAccountShare = costAccountShareService.getById(id);
+        return Result.ok(costAccountShare);
+    }
+
+    /**
+     * 保存
+     */
+    @PostMapping("/save")
+    @ApiOperation("保存责任中心成本对照数据")
+    public Result save(@RequestBody @Valid CostAccountShareSaveDto costAccountShareSaveDto){
+		costAccountShareService.addCostAccountShare(costAccountShareSaveDto);
+        return Result.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @PostMapping("/update")
+    @ApiOperation("修改责任中心成本数据")
+    public Result update(@RequestBody CostAccountShareEditDto costAccountShareEditDto){
+		costAccountShareService.updateByCostAccountShare(costAccountShareEditDto);
+        return Result.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @PostMapping("/delete")
+    @ApiOperation("删除责任中心成本数据")
+    public Result delete(@RequestBody Integer[] ids){
+		costAccountShareService.removeByIds(Arrays.asList(ids));
+        return Result.ok();
+    }
+
+}

+ 25 - 3
src/main/java/com/imed/costaccount/web/CostShareParamController.java

@@ -7,6 +7,7 @@ import com.imed.costaccount.model.User;
 import com.imed.costaccount.model.dto.CostShareParamAccountDto;
 import com.imed.costaccount.model.dto.CostShareParamEditDto;
 import com.imed.costaccount.model.dto.CostShareParamSaveDto;
+import com.imed.costaccount.model.vo.CostShareParamVO;
 import com.imed.costaccount.service.CostShareParamService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -14,7 +15,9 @@ import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
 import java.util.Arrays;
+import java.util.List;
 
 
 /**
@@ -44,13 +47,31 @@ public class CostShareParamController {
         return Result.ok(pageUtils);
     }
 
+    @GetMapping("/getById")
+    @ApiOperation("根据Id获取指定成本参数")
+    public Result getById(Integer id){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        CostShareParamVO costShareParamVO = costShareParamService.getByHospIdAndAPramId(id, hospId);
+        return Result.ok(costShareParamVO);
+    }
+
+
+    @GetMapping("/getAll")
+    @ApiOperation("获取所有的分摊参数的信息")
+    public Result getAll(){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        List<CostShareParamVO> costShareParamVOList= costShareParamService.getAll(hospId);
+        return Result.ok(costShareParamVOList);
+    }
 
     /**
      * 添加对应成本科目
      * 接受传递过来的数组集合
      */
     @PostMapping("/updateCostShareParamByAccountId")
-    @ApiOperation("添加对应科目信息")
+    @ApiOperation("为成本参数添加对应科目信息")
     public Result updateCostShareParamByAccountId(@RequestBody CostShareParamAccountDto costShareParamAccountDto){
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         Integer hospId = user.getHospId();
@@ -64,7 +85,7 @@ public class CostShareParamController {
      */
     @PostMapping("/save")
     @ApiOperation("添加分摊参数信息")
-    public Result save(@RequestBody CostShareParamSaveDto costShareParamSaveDto){
+    public Result save(@RequestBody @Valid CostShareParamSaveDto costShareParamSaveDto){
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         Integer hospId = user.getHospId();
         costShareParamSaveDto.setHospId(hospId);
@@ -77,7 +98,7 @@ public class CostShareParamController {
      */
     @PostMapping("/update")
     @ApiOperation("修改参数信息")
-    public Result update(@RequestBody CostShareParamEditDto costShareParamEditDto){
+    public Result update(@RequestBody @Valid  CostShareParamEditDto costShareParamEditDto){
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         Integer hospId = user.getHospId();
         costShareParamEditDto.setHospId(hospId);
@@ -89,6 +110,7 @@ public class CostShareParamController {
      * 删除
      */
     @PostMapping("/delete")
+    @ApiOperation("删除分摊参数信息")
     public Result delete(@RequestBody Integer[] ids){
 		costShareParamService.removeByIds(Arrays.asList(ids));
         return Result.ok();

+ 19 - 4
src/main/java/com/imed/costaccount/web/ProductController.java

@@ -5,6 +5,8 @@ import com.imed.costaccount.common.util.Result;
 import com.imed.costaccount.model.Product;
 import com.imed.costaccount.model.ProductDTO;
 import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.ProductEditDTO;
+import com.imed.costaccount.model.vo.CommonVO;
 import com.imed.costaccount.service.ProductService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -13,7 +15,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.sql.ResultSet;
 import java.util.Arrays;
+import java.util.List;
 
 
 /**
@@ -57,19 +61,30 @@ public class ProductController {
     /**
      * 修改
      */
-    @RequestMapping("/update")
-    public Result update(@RequestBody Product product){
-		productService.updateById(product);
+    @ApiOperation("编辑成本项目")
+    @PostMapping("/edit")
+    public Result update(@RequestBody @Valid ProductEditDTO productEditDTO){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        productService.editProduct(productEditDTO,user);
         return Result.ok();
     }
 
     /**
      * 删除
      */
-    @RequestMapping("/delete")
+    @ApiOperation("删除成本项目")
+    @PostMapping("/delete")
     public Result delete(@RequestBody Integer[] ids){
 		productService.removeByIds(Arrays.asList(ids));
         return Result.ok();
     }
 
+    @ApiOperation("修改或新增会计科目对照选择下拉列表")
+    @GetMapping("/getProducts")
+    public Result getProducts() {
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        List<CommonVO> list = productService.getProducts(user);
+        return Result.ok(list);
+    }
+
 }

+ 12 - 0
src/main/java/com/imed/costaccount/web/ResponsibilityController.java

@@ -6,6 +6,7 @@ import com.imed.costaccount.model.User;
 import com.imed.costaccount.model.dto.ResponsibilityEditDTO;
 import com.imed.costaccount.model.dto.ResponsibilitySaveDTO;
 import com.imed.costaccount.model.vo.CommonVO;
+import com.imed.costaccount.model.vo.CostResponsibilityLevelVO;
 import com.imed.costaccount.model.vo.CostResponsibilityVO;
 import com.imed.costaccount.service.ResponsibilityService;
 import io.swagger.annotations.Api;
@@ -39,6 +40,17 @@ public class ResponsibilityController {
         return Result.ok(pageUtils);
     }
 
+    @GetMapping("/getLevelTwo")
+    @ApiOperation("获取第二级的责任中心的数据")
+    public Result getLevelTwo(){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        List<CostResponsibilityLevelVO> costResponsibilityLevelVOList= responsibilityService.getLevelTwo(hospId);
+        return Result.ok(costResponsibilityLevelVOList);
+    }
+
+
+
     @ApiOperation("新增责任中心")
     @PostMapping("/save")
     public Result save(@RequestBody @Valid ResponsibilitySaveDTO responsibilitySaveDTO) {

+ 0 - 5
src/main/java/com/imed/costaccount/web/test.json

@@ -1,5 +0,0 @@
-{
-  "id": 1,
-  "accountingCode": "10002342",
-  "accountingName": "234234"
-}

+ 17 - 0
src/main/resources/mapper/AccountingProductMapper.xml

@@ -0,0 +1,17 @@
+<?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.AccountingProductMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.AccountingProduct" id="accountingProductMap">
+        <result property="id" column="id"/>
+        <result property="accountingId" column="accounting_id"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="productId" column="product_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="deleteTime" column="delete_time"/>
+    </resultMap>
+
+
+</mapper>

+ 24 - 0
src/main/resources/mapper/CostAccountShareMapper.xml

@@ -0,0 +1,24 @@
+<?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.CostAccountShareMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.CostAccountShare" id="costAccountShareMap">
+        <result property="id" column="id"/>
+        <result property="responsibilityId" column="responsibility_id"/>
+        <result property="shareLevel" column="share_level"/>
+        <result property="responsibilityCode" column="responsibility_code"/>
+        <result property="responsibilityName" column="responsibility_name"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="accountingId" column="accounting_id"/>
+        <result property="accountingName" column="accounting_name"/>
+        <result property="accountingCode" column="accounting_code"/>
+        <result property="paramList" column="param_list"/>
+        <result property="costNode" column="cost_node"/>
+        <result property="createTime" column="create_time"/>
+        <result property="deleteTime" column="delete_time"/>
+    </resultMap>
+
+
+</mapper>