Explorar el Código

Merge branch 'master' of huangrui/CostAccount into dev

lijiaxi hace 4 años
padre
commit
82d69cf368
Se han modificado 28 ficheros con 865 adiciones y 119 borrados
  1. 1 1
      src/main/java/com/imed/costaccount/common/config/CorsConfig.java
  2. 1 1
      src/main/java/com/imed/costaccount/common/constants/Constant.java
  3. 16 0
      src/main/java/com/imed/costaccount/mapper/CostIncomeFileMapper.java
  4. 26 2
      src/main/java/com/imed/costaccount/mapper/CostIncomeGroupMapper.java
  5. 16 0
      src/main/java/com/imed/costaccount/mapper/IncomeCollectionMapper.java
  6. 77 0
      src/main/java/com/imed/costaccount/model/CostIncomeFile.java
  7. 19 2
      src/main/java/com/imed/costaccount/model/CostIncomeGroup.java
  8. 8 0
      src/main/java/com/imed/costaccount/model/CostNumberBedSet.java
  9. 106 0
      src/main/java/com/imed/costaccount/model/IncomeCollection.java
  10. 10 0
      src/main/java/com/imed/costaccount/model/dto/CostNumberBedSetSaveDto.java
  11. 31 0
      src/main/java/com/imed/costaccount/model/vo/CollectionVO.java
  12. 8 0
      src/main/java/com/imed/costaccount/model/vo/CostNumberBedSetVO.java
  13. 16 0
      src/main/java/com/imed/costaccount/service/CostIncomeFileService.java
  14. 1 1
      src/main/java/com/imed/costaccount/service/CostIncomeGroupService.java
  15. 45 0
      src/main/java/com/imed/costaccount/service/IncomeCollectionService.java
  16. 2 2
      src/main/java/com/imed/costaccount/service/impl/CostAccountShareServiceImpl.java
  17. 14 0
      src/main/java/com/imed/costaccount/service/impl/CostIncomeFileServiceImpl.java
  18. 123 86
      src/main/java/com/imed/costaccount/service/impl/CostIncomeGroupServiceImpl.java
  19. 8 19
      src/main/java/com/imed/costaccount/service/impl/CostNumberBedSetServiceImpl.java
  20. 147 0
      src/main/java/com/imed/costaccount/service/impl/IncomeCollectionServiceImpl.java
  21. 1 1
      src/main/java/com/imed/costaccount/service/impl/MenuServiceImpl.java
  22. 74 0
      src/main/java/com/imed/costaccount/web/CostIncomeFileController.java
  23. 3 4
      src/main/java/com/imed/costaccount/web/ExcelController.java
  24. 55 0
      src/main/java/com/imed/costaccount/web/IncomeCollectionController.java
  25. 23 0
      src/main/resources/mapper/CostIncomeFileMapper.xml
  26. 4 0
      src/main/resources/mapper/CostIncomeGroupMapper.xml
  27. 2 0
      src/main/resources/mapper/CostNumberBedSetMapper.xml
  28. 28 0
      src/main/resources/mapper/IncomeCollectionMapper.xml

+ 1 - 1
src/main/java/com/imed/costaccount/common/config/CorsConfig.java

@@ -46,7 +46,7 @@ public class CorsConfig implements WebMvcConfigurer {
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
         registry.addResourceHandler("/**")
-                .addResourceLocations("classpath:/static/**")
+                .addResourceLocations("classpath:/static/**","/doc.html")
                 .addResourceLocations(fileLocal);//映射本地静态资源
     }
 

+ 1 - 1
src/main/java/com/imed/costaccount/common/constants/Constant.java

@@ -23,7 +23,7 @@ public class Constant {
     /**
      * 每页显示记录数
      */
-    public static final String LIMIT = "limit";
+    public static final String LIMIT = "limit 1";
     /**
      * 排序字段
      */

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.CostIncomeFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 文件上传记录
+ * 
+ * @author KCYG
+ * @date 2021-08-10 14:42:20
+ */
+@Mapper
+public interface CostIncomeFileMapper extends BaseMapper<CostIncomeFile> {
+	
+}

+ 26 - 2
src/main/java/com/imed/costaccount/mapper/CostIncomeGroupMapper.java

@@ -2,24 +2,48 @@ package com.imed.costaccount.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.imed.costaccount.model.CostIncomeGroup;
+import com.imed.costaccount.model.vo.CollectionVO;
 import com.imed.costaccount.model.vo.CostIncomeGroupAllAmountVO;
 import com.imed.costaccount.model.vo.CostIncomeGroupBeforeVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 /**
  * 收入归集
- * 
+ *
  * @author KCYG
  * @date 2021-08-03 16:15:20
  */
 @Mapper
 public interface CostIncomeGroupMapper extends BaseMapper<CostIncomeGroup> {
     /**
-     *  按照开单科室  执行科室 成本项目进行筛选相同的金额汇总
+     * 按照开单科室  执行科室 成本项目进行筛选相同的金额汇总
+     *
      * @param costIncomeGroupBeforeVOList
      * @return
      */
     List<CostIncomeGroupAllAmountVO> countMoney(List<CostIncomeGroupBeforeVO> costIncomeGroupBeforeVOList);
+
+    /**
+     * 获取收入归集分页列表
+     *
+     * @param startIndex 起始页
+     * @param pageSize   页码数据大小
+     * @param date       日期 yyyy-MM-dd
+     * @param hospId     医院id
+     * @return {@link CollectionVO}
+     */
+    List<CollectionVO> getCollections(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize,
+                                      @Param("date") String date, @Param("hospId") Long hospId);
+
+    /**
+     * 获取收入归集分页列表
+     *
+     * @param date       日期 yyyy-MM-dd
+     * @param hospId     医院id
+     * @return 获取收入归集分页列表的总数
+     */
+    int getCollectionCount(@Param("date") String date, @Param("hospId") Long hospId);
 }

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.mapper;
+
+import com.imed.costaccount.model.IncomeCollection;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 归集后列表
+ * 
+ * @author huangrui
+ * @date 2021-08-09 15:26:28
+ */
+@Mapper
+public interface IncomeCollectionMapper extends BaseMapper<IncomeCollection> {
+	
+}

+ 77 - 0
src/main/java/com/imed/costaccount/model/CostIncomeFile.java

@@ -0,0 +1,77 @@
+package com.imed.costaccount.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;
+
+/**
+ * 文件上传记录
+ * 
+ * @author KCYG
+ * @email KCYG@xinxicom
+ * @date 2021-08-10 14:42:20
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_income_file")
+public class CostIncomeFile implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键  文件编号
+	 */
+	@TableId
+	private Long id;
+	/**
+	 * 文件类型
+	 */
+	private String fileType;
+	/**
+	 * 文件名称
+	 */
+	private Integer fileName;
+	/**
+	 * 文件上传路径
+	 */
+	private String fileUrl;
+	/**
+	 * 成功导入记录数
+	 */
+	private Integer successAmount;
+	/**
+	 * 总记录数
+	 */
+	private Integer totalAmount;
+	/**
+	 * 医院Id
+	 */
+	private Long hospId;
+	/**
+	 * 用户Id
+	 */
+	private Long userId;
+	/**
+	 * 用户名称
+	 */
+	private String userName;
+	/**
+	 * 错误详情
+	 */
+	private String errorList;
+	/**
+	 * 创建时间13位时间戳
+	 */
+	private Long createTime;
+	/**
+	 * 删除时间,如果存在表示已删除13位时间戳
+	 */
+	private Long deleteTime;
+
+}

+ 19 - 2
src/main/java/com/imed/costaccount/model/CostIncomeGroup.java

@@ -9,13 +9,14 @@ import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 收入归集
  * 
  * @author KCYG
  * @email KCYG@xinxicom
- * @date 2021-08-10 09:54:43
+ * @date 2021-08-10 13:50:52
  */
 @Data
 @Accessors(chain = true)
@@ -34,18 +35,34 @@ public class CostIncomeGroup implements Serializable {
 	 * 开单科室的Code
 	 */
 	private String openDepartmentCode;
+	/**
+	 * 开单科室名称
+	 */
+	private String openDepartmentName;
 	/**
 	 * 开单责任中心的Code
 	 */
 	private String openResponsibilityCode;
+	/**
+	 * 开单责任中心名称
+	 */
+	private String openResponsibilityName;
 	/**
 	 * 执行科室的Code
 	 */
 	private String startDepartmentCode;
+	/**
+	 * 执行科室名称
+	 */
+	private String startDepartmentName;
 	/**
 	 * 执行责任中心的Code
 	 */
 	private String startResponsibilityCode;
+	/**
+	 * 执行责任中心名称
+	 */
+	private String startResponsibilityName;
 	/**
 	 * 成本项目的Code
 	 */
@@ -121,7 +138,7 @@ public class CostIncomeGroup implements Serializable {
 	/**
 	 * 费用发生时间
 	 */
-	private Integer feeDatetime;
+	private Date feeDatetime;
 	/**
 	 * 年份
 	 */

+ 8 - 0
src/main/java/com/imed/costaccount/model/CostNumberBedSet.java

@@ -50,6 +50,10 @@ public class CostNumberBedSet implements Serializable {
 	 * 收入字段名称
 	 */
 	private String incomeFileName;
+	/**
+	 * 收入字段报表类型
+	 */
+	private Integer incomeFileType;
 	/**
 	 * 成本对应 对应的是报表项目的编号
 	 */
@@ -58,6 +62,10 @@ public class CostNumberBedSet implements Serializable {
 	 * 成本对应名称
 	 */
 	private String costCorrespondingName;
+	/**
+	 * 成本对应字段报表类型
+	 */
+	private Integer costFileType;
 	/**
 	 * 医院Id
 	 */

+ 106 - 0
src/main/java/com/imed/costaccount/model/IncomeCollection.java

@@ -0,0 +1,106 @@
+package com.imed.costaccount.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.Version;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * 归集后列表
+ *
+ * @author huangrui
+ * @email
+ * @date 2021-08-09 15:26:28
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("cost_income_collection")
+public class IncomeCollection implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * 年份
+     */
+    private Integer year;
+    /**
+     * 月份
+     */
+    private Integer month;
+    /**
+     * 科室代码
+     */
+    private String departmentCode;
+    /**
+     * 科室名称
+     */
+    private String departmentName;
+    /**
+     * 责任中心代码
+     */
+    private String responsibilityCode;
+    /**
+     * 责任中心名称
+     */
+    private String responsibilityName;
+    /**
+     * 会计中心代码
+     */
+    private String accountingCode;
+    /**
+     * 会计中心名称
+     */
+    private String accountingName;
+    /**
+     * 成本项目代码
+     */
+    private String productCode;
+    /**
+     * 成本项目名称
+     */
+    private String productName;
+    /**
+     * 是否直接收入 0.不是,1.是
+     */
+    private Integer isDirectIncome;
+    /**
+     * 金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 归属文件
+     */
+    private Long fileId;
+
+    /**
+     * 医院id
+     */
+    private Long hospId;
+
+    /**
+     * 创建时间
+     */
+    private Long createTime;
+    /**
+     * 删除时间
+     */
+    @TableLogic(value = "0", delval = "UNIX_TIMESTAMP(NOW()) * 1000")
+    private Long deleteTime;
+
+}

+ 10 - 0
src/main/java/com/imed/costaccount/model/dto/CostNumberBedSetSaveDto.java

@@ -42,5 +42,15 @@ public class CostNumberBedSetSaveDto {
 
     @ApiModelProperty(name = "costCorrespondingName",value = "成本对应名称")
     private String costCorrespondingName;
+    /**
+     * 收入报表类型
+     */
+    @NotNull(message = "收入报表类型不能为空")
+    private Integer incomeFileType;
+    /**
+     * 成本对饮报表类型
+     */
+    @NotNull(message = "成本对应报表类型不能为空")
+    private Integer costFileType;
 
 }

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

@@ -0,0 +1,31 @@
+package com.imed.costaccount.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 收入归集列表
+ */
+@Data
+@ApiModel("收入归集视图对象")
+public class CollectionVO {
+
+//    @ApiModelProperty(name = "fileId",value = "文件id,上传时文件id")
+//    private Long fileId;
+
+    @ApiModelProperty(name = "year",value = "年份")
+    private Integer year;
+
+    @ApiModelProperty(name = "month",value = "月份")
+    private Integer month;
+
+    @ApiModelProperty(name = "amount",value = "金额")
+    private BigDecimal amount;
+
+    @ApiModelProperty(name = "isCollection",value = "是否已归集,true.是,0.否")
+    private Boolean isCollection;
+
+}

+ 8 - 0
src/main/java/com/imed/costaccount/model/vo/CostNumberBedSetVO.java

@@ -39,4 +39,12 @@ public class CostNumberBedSetVO {
 
     @ApiModelProperty(name = "costCorrespondingName",value = "成本对应名称")
     private String costCorrespondingName;
+    /**
+     * 收入报表类型
+     */
+    private Integer incomeFileType;
+    /**
+     * 成本对饮报表类型
+     */
+    private Integer costFileType;
 }

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

@@ -0,0 +1,16 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.model.CostIncomeFile;
+
+/**
+ * 文件上传记录
+ *
+ * @author KCYG
+ * @email KCYG@xinxicom
+ * @date 2021-08-10 14:42:20
+ */
+public interface CostIncomeFileService extends IService<CostIncomeFile> {
+
+}
+

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

@@ -35,6 +35,6 @@ public interface CostIncomeGroupService extends IService<CostIncomeGroup> {
      * @param file
      * @return
      */
-    Result importIncomeGroup(List<List<Object>> read, Long hospId, MultipartFile file);
+    Result importIncomeGroup(List<List<Object>> read, Long hospId, MultipartFile file,Integer year,Integer month);
 }
 

+ 45 - 0
src/main/java/com/imed/costaccount/service/IncomeCollectionService.java

@@ -0,0 +1,45 @@
+package com.imed.costaccount.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.model.IncomeCollection;
+
+/**
+ * 归集后列表
+ *
+ * @author huangrui
+ * @email 
+ * @date 2021-08-09 15:26:28
+ */
+public interface IncomeCollectionService extends IService<IncomeCollection> {
+
+    /**
+     * 获取收入归集分页列表
+     *
+     * @param current 当前页
+     * @param pageSize 页码数据大小
+     * @param date 日期 yyyy-MM-dd
+     * @param hospId 医院id
+     * @return {@link PageUtils} 分页对象
+     */
+    PageUtils getCollections(Integer current, Integer pageSize, String date, Long hospId);
+
+    /**
+     * 按年月归集数据
+     *
+     * @param year 年 数字类型
+     * @param month 月 数字
+     * @param hospId 医院id
+     */
+    void collect(Integer year, Integer month, Long hospId);
+
+    /**
+     * 按年月撤销归集
+     *
+     * @param year 年 数字类型
+     * @param month 月 数字
+     * @param hospId 医院id
+     */
+    void cancelCollect(Integer year, Integer month, Long hospId);
+}
+

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

@@ -119,8 +119,8 @@ public class CostAccountShareServiceImpl extends ServiceImpl<CostAccountShareMap
         // 检验输入的责任中心是否存在
         List<CostAccountShare> costAccountShareList = baseMapper.selectList(new QueryWrapper<CostAccountShare>().lambda()
                 .eq(CostAccountShare::getHospId, hospId));
-        Map<Long, List<CostAccountShare>> map = costAccountShareList.stream().collect(Collectors.groupingBy(CostAccountShare::getResponsibilityId));
-        if (!CollectionUtils.isEmpty(map.get(costAccountShareSaveDto.getResponsibilityId()))){
+        Map<Long, CostAccountShare> map = costAccountShareList.stream().collect(Collectors.toMap(CostAccountShare::getResponsibilityId,synOe->synOe));
+        if (Objects.nonNull(map.get(costAccountShareSaveDto.getResponsibilityId()))){
             throw new CostException(500,"添加的责任中心已存在");
         }
         CostAccountShare costAccountShareRequest = BeanUtil.convertObj(costAccountShareSaveDto, CostAccountShare.class);

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

@@ -0,0 +1,14 @@
+package com.imed.costaccount.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.imed.costaccount.mapper.CostIncomeFileMapper;
+import com.imed.costaccount.model.CostIncomeFile;
+import com.imed.costaccount.service.CostIncomeFileService;
+import org.springframework.stereotype.Service;
+
+
+@Service("costIncomeFileService")
+public class CostIncomeFileServiceImpl extends ServiceImpl<CostIncomeFileMapper, CostIncomeFile> implements CostIncomeFileService {
+
+
+}

+ 123 - 86
src/main/java/com/imed/costaccount/service/impl/CostIncomeGroupServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.util.*;
 import com.imed.costaccount.constants.NumberConstant;
+import com.imed.costaccount.enums.DateStyleEnum;
 import com.imed.costaccount.enums.ErrorCodeEnum;
 import com.imed.costaccount.mapper.CostIncomeGroupMapper;
 import com.imed.costaccount.model.*;
@@ -89,12 +90,15 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
         List<CostIncomeGroup> records = pages.getRecords();
         List<CostIncomeGroupBeforeVO> costIncomeGroupBeforeVOList = BeanUtil.convertList(records, CostIncomeGroupBeforeVO.class);
         // 查询所有的责任中心 科室 会计科目  成本项目的数据  处理名字
+        // TODO 修改直接获取名字
         setCodeName(hospId, costIncomeGroupBeforeVOList);
         // 进行金额合并
         List<CostIncomeGroupAllAmountVO> costIncomeGroupAllAmountVoS = baseMapper.countMoney(costIncomeGroupBeforeVOList);
         //  对,的金额进行合并
+        BigDecimal totalAmount= null;
         costIncomeGroupAllAmountVoS.forEach(i -> {
             String allMoney = i.getAllMoney();
+
             if (allMoney.contains(StrUtil.COMMA)) {
                 // 存在,在进行求和
                 long sum;
@@ -102,6 +106,7 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
                 sum = list.stream().mapToLong(m -> m).sum();
                 i.setAmount(BigDecimal.valueOf(sum));
             }
+            //TODO 统计总金额
         });
         PageUtils pageUtils = new PageUtils(pages);
         pageUtils.setList(costIncomeGroupAllAmountVoS);
@@ -118,7 +123,7 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
      */
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public Result importIncomeGroup(List<List<Object>> list, Long hospId, MultipartFile file) {
+    public Result importIncomeGroup(List<List<Object>> list, Long hospId, MultipartFile file,Integer year,Integer month) {
         // 移除前几行的抬头内容  list的大小对应的就是行数的大小
         for (int i = list.size() - 1; i >= 0; i--) {
             if (i == NumberConstant.ZERO || i == NumberConstant.ONE || i == NumberConstant.TWO || i == NumberConstant.THREE) {
@@ -126,7 +131,6 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
             }
         }
         log.info("读取的数据为:{}", list);
-        List<CostIncomeGroup> costIncomeGroupList = new ArrayList<>();
         List<IncomeErrorMessage> incomeErrorMessageList = new ArrayList<>();
         //获取所有的科室 成本项目 责任中心 会计科目
         Map<String, Department> departmentMap = departmentService.list(new QueryWrapper<Department>().lambda().eq(Department::getHospId, hospId)).stream().collect(Collectors.toMap(k -> k.getDepartmentCode() + k.getDepartmentName(), synOe -> synOe));
@@ -145,52 +149,44 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
         Map<Long, Long> responsibilityDepMap = responsibilityDepartmentList.stream().collect(Collectors.toMap(ResponsibilityDepartment::getDepartmentId, ResponsibilityDepartment::getResponsibilityId));
         Map<Long, Long> accountProMap = accountingProductList.stream().collect(Collectors.toMap(AccountingProduct::getProductId, AccountingProduct::getAccountingId));
         List<CostIncomeGroup> costIncomeGroupArrayList = new ArrayList<>();
-        checkImportData(list, incomeErrorMessageList,costIncomeGroupArrayList, departmentMap, productMap, responsibilityMap, accountingMap, responsibilityDepMap, accountProMap);
-
-        if (!CollectionUtils.isEmpty(incomeErrorMessageList)) {
-            // 说明存在错误数据
-            // TODO 不把数据保存在收入归集表里面  直将信息保存在提交记录里面
+        // 检验数据  TODO 缺少文件Id
+        checkImportData(list, incomeErrorMessageList, costIncomeGroupArrayList, departmentMap, productMap, responsibilityMap, accountingMap, responsibilityDepMap, accountProMap,hospId,year,month);
 
-        } else {
-            // 实现数据的存储
-            for (int i = 0; i < list.size(); i++) {
-                CostIncomeGroup costIncomeGroup = new CostIncomeGroup();
-                List<Object> data = list.get(i);
-                // 成本项目的代码和名称
-                String productCode = data.get(0).toString();
-                // 开单科室 执行科室的代码和名称
-                String openDepartmentCode = data.get(3).toString();
-                String startDepartmentCode = data.get(5).toString();
-                String beforeMoney = data.get(6).toString();
-            }
-        }
+        // 文件上传
         String uploadFile = uploadFile(file, UserContext.getCurrentUser());
-        if (StrUtil.isNotBlank(uploadFile)){
-            // 文件上传成功  将文件记录保存
+        // 上传记录保存
+        if (StrUtil.isBlank(uploadFile)){
+            throw new CostException(500,"文件上传异常");
         }
+
+        if (CollectionUtils.isEmpty(incomeErrorMessageList)) {
+            // 才将数据保存到收入归集里面
+        }
+
         return Result.ok();
     }
 
     /**
      * 检验数据
-     *  @param list                   表单数据
-     * @param incomeErrorMessageList 存储错误信息的集合
+     *  @param list                     表单数据
+     * @param incomeErrorMessageList   存储错误信息的集合
      * @param costIncomeGroupArrayList
-     * @param departmentMap          科室Map
-     * @param productMap             成本项目map
-     * @param responsibilityMap      责任中心Map
-     * @param accountingMap          会计科目Map
-     * @param responsibilityDepMap   责任中心科室对照Map
-     * @param accountProMap          责任中心Map
+     * @param departmentMap            科室Map
+     * @param productMap               成本项目map
+     * @param responsibilityMap        责任中心Map
+     * @param accountingMap            会计科目Map
+     * @param responsibilityDepMap     责任中心科室对照Map
+     * @param accountProMap            责任中心Map
+     * @param hospId
      */
-    private void checkImportData(List<List<Object>> list, List<IncomeErrorMessage> incomeErrorMessageList, List<CostIncomeGroup> costIncomeGroupArrayList, Map<String, Department> departmentMap, Map<String, Product> productMap, Map<Long, Responsibility> responsibilityMap, Map<Long, Accounting> accountingMap, Map<Long, Long> responsibilityDepMap, Map<Long, Long> accountProMap) {
+    private void checkImportData(List<List<Object>> list, List<IncomeErrorMessage> incomeErrorMessageList, List<CostIncomeGroup> costIncomeGroupArrayList, Map<String, Department> departmentMap, Map<String, Product> productMap, Map<Long, Responsibility> responsibilityMap, Map<Long, Accounting> accountingMap, Map<Long, Long> responsibilityDepMap, Map<Long, Long> accountProMap, Long hospId,Integer year,Integer month) {
         for (int i = 0; i < list.size(); i++) {
             CostIncomeGroup costIncomeGroup = new CostIncomeGroup();
             // 用来检验数据合理性的循环
             IncomeErrorMessage incomeErrorMessage = new IncomeErrorMessage();
             List<Object> data = list.get(i);
             log.info("用户输入的数据是{}", data);
-            Object money = data.get(data.size() - 1);
+            // TODO 暂时不走循环  直接获取数据的处理
             // 成本项目的代码和名称
             String productCode = data.get(0).toString();
             String productName = data.get(1).toString();
@@ -199,10 +195,12 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
             String openDepartmentCode = data.get(3).toString();
             String startDepartmentName = data.get(4).toString();
             String startDepartmentCode = data.get(5).toString();
-            BigDecimal beforeMoney = (BigDecimal)data.get(6);
-            if (!Objects.isNull(money) && !NumberConstant.ZERO.equals(Integer.parseInt(money.toString()))) {
+            BigDecimal beforeMoney = (BigDecimal) data.get(15);
+            boolean checkNull = Objects.isNull(beforeMoney);
+            boolean checkOne = NumberConstant.ZERO.equals(Integer.parseInt(beforeMoney.toString()));
+            if (!checkNull && !checkOne) {
                 // 要求这一行的数据必须全部填写
-                for (int j = 0; j < data.size(); j++) {
+                for (int j = 0; j < NumberConstant.FIVE; j++) {
                     if (Objects.isNull(data.get(j))) {
                         incomeErrorMessage.setTotal(i);
                         int row = i + 1;
@@ -211,70 +209,108 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
                         incomeErrorMessageList.add(incomeErrorMessage);
                     }
                 }
-                // TODO 暂时不走循环  直接获取数据的处理
-                // 检验数据是否存在
-                Product product = productMap.get(productCode + productName);
-                Department department = departmentMap.get(openDepartmentCode + openDepartmentName);
-                Department department1 = departmentMap.get(startDepartmentCode + startDepartmentName);
-                if (Objects.isNull(product)) {
-                    incomeErrorMessage.setTotal(i);
-                    incomeErrorMessage.setErrMessage("代码:" + productCode + " 名称:" + productName + "成本项目不存在");
-                    incomeErrorMessageList.add(incomeErrorMessage);
-                } else {
-                    // 检验对应的会计科目是否存在
-                    Long id = product.getId();
-                    Long accountId = accountProMap.get(id);
-                    if (Objects.isNull(accountingMap.get(accountId))) {
+            }
+            // 检验收入成本项目数据是否存在
+            Product product = productMap.get(productCode + productName);
+            Department department = departmentMap.get(openDepartmentCode + openDepartmentName);
+            Department department1 = departmentMap.get(startDepartmentCode + startDepartmentName);
+            if (checkNull || checkOne ){
+                if (StrUtil.isNotBlank(productCode) && StrUtil.isNotBlank(productName)){
+                    if (Objects.isNull(product)) {
                         incomeErrorMessage.setTotal(i);
-                        incomeErrorMessage.setErrMessage("代码:" + productCode + " 名称:" + productName + "成本项目对应的会计科目不存在");
+                        incomeErrorMessage.setErrMessage("代码:" + productCode + " 名称:" + productName + "成本项目不存在");
                         incomeErrorMessageList.add(incomeErrorMessage);
-                    }else{
-                        costIncomeGroup.setProductCode(productCode);
-                        costIncomeGroup.setAccountCode(accountingMap.get(accountId).getAccountingCode());
+                    } else {
+                        // 检验对应的会计科目是否存在
+                        Long id = product.getId();
+                        Long accountId = accountProMap.get(id);
+                        if (Objects.isNull(accountingMap.get(accountId))) {
+                            incomeErrorMessage.setTotal(i);
+                            incomeErrorMessage.setErrMessage("代码:" + productCode + " 名称:" + productName + "成本项目对应的会计科目不存在");
+                            incomeErrorMessageList.add(incomeErrorMessage);
+                        } else {
+                            costIncomeGroup.setProductCode(productCode);
+                            costIncomeGroup.setProductName(productName);
+                            costIncomeGroup.setAccountCode(accountingMap.get(accountId).getAccountingCode());
+                            costIncomeGroup.setAccountName(accountingMap.get(accountId).getAccountingName());
+                        }
                     }
+                }else{
+                    costIncomeGroup.setProductCode(null);
+                    costIncomeGroup.setProductName(null);
+                    costIncomeGroup.setAccountCode( null);
+                    costIncomeGroup.setAccountName(null);
                 }
-                // 开单科室
-                if (Objects.isNull(department)) {
-                    incomeErrorMessage.setTotal(i);
-                    incomeErrorMessage.setErrMessage("代码:" + productCode + " 名称:" + productName + "开单科室不存在");
-                    incomeErrorMessageList.add(incomeErrorMessage);
-                } else {
-                    Long id = department.getId();
-                    Long responsibilityId = responsibilityDepMap.get(id);
-                    if (Objects.isNull(responsibilityMap.get(responsibilityId))) {
+            }
+            // 检验开单科室
+            if (checkNull || checkOne ){
+                if (StrUtil.isNotBlank(openDepartmentCode) && StrUtil.isNotBlank(openDepartmentName)){
+                    // 开单科室
+                    if (Objects.isNull(department)) {
                         incomeErrorMessage.setTotal(i);
-                        incomeErrorMessage.setErrMessage("代码:" + openDepartmentCode + " 名称:" + openDepartmentName + "科室对应的责任中心不存在");
+                        incomeErrorMessage.setErrMessage("代码:" + productCode + " 名称:" + productName + "开单科室不存在");
                         incomeErrorMessageList.add(incomeErrorMessage);
-                    }else {
-                        costIncomeGroup.setOpenDepartmentCode(openDepartmentCode);
-                        costIncomeGroup.setOpenResponsibilityCode(responsibilityMap.get(responsibilityId).getResponsibilityCode());
+                    } else {
+                        Long id = department.getId();
+                        Long responsibilityId = responsibilityDepMap.get(id);
+                        if (Objects.isNull(responsibilityMap.get(responsibilityId))) {
+                            incomeErrorMessage.setTotal(i);
+                            incomeErrorMessage.setErrMessage("代码:" + openDepartmentCode + " 名称:" + openDepartmentName + "科室对应的责任中心不存在");
+                            incomeErrorMessageList.add(incomeErrorMessage);
+                        } else {
+                            costIncomeGroup.setOpenDepartmentCode(openDepartmentCode);
+                            costIncomeGroup.setOpenDepartmentName(openDepartmentName);
+                            costIncomeGroup.setOpenResponsibilityCode(responsibilityMap.get(responsibilityId).getResponsibilityCode());
+                            costIncomeGroup.setOpenResponsibilityCode(responsibilityMap.get(responsibilityId).getResponsibilityName());
+                        }
                     }
+                }else {
+                    costIncomeGroup.setOpenDepartmentCode(null);
+                    costIncomeGroup.setOpenDepartmentName(null);
+                    costIncomeGroup.setOpenResponsibilityCode(null);
+                    costIncomeGroup.setOpenResponsibilityName(null);
                 }
-                //执行科室
-                if (Objects.isNull(department1)) {
-                    incomeErrorMessage.setTotal(i);
-                    incomeErrorMessage.setErrMessage("代码:" + productCode + " 名称:" + productName + "执行科室不存在");
-                    incomeErrorMessageList.add(incomeErrorMessage);
-                } else {
-                    Long id = department1.getId();
-                    Long responsibilityId = responsibilityDepMap.get(id);
-                    if (Objects.isNull(responsibilityMap.get(responsibilityId))) {
+            }
+            // 检验执行科室
+            if (checkNull || checkOne ){
+                if (StrUtil.isNotBlank(startDepartmentCode) && StrUtil.isNotBlank(startDepartmentName)){
+                    //执行科室
+                    if (Objects.isNull(department1)) {
                         incomeErrorMessage.setTotal(i);
-                        incomeErrorMessage.setErrMessage("代码:" + openDepartmentCode + " 名称:" + openDepartmentName + "科室对应的责任中心不存在");
+                        incomeErrorMessage.setErrMessage("代码:" + productCode + " 名称:" + productName + "执行科室不存在");
                         incomeErrorMessageList.add(incomeErrorMessage);
-                    }else {
-                        costIncomeGroup.setStartDepartmentCode(startDepartmentCode);
-                        costIncomeGroup.setStartResponsibilityCode(responsibilityMap.get(responsibilityId).getResponsibilityCode());
+                    } else {
+                        Long id = department1.getId();
+                        Long responsibilityId = responsibilityDepMap.get(id);
+                        if (Objects.isNull(responsibilityMap.get(responsibilityId))) {
+                            incomeErrorMessage.setTotal(i);
+                            incomeErrorMessage.setErrMessage("代码:" + openDepartmentCode + " 名称:" + openDepartmentName + "科室对应的责任中心不存在");
+                            incomeErrorMessageList.add(incomeErrorMessage);
+                        } else {
+                            costIncomeGroup.setStartDepartmentCode(startDepartmentCode);
+                            costIncomeGroup.setOpenDepartmentName(startDepartmentName);
+                            costIncomeGroup.setStartResponsibilityCode(responsibilityMap.get(responsibilityId).getResponsibilityCode());
+                            costIncomeGroup.setStartResponsibilityCode(responsibilityMap.get(responsibilityId).getResponsibilityName());
+                        }
                     }
-                }
-                costIncomeGroup.setAmount(beforeMoney);
-            }else {
-                // 最后一位是0 或者是null的情况
-                if (StrUtil.isNotBlank(productCode)){
-                    costIncomeGroup.setProductCode(productCode);
-//                    costIncomeGroup.setAccountCode(accountingMap.get(accountId))
+                }else {
+                    costIncomeGroup.setStartDepartmentCode(null);
+                    costIncomeGroup.setStartDepartmentName(null);
+                    costIncomeGroup.setStartResponsibilityCode(null);
+                    costIncomeGroup.setStartResponsibilityName(null);
                 }
             }
+            costIncomeGroup.setDoctorNumber(Long.parseLong(data.get(6).toString())).setDoctorName(data.get(7).toString())
+                    .setPatientId(Long.parseLong(data.get(8).toString())).setOutpatientId(Long.parseLong(data.get(9).toString()))
+                    .setPatientName(data.get(10).toString()).setPatientFee(data.get(11).toString()).setReceiptFee(data.get(12).toString())
+                    .setTotalNumber(Integer.parseInt(data.get(13).toString())).setUnit(data.get(14).toString())
+                    .setFeeDatetime(DateUtils.StringToDate(data.get(16).toString(), DateStyleEnum.YYYY_MM_DD_HH_MM_SS_EN));
+            //
+            costIncomeGroup.setHospId(hospId);
+            costIncomeGroup.setCreateTime(System.currentTimeMillis());
+            costIncomeGroup.setDateYear(year);
+            costIncomeGroup.setDateMonth(month);
+            costIncomeGroup.setAmount(beforeMoney);
         }
     }
 
@@ -304,6 +340,7 @@ public class CostIncomeGroupServiceImpl extends ServiceImpl<CostIncomeGroupMappe
             i.setAccountCodeName("[" + i.getAccountCode() + "]" + accountMap.get(i.getAccountCode()));
         });
     }
+
     /**
      * 文件上传
      */

+ 8 - 19
src/main/java/com/imed/costaccount/service/impl/CostNumberBedSetServiceImpl.java

@@ -61,11 +61,9 @@ public class CostNumberBedSetServiceImpl extends ServiceImpl<CostNumberBedSetMap
         List<CostNumberBedSet> records = pages.getRecords();
         List<CostNumberBedSetVO> costNumberBedSetVOList = BeanUtil.convertList(records, CostNumberBedSetVO.class);
         // 具体的名称根据Code  Id 进行获取
-        Map<String, String> costShareParamMap = costShareParamService.list(new QueryWrapper<CostShareParam>().lambda()
-                .eq(CostShareParam::getHospId, hospId)).stream().collect(Collectors.toMap(CostShareParam::getShareParamCode, CostShareParam::getShareParamName));
         Map<Integer, ReportForm> reportFormMap = reportFormService.list(new QueryWrapper<ReportForm>().lambda().eq(ReportForm::getHospId, hospId)).stream().collect(Collectors.toMap(ReportForm::getNum, synOe -> synOe));
         costNumberBedSetVOList.forEach(i->{
-            setName(costShareParamMap, reportFormMap, i);
+            setName(reportFormMap, i);
         });
         PageUtils pageUtils = new PageUtils(pages);
         pageUtils.setList(costNumberBedSetVOList);
@@ -74,16 +72,10 @@ public class CostNumberBedSetServiceImpl extends ServiceImpl<CostNumberBedSetMap
 
     /**
      * 设置成本分摊参数的名称  相关报表的名称
-     * @param costShareParamMap
      * @param reportFormMap
      * @param i
      */
-    private void setName(Map<String, String> costShareParamMap, Map<Integer, ReportForm> reportFormMap, CostNumberBedSetVO i) {
-        String shareParamCode = i.getShareParamCode();
-        String shareParamName = costShareParamMap.get(shareParamCode);
-        if (StrUtil.isNotBlank(shareParamName)){
-            i.setShareParamName(shareParamName);
-        }
+    private void setName( Map<Integer, ReportForm> reportFormMap, CostNumberBedSetVO i) {
         Integer incomeFieldNum = i.getIncomeFieldNum();
         Integer costCorresponding = i.getCostCorresponding();
         ReportForm reportForm = reportFormMap.get(incomeFieldNum);
@@ -112,16 +104,13 @@ public class CostNumberBedSetServiceImpl extends ServiceImpl<CostNumberBedSetMap
     public CostNumberBedSetVO getByNumberBedId(Long id) {
         Long hospId = UserContext.getHospId();
         CostNumberBedSet costNumberBedSet = this.getById(id);
-        // 具体的名称根据Code  Id 进行获取
-        Map<String, String> costShareParamMap = costShareParamService.list(new QueryWrapper<CostShareParam>().lambda()
-                .eq(CostShareParam::getHospId, hospId)).stream().collect(Collectors.toMap(CostShareParam::getShareParamCode, CostShareParam::getShareParamName));
+        if (Objects.isNull(costNumberBedSet)){
+            throw new CostException(500,"数据不存在");
+        }
         Map<Integer, ReportForm> reportFormMap = reportFormService.list(new QueryWrapper<ReportForm>().lambda().eq(ReportForm::getHospId, hospId)).stream().collect(Collectors.toMap(ReportForm::getNum, synOe -> synOe));
         CostNumberBedSetVO costNumberBedSetVO = BeanUtil.convertObj(costNumberBedSet, CostNumberBedSetVO.class);
-        if (Objects.nonNull(costNumberBedSet)){
-            setName(costShareParamMap,reportFormMap,costNumberBedSetVO);
-            return costNumberBedSetVO;
-        }
-        return null;
+        setName(reportFormMap,costNumberBedSetVO);
+        return costNumberBedSetVO;
     }
     private String getString(Integer reportType, String reportName) {
         switch (reportType) {
@@ -147,7 +136,7 @@ public class CostNumberBedSetServiceImpl extends ServiceImpl<CostNumberBedSetMap
     }
     /**
      * 添加诊次/床日设置的数据
-     *  后要考虑支持多选
+     *  后要考虑支持多选
      * @param costNumberBedSetSaveDto
      * @param hospId
      */

+ 147 - 0
src/main/java/com/imed/costaccount/service/impl/IncomeCollectionServiceImpl.java

@@ -0,0 +1,147 @@
+package com.imed.costaccount.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.template.TemplateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.imed.costaccount.common.constants.Constant;
+import com.imed.costaccount.common.exception.CostException;
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.mapper.CostIncomeGroupMapper;
+import com.imed.costaccount.model.CostIncomeGroup;
+import com.imed.costaccount.model.vo.CollectionVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.imed.costaccount.mapper.IncomeCollectionMapper;
+import com.imed.costaccount.model.IncomeCollection;
+import com.imed.costaccount.service.IncomeCollectionService;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.imed.costaccount.common.constants.Constant.LIMIT;
+
+
+@Slf4j
+@Service("incomeCollectionService")
+public class IncomeCollectionServiceImpl
+        extends ServiceImpl<IncomeCollectionMapper, IncomeCollection>
+        implements IncomeCollectionService {
+
+    private final CostIncomeGroupMapper incomeGroupMapper;
+
+    public IncomeCollectionServiceImpl(CostIncomeGroupMapper incomeGroupMapper) {
+        this.incomeGroupMapper = incomeGroupMapper;
+    }
+
+    /**
+     * 获取收入归集分页列表
+     *
+     * @param current  当前页
+     * @param pageSize 页码数据大小
+     * @param date     日期 yyyy-MM-dd
+     * @param hospId   医院id
+     * @return {@link PageUtils} 分页对象
+     */
+    @Override
+    public PageUtils getCollections(Integer current, Integer pageSize, String date, Long hospId) {
+        current = current - 1;
+        Integer startIndex = current * pageSize;
+        List<CollectionVO> list = incomeGroupMapper.getCollections(startIndex, pageSize, date, hospId);
+        int count = incomeGroupMapper.getCollectionCount(date, hospId);
+
+        // 设置是否归集字段
+        list.forEach(i -> {
+            i.setIsCollection(true);
+            IncomeCollection one = this.getOne(
+                    new LambdaQueryWrapper<IncomeCollection>().select(IncomeCollection::getId)
+                            .eq(IncomeCollection::getYear, i.getYear())
+                            .eq(IncomeCollection::getMonth,i.getMonth())
+                            .last(LIMIT)
+            );
+            if (Objects.isNull(one)) {
+                i.setIsCollection(false);
+            }
+        });
+
+
+        return new PageUtils(list, count, pageSize, current);
+    }
+
+    /**
+     * 按年月归集数据
+     *
+     * @param year   年 数字类型
+     * @param month  月 数字
+     * @param hospId 医院id
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void collect(Integer year, Integer month, Long hospId) {
+        //  可能几十万次数据 需要分段异步多线程处理,分布式锁处理,
+        List<CostIncomeGroup> costIncomeGroups = incomeGroupMapper.selectList(
+                new LambdaQueryWrapper<CostIncomeGroup>()
+                        .eq(CostIncomeGroup::getDateYear, year)
+                        .eq(CostIncomeGroup::getDateMonth, month)
+                        .eq(CostIncomeGroup::getHospId, hospId)
+        );
+        if (costIncomeGroups.isEmpty()) {
+            String format = StrUtil.format("{}年{}月数据不存在,请先导入数据",year,month);
+            throw new CostException(format);
+        }
+        // 根据会计科目和成本项目归纳所有数据
+        Map<String, List<CostIncomeGroup>> collectMap = costIncomeGroups.stream()
+                .collect(Collectors.groupingBy(i -> i.getAccountCode() + "cost" + i.getProductCode()));
+
+        // 遍历map 组装成List保存
+        List<IncomeCollection> list = new LinkedList<>();
+        Set<Map.Entry<String, List<CostIncomeGroup>>> entries = collectMap.entrySet();
+        entries.stream().map(Map.Entry::getValue).flatMap(Collection::stream).forEach(costIncomeGroup -> {
+            IncomeCollection incomeCollection = new IncomeCollection();
+            incomeCollection.setYear(year);
+            incomeCollection.setMonth(month);
+            incomeCollection.setAccountingCode(costIncomeGroup.getAccountCode());
+            incomeCollection.setAccountingName(costIncomeGroup.getAccountName());
+            incomeCollection.setProductName(costIncomeGroup.getProductName());
+            incomeCollection.setProductCode(costIncomeGroup.getProductCode());
+            incomeCollection.setHospId(hospId);
+            // todo 来源id暂时不确定
+            incomeCollection.setFileId(costIncomeGroup.getFileId());
+            incomeCollection.setCreateTime(System.currentTimeMillis());
+            // 开单中心的数据
+            incomeCollection.setDepartmentCode(costIncomeGroup.getOpenDepartmentCode());
+            incomeCollection.setResponsibilityCode(costIncomeGroup.getOpenResponsibilityCode());
+            incomeCollection.setAmount(costIncomeGroup.getOpenDepartmentAmount());
+            list.add(incomeCollection);
+            // 执行科室数据
+            incomeCollection.setDepartmentCode(costIncomeGroup.getStartDepartmentCode());
+            incomeCollection.setResponsibilityCode(costIncomeGroup.getStartResponsibilityCode());
+            incomeCollection.setAmount(costIncomeGroup.getStartDepartmentAmount());
+            list.add(incomeCollection);
+        });
+
+        // TODO: 2021/8/10 几十万条数据如何处理
+        this.saveBatch(list);
+    }
+
+    /**
+     * 按年月撤销归集
+     *
+     * @param year   年 数字类型
+     * @param month  月 数字
+     * @param hospId 医院id
+     */
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    public void cancelCollect(Integer year, Integer month, Long hospId) {
+        LambdaQueryWrapper<IncomeCollection> wrapper = new LambdaQueryWrapper<IncomeCollection>()
+                .eq(IncomeCollection::getYear, year)
+                .eq(IncomeCollection::getMonth, month)
+                .eq(IncomeCollection::getHospId, hospId);
+        this.remove(wrapper);
+    }
+}

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

@@ -79,7 +79,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
         List<MenuVO> menuVOS = list.stream().map(i -> {
             MenuVO menuVO = BeanUtil.convertObj(i, MenuVO.class);
             menuVO.setModifyTime(DateUtil.formatDateTime(DateUtil.date(i.getModifyTime())));
-            menuVO.setModifyUserName(userService.getUsernameByIdAndHospId(user.getId(), user.getHospId()));
+            menuVO.setModifyUserName(userService.getUsernameByIdAndHospId(i.getModifyUserId(), user.getHospId()));
             return menuVO;
         }).collect(Collectors.toList());
 

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

@@ -0,0 +1,74 @@
+package com.imed.costaccount.web;
+
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.model.CostIncomeFile;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.service.CostIncomeFileService;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+
+
+/**
+ * 文件上传记录
+ *
+ * @author KCYG
+ * @date 2021-08-10 14:42:20
+ */
+@RestController
+@RequestMapping("/costincomefile")
+public class CostIncomeFileController {
+    @Autowired
+    private CostIncomeFileService costIncomeFileService;
+
+    /**
+     * 分页查询列表
+     * 查询的是
+     */
+    @RequestMapping("/list")
+    public Result list(@RequestParam(value = "current", defaultValue = "1") Integer current,
+                       @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize){
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        return Result.ok();
+    }
+
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    public Result info(@PathVariable("id") Long id){
+		CostIncomeFile costIncomeFile = costIncomeFileService.getById(id);
+        return Result.ok(costIncomeFile);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    public Result save(@RequestBody CostIncomeFile costIncomeFile){
+		costIncomeFileService.save(costIncomeFile);
+        return Result.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    public Result update(@RequestBody CostIncomeFile costIncomeFile){
+		costIncomeFileService.updateById(costIncomeFile);
+        return Result.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    public Result delete(@RequestBody Long[] ids){
+		costIncomeFileService.removeByIds(Arrays.asList(ids));
+        return Result.ok();
+    }
+
+}

+ 3 - 4
src/main/java/com/imed/costaccount/web/ExcelController.java

@@ -416,13 +416,12 @@ public class ExcelController {
         return departmentLinkedList;
     }
     /**
-     *  导入 收入/成本/成本分摊参数数据导入
+     *  导入 收入数据导入
      * @param file 导入的文件
-     * @param fileType 文件类型 1 成本分摊数据  2 收入数据 3 成本数据
      */
     @PostMapping("/importDataByFileType")
     @ApiOperation("批量导入指定类型数据信息")
-    public Result importProductAccount(@RequestParam("file") MultipartFile file,Integer fileType){
+    public Result importProductAccount(@RequestParam("file") MultipartFile file,Integer year,Integer month){
         if (Objects.isNull(file)){
             throw new CostException(500,"请选择文件");
         }
@@ -435,7 +434,7 @@ public class ExcelController {
             log.info("最开始:read={}",read);
             log.info("-------------------------------------------------------------------");
             Long hospId = UserContext.getHospId();
-            return costIncomeGroupService.importIncomeGroup(read, hospId,file);
+            return costIncomeGroupService.importIncomeGroup(read, hospId,file,year,month);
         }catch (IOException e){
             e.printStackTrace();;
             throw new CostException(500, "导入失败");

+ 55 - 0
src/main/java/com/imed/costaccount/web/IncomeCollectionController.java

@@ -0,0 +1,55 @@
+package com.imed.costaccount.web;
+
+import com.imed.costaccount.common.util.PageUtils;
+import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.service.CostIncomeGroupService;
+import com.imed.costaccount.service.IncomeCollectionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 归集后列表
+ *
+ * @author huangrui
+ * @date 2021-08-09 15:26:28
+ */
+@Api(tags = "归集后查询相关")
+@RestController
+@RequestMapping("/costAccount/incomeCollection")
+public class IncomeCollectionController extends AbstractController {
+
+    /**
+     * 收入归集后
+     */
+    private final IncomeCollectionService incomeCollectionService;
+
+
+    public IncomeCollectionController(IncomeCollectionService incomeCollectionService) {
+        this.incomeCollectionService = incomeCollectionService;
+    }
+
+    @ApiOperation("收入归集列表")
+    @GetMapping("/getCollections")
+    public Result getCollections(@RequestParam(value = "current", defaultValue = "1") Integer current,
+                                 @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
+                                 @RequestParam(value = "date", required = false) String date) {
+        PageUtils pageUtils = incomeCollectionService.getCollections(current, pageSize, date, getHospId());
+        return Result.ok(pageUtils);
+    }
+
+    @ApiOperation("归集操作(开始归集)")
+    @PostMapping("/collect")
+    public Result collect(@RequestParam Integer year,@RequestParam Integer month) {
+        incomeCollectionService.collect(year, month, getHospId());
+        return Result.ok();
+    }
+
+    @ApiOperation("撤销归集")
+    @PostMapping("/cancelCollect")
+    public Result cancelCollect(@RequestParam Integer year,@RequestParam Integer month) {
+        incomeCollectionService.cancelCollect(year, month, getHospId());
+        return Result.ok();
+    }
+}

+ 23 - 0
src/main/resources/mapper/CostIncomeFileMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.imed.costaccount.mapper.CostIncomeFileMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.CostIncomeFile" id="costIncomeFileMap">
+        <result property="id" column="id"/>
+        <result property="fileType" column="file_type"/>
+        <result property="fileName" column="file_name"/>
+        <result property="fileUrl" column="file_url"/>
+        <result property="successAmount" column="success_amount"/>
+        <result property="totalAmount" column="total_amount"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="userId" column="user_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="errorList" column="error_list"/>
+        <result property="createTime" column="create_time"/>
+        <result property="deleteTime" column="delete_time"/>
+    </resultMap>
+
+
+</mapper>

+ 4 - 0
src/main/resources/mapper/CostIncomeGroupMapper.xml

@@ -7,9 +7,13 @@
     <resultMap type="com.imed.costaccount.model.CostIncomeGroup" id="costIncomeGroupMap">
         <result property="id" column="id"/>
         <result property="openDepartmentCode" column="open_department_code"/>
+        <result property="openDepartmentName" column="open_department_name"/>
         <result property="openResponsibilityCode" column="open_responsibility_code"/>
+        <result property="openResponsibilityName" column="open_responsibility_name"/>
         <result property="startDepartmentCode" column="start_department_code"/>
+        <result property="startDepartmentName" column="start_department_name"/>
         <result property="startResponsibilityCode" column="start_responsibility_code"/>
+        <result property="startResponsibilityName" column="start_responsibility_name"/>
         <result property="productCode" column="product_code"/>
         <result property="productName" column="product_name"/>
         <result property="accountCode" column="account_code"/>

+ 2 - 0
src/main/resources/mapper/CostNumberBedSetMapper.xml

@@ -11,8 +11,10 @@
         <result property="shareParamCode" column="share_param_code"/>
         <result property="incomeFieldNum" column="income_field_num"/>
         <result property="incomeFileName" column="income_file_name"/>
+        <result property="incomeFileType" column="income_file_type"/>
         <result property="costCorresponding" column="cost_corresponding"/>
         <result property="costCorrespondingName" column="cost_corresponding_name"/>
+        <result property="costFileType" column="cost_file_type"/>
         <result property="hospId" column="hosp_id"/>
         <result property="createTime" column="create_time"/>
         <result property="deleteTime" column="delete_time"/>

+ 28 - 0
src/main/resources/mapper/IncomeCollectionMapper.xml

@@ -0,0 +1,28 @@
+<?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.IncomeCollectionMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.imed.costaccount.model.IncomeCollection" id="incomeCollectionMap">
+        <result property="id" column="id"/>
+        <result property="year" column="year"/>
+        <result property="month" column="month"/>
+        <result property="departmentCode" column="department_code"/>
+        <result property="departmentName" column="department_name"/>
+        <result property="responsibilityCode" column="responsibility_code"/>
+        <result property="responsibilityName" column="responsibility_name"/>
+        <result property="accountingCode" column="accounting_code"/>
+        <result property="accountingName" column="accounting_name"/>
+        <result property="productCode" column="product_code"/>
+        <result property="productName" column="product_name"/>
+        <result property="isDirectIncome" column="is_direct_income"/>
+        <result property="amount" column="amount"/>
+        <result property="fileId" column="file_id" />
+        <result property="hospId" column="hosp_id" />
+        <result property="createTime" column="create_time"/>
+        <result property="deleteTime" column="delete_time"/>
+    </resultMap>
+
+
+</mapper>