Browse Source

教材征订征订计算价格进行折扣计算的时候出现小数执行趋于零的计算

大数据与最优化研究所 1 month ago
parent
commit
10ea0b169e

+ 9 - 10
src/main/java/com/xjrsoft/module/textbook/controller/TextbookSubscriptionController.java

@@ -7,26 +7,18 @@ import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.base.entity.BaseClass;
-import com.xjrsoft.module.base.entity.BaseClassAdminCourse;
-import com.xjrsoft.module.base.entity.BaseClassCourse;
-import com.xjrsoft.module.base.entity.BaseGrade;
-import com.xjrsoft.module.base.service.IBaseClassService;
-import com.xjrsoft.module.student.entity.BaseClassMajorSet;
-import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.textbook.dto.*;
-import com.xjrsoft.module.textbook.entity.*;
+import com.xjrsoft.module.textbook.entity.TextbookSubscription;
+import com.xjrsoft.module.textbook.entity.TextbookSubscriptionItem;
 import com.xjrsoft.module.textbook.service.ITextbookSubscriptionService;
 import com.xjrsoft.module.textbook.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -177,6 +169,13 @@ public class TextbookSubscriptionController {
 
     }
 
+    @PutMapping("/alteration")
+    @ApiOperation(value = "变更")
+    @SaCheckPermission("wftextbooksubscription:edit")
+    public RT<Boolean> alteration(@Valid @RequestBody UpdateWfTextbookSubscriptionItemDto dto){
+        return RT.ok(textbookSubscriptionService.alteration(dto));
+    }
+
     @PutMapping(value = "/change-status")
     @ApiOperation(value = "修改征订状态")
     @SaCheckPermission("textbooksubscription:edit")

+ 6 - 0
src/main/java/com/xjrsoft/module/textbook/service/ITextbookSubscriptionService.java

@@ -69,6 +69,12 @@ public interface ITextbookSubscriptionService extends MPJBaseService<TextbookSub
     */
     Boolean update(TextbookSubscription textbookSubscription);
 
+    /**
+     * 变更
+     */
+    Boolean alteration(UpdateWfTextbookSubscriptionItemDto dto);
+
+
     Boolean changeStatus(UpdateWfTextbookSubscriptionDto dto);
 
     /**

+ 43 - 1
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookSubscriptionServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.textbook.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.excel.EasyExcel;
@@ -29,6 +30,7 @@ import com.xjrsoft.module.textbook.vo.*;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -189,7 +191,7 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
             stuNum += textbookSubscriptionItem.getStudentNum();
             teaNum += textbookSubscriptionItem.getTeacherNum();
 
-            currentPrice = textbookSubscriptionItem.getPrice().multiply(BigDecimal.valueOf(textbookSubscriptionItem.getDiscount()).divide(BigDecimal.valueOf(10), RoundingMode.UNNECESSARY))
+            currentPrice = textbookSubscriptionItem.getPrice().multiply(BigDecimal.valueOf(textbookSubscriptionItem.getDiscount()).divide(BigDecimal.valueOf(10), RoundingMode.DOWN))
                     .multiply(BigDecimal.valueOf(textbookSubscriptionItem.getTeacherNum() + textbookSubscriptionItem.getStudentNum()))
             ;
 
@@ -573,6 +575,46 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
         return true;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean alteration(UpdateWfTextbookSubscriptionItemDto dto) {
+        TextbookSubscriptionItem old = textbookSubscriptionTextbookSubscriptionItemMapper.selectById(dto.getId());
+        if(old == null){
+            throw new MyException("征订项已经被修改,刷新重试");
+        }
+
+        //将历史记录保存到历史变更记录表
+        LambdaQueryWrapper<WfTextbookSubscriptionItemHistory> wfTextbookSubscriptionItemHistoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        wfTextbookSubscriptionItemHistoryLambdaQueryWrapper
+                .eq(WfTextbookSubscriptionItemHistory::getWfTextbookSubscriptionItemId, old.getId())
+                .orderByDesc(WfTextbookSubscriptionItemHistory::getHistoryVersion)
+                .last("limit 1")
+        ;
+//        WfTextbookSubscriptionItemHistory lastOne = textbookSubscriptionItemHistoryMapper.selectOne(wfTextbookSubscriptionItemHistoryLambdaQueryWrapper);
+
+        WfTextbookSubscriptionItemHistory wfTextbookSubscriptionItemHistory = new WfTextbookSubscriptionItemHistory();
+        BeanUtils.copyProperties(old, wfTextbookSubscriptionItemHistory);
+        wfTextbookSubscriptionItemHistory.setId(null);
+        wfTextbookSubscriptionItemHistory.setWfTextbookSubscriptionItemId(old.getId());
+        wfTextbookSubscriptionItemHistory.setCreateDate(new Date());
+        wfTextbookSubscriptionItemHistory.setCreateUserId(StpUtil.getLoginIdAsLong());
+//        if(lastOne != null){
+//            wfTextbookSubscriptionItemHistory.setHistoryVersion(lastOne.getHistoryVersion() + 1);
+//        } else {
+//            wfTextbookSubscriptionItemHistory.setHistoryVersion(1);
+//        }
+//
+//        wfTextbookSubscriptionItemHistoryMapper.insert(wfTextbookSubscriptionItemHistory);
+
+        //变更当前记录
+        WfTextbookSubscriptionItem updateItem = new WfTextbookSubscriptionItem();
+        BeanUtils.copyProperties(dto, updateItem);
+
+//        wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.updateById(updateItem);
+
+        return true;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean changeStatus(UpdateWfTextbookSubscriptionDto dto) {

+ 4 - 0
src/main/resources/sqlScript/20250120_sql.sql

@@ -110,3 +110,7 @@ CREATE TABLE `student_report_plan_class_relation`  (
 
 ALTER TABLE `student_report_record`
   ADD COLUMN `student_report_plan_id` BIGINT NULL   COMMENT '报到计划id' AFTER `base_semester_id`;
+
+alter table textbook_subscription_item
+    add base_class_ids varchar(1024) null comment '按班级征订当前征订项的的教材使用的班级的主键';
+