From 061b711dc16212c651ce6047145420c50728f213 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 26 四月 2024 15:54:00 +0800
Subject: [PATCH] 核算报告功能完善

---
 ycl-common/src/main/java/enumeration/general/CalculateReportStatusEnum.java            |   28 +++++++
 ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java    |   43 +---------
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java               |   12 ++
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java               |    9 ++
 ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java |   58 +++++++++++---
 ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml                    |   25 ++++--
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java         |    3 
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateReport.java             |   11 --
 ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java          |    8 ++
 9 files changed, 129 insertions(+), 68 deletions(-)

diff --git a/ycl-common/src/main/java/enumeration/general/CalculateReportStatusEnum.java b/ycl-common/src/main/java/enumeration/general/CalculateReportStatusEnum.java
new file mode 100644
index 0000000..61dc9dd
--- /dev/null
+++ b/ycl-common/src/main/java/enumeration/general/CalculateReportStatusEnum.java
@@ -0,0 +1,28 @@
+package enumeration.general;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/4/26 14:44
+ */
+@Getter
+public enum CalculateReportStatusEnum {
+
+    NOT_PUBLISH("not_publish", "鏈彂甯�"),
+    PUBLISHED("published", "宸插彂甯�");
+    ;
+
+    @EnumValue
+    @JsonValue
+    private final String value;
+
+    private final String desc;
+
+    CalculateReportStatusEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateReport.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateReport.java
index daf7456..da68f47 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateReport.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateReport.java
@@ -5,6 +5,7 @@
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import com.ycl.platform.base.AbsEntity;
+import enumeration.general.CalculateReportStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -36,14 +37,6 @@
     @TableField("deduct_money")
     private BigDecimal deductMoney;
 
-    @ApiModelProperty("鍝勾鐨�")
-    @TableField("which_year")
-    private Integer whichYear;
-
-    @ApiModelProperty("鍝湀鐨�")
-    @TableField("which_month")
-    private Integer whichMonth;
-
     @ApiModelProperty("淇敼浜�")
     @TableField("update_by")
     private String updateBy;
@@ -52,5 +45,7 @@
     @TableField("latest_time")
     private LocalDateTime latestTime;
 
+    @TableField("status")
+    private CalculateReportStatusEnum status;
 
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java
index 61523f6..ee49511 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java
@@ -1,9 +1,11 @@
 package com.ycl.platform.domain.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.platform.base.AbsVo;
 import com.ycl.platform.domain.entity.CalculateRecord;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.time.LocalDateTime;
 import org.springframework.lang.NonNull;
@@ -20,7 +22,12 @@
  * @since 2024-04-23
  */
 @Data
-public class CalculateRecordVO extends AbsVo {
+public class CalculateRecordVO {
+
+    private Integer id;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createTime;
 
     /** 鍚堝悓 */
     private Integer contractId;
@@ -39,6 +46,9 @@
     /** 鍝湀 */
     private Integer whichMonth;
 
+    /** 鏈�鏂颁竴鏉℃牳绠楁爣璇� */
+    private Boolean latest;
+
     public static CalculateRecordVO getVoByEntity(@NonNull CalculateRecord entity, CalculateRecordVO vo) {
         if(vo == null) {
             vo = new CalculateRecordVO();
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java
index 7ba6405..4f6d8e4 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.platform.base.AbsVo;
 import com.ycl.platform.domain.entity.CalculateReport;
+import enumeration.general.CalculateReportStatusEnum;
 import lombok.Data;
 import org.springframework.beans.BeanUtils;
 import org.springframework.lang.NonNull;
@@ -48,6 +49,8 @@
     /** 鏍哥畻瑙勫垯 */
     private List<CalculateMoneyRuleVO> ruleList;
 
+    private CalculateReportStatusEnum status;
+
     public static CalculateReportDetailVO getVoByEntity(@NonNull CalculateReport entity, CalculateReportDetailVO vo) {
         if(vo == null) {
             vo = new CalculateReportDetailVO();
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java
index d770ebb..ea5e790 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java
@@ -7,6 +7,7 @@
 import java.util.List;
 import java.time.LocalDateTime;
 
+import enumeration.general.CalculateReportStatusEnum;
 import org.springframework.lang.NonNull;
 import org.springframework.beans.BeanUtils;
 import lombok.Data;
@@ -41,6 +42,14 @@
     /** 鏈�杩戜竴娆℃牳绠楁椂闂� */
     private LocalDateTime latestTime;
 
+    /** 鑳藉惁鍙戝竷 */
+    private Boolean canPublish;
+
+    private CalculateReportStatusEnum status;
+
+    /** 鏈�鏂颁竴娆℃墸娆� */
+    private BigDecimal latestDeductMoney;
+
     /** 鏄庣粏 */
     private List<CalculateRecordVO> recordList;
 
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java b/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
index 2473c04..b2ce714 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
@@ -33,25 +33,6 @@
 
     private final CalculateReportService calculateReportService;
 
-//    @PostMapping
-//    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
-//    public Result add(@RequestBody @Validated(Add.class) CalculateReportForm form) {
-//        return calculateReportService.add(form);
-//    }
-
-//    @PutMapping
-//    @ApiOperation(value = "淇敼", notes = "淇敼")
-//    public Result update(@RequestBody @Validated(Update.class) CalculateReportForm form) {
-//        return calculateReportService.update(form);
-//    }
-
-    @PutMapping
-    @ApiOperation(value = "淇敼閲戦", notes = "淇敼閲戦")
-    @PreAuthorize("@ss.hasPermi('system:calculate:report:edit:money')")
-    public Result adjustMoney(@RequestBody @Validated(Update.class) CalculateReportForm form) {
-        return calculateReportService.update(form);
-    }
-
     @GetMapping("/page")
     @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
     @PreAuthorize("@ss.hasPermi('system:calculate:report:page')")
@@ -73,23 +54,11 @@
         return calculateReportService.detail(id);
     }
 
-//    @GetMapping("/list")
-//    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
-//    public Result list() {
-//        return calculateReportService.all();
-//    }
-
-//    @DeleteMapping("/{id}")
-//    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
-//    public Result removeById(@PathVariable("id") String id) {
-//        return calculateReportService.removeById(id);
-//    }
-//
-//    @DeleteMapping("/batch")
-//    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
-//    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
-//        return calculateReportService.remove(ids);
-//    }
-
+    @PutMapping("/status/{reportId}")
+    @ApiOperation(value = "淇敼鍙戝竷鐘舵��", notes = "淇敼鍙戝竷鐘舵��")
+    @PreAuthorize("@ss.hasPermi('system:calculate:report:status')")
+    public Result updatePublishStatus(@PathVariable("reportId") Long reportId) {
+        return calculateReportService.updatePublishStatus(reportId);
+    }
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java b/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
index 9a8933f..2281a39 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
@@ -71,4 +71,12 @@
      * @return
      */
     Result backfill(CalculateReportBackfillForm form);
+
+    /**
+     * 淇敼鍙戝竷鐘舵��
+     *
+     * @param reportId
+     * @return
+     */
+    Result updatePublishStatus(Long reportId);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
index ee26421..8943806 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
@@ -19,6 +19,7 @@
 import java.util.List;
 
 import com.ycl.utils.SecurityUtils;
+import enumeration.general.CalculateReportStatusEnum;
 import org.apache.commons.lang3.StringUtils;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ycl.system.page.PageUtil;
@@ -33,6 +34,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import lombok.RequiredArgsConstructor;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 鏍哥畻鎶ュ憡 鏈嶅姟瀹炵幇绫�
@@ -115,6 +117,13 @@
     public Result page(CalculateReportQuery query) {
         IPage<CalculateReportVO> page = PageUtil.getPage(query, CalculateReportVO.class);
         baseMapper.page(query, page);
+        page.getRecords().stream().forEach(item -> {
+            if (Objects.isNull(item)) {
+                item.setCanPublish(Boolean.FALSE);
+            } else {
+                item.setCanPublish(Boolean.TRUE);
+            }
+        });
         return Result.ok().data(page.getRecords()).total(page.getTotal());
     }
 
@@ -127,6 +136,13 @@
     public Result detail(Long id) {
         // 鏄庣粏鍒楄〃
         CalculateReportDetailVO detail = baseMapper.getById(id);
+        if (Objects.nonNull(detail) && ! CollectionUtils.isEmpty(detail.getRecordList())) {
+            if (CalculateReportStatusEnum.NOT_PUBLISH.equals(detail.getStatus())) {
+                detail.getRecordList().get(0).setLatest(Boolean.TRUE);
+            } else {
+                detail.getRecordList().get(0).setLatest(Boolean.FALSE);
+            }
+        }
         return Result.ok().data(detail);
     }
 
@@ -138,9 +154,7 @@
     public Result all() {
         List<CalculateReport> entities = baseMapper.selectList(null);
         List<CalculateReportVO> vos = entities.stream()
-                .map(
-                        entity -> CalculateReportVO.getVoByEntity(entity, null)
-                )
+                .map(entity -> CalculateReportVO.getVoByEntity(entity, null))
                 .collect(Collectors.toList());
         return Result.ok().data(vos);
     }
@@ -152,18 +166,36 @@
         if (Objects.isNull(report)) {
             throw new RuntimeException("璇ユ牳绠楁姤鍛婁笉瀛樺湪");
         }
-        // 绱姞寰楀埌鎵f鎬婚
-        BigDecimal totalDeduct = form.getRecordList().stream()
-                .map(CalculateReportBackfillForm.RecordForm::getDeductMoney)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) {
+            throw new RuntimeException("鏈�鏂颁竴娆℃牳绠楁姤鍛婂凡缁忓彂甯冿紝鏃犳硶淇敼");
+        }
+        CalculateReportBackfillForm.RecordForm latestRecord = form.getRecordList().get(0);
+        CalculateRecord beforeRecord = calculateRecordMapper.selectById(latestRecord.getId());
+        if (Objects.isNull(beforeRecord)) {
+            throw new RuntimeException("鏈�杩戜竴娆℃牳绠楄褰曚笉瀛樺湪");
+        }
+        // 璁$畻寰楀埌鎵f鎬婚锛堝彧绠楁渶杩戜竴鏉★級
+        BigDecimal totalDeduct = report.getDeductMoney().subtract(latestRecord.getDeductMoney()).add(latestRecord.getDeductMoney());
         report.setDeductMoney(totalDeduct);
         baseMapper.updateById(report);
-        form.getRecordList().stream().forEach(item -> {
-            new LambdaUpdateChainWrapper<>(calculateRecordMapper)
-                    .eq(CalculateRecord::getId, item.getId())
-                    .set(CalculateRecord::getDeductMoney, item.getDeductMoney())
-                    .update();
-        });
+
+        beforeRecord.setDeductMoney(latestRecord.getDeductMoney());
+        calculateRecordMapper.updateById(beforeRecord);
+        return Result.ok("鎿嶄綔鎴愬姛");
+    }
+
+    @Override
+    public Result updatePublishStatus(Long reportId) {
+        CalculateReport report = baseMapper.selectById(reportId);
+        if (Objects.isNull(report)) {
+            throw new RuntimeException("璇ユ牳绠楁姤鍛婁笉瀛樺湪");
+        }
+        if (CalculateReportStatusEnum.NOT_PUBLISH.equals(report.getStatus())) {
+            report.setStatus(CalculateReportStatusEnum.PUBLISHED);
+        } else if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) {
+            report.setStatus(CalculateReportStatusEnum.NOT_PUBLISH);
+        }
+        baseMapper.updateById(report);
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 }
diff --git a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
index a70a9b1..21c56ba 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
@@ -13,18 +13,23 @@
         <result column="deduct_money" property="deductMoney"/>
         <result column="latest_time" property="latestTime"/>
         <result column="update_by" property="updateBy"/>
+        <result column="can_publish" property="canPublish"/>
+        <result column="status" property="status"/>
+        <result column="latestDeductMoney" property="latestDeductMoney"/>
     </resultMap>
 
     <select id="page" resultMap="BaseResultMap">
         SELECT
-        tyu.unit_name,
-        tc.name,
-        tcr.id,
-        tcr.deduct_money,
-        tcr.create_time,
-        tcr.update_time,
-        tcr.calculate_time,
-        tcr.latest_time
+            tyu.unit_name,
+            tc.name,
+            tcr.id,
+            tcr.status,
+            tcr.deduct_money,
+            tcr.create_time,
+            tcr.update_time,
+            tcr.calculate_time,
+            tcr.latest_time,
+            (SELECT a.deduct_money FROM (SELECT deduct_money,which_year, which_month FROM t_calculate_record WHERE contract_id = tcr.contract_id ORDER BY which_year, which_month DESC limit 1) a) as latestDeductMoney
         FROM
         t_calculate_report tcr
         INNER JOIN t_contract tc ON tcr.contract_id = tc.id
@@ -45,6 +50,7 @@
         <result column="contract_id" property="contractId"/>
         <result column="calculate_time" property="calculateTime"/>
         <result column="deduct_money" property="deductMoney"/>
+        <result column="status" property="status"/>
         <collection property="ruleList" column="contract_id" ofType="com.ycl.platform.domain.vo.CalculateMoneyRuleVO"
                     select="selectRuleByContractId"/>
         <collection property="recordList" column="contract_id" ofType="com.ycl.platform.domain.vo.CalculateRecordVO"
@@ -85,7 +91,8 @@
                tcr.deduct_money,
                tcr.create_time,
                tcr.update_time,
-               tcr.calculate_time
+               tcr.calculate_time,
+               tcr.status
         FROM t_calculate_report tcr
                  INNER JOIN t_contract tc ON tcr.contract_id = tc.id
                  INNER JOIN t_yw_unit tyu ON tyu.id = tc.unit_id

--
Gitblit v1.8.0