| | |
| | | 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.Date; |
| | | import java.util.List; |
| | |
| | | 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 R orderCreate(ComShopOrderCreateDTO orderCreateDTO){ |
| | | //创建返回参数 |
| | | ComShopOrderVO shopOrderVO = new ComShopOrderVO(); |
| | | |
| | | //查询用户收货地址 |
| | | ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(orderCreateDTO.getReceiverId()); |
| | | if(userAddressDO == null){ |
| | |
| | | String orderNo = OrderNoUtils.NextOrderNo(userId); |
| | | //配送方式 |
| | | Integer deliveryType = 0; |
| | | |
| | | //订单总金额 |
| | | BigDecimal orderTotal = BigDecimal.ZERO; |
| | | |
| | | //创建订单商品信息 |
| | | List<ComShopOrderGoodsDO> orderGoodsDOList = new ArrayList<>(); |
| | | if(!orderCreateDTO.getOrderGoodsList().isEmpty()){ |
| | |
| | | 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.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.setOperationBy("用户"); |
| | | } |
| | | comShopOrderOperateDAO.insert(orderOperateDO); |
| | | |
| | | shopOrderVO.setOrderNo(orderNo); |
| | | shopOrderVO.setOrderTotal(orderTotal); |
| | | |
| | | try { |
| | | BigDecimal money = orderTotal; |
| | | if(isTest){ |
| | | money = BigDecimal.valueOf(0.01); |
| | | } |
| | | //调用wx支付 |
| | | String xml = WxPayUtils.getUnifiedorder("",orderCreateDTO.getOpenId(),orderNo,orderTotal); |
| | | String xml = WxPayUtils.getUnifiedorder(appid,mchId,payKey,notifyUrl,"商品购买",orderCreateDTO.getOpenId(),orderNo,money); |
| | | log.info("微信支付返回参数:" + xml); |
| | | shopOrderVO.setPayResult(xml); |
| | | }catch (Exception e){ |
| | | log.error("调用微信支付异常,异常原因:" + e.getMessage()); |
| | | } |
| | |
| | | return R.ok(ipage); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | | public R capitalDetailByStore(Long id) { |
| | | if(id==null){ |
| | |
| | | CapitalDetailVO vo = this.baseMapper.capitalDetailByStore(id); |
| | | return R.ok(vo); |
| | | } |
| | | |
| | | /** |
| | | * 微信支付订单回调 |
| | | * @param wxPayNotifyOrderDTO 订单支付回调参数 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void wxOrderPayNotify(WxPayNotifyOrderDTO wxPayNotifyOrderDTO){ |
| | | if(StringUtils.isEmpty(wxPayNotifyOrderDTO.getOrderTradeNo())){ |
| | | log.error("微信支付回调失败,订单号为空"); |
| | | return; |
| | | } |
| | | |
| | | //查询订单 |
| | | ComShopOrderDO shopOrderDO = this.baseMapper.selectOne(new QueryWrapper<ComShopOrderDO>().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(Integer.parseInt(wxPayNotifyOrderDTO.getCashFee()) * 100)); |
| | | shopOrderDO.setWxTardeNo(wxPayNotifyOrderDTO.getWxTradeNo()); |
| | | shopOrderDO.setPayTime(new Date(Long.parseLong(wxPayNotifyOrderDTO.getPayTime()))); |
| | | this.baseMapper.updateById(shopOrderDO); |
| | | |
| | | //查询订单商品 |
| | | List<ComShopOrderGoodsDO> orderGoodsList = comShopOrderGoodsDAO.selectList(new QueryWrapper<ComShopOrderGoodsDO>().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<ComShopOrderDO>().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); |
| | | log.info("微信支付返回参数:" + xml); |
| | | shopOrderVO.setPayResult(xml); |
| | | }catch (Exception e){ |
| | | log.error("调用微信支付异常,异常原因:" + e.getMessage()); |
| | | } |
| | | return R.ok(shopOrderVO); |
| | | } |
| | | } |