From 095210f9149c73e6e00d997b39fd6c44a65e4d38 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期二, 28 四月 2026 22:04:17 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java | 193 ++++++++++++++++++++++++++++++++---------------
1 files changed, 131 insertions(+), 62 deletions(-)
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
index b82f12d..88de2ea 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
@@ -34,6 +34,8 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@@ -201,16 +203,16 @@
PricingRule existing = pricingRuleMapper.selectOne(qw);
if (existing != null) {
- // 鏇存柊
- existing.setFieldB(item.getUnitPrice());
+ // 鏇存柊锛堝厓杞垎锛�
+ existing.setFieldB(yuanToFen(item.getUnitPrice()));
existing.setUpdateTime(now);
pricingRuleMapper.updateById(existing);
} else {
- // 鏂板缓
+ // 鏂板缓锛堝厓杞垎锛�
PricingRule rule = new PricingRule();
rule.setType(Constants.ZERO);
rule.setFieldA(String.valueOf(item.getCategoryId()));
- rule.setFieldB(item.getUnitPrice());
+ rule.setFieldB(yuanToFen(item.getUnitPrice()));
rule.setCityId(request.getCityId());
rule.setDeleted(Constants.ZERO);
rule.setCreateTime(now);
@@ -250,7 +252,7 @@
PricingRule rule = existingMap.get(String.valueOf(category.getId()));
if (rule != null) {
vo.setPricingRuleId(rule.getId());
- vo.setUnitPrice(rule.getFieldB());
+ vo.setUnitPrice(fenToYuan(rule.getFieldB()));
}
return vo;
}).collect(Collectors.toList());
@@ -279,9 +281,9 @@
if (existing != null) {
existing.setFieldB(item.getStartDistance());
- existing.setFieldC(item.getStartPrice());
+ existing.setFieldC(yuanToFen(item.getStartPrice()));
existing.setFieldD(item.getExtraDistance());
- existing.setFieldE(item.getExtraPrice());
+ existing.setFieldE(yuanToFen(item.getExtraPrice()));
existing.setUpdateTime(now);
pricingRuleMapper.updateById(existing);
} else {
@@ -289,9 +291,9 @@
rule.setType(Constants.ONE);
rule.setFieldA(String.valueOf(item.getCategoryId()));
rule.setFieldB(item.getStartDistance());
- rule.setFieldC(item.getStartPrice());
+ rule.setFieldC(yuanToFen(item.getStartPrice()));
rule.setFieldD(item.getExtraDistance());
- rule.setFieldE(item.getExtraPrice());
+ rule.setFieldE(yuanToFen(item.getExtraPrice()));
rule.setCityId(request.getCityId());
rule.setDeleted(Constants.ZERO);
rule.setCreateTime(now);
@@ -332,9 +334,9 @@
if (rule != null) {
vo.setPricingRuleId(rule.getId());
vo.setStartDistance(rule.getFieldB());
- vo.setStartPrice(rule.getFieldC());
+ vo.setStartPrice(fenToYuan(rule.getFieldC()));
vo.setExtraDistance(rule.getFieldD());
- vo.setExtraPrice(rule.getFieldE());
+ vo.setExtraPrice(fenToYuan(rule.getFieldE()));
}
return vo;
}).collect(Collectors.toList());
@@ -379,66 +381,113 @@
}
@Override
- public Integer createEstimatedDelivery(EstimatedDeliverySaveDTO request) {
- PricingRule rule = new PricingRule();
- rule.setType(Constants.TWO);
- rule.setCityId(request.getCityId());
- rule.setFieldA(request.getDistance());
- rule.setFieldB(request.getDuration());
- rule.setDeleted(Constants.ZERO);
- rule.setCreateTime(new Date());
- rule.setUpdateTime(new Date());
- pricingRuleMapper.insert(rule);
- return rule.getId();
+ @Transactional(rollbackFor = Exception.class)
+ public void saveEstimatedDelivery(EstimatedDeliverySaveDTO request) {
+ if (request.getItems() == null || request.getItems().isEmpty()) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃舵晥閰嶇疆鍒楄〃涓嶈兘涓虹┖");
+ }
+ Date now = new Date();
+ for (EstimatedDeliverySaveDTO.EstimatedDeliveryItem item : request.getItems()) {
+ // 鏌ヨ宸叉湁瑙勫垯 type=2, fieldA, cityId, deleted=0
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.TWO)
+ .eq(PricingRule::getFieldA, String.valueOf(item.getFieldA()))
+ .eq(PricingRule::getCityId, request.getCityId())
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .last("limit 1");
+ PricingRule existing = pricingRuleMapper.selectOne(qw);
+
+ if (existing != null) {
+ existing.setFieldB(item.getStartDistance());
+ existing.setFieldC(item.getStartTime());
+ existing.setFieldD(item.getContinueDistance());
+ existing.setFieldE(item.getContinueTime());
+ existing.setUpdateTime(now);
+ pricingRuleMapper.updateById(existing);
+ } else {
+ PricingRule rule = new PricingRule();
+ rule.setType(Constants.TWO);
+ rule.setFieldA(String.valueOf(item.getFieldA()));
+ rule.setFieldB(item.getStartDistance());
+ rule.setFieldC(item.getStartTime());
+ rule.setFieldD(item.getContinueDistance());
+ rule.setFieldE(item.getContinueTime());
+ rule.setCityId(request.getCityId());
+ rule.setDeleted(Constants.ZERO);
+ rule.setCreateTime(now);
+ rule.setUpdateTime(now);
+ pricingRuleMapper.insert(rule);
+ }
+ }
}
@Override
- public void updateEstimatedDelivery(EstimatedDeliverySaveDTO request) {
- if (request.getId() == null) {
- throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "涓婚敭涓嶈兘涓虹┖");
- }
- PricingRule existing = pricingRuleMapper.selectById(request.getId());
- if (Objects.isNull(existing) || !Constants.equalsInteger(existing.getType(), Constants.TWO)) {
- throw new BusinessException(ResponseStatus.DATA_EMPTY);
- }
- existing.setFieldA(request.getDistance());
- existing.setFieldB(request.getDuration());
- existing.setCityId(request.getCityId());
- existing.setUpdateTime(new Date());
- pricingRuleMapper.updateById(existing);
- }
-
- @Override
- public void deleteEstimatedDelivery(Integer id) {
- PricingRule existing = pricingRuleMapper.selectById(id);
- if (Objects.isNull(existing) || !Constants.equalsInteger(existing.getType(), Constants.TWO)) {
- throw new BusinessException(ResponseStatus.DATA_EMPTY);
- }
- existing.setDeleted(Constants.ONE);
- existing.setUpdateTime(new Date());
- pricingRuleMapper.updateById(existing);
- }
-
- @Override
- public List<EstimatedDeliveryVO> listEstimatedDelivery(Integer cityId) {
+ public List<EstimatedDeliveryVO> getEstimatedDelivery(Integer cityId) {
QueryWrapper<PricingRule> qw = new QueryWrapper<>();
qw.lambda()
.eq(PricingRule::getType, Constants.TWO)
+ .in(PricingRule::getFieldA, "1", "2")
.eq(PricingRule::getCityId, cityId)
.eq(PricingRule::getDeleted, Constants.ZERO)
.orderByAsc(PricingRule::getFieldA);
List<PricingRule> rules = pricingRuleMapper.selectList(qw);
- if (CollectionUtils.isEmpty(rules)) {
- return new ArrayList<>();
+
+ // 灏嗗凡鏈夎鍒欐寜fieldA鍒嗙粍
+ Map<String, PricingRule> ruleMap = new HashMap<>();
+ for (PricingRule rule : rules) {
+ ruleMap.put(rule.getFieldA(), rule);
}
- return rules.stream().map(rule -> {
+
+ // 鍥哄畾杩斿洖2鏉★細fieldA=1(鏍囬�熻揪), fieldA=2(鏋侀�熻揪)锛屾棤鏁版嵁鏃惰繑鍥炵┖瀵硅薄
+ List<EstimatedDeliveryVO> voList = new ArrayList<>();
+ for (int fieldA = 1; fieldA <= 2; fieldA++) {
EstimatedDeliveryVO vo = new EstimatedDeliveryVO();
- vo.setPricingRuleId(rule.getId());
- vo.setCityId(rule.getCityId());
- vo.setDistance(rule.getFieldA());
- vo.setDuration(rule.getFieldB());
- return vo;
- }).collect(Collectors.toList());
+ vo.setCityId(cityId);
+ vo.setFieldA(fieldA);
+ PricingRule rule = ruleMap.get(String.valueOf(fieldA));
+ if (rule != null) {
+ vo.setPricingRuleId(rule.getId());
+ vo.setStartDistance(rule.getFieldB());
+ vo.setStartTime(rule.getFieldC());
+ vo.setContinueDistance(rule.getFieldD());
+ vo.setContinueTime(rule.getFieldE());
+ }
+ voList.add(vo);
+ }
+ return voList;
+ }
+
+ @Override
+ public BigDecimal calculateEstimatedTime(Integer cityId, Integer fieldA, BigDecimal distance) {
+ if (cityId == null || fieldA == null || distance == null) {
+ return null;
+ }
+ QueryWrapper<PricingRule> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(PricingRule::getType, Constants.TWO)
+ .eq(PricingRule::getFieldA, String.valueOf(fieldA))
+ .eq(PricingRule::getCityId, cityId)
+ .eq(PricingRule::getDeleted, Constants.ZERO)
+ .last("limit 1");
+ PricingRule rule = pricingRuleMapper.selectOne(qw);
+ if (rule == null) {
+ return null;
+ }
+ // fieldB=璧烽�侀噷绋�, fieldC=璧烽�佹椂闀�, fieldD=缁�侀噷绋�, fieldE=缁�佹椂闀�
+ BigDecimal startDistance = new BigDecimal(rule.getFieldB());
+ BigDecimal startTime = new BigDecimal(rule.getFieldC());
+ BigDecimal continueDistance = new BigDecimal(rule.getFieldD());
+ BigDecimal continueTime = new BigDecimal(rule.getFieldE());
+
+ // 璺濈 <= 璧烽�侀噷绋� 鈫� 鐩存帴杩斿洖璧烽�佹椂闀�
+ if (distance.compareTo(startDistance) <= 0) {
+ return startTime;
+ }
+ // 瓒呭嚭閮ㄥ垎锛氬悜涓婂彇鏁� * 缁�佹椂闀� + 璧烽�佹椂闀�
+ BigDecimal extraDistance = distance.subtract(startDistance);
+ BigDecimal extraCount = extraDistance.divide(continueDistance, 0, RoundingMode.CEILING);
+ return startTime.add(extraCount.multiply(continueTime));
}
@Override
@@ -459,6 +508,11 @@
Date now = new Date();
for (StoreDepositItemDTO item : request.getItems()) {
+ // 鍏冭浆鍒�
+ String depositFen = String.valueOf(new BigDecimal(item.getDepositAmount())
+ .multiply(new BigDecimal("100"))
+ .setScale(0, BigDecimal.ROUND_HALF_UP)
+ .longValue());
QueryWrapper<PricingRule> qw = new QueryWrapper<>();
qw.lambda()
.eq(PricingRule::getType, Constants.THREE)
@@ -469,14 +523,14 @@
PricingRule existing = pricingRuleMapper.selectOne(qw);
if (existing != null) {
- existing.setFieldB(item.getDepositAmount());
+ existing.setFieldB(depositFen);
existing.setUpdateTime(now);
pricingRuleMapper.updateById(existing);
} else {
PricingRule rule = new PricingRule();
rule.setType(Constants.THREE);
rule.setFieldA(String.valueOf(item.getFieldType()));
- rule.setFieldB(item.getDepositAmount());
+ rule.setFieldB(depositFen);
rule.setCityId(request.getCityId());
rule.setDeleted(Constants.ZERO);
rule.setCreateTime(now);
@@ -512,7 +566,7 @@
PricingRule rule = existingMap.get(String.valueOf(i));
if (rule != null) {
vo.setPricingRuleId(rule.getId());
- vo.setDepositAmount(rule.getFieldB());
+ vo.setDepositAmount(fenToYuan(rule.getFieldB()));
}
result.add(vo);
}
@@ -599,4 +653,19 @@
return result;
}
+ private String yuanToFen(String yuan) {
+ if (yuan == null || yuan.isEmpty()) return "0";
+ return String.valueOf(new BigDecimal(yuan)
+ .multiply(new BigDecimal("100"))
+ .setScale(0, RoundingMode.HALF_UP)
+ .longValue());
+ }
+
+ private String fenToYuan(String fen) {
+ if (fen == null || fen.isEmpty()) return "0";
+ return new BigDecimal(fen)
+ .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP)
+ .toPlainString();
+ }
+
}
--
Gitblit v1.9.3