Parcourir la source

08 10 02 add collect data codes

hr il y a 4 ans
Parent
commit
501d1310e8

+ 9 - 0
src/main/java/com/imed/costaccount/common/exception/CostExceptionHandler.java

@@ -4,6 +4,7 @@ import com.imed.costaccount.common.util.ErrorResult;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.authz.UnauthorizedException;
 import org.springframework.dao.DataAccessException;
+import org.springframework.validation.BindException;
 import org.springframework.validation.ObjectError;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -35,6 +36,14 @@ public class CostExceptionHandler {
         return ErrorResult.errorMsg(500, this.formatAllErrorMessages(e.getBindingResult().getAllErrors()));
     }
 
+    @ExceptionHandler(value = BindException.class)
+    public ErrorResult handlerBindException(BindException e) {
+        e.printStackTrace();
+        log.info("GlobalExceptionHandler...");
+        log.info("错误代码:" + e.getMessage());
+        return ErrorResult.errorMsg(500, this.formatAllErrorMessages(e.getBindingResult().getAllErrors()));
+    }
+
 //    @ResponseStatus(value = HttpStatus.UNAUTHORIZED)
     @ExceptionHandler(value = UnauthorizedException.class)
     public ErrorResult handlerUnauthorizedException(UnauthorizedException e) {

+ 37 - 1
src/main/java/com/imed/costaccount/common/util/PageUtils.java

@@ -3,6 +3,7 @@ package com.imed.costaccount.common.util;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -32,6 +33,11 @@ public class PageUtils implements Serializable {
 	 * 列表数据
 	 */
 	private List<?> list;
+
+	/**
+	 * 归集后的数据总额
+	 */
+	private BigDecimal totalAmount;
 	
 	/**
 	 * 分页
@@ -48,6 +54,23 @@ public class PageUtils implements Serializable {
 		this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
 	}
 
+	/**
+	 * 分页
+	 * @param list        列表数据
+	 * @param totalCount  总记录数
+	 * @param pageSize    每页记录数
+	 * @param current    当前页数
+	 * @param totalAmount  总金额
+	 */
+	public PageUtils(List<?> list, int totalCount, int pageSize, int current,BigDecimal totalAmount) {
+		this.list = list;
+		this.totalCount = totalCount;
+		this.pageSize = pageSize;
+		this.current = current ;
+		this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
+		this.totalAmount = totalAmount;
+	}
+
 	/**
 	 * 分页
 	 */
@@ -98,5 +121,18 @@ public class PageUtils implements Serializable {
 	public void setList(List<?> list) {
 		this.list = list;
 	}
-	
+
+	public static long getSerialVersionUID() {
+		return serialVersionUID;
+	}
+
+	public BigDecimal getTotalAmount() {
+		return totalAmount;
+	}
+
+	public void setTotalAmount(BigDecimal totalAmount) {
+		this.totalAmount = totalAmount;
+	}
+
+
 }

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

@@ -2,7 +2,13 @@ package com.imed.costaccount.mapper;
 
 import com.imed.costaccount.model.IncomeCollection;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.imed.costaccount.model.dto.CollectDTO;
+import com.imed.costaccount.model.vo.CollectedVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 归集后列表
@@ -12,5 +18,27 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface IncomeCollectionMapper extends BaseMapper<IncomeCollection> {
-	
+
+    /**
+     * 分页List
+     *
+     * @param collectDTO {@link CollectDTO}
+     * @return {@link CollectedVO}
+     */
+    List<CollectedVO> getCollectList(@Param("collectDTO") CollectDTO collectDTO);
+
+    /**
+     * 总数
+     * @param collectDTO {@link CollectDTO}
+     * @return
+     */
+    int getCollectListCount(@Param("collectDTO") CollectDTO collectDTO);
+
+    /**
+     * 计算总金额
+     * @param collectDTO {@link CollectDTO}
+     * @return
+     */
+    BigDecimal getTotalAmount(@Param("collectDTO") CollectDTO collectDTO);
+
 }

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

@@ -0,0 +1,24 @@
+package com.imed.costaccount.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@ApiModel("归集后数据查询入参")
+public class CollectDTO {
+
+    private Integer current ;
+
+    private Integer pageSize ;
+
+    @NotBlank(message = "时间不能为空")
+    private String date;
+
+    private String  responsibilityCode;
+
+    private String accountingCode;
+
+    private Long hospId;
+}

+ 35 - 0
src/main/java/com/imed/costaccount/model/vo/CollectedVO.java

@@ -0,0 +1,35 @@
+package com.imed.costaccount.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("归集后数据列表")
+public class CollectedVO {
+
+    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 projectCode;
+
+    private String projectName;
+
+    private Integer isDirectIncome;
+
+    private BigDecimal amount;
+}

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

@@ -3,6 +3,7 @@ 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;
+import com.imed.costaccount.model.dto.CollectDTO;
 
 /**
  * 归集后列表
@@ -41,5 +42,14 @@ public interface IncomeCollectionService extends IService<IncomeCollection> {
      * @param hospId 医院id
      */
     void cancelCollect(Integer year, Integer month, Long hospId);
+
+    /**
+     * 归集后数据分页列表
+     *
+     * @param collectDTO {@link CollectDTO} 查询相关参数
+     * @return {@link PageUtils}
+     */
+    PageUtils collectList(CollectDTO collectDTO);
+
 }
 

+ 33 - 4
src/main/java/com/imed/costaccount/service/impl/IncomeCollectionServiceImpl.java

@@ -9,6 +9,8 @@ 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.dto.CollectDTO;
+import com.imed.costaccount.model.vo.CollectedVO;
 import com.imed.costaccount.model.vo.CollectionVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -20,6 +22,8 @@ import com.imed.costaccount.service.IncomeCollectionService;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -60,7 +64,7 @@ public class IncomeCollectionServiceImpl
             IncomeCollection one = this.getOne(
                     new LambdaQueryWrapper<IncomeCollection>().select(IncomeCollection::getId)
                             .eq(IncomeCollection::getYear, i.getYear())
-                            .eq(IncomeCollection::getMonth,i.getMonth())
+                            .eq(IncomeCollection::getMonth, i.getMonth())
                             .last(LIMIT)
             );
             if (Objects.isNull(one)) {
@@ -80,7 +84,7 @@ public class IncomeCollectionServiceImpl
      * @param hospId 医院id
      */
     @Override
-    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void collect(Integer year, Integer month, Long hospId) {
         //  可能几十万次数据 需要分段异步多线程处理,分布式锁处理,
         List<CostIncomeGroup> costIncomeGroups = incomeGroupMapper.selectList(
@@ -90,7 +94,7 @@ public class IncomeCollectionServiceImpl
                         .eq(CostIncomeGroup::getHospId, hospId)
         );
         if (costIncomeGroups.isEmpty()) {
-            String format = StrUtil.format("{}年{}月数据不存在,请先导入数据",year,month);
+            String format = StrUtil.format("{}年{}月数据不存在,请先导入数据", year, month);
             throw new CostException(format);
         }
         // 根据会计科目和成本项目归纳所有数据
@@ -112,6 +116,7 @@ public class IncomeCollectionServiceImpl
             // todo 来源id暂时不确定
             incomeCollection.setFileId(costIncomeGroup.getFileId());
             incomeCollection.setCreateTime(System.currentTimeMillis());
+            // TODO: 2021/8/10 待确认是否收入中心
             // 开单中心的数据
             incomeCollection.setDepartmentCode(costIncomeGroup.getOpenDepartmentCode());
             incomeCollection.setResponsibilityCode(costIncomeGroup.getOpenResponsibilityCode());
@@ -136,7 +141,7 @@ public class IncomeCollectionServiceImpl
      * @param hospId 医院id
      */
     @Override
-    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
+    @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)
@@ -144,4 +149,28 @@ public class IncomeCollectionServiceImpl
                 .eq(IncomeCollection::getHospId, hospId);
         this.remove(wrapper);
     }
+
+    /**
+     * 归集后数据分页列表
+     *
+     * @param collectDTO {@link CollectDTO} 查询相关参数
+     * @return {@link PageUtils}
+     */
+    @Override
+    public PageUtils collectList(CollectDTO collectDTO) {
+        // 分页数据初始化
+        Integer current = collectDTO.getCurrent();
+        current = (Objects.isNull(current) || current == 0) ? 0 : current - 1;
+        Integer pageSize = collectDTO.getPageSize();
+        pageSize = Objects.isNull(pageSize) ? 10 : pageSize;
+        collectDTO.setCurrent(current * pageSize);
+        collectDTO.setPageSize(pageSize);
+
+        // 查询需要的数据 DB
+        List<CollectedVO> list = baseMapper.getCollectList(collectDTO);
+        int count = baseMapper.getCollectListCount(collectDTO);
+        BigDecimal totalAmount = baseMapper.getTotalAmount(collectDTO);
+
+        return new PageUtils(list, count, pageSize, current, totalAmount);
+    }
 }

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

@@ -2,12 +2,15 @@ package com.imed.costaccount.web;
 
 import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.common.util.Result;
+import com.imed.costaccount.model.dto.CollectDTO;
 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.*;
 
+import javax.validation.Valid;
+
 
 /**
  * 归集后列表
@@ -41,15 +44,23 @@ public class IncomeCollectionController extends AbstractController {
 
     @ApiOperation("归集操作(开始归集)")
     @PostMapping("/collect")
-    public Result collect(@RequestParam Integer year,@RequestParam Integer month) {
+    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) {
+    public Result cancelCollect(@RequestParam Integer year, @RequestParam Integer month) {
         incomeCollectionService.cancelCollect(year, month, getHospId());
         return Result.ok();
     }
+
+    @ApiOperation("归集后数据列表")
+    @GetMapping("/collectList")
+    public Result collectList(@ModelAttribute @Valid CollectDTO collectDTO) {
+        collectDTO.setHospId(getHospId());
+        PageUtils pageUtils = incomeCollectionService.collectList(collectDTO);
+        return Result.ok(pageUtils);
+    }
 }

+ 46 - 3
src/main/resources/mapper/IncomeCollectionMapper.xml

@@ -3,7 +3,7 @@
 
 <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"/>
@@ -18,11 +18,54 @@
         <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="fileId" column="file_id"/>
+        <result property="hospId" column="hosp_id"/>
         <result property="createTime" column="create_time"/>
         <result property="deleteTime" column="delete_time"/>
     </resultMap>
 
+    <select id="getCollectList" resultType="com.imed.costaccount.model.vo.CollectedVO">
+        select * from cost_income_collection
+        where delete_time = 0 and hosp_id = #{collectDTO.hospId}
+        <if test="collectDTO.date != null and collectDTO.date != ''">
+            and `year` = YEAR(concat(#{collectDTO.date},'01')) and `month` = MONTH(concat(#{collectDTO.date},'01'))
+        </if>
+        <if test="collectDTO.responsibilityCode != null and collectDTO.responsibilityCode != ''">
+            and responsibility_code = #{collectDTO.responsibilityCode}
+        </if>
+        <if test="collectDTO.accountingCode != null and collectDTO.accountingCode != ''">
+            and accounting_code = #{collectDTO.accountingCode}
+        </if>
+        limit #{collectDTO.current},#{collectDTO.pageSize};
+    </select>
+
+    <select id="getCollectListCount" resultType="java.lang.Integer">
+        select count(*) from cost_income_collection
+        where delete_time = 0 and hosp_id = #{collectDTO.hospId}
+        <if test="collectDTO.date != null and collectDTO.date != ''">
+            and `year` = YEAR(concat(#{collectDTO.date},'01')) and `month` = MONTH(concat(#{collectDTO.date},'01'))
+        </if>
+        <if test="collectDTO.responsibilityCode != null and collectDTO.responsibilityCode != ''">
+            and responsibility_code = #{collectDTO.responsibilityCode}
+        </if>
+        <if test="collectDTO.accountingCode != null and collectDTO.accountingCode != ''">
+            and accounting_code = #{collectDTO.accountingCode}
+        </if>
+    </select>
+
+    <select id="getTotalAmount" resultType="java.math.BigDecimal">
+        select IFNULL(sum(amount),0) as totalAmount from cost_income_collection
+        where delete_time = 0 and hosp_id = #{collectDTO.hospId}
+        <if test="collectDTO.date != null and collectDTO.date != ''">
+            and `year` = YEAR(concat(#{collectDTO.date},'01')) and `month` = MONTH(concat(#{collectDTO.date},'01'))
+        </if>
+        <if test="collectDTO.responsibilityCode != null and collectDTO.responsibilityCode != ''">
+            and responsibility_code = #{collectDTO.responsibilityCode}
+        </if>
+        <if test="collectDTO.accountingCode != null and collectDTO.accountingCode != ''">
+            and accounting_code = #{collectDTO.accountingCode}
+        </if>
+    </select>
+
 
 </mapper>