From b30e1a48f2bc5f65a0efd2e69e090fed2d7a627c Mon Sep 17 00:00:00 2001 From: yanghui <2536613402@qq.com> Date: 星期四, 17 十一月 2022 15:56:43 +0800 Subject: [PATCH] #feat 订单退款和查询 --- springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopFlowerOrderServiceImpl.java | 186 +++++++++++++++++++++++++++++---------------- 1 files changed, 119 insertions(+), 67 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 95fe246..b79f608 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,5 +1,6 @@ package com.panzhihua.service_community.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -14,6 +15,7 @@ import com.panzhihua.common.utlis.OrderNoUtils; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.common.utlis.WxPayUtils; +import com.panzhihua.common.utlis.wx.WXPayUtil; import com.panzhihua.service_community.dao.*; import com.panzhihua.service_community.model.dos.*; import com.panzhihua.service_community.service.ComShopFlowerOrderService; @@ -26,10 +28,8 @@ 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 java.util.*; +import java.util.stream.Collectors; import static java.util.Objects.nonNull; @@ -41,7 +41,7 @@ @Slf4j @Service public class ComShopFlowerOrderServiceImpl extends ServiceImpl<ComShopFlowerOrderDAO, ComShopFlowerOrderDO> - implements ComShopFlowerOrderService { + implements ComShopFlowerOrderService { @Resource private ComShopFlowerGoodsDAO comShopFlowerGoodsDAO; @@ -67,22 +67,21 @@ private ComShopFlowerEvaluateDAO comShopFlowerEvaluateDAO; - @Value("${hc_min.app.isTest}") + @Value("${hcMin.app.isTest}") private Boolean isTest; - @Value("${hc_min.app.appid}") + @Value("${hcMin.app.appid}") private String appid; - @Value("${hc_min.app.payKey}") + @Value("${hcMin.app.payKey}") private String payKey; - @Value("${hc_min.app.mchId}") + @Value("${hcMin.app.mchId}") private String mchId; - @Value("${hc_min.app.notifyUrl}") + @Value("${hcMin.app.notifyUrl}") private String notifyUrl; /** * 订单预览 * - * @param orderPreviewDTO - * 请求参数 + * @param orderPreviewDTO 请求参数 * @return 订单预览数据 */ @Override @@ -99,8 +98,8 @@ if (orderPreviewDTO.getSubmitType().equals(ComShopOrderPreviewDTO.submitType.details)) {// 详情页提交 // 查询商品信息 ComShopFlowerGoodsDO goodsDO = - comShopFlowerGoodsDAO.selectOne(new QueryWrapper<ComShopFlowerGoodsDO>().eq("id", orderPreviewDTO.getGoodsId()) - .eq("status", ComShopGoodsDO.status.sell).eq("delete_status", ComShopGoodsDO.deleteStatus.no)); + comShopFlowerGoodsDAO.selectOne(new QueryWrapper<ComShopFlowerGoodsDO>().eq("id", orderPreviewDTO.getGoodsId()) + .eq("status", ComShopGoodsDO.status.sell).eq("delete_status", ComShopGoodsDO.deleteStatus.no)); if (goodsDO == null) { return R.fail("商品已下架或已删除"); } @@ -112,7 +111,7 @@ if (goodsAttrDO == null) { return R.fail("商品规格不存在"); } - if (goodsAttrDO.getSale() < orderPreviewDTO.getBuyNum()){ + if (goodsAttrDO.getSale() < orderPreviewDTO.getBuyNum()) { return R.fail("该规格库存不足,无法下单"); } @@ -168,8 +167,8 @@ // 查询默认收货地址 ComShopFlowerUserAddressDO userDefaultAddressDO = - comShopFlowerUserAddressDAO.selectOne(new QueryWrapper<ComShopFlowerUserAddressDO>().eq("delete_status", 2) - .eq("user_id", orderPreviewDTO.getUserId()).eq("is_default", ComShopUserAddressDO.isDefault.yes)); + comShopFlowerUserAddressDAO.selectOne(new QueryWrapper<ComShopFlowerUserAddressDO>().eq("delete_status", 2) + .eq("user_id", orderPreviewDTO.getUserId()).eq("is_default", ComShopUserAddressDO.isDefault.yes)); // 查询用户收货地址中的默认地址 if (userDefaultAddressDO != null) { @@ -180,10 +179,10 @@ // 查询上次购买记录的收货地址 // 查询到用户上一笔订单 List<ComShopFlowerOrderDO> shopOrders = this.baseMapper.selectList(new QueryWrapper<ComShopFlowerOrderDO>() - .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) { ComShopFlowerUserAddressDO userAddressDO = - comShopFlowerUserAddressDAO.selectById(shopOrders.get(0).getReceiverId()); + comShopFlowerUserAddressDAO.selectById(shopOrders.get(0).getReceiverId()); if (userAddressDO != null) { ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); BeanUtils.copyProperties(userAddressDO, userAddressVO); @@ -198,8 +197,7 @@ /** * 创建订单 * - * @param orderCreateDTO - * 创建订单请求参数 + * @param orderCreateDTO 创建订单请求参数 * @return 创建结果 */ @Transactional(rollbackFor = Exception.class) @@ -228,8 +226,8 @@ for (ComShopOrderCreateGoodsDTO createGoodsDTO : orderCreateDTO.getOrderGoodsList()) { // 查询当前商品信息 ComShopFlowerGoodsDO goodsDO = - comShopFlowerGoodsDAO.selectOne(new QueryWrapper<ComShopFlowerGoodsDO>().eq("id", createGoodsDTO.getGoodsId()) - .eq("delete_status", ComShopGoodsDO.deleteStatus.no).eq("status", ComShopGoodsDO.status.sell)); + comShopFlowerGoodsDAO.selectOne(new QueryWrapper<ComShopFlowerGoodsDO>().eq("id", createGoodsDTO.getGoodsId()) + .eq("delete_status", ComShopGoodsDO.deleteStatus.no).eq("status", ComShopGoodsDO.status.sell)); if (goodsDO == null) { log.error("未查询到商品信息,商品已下架活已删除,商品id" + createGoodsDTO.getGoodsId()); continue; @@ -247,11 +245,11 @@ ComShopFlowerGoodsAttrDO goodsAttrDO = comShopFlowerGoodsAttrDAO.selectById(createGoodsDTO.getGoodsAttrId()); if (goodsAttrDO == null) { log.error( - "未查询到商品规格信息,商品id" + createGoodsDTO.getGoodsId() + "商品规格id:" + createGoodsDTO.getGoodsAttrId()); + "未查询到商品规格信息,商品id" + createGoodsDTO.getGoodsId() + "商品规格id:" + createGoodsDTO.getGoodsAttrId()); continue; } - if (goodsAttrDO.getSale() < createGoodsDTO.getNum()){ + if (goodsAttrDO.getSale() < createGoodsDTO.getNum()) { return R.fail("该规格库存不足,无法下单"); } orderGoodsDO.setGoodsAttrId(goodsAttrDO.getId()); @@ -263,7 +261,7 @@ orderGoodsDOList.add(orderGoodsDO); // 将商品金额计算到订单总金额 orderTotal = orderTotal - .add(orderGoodsDO.getGoodsAttrPrice().multiply(BigDecimal.valueOf(orderGoodsDO.getAmount()))); + .add(orderGoodsDO.getGoodsAttrPrice().multiply(BigDecimal.valueOf(orderGoodsDO.getAmount()))); } } // 如果是购物车提交,需要将购物车内商品移除 @@ -317,7 +315,7 @@ } // 调用wx支付 String xml = WxPayUtils.getUnifiedorder(appid, mchId, payKey, notifyUrl, "商品购买", orderCreateDTO.getOpenId(), - orderNo, money,null); + orderNo, money, null); log.info("微信支付返回参数:" + xml); shopOrderVO.setPayResult(xml); } catch (Exception e) { @@ -329,8 +327,7 @@ /** * 分页查询用户订单列表 * - * @param comOrderListDTO - * 请求参数 + * @param comOrderListDTO 请求参数 * @return 查询结果 */ @Override @@ -342,7 +339,7 @@ List<ComShopFlowerOrderGoodsVO> orderGoodsVOS = new ArrayList<>(); // 查询订单下商品信息 List<ComShopFlowerOrderGoodsDO> orderGoodsDOList = comShopFlowerOrderGoodsDAO - .selectList(new QueryWrapper<ComShopFlowerOrderGoodsDO>().eq("order_no", orderVo.getOrderNo())); + .selectList(new QueryWrapper<ComShopFlowerOrderGoodsDO>().eq("order_no", orderVo.getOrderNo())); if (!orderGoodsDOList.isEmpty()) { orderGoodsDOList.forEach(orderGoods -> { ComShopFlowerOrderGoodsVO orderGoodsVO = new ComShopFlowerOrderGoodsVO(); @@ -375,8 +372,7 @@ /** * 根据订单id查询订单详情 * - * @param orderId - * 订单id + * @param orderId 订单id * @return 订单详情 */ @Override @@ -402,7 +398,7 @@ List<ComShopFlowerOrderGoodsVO> orderGoodsVOS = new ArrayList<>(); // 查询订单下商品信息 List<ComShopFlowerOrderGoodsDO> orderGoodsDOList = comShopFlowerOrderGoodsDAO - .selectList(new QueryWrapper<ComShopFlowerOrderGoodsDO>().eq("order_no", shopOrderDO.getOrderNo())); + .selectList(new QueryWrapper<ComShopFlowerOrderGoodsDO>().eq("order_no", shopOrderDO.getOrderNo())); StringBuilder sbr = new StringBuilder(); if (!orderGoodsDOList.isEmpty()) { orderGoodsDOList.forEach(orderGoods -> { @@ -414,7 +410,7 @@ // 查询商品信息判断商品状态 ComShopFlowerGoodsDO goodsDO = comShopFlowerGoodsDAO.selectById(orderGoods.getGoodsId()); if (goodsDO == null || goodsDO.getDeleteStatus().equals(ComShopFlowerGoodsDO.deleteStatus.yes) - || goodsDO.getDeleteStatus().equals(ComShopFlowerGoodsDO.status.recovery)) { + || goodsDO.getDeleteStatus().equals(ComShopFlowerGoodsDO.status.recovery)) { orderGoodsVO.setGoodsStatus(ComShopFlowerOrderGoodsVO.goodsStatus.ysc); } else if (goodsDO.getStatus().equals(ComShopFlowerGoodsDO.status.lower)) { orderGoodsVO.setGoodsStatus(ComShopFlowerOrderGoodsVO.goodsStatus.yxj); @@ -428,7 +424,7 @@ orderGoodsVO.setGoodsAttr(goodsAttrDO.getGoodsAttrName()); } orderGoodsVOS.add(orderGoodsVO); - sbr.append(orderGoods.getGoodsName() + " "); + sbr.append(orderGoods.getGoodsName()).append(" "); }); } orderVO.setOrderGoodsVOList(orderGoodsVOS); @@ -444,8 +440,8 @@ // 操作日志 List<ComShopFlowerOrderOperateDO> listOperLog = - comShopFlowerOrderOperateDAO.selectList(new LambdaQueryWrapper<ComShopFlowerOrderOperateDO>() - .eq(ComShopFlowerOrderOperateDO::getOrderNo, shopOrderDO.getOrderNo())); + comShopFlowerOrderOperateDAO.selectList(new LambdaQueryWrapper<ComShopFlowerOrderOperateDO>() + .eq(ComShopFlowerOrderOperateDO::getOrderNo, shopOrderDO.getOrderNo())); List<ComShopFlowerOrderOperateVO> listOperLogVO = new ArrayList<>(listOperLog.size()); listOperLog.forEach(logDO -> { ComShopFlowerOrderOperateVO copyVO = new ComShopFlowerOrderOperateVO(); @@ -454,20 +450,19 @@ }); orderVO.setLogs(listOperLogVO); Long pointId = shopOrderDO.getPointId(); - if (null!= pointId){ + if (null != pointId) { ConvenientElevatingPointDO convenientElevatingPointDO = convenientElevatingPointDAO.selectById(pointId); ConvenientElevatingPointVO convenientElevatingPointVO = new ConvenientElevatingPointVO(); - BeanUtils.copyProperties(convenientElevatingPointVO,convenientElevatingPointDO); + BeanUtils.copyProperties(convenientElevatingPointVO, convenientElevatingPointDO); orderVO.setConvenientElevatingPointVO(convenientElevatingPointVO); } //已完成、已退款才有评论 - if (ComShopFlowerOrderDO.status.ywc == shopOrderDO.getStatus() || ComShopFlowerOrderDO.status.ytk == shopOrderDO.getStatus()){ - ComShopFlowerEvaluateVO comShopFlowerEvaluateVO = comShopFlowerEvaluateDAO.selectByOrderNo(shopOrderDO.getOrderNo()); - if (nonNull(comShopFlowerEvaluateVO)){ + if (ComShopFlowerOrderDO.status.ywc == shopOrderDO.getStatus() || ComShopFlowerOrderDO.status.ytk == shopOrderDO.getStatus()) { + ComShopFlowerEvaluateVO comShopFlowerEvaluateVO = comShopFlowerEvaluateDAO.selectByOrderNo(shopOrderDO.getOrderNo()); + if (nonNull(comShopFlowerEvaluateVO)) { orderVO.setComShopFlowerEvaluateVO(comShopFlowerEvaluateVO); } } - return R.ok(orderVO); @@ -476,8 +471,7 @@ /** * 根据订单id取消订单 * - * @param comShopOrderQueryDTO - * 订单信息 + * @param comShopOrderQueryDTO 订单信息 * @return 取消结果 */ @Transactional(rollbackFor = Exception.class) @@ -493,6 +487,45 @@ } // 取消订单 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(); + + 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); + } + comShopFlowerOrderPayDAO.insert(orderPayDO); + } + } catch (Exception e) { + log.error("申请退款失败," + e.getMessage()); + e.printStackTrace(); + } if (this.baseMapper.updateById(shopOrderDO) > 0) { // 添加订单操作记录 ComShopFlowerOrderOperateDO orderOperateDO = new ComShopFlowerOrderOperateDO(); @@ -517,8 +550,7 @@ /** * 根据订单id删除订单 * - * @param orderId - * 订单id + * @param orderId 订单id * @return 删除结果 */ @Override @@ -529,7 +561,7 @@ return R.fail("未查询到订单"); } if (!shopOrderDO.getStatus().equals(ComShopFlowerOrderDO.status.ywc) - && !shopOrderDO.getStatus().equals(ComShopFlowerOrderDO.status.yqx)) { + && !shopOrderDO.getStatus().equals(ComShopFlowerOrderDO.status.yqx)) { return R.fail("该订单状态不可删除"); } @@ -544,10 +576,8 @@ /** * 根据订单id确认收货 * - * @param orderId - * 订单id - * @param phone - * 手机号 + * @param orderId 订单id + * @param phone 手机号 * @return 确认结果 */ @Transactional(rollbackFor = Exception.class) @@ -587,8 +617,7 @@ /** * 统计用户订单数量 * - * @param userId - * 用户id + * @param userId 用户id * @return 统计结果 */ @Override @@ -623,8 +652,7 @@ /** * 订单发货 * - * @param orderShipDTO - * 订单发货信息 + * @param orderShipDTO 订单发货信息 * @return 发货结果 */ @Override @@ -827,8 +855,7 @@ /** * 微信支付订单回调 * - * @param wxPayNotifyOrderDTO - * 订单支付回调参数 + * @param wxPayNotifyOrderDTO 订单支付回调参数 */ @Transactional(rollbackFor = Exception.class) @Override @@ -842,7 +869,7 @@ log.info("微信订单支付回调开始查询订单"); // 查询订单 ComShopFlowerOrderDO shopOrderDO = this.baseMapper.selectOne(new QueryWrapper<ComShopFlowerOrderDO>().lambda() - .eq(ComShopFlowerOrderDO::getOrderNo, wxPayNotifyOrderDTO.getOrderTradeNo())); + .eq(ComShopFlowerOrderDO::getOrderNo, wxPayNotifyOrderDTO.getOrderTradeNo())); if (shopOrderDO == null) { log.error("未查询到支付订单,订单回调失败,订单号:" + wxPayNotifyOrderDTO.getOrderTradeNo()); return; @@ -853,13 +880,13 @@ shopOrderDO.setPayAmount(BigDecimal.valueOf(Double.valueOf(wxPayNotifyOrderDTO.getCashFee()) / 100)); shopOrderDO.setWxTardeNo(wxPayNotifyOrderDTO.getWxTradeNo()); shopOrderDO.setPayTime( - DateUtils.stringToDate(wxPayNotifyOrderDTO.getPayTime(), new SimpleDateFormat("yyyyMMddHHmmss"))); + DateUtils.stringToDate(wxPayNotifyOrderDTO.getPayTime(), new SimpleDateFormat("yyyyMMddHHmmss"))); this.baseMapper.updateById(shopOrderDO); // 查询订单商品 List<ComShopFlowerOrderGoodsDO> orderGoodsList = - comShopFlowerOrderGoodsDAO.selectList(new QueryWrapper<ComShopFlowerOrderGoodsDO>().lambda() - .eq(ComShopFlowerOrderGoodsDO::getOrderNo, shopOrderDO.getOrderNo())); + comShopFlowerOrderGoodsDAO.selectList(new QueryWrapper<ComShopFlowerOrderGoodsDO>().lambda() + .eq(ComShopFlowerOrderGoodsDO::getOrderNo, shopOrderDO.getOrderNo())); if (!orderGoodsList.isEmpty()) { int goodsNub = 0; for (ComShopFlowerOrderGoodsDO orderGood : orderGoodsList) { @@ -907,14 +934,17 @@ orderPayDO.setPayStatus(ComShopFlowerOrderPayDO.payStatus.yes); orderPayDO.setPayAmount(shopOrderDO.getPayAmount()); orderPayDO.setPayTime(shopOrderDO.getPayTime()); + orderPayDO.setStoreId(shopOrderDO.getStoreId()); + orderPayDO.setDeliveryType(shopOrderDO.getDeliveryType()); + orderPayDO.setOrderId(shopOrderDO.getId()); + orderPayDO.setPayType(ComShopFlowerOrderPayDO.payType.zf); comShopFlowerOrderPayDAO.insert(orderPayDO); } /** * 订单去支付 * - * @param orderPayDTO - * 请求参数 + * @param orderPayDTO 请求参数 * @return 支付对象 */ public R wxPay(OrderPayDTO orderPayDTO) { @@ -922,7 +952,7 @@ ComShopFlowerOrderVO shopOrderVO = new ComShopFlowerOrderVO(); // 查询订单 ComShopFlowerOrderDO orderDO = comShopFlowerOrderDAO.selectOne( - new QueryWrapper<ComShopFlowerOrderDO>().lambda().eq(ComShopFlowerOrderDO::getOrderNo, orderPayDTO.getOrderNo())); + new QueryWrapper<ComShopFlowerOrderDO>().lambda().eq(ComShopFlowerOrderDO::getOrderNo, orderPayDTO.getOrderNo())); if (orderDO == null) { return R.fail("订单不存在"); } @@ -933,7 +963,7 @@ } // 调用wx支付 String xml = WxPayUtils.getUnifiedorder(appid, mchId, payKey, notifyUrl, "商品购买", orderPayDTO.getOpenId(), - orderDO.getOrderNo(), money,null); + orderDO.getOrderNo(), money, null); log.info("微信支付返回参数:" + xml); shopOrderVO.setPayResult(xml); } catch (Exception e) { @@ -948,9 +978,31 @@ @Override public R pageOrderByStoreId(PageComFlowerOrderListDTO pageComFlowerOrderListDTO) { - Page page = new Page(pageComFlowerOrderListDTO.getPageNum(),pageComFlowerOrderListDTO.getPageSize()); + Page page = new Page(pageComFlowerOrderListDTO.getPageNum(), pageComFlowerOrderListDTO.getPageSize()); IPage<ComShopFlowerOrderStoreListVO> ipage = this.baseMapper.pageOrderByStoreId(page, pageComFlowerOrderListDTO); return R.ok(ipage); } + + @Override + public R selectCountByDeliveryType(Integer deliveryType) { + List<ComShopOrderCountVO> comShopOrderCountVOS = this.baseMapper.selectCountByDeliveryType(deliveryType); + Map<Integer, Integer> collect = comShopOrderCountVOS.stream().collect(Collectors.toMap(ComShopOrderCountVO::getStatus, ComShopOrderCountVO::getAmount)); + ComShopOrderCountVO comShopOrderCountVO = new ComShopOrderCountVO(); + comShopOrderCountVO.setStatus(8); + comShopOrderCountVO.setAmount(0); + for (int i = 1; i < 8; i++) { + if (collect.containsKey(i)) { + Integer amount = collect.get(i); + comShopOrderCountVO.setAmount(amount + comShopOrderCountVO.getAmount()); + }else { + collect.put(i,0); + } + } + collect.put(comShopOrderCountVO.getStatus(),comShopOrderCountVO.getAmount()); + + return R.ok(collect); + } + + } -- Gitblit v1.7.1