| | |
| | | package com.panzhihua.service_community.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.panzhihua.common.model.dtos.PageDTO; |
| | | import com.panzhihua.common.model.dtos.shop.*; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.utlis.DateUtils; |
| | | import com.panzhihua.common.utlis.WxPayUtils; |
| | | import com.panzhihua.service_community.dao.ComShopOrderDAO; |
| | | import com.panzhihua.service_community.model.dos.ComShopOrderDO; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.model.vos.shop.*; |
| | | import com.panzhihua.common.utlis.OrderNoUtils; |
| | | import com.panzhihua.common.utlis.StringUtils; |
| | | import com.panzhihua.service_community.dao.*; |
| | | import com.panzhihua.service_community.model.dos.*; |
| | | import com.panzhihua.service_community.service.ComShopOrderService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.panzhihua.common.model.dtos.shop.*; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.model.vos.shop.*; |
| | | import com.panzhihua.common.utlis.DateUtils; |
| | | import com.panzhihua.common.utlis.OrderNoUtils; |
| | | import com.panzhihua.common.utlis.StringUtils; |
| | | import com.panzhihua.common.utlis.WxPayUtils; |
| | | import com.panzhihua.service_community.dao.*; |
| | | import com.panzhihua.service_community.model.dos.*; |
| | | import com.panzhihua.service_community.service.ComShopOrderService; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * @auther lyq |
| | |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class ComShopOrderServiceImpl extends ServiceImpl<ComShopOrderDAO, ComShopOrderDO> implements ComShopOrderService { |
| | | public class ComShopOrderServiceImpl extends ServiceImpl<ComShopOrderDAO, ComShopOrderDO> |
| | | implements ComShopOrderService { |
| | | |
| | | @Resource |
| | | private ComShopGoodsDAO comShopGoodsDAO; |
| | |
| | | @Value("${min.app.notifyUrl}") |
| | | private String notifyUrl; |
| | | |
| | | public static void main(String[] args) { |
| | | BigDecimal one = BigDecimal.valueOf(Double.valueOf("1") / 100); |
| | | System.out.println(); |
| | | } |
| | | |
| | | /** |
| | | * 订单预览 |
| | | * |
| | | * @param orderPreviewDTO 请求参数 |
| | | * @param orderPreviewDTO |
| | | * 请求参数 |
| | | * @return 订单预览数据 |
| | | */ |
| | | @Override |
| | |
| | | //判断提交方式 |
| | | if(orderPreviewDTO.getSubmitType().equals(ComShopOrderPreviewDTO.submitType.details)){//详情页提交 |
| | | //查询商品信息 |
| | | ComShopGoodsDO goodsDO = comShopGoodsDAO.selectOne(new QueryWrapper<ComShopGoodsDO>().eq("id",orderPreviewDTO.getGoodsId()) |
| | | ComShopGoodsDO goodsDO = |
| | | comShopGoodsDAO.selectOne(new QueryWrapper<ComShopGoodsDO>().eq("id", orderPreviewDTO.getGoodsId()) |
| | | .eq("status",ComShopGoodsDO.status.sell).eq("delete_status",ComShopGoodsDO.deleteStatus.no)); |
| | | if(goodsDO == null){ |
| | | return R.fail("商品已下架或已删除"); |
| | |
| | | } |
| | | |
| | | //查询默认收货地址 |
| | | ComShopUserAddressDO userDefaultAddressDO = comShopUserAddressDAO.selectOne(new QueryWrapper<ComShopUserAddressDO>() |
| | | .eq("delete_status", 2) |
| | | ComShopUserAddressDO userDefaultAddressDO = |
| | | comShopUserAddressDAO.selectOne(new QueryWrapper<ComShopUserAddressDO>().eq("delete_status", 2) |
| | | .eq("user_id",orderPreviewDTO.getUserId()).eq("is_default",ComShopUserAddressDO.isDefault.yes)); |
| | | |
| | | //查询用户收货地址中的默认地址 |
| | |
| | | //查询上次购买记录的收货地址 |
| | | //查询到用户上一笔订单 |
| | | List<ComShopOrderDO> shopOrders = this.baseMapper.selectList(new QueryWrapper<ComShopOrderDO>() |
| | | .eq("delete_status", 2) |
| | | .eq("user_id",orderPreviewDTO.getUserId()) |
| | | .orderByDesc("create_at")); |
| | | .eq("delete_status", 2).eq("user_id", orderPreviewDTO.getUserId()).orderByDesc("create_at")); |
| | | if(shopOrders!=null && shopOrders.size()>0) { |
| | | ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(shopOrders.get(0).getReceiverId()); |
| | | ComShopUserAddressDO userAddressDO = |
| | | comShopUserAddressDAO.selectById(shopOrders.get(0).getReceiverId()); |
| | | if (userAddressDO != null) { |
| | | ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); |
| | | BeanUtils.copyProperties(userAddressDO, userAddressVO); |
| | |
| | | */ |
| | | } |
| | | |
| | | |
| | | return R.ok(orderPreviewVO); |
| | | } |
| | | |
| | | /** |
| | | * 创建订单 |
| | | * @param orderCreateDTO 创建订单请求参数 |
| | | * |
| | | * @param orderCreateDTO |
| | | * 创建订单请求参数 |
| | | * @return 创建结果 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | if(!orderCreateDTO.getOrderGoodsList().isEmpty()){ |
| | | for (ComShopOrderCreateGoodsDTO createGoodsDTO:orderCreateDTO.getOrderGoodsList()) { |
| | | //查询当前商品信息 |
| | | ComShopGoodsDO goodsDO = comShopGoodsDAO.selectOne(new QueryWrapper<ComShopGoodsDO>() |
| | | .eq("id",createGoodsDTO.getGoodsId()).eq("delete_status",ComShopGoodsDO.deleteStatus.no) |
| | | .eq("status",ComShopGoodsDO.status.sell)); |
| | | ComShopGoodsDO goodsDO = |
| | | comShopGoodsDAO.selectOne(new QueryWrapper<ComShopGoodsDO>().eq("id", createGoodsDTO.getGoodsId()) |
| | | .eq("delete_status", ComShopGoodsDO.deleteStatus.no).eq("status", ComShopGoodsDO.status.sell)); |
| | | if(goodsDO == null){ |
| | | log.error("未查询到商品信息,商品已下架活已删除,商品id" + createGoodsDTO.getGoodsId()); |
| | | continue; |
| | |
| | | //查询当前商品规格 |
| | | ComShopGoodsAttrDO goodsAttrDO = comShopGoodsAttrDAO.selectById(createGoodsDTO.getGoodsAttrId()); |
| | | if(goodsAttrDO == null){ |
| | | log.error("未查询到商品规格信息,商品id" + createGoodsDTO.getGoodsId() + "商品规格id:" + createGoodsDTO.getGoodsAttrId()); |
| | | log.error( |
| | | "未查询到商品规格信息,商品id" + createGoodsDTO.getGoodsId() + "商品规格id:" + createGoodsDTO.getGoodsAttrId()); |
| | | continue; |
| | | } |
| | | orderGoodsDO.setGoodsAttrId(goodsAttrDO.getId()); |
| | |
| | | orderGoodsDO.setGoodsAttrPic(goodsAttrDO.getAttrPic()); |
| | | orderGoodsDOList.add(orderGoodsDO); |
| | | //将商品金额计算到订单总金额 |
| | | orderTotal = orderTotal.add(orderGoodsDO.getGoodsAttrPrice().multiply(BigDecimal.valueOf(orderGoodsDO.getAmount()))); |
| | | orderTotal = orderTotal |
| | | .add(orderGoodsDO.getGoodsAttrPrice().multiply(BigDecimal.valueOf(orderGoodsDO.getAmount()))); |
| | | } |
| | | } |
| | | //如果是购物车提交,需要将购物车内商品移除 |
| | |
| | | money = BigDecimal.valueOf(0.01); |
| | | } |
| | | //调用wx支付 |
| | | String xml = WxPayUtils.getUnifiedorder(appid,mchId,payKey,notifyUrl,"商品购买",orderCreateDTO.getOpenId(),orderNo,money); |
| | | String xml = WxPayUtils.getUnifiedorder(appid, mchId, payKey, notifyUrl, "商品购买", orderCreateDTO.getOpenId(), |
| | | orderNo, money); |
| | | log.info("微信支付返回参数:" + xml); |
| | | shopOrderVO.setPayResult(xml); |
| | | }catch (Exception e){ |
| | |
| | | |
| | | /** |
| | | * 分页查询用户订单列表 |
| | | * @param comOrderListDTO 请求参数 |
| | | * |
| | | * @param comOrderListDTO |
| | | * 请求参数 |
| | | * @return 查询结果 |
| | | */ |
| | | @Override |
| | |
| | | orderPageVOIPage.getRecords().forEach(orderVo -> { |
| | | List<ComShopOrderGoodsVO> orderGoodsVOS = new ArrayList<>(); |
| | | //查询订单下商品信息 |
| | | List<ComShopOrderGoodsDO> orderGoodsDOList = comShopOrderGoodsDAO.selectList(new QueryWrapper<ComShopOrderGoodsDO>() |
| | | .eq("order_no",orderVo.getOrderNo())); |
| | | List<ComShopOrderGoodsDO> orderGoodsDOList = comShopOrderGoodsDAO |
| | | .selectList(new QueryWrapper<ComShopOrderGoodsDO>().eq("order_no", orderVo.getOrderNo())); |
| | | if(!orderGoodsDOList.isEmpty()){ |
| | | orderGoodsDOList.forEach(orderGoods -> { |
| | | ComShopOrderGoodsVO orderGoodsVO = new ComShopOrderGoodsVO(); |
| | |
| | | |
| | | /** |
| | | * 根据订单id查询订单详情 |
| | | * @param orderId 订单id |
| | | * |
| | | * @param orderId |
| | | * 订单id |
| | | * @return 订单详情 |
| | | */ |
| | | @Override |
| | |
| | | |
| | | List<ComShopOrderGoodsVO> orderGoodsVOS = new ArrayList<>(); |
| | | //查询订单下商品信息 |
| | | List<ComShopOrderGoodsDO> orderGoodsDOList = comShopOrderGoodsDAO.selectList(new QueryWrapper<ComShopOrderGoodsDO>() |
| | | .eq("order_no",shopOrderDO.getOrderNo())); |
| | | StringBuilder sbr = new StringBuilder(""); |
| | | List<ComShopOrderGoodsDO> orderGoodsDOList = comShopOrderGoodsDAO |
| | | .selectList(new QueryWrapper<ComShopOrderGoodsDO>().eq("order_no", shopOrderDO.getOrderNo())); |
| | | StringBuilder sbr = new StringBuilder(); |
| | | if(!orderGoodsDOList.isEmpty()){ |
| | | orderGoodsDOList.forEach(orderGoods -> { |
| | | ComShopOrderGoodsVO orderGoodsVO = new ComShopOrderGoodsVO(); |
| | |
| | | orderGoodsVO.setPrice(orderGoods.getGoodsAttrPrice()); |
| | | //查询商品信息判断商品状态 |
| | | ComShopGoodsDO goodsDO = comShopGoodsDAO.selectById(orderGoods.getGoodsId()); |
| | | if(goodsDO == null || goodsDO.getDeleteStatus().equals(ComShopGoodsDO.deleteStatus.yes) || goodsDO.getDeleteStatus().equals(ComShopGoodsDO.status.recovery)){ |
| | | if (goodsDO == null || goodsDO.getDeleteStatus().equals(ComShopGoodsDO.deleteStatus.yes) |
| | | || goodsDO.getDeleteStatus().equals(ComShopGoodsDO.status.recovery)) { |
| | | orderGoodsVO.setGoodsStatus(ComShopOrderGoodsVO.goodsStatus.ysc); |
| | | }else if(goodsDO.getStatus().equals(ComShopGoodsDO.status.lower)){ |
| | | orderGoodsVO.setGoodsStatus(ComShopOrderGoodsVO.goodsStatus.yxj); |
| | |
| | | } |
| | | |
| | | //操作日志 |
| | | List<ComShopOrderOperateDO> listOperLog = comShopOrderOperateDAO.selectList(new LambdaQueryWrapper<ComShopOrderOperateDO>().eq(ComShopOrderOperateDO::getOrderNo, shopOrderDO.getOrderNo())); |
| | | List<ComShopOrderOperateDO> listOperLog = |
| | | comShopOrderOperateDAO.selectList(new LambdaQueryWrapper<ComShopOrderOperateDO>() |
| | | .eq(ComShopOrderOperateDO::getOrderNo, shopOrderDO.getOrderNo())); |
| | | List<ComShopOrderOperateVO> listOperLogVO = new ArrayList<>(listOperLog.size()); |
| | | listOperLog.forEach(logDO ->{ |
| | | ComShopOrderOperateVO copyVO = new ComShopOrderOperateVO(); |
| | |
| | | |
| | | /** |
| | | * 根据订单id取消订单 |
| | | * @param comShopOrderQueryDTO 订单信息 |
| | | * |
| | | * @param comShopOrderQueryDTO |
| | | * 订单信息 |
| | | * @return 取消结果 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | |
| | | /** |
| | | * 根据订单id删除订单 |
| | | * @param orderId 订单id |
| | | * |
| | | * @param orderId |
| | | * 订单id |
| | | * @return 删除结果 |
| | | */ |
| | | @Override |
| | |
| | | if(shopOrderDO == null){ |
| | | return R.fail("未查询到订单"); |
| | | } |
| | | if(!shopOrderDO.getStatus().equals(ComShopOrderDO.status.ywc) && !shopOrderDO.getStatus().equals(ComShopOrderDO.status.yqx)){ |
| | | if (!shopOrderDO.getStatus().equals(ComShopOrderDO.status.ywc) |
| | | && !shopOrderDO.getStatus().equals(ComShopOrderDO.status.yqx)) { |
| | | return R.fail("该订单状态不可删除"); |
| | | } |
| | | |
| | |
| | | |
| | | /** |
| | | * 根据订单id确认收货 |
| | | * @param orderId 订单id |
| | | * @param phone 手机号 |
| | | * |
| | | * @param orderId |
| | | * 订单id |
| | | * @param phone |
| | | * 手机号 |
| | | * @return 确认结果 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | |
| | | /** |
| | | * 统计用户订单数量 |
| | | * @param userId 用户id |
| | | * |
| | | * @param userId |
| | | * 用户id |
| | | * @return 统计结果 |
| | | */ |
| | | @Override |
| | |
| | | if(comShopOrderDO==null){ |
| | | return R.fail("订单不存在"); |
| | | } |
| | | if(!(comShopOrderDO.getStatus()==2) |
| | | || !(comShopOrderDO.getDeliveryStatus()==1)){ |
| | | if (!(comShopOrderDO.getStatus() == 2) || !(comShopOrderDO.getDeliveryStatus() == 1)) { |
| | | return R.fail("订单发货失败,订单状态不允许发货"); |
| | | } |
| | | |
| | |
| | | if(comShopOrderDO==null){ |
| | | return R.fail("订单不存在"); |
| | | } |
| | | if(!(comShopOrderDO.getStatus()==2) |
| | | || !(comShopOrderDO.getDeliveryStatus()==1)){ |
| | | if (!(comShopOrderDO.getStatus() == 2) || !(comShopOrderDO.getDeliveryStatus() == 1)) { |
| | | return R.fail("当前订单不能配送"); |
| | | } |
| | | ComShopStoreDO storeDO = comShopStoreDAO.selectById(comShopOrderDO.getStoreId()); |
| | |
| | | } |
| | | page.setCurrent(pageNum); |
| | | page.setSize(pageSize); |
| | | IPage<ComShopFundsOrderVO> comShopFundsOrderVOIPage = comShopOrderDAO.pageShopFunds(page, pageComShopFundsSearchDTO); |
| | | IPage<ComShopFundsOrderVO> comShopFundsOrderVOIPage = |
| | | comShopOrderDAO.pageShopFunds(page, pageComShopFundsSearchDTO); |
| | | return R.ok(comShopFundsOrderVOIPage); |
| | | } |
| | | |
| | |
| | | |
| | | /** |
| | | * 微信支付订单回调 |
| | | * @param wxPayNotifyOrderDTO 订单支付回调参数 |
| | | * |
| | | * @param wxPayNotifyOrderDTO |
| | | * 订单支付回调参数 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | |
| | | |
| | | log.info("微信订单支付回调开始查询订单"); |
| | | //查询订单 |
| | | ComShopOrderDO shopOrderDO = this.baseMapper.selectOne(new QueryWrapper<ComShopOrderDO>().lambda().eq(ComShopOrderDO::getOrderNo,wxPayNotifyOrderDTO.getOrderTradeNo())); |
| | | ComShopOrderDO shopOrderDO = this.baseMapper.selectOne(new QueryWrapper<ComShopOrderDO>().lambda() |
| | | .eq(ComShopOrderDO::getOrderNo, wxPayNotifyOrderDTO.getOrderTradeNo())); |
| | | if(shopOrderDO == null){ |
| | | log.error("未查询到支付订单,订单回调失败,订单号:" + wxPayNotifyOrderDTO.getOrderTradeNo()); |
| | | return; |
| | |
| | | shopOrderDO.setPayStatus(ComShopOrderDO.payStatus.yes); |
| | | shopOrderDO.setPayAmount(BigDecimal.valueOf(Double.valueOf(wxPayNotifyOrderDTO.getCashFee()) / 100)); |
| | | shopOrderDO.setWxTardeNo(wxPayNotifyOrderDTO.getWxTradeNo()); |
| | | shopOrderDO.setPayTime(DateUtils.stringToDate(wxPayNotifyOrderDTO.getPayTime(),new SimpleDateFormat("yyyyMMddHHmmss"))); |
| | | shopOrderDO.setPayTime( |
| | | DateUtils.stringToDate(wxPayNotifyOrderDTO.getPayTime(), new SimpleDateFormat("yyyyMMddHHmmss"))); |
| | | this.baseMapper.updateById(shopOrderDO); |
| | | |
| | | //查询订单商品 |
| | | List<ComShopOrderGoodsDO> orderGoodsList = comShopOrderGoodsDAO.selectList(new QueryWrapper<ComShopOrderGoodsDO>().lambda().eq(ComShopOrderGoodsDO ::getOrderNo,shopOrderDO.getOrderNo())); |
| | | List<ComShopOrderGoodsDO> orderGoodsList = |
| | | comShopOrderGoodsDAO.selectList(new QueryWrapper<ComShopOrderGoodsDO>().lambda() |
| | | .eq(ComShopOrderGoodsDO::getOrderNo, shopOrderDO.getOrderNo())); |
| | | if(!orderGoodsList.isEmpty()){ |
| | | int goodsNub = 0; |
| | | for (ComShopOrderGoodsDO orderGood:orderGoodsList) { |
| | |
| | | |
| | | /** |
| | | * 订单去支付 |
| | | * @param orderPayDTO 请求参数 |
| | | * |
| | | * @param orderPayDTO |
| | | * 请求参数 |
| | | * @return 支付对象 |
| | | */ |
| | | public R wxPay(OrderPayDTO orderPayDTO){ |
| | | //创建返回参数 |
| | | ComShopOrderVO shopOrderVO = new ComShopOrderVO(); |
| | | //查询订单 |
| | | ComShopOrderDO orderDO = comShopOrderDAO.selectOne(new QueryWrapper<ComShopOrderDO>().lambda().eq(ComShopOrderDO::getOrderNo,orderPayDTO.getOrderNo())); |
| | | ComShopOrderDO orderDO = comShopOrderDAO.selectOne( |
| | | new QueryWrapper<ComShopOrderDO>().lambda().eq(ComShopOrderDO::getOrderNo, orderPayDTO.getOrderNo())); |
| | | if(orderDO == null){ |
| | | return R.fail("订单不存在"); |
| | | } |
| | |
| | | money = BigDecimal.valueOf(0.01); |
| | | } |
| | | //调用wx支付 |
| | | String xml = WxPayUtils.getUnifiedorder(appid,mchId,payKey,notifyUrl,"商品购买",orderPayDTO.getOpenId(),orderDO.getOrderNo(),money); |
| | | String xml = WxPayUtils.getUnifiedorder(appid, mchId, payKey, notifyUrl, "商品购买", orderPayDTO.getOpenId(), |
| | | orderDO.getOrderNo(), money); |
| | | log.info("微信支付返回参数:" + xml); |
| | | shopOrderVO.setPayResult(xml); |
| | | }catch (Exception e){ |
| | |
| | | shopOrderVO.setOrderNo(orderDO.getOrderNo()); |
| | | shopOrderVO.setOrderTotal(orderDO.getTotalAmount()); |
| | | return R.ok(shopOrderVO); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | BigDecimal one = BigDecimal.valueOf(Double.valueOf("1") / 100); |
| | | System.out.println(); |
| | | } |
| | | } |