Explorar el Código

Merge branch 'master' of huangrui/CostAccount into dev

lijiaxi hace 4 años
padre
commit
188ddf5d47
Se han modificado 31 ficheros con 740 adiciones y 37 borrados
  1. 16 0
      src/main/java/com/imed/costaccount/mapper/AccountingMapper.java
  2. 69 0
      src/main/java/com/imed/costaccount/model/Accounting.java
  3. 4 0
      src/main/java/com/imed/costaccount/model/CostShareParam.java
  4. 24 0
      src/main/java/com/imed/costaccount/model/dto/AccountingSaveDTO.java
  5. 36 0
      src/main/java/com/imed/costaccount/model/dto/CostShareParamEditDto.java
  6. 32 0
      src/main/java/com/imed/costaccount/model/dto/CostShareParamSaveDto.java
  7. 0 1
      src/main/java/com/imed/costaccount/model/dto/DepartmentRequest.java
  8. 27 0
      src/main/java/com/imed/costaccount/model/vo/AccountVO.java
  9. 2 2
      src/main/java/com/imed/costaccount/model/vo/CostShareParamVO.java
  10. 3 3
      src/main/java/com/imed/costaccount/model/vo/HospitalVO.java
  11. 22 0
      src/main/java/com/imed/costaccount/model/vo/SelectAccountingVO.java
  12. 43 0
      src/main/java/com/imed/costaccount/service/AccountingService.java
  13. 14 0
      src/main/java/com/imed/costaccount/service/CostShareParamService.java
  14. 183 0
      src/main/java/com/imed/costaccount/service/impl/AccountingServiceImpl.java
  15. 1 1
      src/main/java/com/imed/costaccount/service/impl/CostResponsibilityDepartmentServiceImpl.java
  16. 64 0
      src/main/java/com/imed/costaccount/service/impl/CostShareParamServiceImpl.java
  17. 12 1
      src/main/java/com/imed/costaccount/service/impl/DepartmentServiceImpl.java
  18. 28 5
      src/main/java/com/imed/costaccount/service/impl/HospitalServiceImpl.java
  19. 11 8
      src/main/java/com/imed/costaccount/service/impl/ResponsibilityServiceImpl.java
  20. 2 0
      src/main/java/com/imed/costaccount/service/impl/UserServiceImpl.java
  21. 92 0
      src/main/java/com/imed/costaccount/web/AccountingController.java
  22. 1 1
      src/main/java/com/imed/costaccount/web/CostResponsibilityDepartmentController.java
  23. 1 1
      src/main/java/com/imed/costaccount/web/CostShareLevelController.java
  24. 17 7
      src/main/java/com/imed/costaccount/web/CostShareParamController.java
  25. 2 1
      src/main/java/com/imed/costaccount/web/DepartmentController.java
  26. 1 2
      src/main/java/com/imed/costaccount/web/HospitalController.java
  27. 2 2
      src/main/java/com/imed/costaccount/web/LoginController.java
  28. 4 1
      src/main/java/com/imed/costaccount/web/ResponsibilityController.java
  29. 5 0
      src/main/java/com/imed/costaccount/web/test.json
  30. 1 1
      src/main/resources/application.yml
  31. 21 0
      src/main/resources/mapper/AccountingMapper.xml

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.Accounting;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 会计科目管理表
+ * 
+ * @author huangrui
+ * @date 2021-07-28 13:52:24
+ */
+@Mapper
+public interface AccountingMapper extends BaseMapper<Accounting> {
+	
+}

+ 69 - 0
src/main/java/com/imed/costaccount/model/Accounting.java

@@ -0,0 +1,69 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * 会计科目管理表
+ * 
+ * @author huangrui
+ * @email 
+ * @date 2021-07-28 13:52:24
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_accounting")
+public class Accounting implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Integer id;
+	/**
+	 * 会计科目名称
+	 */
+	private String accountingName;
+	/**
+	 * 会计科目代码
+	 */
+	private String accountingCode;
+	/**
+	 * 会计科目类型1.收入,2.支出
+	 */
+	private Integer accountingType;
+	/**
+	 * 是否固定成本 0.不是,1.是
+	 */
+	private Integer isBaseCost;
+	/**
+	 * 医院Id
+	 */
+	private Integer hospId;
+	/**
+	 * 会计科目父级id
+	 */
+	private Integer parentId;
+
+	private String allParentIds;
+	/**
+	 * 创建时间13位时间戳
+	 */
+	private Long createTime;
+	/**
+	 * 删除时间,如果存在表示已删除13位时间戳
+	 */
+	private Long deleteTime;
+
+}

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

@@ -38,6 +38,10 @@ public class CostShareParam implements Serializable {
 	 * 分摊代码
 	 */
 	private String shareParamCode;
+	/**
+	 * 关联的会计成本的科目的Id
+	 */
+	private String accoutingId;
 	/**
 	 * 医院Id
 	 */

+ 24 - 0
src/main/java/com/imed/costaccount/model/dto/AccountingSaveDTO.java

@@ -0,0 +1,24 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel
+public class AccountingSaveDTO {
+
+    @NotNull(message = "层级id不能为空,顶层传0")
+    private Integer id;
+
+    @NotEmpty(message = "新增科目代码不能为空")
+    private String accountingCode;
+
+    @NotEmpty(message = "新增科目名称不能为空")
+    private String accountingName;
+
+    @NotNull(message = "会计科目类型不能为空")
+    private Integer accountingType;
+}

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

@@ -0,0 +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.NotNull;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.dto
+ * @date 2021-07-28 15:34
+ */
+@Data
+@ApiModel("修改分摊参数对象")
+public class CostShareParamEditDto {
+    @ApiModelProperty(name = "shareParamName",value = "原始分摊参数Id不能为空")
+    @NotNull(message = "原始分摊参数Id不能为空")
+    private Integer id;
+
+    @ApiModelProperty(name = "shareParamName",value = "分摊参数名称不能为空")
+    @NotNull(message = "分摊参数名称不能为空")
+    private String shareParamName;
+
+    @ApiModelProperty(name = "shareParamCode",value = "分摊参数代码的代码")
+    @NotNull(message = "分摊参数代码不能为空")
+    private String shareParamCode;
+    /**
+     * 医院Id
+     */
+    private Integer hospId;
+
+    @ApiModelProperty(name = "calcType",value = "分摊参数的计算方式")
+    @NotNull(message = "分摊参数计算方式不能为空")
+    private Integer calcType;
+}

+ 32 - 0
src/main/java/com/imed/costaccount/model/dto/CostShareParamSaveDto.java

@@ -0,0 +1,32 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.dto
+ * @date 2021-07-28 15:00
+ */
+@Data
+@ApiModel("保存分摊参数对象")
+public class CostShareParamSaveDto {
+    @ApiModelProperty(name = "shareParamName",value = "分摊参数名称不能为空")
+    @NotNull(message = "分摊参数名称不能为空")
+    private String shareParamName;
+
+    @ApiModelProperty(name = "shareParamCode",value = "分摊参数代码的代码")
+    @NotNull(message = "分摊参数代码不能为空")
+    private String shareParamCode;
+    /**
+     * 医院Id
+     */
+    private Integer hospId;
+
+    @ApiModelProperty(name = "calcType",value = "分摊参数的计算方式")
+    @NotNull(message = "分摊参数计算方式不能为空")
+    private Integer calcType;
+}

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

@@ -23,6 +23,5 @@ public class DepartmentRequest {
     @NotNull(message = "科室Id不能为空")
     private String departmentCode;
     @ApiModelProperty(name = "hospId",value = "医院的Id")
-    @NotNull(message = "医院Id不能为空")
     private Integer hospId;
 }

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

@@ -0,0 +1,27 @@
+package com.imed.costaccount.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel
+public class AccountVO {
+
+    private Integer id;
+
+    private String accountingName;
+
+    private String accountingCode;
+
+    @JsonIgnore
+    private Integer parentId;
+
+    private Integer isBaseCost;
+
+    private List<AccountVO> child;
+
+
+}

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

@@ -16,10 +16,10 @@ public class CostShareParamVO {
     @ApiModelProperty(name = "id",value = "分摊参数的Id")
     private Integer id;
 
-    @ApiModelProperty(name = "shareParamName",value = "分摊层级的名称")
+    @ApiModelProperty(name = "shareParamName",value = "分摊参数的名称")
     private String shareParamName;
 
-    @ApiModelProperty(name = "shareParamCode",value = "分摊层级的代码")
+    @ApiModelProperty(name = "shareParamCode",value = "分摊参数的代码")
     private String shareParamCode;
 
     @ApiModelProperty(name = "calcType",value = "分摊参数的计算方式")

+ 3 - 3
src/main/java/com/imed/costaccount/model/vo/HosptailVO.java → src/main/java/com/imed/costaccount/model/vo/HospitalVO.java

@@ -15,7 +15,7 @@ import lombok.*;
 @NoArgsConstructor
 @Builder
 @ApiModel
-public class HosptailVO {
+public class HospitalVO {
 
     @ApiModelProperty(name = "id",value = "医院或者病区Id")
     private Integer id;
@@ -23,8 +23,8 @@ public class HosptailVO {
     @ApiModelProperty(name = "name",value = "医院或院区名称")
     private String name;
 
-    @ApiModelProperty(name = "is_hosptail",value = "是否为院区(0.不是,1.是)默认为0")
-    private Integer isHosptail;
+    @ApiModelProperty(name = "is_hospital",value = "是否为院区(0.不是,1.是)默认为0")
+    private Integer isHospital;
 
     @ApiModelProperty(name = "sign",value = "如果是院区医院的id,默认为0")
     private String sign;

+ 22 - 0
src/main/java/com/imed/costaccount/model/vo/SelectAccountingVO.java

@@ -0,0 +1,22 @@
+package com.imed.costaccount.model.vo;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SelectAccountingVO {
+
+    private Integer id;
+
+    @JsonIgnore
+    private Integer parentId;
+
+    private String allParentIds;
+
+    private String accountingName;
+
+    private List<SelectAccountingVO> child;
+}

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

@@ -0,0 +1,43 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.AccountingSaveDTO;
+import com.imed.costaccount.model.vo.AccountVO;
+import com.imed.costaccount.model.Accounting;
+import com.imed.costaccount.model.vo.SelectAccountingVO;
+
+import java.util.List;
+
+/**
+ * 会计科目管理表
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-07-28 13:52:24
+ */
+public interface AccountingService extends IService<Accounting> {
+
+    /**
+     * 获取会计科目列表按收入支出类型
+     * @param accountType  会计科目类型1.收入,2.支出
+     * @param user
+     * @return
+     */
+    List<AccountVO> getListByAccountType(Integer accountType, User user);
+
+    /**
+     * 保存会计科目
+     * @param accountingSaveDTO
+     * @param user
+     */
+    void saveAccounting(AccountingSaveDTO accountingSaveDTO, User user);
+
+    /**
+     * 选择会计科目列表
+     * @param user
+     * @return
+     */
+    List<SelectAccountingVO> selectAccounting(User user);
+}
+

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

@@ -3,6 +3,8 @@ package com.imed.costaccount.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.model.CostShareParam;
+import com.imed.costaccount.model.dto.CostShareParamEditDto;
+import com.imed.costaccount.model.dto.CostShareParamSaveDto;
 
 /**
  * 分摊参数对照表
@@ -20,5 +22,17 @@ public interface CostShareParamService extends IService<CostShareParam> {
      * @return
      */
     PageUtils queryList(Integer page, Integer pageSize, String name,Integer hospId);
+
+    /**
+     * 保存分摊参数
+     * @param costShareParamSaveDto
+     */
+    void addCostShareParam(CostShareParamSaveDto costShareParamSaveDto);
+
+    /**
+     * 修改分摊参数
+     * @param costShareParamEditDto
+     */
+    void updateCostShareParam(CostShareParamEditDto costShareParamEditDto);
 }
 

+ 183 - 0
src/main/java/com/imed/costaccount/service/impl/AccountingServiceImpl.java

@@ -0,0 +1,183 @@
+package com.imed.costaccount.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.model.Accounting;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.AccountingSaveDTO;
+import com.imed.costaccount.model.vo.AccountVO;
+import com.imed.costaccount.model.vo.SelectAccountingVO;
+import com.imed.costaccount.service.AccountingService;
+import com.imed.costaccount.utils.BeanUtil;
+import org.apache.commons.beanutils.BeanUtilsBean;
+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.Objects;
+import java.util.stream.Collectors;
+
+
+@Service("accountingService")
+public class AccountingServiceImpl extends ServiceImpl<AccountingMapper, Accounting> implements AccountingService {
+
+
+    /**
+     * 获取会计科目列表按收入支出类型
+     *
+     * @param accountType 会计科目类型1.收入,2.支出
+     * @param user
+     * @return
+     */
+    @Override
+    public List<AccountVO> getListByAccountType(Integer accountType, User user) {
+        // 1. 得到所有的会计科目
+        List<Accounting> list = this.list(
+                new LambdaQueryWrapper<Accounting>()
+                        .eq(Accounting::getHospId, user.getHospId())
+        );
+        if (CollUtil.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        // 所有的
+        List<AccountVO> all = list.stream().map(i -> BeanUtil.convertObj(i, AccountVO.class)).collect(Collectors.toList());
+        // 顶层的
+        List<AccountVO> parents = all.stream().filter(i -> i.getParentId() == 0).collect(Collectors.toList());
+        List<AccountVO> accountVOS = new ArrayList<>();
+        for (AccountVO parent : parents) {
+            List<AccountVO> accountTree = this.getAccountTree(parent, all);
+            accountVOS.addAll(accountTree);
+        }
+        return accountVOS;
+    }
+
+    /**
+     * 递归处理
+     * @param accountVO
+     * @param list
+     * @return
+     */
+    private List<AccountVO> getAccountTree(AccountVO accountVO, List<AccountVO> list) {
+        List<AccountVO> accountVOS = new ArrayList<>();
+        for (AccountVO account : list) {
+            // 如果是父子关系
+            if (accountVO.getId().equals(account.getParentId())) {
+                List<AccountVO> child = accountVO.getChild();
+                if (CollUtil.isEmpty(child)) {
+                    child = new ArrayList<>();
+                }
+                child.add(account);
+                accountVO.setChild(child);
+                // 处理子节点
+                this.getAccountTree(account, list);
+
+                accountVOS.add(accountVO);
+            }
+        }
+        return accountVOS;
+    }
+
+
+    /**
+     * 保存会计科目
+     *
+     * @param accountingSaveDTO
+     * @param user
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED)
+    public void saveAccounting(AccountingSaveDTO accountingSaveDTO, User user) {
+        // 校验会计科目代码
+        this.checkAccountingCode(accountingSaveDTO.getAccountingCode(), user.getHospId());
+
+        // 新增逻辑
+        Integer parentId = accountingSaveDTO.getId();
+        // 不是顶层的
+        String allParentIds = "0";
+        if (parentId != 0) {
+            Accounting byId = this.getById(parentId);
+            if (Objects.isNull(byId)) {
+                throw new CostException(500, "上层级别会计科目已被移除");
+            }
+            String oldParentIds = byId.getAllParentIds();
+            if ("0".equals(oldParentIds)) {
+                allParentIds = parentId + "";
+            } else {
+                allParentIds = oldParentIds + "-" + parentId;
+            }
+        }
+        Accounting accounting = BeanUtil.convertObj(accountingSaveDTO, Accounting.class);
+        accounting.setHospId(user.getHospId());
+        accounting.setParentId(parentId);
+        accounting.setAllParentIds(allParentIds);
+        accounting.setCreateTime(System.currentTimeMillis());
+        this.save(accounting);
+
+    }
+
+
+    private void checkAccountingCode(String code, Integer hospId) {
+        List<Accounting> list = this.baseMapper.selectList(
+                new QueryWrapper<Accounting>().lambda().select(Accounting::getId)
+                        .eq(Accounting::getAccountingCode, code)
+                        .eq(Accounting::getHospId, hospId)
+        );
+        if (CollUtil.isNotEmpty(list)) {
+            throw new CostException(500, "会计科目代码已存在,请重新生成");
+        }
+    }
+
+    /**
+     * 选择会计科目列表
+     *
+     * @param user
+     * @return
+     */
+    @Override
+    public List<SelectAccountingVO> selectAccounting(User user) {
+        List<Accounting> list = this.list(
+                new LambdaQueryWrapper<Accounting>().select(Accounting::getId,Accounting::getAccountingName,Accounting::getParentId,Accounting::getAllParentIds)
+                        .eq(Accounting::getHospId, user.getHospId())
+        );
+        if (CollUtil.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        // 所有的
+        List<SelectAccountingVO> all = list.stream().map(i -> BeanUtil.convertObj(i, SelectAccountingVO.class)).collect(Collectors.toList());
+        // 顶层的
+        List<SelectAccountingVO> parents = all.stream().filter(i -> i.getParentId() == 0).collect(Collectors.toList());
+        List<SelectAccountingVO> accountVOS = new ArrayList<>();
+        for (SelectAccountingVO parent : parents) {
+            List<SelectAccountingVO> accountTree = this.getSelectAccountTree(parent, all);
+            accountVOS.addAll(accountTree);
+        }
+        return accountVOS;
+    }
+
+    private List<SelectAccountingVO> getSelectAccountTree(SelectAccountingVO parent, List<SelectAccountingVO> all) {
+        List<SelectAccountingVO> accountVOS = new ArrayList<>();
+        for (SelectAccountingVO account : all) {
+            // 如果是父子关系
+            if (parent.getId().equals(account.getParentId())) {
+                List<SelectAccountingVO> child = parent.getChild();
+                if (CollUtil.isEmpty(child)) {
+                    child = new ArrayList<>();
+                }
+                child.add(account);
+                parent.setChild(child);
+                // 处理子节点
+                this.getSelectAccountTree(account, all);
+
+                accountVOS.add(parent);
+            }
+        }
+        return accountVOS;
+    }
+}

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

@@ -21,7 +21,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 
-@Service("costResponsibilityDepartmentService")
+@Service("/costResponsibilityDepartmentService")
 public class CostResponsibilityDepartmentServiceImpl extends ServiceImpl<CostResponsibilityDepartmentMapper, CostResponsibilityDepartment> implements CostResponsibilityDepartmentService {
 
     @Autowired

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

@@ -3,16 +3,25 @@ package com.imed.costaccount.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.BeanUtil;
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.mapper.CostShareParamMapper;
 import com.imed.costaccount.model.CostShareParam;
+import com.imed.costaccount.model.dto.CostShareParamEditDto;
+import com.imed.costaccount.model.dto.CostShareParamSaveDto;
 import com.imed.costaccount.model.vo.CostShareParamVO;
 import com.imed.costaccount.service.CostShareParamService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 @Service("costShareParamService")
@@ -39,4 +48,59 @@ public class CostShareParamServiceImpl extends ServiceImpl<CostShareParamMapper,
         pageUtils.setList(costShareParamVOList);
         return pageUtils;
     }
+
+    /**
+     * 保存分摊参数
+     * 保存的时候需要校验分摊参数
+     * @param costShareParamSaveDto
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void addCostShareParam(CostShareParamSaveDto costShareParamSaveDto) {
+        //检验分摊参数是存在
+        getCostShareParamByCode(costShareParamSaveDto);
+        CostShareParam costShareParam = BeanUtil.convertObj(costShareParamSaveDto, CostShareParam.class);
+        costShareParam.setCreateTime(System.currentTimeMillis());
+        baseMapper.insert(costShareParam);
+    }
+    /**
+     * 检验分摊参数是存在
+     */
+    private void getCostShareParamByCode(CostShareParamSaveDto costShareParamSaveDto) {
+        List<CostShareParam> costShareParamList = baseMapper.selectList(new QueryWrapper<CostShareParam>().lambda()
+                .eq(CostShareParam::getHospId, costShareParamSaveDto.getHospId()));
+        // 检验添加的分摊参数是否存在
+        if (!CollectionUtils.isEmpty(costShareParamList)){
+            Map<String, List<CostShareParam>> costShareMap = costShareParamList.stream().collect(Collectors.groupingBy(CostShareParam::getShareParamCode));
+            if (!CollectionUtils.isEmpty(costShareMap.get(costShareParamSaveDto.getShareParamCode()))){
+                throw new CostException(500,"分摊参数已存在");
+            }
+        }
+    }
+
+    /**
+     * 修改分摊参数
+     *
+     * @param costShareParamEditDto
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void updateCostShareParam(CostShareParamEditDto costShareParamEditDto) {
+        Integer id = costShareParamEditDto.getId();
+        CostShareParam costShareParam = baseMapper.selectById(id);
+        if (Objects.isNull(costShareParam)){
+            throw new CostException(500,"对不起分摊参数不存在");
+        }
+        baseMapper.deleteById(id);
+        // 判断当前输入的Code以最初的Code是否一样
+        List<CostShareParam> costShareParamList = baseMapper.selectList(new QueryWrapper<CostShareParam>().lambda().select(CostShareParam::getShareParamCode).eq(CostShareParam::getHospId, costShareParamEditDto.getHospId()));
+        Map<String, List<CostShareParam>> map = costShareParamList.stream().collect(Collectors.groupingBy(CostShareParam::getShareParamCode));
+        if (!CollectionUtils.isEmpty(map.get(costShareParamEditDto.getShareParamCode()))){
+            throw new CostException(500,"对不起分摊参数代码已存在");
+        }
+        // TODO 如果修改的是按对应科目 修改对应的科目需要补充
+        CostShareParam costShareParamRequest = BeanUtil.convertObj(costShareParamEditDto, CostShareParam.class);
+        costShareParamRequest.setCreateTime(System.currentTimeMillis());
+        baseMapper.insert(costShareParamRequest);
+    }
 }

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

@@ -9,10 +9,14 @@ import com.imed.costaccount.common.util.BeanUtil;
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.mapper.DepartmentMapper;
 import com.imed.costaccount.model.Department;
+import com.imed.costaccount.model.User;
 import com.imed.costaccount.model.dto.DepartmentRequest;
 import com.imed.costaccount.model.vo.DepartmentVO;
 import com.imed.costaccount.service.DepartmentService;
+import org.apache.shiro.SecurityUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
 import java.util.List;
@@ -65,11 +69,14 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
 
     /**
      * 保存科室信息
-     *
+     * TODO 检验科室信息是否存在
      * @param departmentRequest
      */
     @Override
     public void addDepartment(DepartmentRequest departmentRequest) {
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        departmentRequest.setHospId(hospId);
         Department department = BeanUtil.convertObj(departmentRequest, Department.class);
         department.setId(null);
         department.setCreateTime(System.currentTimeMillis());
@@ -82,7 +89,10 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
      * @param departmentRequest
      */
     @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void updateByDepartment(DepartmentRequest departmentRequest) {
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
         Integer id = departmentRequest.getId();
         Department department = baseMapper.selectById(id);
         if (Objects.isNull(department)){
@@ -93,6 +103,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         Department departmentResponse = BeanUtil.convertObj(departmentRequest, Department.class);
         departmentResponse.setId(null);
         departmentResponse.setCreateTime(System.currentTimeMillis());
+        departmentResponse.setHospId(hospId);
         baseMapper.insert(departmentResponse);
     }
 }

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

@@ -7,13 +7,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.constants.NumberConstant;
 import com.imed.costaccount.mapper.HospitalMapper;
 import com.imed.costaccount.model.Hospital;
 import com.imed.costaccount.model.dto.HospitalDto;
 import com.imed.costaccount.model.dto.HospitalSaveDto;
 import com.imed.costaccount.model.vo.CommonVO;
 import com.imed.costaccount.model.vo.HospitalAllVO;
-import com.imed.costaccount.model.vo.HosptailVO;
+import com.imed.costaccount.model.vo.HospitalVO;
 import com.imed.costaccount.service.HospitalService;
 import com.imed.costaccount.utils.BeanUtil;
 import org.springframework.stereotype.Service;
@@ -46,9 +47,17 @@ public class HospitalServiceImpl extends ServiceImpl<HospitalMapper, Hospital> i
 //                .eq(!StringUtils.isEmpty(hospId), Hospital::getId, hospId)
                 .like(!StringUtils.isEmpty(name), Hospital::getName, name));
         List<Hospital> records = pages.getRecords();
-        List<HosptailVO> hosptailVOList = BeanUtil.convertList(records, HosptailVO.class);
+        List<HospitalVO> hospitalVOList = BeanUtil.convertList(records, HospitalVO.class);
+
+        hospitalVOList.forEach(i->{
+            if (NumberConstant.ZERO.equals(i.getIsHospital())){
+                i.setParentId(null);
+                i.setParentName(null);
+            }
+        });
+
         PageUtils pageUtils = new PageUtils(pages);
-        pageUtils.setList(hosptailVOList);
+        pageUtils.setList(hospitalVOList);
         return pageUtils;
     }
 
@@ -61,6 +70,7 @@ public class HospitalServiceImpl extends ServiceImpl<HospitalMapper, Hospital> i
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void saveHosptail(HospitalSaveDto hospitalSaveDto) {
         String sign = hospitalSaveDto.getSign();
+        //  检验此时保存的是医院还是院区
         checkParam(hospitalSaveDto, sign);
         Hospital hospital = BeanUtil.convertObj(hospitalSaveDto, Hospital.class);
         hospital.setCreateTime(System.currentTimeMillis());
@@ -70,11 +80,12 @@ public class HospitalServiceImpl extends ServiceImpl<HospitalMapper, Hospital> i
     // 校验参数
     private void checkParam(HospitalSaveDto hospitalSaveDto, String sign) {
         Integer isHospital = hospitalSaveDto.getIsHospital();
+        // 新增医院
         if (isHospital == 0) {
             if (StringUtils.isEmpty(sign)) {
                 throw new CostException(500, "新增医院请选择医院标识");
             }
-            Hospital bySign = this.getBySign(sign);
+            Hospital bySign = this.getBySignHospital(sign);
             if (Objects.nonNull(bySign)) {
                 throw new CostException(500, "当前医院标识已存在,请重新生成");
             }
@@ -87,6 +98,17 @@ public class HospitalServiceImpl extends ServiceImpl<HospitalMapper, Hospital> i
         }
     }
 
+    public Hospital getBySignHospital(String hospSign) {
+        Hospital one = this.getOne(
+                new LambdaQueryWrapper<Hospital>()
+                        .select(Hospital::getId, Hospital::getName)
+                        .eq(Hospital::getIsHospital, 0)
+                        .eq(Hospital::getSign, hospSign)
+                        .last("limit 1")
+        );
+        return one;
+    }
+
     /**
      * 修改医院信息
      *
@@ -115,7 +137,8 @@ public class HospitalServiceImpl extends ServiceImpl<HospitalMapper, Hospital> i
      */
     @Override
     public List<HospitalAllVO> getAll() {
-        List<Hospital> hospitals = baseMapper.selectList(null);
+        List<Hospital> hospitals = baseMapper.selectList(new QueryWrapper<Hospital>().lambda()
+        .eq(Hospital::getIsHospital,NumberConstant.ONE));
         List<HospitalAllVO> hospitalAllVOList = BeanUtil.convertList(hospitals, HospitalAllVO.class);
         return hospitalAllVOList;
     }

+ 11 - 8
src/main/java/com/imed/costaccount/service/impl/ResponsibilityServiceImpl.java

@@ -3,23 +3,22 @@ package com.imed.costaccount.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
+import com.imed.costaccount.constants.NumberConstant;
 import com.imed.costaccount.enums.ErrorCodeEnum;
+import com.imed.costaccount.mapper.ResponsibilityMapper;
+import com.imed.costaccount.model.Responsibility;
 import com.imed.costaccount.model.User;
 import com.imed.costaccount.model.dto.ResponsibilityEditDTO;
 import com.imed.costaccount.model.dto.ResponsibilitySaveDTO;
 import com.imed.costaccount.model.vo.CenterDepartmentVO;
 import com.imed.costaccount.model.vo.CommonVO;
 import com.imed.costaccount.model.vo.CostResponsibilityVO;
+import com.imed.costaccount.service.ResponsibilityService;
 import com.imed.costaccount.utils.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.beanutils.BeanUtilsBean;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-import com.imed.costaccount.mapper.ResponsibilityMapper;
-import com.imed.costaccount.model.Responsibility;
-import com.imed.costaccount.service.ResponsibilityService;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -62,7 +61,11 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
                 i.setChild(child);
             }
         }));
-
+        parentCostResponsibility.forEach(i->{
+            if (NumberConstant.ZERO.equals(i.getParentId())){
+                i.setShareLevel(null);
+            }
+        });
         return parentCostResponsibility;
     }
 
@@ -92,7 +95,7 @@ public class ResponsibilityServiceImpl extends ServiceImpl<ResponsibilityMapper,
         }
 
         Responsibility center = BeanUtil.convertObj(responsibilitySaveDTO, Responsibility.class);
-        center.setCreateTime(new Date().getTime()).setId(null).setParentId(id).setHospId(user.getHospId()).setResponsibilityLevel(2);
+        center.setCreateTime(System.currentTimeMillis()).setId(null).setParentId(id).setHospId(user.getHospId()).setResponsibilityLevel(2);
         if (id == 0) {
             center.setResponsibilityLevel(1);
             center.setShareLevel(0);

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

@@ -145,6 +145,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void updateByUser(UserDto userDto) {
+        User userOne = (User) SecurityUtils.getSubject().getPrincipal();
         User user = baseMapper.selectOne(new QueryWrapper<User>().lambda().like(
                 !StringUtils.isEmpty(userDto.getId()), User::getId, userDto.getId()));
         if (Objects.isNull(user)) {
@@ -155,6 +156,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         userRequest.setId(null);
         userRequest.setHospitalStatus(userDto.getHospitalStatus());
         userRequest.setCreateTime(System.currentTimeMillis());
+        userRequest.setHospId(userOne.getHospId());
         if (!StringUtils.isEmpty(userDto.getPassword())) {
             String newPassWord = SecureUtil.md5(userDto.getPassword());
             userRequest.setPassword(newPassWord);

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

@@ -0,0 +1,92 @@
+package com.imed.costaccount.web;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.AccountingSaveDTO;
+import com.imed.costaccount.model.vo.AccountVO;
+import com.imed.costaccount.model.vo.SelectAccountingVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import com.imed.costaccount.model.Accounting;
+import com.imed.costaccount.service.AccountingService;
+import com.imed.costaccount.utils.PageUtils;
+
+import javax.validation.Valid;
+
+
+/**
+ * 会计科目管理表
+ *
+ * @author huangrui
+ * @date 2021-07-28 13:52:24
+ */
+@Api(tags = "会计科目")
+@RestController
+@RequestMapping("/costAccount/accounting")
+public class AccountingController {
+    private final AccountingService accountingService;
+
+    public AccountingController(AccountingService accountingService) {
+        this.accountingService = accountingService;
+    }
+
+    @ApiOperation("获取会计科目列表按收入支出类型")
+    @GetMapping("/list")
+    @ApiImplicitParam(name = "accountType",value = "会计科目类型1.收入,2.支出")
+    public Result list(@RequestParam Integer accountType){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        List<AccountVO> list = accountingService.getListByAccountType(accountType, user);
+        PageUtils pageUtils = new PageUtils(list, 0, 0, 0);
+        return Result.ok(pageUtils);
+    }
+
+
+
+    @ApiOperation("保存会计科目")
+    @PostMapping("/save")
+    public Result save(@RequestBody @Valid AccountingSaveDTO accountingSaveDTO){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+		accountingService.saveAccounting(accountingSaveDTO,user);
+        return Result.ok();
+    }
+
+
+    @ApiOperation("选择会计科目列表")
+    @GetMapping("/selectAccounting")
+    public Result selectAccounting(){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        List<SelectAccountingVO> list = accountingService.selectAccounting(user);
+        return Result.ok(list);
+    }
+
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    public Result update(@RequestBody Accounting accounting){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+//		accountingService.updateById(accounting,user);
+        return Result.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    public Result delete(@RequestBody Integer[] ids){
+		accountingService.removeByIds(Arrays.asList(ids));
+        return Result.ok();
+    }
+
+}

+ 1 - 1
src/main/java/com/imed/costaccount/web/CostResponsibilityDepartmentController.java

@@ -22,7 +22,7 @@ import java.util.List;
  * @date 2021-07-27 15:59:58
  */
 @RestController
-@RequestMapping("/costresponsibilitydepartment")
+@RequestMapping("/costAccount/costresponsibilitydepartment")
 @Api(tags = "责任中心科室对照表")
 public class CostResponsibilityDepartmentController {
     @Autowired

+ 1 - 1
src/main/java/com/imed/costaccount/web/CostShareLevelController.java

@@ -25,7 +25,7 @@ import java.util.List;
  * @date 2021-07-27 14:19:09
  */
 @RestController
-@RequestMapping("/costsharelevel")
+@RequestMapping("/costAccount/costsharelevel")
 @Api(tags = "分摊层级相关操作")
 public class CostShareLevelController {
     @Autowired

+ 17 - 7
src/main/java/com/imed/costaccount/web/CostShareParamController.java

@@ -4,6 +4,8 @@ import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.common.util.Result;
 import com.imed.costaccount.model.CostShareParam;
 import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.dto.CostShareParamEditDto;
+import com.imed.costaccount.model.dto.CostShareParamSaveDto;
 import com.imed.costaccount.service.CostShareParamService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -21,7 +23,7 @@ import java.util.Arrays;
  * @date 2021-07-28 09:23:28
  */
 @RestController
-@RequestMapping("/costshareparam")
+@RequestMapping("/costAccount/costshareparam")
 @Api(tags = "成本参数操作")
 public class CostShareParamController {
     @Autowired
@@ -31,7 +33,7 @@ public class CostShareParamController {
      * 分页查询列表
      */
     @GetMapping("/list")
-    @ApiOperation("分页查询成本相关参数")
+    @ApiOperation("分页查询成本分摊相关参数")
     public Result list(@RequestParam(defaultValue = "1", value = "page") Integer page,
                        @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
                         @RequestParam(value = "name",required = false) String name){
@@ -43,7 +45,7 @@ public class CostShareParamController {
 
 
     /**
-     * 信息
+     * 添加对应成本科目
      */
     @GetMapping("/info/{id}")
     public Result info(@PathVariable("id") Integer id){
@@ -55,8 +57,12 @@ public class CostShareParamController {
      * 保存
      */
     @PostMapping("/save")
-    public Result save(@RequestBody CostShareParam costShareParam){
-		costShareParamService.save(costShareParam);
+    @ApiOperation("添加分摊参数信息")
+    public Result save(@RequestBody CostShareParamSaveDto costShareParamSaveDto){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        costShareParamSaveDto.setHospId(hospId);
+		costShareParamService.addCostShareParam(costShareParamSaveDto);
         return Result.ok();
     }
 
@@ -64,8 +70,12 @@ public class CostShareParamController {
      * 修改
      */
     @PostMapping("/update")
-    public Result update(@RequestBody CostShareParam costShareParam){
-		costShareParamService.updateById(costShareParam);
+    @ApiOperation("修改参数信息")
+    public Result update(@RequestBody CostShareParamEditDto costShareParamEditDto){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        costShareParamEditDto.setHospId(hospId);
+		costShareParamService.updateCostShareParam(costShareParamEditDto);
         return Result.ok();
     }
 

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

@@ -24,7 +24,7 @@ import java.util.List;
  * @date 2021-07-27 08:49:37
  */
 @RestController
-@RequestMapping("/department")
+@RequestMapping("/costAccount/department")
 @Api(tags = "科室信息管理")
 
 public class DepartmentController {
@@ -65,6 +65,7 @@ public class DepartmentController {
     @PostMapping("/save")
     @ApiOperation("保存科室相关信息")
     public Result save(@RequestBody @Valid DepartmentRequest departmentRequest){
+
 		departmentService.addDepartment(departmentRequest);
         return Result.ok();
     }

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

@@ -46,7 +46,7 @@ public class HospitalController {
      */
     @GetMapping("/list")
     @ApiOperation("分页查询医院信息")
-    public Result list(@RequestParam(defaultValue = "1", value = "page") Integer page,
+    public Result list(@RequestParam(value = "page", defaultValue = "1") Integer page,
                        @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
                        @RequestParam(value = "name",required = false) String name){
         User user = (User) SecurityUtils.getSubject().getPrincipal();
@@ -69,7 +69,6 @@ public class HospitalController {
     @ApiOperation("获取全部的医院信息")
     public Result getAll(){
         List<HospitalAllVO> hospitalAllVOList = hospitalService.getAll();
-        hospitalService.list();
         return Result.ok(hospitalAllVOList);
     }
 

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

@@ -18,8 +18,8 @@ import java.util.List;
 @RequestMapping("/costAccount")
 public class LoginController {
 
-    private UserService userService;
-    private HospitalService hospitalService;
+    private final UserService userService;
+    private final HospitalService hospitalService;
 
     public LoginController(UserService userService, HospitalService hospitalService) {
         this.userService = userService;

+ 4 - 1
src/main/java/com/imed/costaccount/web/ResponsibilityController.java

@@ -1,5 +1,6 @@
 package com.imed.costaccount.web;
 
+import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.common.util.Result;
 import com.imed.costaccount.model.User;
 import com.imed.costaccount.model.dto.ResponsibilityEditDTO;
@@ -33,7 +34,9 @@ public class ResponsibilityController {
     public Result list() {
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         List<CostResponsibilityVO> list = responsibilityService.getList(user);
-        return Result.ok(list);
+        PageUtils pageUtils = new PageUtils(list,0,0,0);
+
+        return Result.ok(pageUtils);
     }
 
     @ApiOperation("新增责任中心")

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

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

+ 1 - 1
src/main/resources/application.yml

@@ -27,4 +27,4 @@ logging:
 cost:
   jwt:
     secret: 12321312asdsdsfdfsd
-    expire: 1
+    expire: 1000

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

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.imed.costaccount.mapper.AccountingMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.Accounting" id="accountingMap">
+        <result property="id" column="id"/>
+        <result property="accountingName" column="accounting_name"/>
+        <result property="accountingCode" column="accounting_code"/>
+        <result property="accountingType" column="accounting_type"/>
+        <result property="isBaseCost" column="is_base_cost"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="allParentIds" column="all_parent_ids"/>
+        <result property="createTime" column="create_time"/>
+        <result property="deleteTime" column="delete_time"/>
+    </resultMap>
+
+
+</mapper>