|
|
@@ -25,14 +25,11 @@ import shop.alien.entity.store.vo.WebSocketVo;
|
|
|
import shop.alien.mapper.*;
|
|
|
import shop.alien.store.config.GaoDeMapUtil;
|
|
|
import shop.alien.store.config.WebSocketProcess;
|
|
|
+import shop.alien.store.strategy.payment.PaymentStrategyFactory;
|
|
|
import shop.alien.store.util.ali.AliApi;
|
|
|
import shop.alien.util.ali.AliOSSUtil;
|
|
|
-import shop.alien.util.common.AlipayTradeRefund;
|
|
|
import shop.alien.util.common.UniqueRandomNumGenerator;
|
|
|
-import shop.alien.util.common.constant.CouponStatusEnum;
|
|
|
-import shop.alien.util.common.constant.CouponTypeEnum;
|
|
|
-import shop.alien.util.common.constant.DiscountCouponEnum;
|
|
|
-import shop.alien.util.common.constant.OrderStatusEnum;
|
|
|
+import shop.alien.util.common.constant.*;
|
|
|
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
@@ -40,6 +37,7 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.time.Instant;
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
@@ -58,12 +56,8 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
|
|
|
private final StoreInfoMapper storeInfoMapper;
|
|
|
|
|
|
- private final AlipayTradeRefund alipayTradeRefund;
|
|
|
-
|
|
|
private final LifeUserService lifeUserService;
|
|
|
|
|
|
- private final StoreIncomeDetailsRecordMapper storeIncomeDetailsRecordMapper;
|
|
|
-
|
|
|
private final GaoDeMapUtil gaoDeMapUtil;
|
|
|
|
|
|
private final LifeFansMapper lifeFansMapper;
|
|
|
@@ -77,12 +71,17 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
private final StoreImgMapper storeImgMapper;
|
|
|
|
|
|
private final StoreUserMapper storeUserMapper;
|
|
|
+
|
|
|
private final LifeDiscountCouponUserMapper lifeDiscountCouponUserMapper;
|
|
|
+
|
|
|
private final OrderCouponMiddleService orderCouponMiddleService;
|
|
|
|
|
|
private final AliOSSUtil aliOSSUtil;
|
|
|
+
|
|
|
private final OrderCouponMiddleMapper orderCouponMiddleMapper;
|
|
|
+
|
|
|
private final LifeGroupBuyMainMapper lifeGroupBuyMainMapper;
|
|
|
+
|
|
|
private final AliApi aliApi;
|
|
|
|
|
|
private final LifeDiscountCouponMapper lifeDiscountCouponMapper;
|
|
|
@@ -91,12 +90,11 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
|
|
|
@Value("${spring.web.resources.excel-path}")
|
|
|
private String excelPath;
|
|
|
- @Value("${spring.web.resources.excel-clearing-receipt}")
|
|
|
- private String excelClearingReceipt;
|
|
|
+
|
|
|
@Value("${spring.web.resources.excel-generate-path}")
|
|
|
private String excelGeneratePath;
|
|
|
- @Value("${spring.web.resources.url}")
|
|
|
- private String fileUrl;
|
|
|
+
|
|
|
+ private final PaymentStrategyFactory paymentStrategyFactory;
|
|
|
|
|
|
public List<Map<String, Object>> getOrderListByStatus(Integer page, Integer size, String userId, String status,
|
|
|
String quanNameSearch, Integer storeType, String baojiaStatus, String orderNo, Integer storeId) {
|
|
|
@@ -412,22 +410,19 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
* @return
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public Map<String, Object> requestRefund(LifeRefundOrder refundOrder) {
|
|
|
- Map<String, Object> returnMap = new HashMap<>();
|
|
|
- if (StringUtils.isEmpty(refundOrder.getRefundMoney()) ) {
|
|
|
- returnMap.put("fail", "退款金额为null");
|
|
|
- return returnMap;
|
|
|
+ public R<String> requestRefund(LifeRefundOrder refundOrder) {
|
|
|
+ if (StringUtils.isEmpty(refundOrder.getRefundMoney())) {
|
|
|
+ return R.fail("退款金额为null");
|
|
|
}
|
|
|
List<OrderCouponMiddle> orderCouponMiddles = orderCouponMiddleMapper.selectList(new QueryWrapper<OrderCouponMiddle>()
|
|
|
- .eq("order_id", refundOrder.getOrderId()).eq("delete_flag",0));
|
|
|
+ .eq("order_id", refundOrder.getOrderId()).eq("delete_flag", 0));
|
|
|
// 1.查询订单信息 订单表 + 中间表
|
|
|
LifeUserOrder order = lifeUserOrderMapper.selectById(refundOrder.getOrderId());
|
|
|
Integer refundCouponAmount = refundOrder.getRefundCouponAmount();
|
|
|
// 待使用的券(可退款的券 || 退款失败的券 目前没做失败的券状态更新 暂时不加)
|
|
|
List<OrderCouponMiddle> orderCouponMiddles1 = orderCouponMiddles.stream().filter(orderCouponMiddle -> orderCouponMiddle.getStatus() == OrderStatusEnum.WAIT_USE.getStatus()).collect(Collectors.toList());
|
|
|
if (orderCouponMiddles1.size() < refundCouponAmount) {
|
|
|
- returnMap.put("fail", "退款券数不足");
|
|
|
- return returnMap;
|
|
|
+ return R.fail("退款券数不足");
|
|
|
}
|
|
|
// 判断累计退款金额
|
|
|
BigDecimal totalRefundMoney = new BigDecimal(refundOrder.getRefundMoney());
|
|
|
@@ -439,25 +434,49 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
totalRefundMoney = totalRefundMoney.add(new BigDecimal(lifeRefundOrder.getRefundMoney()));
|
|
|
refundCouponCount += lifeRefundOrder.getRefundCouponAmount();
|
|
|
}
|
|
|
- if(totalRefundMoney.compareTo(new BigDecimal(order.getFinalPrice()))>0){
|
|
|
- returnMap.put("fail","退款金额(已退+当前退)不能大于订单金额");
|
|
|
- return returnMap;
|
|
|
+ if (totalRefundMoney.compareTo(new BigDecimal(order.getFinalPrice())) > 0) {
|
|
|
+ return R.fail("退款金额(已退+当前退)不能大于订单金额");
|
|
|
}
|
|
|
Date now = new Date();
|
|
|
boolean ifPartialRefund = false;
|
|
|
String PartialRefundCode = "";
|
|
|
// 只要本次退款不是全退都是部分退
|
|
|
- if (refundCouponAmount != orderCouponMiddles.size()){
|
|
|
+ if (refundCouponAmount != orderCouponMiddles.size()) {
|
|
|
ifPartialRefund = true;
|
|
|
PartialRefundCode = UniqueRandomNumGenerator.generateUniqueCode(12);
|
|
|
}
|
|
|
- String result = aliApi.processRefund(order.getOrderNo(), refundOrder.getRefundMoney(), refundOrder.getDescription(),PartialRefundCode);
|
|
|
+ // TODO 微信/支付宝退款接口
|
|
|
+ // 获取paymethod 并且构建 请求参数
|
|
|
+ String payMethod = order.getPayMethod();
|
|
|
+ String payType = "";
|
|
|
+ Map<String, String> params = new HashMap<>();
|
|
|
+ if("支付宝支付".equals(payMethod)) {
|
|
|
+ payType = PaymentEnum.ALIPAY.getType();
|
|
|
+ params.put("outTradeNo", order.getOrderNo());
|
|
|
+ params.put("refundAmount", refundOrder.getRefundMoney());
|
|
|
+ params.put("refundReason", refundOrder.getDescription());
|
|
|
+ params.put("partialRefundCode",PartialRefundCode);
|
|
|
+ } else {
|
|
|
+ payType = PaymentEnum.WECHAT_PAY.getType();
|
|
|
+ params.put("outTradeNo", order.getOrderNo());
|
|
|
+ params.put("reason", refundOrder.getReason() == null ? "退款" : refundOrder.getReason());
|
|
|
+ params.put("refundAmount", String.valueOf(new BigDecimal(refundOrder.getRefundMoney()).multiply(new BigDecimal(100)).longValue()));
|
|
|
+ params.put("totalAmount", String.valueOf(new BigDecimal(order.getFinalPrice()).multiply(new BigDecimal(100)).longValue()));
|
|
|
+ }
|
|
|
+ // 调用支付策略
|
|
|
+ String result = "";
|
|
|
+ try {
|
|
|
+ result = paymentStrategyFactory.getStrategy(payType).handleRefund(params);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(String.format("LifeUserOrderService requestRefund error, payType: %s, params: %s, error: %s", payType, params, e.getMessage()));
|
|
|
+ return R.fail(e.getMessage());
|
|
|
+ }
|
|
|
String refundMessage = "";
|
|
|
|
|
|
// 更新的中间表id
|
|
|
List<Integer> updateIds = orderCouponMiddles1.stream().limit(refundCouponAmount).map(x -> x.getId()).collect(Collectors.toList());
|
|
|
if (!result.equals("调用成功")) {
|
|
|
- refundMessage = "编号为"+order.getOrderNo()+"的订单退款失败,请重新发起申请。";
|
|
|
+ refundMessage = "编号为" + order.getOrderNo() + "的订单退款失败,请重新发起申请。";
|
|
|
// TODO 退款失败目前不做处理
|
|
|
/*orderCouponMiddleMapper.update(null,new UpdateWrapper<OrderCouponMiddle>().in("id",updateIds)
|
|
|
.set("status",OrderStatusEnum.REFUND_FAILED.getStatus())
|
|
|
@@ -466,39 +485,38 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
.set("refund_reason",refundOrder.getReason()));
|
|
|
// 退款记录
|
|
|
refundOrder.setApplicationTime(now).setRefundTime(now).setStatus(1);*/
|
|
|
- returnMap.put("success", refundMessage);
|
|
|
- return returnMap;
|
|
|
+ return R.fail(refundMessage);
|
|
|
} else {
|
|
|
- refundMessage = "编号为"+order.getOrderNo()+"的订单已退款成功,退款金额"+refundOrder.getRefundMoney()+"元,已返还至您的支付渠道,请注意查收";
|
|
|
- orderCouponMiddleMapper.update(null,new UpdateWrapper<OrderCouponMiddle>().in("id",updateIds)
|
|
|
- .set("status",OrderStatusEnum.REFUND.getStatus())
|
|
|
- .set("refund_time",now)
|
|
|
- .set(ifPartialRefund,"partial_refund_code",PartialRefundCode)
|
|
|
- .set("refund_reason",refundOrder.getReason()));
|
|
|
+ refundMessage = "编号为" + order.getOrderNo() + "的订单已退款成功,退款金额" + refundOrder.getRefundMoney() + "元,已返还至您的支付渠道,请注意查收";
|
|
|
+ orderCouponMiddleMapper.update(null, new UpdateWrapper<OrderCouponMiddle>().in("id", updateIds)
|
|
|
+ .set("status", OrderStatusEnum.REFUND.getStatus())
|
|
|
+ .set("refund_time", now)
|
|
|
+ .set(ifPartialRefund, "partial_refund_code", PartialRefundCode)
|
|
|
+ .set("refund_reason", refundOrder.getReason()));
|
|
|
// 退款记录
|
|
|
refundOrder.setApplicationTime(now).setRefundTime(now).setStatus(0);
|
|
|
- if(ifPartialRefund){
|
|
|
+ if (ifPartialRefund) {
|
|
|
refundOrder.setPartialRefundCode(PartialRefundCode);
|
|
|
}
|
|
|
}
|
|
|
// 更新总订单数据(中间表数据+订单表数据:当已退款个数+当前退款个数=已使用的券数时,订单状态改为已退款)
|
|
|
if (refundCouponCount + refundCouponAmount == orderCouponMiddles.size()) {
|
|
|
- lifeUserOrderMapper.update(null,new UpdateWrapper<LifeUserOrder>().eq("id",order.getId())
|
|
|
- .set("status",OrderStatusEnum.REFUND.getStatus())
|
|
|
- .set("refund_time",now)
|
|
|
- .set("finish_time",now));
|
|
|
+ lifeUserOrderMapper.update(null, new UpdateWrapper<LifeUserOrder>().eq("id", order.getId())
|
|
|
+ .set("status", OrderStatusEnum.REFUND.getStatus())
|
|
|
+ .set("refund_time", now)
|
|
|
+ .set("finish_time", now));
|
|
|
if (null != order.getQuanId()) {
|
|
|
- lifeDiscountCouponUserMapper.update(null,new UpdateWrapper<LifeDiscountCouponUser>().eq("id",order.getQuanId())
|
|
|
- .set("status",DiscountCouponEnum.WAITING_USED.getValue()).set("use_time",null));
|
|
|
- } else {
|
|
|
+ lifeDiscountCouponUserMapper.update(null, new UpdateWrapper<LifeDiscountCouponUser>().eq("id", order.getQuanId())
|
|
|
+ .set("status", DiscountCouponEnum.WAITING_USED.getValue()).set("use_time", null));
|
|
|
+ } else {
|
|
|
// 处理 quanId 为 null 的情况,例如日志记录
|
|
|
log.error("更新优惠券状态失败");
|
|
|
}
|
|
|
} else if (refundCouponCount + refundCouponAmount != orderCouponMiddles.size() && refundCouponAmount == orderCouponMiddles1.size()) {
|
|
|
// 累计退券个数+当前退券个数!=总个数 且 当前退券数量 = 可退券数
|
|
|
- lifeUserOrderMapper.update(null,new UpdateWrapper<LifeUserOrder>().eq("id",order.getId())
|
|
|
- .set("status",OrderStatusEnum.COMPLETE.getStatus())
|
|
|
- .set("finish_time",now));
|
|
|
+ lifeUserOrderMapper.update(null, new UpdateWrapper<LifeUserOrder>().eq("id", order.getId())
|
|
|
+ .set("status", OrderStatusEnum.COMPLETE.getStatus())
|
|
|
+ .set("finish_time", now));
|
|
|
}
|
|
|
|
|
|
// 将退款记录插入到数据库中
|
|
|
@@ -513,6 +531,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
lifeMessage.setSenderId("system");
|
|
|
lifeMessage.setIsRead(0);
|
|
|
lifeMessage.setNoticeType(2);
|
|
|
+ lifeMessage.setTitle("退款成功");
|
|
|
lifeNoticeMapper.insert(lifeMessage);
|
|
|
|
|
|
WebSocketVo websocketVo = new WebSocketVo();
|
|
|
@@ -534,19 +553,19 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
Integer couponId = orderCouponMiddle.getCouponId();
|
|
|
|
|
|
restoreInventory(couponType, refundCouponAmount, couponId);
|
|
|
- returnMap.put("success", refundMessage);
|
|
|
- return returnMap;
|
|
|
+ return R.success(refundMessage);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 退款,取消订单时候,恢复库存
|
|
|
- * @param couponType 类型 1-代金券,2-团购
|
|
|
+ *
|
|
|
+ * @param couponType 类型 1-代金券,2-团购
|
|
|
* @param refundCouponAmount 团购券/代金券张数
|
|
|
- * @param couponId 团购券/代金券id
|
|
|
+ * @param couponId 团购券/代金券id
|
|
|
*/
|
|
|
private void restoreInventory(Integer couponType, Integer refundCouponAmount, Integer couponId) {
|
|
|
- try{
|
|
|
- if( CouponTypeEnum.COUPON.getCode() == couponType){
|
|
|
+ try {
|
|
|
+ if (CouponTypeEnum.COUPON.getCode() == couponType) {
|
|
|
// 代金券信息
|
|
|
lifeCouponMapper.update(null, new LambdaUpdateWrapper<LifeCoupon>()
|
|
|
.setSql("single_qty=single_qty+" + refundCouponAmount)
|
|
|
@@ -554,13 +573,11 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
|
|
|
//判断当前时间在开始时间start_date和结束时间end_date之间,并且库存single_qty大于0,则修改状态status为5
|
|
|
lifeCouponMapper.update(null, new LambdaUpdateWrapper<LifeCoupon>()
|
|
|
- .set(LifeCoupon::getStatus, 5)
|
|
|
+ .set(LifeCoupon::getStatus, CouponStatusEnum.ONGOING.getCode())
|
|
|
.eq(LifeCoupon::getId, couponId)
|
|
|
- .le(LifeCoupon::getStartDate, LocalDateTime.now())
|
|
|
- .ge(LifeCoupon::getEndDate, LocalDateTime.now())
|
|
|
+ .le(LifeCoupon::getStartDate, LocalDate.now())
|
|
|
+ .ge(LifeCoupon::getEndDate, LocalDate.now())
|
|
|
.gt(LifeCoupon::getSingleQty, 0));
|
|
|
-
|
|
|
-
|
|
|
} else {
|
|
|
// 团购信息
|
|
|
lifeGroupBuyMainMapper.update(null, new LambdaUpdateWrapper<LifeGroupBuyMain>()
|
|
|
@@ -569,10 +586,10 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
|
|
|
//判断当前时间在开始时间start_date和结束时间end_date之间,并且库存single_qty大于0,则修改状态status为5
|
|
|
lifeGroupBuyMainMapper.update(null, new LambdaUpdateWrapper<LifeGroupBuyMain>()
|
|
|
- .set(LifeGroupBuyMain::getStatus, 5)
|
|
|
+ .set(LifeGroupBuyMain::getStatus, CouponStatusEnum.ONGOING.getCode())
|
|
|
.eq(LifeGroupBuyMain::getId, couponId)
|
|
|
- .le(LifeGroupBuyMain::getStartTimeValue, LocalDateTime.now())
|
|
|
- .ge(LifeGroupBuyMain::getEndTime, LocalDateTime.now())
|
|
|
+ .le(LifeGroupBuyMain::getStartTimeValue, LocalDate.now())
|
|
|
+ .ge(LifeGroupBuyMain::getEndTime, LocalDate.now())
|
|
|
.gt(LifeGroupBuyMain::getInventoryNum, 0));
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
@@ -583,13 +600,14 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
|
|
|
/**
|
|
|
* 退款检查
|
|
|
+ *
|
|
|
* @param refundOrder
|
|
|
* @return
|
|
|
*/
|
|
|
- public Map<String, Object> refundCheck(Map<String,String> refundOrder) {
|
|
|
+ public Map<String, Object> refundCheck(Map<String, String> refundOrder) {
|
|
|
Map<String, Object> returnMap = new HashMap<>();
|
|
|
LifeUserOrder order = lifeUserOrderMapper.selectById(refundOrder.get("orderId"));
|
|
|
- if( null == order){
|
|
|
+ if (null == order) {
|
|
|
returnMap.put("success", "不可退款");
|
|
|
returnMap.put("reason", "未查询到订单");
|
|
|
return returnMap;
|
|
|
@@ -616,7 +634,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
*/
|
|
|
public Integer getAvailableOrderNumByOrderNo(String orderNo) {
|
|
|
// 统计可用优惠劵数量
|
|
|
- return orderCouponMiddleMapper.selectCount(new QueryWrapper<OrderCouponMiddle>().inSql("id","select id from life_user_order where order_no = " + orderNo ));
|
|
|
+ return orderCouponMiddleMapper.selectCount(new QueryWrapper<OrderCouponMiddle>().inSql("id", "select id from life_user_order where order_no = " + orderNo));
|
|
|
}
|
|
|
|
|
|
public String exportExcel(String orderNo, String storeId, String quanName, String baojiaStatus, String status) throws IOException {
|
|
|
@@ -659,24 +677,44 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
String orderNum = orderDetails.toString();
|
|
|
List<LifeUserOrder> order = orderDetailsGrouped.getOrDefault(orderNum, Collections.emptyList());
|
|
|
LifeUserOrder lifeUserOrder = order.get(0);
|
|
|
- LifeCoupon quan = lifeCouponMapper.selectById(lifeUserOrder.getQuanId());
|
|
|
+ LifeUserOrderExcelVo lifeUserOrderExcelVo = new LifeUserOrderExcelVo();
|
|
|
+ if (lifeUserOrder.getCouponType() == 1) {
|
|
|
+ if (null != lifeUserOrder.getQuanId() && !"".equals(lifeUserOrder.getQuanId())) {
|
|
|
+ LifeDiscountCouponUser lifeDiscountCouponUser = lifeDiscountCouponUserMapper.selectById(lifeUserOrder.getQuanId());
|
|
|
+ LifeCoupon quan = lifeCouponMapper.selectById(lifeDiscountCouponUser.getCouponId());
|
|
|
+ if (null != quan) {
|
|
|
+ lifeUserOrderExcelVo.setCouponName(quan.getName());
|
|
|
+ lifeUserOrderExcelVo.setImage(quan.getImagePath());
|
|
|
+ lifeUserOrderExcelVo.setPrice("¥" + quan.getPrice());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ OrderCouponMiddle orderCouponMiddle = orderCouponMiddleMapper.selectOne(new LambdaQueryWrapper<OrderCouponMiddle>().eq(OrderCouponMiddle::getOrderId, lifeUserOrder.getId()));
|
|
|
+ LifeGroupBuyMain lifeGroupBuyMain = lifeGroupBuyMainMapper.selectOne(new LambdaQueryWrapper<LifeGroupBuyMain>().eq(LifeGroupBuyMain::getId, orderCouponMiddle.getCouponId()));
|
|
|
+ lifeUserOrderExcelVo.setCouponName(lifeGroupBuyMain.getGroupName());
|
|
|
+ lifeUserOrderExcelVo.setImage(storeImgMapper.selectById(Integer.parseInt(lifeGroupBuyMain.getImageId())).getImgUrl());
|
|
|
+ lifeUserOrderExcelVo.setPrice("¥" + lifeGroupBuyMain.getPreferentialPrice());
|
|
|
+ }
|
|
|
QueryWrapper<StoreInfoVo> queryWrapper = new QueryWrapper<>();
|
|
|
queryWrapper.eq("a.id", lifeUserOrder.getStoreId());
|
|
|
StoreInfoVo storeInfoVoOne = storeInfoMapper.getStoreInfoVoOne(queryWrapper);
|
|
|
- LifeUserOrderExcelVo lifeUserOrderExcelVo = new LifeUserOrderExcelVo();
|
|
|
lifeUserOrderExcelVo.setSerialNumber(++serialNumber);
|
|
|
lifeUserOrderExcelVo.setOrderNo(lifeUserOrder.getOrderNo());
|
|
|
lifeUserOrderExcelVo.setStoreId(lifeUserOrder.getStoreId());
|
|
|
- lifeUserOrderExcelVo.setCouponName(quan.getName());
|
|
|
- lifeUserOrderExcelVo.setImage(quan.getImagePath());
|
|
|
- lifeUserOrderExcelVo.setPrice("¥" + quan.getPrice());
|
|
|
+
|
|
|
lifeUserOrderExcelVo.setStoreContact(storeInfoVoOne.getStoreContact());
|
|
|
lifeUserOrderExcelVo.setPhone(storeInfoVoOne.getStorePhone());
|
|
|
- Instant instant = lifeUserOrder.getPayTime().toInstant();
|
|
|
- // 格式化时间
|
|
|
- String formattedTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime().format(formatter);
|
|
|
- lifeUserOrderExcelVo.setPayTime(formattedTime);
|
|
|
- lifeUserOrderExcelVo.setFinishTime(formattedTime);
|
|
|
+ if (lifeUserOrder.getStatus() == 4) {
|
|
|
+ Instant instant = lifeUserOrder.getCancelTime().toInstant();
|
|
|
+ String formattedTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime().format(formatter);
|
|
|
+ lifeUserOrderExcelVo.setCancelTime(formattedTime);
|
|
|
+ } else if(lifeUserOrder.getStatus() != 0){
|
|
|
+ Instant instant = lifeUserOrder.getPayTime().toInstant();
|
|
|
+ // 格式化时间
|
|
|
+ String formattedTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime().format(formatter);
|
|
|
+ lifeUserOrderExcelVo.setPayTime(formattedTime);
|
|
|
+ lifeUserOrderExcelVo.setFinishTime(formattedTime);
|
|
|
+ }
|
|
|
lifeUserOrderExcelVo.setOrderStatus(String.valueOf(lifeUserOrder.getStatus()));
|
|
|
// 订单状态转换
|
|
|
switch (lifeUserOrder.getStatus()) {
|
|
|
@@ -713,10 +751,11 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
|
|
|
/**
|
|
|
* 创建用户订单
|
|
|
+ *
|
|
|
* @param lifeUserOrderDto 构造数据用
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public Map<String, Object> createUserOrder(LifeUserOrderDto lifeUserOrderDto) {
|
|
|
+ public R createUserOrder(LifeUserOrderDto lifeUserOrderDto) {
|
|
|
Date date = new Date();
|
|
|
//1.创建订单
|
|
|
LifeUserOrder lifeUserOrder = new LifeUserOrder();
|
|
|
@@ -805,14 +844,14 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
}
|
|
|
// 判断库存扣减结果
|
|
|
if (updateRows == 0) {
|
|
|
- log.error("couponid:"+lifeUserOrderDto.getCouponId()+" 库存不足,当前购买数量:"+ buyCount);
|
|
|
+ log.error("couponid:" + lifeUserOrderDto.getCouponId() + " 库存不足,当前购买数量:" + buyCount);
|
|
|
// 手动抛出异常,触发事务回滚(回滚之前创建的订单和优惠券状态变更)
|
|
|
- throw new RuntimeException("库存不足,下单失败");
|
|
|
+ return R.fail("库存不足,下单失败");
|
|
|
}
|
|
|
returnMap.put("success", "下单成功");
|
|
|
returnMap.put("orderNo", lifeUserOrderDto.getOrderNo());
|
|
|
returnMap.put("lifeUserOrder", lifeUserOrder);
|
|
|
- return returnMap;
|
|
|
+ return R.data(returnMap);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -824,32 +863,32 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
public boolean updateUserOrder(LifeUserOrderDto lifeUserOrderDto) {
|
|
|
Date date = new Date();
|
|
|
LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectById(lifeUserOrderDto.getId());
|
|
|
- if ( null == lifeUserOrder){
|
|
|
+ if (null == lifeUserOrder) {
|
|
|
log.error("updateUserOrder未查询到订单");
|
|
|
return false;
|
|
|
}
|
|
|
UpdateWrapper<OrderCouponMiddle> orderCouponMiddleUpdateWrapper = new UpdateWrapper<>();
|
|
|
- orderCouponMiddleUpdateWrapper.eq("order_id",lifeUserOrderDto.getId());
|
|
|
+ orderCouponMiddleUpdateWrapper.eq("order_id", lifeUserOrderDto.getId());
|
|
|
// 根据状态判断怎么更新数据 目前只进行已支付,已取消,已过期判断
|
|
|
- switch (lifeUserOrderDto.getStatus()){
|
|
|
+ switch (lifeUserOrderDto.getStatus()) {
|
|
|
case 1:
|
|
|
lifeUserOrder.setPayTime(date);
|
|
|
lifeUserOrder.setPayMethod(lifeUserOrderDto.getPayMethod());
|
|
|
lifeUserOrder.setStatus(lifeUserOrderDto.getStatus());
|
|
|
lifeUserOrder.setOrderNo(lifeUserOrderDto.getOrderNo());
|
|
|
- orderCouponMiddleUpdateWrapper.set("status",lifeUserOrderDto.getStatus());
|
|
|
+ orderCouponMiddleUpdateWrapper.set("status", lifeUserOrderDto.getStatus());
|
|
|
break;
|
|
|
case 3:
|
|
|
case 4:
|
|
|
lifeUserOrder.setStatus(lifeUserOrderDto.getStatus());
|
|
|
lifeUserOrder.setCancelTime(date);
|
|
|
lifeUserOrder.setFinishTime(date);
|
|
|
- orderCouponMiddleUpdateWrapper.set("status",lifeUserOrderDto.getStatus());
|
|
|
+ orderCouponMiddleUpdateWrapper.set("status", lifeUserOrderDto.getStatus());
|
|
|
break;
|
|
|
}
|
|
|
// 查询券id->查询一个
|
|
|
int updateNum = orderCouponMiddleMapper.update(null, orderCouponMiddleUpdateWrapper);
|
|
|
- if(1 != lifeUserOrderDto.getStatus()) {
|
|
|
+ if (1 != lifeUserOrderDto.getStatus()) {
|
|
|
List<OrderCouponMiddle> orderCouponMiddles = orderCouponMiddleMapper.selectList(new QueryWrapper<OrderCouponMiddle>().eq("order_id", lifeUserOrderDto.getId()));
|
|
|
if (0 != updateNum && orderCouponMiddles.size() > 0) {
|
|
|
Integer couponId = orderCouponMiddles.get(0).getCouponId();
|
|
|
@@ -866,12 +905,13 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
|
|
|
/**
|
|
|
* 删除用户订单,删除需要判断订单状态并且删除中间关系
|
|
|
+ *
|
|
|
* @param orderId 订单id
|
|
|
*/
|
|
|
@Transactional
|
|
|
public boolean deleteUserOrder(String orderId) {
|
|
|
LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectById(orderId);
|
|
|
- if ( null == lifeUserOrder){
|
|
|
+ if (null == lifeUserOrder) {
|
|
|
log.error("deleteUserOrder未查询到订单");
|
|
|
return false;
|
|
|
}
|
|
|
@@ -883,32 +923,33 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
}
|
|
|
// 删除中间关系
|
|
|
UpdateWrapper<OrderCouponMiddle> orderCouponMiddleUpdateWrapper = new UpdateWrapper<>();
|
|
|
- orderCouponMiddleUpdateWrapper.eq("order_id",orderId);
|
|
|
+ orderCouponMiddleUpdateWrapper.eq("order_id", orderId);
|
|
|
return this.removeById(orderId) && orderCouponMiddleService.remove(orderCouponMiddleUpdateWrapper);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询用户订单列表
|
|
|
- * @param page 页码
|
|
|
- * @param size 每页数量
|
|
|
- * @param userId 用户id
|
|
|
+ *
|
|
|
+ * @param page 页码
|
|
|
+ * @param size 每页数量
|
|
|
+ * @param userId 用户id
|
|
|
* @param couponType 订单类型
|
|
|
- * @param name 店铺名称
|
|
|
+ * @param name 店铺名称
|
|
|
*/
|
|
|
- public IPage<LifeUserOrderVo> queryUserOrderList(Integer page, Integer size, String userId, String storeId, String couponType,String orderStatus, String name, String startTime, String endTime) {
|
|
|
+ public IPage<LifeUserOrderVo> queryUserOrderList(Integer page, Integer size, String userId, String storeId, String couponType, String orderStatus, String name, String startTime, String endTime) {
|
|
|
IPage<LifeUserOrderVo> brandedPage = new Page<>(page, size);
|
|
|
QueryWrapper<LifeUserOrderVo> lifeUserOrderQueryWrapper = new QueryWrapper<>();
|
|
|
- lifeUserOrderQueryWrapper.eq(org.apache.commons.lang3.StringUtils.isNotBlank(userId),"luo.user_id",userId);
|
|
|
- lifeUserOrderQueryWrapper.eq(org.apache.commons.lang3.StringUtils.isNotBlank(storeId),"luo.store_id",storeId);
|
|
|
- lifeUserOrderQueryWrapper.eq(null != couponType && !"-1".equals(couponType),"luo.coupon_type",couponType);
|
|
|
+ lifeUserOrderQueryWrapper.eq(org.apache.commons.lang3.StringUtils.isNotBlank(userId), "luo.user_id", userId);
|
|
|
+ lifeUserOrderQueryWrapper.eq(org.apache.commons.lang3.StringUtils.isNotBlank(storeId), "luo.store_id", storeId);
|
|
|
+ lifeUserOrderQueryWrapper.eq(null != couponType && !"-1".equals(couponType), "luo.coupon_type", couponType);
|
|
|
|
|
|
// 提取SQL基础部分,避免重复定义
|
|
|
String baseSql = "select DISTINCT ocm1.order_id from order_coupon_middle ocm1 where 1=1";
|
|
|
// TODO 应该可以直接判断总表
|
|
|
if (!"-1".equals(orderStatus)) {
|
|
|
// 非-1状态:直接添加状态条件
|
|
|
- String sql = baseSql + " and ocm1.status = " + orderStatus;
|
|
|
- if("2".equals(orderStatus)){
|
|
|
+ String sql = baseSql + " and ocm1.status = " + orderStatus;
|
|
|
+ if ("2".equals(orderStatus)) {
|
|
|
// 已完成进行特殊处理,
|
|
|
sql = sql + " and ocm1.order_id not in (\n" +
|
|
|
"\tselect\n" +
|
|
|
@@ -924,34 +965,35 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
// -1状态且storeId不为空时添加条件
|
|
|
if (org.apache.commons.lang3.StringUtils.isNotBlank(storeId)) {
|
|
|
// 注意:原代码中的concat不会修改原字符串,需要重新赋值
|
|
|
- String sql = baseSql + " and ocm1.status not in ("+OrderStatusEnum.WAIT_PAY.getStatus()
|
|
|
- +","+OrderStatusEnum.EXPIRE.getStatus()
|
|
|
- +","+OrderStatusEnum.CANCEL.getStatus()
|
|
|
- +")";
|
|
|
+ String sql = baseSql + " and ocm1.status not in (" + OrderStatusEnum.WAIT_PAY.getStatus()
|
|
|
+ + "," + OrderStatusEnum.EXPIRE.getStatus()
|
|
|
+ + "," + OrderStatusEnum.CANCEL.getStatus()
|
|
|
+ + "," + OrderStatusEnum.REFUND.getStatus()
|
|
|
+ + ")";
|
|
|
lifeUserOrderQueryWrapper.inSql("luo.id", sql);
|
|
|
}
|
|
|
}
|
|
|
- lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(name),"tc.coupon_name",name);
|
|
|
- lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(startTime),"luo.created_time",startTime + " 00:00:00");
|
|
|
- lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(endTime),"luo.created_time",endTime + " 23:59:59");
|
|
|
- lifeUserOrderQueryWrapper.eq("luo.delete_flag",0);
|
|
|
+ lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(name), "tc.coupon_name", name);
|
|
|
+ lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(startTime), "luo.created_time", startTime + " 00:00:00");
|
|
|
+ lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(endTime), "luo.created_time", endTime + " 23:59:59");
|
|
|
+ lifeUserOrderQueryWrapper.eq("luo.delete_flag", 0);
|
|
|
lifeUserOrderQueryWrapper.orderByDesc("luo.created_time");
|
|
|
- lifeUserOrderQueryWrapper.groupBy("luo.coupon_type","luo.id");
|
|
|
+ lifeUserOrderQueryWrapper.groupBy("luo.coupon_type", "luo.id");
|
|
|
IPage<LifeUserOrderVo> lifeUserOrderVoIPage = lifeUserOrderMapper.queryUserOrderList(brandedPage, lifeUserOrderQueryWrapper);
|
|
|
if (!"-1".equals(orderStatus)) {
|
|
|
- lifeUserOrderVoIPage.getRecords().forEach(x->x.setStatus(Integer.parseInt(orderStatus)));
|
|
|
+ lifeUserOrderVoIPage.getRecords().forEach(x -> x.setStatus(Integer.parseInt(orderStatus)));
|
|
|
}
|
|
|
// 计算退款金额
|
|
|
for (LifeUserOrderVo record : lifeUserOrderVoIPage.getRecords()) {
|
|
|
- record.setOrderCouponMiddleList(orderCouponMiddleMapper.selectList(new QueryWrapper<OrderCouponMiddle>().eq("order_id",record.getId())));
|
|
|
+ record.setOrderCouponMiddleList(orderCouponMiddleMapper.selectList(new QueryWrapper<OrderCouponMiddle>().eq("order_id", record.getId())));
|
|
|
calcExpectIncome(record);
|
|
|
// 如果代金券为平台优惠券并且是商户查询,则需要计算代金券金额
|
|
|
- if("3".equals(record.getType()) && org.apache.commons.lang3.StringUtils.isNotBlank(record.getStoreId())){
|
|
|
+ if ("3".equals(record.getType()) && org.apache.commons.lang3.StringUtils.isNotBlank(record.getStoreId())) {
|
|
|
// 如果付款为0,商家收入为套餐原价
|
|
|
- if(record.getFinalPrice().equals("0")){
|
|
|
+ if (record.getFinalPrice().equals("0")) {
|
|
|
// 如果付款为0,商家收入为套餐原价*数量
|
|
|
record.setFinalPrice(new BigDecimal(record.getPrice()).multiply(new BigDecimal(record.getCouponCount().toString())).toString());
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
record.setFinalPrice(record.getNominalValue().add(new BigDecimal(record.getFinalPrice())).toString());
|
|
|
}
|
|
|
}
|
|
|
@@ -961,12 +1003,13 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
|
|
|
/**
|
|
|
* 查询用户订单详情
|
|
|
+ *
|
|
|
* @param orderId
|
|
|
* @return
|
|
|
*/
|
|
|
- public R<LifeUserOrderVo> queryUserOrderDetail(String orderId,String longitude, String latitude) {
|
|
|
- LifeUserOrderVo lifeUserOrderVo = lifeUserOrderMapper.queryUserOrderDetail(orderId,org.apache.commons.lang3.StringUtils.isNotBlank(longitude) && org.apache.commons.lang3.StringUtils.isNotBlank(latitude)?longitude+","+latitude:"");
|
|
|
- if ( null == lifeUserOrderVo){
|
|
|
+ public R<LifeUserOrderVo> queryUserOrderDetail(String orderId, String longitude, String latitude) {
|
|
|
+ LifeUserOrderVo lifeUserOrderVo = lifeUserOrderMapper.queryUserOrderDetail(orderId, org.apache.commons.lang3.StringUtils.isNotBlank(longitude) && org.apache.commons.lang3.StringUtils.isNotBlank(latitude) ? longitude + "," + latitude : "");
|
|
|
+ if (null == lifeUserOrderVo) {
|
|
|
log.error("queryUserOrderDetail未查询到订单");
|
|
|
return R.fail("未查询到订单");
|
|
|
}
|
|
|
@@ -982,14 +1025,14 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
// 预计收入
|
|
|
// 退款金额
|
|
|
BigDecimal refundAmount = new BigDecimal(0);
|
|
|
- if(!CollectionUtils.isEmpty(refundList)){
|
|
|
+ if (!CollectionUtils.isEmpty(refundList)) {
|
|
|
refundAmount = refundList.stream().map(OrderCouponMiddle::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
}
|
|
|
// 预计收入
|
|
|
BigDecimal expectIncome = BigDecimal.ZERO;
|
|
|
// 如果使用了平台优惠券则预计收入特殊处理
|
|
|
- if("3".equals(lifeUserOrderVo.getType())){
|
|
|
- if(lifeUserOrderVo.getFinalPrice().equals("0")){
|
|
|
+ if ("3".equals(lifeUserOrderVo.getType())) {
|
|
|
+ if (lifeUserOrderVo.getFinalPrice().equals("0")) {
|
|
|
// 如果付款为0,商家收入为套餐原价*数量
|
|
|
expectIncome = new BigDecimal(lifeUserOrderVo.getPrice()).multiply(new BigDecimal(orderCouponMiddleList.size()));
|
|
|
} else {
|
|
|
@@ -1022,33 +1065,34 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
|
|
|
/**
|
|
|
* 平台端-查询订单列表
|
|
|
- * @param page 页码
|
|
|
- * @param size 每页数量
|
|
|
- * @param orderNo 订单号
|
|
|
- * @param orderStatus 订单状态
|
|
|
- * @param couponName 优惠券名称
|
|
|
- * @param couponType 优惠券类型
|
|
|
- * @param storeName 店铺名称
|
|
|
- * @param buyStartTime 购买时间开始
|
|
|
- * @param buyEndTime 购买时间结束
|
|
|
- * @param payStartTime 支付时间开始
|
|
|
- * @param payEndTime 支付时间结束
|
|
|
+ *
|
|
|
+ * @param page 页码
|
|
|
+ * @param size 每页数量
|
|
|
+ * @param orderNo 订单号
|
|
|
+ * @param orderStatus 订单状态
|
|
|
+ * @param couponName 优惠券名称
|
|
|
+ * @param couponType 优惠券类型
|
|
|
+ * @param storeName 店铺名称
|
|
|
+ * @param buyStartTime 购买时间开始
|
|
|
+ * @param buyEndTime 购买时间结束
|
|
|
+ * @param payStartTime 支付时间开始
|
|
|
+ * @param payEndTime 支付时间结束
|
|
|
* @param finishStartTime 完成时间开始
|
|
|
- * @param finishEndTime 完成时间结束
|
|
|
+ * @param finishEndTime 完成时间结束
|
|
|
*/
|
|
|
public IPage<LifeUserOrderVo> queryOrderList(Integer page, Integer size, String orderNo, String orderStatus, String couponName, String couponType, String storeName, String buyStartTime, String buyEndTime, String payStartTime, String payEndTime, String finishStartTime, String finishEndTime) {
|
|
|
IPage<LifeUserOrderVo> brandedPage = new Page<>(page, size);
|
|
|
QueryWrapper<LifeUserOrderVo> lifeUserOrderQueryWrapper = new QueryWrapper<>();
|
|
|
- lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(orderNo),"luo.order_no",orderNo);
|
|
|
- lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(couponName),"tc.coupon_name",couponName);
|
|
|
- lifeUserOrderQueryWrapper.eq(org.apache.commons.lang3.StringUtils.isNotBlank(couponType),"tc.coupon_type",couponType);
|
|
|
- lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(storeName),"si.store_name",storeName);
|
|
|
- lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(buyStartTime),"luo.buy_time",buyStartTime + " 00:00:00");
|
|
|
- lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(buyEndTime),"luo.buy_time",buyEndTime + " 23:59:59");
|
|
|
- lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(payStartTime),"luo.pay_time",payStartTime + " 00:00:00");
|
|
|
- lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(payEndTime),"luo.pay_time",payEndTime + " 23:59:59");
|
|
|
- lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(finishStartTime),"luo.finish_time",finishStartTime + " 00:00:00");
|
|
|
- lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(finishEndTime),"luo.finish_time",finishEndTime + " 23:59:59");
|
|
|
+ lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(orderNo), "luo.order_no", orderNo);
|
|
|
+ lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(couponName), "tc.coupon_name", couponName);
|
|
|
+ lifeUserOrderQueryWrapper.eq(org.apache.commons.lang3.StringUtils.isNotBlank(couponType), "tc.coupon_type", couponType);
|
|
|
+ lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(storeName), "si.store_name", storeName);
|
|
|
+ lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(buyStartTime), "luo.buy_time", buyStartTime + " 00:00:00");
|
|
|
+ lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(buyEndTime), "luo.buy_time", buyEndTime + " 23:59:59");
|
|
|
+ lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(payStartTime), "luo.pay_time", payStartTime + " 00:00:00");
|
|
|
+ lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(payEndTime), "luo.pay_time", payEndTime + " 23:59:59");
|
|
|
+ lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(finishStartTime), "luo.finish_time", finishStartTime + " 00:00:00");
|
|
|
+ lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(finishEndTime), "luo.finish_time", finishEndTime + " 23:59:59");
|
|
|
// @ApiImplicitParam(name = "orderStatus", value = "订单状态,-1,全部(可以不传);0,待支付;1,已支付/待使用;2,已核销;3,已过期;4,已取消;5.已退款,全退款了才算", required = false),
|
|
|
// 提取SQL基础部分,避免重复定义
|
|
|
// String baseSql = "select DISTINCT ocm1.order_id from order_coupon_middle ocm1 where 1=1";
|
|
|
@@ -1057,42 +1101,114 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
// 非-1状态:直接添加状态条件
|
|
|
// String sql = baseSql + " and ocm1.status = " + orderStatus;
|
|
|
// lifeUserOrderQueryWrapper.inSql("luo.id", sql);
|
|
|
- lifeUserOrderQueryWrapper.eq("ocm.status",orderStatus);
|
|
|
+ lifeUserOrderQueryWrapper.eq("luo.status", orderStatus);
|
|
|
}
|
|
|
lifeUserOrderQueryWrapper.groupBy("luo.id");
|
|
|
IPage<LifeUserOrderVo> lifeUserOrderVoIPage = lifeUserOrderMapper.queryUserOrderList(brandedPage, lifeUserOrderQueryWrapper);
|
|
|
|
|
|
if (!"-1".equals(orderStatus)) {
|
|
|
- lifeUserOrderVoIPage.getRecords().forEach(x->x.setStatus(Integer.parseInt(orderStatus)));
|
|
|
+ lifeUserOrderVoIPage.getRecords().forEach(x -> x.setStatus(Integer.parseInt(orderStatus)));
|
|
|
+ }
|
|
|
+ return lifeUserOrderVoIPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 平台-查询订单列表
|
|
|
+ *
|
|
|
+ * @param page 页码
|
|
|
+ * @param size 每页数量
|
|
|
+ * @param orderNo 订单号
|
|
|
+ * @param orderStatus 订单状态
|
|
|
+ * @param couponName 优惠券名称
|
|
|
+ * @param couponType 优惠券类型
|
|
|
+ * @param storeName 店铺名称
|
|
|
+ * @param buyStartTime 购买时间开始
|
|
|
+ * @param buyEndTime 购买时间结束
|
|
|
+ * @param payStartTime 支付时间开始
|
|
|
+ * @param payEndTime 支付时间结束
|
|
|
+ * @param finishStartTime 完成时间开始
|
|
|
+ * @param finishEndTime 完成时间结束
|
|
|
+ */
|
|
|
+ public IPage<LifeUserOrderVo> queryPlatformOrderList(Integer page, Integer size, String orderNo, String orderStatus, String couponName, String couponType, String storeName, String buyStartTime, String buyEndTime, String payStartTime, String payEndTime, String finishStartTime, String finishEndTime) {
|
|
|
+ IPage<LifeUserOrderVo> brandedPage = new Page<>(page, size);
|
|
|
+ QueryWrapper<LifeUserOrderVo> lifeUserOrderQueryWrapper = new QueryWrapper<>();
|
|
|
+ lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(orderNo), "luo.order_no", orderNo);
|
|
|
+ lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(couponName), "tc.coupon_name", couponName);
|
|
|
+ lifeUserOrderQueryWrapper.eq(org.apache.commons.lang3.StringUtils.isNotBlank(couponType), "tc.coupon_type", couponType);
|
|
|
+ lifeUserOrderQueryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(storeName), "si.store_name", storeName);
|
|
|
+ lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(buyStartTime), "luo.buy_time", buyStartTime + " 00:00:00");
|
|
|
+ lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(buyEndTime), "luo.buy_time", buyEndTime + " 23:59:59");
|
|
|
+ lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(payStartTime), "luo.pay_time", payStartTime + " 00:00:00");
|
|
|
+ lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(payEndTime), "luo.pay_time", payEndTime + " 23:59:59");
|
|
|
+ lifeUserOrderQueryWrapper.gt(org.apache.commons.lang3.StringUtils.isNotBlank(finishStartTime), "luo.finish_time", finishStartTime + " 00:00:00");
|
|
|
+ lifeUserOrderQueryWrapper.lt(org.apache.commons.lang3.StringUtils.isNotBlank(finishEndTime), "luo.finish_time", finishEndTime + " 23:59:59");
|
|
|
+
|
|
|
+// @ApiImplicitParam(name = "orderStatus", value = "订单状态,-1,全部(可以不传);0,待支付;1,已支付/待使用;2,已核销;3,已过期;4,已取消;5.已退款,全退款了才算", required = false),
|
|
|
+ // 提取SQL基础部分,避免重复定义
|
|
|
+// String baseSql = "select DISTINCT ocm1.order_id from order_coupon_middle ocm1 where 1=1";
|
|
|
+
|
|
|
+ if (!"-1".equals(orderStatus)) {
|
|
|
+ // 非-1状态:直接添加状态条件
|
|
|
+// String sql = baseSql + " and ocm1.status = " + orderStatus;
|
|
|
+// lifeUserOrderQueryWrapper.inSql("luo.id", sql);
|
|
|
+ lifeUserOrderQueryWrapper.eq("luo.status", orderStatus);
|
|
|
+ } else {
|
|
|
+ lifeUserOrderQueryWrapper.in("luo.status", 0,1,4,5,7);
|
|
|
+ }
|
|
|
+
|
|
|
+ lifeUserOrderQueryWrapper.groupBy("luo.id");
|
|
|
+ IPage<LifeUserOrderVo> lifeUserOrderVoIPage = lifeUserOrderMapper.queryPlatformOrderList(brandedPage, lifeUserOrderQueryWrapper);
|
|
|
+
|
|
|
+ if (!"-1".equals(orderStatus)) {
|
|
|
+ lifeUserOrderVoIPage.getRecords().forEach(x -> x.setStatus(Integer.parseInt(orderStatus)));
|
|
|
}
|
|
|
return lifeUserOrderVoIPage;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 平台端-查询订单详情
|
|
|
+ *
|
|
|
* @param orderId
|
|
|
* @return
|
|
|
*/
|
|
|
public R queryOrderDetail(String orderId) {
|
|
|
- LifeUserOrderVo lifeUserOrderVo = lifeUserOrderMapper.queryUserOrderDetail(orderId,null);
|
|
|
- if ( null == lifeUserOrderVo){
|
|
|
+ LifeUserOrderVo lifeUserOrderVo = lifeUserOrderMapper.queryUserOrderDetail(orderId, null);
|
|
|
+ if (null == lifeUserOrderVo) {
|
|
|
log.error("queryUserOrderDetail未查询到订单");
|
|
|
return R.fail("未查询到订单");
|
|
|
}
|
|
|
// 退款记录
|
|
|
calcExpectIncome(lifeUserOrderVo);
|
|
|
lifeUserOrderVo.setCouponCount(lifeUserOrderVo.getOrderCouponMiddleList().size());
|
|
|
+ // 查询订单图片列表
|
|
|
+ String imgIds = lifeUserOrderVo.getImgIds();
|
|
|
+ if(StringUtils.isNotEmpty(imgIds)){
|
|
|
+ LambdaQueryWrapper<StoreImg> storeImgLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ List<String> imgIdList = Arrays.stream(imgIds.split(","))
|
|
|
+ .map(String::trim)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ storeImgLambdaQueryWrapper.in(StoreImg::getId, imgIdList);
|
|
|
+ List<StoreImg> storeImgList = storeImgMapper.selectList(storeImgLambdaQueryWrapper);
|
|
|
+ if(CollectionUtils.isNotEmpty(storeImgList)){
|
|
|
+ List<String> imgUrlList = storeImgList.stream() // 转换为 Stream
|
|
|
+ .map(StoreImg::getImgUrl) // 映射,提取 name 字段
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ lifeUserOrderVo.setImgUrls(imgUrlList);
|
|
|
+ }
|
|
|
+ }
|
|
|
return R.data(lifeUserOrderVo);
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 团购/代金券-校验用户是否可以购买
|
|
|
- * @param couponId 团购/代金券id
|
|
|
+ *
|
|
|
+ * @param couponId 团购/代金券id
|
|
|
* @param couponType 团购/代金券类型
|
|
|
- * @param userId 用户id
|
|
|
- * @param count 购买数量
|
|
|
+ * @param userId 用户id
|
|
|
+ * @param count 购买数量
|
|
|
* @return
|
|
|
*/
|
|
|
- public Map<String, Object> buyCouponCheck(String couponId, Integer couponType, String userId,String storeId, Integer count) {
|
|
|
+ public Map<String, Object> buyCouponCheck(String couponId, Integer couponType, String userId, String storeId, Integer count) {
|
|
|
Map<String, Object> returnMap = new HashMap<>();
|
|
|
// 获取团购/代金券信息
|
|
|
Integer status = 0;
|
|
|
@@ -1114,7 +1230,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
buyLimit = Integer.parseInt(lifeGroupBuyMain.getQuotaValue());
|
|
|
// 已购数量
|
|
|
buyCount = orderCouponMiddleMapper.selectCount(new QueryWrapper<OrderCouponMiddle>().eq("coupon_id", couponId).notIn("status", OrderStatusEnum.CANCEL.getStatus(), OrderStatusEnum.REFUND.getStatus())
|
|
|
- .inSql("order_id", "select order_id from life_user_order where user_id = " + userId + " and store_id = " + storeId));
|
|
|
+ .inSql("order_id", "select id from life_user_order where user_id = " + userId + " and store_id = " + storeId));
|
|
|
}
|
|
|
// 库存 inventory_num
|
|
|
stockQty = lifeGroupBuyMain.getInventoryNum();
|
|
|
@@ -1127,7 +1243,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
buyLimit = Integer.parseInt(lifeCoupon.getPurchaseLimitCode());
|
|
|
// 已购数量
|
|
|
buyCount = orderCouponMiddleMapper.selectCount(new QueryWrapper<OrderCouponMiddle>().eq("coupon_id", couponId).notIn("status", OrderStatusEnum.CANCEL.getStatus(), OrderStatusEnum.REFUND.getStatus())
|
|
|
- .inSql("order_id", "select order_id from life_user_order where user_id = " + userId + " and store_id = " + storeId));
|
|
|
+ .inSql("order_id", "select id from life_user_order where user_id = " + userId + " and store_id = " + storeId));
|
|
|
stockQty = lifeCoupon.getSingleQty();
|
|
|
endTime = lifeCoupon.getEndDate();
|
|
|
} else {
|
|
|
@@ -1139,14 +1255,18 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
// 状态(0草稿/1待审核/2未开始/3审核拒绝/4已售罄/5进行中/6已下架/7已结束/8=2+手动下架)
|
|
|
if (status != CouponStatusEnum.ONGOING.getCode()) {
|
|
|
returnMap.put("success", false);
|
|
|
- returnMap.put("reason", "团购/代金券未开始");
|
|
|
+ if (status == CouponStatusEnum.SOLD_OUT.getCode()) {
|
|
|
+ returnMap.put("reason", "团购/代金券已售罄");
|
|
|
+ } else {
|
|
|
+ returnMap.put("reason", "团购/代金券未开始");
|
|
|
+ }
|
|
|
return returnMap;
|
|
|
}
|
|
|
// 限购
|
|
|
if (0 != buyLimit) {
|
|
|
if (buyCount + count > buyLimit) {
|
|
|
returnMap.put("success", false);
|
|
|
- returnMap.put("reason", "购买数量大于限购数量");
|
|
|
+ returnMap.put("reason", "已达限购上限");
|
|
|
return returnMap;
|
|
|
}
|
|
|
}
|