Browse Source

08 03 01 fix some code

hr 4 years ago
parent
commit
207408a631
20 changed files with 538 additions and 90 deletions
  1. 2 0
      src/main/java/com/imed/costaccount/constants/CommonConstant.java
  2. 1 1
      src/main/java/com/imed/costaccount/mapper/RoleMenuMapper.java
  3. 1 1
      src/main/java/com/imed/costaccount/model/ReportForm.java
  4. 1 1
      src/main/java/com/imed/costaccount/model/ReportRelation.java
  5. 42 0
      src/main/java/com/imed/costaccount/model/dto/ReportFormEditDTO.java
  6. 26 1
      src/main/java/com/imed/costaccount/model/dto/ReportFormSaveDTO.java
  7. 26 0
      src/main/java/com/imed/costaccount/model/dto/ReportRelationDTO.java
  8. 5 0
      src/main/java/com/imed/costaccount/model/vo/RelationVO.java
  9. 16 0
      src/main/java/com/imed/costaccount/service/ReportFormService.java
  10. 17 1
      src/main/java/com/imed/costaccount/service/ReportRelationService.java
  11. 1 1
      src/main/java/com/imed/costaccount/service/RoleMenuService.java
  12. 1 4
      src/main/java/com/imed/costaccount/service/UserRoleService.java
  13. 15 2
      src/main/java/com/imed/costaccount/service/impl/AccountingProductServiceImpl.java
  14. 136 3
      src/main/java/com/imed/costaccount/service/impl/ReportFormServiceImpl.java
  15. 148 0
      src/main/java/com/imed/costaccount/service/impl/ReportRelationServiceImpl.java
  16. 34 33
      src/main/java/com/imed/costaccount/service/impl/RoleMenuServiceImpl.java
  17. 2 24
      src/main/java/com/imed/costaccount/service/impl/UserRoleServiceImpl.java
  18. 60 12
      src/main/java/com/imed/costaccount/web/ReportFormController.java
  19. 3 5
      src/main/java/com/imed/costaccount/web/RoleController.java
  20. 1 1
      src/main/resources/mapper/RoleMenuMapper.xml

+ 2 - 0
src/main/java/com/imed/costaccount/constants/CommonConstant.java

@@ -123,6 +123,8 @@ public final class CommonConstant {
      */
     public static final String MULTIPLICATION_SIGN = "×";
 
+    public static final String LIMIT_ONE = "limit 1";
+
 
     /**
      * 分隔符 - 加号

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

@@ -23,5 +23,5 @@ public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
      * @param hospId 医院id
      * @return id name
      */
-    List<CommonVO> getUsersByRoleId(@Param("roleId") Long roleId, @Param("hospId") Long hospId);
+    List<CommonVO> getMenuByRoleId(@Param("roleId") Long roleId, @Param("hospId") Long hospId);
 }

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

@@ -33,7 +33,7 @@ public class ReportForm implements Serializable {
 	@TableId
 	private Long id;
 	/**
-	 * 报表项目编号(最大值不能超过127)一个医院中必须唯一
+	 * 报表项目编号一个医院中必须唯一
 	 */
 	private Integer num;
 	/**

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

@@ -39,7 +39,7 @@ public class ReportRelation implements Serializable {
 	/**
 	 * 对应关系的唯一code码
 	 */
-	private Long relationCode;
+	private String relationCode;
 	/**
 	 * 医院id
 	 */

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

@@ -0,0 +1,42 @@
+package com.imed.costaccount.model.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel("编辑报表项目入参")
+public class ReportFormEditDTO {
+
+    @ApiModelProperty(name = "parentId",value = "当前报表项目id")
+    @NotNull(message = "报表项目id不能为空")
+    private Long id;
+
+    @ApiModelProperty(name = "parentId",value = "父级id,顶层传0")
+//    @NotNull(message = "父级id不为空")
+    private Long parentId;
+
+    @ApiModelProperty(name = "reportName",value = "报表名称")
+    @NotBlank(message = "报表名称不为空")
+    private String reportName;
+
+    @ApiModelProperty(name = "sort",value = "排序字段")
+    @NotNull(message = "排序字段不为空")
+    private Integer sort;
+
+    @ApiModelProperty(name = "reportType",value = "报表类型")
+    @NotNull(message = "报表类型不为空")
+    private Integer reportType;
+
+    @ApiModelProperty(name = "calcType",value = "计算类型")
+    @NotNull(message = "计算类型不为空")
+    private Integer calcType;
+
+    @ApiModelProperty(name = "calcFormula",value = "计算公式")
+    private String calcFormula;
+
+}

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

@@ -1,11 +1,36 @@
 package com.imed.costaccount.model.dto;
 
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 @Data
-@ApiModel
+@ApiModel("报表项目新增")
 public class ReportFormSaveDTO {
 
+    @ApiModelProperty(name = "parentId",value = "父级id,顶层传0")
+    @NotNull(message = "父级id不为空")
+    private Long parentId;
+
+    @ApiModelProperty(name = "reportName",value = "报表名称")
+    @NotBlank(message = "报表名称不为空")
+    private String reportName;
+
+    @ApiModelProperty(name = "sort",value = "排序字段")
+    @NotNull(message = "排序字段不为空")
+    private Integer sort;
+
+    @ApiModelProperty(name = "reportType",value = "报表类型")
+    @NotNull(message = "报表类型不为空")
+    private Integer reportType;
+
+    @ApiModelProperty(name = "calcType",value = "计算类型")
+    @NotNull(message = "计算类型不为空")
+    private Integer calcType;
 
+    @ApiModelProperty(name = "calcFormula",value = "计算公式")
+    private String calcFormula;
 }

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

@@ -0,0 +1,26 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@ApiModel("报表关系编辑对象")
+public class ReportRelationDTO {
+
+    @ApiModelProperty(name = "reportId",value = "报表id")
+    @NotNull(message = "报表id不为空")
+    private Long reportId;
+
+    @ApiModelProperty(name = "relation",value = "1.对应会计科目设置,2.对应分摊参数设置")
+    @NotNull(message = "报表项目关联关系不能为空")
+    @Range(min = 1,max = 2)
+    private Integer relation;
+
+    private List<String> relationCodes;
+
+}

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

@@ -1,5 +1,7 @@
 package com.imed.costaccount.model.vo;
 
+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;
@@ -16,4 +18,7 @@ public class RelationVO {
 
     @ApiModelProperty(name = "relation",value = "关联关系:1.关系为会计科目,2.关系为分摊参数")
     private Integer relation;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private Boolean isSelect;
 }

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

@@ -2,6 +2,8 @@ package com.imed.costaccount.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.ReportFormEditDTO;
+import com.imed.costaccount.model.dto.ReportFormSaveDTO;
 import com.imed.costaccount.model.vo.ReportFormVO;
 import com.imed.costaccount.model.ReportForm;
 
@@ -24,5 +26,19 @@ public interface ReportFormService extends IService<ReportForm> {
      * @return
      */
     List<ReportFormVO> selectList(Integer reportType, User user);
+
+    /**
+     * 新增一个报表项目
+     * @param reportFormDTO {@link ReportFormSaveDTO}
+     * @param hospId 医院id
+     */
+    void saveReport(ReportFormSaveDTO reportFormDTO, Long hospId);
+
+    /**
+     * 更新某个报表项目
+     * @param formEditDTO
+     */
+    void updateReport(ReportFormEditDTO formEditDTO);
+
 }
 

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

@@ -1,11 +1,11 @@
 package com.imed.costaccount.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.model.dto.ReportRelationDTO;
 import com.imed.costaccount.model.vo.RelationVO;
 import com.imed.costaccount.model.ReportRelation;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 报表对应项目设置关系
@@ -32,5 +32,21 @@ public interface ReportRelationService extends IService<ReportRelation> {
      */
     List<RelationVO> getShareParam(Long reportId, Long hospId);
 
+    /**
+     * 根据关系类型,获取可绑定的关系数据(包含回显)
+     * @param reportId  报表项目id
+     * @param relation 1.对应会计科目设置,2.对应分摊参数设置,根据列表中showAddRelation字段是否存在判断
+     * @param hospId 医院id
+     * @return 返回所有列表 并便是已选择的元素
+     */
+    List<RelationVO> getRelationList(Long reportId, Integer relation, Long hospId);
+
+    /**
+     * 编辑相关关系
+     * @param reportRelationDTO
+     * @param hospId
+     */
+    void saveReportRelation(ReportRelationDTO reportRelationDTO, Long hospId);
+
 }
 

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

@@ -32,7 +32,7 @@ public interface RoleMenuService extends IService<RoleMenu> {
      * @param roleId 角色id
      * @return CommonSelectVO
      */
-    List<CommonSelectVO> roleMenuList(Long roleId, Long hospId);
+    List<CommonVO> roleMenuList(Long roleId, Long hospId);
 
     /**
      * 编辑角色和菜单关系

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

@@ -2,7 +2,6 @@ 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;
@@ -31,11 +30,9 @@ public interface UserRoleService extends IService<UserRole> {
      * 绑定角色和人员关系时选择列表(可回显)
      * @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);
+    List roleUserList(Long roleId, Long hospId);
 
     /**
      * 编辑角色和人员关系

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

@@ -1,8 +1,10 @@
 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.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.mapper.AccountingMapper;
 import com.imed.costaccount.mapper.AccountingProductMapper;
 import com.imed.costaccount.mapper.ProductMapper;
@@ -48,7 +50,7 @@ public class AccountingProductServiceImpl extends ServiceImpl<AccountingProductM
         List<Accounting> list = accountingMapper.selectList(
                 new LambdaQueryWrapper<Accounting>()
                         .eq(Accounting::getHospId, user.getHospId())
-                .orderByDesc(Accounting::getCreateTime)
+                        .orderByDesc(Accounting::getCreateTime)
         );
 
         if (CollUtil.isEmpty(list)) {
@@ -119,8 +121,9 @@ public class AccountingProductServiceImpl extends ServiceImpl<AccountingProductM
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void saveAccountProduct(AccountProductSaveDTO accountProductSaveDTO, User user) {
-        // 删除所有原来的关系
+        // TODO: 2021/8/4  校验这个 会计科目是否能绑定数据
         Long accountId = accountProductSaveDTO.getId();
+        // 删除所有原来的关系
         this.remove(new LambdaQueryWrapper<AccountingProduct>().eq(AccountingProduct::getAccountingId, accountId));
 
         List<Long> products = accountProductSaveDTO.getProducts();
@@ -133,6 +136,16 @@ public class AccountingProductServiceImpl extends ServiceImpl<AccountingProductM
             return accountingProduct;
         }).collect(Collectors.toList());
 
+        // 校验已经绑定过的数据 (1:n)
+        List<AccountingProduct> list = this.list(
+                new LambdaQueryWrapper<AccountingProduct>().select(AccountingProduct::getId)
+                        .eq(AccountingProduct::getAccountingId, accountId)
+                        .eq(AccountingProduct::getHospId, user.getHospId())
+                        .in(AccountingProduct::getProductId, accountProductSaveDTO.getProducts())
+        );
+        if (CollUtil.isNotEmpty(list)) {
+            throw new CostException("成本收入id为:" + StrUtil.join(StrUtil.COMMA, list) + "已被其他会计中心绑定,请重新选择");
+        }
         this.saveBatch(accountingProducts);
     }
 }

+ 136 - 3
src/main/java/com/imed/costaccount/service/impl/ReportFormServiceImpl.java

@@ -3,17 +3,21 @@ 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.exception.CostException;
 import com.imed.costaccount.mapper.ReportFormMapper;
 import com.imed.costaccount.model.ReportForm;
 import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.ReportFormEditDTO;
+import com.imed.costaccount.model.dto.ReportFormSaveDTO;
 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 org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -21,6 +25,9 @@ import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import static com.imed.costaccount.common.constants.NumberConstant.THREE;
+import static com.imed.costaccount.constants.CommonConstant.LIMIT_ONE;
+
 @Slf4j
 @Service("reportFormService")
 public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportForm> implements ReportFormService {
@@ -41,7 +48,10 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
     @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())
+                new LambdaQueryWrapper<ReportForm>()
+                        .eq(ReportForm::getReportType, reportType)
+                        .eq(ReportForm::getHospId, user.getHospId())
+                        .orderByAsc(ReportForm::getSort)
         );
         if (CollUtil.isEmpty(list)) {
             return Collections.emptyList();
@@ -65,7 +75,7 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
             for (ReportFormVO reportFormVO : reportFormVOS) {
                 if (reportFormVO.getParentId().equals(root.getId())) {
                     children.add(reportFormVO);
-                    this.setRelation(reportFormVO,user.getHospId());
+//                    this.setRelation(reportFormVO, user.getHospId());
                 }
             }
             root.setChildren(children);
@@ -75,6 +85,7 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
 
     /**
      * 填充对应的关联关系
+     *
      * @param reportFormVO {@link ReportFormVO}
      * @param hospId
      */
@@ -94,4 +105,126 @@ public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportF
         }
 
     }
+
+
+    /**
+     * 新增一个报表项目
+     *
+     * @param reportFormDTO {@link ReportFormSaveDTO}
+     * @param hospId        医院id
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public void saveReport(ReportFormSaveDTO reportFormDTO, Long hospId) {
+        ReportForm reportForm = BeanUtil.convertObj(reportFormDTO, ReportForm.class);
+        Integer num = this.createNum(hospId);
+        // TODO: 2021/8/4 控制唯一性
+        reportForm.setHospId(hospId)
+                .setNum(num)
+                .setCreateTime(System.currentTimeMillis());
+        // 如果新增的是父节点
+        Long parentId = reportFormDTO.getParentId();
+        // 根据是否父节点设置必要的数据
+        setDataByParentId(hospId, reportForm, parentId);
+
+        this.save(reportForm);
+    }
+
+    /**
+     * 根据是否父节点设置必要的数据
+     *    ***后台默认处理报表节点不一致的问题***
+     * @param hospId 医院id
+     * @param reportForm 需要构建的实体
+     * @param parentId 父级id
+     */
+    private void setDataByParentId(Long hospId, ReportForm reportForm, Long parentId) {
+        if (parentId == 0L) {
+            reportForm.setCalcType(0);
+            reportForm.setCalcFormula("");
+//            reportForm.setReportType(0);
+            // 如果编辑的时候子集的reportType 要和父级一致
+            Long id = reportForm.getId();
+            List<ReportForm> list = this.list(
+                    new LambdaQueryWrapper<ReportForm>().eq(ReportForm::getParentId, id).eq(ReportForm::getHospId, hospId)
+            );
+            if (!list.isEmpty()) {
+                list.forEach(i -> i.setReportType(reportForm.getReportType()));
+                this.updateBatchById(list);
+            }
+        } else {
+            // 父子节点报表类型必须一致
+            ReportForm byId = this.getById(parentId);
+            checkExist(byId,"选择的父报表层级不正确");
+            reportForm.setReportType(byId.getReportType());
+            // 如果子节点 小计只能存在一个
+            this.isSubtotal(parentId, hospId);
+        }
+    }
+
+    /**
+     * 子类型中小计计算类型只能存在一个
+     *    判断是否存在小计的计算类型,存在抛出异常
+     * @param parentId 父级id
+     * @param hospId 医院id
+     */
+    private void isSubtotal(Long parentId, Long hospId) {
+        List<ReportForm> list = this.list(
+                new LambdaQueryWrapper<ReportForm>().select(ReportForm::getId)
+                        .eq(ReportForm::getParentId, parentId).eq(ReportForm::getHospId, hospId).eq(ReportForm::getCalcType, THREE)
+        );
+        if (list.isEmpty()) {
+            return;
+        }
+        throw new CostException("小计类型已存在,请修改计算类型");
+    }
+
+    /**
+     * 创建最新的num 获取最大的num + 1
+     *
+     * @param hospId 医院id
+     * @return 返回本医院最新编号
+     */
+    private Integer createNum(Long hospId) {
+        ReportForm one = this.getOne(
+                new LambdaQueryWrapper<ReportForm>().select(ReportForm::getNum)
+                        .eq(ReportForm::getHospId, hospId)
+                        .orderByDesc(ReportForm::getNum).last(LIMIT_ONE)
+        );
+        if (Objects.isNull(one)) {
+            return 1;
+        }
+        return one.getNum() + 1;
+    }
+
+    /**
+     * 更新某个报表项目
+     *
+     * @param formEditDTO {@link ReportFormEditDTO}
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public void updateReport(ReportFormEditDTO formEditDTO) {
+        Long id = formEditDTO.getId();
+        ReportForm byId = this.getById(id);
+        checkExist(byId,"选择的报表项目不存在");
+
+        BeanUtil.convertObj(formEditDTO, byId);
+
+        Long parentId = byId.getParentId();
+        // 根据是否父节点设置必要的数据
+        this.setDataByParentId(byId.getHospId(), byId, parentId);
+
+        this.updateById(byId);
+    }
+
+    /**
+     * 抛出异常
+     * @param byId POJO类
+     * @param errorMsg 抛出信息
+     */
+    private void checkExist(ReportForm byId,String errorMsg) {
+        if (Objects.isNull(byId)) {
+            throw new CostException(errorMsg);
+        }
+    }
 }

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

@@ -1,20 +1,47 @@
 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.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.common.exception.CostException;
+import com.imed.costaccount.mapper.ReportFormMapper;
 import com.imed.costaccount.mapper.ReportRelationMapper;
+import com.imed.costaccount.model.Accounting;
+import com.imed.costaccount.model.CostShareParam;
+import com.imed.costaccount.model.ReportForm;
 import com.imed.costaccount.model.ReportRelation;
+import com.imed.costaccount.model.dto.ReportRelationDTO;
 import com.imed.costaccount.model.vo.RelationVO;
+import com.imed.costaccount.service.AccountingService;
+import com.imed.costaccount.service.CostShareParamService;
+import com.imed.costaccount.service.ReportFormService;
 import com.imed.costaccount.service.ReportRelationService;
 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("reportRelationService")
 public class ReportRelationServiceImpl extends ServiceImpl<ReportRelationMapper, ReportRelation> implements ReportRelationService {
 
+    private final AccountingService accountingService;
+    private final CostShareParamService shareParamService;
+    private final ReportFormMapper reportFormMapper;
+
+    public ReportRelationServiceImpl(AccountingService accountingService, CostShareParamService shareParamService, ReportFormMapper reportFormMapper) {
+        this.accountingService = accountingService;
+        this.shareParamService = shareParamService;
+        this.reportFormMapper = reportFormMapper;
+    }
+
     /**
      * 报表项目关联的会计科目对象
      *
@@ -38,4 +65,125 @@ public class ReportRelationServiceImpl extends ServiceImpl<ReportRelationMapper,
     public List<RelationVO> getShareParam(Long reportId, Long hospId) {
         return baseMapper.getShareParam(reportId, hospId);
     }
+
+    /**
+     * 根据关系类型,获取可绑定的关系数据(包含回显)
+     *
+     * @param reportId 报表项目id
+     * @param relation 1.对应会计科目设置,2.对应分摊参数设置,根据列表中showAddRelation字段是否存在判断
+     * @param hospId   医院id
+     * @return 返回所有列表 并便是已选择的元素
+     */
+    @Override
+    public List<RelationVO> getRelationList(Long reportId, Integer relation, Long hospId) {
+        List<RelationVO> list = new ArrayList<>();
+        if (relation == 1) {
+            List<RelationVO> accountRelation = this.getAccountRelation(reportId, hospId);
+            List<Accounting> accounts = accountingService.list(new LambdaQueryWrapper<Accounting>().select(Accounting::getAccountingCode, Accounting::getAccountingName).eq(Accounting::getHospId, hospId));
+            if (accounts.isEmpty()) {
+                return list;
+            }
+            list = accounts.stream().map(i -> {
+                RelationVO relationVO = new RelationVO();
+                relationVO.setIsSelect(false);
+                relationVO.setRelation(1);
+                relationVO.setCode(i.getAccountingCode());
+                relationVO.setName(i.getAccountingName());
+                return relationVO;
+            }).collect(Collectors.toList());
+            for (RelationVO relationVO : accountRelation) {
+                for (RelationVO vo : list) {
+                    if (vo.getCode().equals(relationVO.getCode())) {
+                        vo.setIsSelect(true);
+                    }
+                }
+            }
+
+        } else if (relation == 2) {
+            List<RelationVO> accountRelation = this.getShareParam(reportId, hospId);
+            List<CostShareParam> accounts = shareParamService.list(new LambdaQueryWrapper<CostShareParam>().select(CostShareParam::getShareParamCode, CostShareParam::getShareParamName).eq(CostShareParam::getHospId, hospId));
+            if (accounts.isEmpty()) {
+                return list;
+            }
+            list = accounts.stream().map(i -> {
+                RelationVO relationVO = new RelationVO();
+                relationVO.setIsSelect(false);
+                relationVO.setRelation(1);
+                relationVO.setCode(i.getShareParamCode());
+                relationVO.setName(i.getShareParamName());
+                return relationVO;
+            }).collect(Collectors.toList());
+            for (RelationVO relationVO : accountRelation) {
+                for (RelationVO vo : list) {
+                    if (vo.getCode().equals(relationVO.getCode())) {
+                        vo.setIsSelect(true);
+                    }
+                }
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 编辑相关关系
+     *
+     * @param reportRelationDTO {@link ReportRelationDTO}
+     * @param hospId
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public void saveReportRelation(ReportRelationDTO reportRelationDTO, Long hospId) {
+
+        Integer relation = reportRelationDTO.getRelation();
+        List<String> relationCodes = reportRelationDTO.getRelationCodes();
+        Long reportId = reportRelationDTO.getReportId();
+
+        // 校验这个report是否能绑定
+        ReportForm byId = reportFormMapper.selectById(reportId);
+        if (Objects.isNull(byId)) {
+            throw new CostException("选择的报表项目不存在");
+        }
+        Integer calcType = byId.getCalcType();
+        if (calcType != 1 && calcType != 2) {
+            throw new CostException("选择的报表项目不能绑定关联关系");
+        }
+
+        List<ReportRelation> list = this.list(
+                new LambdaQueryWrapper<ReportRelation>().eq(ReportRelation::getReportId, reportId).eq(ReportRelation::getHospId, hospId)
+        );
+        if (!list.isEmpty()) {
+            baseMapper.deleteBatchIds(list);
+        }
+        List<ReportRelation> reportRelations = relationCodes.stream().map(code -> {
+            ReportRelation reportRelation = new ReportRelation();
+            reportRelation.setRelation(relation);
+            reportRelation.setReportId(reportId);
+            reportRelation.setHospId(hospId);
+            reportRelation.setRelationCode(code);
+            reportRelation.setCreateTime(System.currentTimeMillis());
+            return reportRelation;
+        }).collect(Collectors.toList());
+        // 校验 关联关系的id 是否已绑定过其他的报表项目
+        checkIfExist(hospId, relation, relationCodes);
+        this.saveBatch(reportRelations);
+    }
+
+    /**
+     * 校验 关联关系的id 是否已绑定过其他的报表项目
+     *
+     * @param hospId        医院id
+     * @param relation      关系
+     * @param relationCodes 所有需要绑定的code 列表
+     */
+    private void checkIfExist(Long hospId, Integer relation, List<String> relationCodes) {
+        List<ReportRelation> relations = this.list(
+                new LambdaQueryWrapper<ReportRelation>().select(ReportRelation::getRelationCode)
+                        .in(ReportRelation::getRelationCode, relationCodes)
+                        .eq(ReportRelation::getRelation, relation)
+                        .eq(ReportRelation::getHospId, hospId)
+        );
+        if (CollUtil.isNotEmpty(relations)) {
+            throw new CostException(500, "编码为:" + StrUtil.join(StrUtil.COMMA, relation) + "已被绑定");
+        }
+    }
 }

+ 34 - 33
src/main/java/com/imed/costaccount/service/impl/RoleMenuServiceImpl.java

@@ -43,7 +43,7 @@ public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> i
      */
     @Override
     public List<CommonVO> getMenuByRoleId(Long roleId, Long hospId) {
-        return baseMapper.getUsersByRoleId(roleId, hospId);
+        return baseMapper.getMenuByRoleId(roleId, hospId);
     }
 
 
@@ -55,38 +55,39 @@ public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> i
      * @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;
+    public List<CommonVO> roleMenuList(Long roleId, Long hospId) {
+        return baseMapper.getMenuByRoleId(roleId, 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) {

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

@@ -5,7 +5,6 @@ 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;
@@ -48,33 +47,12 @@ public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> i
      *
      * @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) {
+    public List<CommonVO> roleUserList(Long roleId, Long hospId) {
         // 得到这个角色下所有人员
-        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);
+        return baseMapper.getUsersByRoleId(roleId, hospId);
     }
 
     /**

+ 60 - 12
src/main/java/com/imed/costaccount/web/ReportFormController.java

@@ -2,15 +2,21 @@ 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.ReportFormEditDTO;
 import com.imed.costaccount.model.dto.ReportFormSaveDTO;
+import com.imed.costaccount.model.dto.ReportRelationDTO;
+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 io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -21,15 +27,17 @@ import java.util.List;
  * @author huangrui
  * @date 2021-08-03 13:53:52
  */
-@Api(tags="报表项目")
+@Api(tags = "报表项目")
 @RestController
 @RequestMapping("/costAccount/reportForm/")
-public class ReportFormController extends AbstractController{
+public class ReportFormController extends AbstractController {
 
     private final ReportFormService reportFormService;
+    private final ReportRelationService reportRelationService;
 
-    public ReportFormController(ReportFormService reportFormService) {
+    public ReportFormController(ReportFormService reportFormService, ReportRelationService reportRelationService) {
         this.reportFormService = reportFormService;
+        this.reportRelationService = reportRelationService;
     }
 
     /**
@@ -48,27 +56,67 @@ public class ReportFormController extends AbstractController{
      */
     @ApiOperation("保存报表项目")
     @PostMapping("/save")
-    public Result save(@RequestBody @Valid ReportFormSaveDTO reportFormDTO){
-//		reportFormService.save(reportForm);
+    public Result save(@RequestBody @Valid ReportFormSaveDTO reportFormDTO) {
+        reportFormService.saveReport(reportFormDTO, getHospId());
         return Result.ok();
     }
 
     /**
      * 修改
      */
-    @RequestMapping("/update")
-    public Result update(@RequestBody ReportForm reportForm){
-		reportFormService.updateById(reportForm);
+    @ApiOperation("修改报表项目设置")
+    @PostMapping("/edit")
+    public Result update(@RequestBody @Valid ReportFormEditDTO formEditDTO) {
+        reportFormService.updateReport(formEditDTO);
         return Result.ok();
     }
 
     /**
      * 删除
      */
-    @RequestMapping("/delete")
-    public Result delete(@RequestBody Long[] ids){
-		reportFormService.removeByIds(Arrays.asList(ids));
+    @ApiOperation("删除某个报表项目")
+    @PostMapping("/delete")
+    public Result delete(@RequestBody Long[] ids) {
+        reportFormService.removeByIds(Arrays.asList(ids));
         return Result.ok();
     }
 
+
+    @ApiOperation("编辑对应的报表项目和对应的会计或者分摊参数")
+    @PostMapping("/saveReportRelation")
+    public Result saveReportRelation(@RequestBody @Valid ReportRelationDTO reportRelationDTO) {
+        reportRelationService.saveReportRelation(reportRelationDTO,getHospId());
+        return Result.ok();
+    }
+
+    @ApiOperation("获取已绑定的关系列表")
+    @GetMapping("/getRelations")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "reportId", value = "报表项目id"),
+            @ApiImplicitParam(name = "relation", value = "1.对应会计科目设置,2.对应分摊参数设置,根据列表中showAddRelation字段是否存在判断")
+    })
+    public Result getRelations(@RequestParam Long reportId, @RequestParam Integer relation) {
+        List<RelationVO> list = new ArrayList<>();
+        Long hospId = getHospId();
+        if (relation == 1) {
+            list = reportRelationService.getAccountRelation(reportId, hospId);
+        }
+        if (relation == 2) {
+            list = reportRelationService.getShareParam(reportId, hospId);
+        }
+        return Result.ok(list);
+    }
+
+    @ApiOperation("根据关系类型,获取可绑定的关系数据(包含回显)")
+    @GetMapping("/getRelationList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "reportId", value = "报表项目id"),
+            @ApiImplicitParam(name = "relation", value = "1.对应会计科目设置,2.对应分摊参数设置,根据列表中showAddRelation字段是否存在判断")
+    })
+    public Result getRelationList(@RequestParam Long reportId, @RequestParam Integer relation) {
+        List<RelationVO> list = reportRelationService.getRelationList(reportId, relation, getHospId());
+        return Result.ok(list);
+    }
+
+
 }

+ 3 - 5
src/main/java/com/imed/costaccount/web/RoleController.java

@@ -83,10 +83,8 @@ public class RoleController extends AbstractController {
 
     @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);
+    public Result roleUserList(@RequestParam Long roleId) {
+        List<?> list = userRoleService.roleUserList(roleId, getUser().getHospId());
         return Result.ok(list);
     }
 
@@ -100,7 +98,7 @@ public class RoleController extends AbstractController {
     @ApiOperation("绑定角色和菜单关系时选择列表可回显")
     @GetMapping("/roleMenuList")
     public Result roleMenuList(@RequestParam Long roleId) {
-        List<CommonSelectVO> list = roleMenuService.roleMenuList(roleId, getUser().getHospId());
+        List<CommonVO> list = roleMenuService.roleMenuList(roleId, getUser().getHospId());
         return Result.ok(list);
     }
 

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

@@ -10,7 +10,7 @@
         <result property="menuId" column="menu_id"/>
         <result property="hospId" column="hosp_id"/>
     </resultMap>
-    <select id="getUsersByRoleId" resultType="com.imed.costaccount.model.vo.CommonVO">
+    <select id="getMenuByRoleId" 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