pull/1121/head
parent
2b30158f3b
commit
9e7d81bb4b
|
|
@ -805,11 +805,11 @@ public class XktTask {
|
|||
storeProdList.forEach(storeProd -> {
|
||||
// 构建部分文档更新请求
|
||||
list.add(new BulkOperation.Builder().update(u -> u
|
||||
.action(a -> a.doc(new HashMap<String, Object>() {{
|
||||
put("storeWeight", ObjectUtils.defaultIfNull(storeWeightMap.get(storeProd.getStoreId()), Constants.STORE_WEIGHT_DEFAULT_ZERO));
|
||||
}}))
|
||||
.id(String.valueOf(storeProd.getId()))
|
||||
.index(Constants.ES_IDX_PRODUCT_INFO))
|
||||
.action(a -> a.doc(new HashMap<String, Object>() {{
|
||||
put("storeWeight", ObjectUtils.defaultIfNull(storeWeightMap.get(storeProd.getStoreId()), Constants.STORE_WEIGHT_DEFAULT_ZERO));
|
||||
}}))
|
||||
.id(String.valueOf(storeProd.getId()))
|
||||
.index(Constants.ES_IDX_PRODUCT_INFO))
|
||||
.build());
|
||||
});
|
||||
try {
|
||||
|
|
@ -873,11 +873,11 @@ public class XktTask {
|
|||
.toMap(x -> x.getStoreProdId(), x -> x.getPrice()));
|
||||
// 档口商品的属性map
|
||||
Map<Long, StoreProductCategoryAttribute> cateAttrMap = this.cateAttrMapper.selectList(new LambdaQueryWrapper<StoreProductCategoryAttribute>()
|
||||
.eq(StoreProductCategoryAttribute::getDelFlag, Constants.UNDELETED).in(StoreProductCategoryAttribute::getStoreProdId, storeProdIdList))
|
||||
.eq(StoreProductCategoryAttribute::getDelFlag, Constants.UNDELETED).in(StoreProductCategoryAttribute::getStoreProdId, storeProdIdList))
|
||||
.stream().collect(Collectors.toMap(x -> x.getStoreProdId(), x -> x));
|
||||
// 档口商品对应的档口
|
||||
Map<Long, Store> storeMap = this.storeMapper.selectList(new LambdaQueryWrapper<Store>().eq(Store::getDelFlag, Constants.UNDELETED)
|
||||
.in(Store::getId, unpublicList.stream().map(x -> x.getStoreId()).collect(Collectors.toList())))
|
||||
.in(Store::getId, unpublicList.stream().map(x -> x.getStoreId()).collect(Collectors.toList())))
|
||||
.stream().collect(Collectors.toMap(x -> x.getId(), x -> x));
|
||||
// 构建批量操作请求
|
||||
List<BulkOperation> bulkOperations = new ArrayList<>();
|
||||
|
|
@ -959,6 +959,40 @@ public class XktTask {
|
|||
log.info("-------------自动关闭超时订单结束-------------");
|
||||
}
|
||||
|
||||
public void autoCompleteStoreOrder() {
|
||||
log.info("-------------自动完成订单开始-------------");
|
||||
Integer batchCount = 20;
|
||||
Date beforeDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, 14);
|
||||
List<Long> storeOrderIds = storeOrderService.listNeedAutoCompleteOrder(beforeDate, batchCount);
|
||||
for (Long storeOrderId : storeOrderIds) {
|
||||
log.info("开始处理: {}", storeOrderId);
|
||||
try {
|
||||
storeOrderService.completeOrder(storeOrderId, -1L);
|
||||
} catch (Exception e) {
|
||||
log.error("自动完成订单异常", e);
|
||||
fsNotice.sendMsg2DefaultChat("自动完成订单异常", "订单ID:" + storeOrderId);
|
||||
}
|
||||
}
|
||||
log.info("-------------自动完成订单结束-------------");
|
||||
}
|
||||
|
||||
public void autoRefundStoreOrder() {
|
||||
log.info("-------------自动订单退款开始-------------");
|
||||
Integer batchCount = 20;
|
||||
List<Long> storeOrderIds = storeOrderService.listNeedAutoRefundOrder(batchCount);
|
||||
for (Long storeOrderId : storeOrderIds) {
|
||||
log.info("开始处理: {}", storeOrderId);
|
||||
try {
|
||||
StoreOrderRefund storeOrderRefund = storeOrderService.prepareRefundByOriginOrder(storeOrderId);
|
||||
callRefund(storeOrderRefund);
|
||||
} catch (Exception e) {
|
||||
log.error("自动完成订单异常", e);
|
||||
fsNotice.sendMsg2DefaultChat("自动完成订单异常", "订单ID:" + storeOrderId);
|
||||
}
|
||||
}
|
||||
log.info("-------------自动订单退款结束-------------");
|
||||
}
|
||||
|
||||
/**
|
||||
* 继续处理退款(异常中断补偿,非正常流程)
|
||||
*/
|
||||
|
|
@ -968,46 +1002,50 @@ public class XktTask {
|
|||
List<StoreOrderRefund> storeOrderRefunds = storeOrderService.listNeedContinueRefundOrder(batchCount);
|
||||
for (StoreOrderRefund storeOrderRefund : storeOrderRefunds) {
|
||||
log.info("开始处理: {}", storeOrderRefund);
|
||||
try {
|
||||
//支付宝接口要求:同一笔交易的退款至少间隔3s后发起
|
||||
String markKey = CacheConstants.STORE_ORDER_REFUND_PROCESSING_MARK +
|
||||
storeOrderRefund.getRefundOrder().getId();
|
||||
boolean less3s = redisCache.hasKey(markKey);
|
||||
if (less3s) {
|
||||
log.warn("订单[{}]退款间隔小于3s跳过执行", storeOrderRefund.getRefundOrder().getId());
|
||||
continue;
|
||||
}
|
||||
PaymentManager paymentManager = getPaymentManager(EPayChannel.of(storeOrderRefund.getRefundOrder().getPayChannel()));
|
||||
//查询退款结果
|
||||
ENetResult queryResult = paymentManager.queryStoreOrderRefundResult(
|
||||
storeOrderRefund.getRefundOrder().getOrderNo(),
|
||||
storeOrderRefund.getOriginOrder().getOrderNo());
|
||||
if (ENetResult.SUCCESS == queryResult) {
|
||||
//退款成功
|
||||
callRefund(storeOrderRefund);
|
||||
}
|
||||
log.info("-------------继续处理退款结束-------------");
|
||||
}
|
||||
|
||||
private void callRefund(StoreOrderRefund storeOrderRefund) {
|
||||
try {
|
||||
//支付宝接口要求:同一笔交易的退款至少间隔3s后发起
|
||||
String markKey = CacheConstants.STORE_ORDER_REFUND_PROCESSING_MARK +
|
||||
storeOrderRefund.getRefundOrder().getId();
|
||||
boolean less3s = redisCache.hasKey(markKey);
|
||||
if (less3s) {
|
||||
log.warn("订单[{}]退款间隔小于3s跳过执行", storeOrderRefund.getRefundOrder().getId());
|
||||
return;
|
||||
}
|
||||
PaymentManager paymentManager = getPaymentManager(EPayChannel.of(storeOrderRefund.getRefundOrder().getPayChannel()));
|
||||
//查询退款结果
|
||||
ENetResult queryResult = paymentManager.queryStoreOrderRefundResult(
|
||||
storeOrderRefund.getRefundOrder().getOrderNo(),
|
||||
storeOrderRefund.getOriginOrder().getOrderNo());
|
||||
if (ENetResult.SUCCESS == queryResult) {
|
||||
//退款成功
|
||||
//支付状态->已支付,收款单到账
|
||||
storeOrderService.refundSuccess(storeOrderRefund.getRefundOrder().getId(),
|
||||
storeOrderRefund.getRefundOrderDetails().stream().map(SimpleEntity::getId).collect(Collectors.toList()),
|
||||
null);
|
||||
} else {
|
||||
//可能是退款失败,也可能是退款处理中,重复调用支付宝接口时只要参数正确也不会重复退款
|
||||
boolean success = paymentManager.refundStoreOrder(storeOrderRefund);
|
||||
//标记
|
||||
redisCache.setCacheObject(markKey, 1, 3, TimeUnit.SECONDS);
|
||||
if (success) {
|
||||
//支付状态->已支付,收款单到账
|
||||
storeOrderService.refundSuccess(storeOrderRefund.getRefundOrder().getId(),
|
||||
storeOrderRefund.getRefundOrderDetails().stream().map(SimpleEntity::getId).collect(Collectors.toList()),
|
||||
null);
|
||||
} else {
|
||||
//可能是退款失败,也可能是退款处理中,重复调用支付宝接口时只要参数正确也不会重复退款
|
||||
boolean success = paymentManager.refundStoreOrder(storeOrderRefund);
|
||||
//标记
|
||||
redisCache.setCacheObject(markKey, 1, 3, TimeUnit.SECONDS);
|
||||
if (success) {
|
||||
//支付状态->已支付,收款单到账
|
||||
storeOrderService.refundSuccess(storeOrderRefund.getRefundOrder().getId(),
|
||||
storeOrderRefund.getRefundOrderDetails().stream().map(SimpleEntity::getId).collect(Collectors.toList()),
|
||||
null);
|
||||
} else {
|
||||
fsNotice.sendMsg2DefaultChat("退款失败", "参数: " + JSON.toJSONString(storeOrderRefund));
|
||||
}
|
||||
fsNotice.sendMsg2DefaultChat("退款失败", "参数: " + JSON.toJSONString(storeOrderRefund));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("继续处理退款异常", e);
|
||||
fsNotice.sendMsg2DefaultChat("退款异常", "参数: " + JSON.toJSONString(storeOrderRefund));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("继续处理退款异常", e);
|
||||
fsNotice.sendMsg2DefaultChat("退款异常", "参数: " + JSON.toJSONString(storeOrderRefund));
|
||||
}
|
||||
log.info("-------------继续处理退款结束-------------");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1276,7 +1314,7 @@ public class XktTask {
|
|||
return;
|
||||
}
|
||||
tagList.addAll(storeProdList.stream().map(x -> DailyProdTag.builder().storeId(x.getStoreId()).storeProdId(x.getId())
|
||||
.type(ProdTagType.SEVEN_DAY_NEW.getValue()).tag(ProdTagType.SEVEN_DAY_NEW.getLabel()).voucherDate(now).build())
|
||||
.type(ProdTagType.SEVEN_DAY_NEW.getValue()).tag(ProdTagType.SEVEN_DAY_NEW.getLabel()).voucherDate(now).build())
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
|
|
@ -1319,7 +1357,7 @@ public class XktTask {
|
|||
.collectingAndThen(Collectors.toList(), list -> list.stream().limit(20).collect(Collectors.toList()))));
|
||||
storeHotSaleMap.forEach((storeId, saleList) -> {
|
||||
tagList.addAll(saleList.stream().map(x -> DailyProdTag.builder().storeId(x.getStoreId()).storeProdId(x.getStoreProdId())
|
||||
.type(ProdTagType.STORE_HOT.getValue()).tag(ProdTagType.STORE_HOT.getLabel()).voucherDate(now).build())
|
||||
.type(ProdTagType.STORE_HOT.getValue()).tag(ProdTagType.STORE_HOT.getLabel()).voucherDate(now).build())
|
||||
.collect(Collectors.toList()));
|
||||
});
|
||||
}
|
||||
|
|
@ -1338,7 +1376,7 @@ public class XktTask {
|
|||
return;
|
||||
}
|
||||
tagList.addAll(top50List.stream().map(x -> DailyProdTag.builder().storeId(x.getStoreId()).storeProdId(x.getStoreProdId())
|
||||
.tag(ProdTagType.MONTH_HOT.getLabel()).type(ProdTagType.MONTH_HOT.getValue()).voucherDate(now).build())
|
||||
.tag(ProdTagType.MONTH_HOT.getLabel()).type(ProdTagType.MONTH_HOT.getValue()).voucherDate(now).build())
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
|
|
@ -1424,7 +1462,7 @@ public class XktTask {
|
|||
return;
|
||||
}
|
||||
tagList.addAll(thousandSaleList.stream().map(x -> DailyStoreTag.builder().storeId(x.getStoreId()).voucherDate(now)
|
||||
.type(StoreTagType.MONTH_SALES_THOUSAND.getValue()).tag(StoreTagType.MONTH_SALES_THOUSAND.getLabel()).build())
|
||||
.type(StoreTagType.MONTH_SALES_THOUSAND.getValue()).tag(StoreTagType.MONTH_SALES_THOUSAND.getLabel()).build())
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
|
|
@ -1476,8 +1514,8 @@ public class XktTask {
|
|||
return;
|
||||
}
|
||||
tagList.addAll(top50List.stream().map(DailyStoreTagDTO::getStoreId).distinct().map(storeId -> DailyStoreTag.builder()
|
||||
.storeId(storeId).type(StoreTagType.HOT_RANK.getValue()).tag(StoreTagType.HOT_RANK.getLabel())
|
||||
.voucherDate(now).build())
|
||||
.storeId(storeId).type(StoreTagType.HOT_RANK.getValue()).tag(StoreTagType.HOT_RANK.getLabel())
|
||||
.voucherDate(now).build())
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
|
|
@ -1495,8 +1533,8 @@ public class XktTask {
|
|||
return;
|
||||
}
|
||||
tagList.addAll(top20List.stream().map(DailyStoreTagDTO::getStoreId).distinct().map(storeId -> DailyStoreTag.builder()
|
||||
.storeId(storeId).type(StoreTagType.NEW_PRODUCT.getValue()).tag(StoreTagType.NEW_PRODUCT.getLabel())
|
||||
.voucherDate(now).build())
|
||||
.storeId(storeId).type(StoreTagType.NEW_PRODUCT.getValue()).tag(StoreTagType.NEW_PRODUCT.getLabel())
|
||||
.voucherDate(now).build())
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
|
|
@ -1514,11 +1552,11 @@ public class XktTask {
|
|||
.forEach((storeProdId, tags) -> {
|
||||
// 构建部分文档更新请求
|
||||
list.add(new BulkOperation.Builder().update(u -> u
|
||||
.action(a -> a.doc(new HashMap<String, Object>() {{
|
||||
put("tags", tags.stream().sorted(Comparator.comparing(x -> x.getType())).map(DailyProdTag::getTag).collect(Collectors.toList()));
|
||||
}}))
|
||||
.id(String.valueOf(storeProdId))
|
||||
.index(Constants.ES_IDX_PRODUCT_INFO))
|
||||
.action(a -> a.doc(new HashMap<String, Object>() {{
|
||||
put("tags", tags.stream().sorted(Comparator.comparing(x -> x.getType())).map(DailyProdTag::getTag).collect(Collectors.toList()));
|
||||
}}))
|
||||
.id(String.valueOf(storeProdId))
|
||||
.index(Constants.ES_IDX_PRODUCT_INFO))
|
||||
.build());
|
||||
});
|
||||
// 调用bulk方法执行批量更新操作
|
||||
|
|
|
|||
|
|
@ -2458,6 +2458,17 @@ ALTER TABLE `store_order`
|
|||
ADD COLUMN `platform_involve_reason` varchar (512) NULL COMMENT '平台介入原因' AFTER `refund_reject_reason`,
|
||||
ADD COLUMN `platform_involve_result` varchar (512) NULL COMMENT '平台介入结果' AFTER `platform_involve_reason`;
|
||||
|
||||
ALTER TABLE `store_order`
|
||||
ADD COLUMN `pay_over_time` datetime NULL COMMENT '支付完成时间' AFTER `voucher_date`,
|
||||
ADD COLUMN `delivery_over_time` datetime NULL COMMENT '发货完成时间' AFTER `pay_over_time`;
|
||||
|
||||
ALTER TABLE `store_order`
|
||||
ADD INDEX `idx_delivery_end_time`(`delivery_end_time`) USING BTREE,
|
||||
ADD INDEX `idx_delivery_over_time`(`delivery_over_time`) USING BTREE;
|
||||
|
||||
ALTER TABLE `store_order`
|
||||
ADD INDEX `idx_pay_over_time`(`pay_over_time`) USING BTREE;
|
||||
|
||||
DROP TABLE IF EXISTS `store_order_detail`;
|
||||
CREATE TABLE `store_order_detail`
|
||||
(
|
||||
|
|
|
|||
|
|
@ -155,6 +155,14 @@ public class StoreOrder extends SimpleEntity {
|
|||
* 凭证日期
|
||||
*/
|
||||
private Date voucherDate;
|
||||
/**
|
||||
* 支付完成时间
|
||||
*/
|
||||
private Date payOverTime;
|
||||
/**
|
||||
* 发货完成时间
|
||||
*/
|
||||
private Date deliveryOverTime;
|
||||
/**
|
||||
* 平台介入原因
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -153,6 +153,14 @@ public class StoreOrderDTO {
|
|||
* 凭证日期
|
||||
*/
|
||||
private Date voucherDate;
|
||||
/**
|
||||
* 支付完成时间
|
||||
*/
|
||||
private Date payOverTime;
|
||||
/**
|
||||
* 发货完成时间
|
||||
*/
|
||||
private Date deliveryOverTime;
|
||||
/**
|
||||
* 删除标志(0代表存在 2代表删除)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -6,8 +6,10 @@ import com.ruoyi.xkt.dto.order.StoreOrderCountDTO;
|
|||
import com.ruoyi.xkt.dto.order.StoreOrderCountQueryDTO;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderPageItemDTO;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderQueryDTO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -22,4 +24,8 @@ public interface StoreOrderMapper extends BaseMapper<StoreOrder> {
|
|||
List<StoreOrder> listNeedContinueRefundOrder();
|
||||
|
||||
StoreOrderCountDTO countOrder(StoreOrderCountQueryDTO queryDTO);
|
||||
|
||||
List<StoreOrder> listNeedAutoCompleteOrder(@Param("deliveryBeforeTime") Date deliveryBeforeTime);
|
||||
|
||||
List<StoreOrder> listNeedAutoRefundOrder();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -206,6 +206,14 @@ public interface IStoreOrderService {
|
|||
*/
|
||||
StoreOrderRefund prepareRefundOrder(StoreOrderRefundConfirmDTO refundConfirmDTO);
|
||||
|
||||
/**
|
||||
* 准备退款
|
||||
*
|
||||
* @param storeOrderId
|
||||
* @return
|
||||
*/
|
||||
StoreOrderRefund prepareRefundByOriginOrder(Long storeOrderId);
|
||||
|
||||
/**
|
||||
* 退款成功
|
||||
*
|
||||
|
|
@ -231,6 +239,23 @@ public interface IStoreOrderService {
|
|||
*/
|
||||
List<Long> listNeedAutoCloseOrder(Date beforeDate, Integer count);
|
||||
|
||||
/**
|
||||
* 获取需要自动完成的订单
|
||||
*
|
||||
* @param beforeDate
|
||||
* @param count
|
||||
* @return
|
||||
*/
|
||||
List<Long> listNeedAutoCompleteOrder(Date beforeDate, Integer count);
|
||||
|
||||
/**
|
||||
* 获取需要自动退款的订单
|
||||
*
|
||||
* @param count
|
||||
* @return
|
||||
*/
|
||||
List<Long> listNeedAutoRefundOrder(Integer count);
|
||||
|
||||
/**
|
||||
* 获取需要继续退款的订单信息
|
||||
*
|
||||
|
|
|
|||
|
|
@ -663,6 +663,7 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
order.setPayStatus(EPayStatus.PAID.getValue());
|
||||
order.setPayTradeNo(payTradeNo);
|
||||
order.setRealTotalAmount(realTotalAmount);
|
||||
order.setPayOverTime(new Date());
|
||||
int orderSuccess = storeOrderMapper.updateById(prepareUpdate(order));
|
||||
if (orderSuccess == 0) {
|
||||
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||
|
|
@ -812,6 +813,10 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
}
|
||||
//订单 -> 代发货/已发货
|
||||
order.setOrderStatus(currentOrderStatus.getValue());
|
||||
if (EOrderStatus.SHIPPED == currentOrderStatus) {
|
||||
//发货完成时间
|
||||
order.setDeliveryOverTime(new Date());
|
||||
}
|
||||
int orderSuccess = storeOrderMapper.updateById(prepareUpdate(order));
|
||||
if (orderSuccess == 0) {
|
||||
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||
|
|
@ -893,6 +898,10 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
}
|
||||
//订单 -> 代发货/已发货
|
||||
order.setOrderStatus(currentOrderStatus.getValue());
|
||||
if (EOrderStatus.SHIPPED == currentOrderStatus) {
|
||||
//发货完成时间
|
||||
order.setDeliveryOverTime(new Date());
|
||||
}
|
||||
int orderSuccess = storeOrderMapper.updateById(prepareUpdate(order));
|
||||
if (orderSuccess == 0) {
|
||||
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||
|
|
@ -1374,6 +1383,52 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
return new StoreOrderRefund(order, refundOrderDetails, getAndBaseCheck(order.getOriginOrderId()));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public StoreOrderRefund prepareRefundByOriginOrder(Long storeOrderId) {
|
||||
StoreOrder order = getAndBaseCheck(storeOrderId);
|
||||
if (!EOrderStatus.PENDING_SHIPMENT.getValue().equals(order.getOrderStatus())) {
|
||||
throw new ServiceException(CharSequenceUtil.format("订单[{}]当前状态无法自动退款",
|
||||
order.getOrderNo()));
|
||||
}
|
||||
boolean existsRefund = storeOrderMapper.exists(Wrappers.lambdaQuery(StoreOrder.class)
|
||||
.eq(SimpleEntity::getDelFlag, Constants.UNDELETED)
|
||||
.eq(StoreOrder::getOriginOrderId, storeOrderId));
|
||||
if (existsRefund) {
|
||||
throw new ServiceException(CharSequenceUtil.format("订单[{}]已存在售后订单,无法自动退款",
|
||||
order.getOrderNo()));
|
||||
}
|
||||
List<StoreOrderDetail> details = storeOrderDetailMapper.selectList(Wrappers.lambdaQuery(StoreOrderDetail.class)
|
||||
.eq(StoreOrderDetail::getStoreOrderId, order.getId())
|
||||
.eq(SimpleEntity::getDelFlag, Constants.UNDELETED));
|
||||
for (StoreOrderDetail detail : details) {
|
||||
if (!EOrderStatus.PENDING_SHIPMENT.getValue().equals(detail.getDetailStatus())) {
|
||||
throw new ServiceException(CharSequenceUtil.format("订单[{}]存在非待发货状态明细,无法自动退款",
|
||||
order.getOrderNo()));
|
||||
}
|
||||
detail.setDetailStatus(EOrderStatus.CANCELLED.getValue());
|
||||
int orderDetailSuccess = storeOrderDetailMapper.updateById(prepareUpdate(detail));
|
||||
if (orderDetailSuccess == 0) {
|
||||
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||
}
|
||||
}
|
||||
order.setOrderStatus(EOrderStatus.CANCELLED.getValue());
|
||||
int orderSuccess = storeOrderMapper.updateById(prepareUpdate(order));
|
||||
if (orderSuccess == 0) {
|
||||
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||
}
|
||||
StoreOrderAfterSaleDTO applyDTO = new StoreOrderAfterSaleDTO();
|
||||
applyDTO.setStoreOrderId(storeOrderId);
|
||||
applyDTO.setStoreOrderDetailIds(details.stream().map(SimpleEntity::getId).collect(Collectors.toList()));
|
||||
applyDTO.setOperatorId(-1L);
|
||||
applyDTO.setRefundReasonCode("超时未发货自动退款");
|
||||
AfterSaleApplyResultDTO applyResult = createAfterSaleOrder(applyDTO);
|
||||
StoreOrderRefundConfirmDTO confirmDTO = new StoreOrderRefundConfirmDTO();
|
||||
confirmDTO.setStoreOrderId(applyResult.getStoreOrderId());
|
||||
confirmDTO.setOperatorId(-1L);
|
||||
return prepareRefundOrder(confirmDTO);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void refundSuccess(Long storeOrderId, List<Long> storeOrderDetailIds, Long operatorId) {
|
||||
|
|
@ -1480,6 +1535,24 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
return orders.stream().map(SimpleEntity::getId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> listNeedAutoCompleteOrder(Date beforeDate, Integer count) {
|
||||
if (count != null) {
|
||||
PageHelper.startPage(1, count, false);
|
||||
}
|
||||
List<StoreOrder> orders = storeOrderMapper.listNeedAutoCompleteOrder(beforeDate);
|
||||
return orders.stream().map(SimpleEntity::getId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> listNeedAutoRefundOrder(Integer count) {
|
||||
if (count != null) {
|
||||
PageHelper.startPage(1, count, false);
|
||||
}
|
||||
List<StoreOrder> orders = storeOrderMapper.listNeedAutoRefundOrder();
|
||||
return orders.stream().map(SimpleEntity::getId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StoreOrderRefund> listNeedContinueRefundOrder(Integer count) {
|
||||
if (count != null) {
|
||||
|
|
|
|||
|
|
@ -592,6 +592,8 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
if (CollUtil.isEmpty(fileIds)) {
|
||||
return ListUtil.empty();
|
||||
}
|
||||
// 商品下载量+1
|
||||
redisCache.valueIncr(CacheConstants.PRODUCT_STATISTICS_DOWNLOAD_COUNT, storeProductId);
|
||||
List<SysFile> files = fileMapper.selectByIds(fileIds);
|
||||
return files.stream()
|
||||
.filter(o -> UNDELETED.equals(o.getDelFlag()))
|
||||
|
|
@ -732,6 +734,8 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
// 将用户浏览足迹添加到redis中
|
||||
this.updateUserBrowsingToRedis(storeProdId, appResDTO.getStoreId(), appResDTO.getStoreName(), appResDTO.getProdArtNum(),
|
||||
appResDTO.getProdTitle(), appResDTO.getMinPrice(), mainPicUrl);
|
||||
// 商品浏览量+1
|
||||
redisCache.valueIncr(CacheConstants.PRODUCT_STATISTICS_VIEW_COUNT, storeProdId);
|
||||
return appResDTO.setTags(StringUtils.isNotBlank(appResDTO.getTagStr()) ? StrUtil.split(appResDTO.getTagStr(), ",") : null)
|
||||
// 拼接几色几码
|
||||
.setSpecification((CollectionUtils.isNotEmpty(colorList) ? colorList.size() + "色" : "") +
|
||||
|
|
@ -853,6 +857,8 @@ public class StoreProductServiceImpl implements IStoreProductService {
|
|||
.filter(x -> Objects.equals(x.getOrderNum(), ORDER_NUM_1)).map(StoreProdFileResDTO::getFileUrl).findAny().orElse("");
|
||||
// 将用户浏览足迹添加到redis中
|
||||
this.updateUserBrowsingToRedis(storeProdId, prodInfoDTO.getStoreId(), prodInfoDTO.getStoreName(), prodInfoDTO.getProdArtNum(), prodInfoDTO.getProdTitle(), minPrice, mainPicUrl);
|
||||
// 商品浏览量+1
|
||||
redisCache.valueIncr(CacheConstants.PRODUCT_STATISTICS_VIEW_COUNT, storeProdId);
|
||||
return prodInfoDTO.setColorList(colorList);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,10 +42,10 @@
|
|||
AND so.delivery_type = #{deliveryType}
|
||||
</if>
|
||||
<if test="orderTimeBegin != null and orderTimeEnd != null">
|
||||
AND EXISTS (SELECT 1 FROM store_order_operation_record r WHERE r.target_type = 1 AND r.target_id = so.id AND r.action = 1 AND r.operation_time BETWEEN #{orderTimeBegin} AND #{orderTimeEnd})
|
||||
AND so.create_time BETWEEN #{orderTimeBegin} AND #{orderTimeEnd}
|
||||
</if>
|
||||
<if test="payTimeBegin != null and payTimeEnd != null">
|
||||
AND EXISTS (SELECT 1 FROM store_order_operation_record r WHERE r.target_type = 1 AND r.target_id = so.id AND r.action = 4 AND r.operation_time BETWEEN #{payTimeBegin} AND #{payTimeEnd})
|
||||
AND so.pay_over_time BETWEEN #{payTimeBegin} AND #{payTimeEnd}
|
||||
</if>
|
||||
<if test="expressWaybillNo != null and expressWaybillNo !=''">
|
||||
AND EXISTS (SELECT 1 FROM store_order_detail sod WHERE sod.store_order_id = so.id AND sod.del_flag = '0' AND sod.express_waybill_no LIKE CONCAT('%', #{expressWaybillNo}, '%'))
|
||||
|
|
@ -101,4 +101,28 @@
|
|||
</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="listNeedAutoCompleteOrder" resultType="com.ruoyi.xkt.domain.StoreOrder">
|
||||
SELECT
|
||||
so.*
|
||||
FROM
|
||||
store_order so
|
||||
<where>
|
||||
so.del_flag = '0'
|
||||
AND so.order_status = 13
|
||||
AND so.delivery_over_time <= #{deliveryBeforeTime}
|
||||
AND NOT EXISTS (SELECT 1 FROM store_order rso WHERE rso.origin_order_id = so.id AND rso.del_flag = '0' AND rso.order_type = 2 AND rso.order_status != 24)
|
||||
</where>
|
||||
</select>
|
||||
<select id="listNeedAutoRefundOrder" resultType="com.ruoyi.xkt.domain.StoreOrder">
|
||||
SELECT
|
||||
so.*
|
||||
FROM
|
||||
store_order so
|
||||
WHERE
|
||||
so.del_flag = '0'
|
||||
AND so.order_status = 12
|
||||
AND so.delivery_end_time <= NOW()
|
||||
AND NOT EXISTS (SELECT 1 FROM store_order rso WHERE rso.origin_order_id = so.id AND rso.del_flag = '0' AND rso.order_type = 2)
|
||||
AND NOT EXISTS (SELECT 1 FROM store_order_detail sod WHERE so.id = sod.store_order_id AND sod.del_flag = '0' AND sod.detail_status != 12)
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue