Browse Source

添加分摊设置改成主从形式相关代码

JammeyJiang 4 months ago
parent
commit
8762a2f3a2

+ 16 - 0
src/main/java/com/kcim/dao/mapper/CostAccountShareDetailMapper.java

@@ -0,0 +1,16 @@
+package com.kcim.dao.mapper;
+
+import com.kcim.dao.model.CostAccountShareDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 成本分摊对应的会计科目
+ * 
+ * @author Wang.YS
+ * @date 2025-03-28 14:06:13
+ */
+@Mapper
+public interface CostAccountShareDetailMapper extends BaseMapper<CostAccountShareDetail> {
+	
+}

+ 16 - 0
src/main/java/com/kcim/dao/mapper/CostAccountShareParamMapper.java

@@ -0,0 +1,16 @@
+package com.kcim.dao.mapper;
+
+import com.kcim.dao.model.CostAccountShareParam;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 成本分摊对应的分摊参数
+ * 
+ * @author Wang.YS
+ * @date 2025-03-28 14:06:12
+ */
+@Mapper
+public interface CostAccountShareParamMapper extends BaseMapper<CostAccountShareParam> {
+	
+}

+ 74 - 0
src/main/java/com/kcim/dao/model/CostAccountShareDetail.java

@@ -0,0 +1,74 @@
+package com.kcim.dao.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 成本分摊对应的会计科目
+ * 
+ * @author Wang.YS
+
+ * @date 2025-03-28 14:06:13
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_account_share_detail")
+public class CostAccountShareDetail implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Long id;
+	/**
+	 * 医院id
+	 */
+	private Long hospId;
+	/**
+	 * 成本分摊参数对应表的ID
+	 */
+	private Long accountShareId;
+	/**
+	 * 会计科目代码
+	 */
+	private String accountingCode;
+	/**
+	 * 创建人
+	 */
+	private String createUser;
+	/**
+	 * 创建时间
+	 */
+	private Date createTime;
+	/**
+	 * 更新人
+	 */
+	private String updateUser;
+	/**
+	 * 更新时间
+	 */
+	private Date updateTime;
+	/**
+	 * 删除人
+	 */
+	private String deleteUser;
+	/**
+	 * 删除时间
+	 */
+	private Date deleteTime;
+	/**
+	 * 删除标志  0正常 1作废
+	 */
+	private Integer delFlag;
+
+}

+ 79 - 0
src/main/java/com/kcim/dao/model/CostAccountShareParam.java

@@ -0,0 +1,79 @@
+package com.kcim.dao.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 成本分摊对应的分摊参数
+ * 
+ * @author Wang.YS
+
+ * @date 2025-03-28 14:06:12
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_account_share_param")
+public class CostAccountShareParam implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@TableId
+	private Long id;
+	/**
+	 * 医院id
+	 */
+	private Long hospId;
+	/**
+	 * 成本分摊参数对应表的ID
+	 */
+	private Long accountShareId;
+	/**
+	 * 分摊参数代码
+	 */
+	private String shareParamCode;
+	/**
+	 * 分摊参数占比
+	 */
+	private BigDecimal shareParamProportion;
+	/**
+	 * 创建人
+	 */
+	private String createUser;
+	/**
+	 * 创建时间
+	 */
+	private Date createTime;
+	/**
+	 * 更新人
+	 */
+	private String updateUser;
+	/**
+	 * 更新时间
+	 */
+	private Date updateTime;
+	/**
+	 * 删除人
+	 */
+	private String deleteUser;
+	/**
+	 * 删除时间
+	 */
+	private Date deleteTime;
+	/**
+	 * 删除标志  0正常 1作废
+	 */
+	private Integer delFlag;
+
+}

+ 76 - 0
src/main/java/com/kcim/dao/repository/CostAccountShareDetailRepository.java

@@ -0,0 +1,76 @@
+package com.kcim.dao.repository;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kcim.common.constants.NumberConstant;
+import com.kcim.common.util.UserContext;
+import com.kcim.dao.mapper.CostAccountShareDetailMapper;
+import com.kcim.dao.model.CostAccountShareDetail;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @program: CostAccount
+ * @description:
+ * @author: Wang.YS
+ * @create: 2024-04-03 14:49
+ **/
+@Repository
+public class CostAccountShareDetailRepository extends ServiceImpl<CostAccountShareDetailMapper, CostAccountShareDetail> {
+
+    /**
+     * 获取指定分摊设置对应的会计科目
+     * @param accountShareId
+     * @return
+     */
+    public List<CostAccountShareDetail> getCostAccountShareDetail(Long accountShareId) {
+        LambdaQueryWrapper<CostAccountShareDetail> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CostAccountShareDetail::getHospId, UserContext.getHospId());
+        queryWrapper.eq(CostAccountShareDetail::getDelFlag, NumberConstant.ZERO);
+        queryWrapper.eq(CostAccountShareDetail::getAccountShareId, accountShareId);
+        return this.list(queryWrapper);
+    }
+
+    /**
+     * 作废指定分摊设置对应的会计科目
+     * @param accountShareId
+     * @return
+     */
+    public boolean delCostAccountShareDetail(Long accountShareId) {
+        LambdaUpdateWrapper<CostAccountShareDetail> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(CostAccountShareDetail::getDelFlag,NumberConstant.ONE);
+        updateWrapper.set(CostAccountShareDetail::getDeleteUser,UserContext.getCurrentUser().getId());
+        updateWrapper.set(CostAccountShareDetail::getDeleteTime,new Date());
+
+        updateWrapper.eq(CostAccountShareDetail::getHospId, UserContext.getHospId());
+        updateWrapper.eq(CostAccountShareDetail::getDelFlag, NumberConstant.ZERO);
+        if(!ObjectUtils.isEmpty(accountShareId)) {
+            updateWrapper.eq(CostAccountShareDetail::getAccountShareId, accountShareId);
+        }
+        return this.update(updateWrapper);
+    }
+
+    /**
+     * 批量删除指定分摊设置对应的会计科目
+     * @param accountShareIdList
+     * @return
+     */
+    public boolean delCostAccountShareDetailList(List<Long> accountShareIdList) {
+        LambdaUpdateWrapper<CostAccountShareDetail> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(CostAccountShareDetail::getDelFlag,NumberConstant.ONE);
+        updateWrapper.set(CostAccountShareDetail::getDeleteUser,UserContext.getCurrentUser().getId());
+        updateWrapper.set(CostAccountShareDetail::getDeleteTime,new Date());
+
+        updateWrapper.eq(CostAccountShareDetail::getHospId, UserContext.getHospId());
+        updateWrapper.eq(CostAccountShareDetail::getDelFlag, NumberConstant.ZERO);
+        if(!CollectionUtils.isEmpty(accountShareIdList)) {
+            updateWrapper.in(CostAccountShareDetail::getAccountShareId, accountShareIdList);
+        }
+        return this.update(updateWrapper);
+    }
+}

+ 75 - 0
src/main/java/com/kcim/dao/repository/CostAccountShareParamRepository.java

@@ -0,0 +1,75 @@
+package com.kcim.dao.repository;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kcim.common.constants.NumberConstant;
+import com.kcim.common.util.UserContext;
+import com.kcim.dao.mapper.CostAccountShareParamMapper;
+import com.kcim.dao.model.CostAccountShareParam;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @program: CostAccount
+ * @description:
+ * @author: Wang.YS
+ * @create: 2024-04-03 14:49
+ **/
+@Repository
+public class CostAccountShareParamRepository extends ServiceImpl<CostAccountShareParamMapper, CostAccountShareParam> {
+    /**
+     * 获取指定分摊设置对应的分摊参数
+     * @param accountShareId
+     * @return
+     */
+    public List<CostAccountShareParam> getCostAccountShareParam(Long accountShareId) {
+        LambdaQueryWrapper<CostAccountShareParam> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CostAccountShareParam::getHospId, UserContext.getHospId());
+        queryWrapper.eq(CostAccountShareParam::getDelFlag, NumberConstant.ZERO);
+        queryWrapper.eq(CostAccountShareParam::getAccountShareId, accountShareId);
+        return this.list(queryWrapper);
+    }
+
+    /**
+     * 作废指定分摊设置对应的分摊参数
+     * @param accountShareId
+     * @return
+     */
+    public boolean delCostAccountShareDetail(Long accountShareId) {
+        LambdaUpdateWrapper<CostAccountShareParam> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(CostAccountShareParam::getDelFlag,NumberConstant.ONE);
+        updateWrapper.set(CostAccountShareParam::getDeleteUser,UserContext.getCurrentUser().getId());
+        updateWrapper.set(CostAccountShareParam::getDeleteTime,new Date());
+
+        updateWrapper.eq(CostAccountShareParam::getHospId, UserContext.getHospId());
+        updateWrapper.eq(CostAccountShareParam::getDelFlag, NumberConstant.ZERO);
+        if(!ObjectUtils.isEmpty(accountShareId)) {
+            updateWrapper.eq(CostAccountShareParam::getAccountShareId, accountShareId);
+        }
+        return this.update(updateWrapper);
+    }
+
+    /**
+     * 批量删除指定分摊设置对应的分摊参数
+     * @param accountShareIdList
+     * @return
+     */
+    public boolean delCostAccountShareDetailList(List<Long> accountShareIdList) {
+        LambdaUpdateWrapper<CostAccountShareParam> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(CostAccountShareParam::getDelFlag,NumberConstant.ONE);
+        updateWrapper.set(CostAccountShareParam::getDeleteUser,UserContext.getCurrentUser().getId());
+        updateWrapper.set(CostAccountShareParam::getDeleteTime,new Date());
+
+        updateWrapper.eq(CostAccountShareParam::getHospId, UserContext.getHospId());
+        updateWrapper.eq(CostAccountShareParam::getDelFlag, NumberConstant.ZERO);
+        if(!CollectionUtils.isEmpty(accountShareIdList)) {
+            updateWrapper.in(CostAccountShareParam::getAccountShareId, accountShareIdList);
+        }
+        return this.update(updateWrapper);
+    }
+}

+ 15 - 0
src/main/java/com/kcim/service/CostAccountShareDetailService.java

@@ -0,0 +1,15 @@
+package com.kcim.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kcim.dao.model.CostAccountShareDetail;
+
+/**
+ * 成本分摊对应的会计科目
+ *
+ * @author Wang.YS
+ * @date 2025-03-28 14:06:13
+ */
+public interface CostAccountShareDetailService extends IService<CostAccountShareDetail> {
+
+}
+

+ 15 - 0
src/main/java/com/kcim/service/CostAccountShareParamService.java

@@ -0,0 +1,15 @@
+package com.kcim.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kcim.dao.model.CostAccountShareParam;
+
+/**
+ * 成本分摊对应的分摊参数
+ *
+ * @author Wang.YS
+ * @date 2025-03-28 14:06:12
+ */
+public interface CostAccountShareParamService extends IService<CostAccountShareParam> {
+
+}
+

+ 7 - 0
src/main/java/com/kcim/service/CostAccountShareService.java

@@ -97,5 +97,12 @@ public interface CostAccountShareService extends IService<CostAccountShare> {
     void deleteByIds(List<Long> asList);
     void deleteByIds(List<Long> asList);
     List<CostAccountShare> getAll();
     List<CostAccountShare> getAll();
 
 
+    /**
+     * 同步分摊参数设置
+     * @param direction 1主表向明细表同步 2明细表向主表同步
+     * @param accountShareId
+     * @return
+     */
+    void synCostAccountShare(Integer direction, Long accountShareId);
 }
 }
 
 

+ 14 - 0
src/main/java/com/kcim/service/impl/CostAccountShareDetailServiceImpl.java

@@ -0,0 +1,14 @@
+package com.kcim.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kcim.dao.mapper.CostAccountShareDetailMapper;
+import com.kcim.dao.model.CostAccountShareDetail;
+import com.kcim.service.CostAccountShareDetailService;
+import org.springframework.stereotype.Service;
+
+
+@Service("costAccountShareDetailService")
+public class CostAccountShareDetailServiceImpl extends ServiceImpl<CostAccountShareDetailMapper, CostAccountShareDetail> implements CostAccountShareDetailService {
+
+
+}

+ 14 - 0
src/main/java/com/kcim/service/impl/CostAccountShareParamServiceImpl.java

@@ -0,0 +1,14 @@
+package com.kcim.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kcim.dao.mapper.CostAccountShareParamMapper;
+import com.kcim.dao.model.CostAccountShareParam;
+import com.kcim.service.CostAccountShareParamService;
+import org.springframework.stereotype.Service;
+
+
+@Service("costAccountShareParamService")
+public class CostAccountShareParamServiceImpl extends ServiceImpl<CostAccountShareParamMapper, CostAccountShareParam> implements CostAccountShareParamService {
+
+
+}

+ 189 - 11
src/main/java/com/kcim/service/impl/CostAccountShareServiceImpl.java

@@ -13,16 +13,16 @@ import com.kcim.common.util.JacksonUtil;
 import com.kcim.common.util.PageUtils;
 import com.kcim.common.util.PageUtils;
 import com.kcim.common.util.UserContext;
 import com.kcim.common.util.UserContext;
 import com.kcim.dao.mapper.CostAccountShareMapper;
 import com.kcim.dao.mapper.CostAccountShareMapper;
-import com.kcim.dao.model.Accounting;
-import com.kcim.dao.model.CostAccountShare;
-import com.kcim.dao.model.CostShareLevel;
-import com.kcim.dao.model.Responsibility;
+import com.kcim.dao.model.*;
 import com.kcim.dao.model.dto.AccountShareCopyDto;
 import com.kcim.dao.model.dto.AccountShareCopyDto;
 import com.kcim.dao.model.dto.CostAccountShareEditDto;
 import com.kcim.dao.model.dto.CostAccountShareEditDto;
 import com.kcim.dao.model.dto.CostAccountShareSaveDto;
 import com.kcim.dao.model.dto.CostAccountShareSaveDto;
 import com.kcim.dao.model.dto.ShareParamEditDto;
 import com.kcim.dao.model.dto.ShareParamEditDto;
+import com.kcim.dao.repository.CostAccountShareDetailRepository;
+import com.kcim.dao.repository.CostAccountShareParamRepository;
 import com.kcim.service.*;
 import com.kcim.service.*;
 import com.kcim.vo.*;
 import com.kcim.vo.*;
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Propagation;
@@ -37,6 +37,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 @Slf4j
 @Slf4j
+@AllArgsConstructor
 @Service("costAccountShareService")
 @Service("costAccountShareService")
 public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMapper, CostAccountShare> implements CostAccountShareService {
 public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMapper, CostAccountShare> implements CostAccountShareService {
 
 
@@ -48,13 +49,18 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
 
 
     private final CostShareParamService costShareParamService;
     private final CostShareParamService costShareParamService;
 
 
+    private final CostAccountShareDetailRepository costAccountShareDetailRepository;
+    private final CostAccountShareParamRepository costAccountShareParamRepository;
 
 
-    public CostAccountShareServiceImpl(ResponsibilityService responsibilityService, AccountingService accountingService, CostShareLevelService costShareLevelService, CostShareParamService costShareParamService) {
-        this.responsibilityService = responsibilityService;
-        this.accountingService = accountingService;
-        this.costShareLevelService = costShareLevelService;
-        this.costShareParamService = costShareParamService;
-    }
+
+//    public CostAccountShareServiceImpl(CostAccountShareParamService costAccountShareParamService,CostAccountShareDetailService costAccountShareDetailService,ResponsibilityService responsibilityService, AccountingService accountingService, CostShareLevelService costShareLevelService, CostShareParamService costShareParamService) {
+//        this.responsibilityService = responsibilityService;
+//        this.accountingService = accountingService;
+//        this.costShareLevelService = costShareLevelService;
+//        this.costShareParamService = costShareParamService;
+//        this.costAccountShareDetailService = costAccountShareDetailService;
+//        this.costAccountShareParamService = costAccountShareParamService;
+//    }
 
 
     /**
     /**
      * 分页查询责任中心成本对照相关数据
      * 分页查询责任中心成本对照相关数据
@@ -157,6 +163,8 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         costAccountShareRequest.setHospId(hospId);
         costAccountShareRequest.setHospId(hospId);
         costAccountShareRequest.setCreateTime(System.currentTimeMillis());
         costAccountShareRequest.setCreateTime(System.currentTimeMillis());
         baseMapper.insert(costAccountShareRequest);
         baseMapper.insert(costAccountShareRequest);
+        //提交分摊设置对应的会计科目
+        applyShareParamProportion(costAccountShareRequest.getId(),costAccountShareRequest.getAccountingCodes());
     }
     }
 
 
     /**
     /**
@@ -278,6 +286,38 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         BeanUtil.convertObj(accountShareEditDto, costAccountShare);
         BeanUtil.convertObj(accountShareEditDto, costAccountShare);
         costAccountShare.setId(costAccountShareEditDto.getId());
         costAccountShare.setId(costAccountShareEditDto.getId());
         baseMapper.updateById(costAccountShare);
         baseMapper.updateById(costAccountShare);
+        //提交分摊设置对应的会计科目
+        applyShareParamProportion(costAccountShare.getId(),costAccountShare.getAccountingCodes());
+    }
+
+    /**
+     * 提交分摊设置对应的会计科目
+     * @param accountShareId
+     * @param accountingCodes
+     */
+    public void applyShareParamProportion(Long accountShareId , String accountingCodes ){
+        if(StringUtils.isEmpty(accountingCodes)){
+            //先作废上次的数据
+            costAccountShareDetailRepository.delCostAccountShareDetail(accountShareId);
+            return;
+        }
+        List<String> accountingCodeList = Arrays.stream(accountingCodes.split(StrUtil.COMMA)).collect(Collectors.toList());
+        applyAccountShareDetail(accountShareId,accountingCodeList);
+    }
+
+
+    /**
+     * 提交分摊设置对应的会计科目
+     * @param accountShareId
+     * @param accountingCodeList
+     */
+    public void applyAccountShareDetail(Long accountShareId , List<String> accountingCodeList){
+        //先作废上次的数据
+        costAccountShareDetailRepository.delCostAccountShareDetail(accountShareId);
+        //保存新的分摊参数
+        List<CostAccountShareDetail> costAccountShareDetailList = accountingCodeList.stream().map(accountingCode ->
+                createCostAccountShareDetail(accountShareId,accountingCode)).collect(Collectors.toList());
+        costAccountShareDetailRepository.saveBatch(costAccountShareDetailList);
     }
     }
 
 
 
 
@@ -331,6 +371,8 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
             String paramList = JacksonUtil.obj2StrPretty(shareParamProportionVOList);
             String paramList = JacksonUtil.obj2StrPretty(shareParamProportionVOList);
 
 
             costAccountShare.setParamList(paramList);
             costAccountShare.setParamList(paramList);
+            //提交分摊参数
+            applyShareParamProportion(shareParamEditDto);
         } else {
         } else {
             costAccountShare.setParamList(null);
             costAccountShare.setParamList(null);
         }
         }
@@ -338,6 +380,20 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         baseMapper.updateById(costAccountShare);
         baseMapper.updateById(costAccountShare);
     }
     }
 
 
+    /**
+     * 提交分摊参数
+     * @param shareParamEditDto
+     */
+    public void applyShareParamProportion(ShareParamEditDto shareParamEditDto){
+        //先作废上次的数据
+        costAccountShareParamRepository.delCostAccountShareDetail(shareParamEditDto.getId());
+        //保存新的分摊参数
+        List<ShareParamProportionVO> newShareParamList = shareParamEditDto.getShareParamProportionVOList();
+        List<CostAccountShareParam> costAccountShareParamList = newShareParamList.stream().map(newShareParam ->
+                createCostAccountShareParam(shareParamEditDto.getId(),newShareParam.getShareParamCode(),newShareParam.getShareParamPopout())).collect(Collectors.toList());
+        costAccountShareParamRepository.saveBatch(costAccountShareParamList);
+    }
+
     /**
     /**
      * 获取责任中心成本表的分摊参数的集合
      * 获取责任中心成本表的分摊参数的集合
      *
      *
@@ -422,7 +478,8 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
             accountShareList.add(accountShareRequest);
             accountShareList.add(accountShareRequest);
         });
         });
         this.saveBatch(accountShareList);
         this.saveBatch(accountShareList);
-
+        //主表向明细表同步
+        synMainCostAccountShare(accountShareList);
     }
     }
 
 
     /**
     /**
@@ -500,6 +557,8 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void deleteByIds(List<Long> idList) {
     public void deleteByIds(List<Long> idList) {
         this.removeByIds(idList);
         this.removeByIds(idList);
+        costAccountShareDetailRepository.delCostAccountShareDetailList(idList);
+        costAccountShareParamRepository.delCostAccountShareDetailList(idList);
     }
     }
 
 
     @Override
     @Override
@@ -510,4 +569,123 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         );
         );
     }
     }
 
 
+    /**
+     *
+     * @param direction 1主表向明细表同步 2明细表向主表同步
+     * @param accountShareId
+     */
+    @Override
+    @Transactional(rollbackFor = Throwable.class, propagation = Propagation.REQUIRED)
+    public void synCostAccountShare(Integer direction, Long accountShareId) {
+        if(NumberConstant.ONE.equals(direction)){
+            synMainCostAccountShare(direction,accountShareId);
+        }
+    }
+
+    /**
+     * 主表向明细表同步
+     * @param direction
+     * @param accountShareId
+     */
+    public void synMainCostAccountShare(Integer direction, Long accountShareId) {
+        List<CostAccountShare> costAccountShareList = getCostAccountShareList(accountShareId);
+        if (CollectionUtils.isEmpty(costAccountShareList)) {
+            return;
+        }
+        synMainCostAccountShare(costAccountShareList);
+    }
+
+    /**
+     * 主表向明细表同步
+     * @param costAccountShareList
+     */
+    public void synMainCostAccountShare(List<CostAccountShare> costAccountShareList){
+        //生成分摊设置对应的会计科目对象
+        List<CostAccountShareDetail> fullCostAccountShareDetailList=new ArrayList<>();
+        //生成分摊设置对应的分摊参数对象
+        List<CostAccountShareParam> fullCostAccountShareParamList=new ArrayList<>();
+        //按主表的数据逐个转成会计科目对象和分摊参数对象
+        costAccountShareList.stream().forEach(costAccountShare->{
+            //处理会计科目
+            String accountingCodes = costAccountShare.getAccountingCodes();
+            if(!StringUtils.isEmpty(accountingCodes)){
+                List<String> accountingCodeList = Arrays.stream(accountingCodes.split(StrUtil.COMMA)).collect(Collectors.toList());
+                List<CostAccountShareDetail> costAccountShareDetailList = accountingCodeList.stream().map(accountingCode ->
+                        createCostAccountShareDetail(costAccountShare.getId(),accountingCode)).collect(Collectors.toList());
+                fullCostAccountShareDetailList.addAll(costAccountShareDetailList);
+            }
+
+            //处理分摊参数
+            String paramList = costAccountShare.getParamList();
+            if(!StringUtils.isEmpty(paramList)) {
+                List<ShareParamProportionVO> shareParamProportionVOS = JacksonUtil.str2ObjList(paramList, new TypeReference<List<ShareParamProportionVO>>() {
+                });
+                List<CostAccountShareParam> costAccountShareParamList = shareParamProportionVOS.stream().map(shareParamProportion ->
+                                createCostAccountShareParam(costAccountShare.getId(), shareParamProportion.getShareParamCode(), shareParamProportion.getShareParamPopout())).
+                        collect(Collectors.toList());
+                fullCostAccountShareParamList.addAll(costAccountShareParamList);
+            }
+        });
+        //作废原来的数据
+        List<Long> accountShareIdList = costAccountShareList.stream().map(CostAccountShare::getId).collect(Collectors.toList());
+        costAccountShareDetailRepository.delCostAccountShareDetailList(accountShareIdList);
+        costAccountShareParamRepository.delCostAccountShareDetailList(accountShareIdList);
+        //保存会计科目对象
+        if (!CollectionUtils.isEmpty(fullCostAccountShareDetailList)) {
+            costAccountShareDetailRepository.saveBatch(fullCostAccountShareDetailList,NumberConstant.ONE_HUNDRED);
+        }
+        //保存分摊参数对象
+        if (!CollectionUtils.isEmpty(fullCostAccountShareParamList)) {
+            costAccountShareParamRepository.saveBatch(fullCostAccountShareParamList,NumberConstant.ONE_HUNDRED);
+        }
+    }
+
+    /**
+     * 创建分摊设置对应的会计科目对象
+     * @param accountShareId
+     * @param accountingCode
+     * @return
+     */
+    public CostAccountShareDetail createCostAccountShareDetail(Long accountShareId,String accountingCode){
+        CostAccountShareDetail costAccountShareDetail = new CostAccountShareDetail();
+        costAccountShareDetail.setHospId(UserContext.getHospId());
+        costAccountShareDetail.setAccountShareId(accountShareId);
+        costAccountShareDetail.setAccountingCode(accountingCode);
+        costAccountShareDetail.setCreateUser(String.valueOf(UserContext.getCurrentUser().getId()));
+        costAccountShareDetail.setCreateTime(new Date());
+        return costAccountShareDetail;
+    }
+
+    /**
+     * 创建分摊设置对应的分摊参数对象
+     * @param accountShareId
+     * @param shareParamCode
+     * @param shareParamProportion
+     * @return
+     */
+    public CostAccountShareParam createCostAccountShareParam(Long accountShareId,String shareParamCode,BigDecimal shareParamProportion) {
+        CostAccountShareParam costAccountShareParam = new CostAccountShareParam();
+        costAccountShareParam.setHospId(UserContext.getHospId());
+        costAccountShareParam.setAccountShareId(accountShareId);
+        costAccountShareParam.setShareParamCode(shareParamCode);
+        costAccountShareParam.setShareParamProportion(shareParamProportion);
+        costAccountShareParam.setCreateUser(String.valueOf(UserContext.getCurrentUser().getId()));
+        costAccountShareParam.setCreateTime(new Date());
+        return costAccountShareParam;
+    }
+
+    /**
+     * 获取所有的分摊参数配置
+     * @return
+     */
+    public  List<CostAccountShare> getCostAccountShareList(Long accountShareId){
+        LambdaQueryWrapper<CostAccountShare> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CostAccountShare::getHospId, UserContext.getHospId());
+        queryWrapper.eq(CostAccountShare::getDeleteTime, NumberConstant.ZERO);
+        if(!ObjectUtils.isEmpty(accountShareId)){
+            queryWrapper.eq(CostAccountShare::getId, accountShareId);
+        }
+        return baseMapper.selectList(queryWrapper);
+    }
+
 }
 }

+ 13 - 0
src/main/java/com/kcim/web/CostAccountShareController.java

@@ -152,4 +152,17 @@ public class CostAccountShareController {
         List<Responsibility> responsibilityList= costAccountShareService.getResponsibilityCalType(accountShareId,hospId);
         List<Responsibility> responsibilityList= costAccountShareService.getResponsibilityCalType(accountShareId,hospId);
         return Result.ok(responsibilityList);
         return Result.ok(responsibilityList);
     }
     }
+
+    /**
+     * 同步分摊参数设置
+     * @param direction 1主表向明细表同步 2明细表向主表同步
+     * @return
+     */
+    @GetMapping("/synCostAccountShare")
+    @ApiOperation("同步分摊参数设置")
+    public Result synCostAccountShare(@RequestParam(defaultValue = "1") Integer direction,
+                                      @RequestParam(required = false) Long accountShareId){
+        costAccountShareService.synCostAccountShare(direction,accountShareId);
+        return Result.ok();
+    }
 }
 }