package co.yixiang.yshop.module.order.service.storeorder;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import co.yixiang.yshop.framework.common.constant.ShopConstants;
import co.yixiang.yshop.framework.common.enums.OrderInfoEnum;
import co.yixiang.yshop.framework.common.enums.ShopCommonEnum;
import co.yixiang.yshop.framework.common.exception.ErrorCode;
import co.yixiang.yshop.module.coupon.dal.dataobject.couponuser.CouponUserDO;
import co.yixiang.yshop.module.coupon.service.couponuser.AppCouponUserService;
import co.yixiang.yshop.module.member.controller.app.user.vo.AppUserQueryVo;
import co.yixiang.yshop.module.member.dal.dataobject.user.MemberUserDO;
import co.yixiang.yshop.module.member.dal.dataobject.useraddress.UserAddressDO;
import co.yixiang.yshop.module.member.dal.dataobject.userbill.UserBillDO;
import co.yixiang.yshop.module.member.enums.BillDetailEnum;
import co.yixiang.yshop.module.member.service.user.MemberUserService;
import co.yixiang.yshop.module.member.service.useraddress.AppUserAddressService;
import co.yixiang.yshop.module.member.service.userbill.UserBillService;
import co.yixiang.yshop.module.message.enums.WechatTempateEnum;
import co.yixiang.yshop.module.message.mq.producer.WeixinNoticeProducer;
import co.yixiang.yshop.module.order.controller.app.order.param.AppOrderParam;
import co.yixiang.yshop.module.order.controller.app.order.param.AppPayParam;
import co.yixiang.yshop.module.order.controller.app.order.vo.AppStoreOrderQueryVo;
import co.yixiang.yshop.module.order.convert.storeorder.StoreOrderConvert;
import co.yixiang.yshop.module.order.dal.dataobject.ordernumber.OrderNumberDO;
import co.yixiang.yshop.module.order.dal.dataobject.storeorder.StoreOrderDO;
import co.yixiang.yshop.module.order.dal.dataobject.storeordercartinfo.StoreOrderCartInfoDO;
import co.yixiang.yshop.module.order.dal.mysql.ordernumber.OrderNumberMapper;
import co.yixiang.yshop.module.order.dal.mysql.storeorder.StoreOrderMapper;
import co.yixiang.yshop.module.order.enums.AppFromEnum;
import co.yixiang.yshop.module.order.enums.OrderLogEnum;
import co.yixiang.yshop.module.order.enums.OrderStatusEnum;
import co.yixiang.yshop.module.order.enums.PayTypeEnum;
import co.yixiang.yshop.module.order.service.storeorder.dto.StatusDto;
import co.yixiang.yshop.module.order.service.storeordercartinfo.StoreOrderCartInfoService;
import co.yixiang.yshop.module.order.service.storeorderstatus.StoreOrderStatusService;
import co.yixiang.yshop.module.pay.dal.dataobject.merchantdetails.MerchantDetailsDO;
import co.yixiang.yshop.module.pay.service.merchantdetails.MerchantDetailsService;
import co.yixiang.yshop.module.product.dal.dataobject.storeproduct.StoreProductDO;
import co.yixiang.yshop.module.product.dal.dataobject.storeproductattrvalue.StoreProductAttrValueDO;
import co.yixiang.yshop.module.product.service.storeproduct.AppStoreProductService;
import co.yixiang.yshop.module.product.service.storeproductattrvalue.StoreProductAttrValueService;
import co.yixiang.yshop.module.store.convert.storeshop.StoreShopConvert;
import co.yixiang.yshop.module.store.dal.dataobject.storeshop.StoreShopDO;
import co.yixiang.yshop.module.store.service.storeshop.AppStoreShopService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.egzosn.pay.spring.boot.core.PayServiceManager;
import com.egzosn.pay.spring.boot.core.bean.MerchantPayOrder;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBlockingDeque;
import org.redisson.api.RDelayedQueue;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static co.yixiang.yshop.framework.common.exception.util.ServiceExceptionUtil.exception;
import static co.yixiang.yshop.module.member.enums.ErrorCodeConstants.COUPON_NOT_CONDITION;
import static co.yixiang.yshop.module.member.enums.ErrorCodeConstants.USER_ADDRESS_NOT_EXISTS;
import static co.yixiang.yshop.module.order.enums.ErrorCodeConstants.*;
/**
* 订单 Service 实现类
*
* @author yshop
*/
@Slf4j
@Service
@Validated
public class AppStoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper,StoreOrderDO> implements AppStoreOrderService {
@Resource
private StoreOrderMapper storeOrderMapper;
@Resource
private AppUserAddressService appUserAddressService;
@Resource
private MemberUserService userService;
@Resource
private AppStoreProductService appStoreProductService;
@Resource
private StoreOrderCartInfoService storeOrderCartInfoService;
@Resource
private StoreOrderStatusService storeOrderStatusService;
@Resource
private UserBillService billService;
@Resource
private PayServiceManager manager;
@Resource
private WeixinNoticeProducer weixinNoticeProducer;
@Resource
private RedissonClient redissonClient;
@Resource
private StoreProductAttrValueService storeProductAttrValueService;
@Resource
private AppStoreShopService appStoreShopService;
@Resource
private OrderNumberMapper orderNumberMapper;
@Resource
private AppCouponUserService appCouponUserService;
@Resource
private AsyncStoreOrderService asyncStoreOrderService;
@Resource
private MerchantDetailsService merchantDetailsService;
private static final String LOCK_KEY = "cart:check:stock:lock";
private static final String STOCK_LOCK_KEY = "cart:do:stock:lock";
/**
* 订单信息
*
* @param unique 唯一值或者单号
* @param uid 用户id
* @return YxStoreOrderQueryVo
*/
@Override
public AppStoreOrderQueryVo getOrderInfo(String unique, Long uid) {
LambdaQueryWrapper<StoreOrderDO> wrapper = new LambdaQueryWrapper<>();
wrapper.and(
i -> i.eq(StoreOrderDO::getOrderId, unique).or().eq(StoreOrderDO::getUnique, unique).or()
.eq(StoreOrderDO::getExtendOrderId, unique));
if (uid != null) {
wrapper.eq(StoreOrderDO::getUid, uid);
}
AppStoreOrderQueryVo appStoreOrderQueryVo = StoreOrderConvert.INSTANCE.convert1(storeOrderMapper.selectOne(wrapper));
return appStoreOrderQueryVo;
}
/**
* 创建订单
*
* @param uid 用户uid
* @param param param
* @return YxStoreOrder
*/
@Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public Map<String, Object> createOrder(Long uid, AppOrderParam param) {
//转换参数
List<String> productIds = param.getProductId();
List<String> numbers = param.getNumber();
List<String> specs = param.getSpec();
Integer totalNum = 0;
List<String> cartIds = new ArrayList<>();
StoreShopDO storeShopDO = appStoreShopService.getById(param.getShopId());
BigDecimal sumPrice = BigDecimal.ZERO;
BigDecimal couponPrice = BigDecimal.ZERO;
BigDecimal postagePrice = BigDecimal.ZERO;
if(storeShopDO.getDeliveryPrice() != null){
postagePrice = storeShopDO.getDeliveryPrice();
}
//对库存检查加锁
RLock lock = redissonClient.getLock(LOCK_KEY);
if (lock.try
没有合适的资源?快使用搜索试试~ 我知道了~
基于Java和Vue的yshop意象桌面扫码点餐系统设计源码
共2005个文件
java:1401个
vue:257个
js:161个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 7 浏览量
2024-04-17
02:52:45
上传
评论
收藏 50.28MB ZIP 举报
温馨提示
本项目是基于Java和Vue开发的yshop意象桌面扫码点餐系统设计源码,共包含3722个文件。其中Java源代码文件1711个,Vue组件文件400个,JavaScript源代码文件351个,TypeScript源代码文件251个,Markdown文档164个,JSON配置文件93个,GIF图片文件93个,XML配置文件86个,HTML页面文件56个。该系统为用户提供了在线点餐(外卖与自取)的小程序模式,支持多门店模式。项目采用了当前流行的技术组合,包括SpringBoot和Spring Security,实现了一个高效、易扩展的点餐系统。项目结构清晰,代码注释详尽,适合用于学习和研究Java、Vue、TypeScript在点餐系统开发中的应用。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java和Vue的yshop意象桌面扫码点餐系统设计源码 (2005个子文件)
ueditor.css 45KB
ueditor.css 44KB
ueditor.min.css 34KB
ueditor.min.css 34KB
video-js.css 22KB
video-js.css 21KB
image.css 19KB
image.css 19KB
video.css 15KB
video.css 15KB
attachment.css 15KB
attachment.css 15KB
video-js.min.css 11KB
video-js.min.css 11KB
shCoreDefault.css 7KB
shCoreDefault.css 7KB
scrawl.css 4KB
scrawl.css 4KB
codemirror.css 3KB
codemirror.css 3KB
charts.css 3KB
charts.css 3KB
background.css 2KB
background.css 2KB
emotion.css 2KB
emotion.css 2KB
dialogbase.css 2KB
dialogbase.css 2KB
music.css 2KB
music.css 2KB
var.css 1KB
edittable.css 1KB
edittable.css 1KB
template.css 1KB
template.css 1KB
webuploader.css 543B
webuploader.css 515B
help.css 395B
help.css 395B
iframe.css 42B
iframe.css 42B
.DS_Store 10KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
index.html 7KB
index.html 7KB
wordimage.html 6KB
wordimage.html 6KB
map.html 6KB
map.html 6KB
emotion.html 6KB
emotion.html 6KB
image.html 6KB
image.html 6KB
show.html 5KB
show.html 5KB
charts.html 5KB
charts.html 5KB
link.html 4KB
link.html 4KB
insertframe.html 4KB
insertframe.html 4KB
pay_wx_pub.html 4KB
searchreplace.html 4KB
searchreplace.html 4KB
video.html 4KB
video.html 4KB
gmap.html 4KB
gmap.html 4KB
scrawl.html 4KB
scrawl.html 4KB
index.html 4KB
background.html 3KB
background.html 3KB
help.html 3KB
help.html 3KB
edittable.html 2KB
webapp.html 2KB
webapp.html 2KB
edittable.html 2KB
attachment.html 2KB
attachment.html 2KB
snapscreen.html 2KB
snapscreen.html 2KB
anchor.html 2KB
anchor.html 2KB
edittd.html 2KB
edittd.html 2KB
preview.html 1KB
preview.html 1KB
music.html 981B
music.html 981B
template.html 948B
template.html 948B
edittip.html 895B
edittip.html 863B
spechars.html 849B
spechars.html 849B
共 2005 条
- 1
- 2
- 3
- 4
- 5
- 6
- 21
资源评论
沐知全栈开发
- 粉丝: 5036
- 资源: 5025
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功