砍价详情增加 判断可以立即出手字段
This commit is contained in:
parent
6acf94acb5
commit
abfefb6f57
@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.api.StateCode;
|
||||
import com.suisung.mall.common.constant.CommonConstant;
|
||||
import com.suisung.mall.common.domain.UserDto;
|
||||
import com.suisung.mall.common.exception.ApiException;
|
||||
import com.suisung.mall.common.exception.ApiUserException;
|
||||
@ -33,6 +34,7 @@ import com.suisung.mall.shop.activity.service.ShopActivityGroupbookingHistorySer
|
||||
import com.suisung.mall.shop.activity.service.ShopActivityGroupbookingService;
|
||||
import com.suisung.mall.shop.base.service.AccountBaseConfigService;
|
||||
import com.suisung.mall.shop.store.service.ShopStoreActivityBaseService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.data.util.Pair;
|
||||
@ -55,6 +57,7 @@ import static com.suisung.mall.common.utils.ContextUtil.getCurrentUser;
|
||||
* @author Xinze
|
||||
* @since 2021-07-12
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ShopActivityCutpriceServiceImpl extends BaseServiceImpl<ShopActivityCutpriceMapper, ShopActivityCutprice> implements ShopActivityCutpriceService {
|
||||
|
||||
@ -320,6 +323,20 @@ public class ShopActivityCutpriceServiceImpl extends BaseServiceImpl<ShopActivit
|
||||
// activity_row.put("activity_endtime", Convert.toDate(time));
|
||||
// }
|
||||
|
||||
// 界面做一个简单的底价验证:
|
||||
boolean canBuyNow = cutprice_row != null
|
||||
&& CheckUtil.isNotEmpty(cutprice_row.getAc_sale_price())
|
||||
&& CheckUtil.isNotEmpty(cutprice_row.getAc_mix_limit_price())
|
||||
&& NumberUtil.isLessOrEqual(cutprice_row.getAc_sale_price(), cutprice_row.getAc_mix_limit_price());
|
||||
|
||||
BigDecimal subtractPrice = NumberUtil.sub(cutprice_row.getAc_sale_price(), cutprice_row.getAc_mix_limit_price());
|
||||
|
||||
// 能否立即出手 1-可以;2-不可以
|
||||
activity_row.put("can_buy_now", canBuyNow ? CommonConstant.Enable : CommonConstant.Disable2);
|
||||
activity_row.put("cannot_buy_now_reason",
|
||||
canBuyNow ? "恭喜您,商品可以立即出手了。" :
|
||||
String.format("还剩%.2f元到达商品底价,请继续加油!", subtractPrice));
|
||||
|
||||
return activity_row;
|
||||
}
|
||||
|
||||
@ -399,7 +416,7 @@ public class ShopActivityCutpriceServiceImpl extends BaseServiceImpl<ShopActivit
|
||||
}
|
||||
|
||||
/**
|
||||
* 砍价活动是否可以下单
|
||||
* 砍价活动是否符合立即下单了?
|
||||
*
|
||||
* @param activity_id 活动 Id
|
||||
* @param order_user_id 下单用户
|
||||
@ -408,31 +425,72 @@ public class ShopActivityCutpriceServiceImpl extends BaseServiceImpl<ShopActivit
|
||||
* 1、活动是否过期
|
||||
* 2、活动是否是下单用户的
|
||||
* 3、活动是否是砍到最低价
|
||||
* @return
|
||||
* @return Pair<Boolean, String> 第一个值表示是否可以下单,第二个值是相关信息或错误信息
|
||||
*/
|
||||
@Override
|
||||
public Pair<Boolean, String> canDoOrderCutPriceActivity(Integer activity_id, Integer order_user_id) {
|
||||
QueryWrapper<ShopStoreActivityBase> params = new QueryWrapper<>();
|
||||
params.eq("activity_id", activity_id);
|
||||
ShopStoreActivityBase storeActivityBase = shopStoreActivityBaseService.getOne(params);
|
||||
if (storeActivityBase == null) {
|
||||
return Pair.of(false, I18nUtil._("该活动不存在!"));
|
||||
}
|
||||
try {
|
||||
// 参数校验
|
||||
if (activity_id == null || activity_id <= 0) {
|
||||
return Pair.of(false, I18nUtil._("活动ID无效。"));
|
||||
}
|
||||
|
||||
if (!shopStoreActivityBaseService.isActivityTimeValid(storeActivityBase.getActivity_starttime(), storeActivityBase.getActivity_endtime())) {
|
||||
return Pair.of(false, I18nUtil._("该活动已过期!"));
|
||||
}
|
||||
if (order_user_id == null || order_user_id <= 0) {
|
||||
return Pair.of(false, I18nUtil._("用户ID无效。"));
|
||||
}
|
||||
|
||||
QueryWrapper<ShopActivityCutprice> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("activity_id", activity_id);
|
||||
queryWrapper.eq("user_id", order_user_id);
|
||||
queryWrapper.orderByDesc("ac_id");
|
||||
ShopActivityCutprice shopActivityCutprice = getOne(queryWrapper);
|
||||
if (shopActivityCutprice == null) {
|
||||
return Pair.of(false, I18nUtil._("未找到用户发起的砍价活动!"));
|
||||
}
|
||||
// 1. 检查活动是否存在
|
||||
QueryWrapper<ShopStoreActivityBase> params = new QueryWrapper<>();
|
||||
params.eq("activity_id", activity_id);
|
||||
ShopStoreActivityBase storeActivityBase = shopStoreActivityBaseService.getOne(params);
|
||||
if (storeActivityBase == null) {
|
||||
return Pair.of(false, I18nUtil._("抱歉,系统未找到活动记录。"));
|
||||
}
|
||||
|
||||
return null;
|
||||
// 2. 检查活动是否在有效期内
|
||||
if (!shopStoreActivityBaseService.isActivityTimeValid(storeActivityBase.getActivity_starttime(), storeActivityBase.getActivity_endtime())) {
|
||||
return Pair.of(false, I18nUtil._("该活动已过期,请检查。"));
|
||||
}
|
||||
|
||||
// 3. 检查用户是否有发起的砍价记录
|
||||
QueryWrapper<ShopActivityCutprice> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("activity_id", activity_id);
|
||||
queryWrapper.eq("user_id", order_user_id);
|
||||
queryWrapper.orderByDesc("ac_id");
|
||||
ShopActivityCutprice shopActivityCutprice = getOne(queryWrapper);
|
||||
if (shopActivityCutprice == null) {
|
||||
return Pair.of(false, I18nUtil._("系统未找到您发起的砍价记录。"));
|
||||
}
|
||||
|
||||
// 4. 检查是否已砍到最低价
|
||||
// 砍价底价
|
||||
BigDecimal mixSalePrice = shopActivityCutprice.getAc_mix_limit_price();
|
||||
// 当前最终被砍价后的最新价格
|
||||
BigDecimal currPrice = shopActivityCutprice.getAc_sale_price();
|
||||
|
||||
// 还剩多少到底价 = 当前价格 - 活动底价
|
||||
BigDecimal subPrice = NumberUtil.sub(currPrice, mixSalePrice);
|
||||
// 当前价格已经等于或低于底价,可以立即出手下单
|
||||
if (NumberUtil.isGreater(subPrice, BigDecimal.ZERO)) {
|
||||
return Pair.of(false, String.format(I18nUtil._("还剩%.2f元可达活动底价,请继续加油。"), subPrice));
|
||||
}
|
||||
// 5. 检查是否存在砍价历史记录
|
||||
QueryWrapper<ShopActivityCutpriceHistory> queryWrapperHistory = new QueryWrapper<>();
|
||||
queryWrapperHistory.eq("ac_id", shopActivityCutprice.getAc_id());
|
||||
queryWrapperHistory.eq("activity_id", shopActivityCutprice.getActivity_id());
|
||||
List<ShopActivityCutpriceHistory> shopActivityCutpriceHistoryList = shopActivityCutpriceHistoryService.list(queryWrapperHistory);
|
||||
if (CollUtil.isEmpty(shopActivityCutpriceHistoryList)) {
|
||||
return Pair.of(false, I18nUtil._("未找到砍价记录,请检查"));
|
||||
}
|
||||
|
||||
// 所有条件都满足,可以下单
|
||||
return Pair.of(true, "");
|
||||
} catch (Exception e) {
|
||||
// 异常处理,防止影响主流程
|
||||
log.error("检查砍价活动是否可下单时发生异常,activity_id={}, order_user_id={}", activity_id, order_user_id, e);
|
||||
return Pair.of(false, I18nUtil._("系统繁忙,请稍后再试。"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -189,11 +189,11 @@ public class OrderPayedListener {
|
||||
|
||||
// 同城配送或普通快递,都发送 unipush 推送:您有一个新的[同城][预约]订单,请及时拣货配送[请及时查看预约订单]。
|
||||
String bookingTip = isBookingOrder ? "预约" : "";
|
||||
String bookingTiP2 = isBookingOrder ? "请及时查看预约订单。" : "请及时拣货配送。";
|
||||
|
||||
String orderType = orderInfoOld.getDelivery_type_id() == StateCode.DELIVERY_TYPE_SAME_CITY ? "同城" + bookingTip : bookingTip;
|
||||
String title = String.format("您有一笔新的%s订单,%s", orderType, bookingTiP2);
|
||||
String content = String.format("这笔新的%s订单:%s,用户于%s下的单,%s", orderType, orderId, DateTimeUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss"), bookingTiP2);
|
||||
String actionTip = isBookingOrder ? "请及时检查预约订单信息" : "请及时拣货配送";
|
||||
String orderType = (orderInfoOld.getDelivery_type_id() == StateCode.DELIVERY_TYPE_SAME_CITY ? "同城" : "") + bookingTip;
|
||||
String title = String.format("您有一笔新的%s订单,%s。", orderType, actionTip);
|
||||
String content = String.format("这笔新的%s订单:%s,用户于%s下的单,%s。", orderType, orderId,
|
||||
DateTimeUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss"), actionTip);
|
||||
JSONObject payload = new JSONObject();
|
||||
payload.put("category", CommonConstant.PUSH_MSG_CATE_MCH_ONLINE_ORDER_LIST);
|
||||
payload.put("orderId", orderId);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user