package com.panzhihua.service_community.service.impl; 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 * @create 2021-04-14 15:03:01 * @describe 订单表服务实现类 */ @Slf4j @Service public class ComShopOrderServiceImpl extends ServiceImpl implements ComShopOrderService { @Resource private ComShopGoodsDAO comShopGoodsDAO; @Resource private ComShopGoodsAttrDAO comShopGoodsAttrDAO; @Resource private ComShopCartDAO comShopCartDAO; @Resource private ComShopStoreDAO comShopStoreDAO; @Resource private ComShopUserAddressDAO comShopUserAddressDAO; @Resource private ComShopOrderOperateDAO comShopOrderOperateDAO; @Resource private ComShopOrderGoodsDAO comShopOrderGoodsDAO; @Resource private ComShopOrderDAO comShopOrderDAO; @Resource private ComShopOrderPayDAO comShopOrderPayDAO; @Value("${min.app.isTest}") private Boolean isTest; @Value("${min.app.appid}") private String appid; @Value("${min.app.payKey}") private String payKey; @Value("${min.app.mchId}") private String mchId; @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 * 请求参数 * @return 订单预览数据 */ @Override public R orderPreview(ComShopOrderPreviewDTO orderPreviewDTO) { // 返回参数 ComShopOrderPreviewVO orderPreviewVO = new ComShopOrderPreviewVO(); // 返回商品列表 List orderGoodsList = new ArrayList<>(); Long storeId = 0L; BigDecimal orderTotal = BigDecimal.ZERO; Integer orderGoodsTotal = 0; // 判断提交方式 if (orderPreviewDTO.getSubmitType().equals(ComShopOrderPreviewDTO.submitType.details)) {// 详情页提交 // 查询商品信息 ComShopGoodsDO goodsDO = comShopGoodsDAO.selectOne(new QueryWrapper().eq("id", orderPreviewDTO.getGoodsId()) .eq("status", ComShopGoodsDO.status.sell).eq("delete_status", ComShopGoodsDO.deleteStatus.no)); if (goodsDO == null) { return R.fail("商品已下架或已删除"); } // 设置店铺id storeId = goodsDO.getStoreId(); // 查询商品规格信息 ComShopGoodsAttrDO goodsAttrDO = comShopGoodsAttrDAO.selectById(orderPreviewDTO.getGoodsAttrId()); if (goodsAttrDO == null) { return R.fail("商品规格不存在"); } orderTotal = goodsAttrDO.getPrice().multiply(BigDecimal.valueOf(orderPreviewDTO.getBuyNum())); orderGoodsTotal = orderPreviewDTO.getBuyNum(); // 商品信息赋值 ComShopOrderGoodsVO orderGoodsVO = new ComShopOrderGoodsVO(); orderGoodsVO.setGoodsName(goodsDO.getName()); orderGoodsVO.setGoodsId(goodsDO.getId()); orderGoodsVO.setGoodsAttrId(goodsAttrDO.getId()); orderGoodsVO.setGoodsPic(goodsAttrDO.getAttrPic()); orderGoodsVO.setPrice(goodsAttrDO.getPrice()); orderGoodsVO.setNum(orderPreviewDTO.getBuyNum()); orderGoodsList.add(orderGoodsVO); } else if (orderPreviewDTO.getSubmitType().equals(ComShopOrderPreviewDTO.submitType.cart)) {// 购物车提交 List cartList = comShopCartDAO.selectBatchIds(orderPreviewDTO.getCartIds()); if (cartList.isEmpty()) { return R.fail("未找到购物车商品信息"); } // 设置店铺id storeId = cartList.get(0).getStoreId(); // 循环遍历购物车商品信息 for (ComShopCartDO cartDO : cartList) { // 商品信息赋值 ComShopOrderGoodsVO orderGoodsVO = new ComShopOrderGoodsVO(); orderGoodsVO.setGoodsId(cartDO.getGoodsId()); orderGoodsVO.setGoodsAttrId(cartDO.getGoodsAttrId()); orderGoodsVO.setGoodsPic(cartDO.getGoodsAttrPic()); orderGoodsVO.setNum(cartDO.getAmount()); orderGoodsVO.setGoodsName(cartDO.getGoodsName()); // 查询商品规格 ComShopGoodsAttrDO goodsAttrDO = comShopGoodsAttrDAO.selectById(cartDO.getGoodsAttrId()); if (goodsAttrDO != null) { orderGoodsVO.setPrice(goodsAttrDO.getPrice()); } else { orderGoodsVO.setPrice(BigDecimal.ZERO); } orderTotal = orderTotal.add(orderGoodsVO.getPrice().multiply(BigDecimal.valueOf(cartDO.getAmount()))); orderGoodsTotal += cartDO.getAmount(); orderGoodsList.add(orderGoodsVO); } } orderPreviewVO.setOrderTotal(orderTotal); orderPreviewVO.setOrderGoodsTotal(orderGoodsTotal); orderPreviewVO.setOrderGoodsList(orderGoodsList); // 查询店铺信息 ComShopStoreDO storeDO = comShopStoreDAO.selectById(storeId); if (storeDO != null) { PageShopStoreVO shopStoreVO = new PageShopStoreVO(); BeanUtils.copyProperties(storeDO, shopStoreVO); orderPreviewVO.setShopStoreVO(shopStoreVO); } // 查询默认收货地址 ComShopUserAddressDO userDefaultAddressDO = comShopUserAddressDAO.selectOne(new QueryWrapper().eq("delete_status", 2) .eq("user_id", orderPreviewDTO.getUserId()).eq("is_default", ComShopUserAddressDO.isDefault.yes)); // 查询用户收货地址中的默认地址 if (userDefaultAddressDO != null) { ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); BeanUtils.copyProperties(userDefaultAddressDO, userAddressVO); orderPreviewVO.setUserAddressVO(userAddressVO); } else { // 查询上次购买记录的收货地址 // 查询到用户上一笔订单 List shopOrders = this.baseMapper.selectList(new QueryWrapper() .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()); if (userAddressDO != null) { ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); BeanUtils.copyProperties(userAddressDO, userAddressVO); orderPreviewVO.setUserAddressVO(userAddressVO); } } // 无默认地址, 无上一单记录 地址 /* if(orderPreviewVO.getUserAddressVO()==null){ List userAddressDOList = comShopUserAddressDAO.selectList(new QueryWrapper() .eq("user_id",orderPreviewDTO.getUserId()).orderByDesc("create_at")); if(!userAddressDOList.isEmpty()){ ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); BeanUtils.copyProperties(userAddressDOList.get(0),userAddressVO); orderPreviewVO.setUserAddressVO(userAddressVO); } } */ } return R.ok(orderPreviewVO); } /** * 创建订单 * * @param orderCreateDTO * 创建订单请求参数 * @return 创建结果 */ @Transactional(rollbackFor = Exception.class) @Override public R orderCreate(ComShopOrderCreateDTO orderCreateDTO) { // 创建返回参数 ComShopOrderVO shopOrderVO = new ComShopOrderVO(); // 查询用户收货地址 ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(orderCreateDTO.getReceiverId()); if (userAddressDO == null || userAddressDO.getDeleteStatus() != 2) { return R.fail("收货地址不存在"); } // 用户id Long userId = orderCreateDTO.getUserId(); // 店铺id Long storeId = 0L; // 生成订单号 String orderNo = OrderNoUtils.NextOrderNo(userId); // 配送方式 Integer deliveryType = 0; // 订单总金额 BigDecimal orderTotal = BigDecimal.ZERO; // 创建订单商品信息 List orderGoodsDOList = new ArrayList<>(); if (!orderCreateDTO.getOrderGoodsList().isEmpty()) { for (ComShopOrderCreateGoodsDTO createGoodsDTO : orderCreateDTO.getOrderGoodsList()) { // 查询当前商品信息 ComShopGoodsDO goodsDO = comShopGoodsDAO.selectOne(new QueryWrapper().eq("id", createGoodsDTO.getGoodsId()) .eq("delete_status", ComShopGoodsDO.deleteStatus.no).eq("status", ComShopGoodsDO.status.sell)); if (goodsDO == null) { log.error("未查询到商品信息,商品已下架活已删除,商品id" + createGoodsDTO.getGoodsId()); continue; } storeId = goodsDO.getStoreId(); deliveryType = goodsDO.getDeliveryType(); ComShopOrderGoodsDO orderGoodsDO = new ComShopOrderGoodsDO(); orderGoodsDO.setGoodsId(goodsDO.getId()); orderGoodsDO.setGoodsName(goodsDO.getName()); orderGoodsDO.setStoreId(storeId); orderGoodsDO.setUserId(userId); orderGoodsDO.setAmount(createGoodsDTO.getNum()); orderGoodsDO.setOrderNo(orderNo); // 查询当前商品规格 ComShopGoodsAttrDO goodsAttrDO = comShopGoodsAttrDAO.selectById(createGoodsDTO.getGoodsAttrId()); if (goodsAttrDO == null) { log.error( "未查询到商品规格信息,商品id" + createGoodsDTO.getGoodsId() + "商品规格id:" + createGoodsDTO.getGoodsAttrId()); continue; } orderGoodsDO.setGoodsAttrId(goodsAttrDO.getId()); orderGoodsDO.setGoodsAttrPrice(goodsAttrDO.getPrice()); orderGoodsDO.setGoodsAttrPic(goodsAttrDO.getAttrPic()); orderGoodsDOList.add(orderGoodsDO); // 将商品金额计算到订单总金额 orderTotal = orderTotal .add(orderGoodsDO.getGoodsAttrPrice().multiply(BigDecimal.valueOf(orderGoodsDO.getAmount()))); } } // 如果是购物车提交,需要将购物车内商品移除 if (orderCreateDTO.getSubmitType().equals(ComShopOrderCreateDTO.submitType.cart)) { comShopCartDAO.deleteBatchIds(orderCreateDTO.getCartIds()); } // 创建订单信息 ComShopOrderDO shopOrderDO = new ComShopOrderDO(); shopOrderDO.setOrderNo(orderNo); shopOrderDO.setStoreId(storeId); shopOrderDO.setUserId(userId); shopOrderDO.setStatus(ComShopOrderDO.status.dfk); shopOrderDO.setPayStatus(ComShopOrderDO.payStatus.no); shopOrderDO.setReceiverId(orderCreateDTO.getReceiverId()); shopOrderDO.setDeleteStatus(ComShopOrderDO.deleteStatus.no); shopOrderDO.setTotalAmount(orderTotal); shopOrderDO.setDiscountAmount(BigDecimal.ZERO); shopOrderDO.setDeliveryType(deliveryType); if (StringUtils.isNotEmpty(orderCreateDTO.getRemark())) { shopOrderDO.setRemark(orderCreateDTO.getRemark()); } this.baseMapper.insert(shopOrderDO); if (!orderGoodsDOList.isEmpty()) { orderGoodsDOList.forEach(orderGoods -> { orderGoods.setOrderId(shopOrderDO.getId()); comShopOrderGoodsDAO.insert(orderGoods); }); } // 创建订单操作记录 ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); orderOperateDO.setOrderNo(orderNo); orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.create); orderOperateDO.setOperationTime(new Date()); if (StringUtils.isNotEmpty(orderCreateDTO.getPhone())) { orderOperateDO.setOperationContent("用户" + orderCreateDTO.getPhone() + "下单"); orderOperateDO.setOperationBy("用户" + orderCreateDTO.getPhone()); } else { orderOperateDO.setOperationContent("用户下单"); orderOperateDO.setOperationBy("用户"); } comShopOrderOperateDAO.insert(orderOperateDO); shopOrderVO.setOrderNo(orderNo); shopOrderVO.setOrderTotal(orderTotal); shopOrderVO.setOrderId(shopOrderDO.getId()); try { BigDecimal money = orderTotal; if (isTest) { money = BigDecimal.valueOf(0.01); } // 调用wx支付 String xml = WxPayUtils.getUnifiedorder(appid, mchId, payKey, notifyUrl, "商品购买", orderCreateDTO.getOpenId(), orderNo, money,null); log.info("微信支付返回参数:" + xml); shopOrderVO.setPayResult(xml); } catch (Exception e) { log.error("调用微信支付异常,异常原因:" + e.getMessage()); } return R.ok(shopOrderVO); } /** * 分页查询用户订单列表 * * @param comOrderListDTO * 请求参数 * @return 查询结果 */ @Override public R pageOrderList(PageComOrderListDTO comOrderListDTO) { Page page = new Page<>(comOrderListDTO.getPageNum(), comOrderListDTO.getPageSize()); IPage orderPageVOIPage = this.baseMapper.pageOrderList(page, comOrderListDTO); if (!orderPageVOIPage.getRecords().isEmpty()) { orderPageVOIPage.getRecords().forEach(orderVo -> { List orderGoodsVOS = new ArrayList<>(); // 查询订单下商品信息 List orderGoodsDOList = comShopOrderGoodsDAO .selectList(new QueryWrapper().eq("order_no", orderVo.getOrderNo())); if (!orderGoodsDOList.isEmpty()) { orderGoodsDOList.forEach(orderGoods -> { ComShopOrderGoodsVO orderGoodsVO = new ComShopOrderGoodsVO(); BeanUtils.copyProperties(orderGoods, orderGoodsVO); // 根据商品规格id查询商品规格 ComShopGoodsAttrDO goodsAttrDO = comShopGoodsAttrDAO.selectById(orderGoods.getGoodsAttrId()); if (goodsAttrDO != null) { orderGoodsVO.setGoodsAttr(goodsAttrDO.getGoodsAttr()); } orderGoodsVO.setNum(orderGoods.getAmount()); orderGoodsVO.setGoodsPic(orderGoods.getGoodsAttrPic()); orderGoodsVO.setPrice(orderGoods.getGoodsAttrPrice()); orderGoodsVOS.add(orderGoodsVO); }); } orderVo.setOrderGoodsVOList(orderGoodsVOS); PageShopStoreVO shopStoreVO = new PageShopStoreVO(); // 查询店铺信息 ComShopStoreDO shopStoreDO = comShopStoreDAO.selectById(orderVo.getStoreId()); if (shopStoreDO != null) { BeanUtils.copyProperties(shopStoreDO, shopStoreVO); } orderVo.setShopStoreVO(shopStoreVO); }); } return R.ok(orderPageVOIPage); } /** * 根据订单id查询订单详情 * * @param orderId * 订单id * @return 订单详情 */ @Override public R orderDetail(Long orderId) { ComShopOrderPageVO orderVO = new ComShopOrderPageVO(); // 查询订单信息 ComShopOrderDO shopOrderDO = this.baseMapper.selectById(orderId); if (shopOrderDO == null) { return R.fail("未查询到订单"); } BeanUtils.copyProperties(shopOrderDO, orderVO); orderVO.setOrderTotal(shopOrderDO.getTotalAmount()); PageShopStoreVO shopStoreVO = new PageShopStoreVO(); // 查询店铺信息 ComShopStoreDO shopStoreDO = comShopStoreDAO.selectById(shopOrderDO.getStoreId()); if (shopStoreDO != null) { BeanUtils.copyProperties(shopStoreDO, shopStoreVO); } orderVO.setShopStoreVO(shopStoreVO); List orderGoodsVOS = new ArrayList<>(); // 查询订单下商品信息 List orderGoodsDOList = comShopOrderGoodsDAO .selectList(new QueryWrapper().eq("order_no", shopOrderDO.getOrderNo())); StringBuilder sbr = new StringBuilder(); if (!orderGoodsDOList.isEmpty()) { orderGoodsDOList.forEach(orderGoods -> { ComShopOrderGoodsVO orderGoodsVO = new ComShopOrderGoodsVO(); BeanUtils.copyProperties(orderGoods, orderGoodsVO); orderGoodsVO.setNum(orderGoods.getAmount()); orderGoodsVO.setGoodsPic(orderGoods.getGoodsAttrPic()); 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)) { orderGoodsVO.setGoodsStatus(ComShopOrderGoodsVO.goodsStatus.ysc); } else if (goodsDO.getStatus().equals(ComShopGoodsDO.status.lower)) { orderGoodsVO.setGoodsStatus(ComShopOrderGoodsVO.goodsStatus.yxj); } else if (goodsDO.getStatus().equals(ComShopGoodsDO.status.sell)) { orderGoodsVO.setGoodsStatus(ComShopOrderGoodsVO.goodsStatus.csz); } // 根据商品规格id查询商品规格 ComShopGoodsAttrDO goodsAttrDO = comShopGoodsAttrDAO.selectById(orderGoods.getGoodsAttrId()); if (goodsAttrDO != null) { orderGoodsVO.setGoodsAttr(goodsAttrDO.getGoodsAttr()); } orderGoodsVOS.add(orderGoodsVO); sbr.append(orderGoods.getGoodsName() + " "); }); } orderVO.setOrderGoodsVOList(orderGoodsVOS); orderVO.setGoodsName(sbr.toString()); ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); // 查询用户收货地址 ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(shopOrderDO.getReceiverId()); if (userAddressDO != null) { BeanUtils.copyProperties(userAddressDO, userAddressVO); orderVO.setUserAddressVO(userAddressVO); } // 操作日志 List listOperLog = comShopOrderOperateDAO.selectList(new LambdaQueryWrapper() .eq(ComShopOrderOperateDO::getOrderNo, shopOrderDO.getOrderNo())); List listOperLogVO = new ArrayList<>(listOperLog.size()); listOperLog.forEach(logDO -> { ComShopOrderOperateVO copyVO = new ComShopOrderOperateVO(); BeanUtils.copyProperties(logDO, copyVO); listOperLogVO.add(copyVO); }); orderVO.setLogs(listOperLogVO); return R.ok(orderVO); } /** * 根据订单id取消订单 * * @param comShopOrderQueryDTO * 订单信息 * @return 取消结果 */ @Transactional(rollbackFor = Exception.class) @Override public R orderCancel(ComShopOrderQueryDTO comShopOrderQueryDTO) { // 查询订单 ComShopOrderDO shopOrderDO = this.baseMapper.selectById(comShopOrderQueryDTO.getOrderId()); if (shopOrderDO == null) { return R.fail("未查询到订单"); } if (!shopOrderDO.getStatus().equals(ComShopOrderDO.status.dfk)) { return R.fail("已支付订单不可取消"); } // 取消订单 shopOrderDO.setStatus(ComShopOrderDO.status.yqx); if (this.baseMapper.updateById(shopOrderDO) > 0) { // 添加订单操作记录 ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); orderOperateDO.setOrderNo(shopOrderDO.getOrderNo()); orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.cancel); orderOperateDO.setOperationTime(new Date()); if (comShopOrderQueryDTO.getIsAdmin()) { orderOperateDO.setOperationContent("管理员" + comShopOrderQueryDTO.getOperUserAccount() + "取消订单"); orderOperateDO.setOperationBy("用户" + comShopOrderQueryDTO.getOperUserAccount()); } else { orderOperateDO.setOperationContent("用户取消订单"); orderOperateDO.setOperationBy("用户"); } comShopOrderOperateDAO.insert(orderOperateDO); return R.ok(); } else { return R.fail("取消订单失败"); } } /** * 根据订单id删除订单 * * @param orderId * 订单id * @return 删除结果 */ @Override public R orderDelete(Long orderId) { // 查询订单 ComShopOrderDO shopOrderDO = this.baseMapper.selectById(orderId); if (shopOrderDO == null) { return R.fail("未查询到订单"); } if (!shopOrderDO.getStatus().equals(ComShopOrderDO.status.ywc) && !shopOrderDO.getStatus().equals(ComShopOrderDO.status.yqx)) { return R.fail("该订单状态不可删除"); } shopOrderDO.setDeleteStatus(ComShopOrderDO.deleteStatus.yes); if (this.baseMapper.updateById(shopOrderDO) > 0) { return R.ok(); } else { return R.fail("取消订单失败"); } } /** * 根据订单id确认收货 * * @param orderId * 订单id * @param phone * 手机号 * @return 确认结果 */ @Transactional(rollbackFor = Exception.class) @Override public R orderConfirm(Long orderId, String phone) { // 查询订单 ComShopOrderDO shopOrderDO = this.baseMapper.selectById(orderId); if (shopOrderDO == null) { return R.fail("未查询到订单"); } if (!shopOrderDO.getStatus().equals(ComShopOrderDO.status.dsh)) { return R.fail("该订单状态不可确认收货"); } // 订单确认收货 shopOrderDO.setStatus(ComShopOrderDO.status.ywc); shopOrderDO.setReceivingTime(new Date()); if (this.baseMapper.updateById(shopOrderDO) > 0) { // 添加订单操作记录 ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); orderOperateDO.setOrderNo(shopOrderDO.getOrderNo()); orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.complete); orderOperateDO.setOperationTime(new Date()); if (StringUtils.isNotEmpty(phone)) { orderOperateDO.setOperationContent("用户" + phone + "确认收货"); orderOperateDO.setOperationBy("用户" + phone); } else { orderOperateDO.setOperationContent("用户确认收货"); orderOperateDO.setOperationBy("用户"); } comShopOrderOperateDAO.insert(orderOperateDO); return R.ok(); } else { return R.fail("确认收货失败"); } } /** * 统计用户订单数量 * * @param userId * 用户id * @return 统计结果 */ @Override public R orderStatistics(Long userId) { OrderStatisticsVO orderStatisticsVO = new OrderStatisticsVO(); // 待付款订单数 Integer paymentNum = 0; // 待发货订单数 Integer deliverNum = 0; // 待收货订单数 Integer receivingNum = 0; List shopOrderList = this.baseMapper.selectList(new QueryWrapper() .eq("user_id", userId).eq("delete_status", ComShopOrderDO.deleteStatus.no)); if (!shopOrderList.isEmpty()) { for (ComShopOrderDO orderDO : shopOrderList) { if (orderDO.getStatus().equals(ComShopOrderDO.status.dfk)) { paymentNum++; } else if (orderDO.getStatus().equals(ComShopOrderDO.status.dfh)) { deliverNum++; } else if (orderDO.getStatus().equals(ComShopOrderDO.status.dsh)) { receivingNum++; } } } orderStatisticsVO.setPaymentNum(paymentNum); orderStatisticsVO.setDeliverNum(deliverNum); orderStatisticsVO.setReceivingNum(receivingNum); return R.ok(orderStatisticsVO); } @Override public R shipOrder(ComShopOrderShipDTO orderShipDTO) { ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderShipDTO.getOrderId()); if (comShopOrderDO == null) { return R.fail("订单不存在"); } if (!(comShopOrderDO.getStatus() == 2) || !(comShopOrderDO.getDeliveryStatus() == 1)) { return R.fail("订单发货失败,订单状态不允许发货"); } ComShopStoreDO storeDO = comShopStoreDAO.selectById(comShopOrderDO.getStoreId()); if (storeDO.getDeliveryType() != 2) { return R.fail("该商家不支持通过快递物流发货"); } comShopOrderDO.setDeliveryStatus(2); comShopOrderDO.setDeliveryType(2); comShopOrderDO.setStatus(3); comShopOrderDO.setDeliveryTime(Calendar.getInstance().getTime()); comShopOrderDO.setLogisticsCompany(orderShipDTO.getLogisticsCompany()); comShopOrderDO.setLogisticsNo(orderShipDTO.getLogisticsNo()); int updated = comShopOrderDAO.updateById(comShopOrderDO); if (updated == 1) { // 创建订单操作记录 ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); orderOperateDO.setOrderNo(comShopOrderDO.getOrderNo()); orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.deliver); orderOperateDO.setOperationTime(new Date()); if (orderShipDTO.getIsAdmin()) { orderOperateDO.setOperationContent(orderShipDTO.getOperUserAccount() + "已发货"); orderOperateDO.setOperationBy(orderShipDTO.getOperUserAccount()); } else { orderOperateDO.setOperationContent(orderShipDTO.getOperUserAccount() + "已发货"); orderOperateDO.setOperationBy(orderShipDTO.getOperUserAccount()); } int inserted = comShopOrderOperateDAO.insert(orderOperateDO); if (inserted != 1) { log.error("订单发货日志保存错误"); } return R.ok("发货成功"); } return R.fail("发货失败!"); } @Override public R deliverOrder(ComShopOrderDeliverDTO orderDeliverDTO) { ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderDeliverDTO.getOrderId()); if (comShopOrderDO == null) { return R.fail("订单不存在"); } if (!(comShopOrderDO.getStatus() == 2) || !(comShopOrderDO.getDeliveryStatus() == 1)) { return R.fail("当前订单不能配送"); } ComShopStoreDO storeDO = comShopStoreDAO.selectById(comShopOrderDO.getStoreId()); if (storeDO.getDeliveryType() != 1) { return R.fail("该商家不支持通过商家配送"); } comShopOrderDO.setDeliveryStatus(4); comShopOrderDO.setDeliveryType(1); comShopOrderDO.setStatus(3); comShopOrderDO.setDeliveryTime(Calendar.getInstance().getTime()); int updated = comShopOrderDAO.updateById(comShopOrderDO); if (updated == 1) { // 创建订单操作记录 ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); orderOperateDO.setOrderNo(comShopOrderDO.getOrderNo()); orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.deliver); orderOperateDO.setOperationTime(new Date()); if (orderDeliverDTO.getIsAdmin()) { orderOperateDO.setOperationContent(orderDeliverDTO.getOperUserAccount() + "已发货"); orderOperateDO.setOperationBy(orderDeliverDTO.getOperUserAccount()); } else { orderOperateDO.setOperationContent(orderDeliverDTO.getOperUserAccount() + "已发货"); orderOperateDO.setOperationBy(orderDeliverDTO.getOperUserAccount()); } int inserted = comShopOrderOperateDAO.insert(orderOperateDO); if (inserted != 1) { log.error("订单发货日志保存错误"); } return R.ok("开始配送"); } return R.fail("操作失败!"); } @Override public R finishDeliverOrder(ComShopOrderDeliverDTO orderDeliverDTO) { ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderDeliverDTO.getOrderId()); if (comShopOrderDO == null) { return R.fail("订单不存在"); } if (comShopOrderDO.getDeliveryStatus() != 4 && comShopOrderDO.getDeliveryStatus() != 3) { return R.fail("订单还未开始配送"); } if (!(comShopOrderDO.getStatus() == 3)) { return R.fail("订单还未发货"); } // comShopOrderDO.setStatus(4); comShopOrderDO.setDeliveryStatus(5); int updated = comShopOrderDAO.updateById(comShopOrderDO); if (updated == 1) { // 创建订单操作记录 ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); orderOperateDO.setOrderNo(comShopOrderDO.getOrderNo()); orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.complete); orderOperateDO.setOperationTime(new Date()); if (orderDeliverDTO.getIsAdmin()) { orderOperateDO.setOperationContent("订单已完成"); orderOperateDO.setOperationBy(orderDeliverDTO.getOperUserAccount()); } else { orderOperateDO.setOperationContent("订单已完成"); orderOperateDO.setOperationBy(orderDeliverDTO.getOperUserAccount()); } int inserted = comShopOrderOperateDAO.insert(orderOperateDO); if (inserted != 1) { log.error("订单发货日志保存错误"); } return R.ok("配送完成"); } return R.fail("操作失败!"); } @Override public R shopOrderExportData(ComShopOrderExportDTO comShopOrderExportDTO) { Page page = new Page(); page.setSize(10000); page.setCurrent(1); IPage excelShopOrderDTO = comShopOrderDAO.selectOrderExport(page, comShopOrderExportDTO); return R.ok(excelShopOrderDTO.getRecords()); } @Override public R shopOrderFundsExportData(ComShopFundsExportDTO comShopFundsExportDTO) { Page page = new Page(); page.setSize(10000); page.setCurrent(1); IPage excelShopFundsDTO = comShopOrderDAO.selectFundsExport(page, comShopFundsExportDTO); return R.ok(excelShopFundsDTO.getRecords()); } @Override public R getFundsStat(Long userId) { ComShopFundsVO comShopFundsVO = comShopOrderDAO.queryStatis(userId); if (comShopFundsVO == null) { comShopFundsVO = new ComShopFundsVO(); comShopFundsVO.setMonthTotal(new BigDecimal(0)); comShopFundsVO.setTodayTotal(new BigDecimal(0)); comShopFundsVO.setWeekTotal(new BigDecimal(0)); } return R.ok(comShopFundsVO); } @Override public R pageShopFunds(PageComShopFundsSearchDTO pageComShopFundsSearchDTO) { Long pageNum = pageComShopFundsSearchDTO.getPageNum(); Long pageSize = pageComShopFundsSearchDTO.getPageSize(); Page page = new Page(); if (pageNum == null || 0 == pageNum.longValue()) { pageNum = 1l; } if (pageSize == null || 0 == pageSize.longValue()) { pageSize = 10l; } page.setCurrent(pageNum); page.setSize(pageSize); IPage comShopFundsOrderVOIPage = comShopOrderDAO.pageShopFunds(page, pageComShopFundsSearchDTO); return R.ok(comShopFundsOrderVOIPage); } @Override public R pageShopOrder(PageComShopOrderSearchDTO pageComShopOrderSearchDTO) { Long pageNum = pageComShopOrderSearchDTO.getPageNum(); Long pageSize = pageComShopOrderSearchDTO.getPageSize(); Page page = new Page(); page.setCurrent(pageNum); page.setSize(pageSize); if (pageNum == null || 0 == pageNum.longValue()) { page.setCurrent(1l); } if (pageSize == null || 0 == pageSize.longValue()) { page.setSize(10l); } IPage ipage = this.baseMapper.pageOrderBy(page, pageComShopOrderSearchDTO); return R.ok(ipage); } @Override public R capitalDetailByStore(Long id) { if (id == null) { R.fail("订单号不能为空!"); } CapitalDetailVO vo = this.baseMapper.capitalDetailByStore(id); return R.ok(vo); } /** * 微信支付订单回调 * * @param wxPayNotifyOrderDTO * 订单支付回调参数 */ @Transactional(rollbackFor = Exception.class) @Override public void wxOrderPayNotify(WxPayNotifyOrderDTO wxPayNotifyOrderDTO) { log.info("微信订单支付回调开始处理逻辑"); if (StringUtils.isEmpty(wxPayNotifyOrderDTO.getOrderTradeNo())) { log.error("微信支付回调失败,订单号为空"); return; } log.info("微信订单支付回调开始查询订单"); // 查询订单 ComShopOrderDO shopOrderDO = this.baseMapper.selectOne(new QueryWrapper().lambda() .eq(ComShopOrderDO::getOrderNo, wxPayNotifyOrderDTO.getOrderTradeNo())); if (shopOrderDO == null) { log.error("未查询到支付订单,订单回调失败,订单号:" + wxPayNotifyOrderDTO.getOrderTradeNo()); return; } shopOrderDO.setStatus(ComShopOrderDO.status.dfh); shopOrderDO.setPayType(ComShopOrderDO.payType.wx); 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"))); this.baseMapper.updateById(shopOrderDO); // 查询订单商品 List orderGoodsList = comShopOrderGoodsDAO.selectList(new QueryWrapper().lambda() .eq(ComShopOrderGoodsDO::getOrderNo, shopOrderDO.getOrderNo())); if (!orderGoodsList.isEmpty()) { int goodsNub = 0; for (ComShopOrderGoodsDO orderGood : orderGoodsList) { goodsNub += orderGood.getAmount(); // 更新商品信息 ComShopGoodsDO goodsDO = comShopGoodsDAO.selectById(orderGood.getGoodsId()); if (goodsDO != null) { goodsDO.setSale(goodsDO.getSale() + orderGood.getAmount()); comShopGoodsDAO.updateById(goodsDO); } // 更新商品规格 ComShopGoodsAttrDO goodsAttrDO = comShopGoodsAttrDAO.selectById(orderGood.getGoodsAttrId()); if (goodsAttrDO != null) { goodsAttrDO.setSale(goodsAttrDO.getSale() + orderGood.getAmount()); comShopGoodsAttrDAO.updateById(goodsAttrDO); } } // 更新店铺销量以及销售额 ComShopStoreDO storeDO = comShopStoreDAO.selectById(shopOrderDO.getStoreId()); if (storeDO != null) { storeDO.setSale(storeDO.getSale() + goodsNub); storeDO.setSaleVolume(storeDO.getSaleVolume().add(shopOrderDO.getTotalAmount())); comShopStoreDAO.updateById(storeDO); } } // 添加订单操作记录 ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); orderOperateDO.setOrderNo(shopOrderDO.getOrderNo()); orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.pay); orderOperateDO.setOperationTime(new Date()); orderOperateDO.setOperationContent("用户支付订单"); orderOperateDO.setOperationBy("用户"); comShopOrderOperateDAO.insert(orderOperateDO); // 添加订单支付记录表 ComShopOrderPayDO orderPayDO = new ComShopOrderPayDO(); orderPayDO.setOrderNo(shopOrderDO.getOrderNo()); orderPayDO.setOrderAmount(shopOrderDO.getTotalAmount()); orderPayDO.setWxTradeNo(wxPayNotifyOrderDTO.getWxTradeNo()); orderPayDO.setPayStatus(ComShopOrderPayDO.payStatus.yes); orderPayDO.setPayAmount(shopOrderDO.getPayAmount()); orderPayDO.setPayTime(shopOrderDO.getPayTime()); comShopOrderPayDAO.insert(orderPayDO); } /** * 订单去支付 * * @param orderPayDTO * 请求参数 * @return 支付对象 */ public R wxPay(OrderPayDTO orderPayDTO) { // 创建返回参数 ComShopOrderVO shopOrderVO = new ComShopOrderVO(); // 查询订单 ComShopOrderDO orderDO = comShopOrderDAO.selectOne( new QueryWrapper().lambda().eq(ComShopOrderDO::getOrderNo, orderPayDTO.getOrderNo())); if (orderDO == null) { return R.fail("订单不存在"); } try { BigDecimal money = orderDO.getTotalAmount(); if (isTest) { money = BigDecimal.valueOf(0.01); } // 调用wx支付 String xml = WxPayUtils.getUnifiedorder(appid, mchId, payKey, notifyUrl, "商品购买", orderPayDTO.getOpenId(), orderDO.getOrderNo(), money,null); log.info("微信支付返回参数:" + xml); shopOrderVO.setPayResult(xml); } catch (Exception e) { log.error("调用微信支付异常,异常原因:" + e.getMessage()); } shopOrderVO.setOrderId(orderDO.getId()); shopOrderVO.setOrderNo(orderDO.getOrderNo()); shopOrderVO.setOrderTotal(orderDO.getTotalAmount()); return R.ok(shopOrderVO); } }