瀏覽代碼

责任成本数据的分摊参数的相关编写

ljx 4 年之前
父節點
當前提交
9bcaeeed0e

+ 27 - 0
src/main/java/com/imed/costaccount/model/dto/ShareParamEditDto.java

@@ -0,0 +1,27 @@
+package com.imed.costaccount.model.dto;
+
+import com.imed.costaccount.model.vo.ShareParamProportionVO;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.dto
+ * @date 2021-07-29 9:22
+ */
+@Data
+@ApiModel
+public class ShareParamEditDto {
+    /**
+     * 当前责任中心成本的Id
+     */
+    @NotNull(message = "责任中心成本Id不能为空")
+    private Integer id;
+    /**
+     * 分摊参数设置比例的集合
+     */
+    private List<ShareParamProportionVO> shareParamProportionVOList;
+}

+ 30 - 0
src/main/java/com/imed/costaccount/model/vo/ShareParamProportionVO.java

@@ -0,0 +1,30 @@
+package com.imed.costaccount.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author 李加喜
+ * @Package com.imed.costaccount.model.vo
+ * @date 2021-07-29 9:26
+ */
+@Data
+@ApiModel
+public class ShareParamProportionVO {
+    /**
+     * 分摊参数的Id
+     */
+    private Integer id;
+    /**
+     * 分摊参数的名称
+     */
+    private String shareParamName;
+    /**
+     * 分摊参数的代码
+     */
+    private String shareParamCode;
+    /**
+     * 分摊比例
+     */
+    private Integer shareParamPopout;
+}

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

@@ -5,6 +5,10 @@ import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.model.CostAccountShare;
 import com.imed.costaccount.model.dto.CostAccountShareEditDto;
 import com.imed.costaccount.model.dto.CostAccountShareSaveDto;
+import com.imed.costaccount.model.dto.ShareParamEditDto;
+import com.imed.costaccount.model.vo.ShareParamProportionVO;
+
+import java.util.List;
 
 /**
  * 责任中心成本对照表
@@ -34,5 +38,19 @@ public interface CostAccountShareService extends IService<CostAccountShare> {
      * @param costAccountShareEditDto
      */
     void updateByCostAccountShare(CostAccountShareEditDto costAccountShareEditDto);
+
+    /**
+     * 修改成本分摊参数的设置
+     * @param shareParamEditDto
+     */
+    void updateShareParam(ShareParamEditDto shareParamEditDto);
+
+    /**
+     * 获取责任中心成本表的分摊参数的集合
+     * @param id
+     * @param hospId
+     * @return
+     */
+    List<ShareParamProportionVO> selectShareParamById(Integer id, Integer hospId);
 }
 

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

@@ -4,14 +4,17 @@ 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.JsonUtil;
 import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.constants.NumberConstant;
 import com.imed.costaccount.mapper.CostAccountShareMapper;
-import com.imed.costaccount.model.CostAccountShare;
-import com.imed.costaccount.model.Responsibility;
-import com.imed.costaccount.model.User;
+import com.imed.costaccount.model.*;
 import com.imed.costaccount.model.dto.CostAccountShareEditDto;
 import com.imed.costaccount.model.dto.CostAccountShareSaveDto;
+import com.imed.costaccount.model.dto.ShareParamEditDto;
 import com.imed.costaccount.model.vo.CostAccountShareVO;
+import com.imed.costaccount.model.vo.CostShareParamVO;
+import com.imed.costaccount.model.vo.ShareParamProportionVO;
 import com.imed.costaccount.service.CostAccountShareService;
 import com.imed.costaccount.utils.BeanUtil;
 import org.apache.shiro.SecurityUtils;
@@ -22,9 +25,11 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 
@@ -34,6 +39,15 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
     @Autowired
     private ResponsibilityServiceImpl responsibilityService;
 
+    @Autowired
+    private AccountingServiceImpl accountingService;
+
+    @Autowired
+    private CostShareLevelServiceImpl costShareLevelService;
+
+    @Autowired
+    private CostShareParamServiceImpl costShareParamService;
+
     /**
      * 分页查询责任中心成本对照相关数据
      *
@@ -47,7 +61,7 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         Page<CostAccountShare> costAccountSharePage = new Page<>(page, pageSize);
         Page<CostAccountShare> pages = this.page(costAccountSharePage, new QueryWrapper<CostAccountShare>().lambda()
                 .eq(!StringUtils.isEmpty(hospId), CostAccountShare::getHospId, hospId)
-                .like(!StringUtils.isEmpty(name), CostAccountShare::getAccountingName, name)
+                .like(!StringUtils.isEmpty(name), CostAccountShare::getResponsibilityName, name)
                 .orderByAsc(CostAccountShare::getShareLevel));
         List<CostAccountShare> costAccountShareList = pages.getRecords();
         List<CostAccountShareVO> costAccountShareVOList = BeanUtil.convertList(costAccountShareList, CostAccountShareVO.class);
@@ -66,14 +80,31 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
     public void addCostAccountShare(CostAccountShareSaveDto costAccountShareSaveDto) {
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         Integer hospId = user.getHospId();
-        // 检验输入的责任中心是否存在
+        // 检验输入的数据的合理性
+        checkAccountShare(costAccountShareSaveDto, hospId);
+        CostAccountShare costAccountShareRequest = BeanUtil.convertObj(costAccountShareSaveDto, CostAccountShare.class);
+        costAccountShareRequest.setHospId(hospId);
+        costAccountShareRequest.setCreateTime(System.currentTimeMillis());
+        baseMapper.insert(costAccountShareRequest);
+    }
+
+    /**
+     * 检验输入数据的合理性
+     * @param costAccountShareSaveDto
+     * @param hospId
+     */
+    private void checkAccountShare(CostAccountShareSaveDto costAccountShareSaveDto, Integer hospId) {
         Integer responsibilityId = costAccountShareSaveDto.getResponsibilityId();
-        Responsibility responsibility = responsibilityService.getOne(new QueryWrapper<Responsibility>().lambda().eq(Responsibility::getId, responsibilityId));
+        Responsibility responsibility = responsibilityService.getOne(new QueryWrapper<Responsibility>().lambda().eq(Responsibility::getHospId,hospId).eq(Responsibility::getId, responsibilityId));
         if (Objects.isNull(responsibility)){
             throw new CostException(500,"输入的责任不存在");
         }
         if (costAccountShareSaveDto.getAccountingId() > 0){
-            throw new CostException(500,"输入的成本科目不存在");
+            // 如果输入成本科目的情况下
+            Accounting accounting = accountingService.getOne(new QueryWrapper<Accounting>().lambda().eq(Accounting::getHospId, hospId).eq(Accounting::getId, costAccountShareSaveDto.getAccountingId()));
+            if (Objects.isNull(accounting)){
+                throw new CostException(500,"输入的成本科目不存在");
+            }
         }
         // 检验输入的责任中心与匹配的成本科目是否存在
         List<CostAccountShare> costAccountShareList = baseMapper.selectList(new QueryWrapper<CostAccountShare>().lambda().eq(CostAccountShare::getHospId,hospId));
@@ -85,10 +116,17 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
                 throw new CostException(500,"输入的责任中心对应的成本科目已存在");
             }
         }
-        CostAccountShare costAccountShareRequest = BeanUtil.convertObj(costAccountShareSaveDto, CostAccountShare.class);
-        costAccountShareRequest.setHospId(hospId);
-        costAccountShareRequest.setCreateTime(System.currentTimeMillis());
-        baseMapper.insert(costAccountShareRequest);
+        // 检验输入的这个责任中心是否允许输入成本科目
+        Integer shareLevel = responsibility.getShareLevel();
+        CostShareLevel costShareLevel = costShareLevelService.getOne(new QueryWrapper<CostShareLevel>().lambda()
+                .eq(CostShareLevel::getHospId, hospId).eq(CostShareLevel::getId, shareLevel));
+        if (Objects.nonNull(costShareLevel)){
+            if (costAccountShareSaveDto.getAccountingId()>0 && NumberConstant.ZERO.equals(costShareLevel.getCalcType())){
+                throw new CostException(500,"合并计算不允许选择成本科目");
+            }
+        }else {
+            throw new CostException(500,"对不起该责任中心没有计算方式");
+        }
     }
 
     /**
@@ -99,6 +137,8 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
     @Override
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
     public void updateByCostAccountShare(CostAccountShareEditDto costAccountShareEditDto) {
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
         Integer id = costAccountShareEditDto.getId();
         CostAccountShare costAccountShare = baseMapper.selectById(id);
         if (Objects.isNull(costAccountShare)){
@@ -106,11 +146,87 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         }
         baseMapper.deleteById(id);
         // 新增责任中心成本对照数据
+        CostAccountShareSaveDto costAccountShareSaveDto = BeanUtil.convertObj(costAccountShareEditDto, CostAccountShareSaveDto.class);
+        // 检验输入的数据是否符合规则
+        checkAccountShare(costAccountShareSaveDto,hospId);
+
         CostAccountShare costAccountShareRequest = BeanUtil.convertObj(costAccountShareEditDto, CostAccountShare.class);
         costAccountShareRequest.setId(null);
+        costAccountShareRequest.setHospId(hospId);
         costAccountShareRequest.setParamList(costAccountShare.getParamList());
         costAccountShareRequest.setCreateTime(System.currentTimeMillis());
         baseMapper.insert(costAccountShareRequest);
     }
 
+
+    /**
+     * 修改成本分摊参数的设置
+     *
+     * @param shareParamEditDto
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void updateShareParam(ShareParamEditDto shareParamEditDto) {
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        Integer id = shareParamEditDto.getId();
+        CostAccountShare costAccountShare = baseMapper.selectOne(new QueryWrapper<CostAccountShare>().lambda()
+                .eq(CostAccountShare::getHospId, hospId)
+                .eq(CostAccountShare::getId, id));
+        if (Objects.isNull(costAccountShare)){
+            throw new CostException(500,"责任中心成本数据不存在");
+        }
+        List<ShareParamProportionVO> shareParamProportionVOList = shareParamEditDto.getShareParamProportionVOList();
+        // 检验输入的成本分摊参数是否存在
+        List<CostShareParamVO> costShareParamServiceAll = costShareParamService.getAll(hospId);
+        Map<Integer, List<CostShareParamVO>> listMap = costShareParamServiceAll.stream().collect(Collectors.groupingBy(CostShareParamVO::getId));
+        shareParamProportionVOList.forEach(i->{
+            if (CollectionUtils.isEmpty(listMap.get(i.getId()))){
+                throw new CostException(500,"分摊名称:"+i.getShareParamName()+"未找到");
+            }
+        });
+        // 检验输入的数据的和是否是100
+        AtomicReference<Integer> sum= new AtomicReference<>(0);
+        shareParamProportionVOList.forEach(i->{
+            sum.updateAndGet(v -> v + i.getShareParamPopout());
+        });
+        int max = Integer.parseInt(sum.toString());
+        if (!NumberConstant.ONE_HUNDRED.equals(max)){
+            throw new CostException(500,"分摊比例的和不是100");
+        }
+
+        // 判断添加的分摊是否存在一样的
+        HashMap<Integer, ShareParamProportionVO> hashMap = new HashMap<>();
+        shareParamProportionVOList.forEach(i->{
+            Integer paramId = i.getId();
+            if (hashMap.containsKey(paramId)){
+                throw new CostException(500,"不可以添加相同的分摊参数");
+            }
+            hashMap.put(paramId,i);
+        });
+
+        // TODO 暂时还考虑不到如何筛选选中的
+        String paramList = JsonUtil.toJSONString(shareParamProportionVOList);
+        costAccountShare.setParamList(paramList);
+        baseMapper.updateById(costAccountShare);
+    }
+
+    /**
+     * 获取责任中心成本表的分摊参数的集合
+     *
+     * @param id
+     * @param hospId
+     * @return
+     */
+    @Override
+    public List<ShareParamProportionVO> selectShareParamById(Integer id, Integer hospId) {
+        CostAccountShare costAccountShare = baseMapper.selectOne(new QueryWrapper<CostAccountShare>().lambda()
+                .eq(CostAccountShare::getHospId, hospId).eq(CostAccountShare::getId, id));
+        if (Objects.isNull(costAccountShare)){
+            throw  new CostException(500,"责任中心成本不存在");
+        }
+        String paramList = costAccountShare.getParamList();
+        return JsonUtil.toList(paramList, ShareParamProportionVO.class);
+    }
+
 }

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

@@ -4,6 +4,7 @@ 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.constants.NumberConstant;
 import com.imed.costaccount.mapper.CostShareLevelMapper;
 import com.imed.costaccount.model.CostShareLevel;
 import com.imed.costaccount.model.User;
@@ -57,6 +58,7 @@ public class CostShareLevelServiceImpl extends ServiceImpl<CostShareLevelMapper,
      */
     @Override
     public void addCostShareLevel(CostShareLevelSaveDto costShareLevelSaveDto) {
+
         User user = (User) SecurityUtils.getSubject().getPrincipal();
         Integer hospId = user.getHospId();
         CostShareLevel costShareLevel = BeanUtil.convertObj(costShareLevelSaveDto, CostShareLevel.class);

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

@@ -15,6 +15,7 @@ import com.imed.costaccount.model.dto.CostShareParamEditDto;
 import com.imed.costaccount.model.dto.CostShareParamSaveDto;
 import com.imed.costaccount.model.vo.CostShareParamVO;
 import com.imed.costaccount.service.CostShareParamService;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -105,7 +106,7 @@ public class CostShareParamServiceImpl extends ServiceImpl<CostShareParamMapper,
         CostShareParam costShareParamRequest = BeanUtil.convertObj(costShareParamEditDto, CostShareParam.class);
         costShareParamRequest.setId(null);
         costShareParamRequest.setCreateTime(System.currentTimeMillis());
-        if (NumberConstant.TWO.equals( costShareParamEditDto.getShareParamCode()) && NumberConstant.TWO.equals(costShareParamEditDto.getShareParamCode())){
+        if (NumberConstant.ONE.equals( costShareParamEditDto.getShareParamCode()) && NumberConstant.ONE.equals(costShareParamEditDto.getShareParamCode())){
             costShareParamRequest.setAccountingId(costShareParam.getAccountingId());
         }
         baseMapper.insert(costShareParamRequest);
@@ -123,7 +124,7 @@ public class CostShareParamServiceImpl extends ServiceImpl<CostShareParamMapper,
         Integer costShareParamId = costShareParamAccountDto.getCostShareParamId();
         CostShareParam costShareParam = baseMapper.selectById(costShareParamId);
         //  判断当前操作的分层参数的计算方式是不是按科目计算
-        if (NumberConstant.TWO.equals(costShareParam.getCalcType())){
+        if (NumberConstant.ONE.equals(costShareParam.getCalcType())){
             String[] accountIds = costShareParamAccountDto.getAccountIds();
             List<String> accountList = Arrays.asList(accountIds);
             if (!CollectionUtil.isEmpty(accountList)){
@@ -144,6 +145,7 @@ public class CostShareParamServiceImpl extends ServiceImpl<CostShareParamMapper,
      * @return
      */
     @Override
+    @ApiOperation("获取所有的分摊参数的集合数据")
     public List<CostShareParamVO> getAll(Integer hospId) {
         List<CostShareParam> costShareParamList = baseMapper.selectList(new QueryWrapper<CostShareParam>().lambda()
                 .eq(CostShareParam::getHospId, hospId));

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

@@ -6,6 +6,8 @@ import com.imed.costaccount.model.CostAccountShare;
 import com.imed.costaccount.model.User;
 import com.imed.costaccount.model.dto.CostAccountShareEditDto;
 import com.imed.costaccount.model.dto.CostAccountShareSaveDto;
+import com.imed.costaccount.model.dto.ShareParamEditDto;
+import com.imed.costaccount.model.vo.ShareParamProportionVO;
 import com.imed.costaccount.service.CostAccountShareService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -15,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.Arrays;
+import java.util.List;
 
 
 /**
@@ -70,11 +73,34 @@ public class CostAccountShareController {
      */
     @PostMapping("/update")
     @ApiOperation("修改责任中心成本数据")
-    public Result update(@RequestBody CostAccountShareEditDto costAccountShareEditDto){
+    public Result update(@RequestBody @Valid CostAccountShareEditDto costAccountShareEditDto){
 		costAccountShareService.updateByCostAccountShare(costAccountShareEditDto);
         return Result.ok();
     }
 
+    /**
+     * 获取责任中心成本对应的分摊参数数据
+     */
+    @GetMapping("/getShareParamById")
+    @ApiOperation("获取指定责任中心成本的分摊参数集合")
+    public Result getShareParamById(Integer id){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        Integer hospId = user.getHospId();
+        List<ShareParamProportionVO> shareParamProportionVOList = costAccountShareService.selectShareParamById(id,hospId);
+        return Result.ok(shareParamProportionVOList);
+    }
+
+
+    /**
+     * 进行分摊参数设置
+     */
+    @PostMapping("/updateShareParam")
+    @ApiOperation("添加分摊参数设置")
+    public Result updateShareParam(@RequestBody @Valid ShareParamEditDto shareParamEditDto){
+        costAccountShareService.updateShareParam(shareParamEditDto);
+        return Result.ok();
+    }
+
     /**
      * 删除
      */

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

@@ -66,6 +66,7 @@ public class CostShareParamController {
         return Result.ok(costShareParamVOList);
     }
 
+
     /**
      * 添加对应成本科目
      * 接受传递过来的数组集合

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

@@ -14,6 +14,7 @@ import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
 import java.util.Arrays;
 import java.util.List;
 
@@ -77,7 +78,7 @@ public class HospitalController {
      */
     @PostMapping("/save")
     @ApiOperation("保存医院信息")
-    public Result save(@RequestBody HospitalSaveDto hospitalSaveDto){
+    public Result save(@RequestBody @Valid HospitalSaveDto hospitalSaveDto){
         hospitalService.saveHosptail(hospitalSaveDto);
         return Result.ok();
     }
@@ -88,7 +89,7 @@ public class HospitalController {
      */
     @PostMapping("/update")
     @ApiOperation("修改医院信息")
-    public Result update(@RequestBody HospitalDto hospitalDto){
+    public Result update(@RequestBody @Valid HospitalDto hospitalDto){
         // 作废操作
         hospitalService.updateByHosptail(hospitalDto);
         return Result.ok();