From f615ec5c9239327740948501627545f8e78e2a9e Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 18 三月 2025 09:07:26 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 180 ++++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 128 insertions(+), 52 deletions(-)
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
index 51203ac..f0fa211 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -1,5 +1,8 @@
package com.ruoyi.order.service.impl;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -9,11 +12,13 @@
import com.ruoyi.common.core.constant.ExpressCompanyMap;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.HttpUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.uuid.QRCodeGenerator;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.enums.OrderStatus;
+import com.ruoyi.order.event.ConfirmDeliveryEvent;
import com.ruoyi.order.mapper.OrderGoodMapper;
import com.ruoyi.order.mapper.OrderMapper;
import com.ruoyi.order.model.Order;
@@ -44,6 +49,7 @@
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jetbrains.annotations.Nullable;
+import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -58,6 +64,7 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -117,6 +124,9 @@
private ShopBalanceStatementClient shopBalanceStatementClient;
@Resource
+ private ShopPointClient shopPointClient;
+
+ @Resource
private RedisTemplate redisTemplate;
@Resource
@@ -130,6 +140,12 @@
@Resource
private RegionClient regionClient;
+ @Resource
+ private AppUserGiveawayTemporaryClient appUserGiveawayTemporaryClient;
+ @Resource
+ private ShopGiveawayTemporaryClient shopGiveawayTemporaryClient;
+ @Resource
+ private ApplicationEventPublisher applicationEventPublisher;
@Override
@@ -176,9 +192,9 @@
}
// 优惠券
String couponJson = order.getCouponJson();
- CouponInfo couponInfo = new CouponInfo();
+ JSONObject jsonObject = new JSONObject();
if (StringUtils.isNotEmpty(couponJson)) {
- couponInfo = JSONObject.parseObject(couponJson, CouponInfo.class);
+ jsonObject = JSONObject.parseObject(couponJson);
}
// 参与活动
@@ -201,7 +217,7 @@
orderDetailVO.setOrderNumber(order.getOrderNumber());
orderDetailVO.setCreateTime(order.getCreateTime());
orderDetailVO.setTotalAmount(order.getTotalAmount());
- orderDetailVO.setCouponName(couponInfo.getCouponName());
+ orderDetailVO.setCouponName(jsonObject.getString("couponName"));
orderDetailVO.setActivityName(orderActivityInfo.getActivityName());
orderDetailVO.setCouponAmount(order.getDiscountTotalAmount());
orderDetailVO.setExpressAmount(order.getExpressAmount());
@@ -239,6 +255,7 @@
}
return orderDetailVO;
}
+
@Override
public boolean check(Order order, Integer shopId, Long userId) {
@@ -290,15 +307,14 @@
JSONObject jsonObject = JSONObject.parseObject(content);
Long days = jsonObject.getLong("days");
order.setOrderStatus(OrderStatus.COMPLETED.getCode());
- order.setIsCommission(0);
order.setAfterSaleTime(LocalDateTime.now().plusDays(days));
order.setEndTime(LocalDateTime.now());
order.setCancellerAppUserId(loginUserApplet.getUserid());
if (StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)) {
order.setTechnicianId(Integer.valueOf(technicianId));
}
- // TODO
orderMapper.updateById(order);
+ commissionService.calculationCommissionShop(order.getId());
}
@@ -439,52 +455,26 @@
if (200 == r.getCode()) {
this.updateById(order);
}
+
+ R r1 = balanceChangeRecordClient.deleteBalanceChangeRecordCopy(orderId, Arrays.asList(4));
+ if (200 != r1.getCode()) { // 项目没有分布式事务,此处报错可能会导致数据不一致
+ throw new RuntimeException("订单取消失败");
+ }
+ R r2 = userPointClient.deleteUserPointCopy(orderId, Arrays.asList(2,8,9,10,14));
+ if (200 != r2.getCode()) { // 项目没有分布式事务,此处报错可能会导致数据不一致
+ throw new RuntimeException("订单取消失败");
+ }
+ R<Boolean> r3 = shopBalanceStatementClient.deleteShopBalanceStatementCopy(orderId, Arrays.asList(1,2,3));
+ if (200 != r3.getCode()) { // 项目没有分布式事务,此处报错可能会导致数据不一致
+ throw new RuntimeException("订单取消失败");
+ }
+ shopPointClient.deleteShopPointCopy(orderId, Arrays.asList(1,2,3));
+ appUserGiveawayTemporaryClient.delAppUserGiveawayTemporary(orderId);
+ shopGiveawayTemporaryClient.delShopGiveawayTemporary(orderId);
return r;
}
- /**
- * 确认发货操作
- *
- * @return
- */
- @Override
- public R confirmDelivery(ConfirmDelivery confirmDelivery) {
- Order order = this.getById(confirmDelivery.getOrderId());
- if (1 == order.getPayStatus()) {
- return R.fail("订单还未完成支付");
- }
- if (1 == order.getOrderType() || null == order.getAddressJson()) {
- return R.fail("该订单不支付快递配送");
- }
- if (1 != order.getOrderStatus()) {
- return R.fail("无效的操作");
- }
- //添加快递号和修改订单状态
- order.setExpressJson(confirmDelivery.getCode());
- order.setDeliverProvince(confirmDelivery.getDeliverProvince());
- order.setDeliverProvinceCode(confirmDelivery.getDeliverProvinceCode());
- order.setDeliverCity(confirmDelivery.getDeliverCity());
- order.setDeliverCityCode(confirmDelivery.getDeliverCityCode());
- order.setDeliverDistrict(confirmDelivery.getDeliverDistrict());
- order.setDeliverDistrictCode(confirmDelivery.getDeliverDistrictCode());
- order.setOrderStatus(2);
- //添加查询快递信息队列
- //一小时后定时查询快递信息
- SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData();
- JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
- Integer waitTime = jsonObject.getInteger("waitTime");
- redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC));
- JSONObject jsonObject1 = JSON.parseObject(confirmDelivery.getCode());
- String com = jsonObject1.getString("com");
- String num = jsonObject1.getString("num");
- UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class);
- MapTrackKD100Vo mapTrackKD100Vo = ExpressDeliveryUtil.kd100MapTrack(com, num, order.getDeliverProvince() + order.getDeliverCity(),
- userAddress.getProvince() + userAddress.getCity());
- order.setExpressResult(JSON.toJSONString(mapTrackKD100Vo));
- this.updateById(order);
- return R.ok();
- }
/**
@@ -519,7 +509,8 @@
public R refundPayMoney(Order order) {
//开始退款
Integer payMethod = order.getPayMethod();
- BigDecimal paymentAmount = order.getPaymentAmount();
+ BigDecimal expressAmount = order.getExpressAmount() == null ? BigDecimal.ZERO : order.getExpressAmount();
+ BigDecimal paymentAmount = order.getPaymentAmount().add(expressAmount);
AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
if (1 == payMethod) {
//微信退款
@@ -562,6 +553,7 @@
balanceChangeRecord.setDelFlag(0);
balanceChangeRecord.setCreateTime(LocalDateTime.now());
balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord);
+
//退回获得的消费积分
//需要先检查会员等级时候回回退,使用回退后的会员等级查询配置
@@ -613,7 +605,6 @@
if (3 == payMethod) {
//开始运费退款,积分支付,运费是单独进行支付的,所以需要单独退款
if (null != order.getExpressAmount() && BigDecimal.ZERO.compareTo(order.getExpressAmount()) < 0) {
- BigDecimal expressAmount = order.getExpressAmount();
if (1 == order.getExpressPayMethod()) {
//微信退款
RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), expressAmount.doubleValue(), "/order/order/refundExpressPayMoneyCallback");
@@ -680,6 +671,11 @@
order.setRefundStatus(2);
order.setRefundTime(LocalDateTime.now());
+
+ shopPointClient.deleteShopPointCopy(order.getId(), Arrays.asList(1,2,3));
+ shopBalanceStatementClient.deleteShopBalanceStatementCopy(order.getId(), Arrays.asList(1,2,3));
+ appUserGiveawayTemporaryClient.delAppUserGiveawayTemporary(order.getId());
+ shopGiveawayTemporaryClient.delShopGiveawayTemporary(order.getId());
return R.ok();
}
@@ -826,6 +822,7 @@
Long days = jsonObject.getLong("days");
order.setAfterSaleTime(LocalDateTime.now().plusDays(days));
this.updateById(order);
+ commissionService.calculationCommissionShop(order.getId());
return R.ok();
}
@@ -953,6 +950,10 @@
if (order_express.size() > 0) {
for (Long id : order_express) {
Order order = this.getById(id);
+ if (order == null){
+ redisTemplate.opsForZSet().remove("order_express", id);
+ continue;
+ }
if (order.getOrderStatus() != 2) {
redisTemplate.opsForZSet().remove("order_express", id);
continue;
@@ -980,11 +981,15 @@
}
}
- @SneakyThrows
@Override
@Transactional(rollbackFor = Exception.class)
public void importExpress(String url) {
- URL url1 = new URL(url);
+ URL url1 = null;
+ try {
+ url1 = new URL(url);
+ } catch (MalformedURLException e) {
+ throw new RuntimeException(e);
+ }
try (InputStream fileInputStream = url1.openStream()) {
Workbook workbook = new XSSFWorkbook(fileInputStream);
Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet
@@ -992,18 +997,33 @@
for (int i = 1; i <= lastRowNum; i++) {
Row row = sheet.getRow(i);
// 订单编号
+ if (row.getCell(0) == null){
+ throw new ServiceException("第" + i + "行订单编号为空", 500);
+ }
row.getCell(0).setCellType(CellType.STRING);
String orderNum = row.getCell(0).getStringCellValue();
// 快递单号
+ if (row.getCell(1) == null){
+ throw new ServiceException("第" + i + "行快递单号为空", 500);
+ }
row.getCell(1).setCellType(CellType.STRING);
String expressNum = row.getCell(1).getStringCellValue();
// 快递公司名称
+ if (row.getCell(2) == null){
+ throw new ServiceException("第" + i + "行快递公司为空", 500);
+ }
row.getCell(2).setCellType(CellType.STRING);
String expressName = row.getCell(2).getStringCellValue();
// 省区划代码
+ if (row.getCell(3) == null){
+ throw new ServiceException("第" + i + "行省区划代码为空", 500);
+ }
row.getCell(3).setCellType(CellType.STRING);
String provinceCode = row.getCell(3).getStringCellValue();
// 市区划代码
+ if (row.getCell(4) == null){
+ throw new ServiceException("第" + i + "行市区划代码为空", 500);
+ }
row.getCell(4).setCellType(CellType.STRING);
String cityCode = row.getCell(4).getStringCellValue();
Order order = this.getOne(new LambdaQueryWrapper<Order>()
@@ -1048,7 +1068,10 @@
confirmDelivery.setDeliverProvinceCode(regionBiCode.getData().getCode());
confirmDelivery.setDeliverCity(regionBiCode1.getData().getName());
confirmDelivery.setDeliverCityCode(regionBiCode1.getData().getCode());
- confirmDelivery(confirmDelivery);
+ R r = confirmDelivery(confirmDelivery);
+ if (R.isError(r)) {
+ throw new ServiceException(r.getMsg(), 500);
+ }
}
} catch (IOException e) {
@@ -1058,6 +1081,54 @@
}
+
+ /**
+ * 确认发货操作
+ *
+ * @return
+ */
+ @Override
+ public R confirmDelivery(ConfirmDelivery confirmDelivery) {
+ Order order = this.getById(confirmDelivery.getOrderId());
+ if (1 == order.getPayStatus()) {
+ return R.fail("订单还未完成支付");
+ }
+ if (1 == order.getOrderType() || null == order.getAddressJson()) {
+ return R.fail("该订单不支付快递配送");
+ }
+ if (1 != order.getOrderStatus()) {
+ return R.fail("无效的操作");
+ }
+ //添加快递号和修改订单状态
+ order.setExpressJson(confirmDelivery.getCode());
+ order.setDeliverProvince(confirmDelivery.getDeliverProvince());
+ order.setDeliverProvinceCode(confirmDelivery.getDeliverProvinceCode());
+ order.setDeliverCity(confirmDelivery.getDeliverCity());
+ order.setDeliverCityCode(confirmDelivery.getDeliverCityCode());
+ order.setDeliverDistrict(confirmDelivery.getDeliverDistrict());
+ order.setDeliverDistrictCode(confirmDelivery.getDeliverDistrictCode());
+ order.setOrderStatus(2);
+ //添加查询快递信息队列
+ //一小时后定时查询快递信息
+ SystemConfig systemConfig = systemConfigClient.getSystemConfig(3).getData();
+ JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
+ Integer waitTime = jsonObject.getInteger("waitTime");
+ redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC));
+
+ JSONObject jsonObject1 = JSON.parseObject(confirmDelivery.getCode());
+ String com = jsonObject1.getString("com");
+ String num = jsonObject1.getString("num");
+ UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class);
+ MapTrackKD100Vo mapTrackKD100Vo = ExpressDeliveryUtil.kd100MapTrack(com, num, order.getDeliverProvince() + order.getDeliverCity(),
+ userAddress.getProvince() + userAddress.getCity());
+ order.setExpressResult(JSON.toJSONString(mapTrackKD100Vo));
+ this.updateById(order);
+
+ // 发布事件
+ applicationEventPublisher.publishEvent(new ConfirmDeliveryEvent(order.getId()));
+ return R.ok();
+ }
+
public static void importExpress2(String filePath) throws MalformedURLException {
@@ -1091,4 +1162,9 @@
public Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type) {
return this.baseMapper.getShopSaleNumByShopIds(shopIds, type);
}
+
+ @Override
+ public List<OrderExport> getOrderExportList(OrderPageList orderPageList) {
+ return Collections.emptyList();
+ }
}
--
Gitblit v1.7.1