From b701cf0331e91900bf8055009a745d4953a6c510 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 30 三月 2026 17:58:23 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/hxsj' into hxsj
---
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPriceManagementServiceImpl.java | 95 ++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 92 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPriceManagementServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPriceManagementServiceImpl.java
index e90a7a2..707f829 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPriceManagementServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPriceManagementServiceImpl.java
@@ -1,19 +1,27 @@
package com.ruoyi.procurementrecord.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.excel.ExcelUtils;
+import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
+import com.ruoyi.procurementrecord.DiscountTypeEnum;
+import com.ruoyi.procurementrecord.dto.SimplePP;
import com.ruoyi.procurementrecord.mapper.ProcurementPriceManagementMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementPriceManagement;
import com.ruoyi.procurementrecord.service.ProcurementPriceManagementService;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Calendar;
+import java.util.Date;
import java.util.List;
/**
@@ -74,5 +82,86 @@
}
}
ExcelUtil<ProcurementPriceManagement> util = new ExcelUtil<ProcurementPriceManagement>(ProcurementPriceManagement.class);
- util.exportExcel(response, procurementPriceManagements, "閲囪喘浠锋牸绠$悊");}
+ util.exportExcel(response, procurementPriceManagements, "閲囪喘浠锋牸绠$悊");
+ }
+
+ @Override
+ @Transactional
+ public void autoCreateRecord(SimplePP simplePP) throws ServiceException {
+ // 鏍规嵁渚涘簲鍟唅d 浜у搧id 鏌ヨ鍑烘渶杩戜慨鏀圭殑涓�鏉¤褰曡繘琛屾瘮瀵�
+ ProcurementPriceManagement insertPriceManagement = new ProcurementPriceManagement();
+ BeanUtils.copyProperties(simplePP, insertPriceManagement);
+ LambdaQueryWrapper<ProcurementPriceManagement> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ProcurementPriceManagement::getSupplierId, simplePP.getSupplierId())
+ .eq(ProcurementPriceManagement::getProductId, simplePP.getProductId())
+ .orderByDesc(ProcurementPriceManagement::getUpdateTime).last("limit 1");
+ ProcurementPriceManagement lastRecord = procurementPriceManagementMapper.selectOne(queryWrapper);
+
+
+ insertPriceManagement.setActuallyPrice(simplePP.getFinalPrice());
+ insertPriceManagement.setDiscountType(DiscountTypeEnum.DISCOUNT_TYPE_NONE.getCode());
+ insertPriceManagement.setDiscountValue("0");
+ // 浣跨敤 Calendar 璁剧疆杩滄湡鏃ユ湡 (9999-12-31)
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(2099, Calendar.DECEMBER, 31);
+ insertPriceManagement.setDiscountEndTime(calendar.getTime());
+ insertPriceManagement.setEffectiveTime(new Date());
+ insertPriceManagement.setExpireTime(calendar.getTime());
+ insertPriceManagement.setReason("other");
+ // 杩涜鍒嗗埆鎯呭喌
+ BigDecimal currentPrice = simplePP.getFinalPrice();
+
+ if (lastRecord == null) {
+ insertPriceManagement.setBasePrice(currentPrice.toString());
+
+ insertPriceManagement.setMinPrice(null);
+ insertPriceManagement.setMaxPrice(null);
+ procurementPriceManagementMapper.insert(insertPriceManagement);
+ return;
+ }
+
+ int compareTo = lastRecord.getActuallyPrice().compareTo(currentPrice);
+ if (compareTo == 0) {
+ log.info("浠锋牸鏈彉鍖栵紝鏃犻渶鍒涘缓璁板綍");
+ return;
+ }
+
+ // 馃憠 浠锋牸鍙樺寲閫昏緫
+ insertPriceManagement.setBasePrice(String.valueOf(lastRecord.getActuallyPrice()));
+ insertPriceManagement.setMaxPrice(lastRecord.getMaxPrice());
+ insertPriceManagement.setMinPrice(lastRecord.getMinPrice());
+
+ // 璁$畻鎶樻墸
+// if(compareTo > 0){
+ BigDecimal basePrice = new BigDecimal(insertPriceManagement.getBasePrice());
+ BigDecimal actuallyPrice = insertPriceManagement.getActuallyPrice();
+ // 闃叉闄�0
+ if (basePrice.compareTo(BigDecimal.ZERO) == 0) {
+ insertPriceManagement.setDiscountValue("0");
+ return;
+ }
+
+ // 鎶樻墸 = (鍘熶环 - 鐜颁环) / 鍘熶环
+ BigDecimal discount = basePrice.subtract(actuallyPrice)
+ .divide(basePrice, 8, RoundingMode.HALF_UP);
+ if(discount.compareTo(new BigDecimal("0.01")) < 0 && discount.compareTo(new BigDecimal("0")) > 0){
+ // 杞负鍥哄畾閲戦
+ insertPriceManagement.setDiscountValue(String.valueOf(basePrice.subtract(actuallyPrice)));
+ insertPriceManagement.setDiscountType(DiscountTypeEnum.DISCOUNT_TYPE_FIXED.getCode());
+ }else {
+ insertPriceManagement.setDiscountType(DiscountTypeEnum.DISCOUNT_TYPE_PERCENTAGE.getCode());
+ // 杞櫨鍒嗘瘮锛埫�100锛�
+ BigDecimal percent = discount.multiply(new BigDecimal("100"));
+
+ // 淇濈暀2浣嶅皬鏁�
+ percent = percent.setScale(2, RoundingMode.HALF_UP);
+
+ // 璁剧疆鍊硷紙姣斿锛�20.00%锛�
+ insertPriceManagement.setDiscountValue(String.valueOf(percent));
+ }
+// }
+
+ // final insert
+ procurementPriceManagementMapper.insert(insertPriceManagement);
+ }
}
--
Gitblit v1.9.3