Bladeren bron

增加首页折线图接口

xda 2 jaren geleden
bovenliggende
commit
37bf53bd7e

+ 6 - 3
src/main/java/com/winhc/repal/controller/RepalBookController.java

@@ -10,6 +10,7 @@ import com.winhc.repal.model.dto.HomeTypeDTO;
 import com.winhc.repal.model.vo.HomeGradeVO;
 import com.winhc.repal.model.vo.HomeReceivableVO;
 import com.winhc.repal.model.vo.RepalBookInfoVO;
+import com.winhc.repal.model.vo.ReturnedMoneyVO;
 import com.winhc.repal.service.RepalBookService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -56,9 +57,11 @@ public class RepalBookController {
         return BeanResponse.success(CodeMsg.SUCCESS, repalBookService.getGradeRateList(dto));
     }
 
-//    @ApiOperation("首页账本回款统计折线图")
-//    @RequestMapping(value = "/graph", method = RequestMethod.GET)
-//    public BeanResponse<>
+    @ApiOperation("首页账本回款统计折线图")
+    @RequestMapping(value = "/graph", method = RequestMethod.GET)
+    public BeanResponse<List<ReturnedMoneyVO>> getGraph(HomeTypeDTO dto) {
+        return BeanResponse.success(CodeMsg.SUCCESS, repalBookService.getGraph(dto));
+    }
 
     @ApiOperation("删除账本")
     @RequestMapping(value = "/deleteRepalBook", method = RequestMethod.POST)

+ 23 - 0
src/main/java/com/winhc/repal/model/vo/ReturnedMoneyVO.java

@@ -0,0 +1,23 @@
+package com.winhc.repal.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * @Description: ReturnedMoneyVO
+ * @Author: xda
+ * @Date: 2022/5/9 16:11
+ */
+@Data
+@ApiModel("回款统计")
+public class ReturnedMoneyVO {
+
+    @ApiModelProperty("金额,string")
+    private String moneyStr;
+
+    @ApiModelProperty("回款日期,string, yyyy-MM-dd")
+    private LocalDate date;
+}

+ 22 - 0
src/main/java/com/winhc/repal/repository/RepalChangeRecordMapper.java

@@ -2,12 +2,34 @@ package com.winhc.repal.repository;
 
 import com.winhc.repal.entity.RepalChangeRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * @description RepalChangeRecord Mapper 接口
  * @author Generator
  * @date 2022-04-08
  */
+@Repository
 public interface RepalChangeRecordMapper extends BaseMapper<RepalChangeRecord> {
 
+
+    /**
+     * 获取首页金额变动记录
+     * @param userId userId
+     * @param repalBookId repalBookId
+     * @param start start
+     * @param end end
+     * @return java.util.List<com.winhc.repal.entity.RepalChangeRecord>
+     * @author xda
+     * @date 2022/5/9 16:31
+     */
+    List<RepalChangeRecord> getHomeRecord(@Param("userId") Long userId,
+                                          @Param("repalBookId") Long repalBookId,
+                                          @Param("start") LocalDateTime start,
+                                          @Param("end") LocalDateTime end);
+
 }

+ 2 - 0
src/main/java/com/winhc/repal/service/RepalBillService.java

@@ -160,4 +160,6 @@ public interface RepalBillService extends IService<RepalBill> {
      * @date 2022/5/9 12:21
      */
     HomeReceivableBO getBillTotal(Integer repalBillStatus, Long userId, Long repalBookId, Integer repalBillType, LocalDateTime start, LocalDateTime end);
+
+
 }

+ 10 - 0
src/main/java/com/winhc/repal/service/RepalBookService.java

@@ -8,6 +8,7 @@ import com.winhc.repal.model.dto.HomeTypeDTO;
 import com.winhc.repal.model.vo.HomeGradeVO;
 import com.winhc.repal.model.vo.HomeReceivableVO;
 import com.winhc.repal.model.vo.RepalBookInfoVO;
+import com.winhc.repal.model.vo.ReturnedMoneyVO;
 
 import java.util.List;
 
@@ -88,5 +89,14 @@ public interface RepalBookService extends IService<RepalBook> {
      */
     Long addRepalBook(AddRepalBookDTO dto);
 
+    /**
+     * 首页折线图
+     * @param dto dto
+     * @return java.util.List<com.winhc.repal.model.vo.ReturnedMoneyVO>
+     * @author xda
+     * @date 2022/5/9 16:26
+     */
+    List<ReturnedMoneyVO> getGraph(HomeTypeDTO dto);
+
 
 }

+ 18 - 1
src/main/java/com/winhc/repal/service/RepalChangeRecordService.java

@@ -2,6 +2,10 @@ package com.winhc.repal.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.winhc.repal.entity.RepalChangeRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDateTime;
+import java.util.List;
 
 
 /**
@@ -11,6 +15,19 @@ import com.winhc.repal.entity.RepalChangeRecord;
  */
 public interface RepalChangeRecordService extends IService<RepalChangeRecord> {
 
-
+    /**
+     * 获取首页变动记录
+     * @param userId userId
+     * @param repalBookId repalBookId
+     * @param start start
+     * @param end end
+     * @return java.util.List<com.winhc.repal.entity.RepalChangeRecord>
+     * @author xda
+     * @date 2022/5/9 16:33
+     */
+    List<RepalChangeRecord> getHomeRecord(Long userId,
+                                          Long repalBookId,
+                                          LocalDateTime start,
+                                          LocalDateTime end);
 
 }

+ 8 - 0
src/main/java/com/winhc/repal/service/impl/RepalBillServiceImpl.java

@@ -196,6 +196,10 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
             BeanUtils.copyProperties(t, vo);
             vo.setRepalBillId(t.getId());
             vo.setResponsiblePersonNames(String.join("、", nameMap.get(t.getId())));
+            vo.setRepalOverdueStatus(t.getRepalBillStatus() > 1 ? t.getRepalBillStatus() + 1 : t.getRepalBillStatus());
+            if (RepalBillStatusEnum.PROGRESSING.getCode().equals(vo.getRepalOverdueStatus()) && LocalDate.now().plusDays(3).equals(vo.getEndDate())) {
+                vo.setRepalOverdueStatus(2);
+            }
             RepalBillRemindUnReadVO unReadVO = unreadMap.get(vo.getRepalBillId());
             if (Objects.nonNull(unReadVO)) {
                 vo.setDynamicCountList(new ArrayList<Integer>(){{
@@ -532,6 +536,10 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
             if(nameMap.containsKey(t.getId())) {
                 vo.setResponsiblePersonNames(String.join("、", nameMap.get(t.getId())));
             }
+            vo.setRepalOverdueStatus(t.getRepalBillStatus() > 1 ? t.getRepalBillStatus() + 1 : t.getRepalBillStatus());
+            if (RepalBillStatusEnum.PROGRESSING.getCode().equals(vo.getRepalOverdueStatus()) && LocalDate.now().plusDays(3).equals(vo.getEndDate())) {
+                vo.setRepalOverdueStatus(2);
+            }
             RepalBillRemindUnReadVO unReadVO = unreadMap.get(vo.getRepalBillId());
             if (Objects.nonNull(unReadVO)) {
                 vo.setDynamicCountList(new ArrayList<Integer>(){{

+ 43 - 9
src/main/java/com/winhc/repal/service/impl/RepalBookServiceImpl.java

@@ -7,20 +7,16 @@ import com.winhc.common.enums.CodeMsg;
 import com.winhc.common.exception.CommonException;
 import com.winhc.repal.entity.RepalBill;
 import com.winhc.repal.entity.RepalBook;
-import com.winhc.repal.entity.RepalGroupMember;
+import com.winhc.repal.entity.RepalChangeRecord;
 import com.winhc.repal.enums.DeletedStatusEnum;
 import com.winhc.repal.enums.PermissionEnum;
 import com.winhc.repal.enums.RepalBillStatusEnum;
-import com.winhc.repal.enums.RepalBillTypeEnum;
 import com.winhc.repal.model.bo.BookDynamicCountBO;
 import com.winhc.repal.model.bo.HomeReceivableBO;
 import com.winhc.repal.model.dto.AddRepalBookDTO;
 import com.winhc.repal.model.dto.DeleteRepalBookDTO;
 import com.winhc.repal.model.dto.HomeTypeDTO;
-import com.winhc.repal.model.vo.HomeGradeVO;
-import com.winhc.repal.model.vo.HomeReceivableVO;
-import com.winhc.repal.model.vo.RepalBillRemindUnReadVO;
-import com.winhc.repal.model.vo.RepalBookInfoVO;
+import com.winhc.repal.model.vo.*;
 import com.winhc.repal.repository.RepalBookMapper;
 import com.winhc.repal.service.*;
 import com.winhc.repal.util.BillGradeUtil;
@@ -35,9 +31,7 @@ import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -69,6 +63,9 @@ public class RepalBookServiceImpl extends ServiceImpl<RepalBookMapper, RepalBook
     @Autowired
     private RepalResponsiblePersonService repalResponsiblePersonService;
 
+    @Autowired
+    private RepalChangeRecordService repalChangeRecordService;
+
     @Override
     public HomeReceivableVO getHomeReceivable(Integer repalBillType, HomeTypeDTO dto) {
         HomeReceivableVO vo = new HomeReceivableVO();
@@ -197,6 +194,14 @@ public class RepalBookServiceImpl extends ServiceImpl<RepalBookMapper, RepalBook
     public Long addRepalBook(AddRepalBookDTO dto) {
         long groupId = repalGroupMemberService.getUserGroupId(UserContextUtil.getUser().getUserId());
         // 新建账本
+        RepalBook book = this.getOne(Wrappers.lambdaQuery(RepalBook.class)
+                .eq(RepalBook::getUserId, UserContextUtil.getUser().getUserId())
+                .eq(RepalBook::getRepalGroupId, groupId));
+        if (Objects.nonNull(book)) {
+            if (dto.getRepalBookName().equals(book.getRepalBookName())) {
+                throw new CommonException(CodeMsg.FAILED, "账本名称重复");
+            }
+        }
         RepalBook repalBook = new RepalBook();
         repalBook.setRepalGroupId(groupId);
         repalBook.setRepalBookName(dto.getRepalBookName());
@@ -204,4 +209,33 @@ public class RepalBookServiceImpl extends ServiceImpl<RepalBookMapper, RepalBook
         this.save(repalBook);
         return repalBook.getId();
     }
+
+    @Override
+    public List<ReturnedMoneyVO> getGraph(HomeTypeDTO dto) {
+        boolean allFlag = repalRolePermissionService.checkUserPermission(UserContextUtil.getUser().getUserId(), PermissionEnum.QUERY_ALL_RECEIVABLE.getCode());
+        long userId = UserContextUtil.getUser().getUserId();
+        LocalDateTime start = null;
+        LocalDateTime end = null;
+        if (Integer.valueOf(1).equals(dto.getQueryType())) {
+            LocalDate now = LocalDate.now();
+            start = LocalDateTime.of(now.minusDays(7), LocalTime.MIN);
+            end = LocalDateTime.of(now, LocalTime.MAX);
+        }
+        if (Integer.valueOf(2).equals(dto.getQueryType())) {
+            LocalDate now = LocalDate.now();
+            start = LocalDateTime.of(now.minusDays(30), LocalTime.MIN);
+            end = LocalDateTime.of(now, LocalTime.MAX);
+        }
+        List<RepalChangeRecord> recordList = repalChangeRecordService.getHomeRecord(allFlag ? null : userId, dto.getRepalBookId(), start, end);
+        if (CollUtil.isEmpty(recordList)) {
+            return new ArrayList<>();
+        }
+        Map<LocalDate, List<RepalChangeRecord>> map = recordList.stream().collect(Collectors.groupingBy(t -> t.getTimeCreated().toLocalDate()));
+        return map.entrySet().stream().map(t -> {
+            ReturnedMoneyVO vo = new ReturnedMoneyVO();
+            vo.setDate(t.getKey());
+            vo.setMoneyStr(t.getValue().stream().map(RepalChangeRecord::getTransMoney).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2).toString());
+            return vo;
+        }).collect(Collectors.toList());
+    }
 }

+ 10 - 0
src/main/java/com/winhc/repal/service/impl/RepalChangeRecordServiceImpl.java

@@ -4,8 +4,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.winhc.repal.entity.RepalChangeRecord;
 import com.winhc.repal.repository.RepalChangeRecordMapper;
 import com.winhc.repal.service.RepalChangeRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.util.List;
+
 /**
  * @description RepalChangeRecord 接口实现类
  * @author Generator
@@ -14,5 +18,11 @@ import org.springframework.stereotype.Service;
 @Service
 public class RepalChangeRecordServiceImpl extends ServiceImpl<RepalChangeRecordMapper, RepalChangeRecord> implements RepalChangeRecordService {
 
+    @Autowired
+    private RepalChangeRecordMapper repalChangeRecordMapper;
 
+    @Override
+    public List<RepalChangeRecord> getHomeRecord(Long userId, Long repalBookId, LocalDateTime start, LocalDateTime end) {
+        return repalChangeRecordMapper.getHomeRecord(userId, repalBookId, start, end);
+    }
 }

+ 11 - 0
src/main/java/com/winhc/repal/service/impl/RepalGroupServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.winhc.common.model.base.VOPage;
+import com.winhc.repal.entity.RepalBook;
 import com.winhc.repal.entity.RepalGroup;
 import com.winhc.repal.entity.RepalGroupMember;
 import com.winhc.repal.enums.DeletedStatusEnum;
@@ -13,6 +14,7 @@ import com.winhc.repal.model.dto.InitGroupDTO;
 import com.winhc.repal.model.dto.PageDTO;
 import com.winhc.repal.model.vo.GroupMemberVo;
 import com.winhc.repal.repository.RepalGroupMapper;
+import com.winhc.repal.service.RepalBookService;
 import com.winhc.repal.service.RepalGroupMemberService;
 import com.winhc.repal.service.RepalGroupService;
 import com.winhc.repal.util.UserContextUtil;
@@ -39,6 +41,9 @@ public class RepalGroupServiceImpl extends ServiceImpl<RepalGroupMapper, RepalGr
     @Autowired
     private RepalGroupMemberService repalGroupMemberService;
 
+    @Autowired
+    private RepalBookService repalBookService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean initGroup(InitGroupDTO dto) {
@@ -61,6 +66,12 @@ public class RepalGroupServiceImpl extends ServiceImpl<RepalGroupMapper, RepalGr
             this.save(repalGroup);
             repalGroupMemberService.addGroupMember(dto.getUserId(), dto.getUserName(), repalGroup.getId(), 1L, RoleTypeEnum.SYSTEM.getCode());
         }
+        // 初始化一个账本
+        RepalBook repalBook = new RepalBook();
+        repalBook.setRepalGroupId(repalGroup.getId());
+        repalBook.setRepalBookName(dto.getGroupName());
+        repalBook.setUserId(UserContextUtil.getUser().getUserId());
+        repalBookService.save(repalBook);
         return true;
     }
 

+ 4 - 2
src/main/resources/mapper/RepalBillMapper.xml

@@ -196,7 +196,7 @@
             AND  bill.DIAGNOSIS_DATETIME >= #{start}
         </if>
         <if test="end != null">
-            AND  bill.DIAGNOSIS_DATETIME <![CDATA[<=]]>#{start}
+            AND  bill.DIAGNOSIS_DATETIME <![CDATA[<=]]>#{end}
         </if>
         <if test="userId != null">
             AND rPerson.USER_ID = #{userId}
@@ -231,7 +231,9 @@
             AND  bill.TIME_CREATED >= #{start}
         </if>
         <if test="end != null">
-            AND  bill.TIME_CREATED <![CDATA[<=]]>#{start}
+            AND  bill.TIME_CREATED <![CDATA[<=]]>#{end}
         </if>
     </select>
+
+
 </mapper>

+ 16 - 0
src/main/resources/mapper/RepalChangeRecordMapper.xml

@@ -2,4 +2,20 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.winhc.repal.repository.RepalChangeRecordMapper">
 
+
+    <select id="getHomeRecord" resultType="com.winhc.repal.entity.RepalChangeRecord">
+        SELECT record.TIME_CREATED as timeCreated, record.TRANS_MONEY as transMoney FROM REPAL_CHANGE_RECORD AS record
+        LEFT JOIN REPAL_BILL AS bill ON bill.ID = record.REPAL_BILL_ID
+        LEFT JOIN REPAL_RESPONSIBLE_PERSON AS rPerson ON record.REPAL_BILL_ID = rPerson.REPAL_BILL_ID
+        WHERE record.REPAL_BOOK_ID = #{repalBookId}
+        <if test="start != null">
+            AND  record.TIME_CREATED >= #{start}
+        </if>
+        <if test="end != null">
+            AND  record.TIME_CREATED <![CDATA[<=]]>#{end}
+        </if>
+        AND rPerson.USER_ID = #{userId}
+        AND bill.REPAL_BILL_TYPE = 1
+    </select>
+
 </mapper>