Kaynağa Gözat

Merge branch 'master' of huangrui/CostAccount into dev

lijiaxi 4 yıl önce
ebeveyn
işleme
be0120b788
57 değiştirilmiş dosya ile 1946 ekleme ve 29 silme
  1. 127 0
      src/main/java/com/imed/costaccount/common/constants/Constant.java
  2. 33 0
      src/main/java/com/imed/costaccount/common/util/UserContext.java
  3. 16 0
      src/main/java/com/imed/costaccount/mapper/CostIncomeGroupSetMapper.java
  4. 16 0
      src/main/java/com/imed/costaccount/mapper/MenuMapper.java
  5. 16 0
      src/main/java/com/imed/costaccount/mapper/RoleMapper.java
  6. 16 0
      src/main/java/com/imed/costaccount/mapper/RoleMenuMapper.java
  7. 16 0
      src/main/java/com/imed/costaccount/mapper/UserRoleMapper.java
  8. 2 2
      src/main/java/com/imed/costaccount/model/CostAccountShare.java
  9. 71 0
      src/main/java/com/imed/costaccount/model/CostIncomeGroupSet.java
  10. 2 2
      src/main/java/com/imed/costaccount/model/CostShareParam.java
  11. 79 0
      src/main/java/com/imed/costaccount/model/Menu.java
  12. 55 0
      src/main/java/com/imed/costaccount/model/Role.java
  13. 47 0
      src/main/java/com/imed/costaccount/model/RoleMenu.java
  14. 47 0
      src/main/java/com/imed/costaccount/model/UserRole.java
  15. 43 0
      src/main/java/com/imed/costaccount/model/dto/CostIncomeGroupSetEditDto.java
  16. 40 0
      src/main/java/com/imed/costaccount/model/dto/CostIncomeGroupSetSaveDto.java
  17. 0 3
      src/main/java/com/imed/costaccount/model/dto/CostShareParamAccountDto.java
  18. 33 0
      src/main/java/com/imed/costaccount/model/dto/MenuSaveDTO.java
  19. 19 0
      src/main/java/com/imed/costaccount/model/dto/RoleEditDTO.java
  20. 23 0
      src/main/java/com/imed/costaccount/model/dto/RoleSaveDTO.java
  21. 6 3
      src/main/java/com/imed/costaccount/model/vo/AccountVO.java
  22. 39 0
      src/main/java/com/imed/costaccount/model/vo/CostIncomeGroupSetVO.java
  23. 16 0
      src/main/java/com/imed/costaccount/model/vo/CostResponsibilityTreeVO.java
  24. 41 0
      src/main/java/com/imed/costaccount/model/vo/MenuVO.java
  25. 27 0
      src/main/java/com/imed/costaccount/model/vo/RoleVO.java
  26. 1 1
      src/main/java/com/imed/costaccount/service/AccountingService.java
  27. 62 0
      src/main/java/com/imed/costaccount/service/CostIncomeGroupSetService.java
  28. 36 0
      src/main/java/com/imed/costaccount/service/MenuService.java
  29. 7 0
      src/main/java/com/imed/costaccount/service/ResponsibilityService.java
  30. 19 0
      src/main/java/com/imed/costaccount/service/RoleMenuService.java
  31. 44 0
      src/main/java/com/imed/costaccount/service/RoleService.java
  32. 19 0
      src/main/java/com/imed/costaccount/service/UserRoleService.java
  33. 8 0
      src/main/java/com/imed/costaccount/service/UserService.java
  34. 2 2
      src/main/java/com/imed/costaccount/service/impl/AccountingProductServiceImpl.java
  35. 19 5
      src/main/java/com/imed/costaccount/service/impl/AccountingServiceImpl.java
  36. 4 4
      src/main/java/com/imed/costaccount/service/impl/CostAccountShareServiceImpl.java
  37. 233 0
      src/main/java/com/imed/costaccount/service/impl/CostIncomeGroupSetServiceImpl.java
  38. 1 1
      src/main/java/com/imed/costaccount/service/impl/CostResponsibilityDepartmentServiceImpl.java
  39. 1 1
      src/main/java/com/imed/costaccount/service/impl/CostShareLevelServiceImpl.java
  40. 1 1
      src/main/java/com/imed/costaccount/service/impl/CostShareParamServiceImpl.java
  41. 1 1
      src/main/java/com/imed/costaccount/service/impl/HospitalServiceImpl.java
  42. 126 0
      src/main/java/com/imed/costaccount/service/impl/MenuServiceImpl.java
  43. 40 1
      src/main/java/com/imed/costaccount/service/impl/ResponsibilityServiceImpl.java
  44. 14 0
      src/main/java/com/imed/costaccount/service/impl/RoleMenuServiceImpl.java
  45. 107 0
      src/main/java/com/imed/costaccount/service/impl/RoleServiceImpl.java
  46. 14 0
      src/main/java/com/imed/costaccount/service/impl/UserRoleServiceImpl.java
  47. 22 0
      src/main/java/com/imed/costaccount/service/impl/UserServiceImpl.java
  48. 2 2
      src/main/java/com/imed/costaccount/web/AccountingController.java
  49. 104 0
      src/main/java/com/imed/costaccount/web/CostIncomeGroupSetController.java
  50. 69 0
      src/main/java/com/imed/costaccount/web/MenuController.java
  51. 8 0
      src/main/java/com/imed/costaccount/web/ResponsibilityController.java
  52. 61 0
      src/main/java/com/imed/costaccount/web/RoleController.java
  53. 21 0
      src/main/resources/mapper/CostIncomeGroupSetMapper.xml
  54. 23 0
      src/main/resources/mapper/MenuMapper.xml
  55. 17 0
      src/main/resources/mapper/RoleMapper.xml
  56. 15 0
      src/main/resources/mapper/RoleMenuMapper.xml
  57. 15 0
      src/main/resources/mapper/UserRoleMapper.xml

+ 127 - 0
src/main/java/com/imed/costaccount/common/constants/Constant.java

@@ -0,0 +1,127 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.imed.costaccount.common.constants;
+
+/**
+ * 常量
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class Constant {
+	/** 超级管理员ID */
+	public static final int SUPER_ADMIN = 1;
+    /**
+     * 当前页码
+     */
+    public static final String PAGE = "page";
+    /**
+     * 每页显示记录数
+     */
+    public static final String LIMIT = "limit";
+    /**
+     * 排序字段
+     */
+    public static final String ORDER_FIELD = "sidx";
+    /**
+     * 排序方式
+     */
+    public static final String ORDER = "order";
+    /**
+     *  升序
+     */
+    public static final String ASC = "asc";
+	/**
+	 * 菜单类型
+	 * 
+	 * @author chenshun
+	 * @email sunlightcs@gmail.com
+	 * @date 2016年11月15日 下午1:24:29
+	 */
+    public enum MenuType {
+        /**
+         * 目录
+         */
+    	CATALOG(0),
+        /**
+         * 菜单
+         */
+        MENU(1),
+        /**
+         * 按钮
+         */
+        BUTTON(2);
+
+        private int value;
+
+        MenuType(int value) {
+            this.value = value;
+        }
+
+        public int getValue() {
+            return value;
+        }
+    }
+    
+    /**
+     * 定时任务状态
+     * 
+     * @author chenshun
+     * @email sunlightcs@gmail.com
+     * @date 2016年12月3日 上午12:07:22
+     */
+    public enum ScheduleStatus {
+        /**
+         * 正常
+         */
+    	NORMAL(0),
+        /**
+         * 暂停
+         */
+    	PAUSE(1);
+
+        private int value;
+
+        ScheduleStatus(int value) {
+            this.value = value;
+        }
+        
+        public int getValue() {
+            return value;
+        }
+    }
+
+    /**
+     * 云服务商
+     */
+    public enum CloudService {
+        /**
+         * 七牛云
+         */
+        QINIU(1),
+        /**
+         * 阿里云
+         */
+        ALIYUN(2),
+        /**
+         * 腾讯云
+         */
+        QCLOUD(3);
+
+        private int value;
+
+        CloudService(int value) {
+            this.value = value;
+        }
+
+        public int getValue() {
+            return value;
+        }
+    }
+
+}

+ 33 - 0
src/main/java/com/imed/costaccount/common/util/UserContext.java

@@ -0,0 +1,33 @@
+package com.imed.costaccount.common.util;
+
+import com.imed.costaccount.model.User;
+import org.apache.shiro.SecurityUtils;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.common.util
+ * @date 2021-08-03 8:46
+ */
+public class UserContext {
+    private static final ThreadLocal<User> current = new ThreadLocal();
+
+    public UserContext() {
+    }
+
+    public static User getCurrentUser() {
+        return (User) SecurityUtils.getSubject().getPrincipal();
+    }
+
+    public static void setCurrentUser(User user) {
+        current.set(user);
+    }
+
+    public static void removeUser() {
+        current.remove();
+    }
+
+    public static Long getHospId(){
+        User principal = (User) SecurityUtils.getSubject().getPrincipal();
+        return principal.getHospId();
+    }
+}

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.CostIncomeGroupSet;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 收入归集设置
+ * 
+ * @author KCYG
+ * @date 2021-08-03 08:41:20
+ */
+@Mapper
+public interface CostIncomeGroupSetMapper extends BaseMapper<CostIncomeGroupSet> {
+	
+}

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.Menu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 菜单管理
+ * 
+ * @author huangrui
+ * @date 2021-08-03 08:56:22
+ */
+@Mapper
+public interface MenuMapper extends BaseMapper<Menu> {
+	
+}

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.Role;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 角色
+ * 
+ * @author huangrui
+ * @date 2021-08-03 08:56:22
+ */
+@Mapper
+public interface RoleMapper extends BaseMapper<Role> {
+	
+}

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.RoleMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 角色与菜单对应关系
+ * 
+ * @author huangrui
+ * @date 2021-08-03 08:56:22
+ */
+@Mapper
+public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
+	
+}

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.UserRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 用户与角色对应关系
+ * 
+ * @author huangrui
+ * @date 2021-08-03 08:56:22
+ */
+@Mapper
+public interface UserRoleMapper extends BaseMapper<UserRole> {
+	
+}

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

@@ -31,7 +31,7 @@ public class CostAccountShare implements Serializable {
 	/**
 	 * 责任中心Id
 	 */
-	private Integer responsibilityId;
+	private Long responsibilityId;
 	/**
 	 * 责任中心分摊级别
 	 */
@@ -52,7 +52,7 @@ public class CostAccountShare implements Serializable {
 	 * 成本项目Id
 	 *
 	 */
-	private Integer accountingId;
+	private Long accountingId;
 	/**
 	 * 成本项目名称
 	 */

+ 71 - 0
src/main/java/com/imed/costaccount/model/CostIncomeGroupSet.java

@@ -0,0 +1,71 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 收入归集设置
+ * 
+ * @author KCYG
+ * @email KCYG@xinxicom
+ * @date 2021-08-03 08:41:20
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_income_group_set")
+public class CostIncomeGroupSet implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 收入归集设置的Id
+	 */
+	@TableId
+	private Long id;
+	/**
+	 * 开单科室状态 1收益中心 2成本中心
+	 */
+	private Integer openDepartmentStatus;
+	/**
+	 * 开单科室收益比例
+	 */
+	private Integer openDepartmentProportion;
+	/**
+	 * 执行科室状态 1收益中心 2成本中心
+	 */
+	private Integer startDepartmentStatus;
+	/**
+	 * 执行科室的收益比例
+	 */
+	private Integer startDepartmentProportion;
+	/**
+	 * 医院的Id
+	 */
+	private Long hospId;
+	/**
+	 * 责任中心的代码
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String responsibilityCode;
+	/**
+	 * 排除的成本科目的Id ,拼接
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String accountCode;
+	/**
+	 * 创建时间13位时间戳
+	 */
+	private Long createTime;
+	/**
+	 * 删除时间,如果存在表示已删除13位时间戳
+	 */
+	@TableLogic(value = "0",delval = "UNIX_TIMESTAMP(NOW()) * 1000")
+	private Long deleteTime;
+
+}

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

@@ -37,10 +37,10 @@ public class CostShareParam implements Serializable {
 	 */
 	private String shareParamCode;
 	/**
-	 * 关联的会计成本的科目的Id
+	 * 关联的会计成本的科目的Id ,拼接
 	 */
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
-	private Long accountingId;
+	private String accountingId;
 	/**
 	 * 医院Id
 	 */

+ 79 - 0
src/main/java/com/imed/costaccount/model/Menu.java

@@ -0,0 +1,79 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+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-08-03 08:56:22
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("sys_menu")
+public class Menu implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 
+	 */
+	@TableId
+	private Long menuId;
+	/**
+	 * 父菜单ID,一级菜单为0
+	 */
+	private Long parentId;
+	/**
+	 * 菜单名称
+	 */
+	private String name;
+	/**
+	 * 菜单URL
+	 */
+	private String path;
+	/**
+	 * 外部系统url
+	 */
+	private String url;
+	/**
+	 * 授权(多个用逗号分隔,如:user:list,user:create)
+	 */
+	private String perms;
+	/**
+	 * 归属医院id
+	 */
+	private Long hospId;
+	/**
+	 * 类型   0:目录   1:菜单   2:按钮
+	 */
+	private Integer type;
+	/**
+	 * 菜单图标
+	 */
+	private String icon;
+	/**
+	 * 排序
+	 */
+	private Integer orderNum;
+	/**
+	 * 修改人id
+	 */
+	private Long modifyUserId;
+	/**
+	 * 修改时间
+	 */
+	private Long modifyTime;
+
+}

+ 55 - 0
src/main/java/com/imed/costaccount/model/Role.java

@@ -0,0 +1,55 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+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-08-03 08:56:22
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("sys_role")
+public class Role implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 
+	 */
+	@TableId
+	private Long roleId;
+	/**
+	 * 角色名称
+	 */
+	private String roleName;
+	/**
+	 * 备注
+	 */
+	private String remark;
+	/**
+	 * 归属医院id
+	 */
+	private Long hospId;
+	/**
+	 * 创建者ID
+	 */
+	private Long createUserId;
+	/**
+	 * 创建时间
+	 */
+	private Long createTime;
+
+}

+ 47 - 0
src/main/java/com/imed/costaccount/model/RoleMenu.java

@@ -0,0 +1,47 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+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-08-03 08:56:22
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("sys_role_menu")
+public class RoleMenu implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 
+	 */
+	@TableId
+	private Long id;
+	/**
+	 * 角色ID
+	 */
+	private Long roleId;
+	/**
+	 * 菜单ID
+	 */
+	private Long menuId;
+	/**
+	 * 归属医院id
+	 */
+	private Long hospId;
+
+}

+ 47 - 0
src/main/java/com/imed/costaccount/model/UserRole.java

@@ -0,0 +1,47 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+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-08-03 08:56:22
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("sys_user_role")
+public class UserRole implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 
+	 */
+	@TableId
+	private Long id;
+	/**
+	 * 用户ID
+	 */
+	private Long userId;
+	/**
+	 * 角色ID
+	 */
+	private Long roleId;
+	/**
+	 * 归属医院id
+	 */
+	private Long hospId;
+
+}

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

@@ -0,0 +1,43 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.dto
+ * @date 2021-08-03 9:51
+ */
+@Data
+@ApiModel("收入归集设置修改的对应")
+public class CostIncomeGroupSetEditDto {
+
+    @ApiModelProperty(name = "id",value = "收入归集设置的原始Id")
+    @NotNull(message = "原始Id不能为空")
+    private Long id;
+
+    @ApiModelProperty(name = "openDepartmentStatus", value = "开单科室的状态 1 收入中心  2 成本中心")
+    @NotNull(message = "开单科室状态不能为空")
+    private Integer openDepartmentStatus;
+
+    @ApiModelProperty(name = "openDepartmentProportion", value = "开单科室的比例")
+    @NotNull(message = "开单科室比例不能为空")
+    @Max(100L)
+    private Integer openDepartmentProportion;
+
+    @ApiModelProperty(name = "startDepartmentStatus", value = "执行科室状态 1 收入中心 2 成本中心")
+    @NotNull(message = "执行科室状态不能为空")
+    private Integer startDepartmentStatus;
+
+    @ApiModelProperty(name = "startDepartmentStatus", value = "执行科室的比例")
+    @NotNull(message = "执行科室状态不能为空")
+    @Max(100L)
+    private Integer startDepartmentProportion;
+
+    @ApiModelProperty(name = "responsibilityCode", value = "责任中心的代码")
+    private String responsibilityCode;
+}

+ 40 - 0
src/main/java/com/imed/costaccount/model/dto/CostIncomeGroupSetSaveDto.java

@@ -0,0 +1,40 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.dto
+ * @date 2021-08-03 9:33
+ */
+@Data
+@ApiOperation("收入归集设置的保存对象")
+public class CostIncomeGroupSetSaveDto {
+
+    @ApiModelProperty(name = "openDepartmentStatus", value = "开单科室的状态 1 收入中心  2 成本中心")
+    @NotNull(message = "开单科室状态不能为空")
+    private Integer openDepartmentStatus;
+
+    @ApiModelProperty(name = "openDepartmentProportion", value = "开单科室的比例")
+    @NotNull(message = "开单科室比例不能为空")
+    @Max(100L)
+    private Integer openDepartmentProportion;
+
+    @ApiModelProperty(name = "startDepartmentStatus", value = "执行科室状态 1 收入中心 2 成本中心")
+    @NotNull(message = "执行科室状态不能为空")
+
+    private Integer startDepartmentStatus;
+
+    @ApiModelProperty(name = "startDepartmentStatus", value = "执行科室的比例")
+    @Max(100L)
+    private Integer startDepartmentProportion;
+
+    @ApiModelProperty(name = "responsibilityCode", value = "责任中心的代码")
+    private String responsibilityCode;
+
+}

+ 0 - 3
src/main/java/com/imed/costaccount/model/dto/CostShareParamAccountDto.java

@@ -1,7 +1,5 @@
 package com.imed.costaccount.model.dto;
 
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
-import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 
 /**
@@ -19,7 +17,6 @@ public class CostShareParamAccountDto {
     /**
      * 要修改的成本参数
      */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Long costShareParamId;
     /**
      * 关联的医院的Id

+ 33 - 0
src/main/java/com/imed/costaccount/model/dto/MenuSaveDTO.java

@@ -0,0 +1,33 @@
+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 MenuSaveDTO {
+
+    @NotNull(message = "父级id不能为空")
+    private Long parentId;
+
+    @NotBlank(message = "菜单名称不能为空")
+    private String name;
+
+    @NotBlank(message = "菜单路径不能为空")
+    private String path;
+
+    private String url;
+
+    private String perms;
+
+    @NotNull(message = "菜单类型不能为空")
+    private Integer type;
+
+    @NotBlank(message = "菜单图标不能为空")
+    private String icon;
+
+    private Integer orderNum;
+}

+ 19 - 0
src/main/java/com/imed/costaccount/model/dto/RoleEditDTO.java

@@ -0,0 +1,19 @@
+package com.imed.costaccount.model.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel("角色编辑")
+public class RoleEditDTO {
+
+    @NotNull(message = "角色id不能为空")
+    private Long roleId;
+
+    private String roleName;
+
+    private String remark;
+}

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

@@ -0,0 +1,23 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@ApiModel("保存角色")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RoleSaveDTO {
+
+    @NotBlank(message = "角色名称不能为空")
+    @ApiModelProperty(name = "roleName",value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(name = "remark",value = "描述")
+    private String remark;
+}

+ 6 - 3
src/main/java/com/imed/costaccount/model/vo/AccountVO.java

@@ -24,9 +24,12 @@ public class AccountVO {
     private List<AccountVO> children;
 
     /**
-     * true表示选中
+     * true表示选中  是否被分摊参数选中
      */
-    private Boolean isSelect = false;
-
+    private Boolean isShareParamSelect = false;
 
+    /**
+     * true表示选中  是否被收入归集设置选中
+     */
+    private Boolean isIncomeGroutSetSelect = false;
 }

+ 39 - 0
src/main/java/com/imed/costaccount/model/vo/CostIncomeGroupSetVO.java

@@ -0,0 +1,39 @@
+package com.imed.costaccount.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.vo
+ * @date 2021-08-03 9:01
+ */
+@Data
+@ApiModel("收入归集设置的返回对象")
+public class CostIncomeGroupSetVO {
+
+    @ApiModelProperty(name = "id",value = "主键")
+    private Long id;
+
+    @ApiModelProperty(name = "openDepartmentStatus",value = "开单科室的状态 1 收入中心  2 成本中心")
+    private Integer openDepartmentStatus;
+
+    @ApiModelProperty(name = "openDepartmentProportion",value = "开单科室的比例")
+    private Integer openDepartmentProportion;
+
+    @ApiModelProperty(name = "startDepartmentStatus",value = "执行科室状态 1 收入中心 2 成本中心")
+    private Integer startDepartmentStatus;
+
+    @ApiModelProperty(name = "startDepartmentStatus",value = "执行科室的比例")
+    private Integer startDepartmentProportion;
+
+    @ApiModelProperty(name = "responsibilityCode",value = "责任中心的代码")
+    @JsonInclude(value = JsonInclude.Include.NON_NULL)
+    private String responsibilityCode;
+
+    @ApiModelProperty(name = "responsibilityName",value = "责任中心的名称")
+    @JsonInclude(value = JsonInclude.Include.NON_NULL)
+    private String responsibilityName;
+}

+ 16 - 0
src/main/java/com/imed/costaccount/model/vo/CostResponsibilityTreeVO.java

@@ -0,0 +1,16 @@
+package com.imed.costaccount.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.vo
+ * @date 2021-08-03 10:46
+ */
+@Data
+@ApiModel("责任中心的树形结构")
+public class CostResponsibilityTreeVO extends CostResponsibilityVO{
+
+
+}

+ 41 - 0
src/main/java/com/imed/costaccount/model/vo/MenuVO.java

@@ -0,0 +1,41 @@
+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 MenuVO {
+
+    private Long menuId;
+
+    @JsonIgnore
+    private Long parentId;
+
+    private String name;
+
+    private String path;
+
+    private String url;
+
+    private String perms;
+
+    private Integer type;
+
+    private String icon;
+
+    private Integer orderNum;
+
+    private String modifyUserName;
+
+    private String modifyTime;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private List<MenuVO> children;
+
+}

+ 27 - 0
src/main/java/com/imed/costaccount/model/vo/RoleVO.java

@@ -0,0 +1,27 @@
+package com.imed.costaccount.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("角色视图对象")
+public class RoleVO {
+
+    private Long roleId;
+
+    private String roleName;
+
+    private String hospName;
+
+    private String modifyUserName;
+
+    private String modifyTime;
+
+    private String remark;
+
+    private List<CommonVO> users;
+
+    private List<CommonVO> menus;
+}

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

@@ -26,7 +26,7 @@ public interface AccountingService extends IService<Accounting> {
      * @param shareParamId
      * @return
      */
-    List<AccountVO> getListByAccountType(Integer accountType, User user, Integer shareParamId);
+    List<AccountVO> getListByAccountType(Integer accountType, User user, Integer shareParamId,Integer incomeGroutSetId);
 
     /**
      * 保存会计科目

+ 62 - 0
src/main/java/com/imed/costaccount/service/CostIncomeGroupSetService.java

@@ -0,0 +1,62 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.model.CostIncomeGroupSet;
+import com.imed.costaccount.model.dto.CostIncomeGroupSetEditDto;
+import com.imed.costaccount.model.dto.CostIncomeGroupSetSaveDto;
+import com.imed.costaccount.model.vo.CostIncomeGroupSetVO;
+
+import java.util.List;
+
+/**
+ * 收入归集设置
+ *
+ * @author KCYG
+ * @email KCYG@xinxicom
+ * @date 2021-08-03 08:41:20
+ */
+public interface CostIncomeGroupSetService extends IService<CostIncomeGroupSet> {
+    /**
+     * 分页查询
+     * @param current
+     * @param pageSize
+     * @param hospId
+     * @return
+     */
+    PageUtils queryList(Integer current, Integer pageSize, Long hospId);
+
+    /**
+     *  根据Id获取对应的收入归集设置的数据
+     * @param id
+     * @return
+     */
+    CostIncomeGroupSetVO getByIncomeGroupId(Long id,Long hospId);
+
+    /**
+     * 保存收入归集设置的数据
+     * @param costIncomeGroupSetSaveDto
+     */
+    void addCostIncomeGroupSet(CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto,Long hospId);
+
+    /**
+     * 修改收入归集设置的数据
+     * @param costIncomeGroupSetEditDto
+     * @param hospId
+     */
+    void updateByIncomeGroup(CostIncomeGroupSetEditDto costIncomeGroupSetEditDto, Long hospId);
+
+    /**
+     * 查询当前收入归集设置里面对应的会计科目的Id集合
+     * @param incomeGroutSetId
+     * @return
+     */
+    List<String> selectIsSelect(Integer incomeGroutSetId);
+
+    /**
+     * 设置对应的排除成本科目
+     * @param accountList
+     */
+    void updateAccountCode(Integer id,List<String> accountList);
+}
+

+ 36 - 0
src/main/java/com/imed/costaccount/service/MenuService.java

@@ -0,0 +1,36 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.MenuSaveDTO;
+import com.imed.costaccount.model.Menu;
+
+import java.util.Map;
+
+/**
+ * 菜单管理
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-08-03 08:56:22
+ */
+public interface MenuService extends IService<Menu> {
+
+    /**
+     * 保存菜单
+     * @param menuSaveDTO {@link MenuSaveDTO}
+     * @param user {@linkplain User}
+     */
+    void saveMenu(MenuSaveDTO menuSaveDTO, User user);
+
+    /**
+     * 分页查询菜单列表
+     * @param page 页码
+     * @param pageSize 每页数据大小
+     * @param user 当前登录用户
+     * @return 菜单分页列表
+     */
+    PageUtils selectList(Integer page, Integer pageSize, User user);
+}
+

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

@@ -69,5 +69,12 @@ public interface ResponsibilityService extends IService<Responsibility> {
      * @return
      */
     List<CostResponsibilityLevelVO> getLevelTwo(Long hospId);
+
+    /**
+     * 责任中心在收入归集设置里面显示的列表
+     * @param user
+     * @return
+     */
+    List<CostResponsibilityVO> responsibilityList(User user);
 }
 

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

@@ -0,0 +1,19 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.utils.PageUtils;
+import com.imed.costaccount.model.RoleMenu;
+
+import java.util.Map;
+
+/**
+ * 角色与菜单对应关系
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-08-03 08:56:22
+ */
+public interface RoleMenuService extends IService<RoleMenu> {
+
+}
+

+ 44 - 0
src/main/java/com/imed/costaccount/service/RoleService.java

@@ -0,0 +1,44 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.RoleEditDTO;
+import com.imed.costaccount.model.dto.RoleSaveDTO;
+import com.imed.costaccount.model.Role;
+
+/**
+ * 角色
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-08-03 08:56:22
+ */
+public interface RoleService extends IService<Role> {
+
+    /**
+     * 保存角色
+     * @param roleSaveDTO {@link RoleSaveDTO}
+     * @param user
+     */
+    void saveRole(RoleSaveDTO roleSaveDTO, User user);
+
+    /**
+     * 查询角色列表并分页
+     * @param page 页码
+     * @param pageSize 每页展示数据条数
+     * @param keyword 模糊匹配关键字
+     * @param user 当前登录用户
+     * @return {@link PageUtils} 分页对象
+     */
+    PageUtils selectList(Integer page, Integer pageSize, String keyword, User user);
+
+    /**
+     * 编辑某个角色
+     * @param roleEditDTO {@link RoleEditDTO}
+     * @param userId 当前登录人id
+     */
+    void updateRole(RoleEditDTO roleEditDTO, Long userId);
+
+}
+

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

@@ -0,0 +1,19 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.utils.PageUtils;
+import com.imed.costaccount.model.UserRole;
+
+import java.util.Map;
+
+/**
+ * 用户与角色对应关系
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-08-03 08:56:22
+ */
+public interface UserRoleService extends IService<UserRole> {
+
+}
+

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

@@ -68,5 +68,13 @@ public interface UserService extends IService<User> {
      * @param user
      */
     void logout(User user);
+
+    /**
+     * 通过用户id和医院id获取用户的名称,如果不存在,返回""
+     * @param createUserId id
+     * @param hospId 医院id
+     * @return 用户名称,如果不存在返回空字符串
+     */
+    String getUsernameByIdAndHospId(Long createUserId, Long hospId);
 }
 

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

@@ -97,7 +97,7 @@ public class AccountingProductServiceImpl extends ServiceImpl<AccountingProductM
                             .eq(AccountingProduct::getAccountingId, account.getId())
             );
             if (CollUtil.isNotEmpty(accountingProducts)) {
-                List<Integer> productIds = accountingProducts.stream().map(AccountingProduct::getProductId).collect(Collectors.toList());
+                List<Long> productIds = accountingProducts.stream().map(AccountingProduct::getProductId).collect(Collectors.toList());
                 List<Product> products = productMapper.selectList(
                         new LambdaQueryWrapper<Product>().in(Product::getId, productIds)
                 );
@@ -123,7 +123,7 @@ public class AccountingProductServiceImpl extends ServiceImpl<AccountingProductM
         Long accountId = accountProductSaveDTO.getId();
         this.remove(new LambdaQueryWrapper<AccountingProduct>().eq(AccountingProduct::getAccountingId, accountId));
 
-        List<Integer> products = accountProductSaveDTO.getProducts();
+        List<Long> products = accountProductSaveDTO.getProducts();
         List<AccountingProduct> accountingProducts = products.stream().map(i -> {
             AccountingProduct accountingProduct = new AccountingProduct();
             accountingProduct.setAccountingId(accountId)

+ 19 - 5
src/main/java/com/imed/costaccount/service/impl/AccountingServiceImpl.java

@@ -13,6 +13,7 @@ import com.imed.costaccount.model.dto.AccountingSaveDTO;
 import com.imed.costaccount.model.vo.AccountVO;
 import com.imed.costaccount.model.vo.SelectAccountingVO;
 import com.imed.costaccount.service.AccountingService;
+import com.imed.costaccount.service.CostIncomeGroupSetService;
 import com.imed.costaccount.service.CostShareParamService;
 import com.imed.costaccount.utils.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -29,8 +30,11 @@ public class AccountingServiceImpl extends ServiceImpl<AccountingMapper, Account
 
     private final CostShareParamService shareParamService;
 
-    public AccountingServiceImpl(CostShareParamService shareParamService) {
+    private final CostIncomeGroupSetService costIncomeGroupSetService;
+
+    public AccountingServiceImpl(CostShareParamService shareParamService, CostIncomeGroupSetService costIncomeGroupSetService) {
         this.shareParamService = shareParamService;
+        this.costIncomeGroupSetService = costIncomeGroupSetService;
     }
 
     /**
@@ -42,7 +46,7 @@ public class AccountingServiceImpl extends ServiceImpl<AccountingMapper, Account
      * @return
      */
     @Override
-    public List<AccountVO> getListByAccountType(Integer accountType, User user, Integer shareParamId) {
+    public List<AccountVO> getListByAccountType(Integer accountType, User user, Integer shareParamId, Integer incomeGroutSetId) {
         // 1. 得到所有的会计科目
         List<Accounting> list = this.list(
                 new LambdaQueryWrapper<Accounting>()
@@ -56,18 +60,28 @@ public class AccountingServiceImpl extends ServiceImpl<AccountingMapper, Account
         // 所有的
 //        List<AccountVO> all = list.stream().map(i -> BeanUtil.con(i, AccountVO.class)).collect(Collectors.toList());
         List<AccountVO> all = BeanUtil.convertList(list, AccountVO.class);
-        // 查询所有的已绑定的
+        // 查询所有的已绑定的分摊参数
         if (Objects.nonNull(shareParamId)) {
             List<Integer> ids = shareParamService.selectIsSelect(shareParamId);
             if (CollUtil.isNotEmpty(ids)) {
                 all.forEach(i -> {
                     if (ids.contains(i.getId())) {
-                        i.setIsSelect(true);
+                        i.setIsShareParamSelect(true);
+                    }
+                });
+            }
+        }
+        // 查询所有已绑定的 收入归集设置
+        if (Objects.nonNull(incomeGroutSetId)){
+            List<String> codes= costIncomeGroupSetService.selectIsSelect(incomeGroutSetId);
+            if (CollUtil.isNotEmpty(codes)){
+                all.forEach(i->{
+                    if (codes.contains(i.getAccountingCode())){
+                        i.setIsShareParamSelect(true);
                     }
                 });
             }
         }
-
         // 顶层的
         List<AccountVO> parents = all.stream().filter(i -> i.getParentId() == 0).collect(Collectors.toList());
         List<AccountVO> accountVOS = new ArrayList<>();

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

@@ -81,7 +81,7 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         Map<Long, List<Responsibility>> resMap = list.stream().collect(Collectors.groupingBy(Responsibility::getId));
         Map<Long, List<Accounting>> accountMap = accountingList.stream().collect(Collectors.groupingBy(Accounting::getId));
         costAccountShareList.forEach(i->{
-            Integer id = i.getResponsibilityId();
+            Long id = i.getResponsibilityId();
             List<Responsibility> responsibilities = resMap.get(id);
             if (!CollectionUtils.isEmpty(responsibilities)){
                 i.setResponsibilityId(id);
@@ -89,7 +89,7 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
                 i.setResponsibilityCode(responsibilities.get(0).getResponsibilityCode());
 
             }
-            Integer accountingId = i.getAccountingId();
+            Long accountingId = i.getAccountingId();
             if (accountingId>0){
                 List<Accounting> accountingList1 = accountMap.get(accountingId);
                 if (!CollectionUtils.isEmpty(accountingList1)){
@@ -117,7 +117,7 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         // 检验输入的责任中心是否存在
         List<CostAccountShare> costAccountShareList = baseMapper.selectList(new QueryWrapper<CostAccountShare>().lambda()
                 .eq(CostAccountShare::getHospId, hospId));
-        Map<Integer, List<CostAccountShare>> map = costAccountShareList.stream().collect(Collectors.groupingBy(CostAccountShare::getResponsibilityId));
+        Map<Long, List<CostAccountShare>> map = costAccountShareList.stream().collect(Collectors.groupingBy(CostAccountShare::getResponsibilityId));
         if (!CollectionUtils.isEmpty(map.get(costAccountShareSaveDto.getResponsibilityId()))){
             throw new CostException(500,"添加的责任中心已存在");
         }
@@ -164,7 +164,7 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
             }
         }
         // 检验输入的这个责任中心是否允许输入成本科目
-        Integer shareId = responsibility.getShareId();
+        Long shareId = responsibility.getShareId();
         CostShareLevel costShareLevel = costShareLevelService.getOne(new QueryWrapper<CostShareLevel>().lambda()
                 .eq(CostShareLevel::getHospId, hospId).eq(CostShareLevel::getId, shareId));
         if (Objects.nonNull(costShareLevel)){

+ 233 - 0
src/main/java/com/imed/costaccount/service/impl/CostIncomeGroupSetServiceImpl.java

@@ -0,0 +1,233 @@
+package com.imed.costaccount.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.common.exception.CostException;
+import com.imed.costaccount.common.util.BeanUtil;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.constants.NumberConstant;
+import com.imed.costaccount.mapper.CostIncomeGroupSetMapper;
+import com.imed.costaccount.model.CostIncomeGroupSet;
+import com.imed.costaccount.model.Responsibility;
+import com.imed.costaccount.model.dto.CostIncomeGroupSetEditDto;
+import com.imed.costaccount.model.dto.CostIncomeGroupSetSaveDto;
+import com.imed.costaccount.model.vo.CostIncomeGroupSetVO;
+import com.imed.costaccount.service.CostIncomeGroupSetService;
+import com.imed.costaccount.service.ResponsibilityService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+@Service("costIncomeGroupSetService")
+public class CostIncomeGroupSetServiceImpl extends ServiceImpl<CostIncomeGroupSetMapper, CostIncomeGroupSet> implements CostIncomeGroupSetService {
+
+    private final ResponsibilityService responsibilityService;
+
+    public CostIncomeGroupSetServiceImpl(ResponsibilityService responsibilityService) {
+        this.responsibilityService = responsibilityService;
+    }
+
+    /**
+     * 分页查询
+     *
+     * @param current
+     * @param pageSize
+     * @param hospId
+     * @return
+     */
+    @Override
+    public PageUtils queryList(Integer current, Integer pageSize, Long hospId) {
+        Page<CostIncomeGroupSet> costIncomeGroupSetPage = new Page<>(current, pageSize);
+        Page<CostIncomeGroupSet> pages = this.page(costIncomeGroupSetPage, new QueryWrapper<CostIncomeGroupSet>().lambda()
+                .eq(CostIncomeGroupSet::getHospId, hospId)
+                .orderByDesc(CostIncomeGroupSet::getCreateTime));
+        List<CostIncomeGroupSet> records = pages.getRecords();
+        List<Responsibility> responsibilityList = responsibilityService.list(new QueryWrapper<Responsibility>().lambda()
+                .eq(Responsibility::getHospId, hospId));
+        List<CostIncomeGroupSetVO> costIncomeGroupSetVOList = BeanUtil.convertList(records, CostIncomeGroupSetVO.class);
+        if (!CollectionUtils.isEmpty(responsibilityList)) {
+            Map<String, List<Responsibility>> listMap = responsibilityList.stream().collect(Collectors.groupingBy(Responsibility::getResponsibilityCode));
+            costIncomeGroupSetVOList.forEach(i -> {
+                String responsibilityCode = i.getResponsibilityCode();
+                if (!StringUtils.isEmpty(responsibilityCode)) {
+                    List<Responsibility> responsibilities = listMap.get(responsibilityCode);
+                    if (!CollectionUtils.isEmpty(responsibilities)) {
+                        i.setResponsibilityName(responsibilities.get(0).getResponsibilityName());
+                    }
+                }
+            });
+        }
+        PageUtils pageUtils = new PageUtils(pages);
+        pageUtils.setList(costIncomeGroupSetVOList);
+        return pageUtils;
+    }
+
+    /**
+     * 根据Id获取对应的收入归集设置的数据
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public CostIncomeGroupSetVO getByIncomeGroupId(Long id, Long hospId) {
+        CostIncomeGroupSet costIncomeGroupSet = baseMapper.selectById(id);
+        if (Objects.isNull(costIncomeGroupSet)) {
+            return null;
+        }
+        CostIncomeGroupSetVO costIncomeGroupSetVO = BeanUtil.convertObj(costIncomeGroupSet, CostIncomeGroupSetVO.class);
+        List<Responsibility> responsibilityList = responsibilityService.list(new QueryWrapper<Responsibility>().lambda()
+                .eq(Responsibility::getHospId, hospId));
+        if (!CollectionUtils.isEmpty(responsibilityList)) {
+            Map<String, List<Responsibility>> listMap = responsibilityList.stream().collect(Collectors.groupingBy(Responsibility::getResponsibilityCode));
+            String responsibilityCode = costIncomeGroupSetVO.getResponsibilityCode();
+            if (!StringUtils.isEmpty(responsibilityCode)) {
+                List<Responsibility> responsibilities = listMap.get(responsibilityCode);
+                if (!CollectionUtils.isEmpty(responsibilities)) {
+                    costIncomeGroupSetVO.setResponsibilityName(responsibilities.get(0).getResponsibilityName());
+                }
+            }
+        }
+        return costIncomeGroupSetVO;
+    }
+
+    /**
+     * 保存收入归集设置的数据
+     *
+     * @param costIncomeGroupSetSaveDto
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void addCostIncomeGroupSet(CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto, Long hospId) {
+        // 检验输入的数据是否符合要求
+        checkIncomeGroupSet(costIncomeGroupSetSaveDto, hospId);
+        CostIncomeGroupSet costIncomeGroupSet = BeanUtil.convertObj(costIncomeGroupSetSaveDto, CostIncomeGroupSet.class);
+        costIncomeGroupSet.setCreateTime(System.currentTimeMillis());
+        costIncomeGroupSet.setHospId(hospId);
+        baseMapper.insert(costIncomeGroupSet);
+    }
+
+    /**
+     * 检验输入的数据是否符合要求
+     * @param costIncomeGroupSetSaveDto
+     * @param hospId
+     */
+    private void checkIncomeGroupSet(CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto, Long hospId) {
+        Integer sum = costIncomeGroupSetSaveDto.getOpenDepartmentProportion() + costIncomeGroupSetSaveDto.getStartDepartmentProportion();
+        if (!NumberConstant.ONE_HUNDRED.equals(sum)) {
+            throw new CostException(500, "输入的比例和不是100");
+        }
+        if (NumberConstant.TWO.equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus())
+                && NumberConstant.TWO.equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())) {
+            if (StringUtils.isEmpty(costIncomeGroupSetSaveDto.getResponsibilityCode())){
+                throw new CostException(500, "两个成本中心需要输入对应的责任中心");
+            }else {
+                costIncomeGroupSetSaveDto.setOpenDepartmentProportion(NumberConstant.ZERO);
+                costIncomeGroupSetSaveDto.setStartDepartmentProportion(NumberConstant.ZERO);
+            }
+        }
+        if (!StringUtils.isEmpty(costIncomeGroupSetSaveDto.getResponsibilityCode())){
+            if (NumberConstant.ONE.equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus()) ||
+                NumberConstant.ONE.equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())){
+                throw new CostException(500,"存在收益中心 不允许设置责任中心");
+            }
+        }
+        // 检验原始数据里面是否存在
+        List<CostIncomeGroupSet> costIncomeGroupSets = baseMapper.selectList(new QueryWrapper<CostIncomeGroupSet>().lambda()
+                .eq(CostIncomeGroupSet::getHospId, hospId));
+        List<CostIncomeGroupSet> costIncomeGroupSetList = costIncomeGroupSets.stream().filter(i ->
+                i.getOpenDepartmentStatus().equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus()) &&
+                        i.getStartDepartmentStatus().equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())
+        ).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(costIncomeGroupSetList)){
+            throw new CostException(500,"开单与执行的对应类型已经存在");
+        }
+        // 如果一个是收入中心一个是成本中心  那本自动调整比例设置为0 100  如果两个收益中心的话需要按照不理  都是成本中心就是0
+        if (!costIncomeGroupSetSaveDto.getOpenDepartmentStatus().equals(costIncomeGroupSetSaveDto.getStartDepartmentStatus())){
+            if (NumberConstant.ONE.equals(costIncomeGroupSetSaveDto.getOpenDepartmentStatus())){
+                costIncomeGroupSetSaveDto.setOpenDepartmentProportion(NumberConstant.ONE_HUNDRED);
+                costIncomeGroupSetSaveDto.setStartDepartmentProportion(NumberConstant.ZERO);
+            }else {
+                costIncomeGroupSetSaveDto.setOpenDepartmentProportion(NumberConstant.ZERO);
+                costIncomeGroupSetSaveDto.setStartDepartmentProportion(NumberConstant.ONE_HUNDRED);
+            }
+        }
+    }
+
+    /**
+     * 修改收入归集设置的数据
+     *
+     * @param costIncomeGroupSetEditDto
+     * @param hospId
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void updateByIncomeGroup(CostIncomeGroupSetEditDto costIncomeGroupSetEditDto, Long hospId) {
+        Long id = costIncomeGroupSetEditDto.getId();
+        CostIncomeGroupSet costIncomeGroupSet = baseMapper.selectById(id);
+        if (Objects.isNull(costIncomeGroupSet)) {
+            throw new CostException(500, "收入归集设置数据不存在");
+        }
+        baseMapper.deleteById(id);
+        CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto = BeanUtil.convertObj(costIncomeGroupSetEditDto, CostIncomeGroupSetSaveDto.class);
+        // 检验输入的数据是否存在
+        checkIncomeGroupSet(costIncomeGroupSetSaveDto,hospId);
+        CostIncomeGroupSet incomeGroupSet = BeanUtil.convertObj(costIncomeGroupSetSaveDto, CostIncomeGroupSet.class);
+        incomeGroupSet.setHospId(hospId);
+        incomeGroupSet.setCreateTime(System.currentTimeMillis());
+        incomeGroupSet.setResponsibilityCode(costIncomeGroupSetSaveDto.getResponsibilityCode());
+        incomeGroupSet.setAccountCode(costIncomeGroupSet.getAccountCode());
+        baseMapper.insert(incomeGroupSet);
+    }
+
+    /**
+     * 查询当前收入归集设置里面对应的会计科目的Id集合
+     *
+     * @param incomeGroutSetId
+     * @return
+     */
+    @Override
+    public List<String> selectIsSelect(Integer incomeGroutSetId) {
+        CostIncomeGroupSet incomeGroupSet = this.getById(incomeGroutSetId);
+        if (Objects.isNull(incomeGroupSet)) {
+            return Collections.emptyList();
+        }
+        String accountCode = incomeGroupSet.getAccountCode();
+        if (!StringUtils.isEmpty(accountCode)){
+            List<String> collect = Arrays.stream(accountCode.split(StrUtil.COMMA)).map(String::valueOf).collect(Collectors.toList());
+            return collect;
+        }else {
+            return Collections.emptyList();
+        }
+    }
+
+    /**
+     * 设置对应的排除成本科目
+     * @param id  收入归集设置的Id
+     * @param accountList 对应科目的Code集合
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void updateAccountCode(Integer id,List<String> accountList) {
+        CostIncomeGroupSet incomeGroupSet = this.getById(id);
+        if (Objects.isNull(incomeGroupSet)){
+            throw new CostException(500,"收入归集设置不存在");
+        }
+        if(CollUtil.isNotEmpty(accountList)){
+            String accountCodes = accountList.stream().map(String::valueOf).collect(Collectors.joining(StrUtil.COMMA));
+            incomeGroupSet.setAccountCode(accountCodes);
+        }else{
+            incomeGroupSet.setAccountCode(null);
+        }
+        baseMapper.updateById(incomeGroupSet);
+    }
+
+}

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

@@ -40,7 +40,7 @@ public class CostResponsibilityDepartmentServiceImpl extends ServiceImpl<CostRes
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         // 当前医院责任中心所具有的的科室
         List<CostResponsibilityDepartment> costResponsibilityDepartmentList = baseMapper.selectList(new QueryWrapper<CostResponsibilityDepartment>().lambda().eq(CostResponsibilityDepartment::getResponsibilityId, responsibilityId));
-        Map<Integer, List<CostResponsibilityDepartment>> costResponsibilityDepartmentMap = costResponsibilityDepartmentList.stream().distinct().collect(Collectors.groupingBy(CostResponsibilityDepartment::getDepartmentId));
+        Map<Long, List<CostResponsibilityDepartment>> costResponsibilityDepartmentMap = costResponsibilityDepartmentList.stream().distinct().collect(Collectors.groupingBy(CostResponsibilityDepartment::getDepartmentId));
         // 所有科室
         List<Department> departmentList = departmentService.getByDepartment(null,null,null,user.getHospId());
         List<CostDepartmentVO> departVOList = BeanUtil.convertList(departmentList, CostDepartmentVO.class);

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

@@ -76,7 +76,7 @@ public class CostShareLevelServiceImpl extends ServiceImpl<CostShareLevelMapper,
     public void updateByCostShareLevel(CostShareLevelEditDto costShareLevelEditDto) {
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         Long hospId = user.getHospId();
-        Integer id = costShareLevelEditDto.getId();
+        Long id = costShareLevelEditDto.getId();
         CostShareLevel costShareLevel = baseMapper.selectById(id);
         if (Objects.isNull(costShareLevel)){
             throw new CostException("分摊层级数据不存在");

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

@@ -120,7 +120,7 @@ public class CostShareParamServiceImpl extends ServiceImpl<CostShareParamMapper,
     @Override
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
     public CostShareParam updateCostShareParamByAccountId(CostShareParamAccountDto costShareParamAccountDto) {
-        Integer costShareParamId = costShareParamAccountDto.getCostShareParamId();
+        Long costShareParamId = costShareParamAccountDto.getCostShareParamId();
         CostShareParam costShareParam = baseMapper.selectById(costShareParamId);
         //  判断当前操作的分层参数的计算方式是不是按科目计算
         if (NumberConstant.TWO.equals(costShareParam.getCalcType())){

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

@@ -93,7 +93,7 @@ public class HospitalServiceImpl extends ServiceImpl<HospitalMapper, Hospital> i
                 throw new CostException(500, "当前医院标识已存在,请重新生成");
             }
         } else {
-            Integer parentId = hospitalSaveDto.getParentId();
+            Long parentId = hospitalSaveDto.getParentId();
             // 校验参数
             if (parentId == 0) {
                 throw new CostException(500, "新增院区请选择医院");

+ 126 - 0
src/main/java/com/imed/costaccount/service/impl/MenuServiceImpl.java

@@ -0,0 +1,126 @@
+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.common.constants.Constant;
+import com.imed.costaccount.common.exception.CostException;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.mapper.MenuMapper;
+import com.imed.costaccount.model.Menu;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.MenuSaveDTO;
+import com.imed.costaccount.model.vo.MenuVO;
+import com.imed.costaccount.service.MenuService;
+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.List;
+import java.util.stream.Collectors;
+
+
+@Service("menuService")
+public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
+
+
+    /**
+     * 保存菜单
+     *
+     * @param menuSaveDTO {@link MenuSaveDTO}
+     * @param user        {@linkplain User}
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public void saveMenu(MenuSaveDTO menuSaveDTO, User user) {
+        // 校验
+        this.check(menuSaveDTO);
+
+        Menu menu = BeanUtil.convertObj(menuSaveDTO, Menu.class);
+        menu.setHospId(user.getHospId())
+                .setModifyTime(System.currentTimeMillis())
+                .setModifyUserId(user.getId());
+
+        this.save(menu);
+    }
+
+
+    /**
+     * 分页查询菜单列表
+     *
+     * @param page     页码
+     * @param pageSize 每页数据大小
+     * @param user     当前登录用户
+     * @return 菜单伪列表
+     */
+    @Override
+    public PageUtils selectList(Integer page, Integer pageSize, User user) {
+        List<Menu> list = this.list(
+                new LambdaQueryWrapper<Menu>().eq(Menu::getHospId, user.getHospId()).orderByAsc(Menu::getOrderNum)
+        );
+        List<MenuVO> menuVOS = BeanUtil.convertList(list, MenuVO.class);
+        List<MenuVO> roots = menuVOS.stream().filter(i -> i.getParentId() == 0).collect(Collectors.toList());
+        List<MenuVO> treeVOs = new ArrayList<>();
+        for (MenuVO i : roots) {
+            List<MenuVO> menus = this.getMenuTree(i, menuVOS);
+            treeVOs.addAll(menus);
+
+        }
+        return new PageUtils(list,0,0,0);
+    }
+
+    /**
+     * 递归遍历
+     * @param menuVO
+     * @param menuVOS
+     * @return
+     */
+    private List<MenuVO> getMenuTree(MenuVO menuVO, List<MenuVO> menuVOS) {
+        List<MenuVO> list = new ArrayList<>();
+        list.add(menuVO);
+        List<MenuVO> children = menuVO.getChildren();
+        if (CollUtil.isEmpty(children)) {
+            children = new ArrayList<>();
+        }
+        for (MenuVO j : menuVOS) {
+            if (j.getParentId().equals(menuVO.getMenuId())) {
+                children.add(j);
+            }
+            menuVO.setChildren(children);
+            this.getMenuTree(j, menuVOS);
+        }
+        return list;
+    }
+
+    /**
+     * 校验相关 菜单格式
+     * @param menuSaveDTO
+     */
+    private void check(MenuSaveDTO menuSaveDTO) {
+        //上级菜单类型
+        int parentType = Constant.MenuType.CATALOG.getValue();
+        if (menuSaveDTO.getParentId() != 0) {
+            Menu parentMenu = this.getById(menuSaveDTO.getParentId());
+            parentType = parentMenu.getType();
+        }
+
+        // 如果当前是 目录、菜单
+        if (menuSaveDTO.getType() == Constant.MenuType.CATALOG.getValue() ||
+                menuSaveDTO.getType() == Constant.MenuType.MENU.getValue()) {
+            if (parentType != Constant.MenuType.CATALOG.getValue()) {
+                throw new CostException("上级菜单只能为目录类型");
+            }
+            return;
+        }
+
+        // 如果当前是按钮
+        if (menuSaveDTO.getType() == Constant.MenuType.BUTTON.getValue()) {
+            if (parentType != Constant.MenuType.MENU.getValue()) {
+                throw new CostException("上级菜单只能为菜单类型");
+            }
+            return;
+        }
+    }
+}

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

@@ -430,7 +430,7 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
         // 设置责任中心的计算方式
         costResponsibilityLevelVOS.forEach(i -> {
             i.setResponsibilityId(i.getId());
-            Integer shareId = i.getShareId();
+            Long shareId = i.getShareId();
             List<CostShareLevelVO> costShareLevelVOList = listMap.get(shareId);
             if (!CollectionUtils.isEmpty(costShareLevelVOList)) {
                 i.setCalcType(costShareLevelVOList.get(0).getCalcType());
@@ -438,4 +438,43 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
         });
         return costResponsibilityLevelVOS;
     }
+
+    /**
+     * 责任中心在收入归集设置里面显示的列表
+     *
+     * @param user
+     * @return
+     */
+    @Override
+    public List<CostResponsibilityVO> responsibilityList(User user) {
+        // 1. 获取所有的列表然后组装
+        List<Responsibility> list = this.list(
+                new LambdaQueryWrapper<Responsibility>()
+                        .eq(Responsibility::getHospId, user.getHospId())
+                        .orderByDesc(Responsibility::getCreateTime)
+        );
+        if (CollUtil.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        // 拷贝组合
+        List<CostResponsibilityVO> costResponsibilityVOS = BeanUtil.convertList(list, CostResponsibilityVO.class);
+        List<CostResponsibilityVO> parentCostResponsibility = costResponsibilityVOS.stream()
+                .filter(i -> i.getResponsibilityLevel().equals(1)).collect(Collectors.toList());
+
+        parentCostResponsibility.forEach(i -> costResponsibilityVOS.forEach(j -> {
+            if (j.getParentId().equals(i.getId())) {
+                if (i.getResponsibilityLevel() == 1) {
+                    i.setShareLevel(null);
+                }
+                List<CostResponsibilityVO> child = i.getChild();
+                if (CollUtil.isEmpty(child)) {
+                    child = new ArrayList<>();
+                }
+                j.setResponsibilityName(i.getResponsibilityName()+"/"+j.getResponsibilityName());
+                child.add(j);
+                i.setChild(child);
+            }
+        }));
+        return parentCostResponsibility;
+    }
 }

+ 14 - 0
src/main/java/com/imed/costaccount/service/impl/RoleMenuServiceImpl.java

@@ -0,0 +1,14 @@
+package com.imed.costaccount.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.mapper.RoleMenuMapper;
+import com.imed.costaccount.model.RoleMenu;
+import com.imed.costaccount.service.RoleMenuService;
+import org.springframework.stereotype.Service;
+
+
+@Service("roleMenuService")
+public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements RoleMenuService {
+
+
+}

+ 107 - 0
src/main/java/com/imed/costaccount/service/impl/RoleServiceImpl.java

@@ -0,0 +1,107 @@
+package com.imed.costaccount.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.common.exception.CostException;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.mapper.RoleMapper;
+import com.imed.costaccount.model.Role;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.RoleEditDTO;
+import com.imed.costaccount.model.dto.RoleSaveDTO;
+import com.imed.costaccount.model.vo.RoleVO;
+import com.imed.costaccount.service.RoleService;
+import com.imed.costaccount.service.UserService;
+import com.imed.costaccount.utils.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service("roleService")
+public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {
+
+
+    private final UserService userService;
+
+    public RoleServiceImpl(UserService userService) {
+        this.userService = userService;
+    }
+
+    /**
+     * 保存角色
+     *
+     * @param roleSaveDTO {@link RoleSaveDTO}
+     * @param user
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void saveRole(RoleSaveDTO roleSaveDTO, User user) {
+        Role role = BeanUtil.convertObj(roleSaveDTO, Role.class);
+        role.setCreateUserId(user.getId())
+                .setHospId(user.getHospId())
+                .setCreateTime(System.currentTimeMillis());
+        this.save(role);
+    }
+
+    /**
+     * 查询角色列表并分页
+     *
+     * @param page     页码
+     * @param pageSize 每页展示数据条数
+     * @param keyword  模糊匹配关键字
+     * @param user     当前登录用户
+     * @return {@link PageUtils} 分页对象
+     */
+    @Override
+    public PageUtils selectList(Integer page, Integer pageSize, String keyword, User user) {
+        Page<Role> rolePage = new Page<>(page, pageSize);
+        Page<Role> pages = this.page(rolePage,
+                new LambdaQueryWrapper<Role>().eq(Role::getHospId, user.getHospId())
+                        .and( StrUtil.isNotBlank(keyword), i -> i.eq( Role::getRoleName, keyword)
+                                .or()
+                                .eq(Role::getRemark, keyword))
+
+        );
+        List<Role> records = pages.getRecords();
+        List<RoleVO> list = records.stream().map(i -> {
+            RoleVO roleVO = BeanUtil.convertObj(i, RoleVO.class);
+            roleVO.setModifyUserName(userService.getUsernameByIdAndHospId(i.getCreateUserId(), user.getHospId()));
+            roleVO.setModifyTime(DateUtil.formatDateTime(DateUtil.date(i.getCreateTime())));
+            // todo 相关user 菜单等绑定信息
+            return roleVO;
+        }).collect(Collectors.toList());
+
+        return new PageUtils(list, (int) pages.getTotal(),pageSize,page);
+    }
+
+
+    /**
+     * 编辑某个角色
+     *
+     * @param roleEditDTO {@link RoleEditDTO}
+     * @param userId 当前登录人id
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void updateRole(RoleEditDTO roleEditDTO, Long userId) {
+        Role byId = this.getById(roleEditDTO.getRoleId());
+        if (Objects.isNull(byId)) {
+            throw new CostException(500, "选择的角色已被移除");
+        }
+        BeanUtil.convertObj(roleEditDTO, byId);
+        byId.setCreateTime(System.currentTimeMillis());
+        byId.setCreateUserId(userId);
+
+        log.info("byId:{}",byId);
+        this.updateById(byId);
+    }
+}

+ 14 - 0
src/main/java/com/imed/costaccount/service/impl/UserRoleServiceImpl.java

@@ -0,0 +1,14 @@
+package com.imed.costaccount.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.mapper.UserRoleMapper;
+import com.imed.costaccount.model.UserRole;
+import com.imed.costaccount.service.UserRoleService;
+import org.springframework.stereotype.Service;
+
+
+@Service("userRoleService")
+public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements UserRoleService {
+
+
+}

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

@@ -278,4 +278,26 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     public void logout(User user) {
         redisUtil.del(user.getId() + "");
     }
+
+    /**
+     * 通过用户id和医院id获取用户的名称,
+     *
+     * @param createUserId id
+     * @param hospId       医院id
+     * @return 如果不存在,返回"" (使用redis 缓存避免过多的查询)
+     */
+    @Override
+    public String getUsernameByIdAndHospId(Long createUserId, Long hospId) {
+        User one = this.getOne(
+                new LambdaQueryWrapper<User>()
+                        .select(User::getName)
+                        .eq(User::getId, createUserId)
+                        .eq(User::getHospId, hospId)
+                        .last("limit 1")
+        );
+        if (Objects.isNull(one)) {
+            return "";
+        }
+        return one.getName();
+    }
 }

+ 2 - 2
src/main/java/com/imed/costaccount/web/AccountingController.java

@@ -37,9 +37,9 @@ public class AccountingController extends AbstractController{
     @ApiOperation("获取会计科目列表按收入支出类型")
     @GetMapping("/list")
     @ApiImplicitParam(name = "accountType",value = "会计科目类型1.收入,2.支出")
-    public Result list(@RequestParam Integer accountType,Integer shareParamId){
+    public Result list(@RequestParam Integer accountType,Integer shareParamId,Integer incomeGroutSetId){
         User user = (User) SecurityUtils.getSubject().getPrincipal();
-        List<AccountVO> list = accountingService.getListByAccountType(accountType, user,shareParamId);
+        List<AccountVO> list = accountingService.getListByAccountType(accountType, user,shareParamId,incomeGroutSetId);
         PageUtils pageUtils = new PageUtils(list, 0, 0, 0);
         return Result.ok(pageUtils);
     }

+ 104 - 0
src/main/java/com/imed/costaccount/web/CostIncomeGroupSetController.java

@@ -0,0 +1,104 @@
+package com.imed.costaccount.web;
+
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.common.util.UserContext;
+import com.imed.costaccount.model.dto.CostIncomeGroupSetEditDto;
+import com.imed.costaccount.model.dto.CostIncomeGroupSetSaveDto;
+import com.imed.costaccount.model.vo.CostIncomeGroupSetVO;
+import com.imed.costaccount.service.CostIncomeGroupSetService;
+import com.imed.costaccount.service.impl.AccountingServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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;
+
+
+/**
+ * 收入归集设置
+ *
+ * @author KCYG
+ * @date 2021-08-03 08:41:20
+ */
+@RestController
+@RequestMapping("/costAccount/costincomegroupset")
+@Api(tags = "收入归集设置操作")
+public class CostIncomeGroupSetController{
+    @Autowired
+    private CostIncomeGroupSetService costIncomeGroupSetService;
+
+    @Autowired
+    private AccountingServiceImpl accountingService;
+
+    /**
+     * 分页查询列表
+     */
+    @GetMapping("/list")
+    @ApiOperation("分页获取收入归集设置数据数据")
+    public Result list(@RequestParam(defaultValue = "1", value = "current") Integer current,
+                       @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize){
+        Long hospId = UserContext.getHospId();
+        PageUtils pageUtils = costIncomeGroupSetService.queryList(current,pageSize,hospId);
+        return Result.ok(pageUtils);
+    }
+
+
+    /**
+     * 根据Id获取收入归集设置数据
+     */
+    @GetMapping("/info/{id}")
+    @ApiOperation("根据Id获取收入归集设置数据")
+    public Result info(@PathVariable("id") Long id){
+        Long hospId = UserContext.getHospId();
+        CostIncomeGroupSetVO costIncomeGroupSetVO = costIncomeGroupSetService.getByIncomeGroupId(id,hospId);
+        return Result.ok(costIncomeGroupSetVO);
+    }
+
+    /**
+     * 保存
+     */
+    @PostMapping("/addCostIncomeGroupSet")
+    @ApiOperation("添加收入归集设置数据")
+    public Result save(@RequestBody @Valid CostIncomeGroupSetSaveDto costIncomeGroupSetSaveDto){
+        Long hospId = UserContext.getHospId();
+        costIncomeGroupSetService.addCostIncomeGroupSet(costIncomeGroupSetSaveDto,hospId);
+        return Result.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @PostMapping("/update")
+    @ApiOperation("修改收入归集设置数据")
+    public Result update(@RequestBody @Valid CostIncomeGroupSetEditDto costIncomeGroupSetEditDto){
+        Long hospId = UserContext.getHospId();
+        costIncomeGroupSetService.updateByIncomeGroup(costIncomeGroupSetEditDto,hospId);
+        return Result.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @PostMapping("/delete")
+    @ApiOperation("分删除收入归集设置数据")
+    public Result delete(@RequestBody Long[] ids){
+		costIncomeGroupSetService.removeByIds(Arrays.asList(ids));
+        return Result.ok();
+    }
+
+    /**
+     *  添加排除成本科目
+     */
+    @PostMapping("/addIncomeAccount")
+    @ApiOperation("添加需要排除的成本科目")
+    public Result addIncomeAccount(Integer id,String[] accountCode){
+        List<String> accountList = Arrays.asList(accountCode);
+        costIncomeGroupSetService.updateAccountCode(id,accountList);
+        return Result.ok();
+    }
+
+}

+ 69 - 0
src/main/java/com/imed/costaccount/web/MenuController.java

@@ -0,0 +1,69 @@
+package com.imed.costaccount.web;
+
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.model.Menu;
+import com.imed.costaccount.model.dto.MenuSaveDTO;
+import com.imed.costaccount.service.MenuService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Arrays;
+
+
+/**
+ * 菜单管理
+ *
+ * @author huangrui
+ * @date 2021-08-03 08:56:22
+ */
+@Api(tags = "菜单管理")
+@RestController
+@RequestMapping("/costAccount/menu/")
+public class MenuController extends AbstractController {
+
+    private final MenuService menuService;
+
+    public MenuController(MenuService menuService) {
+        this.menuService = menuService;
+    }
+
+
+    @ApiOperation("保存菜单")
+    @PostMapping("/save")
+    public Result save(@RequestBody @Valid MenuSaveDTO menuSaveDTO) {
+        menuService.saveMenu(menuSaveDTO, getUser());
+        return Result.ok();
+    }
+
+    /**
+     * 分页查询列表
+     */
+    @ApiOperation("菜单列表")
+    @GetMapping("/list")
+    public Result list(@RequestParam(defaultValue = "1", value = "current") Integer page,
+                       @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
+        PageUtils pageUtils = menuService.selectList(page, pageSize, getUser());
+        return Result.ok();
+    }
+
+    @ApiOperation("编辑某个菜单")
+    @PostMapping("/edit")
+    public Result update(@RequestBody @Valid Menu menu) {
+        menuService.updateById(menu);
+        return Result.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    public Result delete(@RequestBody Long[] menuIds) {
+        menuService.removeByIds(Arrays.asList(menuIds));
+        return Result.ok();
+    }
+
+}

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

@@ -36,7 +36,15 @@ public class ResponsibilityController {
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         List<CostResponsibilityVO> list = responsibilityService.getList(user);
         PageUtils pageUtils = new PageUtils(list,0,0,0);
+        return Result.ok(pageUtils);
+    }
 
+    @ApiOperation("收入归集设置需要的责任中心列表")
+    @GetMapping("/responsibilityList")
+    public Result responsibilityList() {
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        List<CostResponsibilityVO> list = responsibilityService.responsibilityList(user);
+        PageUtils pageUtils = new PageUtils(list,0,0,0);
         return Result.ok(pageUtils);
     }
 

+ 61 - 0
src/main/java/com/imed/costaccount/web/RoleController.java

@@ -0,0 +1,61 @@
+package com.imed.costaccount.web;
+
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.model.Role;
+import com.imed.costaccount.model.dto.RoleEditDTO;
+import com.imed.costaccount.model.dto.RoleSaveDTO;
+import com.imed.costaccount.service.RoleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Arrays;
+
+
+@Api(tags="角色管理相关")
+@RestController
+@RequestMapping("/costAccount/role/")
+public class RoleController extends AbstractController{
+
+    private final RoleService roleService;
+
+    public RoleController(RoleService roleService) {
+        this.roleService = roleService;
+    }
+
+
+    @ApiOperation("新增一个角色")
+    @PostMapping("/save")
+    public Result save(@RequestBody @Valid RoleSaveDTO roleSaveDTO){
+        roleService.saveRole(roleSaveDTO,getUser());
+        return Result.ok();
+    }
+
+
+    @ApiOperation("查询角色列表")
+    @GetMapping("/list")
+    public Result list(@RequestParam(defaultValue = "1", value = "current") Integer page,
+                       @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
+                       @RequestParam(value = "keyword",required = false) String keyword){
+        PageUtils pageUtils = roleService.selectList(page, pageSize, keyword, getUser());
+        return Result.ok(pageUtils);
+    }
+
+    @ApiOperation("编辑某个角色")
+    @PostMapping("/edit")
+    public Result update(@RequestBody @Valid RoleEditDTO roleEditDTO){
+		roleService.updateRole(roleEditDTO,getUserId());
+        return Result.ok();
+    }
+
+    @ApiOperation("删除")
+    @PostMapping("/delete")
+    public Result delete(@RequestBody Long[] roleIds){
+		roleService.removeByIds(Arrays.asList(roleIds));
+        return Result.ok();
+    }
+
+}

+ 21 - 0
src/main/resources/mapper/CostIncomeGroupSetMapper.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.CostIncomeGroupSetMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.CostIncomeGroupSet" id="costIncomeGroupSetMap">
+        <result property="id" column="id"/>
+        <result property="openDepartmentStatus" column="open_department_status"/>
+        <result property="openDepartmentProportion" column="open_department_proportion"/>
+        <result property="startDepartmentStatus" column="start_department_status"/>
+        <result property="startDepartmentProportion" column="start_department_proportion"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="responsibilityCode" column="responsibility_code"/>
+        <result property="accountCode" column="account_code"/>
+        <result property="createTime" column="create_time"/>
+        <result property="deleteTime" column="delete_time"/>
+    </resultMap>
+
+
+</mapper>

+ 23 - 0
src/main/resources/mapper/MenuMapper.xml

@@ -0,0 +1,23 @@
+<?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.MenuMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.Menu" id="menuMap">
+        <result property="menuId" column="menu_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="name" column="name"/>
+        <result property="path" column="path"/>
+        <result property="url" column="url"/>
+        <result property="perms" column="perms"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="type" column="type"/>
+        <result property="icon" column="icon"/>
+        <result property="orderNum" column="order_num"/>
+        <result property="modifyUserId" column="modify_user_id"/>
+        <result property="modifyTime" column="modify_time"/>
+    </resultMap>
+
+
+</mapper>

+ 17 - 0
src/main/resources/mapper/RoleMapper.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.RoleMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.Role" id="roleMap">
+        <result property="roleId" column="role_id"/>
+        <result property="roleName" column="role_name"/>
+        <result property="remark" column="remark"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="createUserId" column="create_user_id"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+
+</mapper>

+ 15 - 0
src/main/resources/mapper/RoleMenuMapper.xml

@@ -0,0 +1,15 @@
+<?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.RoleMenuMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.RoleMenu" id="roleMenuMap">
+        <result property="id" column="id"/>
+        <result property="roleId" column="role_id"/>
+        <result property="menuId" column="menu_id"/>
+        <result property="hospId" column="hosp_id"/>
+    </resultMap>
+
+
+</mapper>

+ 15 - 0
src/main/resources/mapper/UserRoleMapper.xml

@@ -0,0 +1,15 @@
+<?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.UserRoleMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.UserRole" id="userRoleMap">
+        <result property="id" column="id"/>
+        <result property="userId" column="user_id"/>
+        <result property="roleId" column="role_id"/>
+        <result property="hospId" column="hosp_id"/>
+    </resultMap>
+
+
+</mapper>