From 2a212f983f35e1c569dfec3a172fb5f0c9f85fac Mon Sep 17 00:00:00 2001 From: lidongdong <1459917685@qq.com> Date: 星期二, 06 十二月 2022 13:43:43 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/haucheng_panzhihua' into haucheng_panzhihua --- springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerOrderServiceImpl.java | 615 +++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 392 insertions(+), 223 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerOrderServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerOrderServiceImpl.java index 33d021c..890219e 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerOrderServiceImpl.java +++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerOrderServiceImpl.java @@ -1,25 +1,35 @@ package com.panzhihua.service_community.service.impl; +import cn.binarywang.wx.miniapp.api.WxMaService; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; 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.constants.Constants; import com.panzhihua.common.model.dtos.shop.*; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.convenient.ConvenientElevatingPointVO; import com.panzhihua.common.model.vos.community.convenient.ConvenientMerchantVO; 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.common.model.vos.user.SysUserVO; +import com.panzhihua.common.service.user.UserService; +import com.panzhihua.common.utlis.*; import com.panzhihua.common.utlis.wx.WXPayUtil; +import com.panzhihua.service_community.config.RabbitmqConfig; import com.panzhihua.service_community.dao.*; import com.panzhihua.service_community.model.dos.*; import com.panzhihua.service_community.service.ComShopFlowerOrderService; +import com.panzhihua.service_community.util.WxMaConfiguration; import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -31,6 +41,7 @@ import java.util.*; import java.util.stream.Collectors; +import static java.util.Objects.isNull; import static java.util.Objects.nonNull; /** @@ -67,6 +78,14 @@ private ComShopFlowerEvaluateDAO comShopFlowerEvaluateDAO; @Resource private ComShopFlowerRefundOrderDAO comShopFlowerRefundOrderDAO; + @Resource + private ComShopFlowerOrderDeliveryDAO comShopFlowerOrderDeliveryDAO; + @Resource + private WxMaConfiguration wxMaConfiguration; + @Resource + private UserService userService; + @Resource + private RabbitTemplate rabbitTemplate; @Value("${hcMin.app.isTest}") @@ -217,9 +236,9 @@ // 店铺id Long storeId = 0L; // 生成订单号 - String orderNo = OrderNoUtils.NextOrderNo(userId); + String orderNo = OrderNoUtils.NextOrderNoFlower(userId); // 配送方式 - Integer deliveryType = 0; + Integer deliveryType = 1; // 订单总金额 BigDecimal orderTotal = BigDecimal.ZERO; // 创建订单商品信息 @@ -235,10 +254,11 @@ continue; } storeId = goodsDO.getStoreId(); - deliveryType = goodsDO.getDeliveryType(); + deliveryType = orderCreateDTO.getDeliveryType(); ComShopFlowerOrderGoodsDO orderGoodsDO = new ComShopFlowerOrderGoodsDO(); orderGoodsDO.setGoodsId(goodsDO.getId()); orderGoodsDO.setGoodsName(goodsDO.getName()); + orderGoodsDO.setStoreId(storeId); orderGoodsDO.setUserId(userId); orderGoodsDO.setAmount(createGoodsDTO.getNum()); @@ -254,8 +274,9 @@ if (goodsAttrDO.getStock() < createGoodsDTO.getNum()) { return R.fail("该规格库存不足,无法下单"); } + orderGoodsDO.setGoodsAttrName(goodsAttrDO.getGoodsAttrName()); orderGoodsDO.setGoodsAttrId(goodsAttrDO.getId()); - orderGoodsDO.setGoodsAttrPrice(goodsAttrDO.getPrice()); + orderGoodsDO.setGoodsAttrPrice(createGoodsDTO.getPrice()); orderGoodsDO.setPrice(goodsAttrDO.getPrice()); orderGoodsDO.setCollatePrice(goodsAttrDO.getCollatePrice()); orderGoodsDO.setFreeShippingPrice(goodsAttrDO.getFreeShippingPrice()); @@ -263,13 +284,9 @@ orderGoodsDOList.add(orderGoodsDO); // 将商品金额计算到订单总金额 orderTotal = orderTotal - .add(orderGoodsDO.getGoodsAttrPrice().multiply(BigDecimal.valueOf(orderGoodsDO.getAmount()))); + .add(createGoodsDTO.getPrice().multiply(BigDecimal.valueOf(createGoodsDTO.getNum()))); } } - // 如果是购物车提交,需要将购物车内商品移除 - /*if (orderCreateDTO.getSubmitType().equals(ComShopOrderCreateDTO.submitType.cart)) { - comShopCartDAO.deleteBatchIds(orderCreateDTO.getCartIds()); - }*/ // 创建订单信息 ComShopFlowerOrderDO shopOrderDO = new ComShopFlowerOrderDO(); shopOrderDO.setOrderNo(orderNo); @@ -324,6 +341,12 @@ } catch (Exception e) { log.error("调用微信支付异常,异常原因:" + e.getMessage()); } + //发送消息到mq + rabbitTemplate.convertAndSend("huacheng.shop.order.exchange", "huacheng.shop.order.key", shopOrderVO, message -> { + //30分钟后 + message.getMessageProperties().setHeader("x-delay", 1800*1000); + return message; + }); return R.ok(shopOrderVO); } @@ -348,15 +371,16 @@ ComShopFlowerOrderGoodsVO orderGoodsVO = new ComShopFlowerOrderGoodsVO(); BeanUtils.copyProperties(orderGoods, orderGoodsVO); // 根据商品规格id查询商品规格 - ComShopFlowerGoodsAttrDO goodsAttrDO = comShopFlowerGoodsAttrDAO.selectById(orderGoods.getGoodsAttrId()); - if (goodsAttrDO != null) { - orderGoodsVO.setGoodsAttr(goodsAttrDO.getGoodsAttrName()); - } +// ComShopFlowerGoodsAttrDO goodsAttrDO = comShopFlowerGoodsAttrDAO.selectById(orderGoods.getGoodsAttrId()); +// if (goodsAttrDO != null) { + orderGoodsVO.setGoodsAttr(orderGoods.getGoodsAttrName()); +// } orderGoodsVO.setNum(orderGoods.getAmount()); orderGoodsVO.setGoodsPic(orderGoods.getGoodsAttrPic()); orderGoodsVO.setPrice(orderGoods.getGoodsAttrPrice()); orderGoodsVOS.add(orderGoodsVO); }); + orderVo.setGoodsAttrName(orderGoodsDOList.get(0).getGoodsAttrName()); } orderVo.setOrderGoodsVOList(orderGoodsVOS); @@ -367,6 +391,31 @@ BeanUtils.copyProperties(convenientMerchantDO, shopStoreVO); } orderVo.setConvenientMerchantVO(shopStoreVO); + //已完成、已退款才有评论 + if (ComShopFlowerOrderDO.status.ywc == orderVo.getStatus() || ComShopFlowerOrderDO.status.ytk == orderVo.getStatus()) { + ComShopFlowerEvaluateVO comShopFlowerEvaluateVO = comShopFlowerEvaluateDAO.selectByOrderNo(orderVo.getOrderNo()); + if (nonNull(comShopFlowerEvaluateVO)) { + orderVo.setComShopFlowerEvaluateVO(comShopFlowerEvaluateVO); + } + } + + //判断是否可以退款 订单是否已超过15天 是否已有退款订单 + int count = comShopFlowerRefundOrderDAO.selectCountRefundNowByOrderId(orderVo.getOrderId()); + if (count > 0){ + orderVo.setRefundable(2); + }else { + if (null == orderVo.getReceivingTime()){ + orderVo.setRefundable(2); + }else { + //收货时间往前推15天和当前时间做比较 + Date date = DateUtils.addDay(orderVo.getReceivingTime(), 15); + if(date.before(new Date())){ + orderVo.setRefundable(2); + } + } + } + + }); } return R.ok(orderPageVOIPage); @@ -379,17 +428,29 @@ * @return 订单详情 */ @Override - public R orderDetail(Long orderId) { - + public R orderDetail(Long orderId, String phone) { ComShopFlowerOrderPageVO orderVO = new ComShopFlowerOrderPageVO(); - // 查询订单信息 - ComShopFlowerOrderDO shopOrderDO = this.baseMapper.selectById(orderId); + ComShopFlowerOrderDO shopOrderDO = null; + if (StrUtil.isEmpty(phone)) { + // 查询订单信息 + shopOrderDO = this.baseMapper.selectById(orderId); + } else { + //查询自提点信息 + ConvenientElevatingPointDO convenientElevatingPointDO = convenientElevatingPointDAO.selectOne(new LambdaQueryWrapper<ConvenientElevatingPointDO>().eq(ConvenientElevatingPointDO::getWechatAccount, phone)); + if (isNull(convenientElevatingPointDO)) { + return R.ok("订单不在该自提点"); + } + Long pointDOId = convenientElevatingPointDO.getId(); + shopOrderDO = this.baseMapper.selectOne(new LambdaQueryWrapper<ComShopFlowerOrderDO>().eq(ComShopFlowerOrderDO::getId, orderId).eq(ComShopFlowerOrderDO::getPointId, pointDOId)); + } + + if (shopOrderDO == null) { return R.fail("未查询到订单"); } BeanUtils.copyProperties(shopOrderDO, orderVO); orderVO.setOrderTotal(shopOrderDO.getTotalAmount()); - + orderVO.setOrderId(orderId); ConvenientMerchantVO shopStoreVO = new ConvenientMerchantVO(); // 查询店铺信息 ConvenientMerchantDO shopStoreDO = convenientMerchantDAO.selectById(shopOrderDO.getStoreId()); @@ -411,7 +472,7 @@ orderGoodsVO.setGoodsPic(orderGoods.getGoodsAttrPic()); orderGoodsVO.setPrice(orderGoods.getGoodsAttrPrice()); // 查询商品信息判断商品状态 - ComShopFlowerGoodsDO goodsDO = comShopFlowerGoodsDAO.selectById(orderGoods.getGoodsId()); + /* ComShopFlowerGoodsDO goodsDO = comShopFlowerGoodsDAO.selectById(orderGoods.getGoodsId()); if (goodsDO == null || goodsDO.getDeleteStatus().equals(ComShopFlowerGoodsDO.deleteStatus.yes) || goodsDO.getDeleteStatus().equals(ComShopFlowerGoodsDO.status.recovery)) { orderGoodsVO.setGoodsStatus(ComShopFlowerOrderGoodsVO.goodsStatus.ysc); @@ -419,17 +480,18 @@ orderGoodsVO.setGoodsStatus(ComShopFlowerOrderGoodsVO.goodsStatus.yxj); } else if (goodsDO.getStatus().equals(ComShopFlowerGoodsDO.status.sell)) { orderGoodsVO.setGoodsStatus(ComShopFlowerOrderGoodsVO.goodsStatus.csz); - } + }*/ // 根据商品规格id查询商品规格 - ComShopFlowerGoodsAttrDO goodsAttrDO = comShopFlowerGoodsAttrDAO.selectById(orderGoods.getGoodsAttrId()); - if (goodsAttrDO != null) { - orderGoodsVO.setGoodsAttr(goodsAttrDO.getGoodsAttrName()); - } +// ComShopFlowerGoodsAttrDO goodsAttrDO = comShopFlowerGoodsAttrDAO.selectById(orderGoods.getGoodsAttrId()); + orderGoodsVO.setGoodsAttr(orderGoods.getGoodsAttrName()); orderGoodsVOS.add(orderGoodsVO); sbr.append(orderGoods.getGoodsName()).append(" "); }); + orderVO.setGoodsAttrPic(orderGoodsDOList.get(0).getGoodsAttrPic()); + orderVO.setGoodsAttrName(orderGoodsDOList.get(0).getGoodsAttrName()); } + orderVO.setOrderGoodsVOList(orderGoodsVOS); orderVO.setGoodsName(sbr.toString()); @@ -442,7 +504,7 @@ } // 操作日志 - List<ComShopFlowerOrderOperateDO> listOperLog = +/* List<ComShopFlowerOrderOperateDO> listOperLog = comShopFlowerOrderOperateDAO.selectList(new LambdaQueryWrapper<ComShopFlowerOrderOperateDO>() .eq(ComShopFlowerOrderOperateDO::getOrderNo, shopOrderDO.getOrderNo())); List<ComShopFlowerOrderOperateVO> listOperLogVO = new ArrayList<>(listOperLog.size()); @@ -451,7 +513,7 @@ BeanUtils.copyProperties(logDO, copyVO); listOperLogVO.add(copyVO); }); - orderVO.setLogs(listOperLogVO); + orderVO.setLogs(listOperLogVO);*/ Long pointId = shopOrderDO.getPointId(); if (null != pointId) { ConvenientElevatingPointDO convenientElevatingPointDO = convenientElevatingPointDAO.selectById(pointId); @@ -466,6 +528,33 @@ orderVO.setComShopFlowerEvaluateVO(comShopFlowerEvaluateVO); } } + //设置退款金额 + ComShopFlowerRefundOrderDO comShopFlowerRefundOrderDO = comShopFlowerRefundOrderDAO.selectOne(new LambdaQueryWrapper<ComShopFlowerRefundOrderDO>().eq(ComShopFlowerRefundOrderDO::getOrderId, shopOrderDO.getId())); + if (nonNull(comShopFlowerRefundOrderDO)) { + orderVO.setRefundAmount(comShopFlowerRefundOrderDO.getRefundAmount()); + orderVO.setRefundTime(comShopFlowerRefundOrderDO.getRefundTime()); + } + + //如果状态时取消状态,更新时间为去取消时间 + if (shopOrderDO.getStatus() == ComShopFlowerOrderDO.status.yqx) { + orderVO.setCancelTime(shopOrderDO.getUpdateAt()); + } + //判断是否可以退款 订单是否已超过15天 是否已有退款订单 + int count = comShopFlowerRefundOrderDAO.selectCountRefundNowByOrderId(orderId); + if (count > 0){ + orderVO.setRefundable(2); + }else { + if (null == orderVO.getReceivingTime()){ + orderVO.setRefundable(2); + }else { + //收货时间往前推15天和当前时间做比较 + Date date = DateUtils.addDay(orderVO.getReceivingTime(), 15); + if(date.before(new Date())){ + orderVO.setRefundable(2); + } + } + } + return R.ok(orderVO); @@ -485,68 +574,71 @@ if (shopOrderDO == null) { return R.fail("未查询到订单"); } - if (!shopOrderDO.getStatus().equals(ComShopFlowerOrderDO.status.ddps)) { - return R.fail("已配送订单不可取消"); - } - // 取消订单 - shopOrderDO.setStatus(ComShopFlowerOrderDO.status.yqx); - //退款 - String refundNo = WXPayUtil.generateNonceStr(); - try { - String refundStr = WxPayUtils.refund(appid, mchId, shopOrderDO.getWxTardeNo(), shopOrderDO.getPayAmount(), - shopOrderDO.getPayAmount(), refundNo, isTest); - log.info("退款请求接口返回参数:{}", refundStr); - Map<String, String> mapResult = WXPayUtil.xmlToMap(refundStr); - if (CollUtil.isNotEmpty(mapResult)) { - String return_code = (String) mapResult.get("return_code"); - String result_code = (String) mapResult.get("result_code"); - String return_msg = mapResult.get("return_msg"); - ComShopFlowerOrderPayDO orderPayDO = new ComShopFlowerOrderPayDO(); + if (shopOrderDO.getStatus().equals(ComShopFlowerOrderDO.status.ddps)||shopOrderDO.getStatus().equals(ComShopFlowerOrderDO.status.dfh)) { + // 取消订单 + shopOrderDO.setStatus(ComShopFlowerOrderDO.status.yqx); + //退款 + String refundNo = WXPayUtil.generateNonceStr(); + try { + String refundStr = WxPayUtils.refund(appid, mchId, shopOrderDO.getOrderNo(), shopOrderDO.getPayAmount(), + shopOrderDO.getPayAmount(), refundNo, isTest); + log.info("退款请求接口返回参数:{}", refundStr); + Map<String, String> mapResult = WXPayUtil.xmlToMap(refundStr); + if (CollUtil.isNotEmpty(mapResult)) { + String return_code = (String) mapResult.get("return_code"); + String result_code = (String) mapResult.get("result_code"); + String return_msg = mapResult.get("return_msg"); + ComShopFlowerOrderPayDO orderPayDO = new ComShopFlowerOrderPayDO(); - orderPayDO.setOrderNo(shopOrderDO.getOrderNo()); - orderPayDO.setOrderAmount(shopOrderDO.getTotalAmount()); - orderPayDO.setPayTime(new Date()); - orderPayDO.setStoreId(shopOrderDO.getStoreId()); - orderPayDO.setDeliveryType(shopOrderDO.getDeliveryType()); - orderPayDO.setOrderId(shopOrderDO.getId()); - orderPayDO.setPayType(ComShopFlowerOrderPayDO.payType.qx); - if ("SUCCESS".equals(return_code) && return_code.equals(result_code)) { - //退款成功 - // 添加订单支付记录表 - orderPayDO.setPayStatus(ComShopFlowerOrderPayDO.payStatus.yes); - orderPayDO.setRefundStatus(ComShopFlowerOrderPayDO.refundStatus.tkcg); + orderPayDO.setOrderNo(shopOrderDO.getOrderNo()); + orderPayDO.setOrderAmount(shopOrderDO.getTotalAmount()); + orderPayDO.setPayTime(new Date()); + orderPayDO.setStoreId(shopOrderDO.getStoreId()); + orderPayDO.setDeliveryType(shopOrderDO.getDeliveryType()); + orderPayDO.setOrderId(shopOrderDO.getId()); + orderPayDO.setPayType(ComShopFlowerOrderPayDO.payType.qx); + if ("SUCCESS".equals(return_code) && return_code.equals(result_code)) { + //退款成功 + // 添加订单支付记录表 + orderPayDO.setPayStatus(ComShopFlowerOrderPayDO.payStatus.yes); + orderPayDO.setRefundStatus(ComShopFlowerOrderPayDO.refundStatus.tkcg); - } else { - //退款失败 - // 添加订单支付记录表 - orderPayDO.setPayStatus(ComShopFlowerOrderPayDO.payStatus.no); - orderPayDO.setRefundStatus(ComShopFlowerOrderPayDO.refundStatus.tksb); - shopOrderDO.setRemark(shopOrderDO.getRemark() + "_" + return_msg); + } else { + //退款失败 + // 添加订单支付记录表 + orderPayDO.setPayStatus(ComShopFlowerOrderPayDO.payStatus.no); + orderPayDO.setRefundStatus(ComShopFlowerOrderPayDO.refundStatus.tksb); + shopOrderDO.setRemark(shopOrderDO.getRemark() + "_" + return_msg); + } + comShopFlowerOrderPayDAO.insert(orderPayDO); } - comShopFlowerOrderPayDAO.insert(orderPayDO); + } catch (Exception e) { + log.error("申请退款失败," + e.getMessage()); + e.printStackTrace(); + return R.fail("取消订单失败"); } - } catch (Exception e) { - log.error("申请退款失败," + e.getMessage()); - e.printStackTrace(); - } - if (this.baseMapper.updateById(shopOrderDO) > 0) { - // 添加订单操作记录 - ComShopFlowerOrderOperateDO orderOperateDO = new ComShopFlowerOrderOperateDO(); - orderOperateDO.setOrderNo(shopOrderDO.getOrderNo()); - orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.cancel); - orderOperateDO.setOperationTime(new Date()); - if (comShopOrderQueryDTO.getIsAdmin()) { - orderOperateDO.setOperationContent("管理员" + comShopOrderQueryDTO.getOperUserAccount() + "取消订单"); - orderOperateDO.setOperationBy("用户" + comShopOrderQueryDTO.getOperUserAccount()); + if (this.baseMapper.updateById(shopOrderDO) > 0) { + // 添加订单操作记录 + ComShopFlowerOrderOperateDO orderOperateDO = new ComShopFlowerOrderOperateDO(); + 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("用户"); + } + comShopFlowerOrderOperateDAO.insert(orderOperateDO); + return R.ok(); } else { - orderOperateDO.setOperationContent("用户取消订单"); - orderOperateDO.setOperationBy("用户"); + return R.fail("取消订单失败"); } - comShopFlowerOrderOperateDAO.insert(orderOperateDO); - return R.ok(); - } else { - return R.fail("取消订单失败"); + }else { + return R.fail("该订单不可取消"); } + } @@ -557,6 +649,7 @@ * @return 删除结果 */ @Override + @Transactional(rollbackFor = Exception.class) public R orderDelete(Long orderId) { // 查询订单 ComShopFlowerOrderDO shopOrderDO = this.baseMapper.selectById(orderId); @@ -595,7 +688,7 @@ return R.fail("该订单状态不可确认收货"); } // 订单确认收货 - shopOrderDO.setStatus(ComShopOrderDO.status.ywc); + shopOrderDO.setStatus(ComShopFlowerOrderDO.status.dpj); shopOrderDO.setReceivingTime(new Date()); if (this.baseMapper.updateById(shopOrderDO) > 0) { // 添加订单操作记录 @@ -611,46 +704,20 @@ orderOperateDO.setOperationBy("用户"); } comShopFlowerOrderOperateDAO.insert(orderOperateDO); + + //一个自提订单算一个货 + if (ComShopFlowerOrderDO.deliveryType.store == shopOrderDO.getDeliveryType()){ + ConvenientElevatingPointDO convenientElevatingPointDO = convenientElevatingPointDAO.selectById(shopOrderDO.getPointId()); + convenientElevatingPointDO.setPrepareGoodsNum(convenientElevatingPointDO.getPrepareGoodsNum() - 1); + convenientElevatingPointDO.setAlreadyGoodsNum(convenientElevatingPointDO.getAlreadyGoodsNum() + 1); + convenientElevatingPointDAO.updateById(convenientElevatingPointDO); + } 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<ComShopOrderDO> shopOrderList = this.baseMapper.selectList(new QueryWrapper<ComShopOrderDO>() - .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);*/ - return R.ok(); - } /** * 订单发货 @@ -664,7 +731,7 @@ if (comShopOrderDO == null) { return R.fail("订单不存在"); } - if (!(comShopOrderDO.getStatus() == 1) || !(comShopOrderDO.getDeliveryStatus() == 1)) { + if (!(comShopOrderDO.getStatus() == ComShopFlowerOrderDO.status.dfh) || (comShopOrderDO.getDeliveryStatus() == ComShopFlowerOrderDO.deliveryStatus.yes)) { return R.fail("订单发货失败,订单状态不允许发货"); } @@ -685,16 +752,23 @@ orderOperateDO.setOrderNo(comShopOrderDO.getOrderNo()); orderOperateDO.setOperationType(ComShopFlowerOrderOperateDO.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()); - } + + orderOperateDO.setOperationContent(orderShipDTO.getOperUserAccount() + "已发货"); + orderOperateDO.setOperationBy(orderShipDTO.getOperUserAccount()); int inserted = comShopFlowerOrderOperateDAO.insert(orderOperateDO); if (inserted != 1) { log.error("订单发货日志保存错误"); + } + //发货通知 + WxMaService maService = wxMaConfiguration.getMaService(Constants.HC_APP_ID); + R userOpenId = userService.getUserOpenId(comShopOrderDO.getUserId()); + if (R.isOk(userOpenId)) { + String openid = userOpenId.getData().toString(); + try { + WxUtil.sendDeliverGoodsNotice(openid,maService.getAccessToken(),orderShipDTO.getLogisticsCompany(),orderShipDTO.getLogisticsNo(),comShopOrderDO.getOrderNo(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm")); + } catch (WxErrorException e) { + e.printStackTrace(); + } } return R.ok("发货成功"); } @@ -710,10 +784,7 @@ 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); @@ -755,7 +826,7 @@ return R.fail("订单还未发货"); } // comShopOrderDO.setStatus(4); - comShopOrderDO.setDeliveryStatus(5); + comShopOrderDO.setDeliveryStatus(2); int updated = comShopFlowerOrderDAO.updateById(comShopOrderDO); if (updated == 1) { // 创建订单操作记录 @@ -779,53 +850,6 @@ return R.fail("操作失败!"); } - @Override - public R shopOrderExportData(ComShopOrderExportDTO comShopOrderExportDTO) { -// Page page = new Page(); -// page.setSize(10000); -// page.setCurrent(1); -// IPage<ExcelShopOrderDTO> excelShopOrderDTO = comShopOrderDAO.selectOrderExport(page, comShopOrderExportDTO); - return R.ok(); - } - - @Override - public R shopOrderFundsExportData(ComShopFundsExportDTO comShopFundsExportDTO) { -// Page page = new Page(); -// page.setSize(10000); -// page.setCurrent(1); -// IPage<ExcelShopFundsDTO> excelShopFundsDTO = comShopOrderDAO.selectFundsExport(page, comShopFundsExportDTO); - return R.ok(null); - } - - @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(); - } - - @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<ComShopFundsOrderVO> comShopFundsOrderVOIPage = - comShopOrderDAO.pageShopFunds(page, pageComShopFundsSearchDTO);*/ - return R.ok(); - } @Override public R pageShopOrder(PageComShopOrderSearchDTO pageComShopOrderSearchDTO) { @@ -844,15 +868,6 @@ IPage<ComShopOrderSearchVO> 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(); } /** @@ -877,7 +892,12 @@ log.error("未查询到支付订单,订单回调失败,订单号:" + wxPayNotifyOrderDTO.getOrderTradeNo()); return; } - shopOrderDO.setStatus(ComShopFlowerOrderDO.status.ddps); + if (ComShopFlowerOrderDO.deliveryType.store == shopOrderDO.getDeliveryType()) { + shopOrderDO.setStatus(ComShopFlowerOrderDO.status.ddps); + } else { + shopOrderDO.setStatus(ComShopFlowerOrderDO.status.dfh); + } + shopOrderDO.setPayType(ComShopFlowerOrderDO.payType.wx); shopOrderDO.setPayStatus(ComShopFlowerOrderDO.payStatus.yes); shopOrderDO.setPayAmount(BigDecimal.valueOf(Double.valueOf(wxPayNotifyOrderDTO.getCashFee()) / 100)); @@ -890,6 +910,9 @@ List<ComShopFlowerOrderGoodsDO> orderGoodsList = comShopFlowerOrderGoodsDAO.selectList(new QueryWrapper<ComShopFlowerOrderGoodsDO>().lambda() .eq(ComShopFlowerOrderGoodsDO::getOrderNo, shopOrderDO.getOrderNo())); + + ConvenientMerchantDO storeDO = convenientMerchantDAO.selectById(shopOrderDO.getStoreId()); + if (!orderGoodsList.isEmpty()) { int goodsNub = 0; for (ComShopFlowerOrderGoodsDO orderGood : orderGoodsList) { @@ -912,7 +935,6 @@ } // 更新店铺销量以及销售额 - ConvenientMerchantDO storeDO = convenientMerchantDAO.selectById(shopOrderDO.getStoreId()); if (storeDO != null) { storeDO.setSale(storeDO.getSale() + goodsNub); storeDO.setSaleVolume(storeDO.getSaleVolume().add(shopOrderDO.getTotalAmount())); @@ -942,6 +964,21 @@ orderPayDO.setOrderId(shopOrderDO.getId()); orderPayDO.setPayType(ComShopFlowerOrderPayDO.payType.zf); comShopFlowerOrderPayDAO.insert(orderPayDO); + if (nonNull(storeDO)){ + WxMaService maService = wxMaConfiguration.getMaService(Constants.HC_APP_ID); + R sysUserVOR = userService.getSysUserVOByPhone(storeDO.getMobilePhone()); + if (R.isOk(sysUserVOR)) { + SysUserVO sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(sysUserVOR.getData()), SysUserVO.class); + try { + WxUtil.sendNewOrderNotice(sysUserVO.getOpenid(),maService.getAccessToken(),shopOrderDO.getOrderNo(), + shopOrderDO.getDeliveryType()==1?"拼单订单":"快递订单",orderGoodsList.get(0).getGoodsName(), + shopOrderDO.getTotalAmount().toString(),DateUtil.format(shopOrderDO.getCreateAt(),"yyyy-MM-dd HH:mm")); + } catch (WxErrorException e) { + e.printStackTrace(); + } + } + } + } /** @@ -950,6 +987,8 @@ * @param orderPayDTO 请求参数 * @return 支付对象 */ + @Override + @Transactional(rollbackFor = Exception.class) public R wxPay(OrderPayDTO orderPayDTO) { // 创建返回参数 ComShopFlowerOrderVO shopOrderVO = new ComShopFlowerOrderVO(); @@ -980,71 +1019,201 @@ @Override public R pageOrderByStoreId(PageComFlowerOrderListDTO pageComFlowerOrderListDTO) { - Page page = new Page(pageComFlowerOrderListDTO.getPageNum(), pageComFlowerOrderListDTO.getPageSize()); + IPage<ComShopFlowerOrderStoreListVO> orderPageVOIPage = this.baseMapper.pageOrderByStoreId(page, pageComFlowerOrderListDTO); + if (!orderPageVOIPage.getRecords().isEmpty()) { + orderPageVOIPage.getRecords().forEach(orderVo -> { + if (null != orderVo.getPointId()) { + ConvenientElevatingPointDO convenientElevatingPointDO = convenientElevatingPointDAO.selectById(orderVo.getPointId()); + ConvenientElevatingPointVO convenientElevatingPointVO = new ConvenientElevatingPointVO(); + BeanUtils.copyProperties(convenientElevatingPointDO, convenientElevatingPointVO); + orderVo.setConvenientElevatingPointVO(convenientElevatingPointVO); - IPage<ComShopFlowerOrderStoreListVO> ipage = this.baseMapper.pageOrderByStoreId(page, pageComFlowerOrderListDTO); - return R.ok(ipage); + } + }); + } + return R.ok(orderPageVOIPage); } @Override - public R selectCountByDeliveryType(Integer deliveryType,Long storeId) { - //1.等待配送 2.配送中 3.待收货 4.待评价 5.已完成 6.已取消 7.已退款 8.总订单 - String[] statusStr = {"ddps","psz","dsh","dpj","ywc","yqx","ytk"}; - List<ComShopOrderCountVO> comShopOrderCountVOS = this.baseMapper.selectCountByDeliveryType(deliveryType,storeId); + public R selectCountByDeliveryType(Integer deliveryType, Long userId) { + //1.等待配送 2.配送中 3.待收货 4.待评价 5.已完成 6.已取消 7.已退款 8.待发货 + String[] statusStr = {"ddps", "psz", "dsh", "dpj", "ywc", "yqx", "ytk", "dfh"}; + ConvenientMerchantVO convenientMerchantVO = convenientMerchantDAO.selectMerchantByUserId(userId); + List<ComShopOrderCountVO> comShopOrderCountVOS = this.baseMapper.selectCountByDeliveryType(deliveryType, convenientMerchantVO.getId()); Map<Integer, Integer> collect = comShopOrderCountVOS.stream().collect(Collectors.toMap(ComShopOrderCountVO::getStatus, ComShopOrderCountVO::getAmount)); - Map<String,Integer> retMap = new HashMap<>(); + Map<String, Integer> retMap = new HashMap<>(); int amountTotal = 0; for (int i = 0; i < statusStr.length; i++) { - if (collect.containsKey(i)) { - Integer amount = collect.get(i); + if (collect.containsKey(i+1)) { + Integer amount = collect.get(i+1); amountTotal = amountTotal + amount; - retMap.put(statusStr[i],amount); - }else { - retMap.put(statusStr[i],0); + retMap.put(statusStr[i], amount); + } else { + retMap.put(statusStr[i], 0); } } - retMap.put("zdd",amountTotal); + retMap.put("zdd", amountTotal); return R.ok(retMap); } @Override - public R selectCountByStoreId(Long storeId){ - Map<String,Object> retMap = new HashMap<>(); + public R selectCountByUserId(Long userId) { + ConvenientMerchantVO convenientMerchantVO = convenientMerchantDAO.selectMerchantByUserId(userId); + Long storeId = convenientMerchantVO.getId(); + Map<String, Object> retMap = new HashMap<>(); //查询我的店铺订单量 List<ComShopOrderStoreIdCountVO> comShopOrderStoreIdCountVOS = this.baseMapper.selectCountByStoreId(storeId, null); - Map<String, Integer> zddlMap = comShopOrderStoreIdCountVOS.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCount)); - retMap.put("zddl",zddlMap); + Map<String, Integer> zddlMap = comShopOrderStoreIdCountVOS.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCountNum)); + retMap.put("zddl", zddlMap); //查询我的店铺拼单订单 List<ComShopOrderStoreIdCountVO> comShopOrderStoreIdCountVOS1 = this.baseMapper.selectCountByStoreId(storeId, ComShopFlowerOrderDO.deliveryType.store); - Map<String, Integer> pdddMap = comShopOrderStoreIdCountVOS1.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCount)); - retMap.put("pddd",pdddMap); + Map<String, Integer> pdddMap = comShopOrderStoreIdCountVOS1.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCountNum)); + retMap.put("pddd", pdddMap); //查询我的店铺快递订单 List<ComShopOrderStoreIdCountVO> comShopOrderStoreIdCountVOS2 = this.baseMapper.selectCountByStoreId(storeId, ComShopFlowerOrderDO.deliveryType.express); - Map<String, Integer> kdddMap = comShopOrderStoreIdCountVOS2.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCount)); - retMap.put("kddd",kdddMap); + Map<String, Integer> kdddMap = comShopOrderStoreIdCountVOS2.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCountNum)); + retMap.put("kddd", kdddMap); //拼单订单各状态 - R r = this.selectCountByDeliveryType(ComShopFlowerOrderDO.deliveryType.store,storeId); - retMap.put("pdddStatus",r.getData()); + R r = this.selectCountByDeliveryType(ComShopFlowerOrderDO.deliveryType.store, userId); + retMap.put("pdddStatus", r.getData()); //快递订单各状态 - R r1 = this.selectCountByDeliveryType(ComShopFlowerOrderDO.deliveryType.express,storeId); - retMap.put("kdddStatus",r1.getData()); + R r1 = this.selectCountByDeliveryType(ComShopFlowerOrderDO.deliveryType.express, userId); + retMap.put("kdddStatus", r1.getData()); //营业额 - List<ComShopOrderStoreIdCountVO> comShopOrderStoreIdCountVOS3 = this.baseMapper.selectSumAmountByStoreId(storeId); - Map<String, Integer> yyeMap = comShopOrderStoreIdCountVOS3.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCount)); - retMap.put("yye",yyeMap); + List<ComShopOrderStoreIdNumVO> comShopOrderStoreIdCountVOS3 = this.baseMapper.selectSumAmountByStoreId(storeId); + Map<String, BigDecimal> yyeMap = comShopOrderStoreIdCountVOS3.stream().collect(Collectors.toMap(ComShopOrderStoreIdNumVO::getCountName, ComShopOrderStoreIdNumVO::getCountNum)); + retMap.put("yye", yyeMap); //在售商品 Integer countSale = comShopFlowerGoodsDAO.selectCountSaleByStoreId(storeId); - retMap.put("countSale",countSale); + retMap.put("countSale", countSale); //退款申请 Integer refundOrder = comShopFlowerRefundOrderDAO.selectCountByStoreId(storeId); - retMap.put("refundOrder",refundOrder); - + retMap.put("refundOrder", refundOrder); return R.ok(retMap); } + /** + * 获取商家的营业额和可结算金额 + * + * @param storeId + * @return + */ + @Override + public R getQuota(Long storeId) { + //营业额 + BigDecimal turnover = this.baseMapper.selectTurnover(storeId); + //可结算 + BigDecimal settlement = this.baseMapper.selectSettlement(storeId); + + Map<String, Object> retMap = new HashMap<>(); + retMap.put("turnover", turnover); + retMap.put("settlement", settlement); + return R.ok(retMap); + + } + + + @Override + public R selectSumOrderAndAmountByStoreId(Long storeId) { + List<ComShopOrderStoreIdNumVO> comShopOrderStoreIdCountVOS = this.baseMapper.selectSumOrderAndAmountByStoreId(storeId); + Map<String, Object> retMap = comShopOrderStoreIdCountVOS.stream().collect(Collectors.toMap(ComShopOrderStoreIdNumVO::getCountName, ComShopOrderStoreIdNumVO::getCountNum)); + return R.ok(retMap); + } + + public R selectOrderLineChart(Long storeId, Integer type, Integer tab) { + if (tab == 1) { + if (1 == type) { + //近15天的订单量 + int days = 15; + return getCountByStoreIdAndDays(storeId, days); + } else if (2 == type) { + //近30天的订单量 + int days = 30; + return getCountByStoreIdAndDays(storeId, days); + } else { + //今年所有月份订单量 + List<ComShopOrderStoreIdCountVO> comShopOrderStoreIdCountVOS = this.baseMapper.selectCountOrderMonthByStoreId(storeId); + Map<String, Integer> retMap = comShopOrderStoreIdCountVOS.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCountNum)); + List<String> yearMonths = DateUtils.getYearMonths(); + for (String yearMonth : yearMonths) { + if (!retMap.containsKey(yearMonth)) { + retMap.put(yearMonth, 0); + } + } + return R.ok(retMap); + } + } else if (2 == tab) { + if (1 == type) { + //近15天的营收 + int days = 15; + return getSumByStoreIdAndDays(storeId, days); + } else if (2 == type) { + //近30天的营收 + int days = 30; + return getSumByStoreIdAndDays(storeId, days); + } else { + //今年所有月份订单量 + List<ComShopOrderStoreIdNumVO> comShopOrderStoreIdCountVOS = this.baseMapper.selectOrderSumMonthByStoreId(storeId); + Map<String, BigDecimal> retMap = comShopOrderStoreIdCountVOS.stream().collect(Collectors.toMap(ComShopOrderStoreIdNumVO::getCountName, ComShopOrderStoreIdNumVO::getCountNum)); + List<String> yearMonths = DateUtils.getYearMonths(); + for (String yearMonth : yearMonths) { + if (!retMap.containsKey(yearMonth)) { + retMap.put(yearMonth, BigDecimal.ZERO); + } + } + return R.ok(retMap); + } + } + return R.ok(); + + } + + private R getCountByStoreIdAndDays(Long storeId, int days) { + List<ComShopOrderStoreIdCountVO> comShopOrderStoreIdCountVOS = this.baseMapper.selectCountOrderDayByStoreId(storeId, days); + Map<String, Integer> retMap = comShopOrderStoreIdCountVOS.stream().collect(Collectors.toMap(ComShopOrderStoreIdCountVO::getCountName, ComShopOrderStoreIdCountVO::getCountNum)); + List<String> beforeDays = DateUtils.getBeforeDays(days); + for (String beforeDay : beforeDays) { + if (!retMap.containsKey(beforeDay)) { + retMap.put(beforeDay, 0); + } + } + return R.ok(retMap); + } + + private R getSumByStoreIdAndDays(Long storeId, int days) { + List<ComShopOrderStoreIdNumVO> comShopOrderStoreIdNumVOS = this.baseMapper.selectOrderSumPayDayByStoreId(storeId, days); + Map<String, BigDecimal> retMap = comShopOrderStoreIdNumVOS.stream().collect(Collectors.toMap(ComShopOrderStoreIdNumVO::getCountName, ComShopOrderStoreIdNumVO::getCountNum)); + List<String> beforeDays = DateUtils.getBeforeDays(days); + for (String beforeDay : beforeDays) { + if (!retMap.containsKey(beforeDay)) { + retMap.put(beforeDay, BigDecimal.ZERO); + } + } + return R.ok(retMap); + } + + @Override + public R pageOrderByDeliveryNo(PageComFlowerOrderListDTO pageComFlowerOrderListDTO) { + Page page = new Page(pageComFlowerOrderListDTO.getPageNum(), pageComFlowerOrderListDTO.getPageSize()); + IPage<ComShopFlowerOrderStoreListVO> orderPageVOIPage = this.baseMapper.pageOrderByDeliveryNo(page, pageComFlowerOrderListDTO); + ComShopFlowerOrderDeliveryNoListVO comShopFlowerOrderDeliveryNoListVO = new ComShopFlowerOrderDeliveryNoListVO(); + ComShopFlowerOrderDeliveryDO comShopFlowerOrderDeliveryDO = comShopFlowerOrderDeliveryDAO.selectById(pageComFlowerOrderListDTO.getDeliveryId()); + ComShopFlowerOrderDeliveryVO comShopFlowerOrderDeliveryVO = new ComShopFlowerOrderDeliveryVO(); + BeanUtils.copyProperties(comShopFlowerOrderDeliveryDO, comShopFlowerOrderDeliveryVO); + + Long pointId = comShopFlowerOrderDeliveryDO.getPointId(); + ConvenientElevatingPointDO convenientElevatingPointDO = convenientElevatingPointDAO.selectById(pointId); + ConvenientElevatingPointVO convenientElevatingPointVO = new ConvenientElevatingPointVO(); + BeanUtils.copyProperties(convenientElevatingPointDO, convenientElevatingPointVO); + comShopFlowerOrderDeliveryVO.setConvenientElevatingPointVO(convenientElevatingPointVO); + comShopFlowerOrderDeliveryNoListVO.setComShopFlowerOrderDeliveryVO(comShopFlowerOrderDeliveryVO); + comShopFlowerOrderDeliveryNoListVO.setPage(orderPageVOIPage); + return R.ok(comShopFlowerOrderDeliveryNoListVO); + } + } -- Gitblit v1.7.1