Преглед изворни кода

08 03 01 add role , menu , report some code

hr пре 4 година
родитељ
комит
f5e3190119
34 измењених фајлова са 1246 додато и 48 уклоњено
  1. 16 0
      src/main/java/com/imed/costaccount/mapper/ReportFormMapper.java
  2. 36 0
      src/main/java/com/imed/costaccount/mapper/ReportRelationMapper.java
  3. 12 1
      src/main/java/com/imed/costaccount/mapper/RoleMenuMapper.java
  4. 6 1
      src/main/java/com/imed/costaccount/mapper/UserRoleMapper.java
  5. 82 0
      src/main/java/com/imed/costaccount/model/ReportForm.java
  6. 61 0
      src/main/java/com/imed/costaccount/model/ReportRelation.java
  7. 36 0
      src/main/java/com/imed/costaccount/model/dto/MenuEditDTO.java
  8. 11 0
      src/main/java/com/imed/costaccount/model/dto/ReportFormSaveDTO.java
  9. 22 0
      src/main/java/com/imed/costaccount/model/dto/RoleMenuDTO.java
  10. 19 0
      src/main/java/com/imed/costaccount/model/dto/RoleUserDTO.java
  11. 31 0
      src/main/java/com/imed/costaccount/model/vo/CommonSelectVO.java
  12. 4 0
      src/main/java/com/imed/costaccount/model/vo/CommonVO.java
  13. 19 0
      src/main/java/com/imed/costaccount/model/vo/RelationVO.java
  14. 43 0
      src/main/java/com/imed/costaccount/model/vo/ReportFormVO.java
  15. 0 3
      src/main/java/com/imed/costaccount/model/vo/RoleVO.java
  16. 8 0
      src/main/java/com/imed/costaccount/service/MenuService.java
  17. 28 0
      src/main/java/com/imed/costaccount/service/ReportFormService.java
  18. 36 0
      src/main/java/com/imed/costaccount/service/ReportRelationService.java
  19. 29 0
      src/main/java/com/imed/costaccount/service/RoleMenuService.java
  20. 33 1
      src/main/java/com/imed/costaccount/service/UserRoleService.java
  21. 61 21
      src/main/java/com/imed/costaccount/service/impl/MenuServiceImpl.java
  22. 97 0
      src/main/java/com/imed/costaccount/service/impl/ReportFormServiceImpl.java
  23. 41 0
      src/main/java/com/imed/costaccount/service/impl/ReportRelationServiceImpl.java
  24. 117 0
      src/main/java/com/imed/costaccount/service/impl/RoleMenuServiceImpl.java
  25. 5 3
      src/main/java/com/imed/costaccount/service/impl/RoleServiceImpl.java
  26. 88 0
      src/main/java/com/imed/costaccount/service/impl/UserRoleServiceImpl.java
  27. 6 4
      src/main/java/com/imed/costaccount/web/MenuController.java
  28. 74 0
      src/main/java/com/imed/costaccount/web/ReportFormController.java
  29. 79 0
      src/main/java/com/imed/costaccount/web/ReportRelationController.java
  30. 64 12
      src/main/java/com/imed/costaccount/web/RoleController.java
  31. 23 0
      src/main/resources/mapper/ReportFormMapper.xml
  32. 40 0
      src/main/resources/mapper/ReportRelationMapper.xml
  33. 9 1
      src/main/resources/mapper/RoleMenuMapper.xml
  34. 10 1
      src/main/resources/mapper/UserRoleMapper.xml

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.ReportForm;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 报表项目
+ * 
+ * @author huangrui
+ * @date 2021-08-03 13:53:52
+ */
+@Mapper
+public interface ReportFormMapper extends BaseMapper<ReportForm> {
+	
+}

+ 36 - 0
src/main/java/com/imed/costaccount/mapper/ReportRelationMapper.java

@@ -0,0 +1,36 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.ReportRelation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.imed.costaccount.model.vo.RelationVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 报表对应项目设置关系
+ * 
+ * @author huangrui
+ * @date 2021-08-03 13:53:52
+ */
+@Mapper
+public interface ReportRelationMapper extends BaseMapper<ReportRelation> {
+
+    /**
+     * 报表项目关联的会计科目对象
+     *
+     * @param reportId 报表项目id
+     * @param hospId   医院id
+     * @return {@link RelationVO}
+     */
+    List<RelationVO> getAccountRelation(@Param("reportId") Long reportId, @Param("hospId") Long hospId);
+
+    /**
+     * 报表项目关联的分摊参数对象
+     * @param reportId 报表项目id
+     * @param hospId 医院id
+     * @return {@link RelationVO}
+     */
+    List<RelationVO> getShareParam(@Param("reportId") Long reportId, @Param("hospId") Long hospId);
+}

+ 12 - 1
src/main/java/com/imed/costaccount/mapper/RoleMenuMapper.java

@@ -2,7 +2,11 @@ package com.imed.costaccount.mapper;
 
 import com.imed.costaccount.model.RoleMenu;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.imed.costaccount.model.vo.CommonVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 角色与菜单对应关系
@@ -12,5 +16,12 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
-	
+
+    /**
+     * 通过roleid和hospId 获取role关联的menu信息
+     * @param roleId 角色id
+     * @param hospId 医院id
+     * @return id name
+     */
+    List<CommonVO> getUsersByRoleId(@Param("roleId") Long roleId, @Param("hospId") Long hospId);
 }

+ 6 - 1
src/main/java/com/imed/costaccount/mapper/UserRoleMapper.java

@@ -2,7 +2,11 @@ package com.imed.costaccount.mapper;
 
 import com.imed.costaccount.model.UserRole;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.imed.costaccount.model.vo.CommonVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 用户与角色对应关系
@@ -12,5 +16,6 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface UserRoleMapper extends BaseMapper<UserRole> {
-	
+
+    List<CommonVO> getUsersByRoleId(@Param("roleId") Long roleId, @Param("hospId") Long hospId);
 }

+ 82 - 0
src/main/java/com/imed/costaccount/model/ReportForm.java

@@ -0,0 +1,82 @@
+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-08-03 13:53:52
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_report_form")
+public class ReportForm implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Long id;
+	/**
+	 * 报表项目编号(最大值不能超过127)一个医院中必须唯一
+	 */
+	private Integer num;
+	/**
+	 * 报表名称
+	 */
+	private String reportName;
+	/**
+	 * 父级id
+	 */
+	private Long parentId;
+	/**
+	 * 计算类型 0.不设置,1.对应会计科目,2.对应分摊层级,3.小计,4.计算公式
+	 */
+	private Integer calcType;
+	/**
+	 * 报表类型:0.损益表、1.完全成本法表、2.变动成本表、3.全院损益表、4.全成本报表
+
+	 */
+	private Integer reportType;
+	/**
+	 * 计算公式,当计算类型为计算公式的时候必传
+	 */
+	private String calcFormula;
+	/**
+	 * 排序字段
+	 */
+	private Integer sort;
+	/**
+	 * 比率基数,默认100%,后续再进行修改
+	 */
+	private String ratioBase;
+	/**
+	 * 医院id
+	 */
+	private Long hospId;
+	/**
+	 * 创建时间
+	 */
+	private Long createTime;
+	/**
+	 * 删除时间
+	 */
+	@TableLogic(value = "0",delval = "UNIX_TIMESTAMP(NOW()) * 1000")
+	private Long deleteTime;
+
+}

+ 61 - 0
src/main/java/com/imed/costaccount/model/ReportRelation.java

@@ -0,0 +1,61 @@
+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-08-03 13:53:52
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_report_relation")
+public class ReportRelation implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Long id;
+	/**
+	 * 报表项目id
+	 */
+	private Long reportId;
+	/**
+	 * 对应关系的唯一code码
+	 */
+	private Long relationCode;
+	/**
+	 * 医院id
+	 */
+	private Long hospId;
+	/**
+	 * 1.会计科目,2.成本分摊参数
+	 */
+	private Integer relation;
+	/**
+	 * 创建时间
+	 */
+	private Long createTime;
+	/**
+	 * 删除时间
+	 */
+	@TableLogic(value = "0",delval = "UNIX_TIMESTAMP(NOW()) * 1000")
+	private Long deleteTime;
+
+}

+ 36 - 0
src/main/java/com/imed/costaccount/model/dto/MenuEditDTO.java

@@ -0,0 +1,36 @@
+package com.imed.costaccount.model.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class MenuEditDTO {
+
+    @NotNull(message = "id不能为空")
+    private Long id;
+
+    @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;
+
+
+}

+ 11 - 0
src/main/java/com/imed/costaccount/model/dto/ReportFormSaveDTO.java

@@ -0,0 +1,11 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class ReportFormSaveDTO {
+
+
+}

+ 22 - 0
src/main/java/com/imed/costaccount/model/dto/RoleMenuDTO.java

@@ -0,0 +1,22 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@ApiModel("角色菜单绑定关系")
+public class RoleMenuDTO {
+
+    @NotNull(message = "角色id不能为空")
+    @ApiModelProperty(name = "roleId",value = "角色id")
+    private Long roleId;
+
+    private List<Long> menuIds;
+
+
+
+}

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

@@ -0,0 +1,19 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@ApiModel("角色绑定A用户关系")
+public class RoleUserDTO {
+
+    @NotNull(message = "角色id不能为空")
+    @ApiModelProperty(name = "roleId",value = "角色id")
+    private Long roleId;
+
+    private List<Long> userIds;
+}

+ 31 - 0
src/main/java/com/imed/costaccount/model/vo/CommonSelectVO.java

@@ -0,0 +1,31 @@
+package com.imed.costaccount.model.vo;
+
+import cn.hutool.core.lang.Assert;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@ApiModel("通用是否选择视图对象")
+public class CommonSelectVO extends CommonVO {
+
+    @ApiModelProperty(name = "isSelect",value = "是否选中,true选中")
+    private Boolean isSelect;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private List<CommonSelectVO> children;
+
+    @JsonIgnore
+    private Long parentId;
+
+    public CommonSelectVO(CommonVO commonVO,Boolean isSelect) {
+        Assert.notNull(commonVO,"父类不能为空");
+        this.isSelect = isSelect;
+    }
+}

+ 4 - 0
src/main/java/com/imed/costaccount/model/vo/CommonVO.java

@@ -1,6 +1,8 @@
 package com.imed.costaccount.model.vo;
 
+import lombok.AllArgsConstructor;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 /**
@@ -8,6 +10,8 @@ import lombok.Setter;
  */
 @Getter
 @Setter
+@AllArgsConstructor
+@NoArgsConstructor
 public class CommonVO {
 
     private Long id;

+ 19 - 0
src/main/java/com/imed/costaccount/model/vo/RelationVO.java

@@ -0,0 +1,19 @@
+package com.imed.costaccount.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("成本项目关联视图对象")
+public class RelationVO {
+
+    @ApiModelProperty(name = "code",value = "关联关系的code")
+    private String code;
+
+    @ApiModelProperty(name = "name",value = "关联关系名称")
+    private String name;
+
+    @ApiModelProperty(name = "relation",value = "关联关系:1.关系为会计科目,2.关系为分摊参数")
+    private Integer relation;
+}

+ 43 - 0
src/main/java/com/imed/costaccount/model/vo/ReportFormVO.java

@@ -0,0 +1,43 @@
+package com.imed.costaccount.model.vo;
+
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("报表项目视图对象")
+public class ReportFormVO {
+
+    private Long id;
+
+    private Integer num;
+
+    private String reportName;
+
+    private Long parentId;
+
+    private Integer calcType;
+
+    private Integer reportType;
+
+    private String calcFormula;
+
+    private Integer sort;
+
+    private String ratioBase;
+
+    private Long hospId;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private Integer showAddRelation;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private List<ReportFormVO> children;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private List<RelationVO> reportRelations;
+
+}

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

@@ -21,7 +21,4 @@ public class RoleVO {
 
     private String remark;
 
-    private List<CommonVO> users;
-
-    private List<CommonVO> menus;
 }

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

@@ -3,6 +3,7 @@ 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.MenuEditDTO;
 import com.imed.costaccount.model.dto.MenuSaveDTO;
 import com.imed.costaccount.model.Menu;
 
@@ -32,5 +33,12 @@ public interface MenuService extends IService<Menu> {
      * @return 菜单分页列表
      */
     PageUtils selectList(Integer page, Integer pageSize, User user);
+
+    /**
+     * 编辑某个菜单
+     * @param menuDTO
+     * @param user
+     */
+    void updateMenu(MenuEditDTO menuDTO, User user);
 }
 

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

@@ -0,0 +1,28 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.vo.ReportFormVO;
+import com.imed.costaccount.model.ReportForm;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 报表项目
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-08-03 13:53:52
+ */
+public interface ReportFormService extends IService<ReportForm> {
+
+    /**
+     * 报表项目列表(必定只有两层)
+     * @param reportType
+     * @param user
+     * @return
+     */
+    List<ReportFormVO> selectList(Integer reportType, User user);
+}
+

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

@@ -0,0 +1,36 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.model.vo.RelationVO;
+import com.imed.costaccount.model.ReportRelation;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 报表对应项目设置关系
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-08-03 13:53:52
+ */
+public interface ReportRelationService extends IService<ReportRelation> {
+
+    /**
+     * 报表项目关联的会计科目对象
+     * @param reportId 报表项目id
+     * @param hospId 医院id
+     * @return {@link RelationVO}
+     */
+    List<RelationVO> getAccountRelation(Long reportId, Long hospId);
+
+    /**
+     * 报表项目关联的分摊参数对象
+     * @param reportId 报表项目id
+     * @param hospId 医院id
+     * @return {@link RelationVO}
+     */
+    List<RelationVO> getShareParam(Long reportId, Long hospId);
+
+}
+

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

@@ -1,8 +1,14 @@
 package com.imed.costaccount.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.model.dto.RoleMenuDTO;
+import com.imed.costaccount.model.vo.CommonSelectVO;
+import com.imed.costaccount.model.vo.CommonVO;
 import com.imed.costaccount.model.RoleMenu;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 角色与菜单对应关系
  *
@@ -12,5 +18,28 @@ import com.imed.costaccount.model.RoleMenu;
  */
 public interface RoleMenuService extends IService<RoleMenu> {
 
+    /**
+     * 通过roleId 获取对应的菜单列表
+     * @param roleId
+     * @param hospId
+     * @return
+     */
+    List<CommonVO> getMenuByRoleId(Long roleId, Long hospId);
+
+
+    /**
+     * 绑定角色和菜单关系时选择列表可回显
+     * @param roleId 角色id
+     * @return CommonSelectVO
+     */
+    List<CommonSelectVO> roleMenuList(Long roleId, Long hospId);
+
+    /**
+     * 编辑角色和菜单关系
+     *
+     * @param roleMenuDTO {@link RoleMenuDTO}
+     * @param hospId      医院id
+     */
+    void saveRoleMenu(RoleMenuDTO roleMenuDTO, Long hospId);
 }
 

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

@@ -1,16 +1,48 @@
 package com.imed.costaccount.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.model.dto.RoleMenuDTO;
+import com.imed.costaccount.model.dto.RoleUserDTO;
+import com.imed.costaccount.model.vo.CommonVO;
 import com.imed.costaccount.model.UserRole;
 
+import java.util.List;
+
 /**
  * 用户与角色对应关系
  *
  * @author huangrui
- * @email 
+ * @email
  * @date 2021-08-03 08:56:22
  */
 public interface UserRoleService extends IService<UserRole> {
 
+    /**
+     * 通过roleId获取对应的关联人员
+     *
+     * @param roleId 角色id
+     * @param hospId 医院id
+     * @return {"id":1,"username":"tom"}
+     */
+    List<CommonVO> getUsersByRoleId(Long roleId, Long hospId);
+
+    /**
+     * 绑定角色和人员关系时选择列表(可回显)
+     * @param roleId 角色id
+     * @param hospId 医院id
+     * @param page
+     * @param pageSize
+     * @return {"id":1,"username":"tom","isSelect": true}
+     */
+    PageUtils roleUserList(Long roleId, Long hospId, Integer page, Integer pageSize);
+
+    /**
+     * 编辑角色和人员关系
+     * @param roleUserDTO {@link RoleUserDTO}
+     * @param hospId 医院id
+     */
+    void saveRoleUser(RoleUserDTO roleUserDTO, Long hospId);
+
 }
 

+ 61 - 21
src/main/java/com/imed/costaccount/service/impl/MenuServiceImpl.java

@@ -1,6 +1,7 @@
 package com.imed.costaccount.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.constants.Constant;
@@ -9,22 +10,31 @@ 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.MenuEditDTO;
 import com.imed.costaccount.model.dto.MenuSaveDTO;
 import com.imed.costaccount.model.vo.MenuVO;
 import com.imed.costaccount.service.MenuService;
+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.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
-
+@Slf4j
 @Service("menuService")
 public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
 
+    private final UserService userService;
+
+    public MenuServiceImpl(UserService userService) {
+        this.userService = userService;
+    }
 
     /**
      * 保存菜单
@@ -36,7 +46,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void saveMenu(MenuSaveDTO menuSaveDTO, User user) {
         // 校验
-        this.check(menuSaveDTO);
+        this.check(menuSaveDTO.getType(), menuSaveDTO.getParentId());
 
         Menu menu = BeanUtil.convertObj(menuSaveDTO, Menu.class);
         menu.setHospId(user.getHospId())
@@ -60,7 +70,14 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
         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> menuVOS = list.stream().map(i -> {
+            MenuVO menuVO = BeanUtil.convertObj(i, MenuVO.class);
+            menuVO.setModifyTime(DateUtil.formatDateTime(DateUtil.date(i.getModifyTime())));
+            menuVO.setModifyUserName(userService.getUsernameByIdAndHospId(user.getId(), user.getHospId()));
+            return menuVO;
+        }).collect(Collectors.toList());
+
         List<MenuVO> roots = menuVOS.stream().filter(i -> i.getParentId() == 0).collect(Collectors.toList());
         List<MenuVO> treeVOs = new ArrayList<>();
         for (MenuVO i : roots) {
@@ -68,11 +85,32 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
             treeVOs.addAll(menus);
 
         }
-        return new PageUtils(list,0,0,0);
+        return new PageUtils(treeVOs, 0, 0, 0);
+    }
+
+    /**
+     * 编辑某个菜单
+     *
+     * @param menuDTO {@link MenuEditDTO}
+     * @param user    {@link User}
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public void updateMenu(MenuEditDTO menuDTO, User user) {
+        this.check(menuDTO.getType(), menuDTO.getParentId());
+
+        Menu byId = this.getById(menuDTO.getId());
+        if (Objects.isNull(byId)) {
+            throw new CostException(500, "选择的菜单已被移除");
+        }
+        BeanUtil.convertObj(menuDTO, byId);
+        log.info("byId:{}", byId);
+        this.updateById(byId);
     }
 
     /**
      * 递归遍历
+     *
      * @param menuVO
      * @param menuVOS
      * @return
@@ -80,35 +118,38 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
     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);
+        for (MenuVO vo : menuVOS) {
+            if (vo.getParentId().equals(menuVO.getMenuId())) {
+                List<MenuVO> children = menuVO.getChildren();
+                if (CollUtil.isEmpty(children)) {
+                    children = new ArrayList<>();
+                }
+                children.add(vo);
+                menuVO.setChildren(children);
+                this.getMenuTree(vo, menuVOS);
             }
-            menuVO.setChildren(children);
-            this.getMenuTree(j, menuVOS);
         }
+
         return list;
     }
 
     /**
      * 校验相关 菜单格式
-     * @param menuSaveDTO
+     *
+     * @param parentId 父级id
+     * @param type     菜单类型
      */
-    private void check(MenuSaveDTO menuSaveDTO) {
+    private void check(Integer type, Long parentId) {
         //上级菜单类型
         int parentType = Constant.MenuType.CATALOG.getValue();
-        if (menuSaveDTO.getParentId() != 0) {
-            Menu parentMenu = this.getById(menuSaveDTO.getParentId());
+        if (parentId != 0L) {
+            Menu parentMenu = this.getById(parentId);
             parentType = parentMenu.getType();
         }
 
         // 如果当前是 目录、菜单
-        if (menuSaveDTO.getType() == Constant.MenuType.CATALOG.getValue() ||
-                menuSaveDTO.getType() == Constant.MenuType.MENU.getValue()) {
+        if (type == Constant.MenuType.CATALOG.getValue() ||
+                type == Constant.MenuType.MENU.getValue()) {
             if (parentType != Constant.MenuType.CATALOG.getValue()) {
                 throw new CostException("上级菜单只能为目录类型");
             }
@@ -116,11 +157,10 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
         }
 
         // 如果当前是按钮
-        if (menuSaveDTO.getType() == Constant.MenuType.BUTTON.getValue()) {
+        if (type == Constant.MenuType.BUTTON.getValue()) {
             if (parentType != Constant.MenuType.MENU.getValue()) {
                 throw new CostException("上级菜单只能为菜单类型");
             }
-            return;
         }
     }
 }

+ 97 - 0
src/main/java/com/imed/costaccount/service/impl/ReportFormServiceImpl.java

@@ -0,0 +1,97 @@
+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.ReportFormMapper;
+import com.imed.costaccount.model.ReportForm;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.vo.RelationVO;
+import com.imed.costaccount.model.vo.ReportFormVO;
+import com.imed.costaccount.service.ReportFormService;
+import com.imed.costaccount.service.ReportRelationService;
+import com.imed.costaccount.utils.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service("reportFormService")
+public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportForm> implements ReportFormService {
+
+    private final ReportRelationService reportRelationService;
+
+    public ReportFormServiceImpl(ReportRelationService reportRelationService) {
+        this.reportRelationService = reportRelationService;
+    }
+
+    /**
+     * 报表项目列表(必定只有两层)
+     *
+     * @param reportType 报表类型
+     * @param user       当前登录用户
+     * @return {@link ReportFormVO}
+     */
+    @Override
+    public List<ReportFormVO> selectList(Integer reportType, User user) {
+        List<ReportForm> list = this.list(
+                new LambdaQueryWrapper<ReportForm>().eq(ReportForm::getReportType, reportType).eq(ReportForm::getHospId, user.getHospId())
+        );
+        if (CollUtil.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        List<ReportFormVO> reportFormVOS = list.stream().map(i -> {
+            ReportFormVO reportFormVO = BeanUtil.convertObj(i, ReportFormVO.class);
+            if (i.getCalcType() == 1) {
+                reportFormVO.setShowAddRelation(1);
+            } else if (i.getCalcType() == 2) {
+                reportFormVO.setShowAddRelation(2);
+            }
+            return reportFormVO;
+        }).collect(Collectors.toList());
+
+        List<ReportFormVO> roots = reportFormVOS.stream().filter(i -> i.getParentId() == 0L).collect(Collectors.toList());
+        for (ReportFormVO root : roots) {
+            List<ReportFormVO> children = root.getChildren();
+            if (CollUtil.isEmpty(children)) {
+                children = new ArrayList<>();
+            }
+            for (ReportFormVO reportFormVO : reportFormVOS) {
+                if (reportFormVO.getParentId().equals(root.getId())) {
+                    children.add(reportFormVO);
+                    this.setRelation(reportFormVO,user.getHospId());
+                }
+            }
+            root.setChildren(children);
+        }
+        return roots;
+    }
+
+    /**
+     * 填充对应的关联关系
+     * @param reportFormVO {@link ReportFormVO}
+     * @param hospId
+     */
+    private void setRelation(ReportFormVO reportFormVO, Long hospId) {
+        Integer showAddRelation = reportFormVO.getShowAddRelation();
+        if (Objects.isNull(showAddRelation)) {
+            return;
+        }
+        if (showAddRelation == 1) {
+            List<RelationVO> list = reportRelationService.getAccountRelation(reportFormVO.getId(), hospId);
+            reportFormVO.setReportRelations(list);
+            return;
+        } else if (showAddRelation == 2) {
+            List<RelationVO> list = reportRelationService.getShareParam(reportFormVO.getId(), hospId);
+            reportFormVO.setReportRelations(list);
+            return;
+        }
+
+    }
+}

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

@@ -0,0 +1,41 @@
+package com.imed.costaccount.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.mapper.ReportRelationMapper;
+import com.imed.costaccount.model.ReportRelation;
+import com.imed.costaccount.model.vo.RelationVO;
+import com.imed.costaccount.service.ReportRelationService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+@Slf4j
+@Service("reportRelationService")
+public class ReportRelationServiceImpl extends ServiceImpl<ReportRelationMapper, ReportRelation> implements ReportRelationService {
+
+    /**
+     * 报表项目关联的会计科目对象
+     *
+     * @param reportId 报表项目id
+     * @param hospId   医院id
+     * @return {@link RelationVO}
+     */
+    @Override
+    public List<RelationVO> getAccountRelation(Long reportId, Long hospId) {
+        return baseMapper.getAccountRelation(reportId, hospId);
+    }
+
+    /**
+     * 报表项目关联的分摊参数对象
+     *
+     * @param reportId 报表项目id
+     * @param hospId   医院id
+     * @return {@link RelationVO}
+     */
+    @Override
+    public List<RelationVO> getShareParam(Long reportId, Long hospId) {
+        return baseMapper.getShareParam(reportId, hospId);
+    }
+}

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

@@ -1,14 +1,131 @@
 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.RoleMenuMapper;
+import com.imed.costaccount.model.Menu;
 import com.imed.costaccount.model.RoleMenu;
+import com.imed.costaccount.model.UserRole;
+import com.imed.costaccount.model.dto.RoleMenuDTO;
+import com.imed.costaccount.model.vo.CommonSelectVO;
+import com.imed.costaccount.model.vo.CommonVO;
+import com.imed.costaccount.model.vo.MenuVO;
+import com.imed.costaccount.service.MenuService;
 import com.imed.costaccount.service.RoleMenuService;
+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.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
 
 
 @Service("roleMenuService")
 public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements RoleMenuService {
 
+    private final MenuService menuService;
+
+    public RoleMenuServiceImpl(MenuService menuService) {
+        this.menuService = menuService;
+    }
+
+    /**
+     * 通过roleId 获取对应的菜单列表
+     *
+     * @param roleId
+     * @param hospId
+     * @return
+     */
+    @Override
+    public List<CommonVO> getMenuByRoleId(Long roleId, Long hospId) {
+        return baseMapper.getUsersByRoleId(roleId, hospId);
+    }
+
+
+    /**
+     * 绑定角色和菜单关系时选择列表可回显
+     *
+     * @param roleId 角色id
+     * @param hospId
+     * @return CommonSelectVO
+     */
+    @Override
+    public List<CommonSelectVO> roleMenuList(Long roleId, Long hospId) {
+        List<Menu> list = menuService.list(
+                new LambdaQueryWrapper<Menu>().eq(Menu::getHospId, hospId)
+        );
+        if (CollUtil.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        List<CommonSelectVO> all = list.stream().map(i -> {
+            CommonSelectVO commonSelectVO = new CommonSelectVO();
+            commonSelectVO.setIsSelect(false);
+            commonSelectVO.setParentId(i.getParentId());
+            commonSelectVO.setId(i.getMenuId());
+            commonSelectVO.setName(i.getName());
+            return commonSelectVO;
+        }).collect(Collectors.toList());
+
+        List<RoleMenu> roleMenus = this.list(
+                new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId)
+        );
+        for (CommonSelectVO commonSelectVO : all) {
+            for (RoleMenu roleMenu : roleMenus) {
+                if (roleMenu.getMenuId().equals(commonSelectVO.getId())) {
+                    commonSelectVO.setIsSelect(true);
+                }
+            }
+        }
+        List<CommonSelectVO> roots = all.stream().filter(i -> i.getParentId() == 0).collect(Collectors.toList());
+        List<CommonSelectVO> vos = new ArrayList<>();
+        for (CommonSelectVO root : roots) {
+            vos.addAll(this.getMenuVO(root, all));
+        }
+        return vos;
+    }
+
+    private List<CommonSelectVO> getMenuVO(CommonSelectVO root, List<CommonSelectVO> all) {
+        List<CommonSelectVO> list = new ArrayList<>();
+        list.add(root);
+        for (CommonSelectVO j : all) {
+            if (j.getParentId().equals(root.getId())) {
+                List<CommonSelectVO> children = root.getChildren();
+                if (CollUtil.isEmpty(children)) {
+                    children = new ArrayList<>();
+                }
+                children.add(j);
+                root.setChildren(children);
+                this.getMenuVO(j, all);
+            }
+        }
+
+        return list;
+    }
 
+    /**
+     * 编辑角色和菜单关系
+     *
+     * @param roleMenuDTO {@link RoleMenuDTO}
+     * @param hospId      医院id
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
+    public void saveRoleMenu(RoleMenuDTO roleMenuDTO, Long hospId) {
+        Long roleId = roleMenuDTO.getRoleId();
+        this.removeById(roleId);
+        List<Long> menuIds = roleMenuDTO.getMenuIds();
+        if (CollUtil.isNotEmpty(menuIds)) {
+            List<RoleMenu> roleMenus = menuIds.stream().map(i -> {
+                RoleMenu roleMenu = new RoleMenu();
+                roleMenu.setRoleId(roleId).setMenuId(i).setHospId(hospId);
+                return roleMenu;
+            }).collect(Collectors.toList());
+            this.saveBatch(roleMenus);
+        }
+    }
 }

+ 5 - 3
src/main/java/com/imed/costaccount/service/impl/RoleServiceImpl.java

@@ -12,9 +12,9 @@ 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.CommonVO;
 import com.imed.costaccount.model.vo.RoleVO;
-import com.imed.costaccount.service.RoleService;
-import com.imed.costaccount.service.UserService;
+import com.imed.costaccount.service.*;
 import com.imed.costaccount.utils.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -32,6 +32,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements Ro
 
     private final UserService userService;
 
+
     public RoleServiceImpl(UserService userService) {
         this.userService = userService;
     }
@@ -76,7 +77,8 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements Ro
             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 菜单等绑定信息
+//            List<CommonVO> users = userRoleService.getUsersByRoleId(i.getRoleId(), user.getHospId());
+//            roleVO.setUsers(users);
             return roleVO;
         }).collect(Collectors.toList());
 

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

@@ -1,14 +1,102 @@
 package com.imed.costaccount.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.mapper.UserRoleMapper;
 import com.imed.costaccount.model.UserRole;
+import com.imed.costaccount.model.dto.RoleMenuDTO;
+import com.imed.costaccount.model.dto.RoleUserDTO;
+import com.imed.costaccount.model.vo.CommonSelectVO;
+import com.imed.costaccount.model.vo.CommonVO;
+import com.imed.costaccount.model.vo.UserVO;
 import com.imed.costaccount.service.UserRoleService;
+import com.imed.costaccount.service.UserService;
 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("userRoleService")
 public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements UserRoleService {
 
+    private final UserService userService;
+
+    public UserRoleServiceImpl(UserService userService) {
+        this.userService = userService;
+    }
+
+    /**
+     * 通过roleId获取对应的关联人员
+     *
+     * @param roleId 角色id
+     * @param hospId 医院id
+     * @return {"id":1,"username":"tom"}
+     */
+    @Override
+    public List<CommonVO> getUsersByRoleId(Long roleId, Long hospId) {
+        return baseMapper.getUsersByRoleId(roleId, hospId);
+    }
+
+    /**
+     * 绑定角色和人员关系时选择列表(可回显)
+     *
+     * @param roleId 角色id
+     * @param hospId 医院id
+     * @param page
+     * @param pageSize
+     * @return {"id":1,"username":"tom","isSelect": true}
+     */
+    @Override
+    public PageUtils roleUserList(Long roleId, Long hospId, Integer page, Integer pageSize) {
+        // 得到这个角色下所有人员
+        List<CommonVO> users = this.getUsersByRoleId(roleId, hospId);
+        if (CollUtil.isEmpty(users)) {
+            return new PageUtils(Collections.emptyList(), 0, 0, 0);
+        }
+
+        PageUtils userPages = userService.queryList(page, pageSize, hospId, null);
+        List<UserVO> list = (List<UserVO>) userPages.getList();
+        List<Long> userIds = list.stream().map(UserVO::getId).collect(Collectors.toList());
+
+        List<CommonSelectVO> commonSelectVOS = new ArrayList<>();
+        for (Long userId : userIds) {
+            for (CommonVO user : users) {
+                CommonSelectVO commonSelectVO = new CommonSelectVO(user, false);
+                if (userId.equals(user.getId())) {
+                    commonSelectVO.setIsSelect(true);
+                }
+                commonSelectVOS.add(commonSelectVO);
+            }
+        }
+        return new PageUtils(commonSelectVOS, userPages.getTotalCount(), pageSize, page);
+    }
+
+    /**
+     * 编辑角色和人员关系
+     *
+     * @param roleUserDTO {@link RoleUserDTO}
+     * @param hospId      医院id
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Throwable.class)
+    public void saveRoleUser(RoleUserDTO roleUserDTO, Long hospId) {
+        Long roleId = roleUserDTO.getRoleId();
+        this.removeById(roleId);
+        List<Long> userIds = roleUserDTO.getUserIds();
+        if (CollUtil.isNotEmpty(userIds)) {
+            List<UserRole> userRoles = userIds.stream().map(i -> {
+                UserRole userRole = new UserRole();
+                userRole.setRoleId(roleId).setUserId(i).setHospId(hospId);
+                return userRole;
+            }).collect(Collectors.toList());
+            this.saveBatch(userRoles);
+        }
+    }
 
 }

+ 6 - 4
src/main/java/com/imed/costaccount/web/MenuController.java

@@ -3,6 +3,7 @@ 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.MenuEditDTO;
 import com.imed.costaccount.model.dto.MenuSaveDTO;
 import com.imed.costaccount.service.MenuService;
 import io.swagger.annotations.Api;
@@ -47,20 +48,21 @@ public class MenuController extends AbstractController {
     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();
+        return Result.ok(pageUtils);
     }
 
     @ApiOperation("编辑某个菜单")
     @PostMapping("/edit")
-    public Result update(@RequestBody @Valid Menu menu) {
-        menuService.updateById(menu);
+    public Result update(@RequestBody @Valid MenuEditDTO menuDTO) {
+        menuService.updateMenu(menuDTO,getUser());
         return Result.ok();
     }
 
     /**
      * 删除
      */
-    @RequestMapping("/delete")
+    @ApiOperation("删除某个菜单")
+    @PostMapping("/delete")
     public Result delete(@RequestBody Long[] menuIds) {
         menuService.removeByIds(Arrays.asList(menuIds));
         return Result.ok();

+ 74 - 0
src/main/java/com/imed/costaccount/web/ReportFormController.java

@@ -0,0 +1,74 @@
+package com.imed.costaccount.web;
+
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.model.ReportForm;
+import com.imed.costaccount.model.dto.ReportFormSaveDTO;
+import com.imed.costaccount.model.vo.ReportFormVO;
+import com.imed.costaccount.service.ReportFormService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * 报表项目
+ *
+ * @author huangrui
+ * @date 2021-08-03 13:53:52
+ */
+@Api(tags="报表项目")
+@RestController
+@RequestMapping("/costAccount/reportForm/")
+public class ReportFormController extends AbstractController{
+
+    private final ReportFormService reportFormService;
+
+    public ReportFormController(ReportFormService reportFormService) {
+        this.reportFormService = reportFormService;
+    }
+
+    /**
+     * 按报表类型查询报表项目
+     */
+    @ApiOperation("按报表类型查询报表项目列表")
+    @GetMapping("/list")
+    public Result list(@RequestParam Integer reportType) {
+        List<ReportFormVO> list = reportFormService.selectList(reportType, getUser());
+        PageUtils pageUtils = new PageUtils(list, 0, 0, 0);
+        return Result.ok(pageUtils);
+    }
+
+    /**
+     * 保存
+     */
+    @ApiOperation("保存报表项目")
+    @PostMapping("/save")
+    public Result save(@RequestBody @Valid ReportFormSaveDTO reportFormDTO){
+//		reportFormService.save(reportForm);
+        return Result.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    public Result update(@RequestBody ReportForm reportForm){
+		reportFormService.updateById(reportForm);
+        return Result.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    public Result delete(@RequestBody Long[] ids){
+		reportFormService.removeByIds(Arrays.asList(ids));
+        return Result.ok();
+    }
+
+}

+ 79 - 0
src/main/java/com/imed/costaccount/web/ReportRelationController.java

@@ -0,0 +1,79 @@
+package com.imed.costaccount.web;
+
+import java.util.Arrays;
+import java.util.Map;
+
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.model.User;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.imed.costaccount.model.ReportRelation;
+import com.imed.costaccount.service.ReportRelationService;
+
+
+/**
+ * 报表对应项目设置关系
+ *
+ * @author huangrui
+ * @date 2021-08-03 13:53:52
+ */
+@RestController
+@RequestMapping("/reportrelation")
+public class ReportRelationController {
+    @Autowired
+    private ReportRelationService reportRelationService;
+
+    /**
+     * 分页查询列表
+     */
+    @RequestMapping("/list")
+    public Result list(@RequestParam(defaultValue = "1", value = "page") Integer page,
+                       @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        return Result.ok();
+    }
+
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    public Result info(@PathVariable("id") Long id){
+		ReportRelation reportRelation = reportRelationService.getById(id);
+        return Result.ok(reportRelation);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    public Result save(@RequestBody ReportRelation reportRelation){
+		reportRelationService.save(reportRelation);
+        return Result.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    public Result update(@RequestBody ReportRelation reportRelation){
+		reportRelationService.updateById(reportRelation);
+        return Result.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    public Result delete(@RequestBody Long[] ids){
+		reportRelationService.removeByIds(Arrays.asList(ids));
+        return Result.ok();
+    }
+
+}

+ 64 - 12
src/main/java/com/imed/costaccount/web/RoleController.java

@@ -2,35 +2,44 @@ 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.RoleMenuDTO;
 import com.imed.costaccount.model.dto.RoleSaveDTO;
+import com.imed.costaccount.model.dto.RoleUserDTO;
+import com.imed.costaccount.model.vo.CommonSelectVO;
+import com.imed.costaccount.model.vo.CommonVO;
+import com.imed.costaccount.service.RoleMenuService;
 import com.imed.costaccount.service.RoleService;
+import com.imed.costaccount.service.UserRoleService;
 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;
 
 
-@Api(tags="角色管理相关")
+@Api(tags = "角色管理相关")
 @RestController
 @RequestMapping("/costAccount/role/")
-public class RoleController extends AbstractController{
+public class RoleController extends AbstractController {
 
     private final RoleService roleService;
+    private final RoleMenuService roleMenuService;
+    private final UserRoleService userRoleService;
 
-    public RoleController(RoleService roleService) {
+    public RoleController(RoleService roleService, RoleMenuService roleMenuService, UserRoleService userRoleService) {
         this.roleService = roleService;
+        this.roleMenuService = roleMenuService;
+        this.userRoleService = userRoleService;
     }
 
 
     @ApiOperation("新增一个角色")
     @PostMapping("/save")
-    public Result save(@RequestBody @Valid RoleSaveDTO roleSaveDTO){
-        roleService.saveRole(roleSaveDTO,getUser());
+    public Result save(@RequestBody @Valid RoleSaveDTO roleSaveDTO) {
+        roleService.saveRole(roleSaveDTO, getUser());
         return Result.ok();
     }
 
@@ -39,23 +48,66 @@ public class RoleController extends AbstractController{
     @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){
+                       @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());
+    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));
+    public Result delete(@RequestBody Long[] roleIds) {
+        roleService.removeByIds(Arrays.asList(roleIds));
         return Result.ok();
     }
 
+    @ApiOperation("角色对应的人员列表")
+    @GetMapping("/roleUsers")
+    public Result roleUsers(@RequestParam Long roleId) {
+        List<CommonVO> roleUsers = userRoleService.getUsersByRoleId(roleId, getHospId());
+        return Result.ok(roleUsers);
+    }
+
+    @ApiOperation("角色对应的菜单列表")
+    @GetMapping("/roleMenus")
+    public Result roleMenus(@RequestParam Long roleId) {
+        List<CommonVO> roleUsers = roleMenuService.getMenuByRoleId(roleId, getUser().getHospId());
+        return Result.ok(roleUsers);
+    }
+
+    @ApiOperation("绑定角色和人员关系时选择列表(可回显)")
+    @GetMapping("/roleUserList")
+    public Result roleUserList(@RequestParam Long roleId,
+                               @RequestParam(defaultValue = "1", value = "current") Integer page,
+                               @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
+        PageUtils list = userRoleService.roleUserList(roleId, getUser().getHospId(),page,pageSize);
+        return Result.ok(list);
+    }
+
+    @ApiOperation("编辑角色和人员关系")
+    @PostMapping("/saveRoleUser")
+    public Result saveRoleUser(@RequestBody @Valid RoleUserDTO roleUserDTO) {
+        userRoleService.saveRoleUser(roleUserDTO, getUser().getHospId());
+        return Result.ok();
+    }
+
+    @ApiOperation("绑定角色和菜单关系时选择列表可回显")
+    @GetMapping("/roleMenuList")
+    public Result roleMenuList(@RequestParam Long roleId) {
+        List<CommonSelectVO> list = roleMenuService.roleMenuList(roleId, getUser().getHospId());
+        return Result.ok(list);
+    }
+
+    @ApiOperation("编辑角色和菜单关系")
+    @PostMapping("/saveRoleMenu")
+    public Result saveRoleMenu(@RequestBody @Valid RoleMenuDTO roleMenuDTO) {
+        roleMenuService.saveRoleMenu(roleMenuDTO, getUser().getHospId());
+        return Result.ok();
+    }
 }

+ 23 - 0
src/main/resources/mapper/ReportFormMapper.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.ReportFormMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.ReportForm" id="reportFormMap">
+        <result property="id" column="id"/>
+        <result property="num" column="num"/>
+        <result property="reportName" column="report_name"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="calcType" column="calc_type"/>
+        <result property="reportType" column="report_type"/>
+        <result property="calcFormula" column="calc_formula"/>
+        <result property="sort" column="sort"/>
+        <result property="ratioBase" column="ratio_base"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="deleteTime" column="delete_time"/>
+    </resultMap>
+
+
+</mapper>

+ 40 - 0
src/main/resources/mapper/ReportRelationMapper.xml

@@ -0,0 +1,40 @@
+<?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.ReportRelationMapper">
+
+    <!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.ReportRelation" id="reportRelationMap">
+        <result property="id" column="id"/>
+        <result property="reportId" column="report_id"/>
+        <result property="relationCode" column="relation_code"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="relation" column="relation"/>
+        <result property="createTime" column="create_time"/>
+        <result property="deleteTime" column="delete_time"/>
+    </resultMap>
+    <select id="getAccountRelation" resultType="com.imed.costaccount.model.vo.RelationVO">
+        select ca.accounting_code as code, ca.accounting_name as name, 1 as relation
+        from cost_report_relation crr
+                 left join cost_accounting ca on crr.relation_code = ca.accounting_code
+        where crr.delete_time = 0
+          and ca.delete_time = 0
+          and crr.hosp_id = #{hospId}
+          and ca.hosp_id = #{hospId}
+          and crr.report_id = #{reportId}
+    </select>
+
+    <select id="getShareParam" resultType="com.imed.costaccount.model.vo.RelationVO">
+        select chp.share_param_code as code, chp.share_param_name as name, 2 as relation
+        from cost_report_relation crr
+                 left join cost_share_param chp on crr.relation_code = chp.share_param_code
+        where crr.delete_time = 0
+          and chp.delete_time = 0
+          and crr.hosp_id = #{hospId}
+          and chp.hosp_id = #{hospId}
+          and crr.report_id = #{reportId}
+
+    </select>
+
+
+</mapper>

+ 9 - 1
src/main/resources/mapper/RoleMenuMapper.xml

@@ -3,13 +3,21 @@
 
 <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>
+    <select id="getUsersByRoleId" resultType="com.imed.costaccount.model.vo.CommonVO">
+        select sm.menu_id as id, sm.name as name
+        from sys_role_menu srm left join sys_menu sm
+        on sm.menu_id = srm.menu_id
+        where srm.role_id = #{roleId}
+          and srm.hosp_id = #{hospId}
+          and sm.hosp_id = #{hospId}
+    </select>
 
 
 </mapper>

+ 10 - 1
src/main/resources/mapper/UserRoleMapper.xml

@@ -3,13 +3,22 @@
 
 <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>
+    <select id="getUsersByRoleId" resultType="com.imed.costaccount.model.vo.CommonVO">
+        select su.id as id, su.name as name
+        from sys_user_role sur left join sys_user su
+        on su.id = sur.user_id
+        where su.delete_time = 0
+          and sur.role_id = #{roleId}
+          and sur.hosp_id = #{hospId}
+          and su.hosp_id = #{hospId}
+    </select>
 
 
 </mapper>