From bbe0a2fd03063316e50cf141986bda984599bbda Mon Sep 17 00:00:00 2001 From: 935090232@qq.com <ak473600000> Date: Tue, 22 Feb 2022 23:41:42 +0800 Subject: [PATCH] Merge branch 'developer' --- zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java | 103 +++++++++++++++++++++++++++++---------------------- 1 files changed, 59 insertions(+), 44 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java index 70bb8d6..dee24d6 100644 --- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java +++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java @@ -3,9 +3,7 @@ import cn.hutool.core.collection.CollUtil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.matrix.biz.bean.BizUser; -import com.matrix.component.rabbitmq.RabiitMqTemplate; -import com.matrix.component.redis.RedisUserLoginUtils; +import com.matrix.system.common.init.UserCacheManager; import com.matrix.component.tools.WxUtils; import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData; import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil; @@ -17,7 +15,9 @@ import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.common.dao.CustomerDataDictionaryDao; import com.matrix.system.common.interceptor.HostInterceptor; +import com.matrix.system.hive.bean.SysVipInfo; import com.matrix.system.hive.dao.ShoppingGoodsDao; +import com.matrix.system.hive.dao.SysVipInfoDao; import com.matrix.system.score.dao.ScoreVipDetailDao; import com.matrix.system.shopXcx.api.action.PayThreadPool; import com.matrix.system.shopXcx.api.pojo.OrderCouponGroup; @@ -28,7 +28,6 @@ import com.matrix.system.shopXcx.api.service.ShoppingCartService; import com.matrix.system.shopXcx.api.service.WXShopOrderService; import com.matrix.system.shopXcx.api.service.WxShopCouponService; -import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil; import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil; import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO; import com.matrix.system.shopXcx.bean.*; @@ -54,9 +53,7 @@ @Autowired private WxShopOrderUtil wxShopOrderUtil; @Autowired - private WxShopCouponUtil wxShopCouponUtil; - @Autowired - private RedisUserLoginUtils redisUserLoginUtils; + private UserCacheManager userCacheManager; @Autowired private WeixinServiceUtil weixinServiceUtil; @Autowired @@ -67,8 +64,6 @@ private ShopOrderDao shopOrderDao; @Autowired private ShopOrderDetailsDao shopOrderDetailsDao; - @Autowired - private ShopCouponDao shopCouponDao; @Autowired private ShopProductDao shopProductDao; @Autowired @@ -104,6 +99,9 @@ @Autowired private ScoreVipDetailDao scoreVipDetailDao; + + @Autowired + private SysVipInfoDao sysVipInfoDao; @Override public BigDecimal calculationPostage(BigDecimal payPrice, Long companyId) { BigDecimal postage = BigDecimal.ZERO; @@ -127,41 +125,50 @@ */ @Transactional(rollbackFor = Exception.class) @Override - public AjaxResult createShopOrder(ShopOrderDto shopOrderDto) throws Exception { - BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); + public ShopOrder createShopOrder(ShopOrderDto shopOrderDto) throws Exception { + SysVipInfo sysVipInfo = userCacheManager.getLoginUser(); - //校验收货地址 + ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(shopOrderDto.getReceiveAddrId()); - if (shopReceiveAddress == null) { - return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择正确的收获地址"); - } + //计算订单优惠信息 AjaxResult caculateResult= buildDiscountExplain(shopOrderDto); DiscountExplain discountExplain= (DiscountExplain) caculateResult.getMapInfo().get("discountExplain"); - if(discountExplain.getScorePay()!=null){ //校验用户积分是否够用 - int score=scoreVipDetailDao.selectUserTotalScore(bizUser.getOpenId(),null); + int score=scoreVipDetailDao.selectUserTotalScore(sysVipInfo.getId()); if(score<discountExplain.getScorePay()){ - return AjaxResult.buildFailInstance("积分不足"); + throw new GlobleException("积分不足"); } } + ShopOrder shopOrder = new ShopOrder(); - shopOrder.setCompanyId(bizUser.getCompanyId()); + shopOrder.setCompanyId(sysVipInfo.getCompanyId()); shopOrder.setStoreId(Integer.parseInt(shopOrderDto.getShopId().toString())); //默认设置为产品类型 shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS); List<ShopOrderDetails> details = new ArrayList<>(); + // 是否包含实物商品 + boolean hasRealGoods = false; + Integer orderCount = 0; for (OrderItemDto orderItemDto : shopOrderDto.getOrderItemList()) { ShopOrderDetails shopOrderDetails = new ShopOrderDetails(); shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER); shopOrderDetails.setUpdateBy(AppConstance.SYSTEM_USER); shopOrderDetails.setpId(orderItemDto.getProductId()); + + if (!hasRealGoods) { + ShopProduct shopProduct = shopProductDao.selectById(orderItemDto.getProductId()); + if (shopProduct.getIsUnrealProduct() == 2) { + hasRealGoods = true; + } + } + shopOrderDetails.setsId(orderItemDto.getSkuId()); shopOrderDetails.setCount(orderItemDto.getCount()); if(ShopOrderDetails.PAYTYPE_MICRO==orderItemDto.getPayType()){ @@ -189,18 +196,23 @@ } //校验商品是否限购 - wxShopOrderUtil.verifyProductLimitInfo(details, bizUser.getOpenId()); + wxShopOrderUtil.verifyProductLimitInfo(details, sysVipInfo.getOpenId()); //TODO 更新库存和销量 更新库存和销量[考虑和erp库存联动] wxShopOrderUtil.updateProductAndSkuInfo(details); //用户openId - shopOrder.setUserId(bizUser.getOpenId()); + shopOrder.setUserId(sysVipInfo.getId()); shopOrder.setCreateBy("微信小程序生成"); shopOrder.setUpdateBy("微信小程序生成"); + shopOrder.setPayMethod(shopOrderDto.getPayMethod()); shopOrder.setCommodityPrice(discountExplain.getBillPrice()); shopOrder.setPurchaseQuantity(orderCount); shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS); //购买方式 shopOrder.setShippingMethod(shopOrderDto.getDeliverySelect()); + // 客户选择的物流配送,且没有实物产品(全是虚拟产品), 则直接门店自提,无需填写配送单 + if (ShopOrder.SHIPPING_METHOD_WL == shopOrderDto.getDeliverySelect() && !hasRealGoods) { + shopOrder.setShippingMethod(ShopOrder.SHIPPING_METHOD_MDZT); + } //生成订单号 shopOrder.setOrderNo(WxUtils.getOrderNum()); //设置支付状态 @@ -252,11 +264,8 @@ - BrandWCPayRequestData payData = startPayment(shopOrder); - AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(payData)); - result.putInMap("orderId", shopOrder.getId()); - return result; + return shopOrder; } @Override @@ -277,7 +286,7 @@ //支付总积分 Integer scoreCount=0; - BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); + SysVipInfo sysVipInfo = userCacheManager.getLoginUser(); //计算购物车中物品的优惠信息 List<OrderItemDto> orderItemDtos = shopOrderDto.getOrderItemList() @@ -323,9 +332,9 @@ List<CouponReceiveInfoVO> usefulCoupon = new ArrayList<>(); CouponReceiveInfoVO shopCoupon = new CouponReceiveInfoVO(); //满足店铺活动的订单不能使用优惠券 - if (conditionsGroupCount > 0) { + if (conditionsGroupCount <= 0) { //计算可用优惠券 - usefulCoupon = wxShopCouponService.getCartVoCouponList(bizUser.getCompanyId(), orderItemDtos); + usefulCoupon = wxShopCouponService.getCartVoCouponList(sysVipInfo.getCompanyId(), orderItemDtos); //获取用户使用的优惠券 if (shopOrderDto.getCouponReceiveId() == null) { //如果用户没有选择优惠券则默认选优惠金额最高的 @@ -351,9 +360,11 @@ //计算运费 - discountExplain.setPostage(calculationPostage(discountExplain.getPayPrice(), HostInterceptor.getCompanyId())); - - + if(ShopOrder.SHIPPING_METHOD_WL==shopOrderDto.getDeliverySelect()){ + discountExplain.setPostage(calculationPostage(billPrice, HostInterceptor.getCompanyId())); + }else{ + discountExplain.setPostage(BigDecimal.ZERO); + } //账单总金额 discountExplain.setBillPrice(billPrice.add(discountExplain.getPostage())); @@ -388,16 +399,20 @@ @Override public AjaxResult orderSettlement(int orderId) throws Exception { ShopOrder shopOrder = shopOrderDao.selectById(orderId); + if (shopOrder == null) { - throw new GlobleException("订单不存在!"); + return AjaxResult.buildFailInstance("订单不存在!"); + } + if (ShopOrder.SHOP_ORDER_PAY_METHOD_WX != shopOrder.getPayMethod()) { + return AjaxResult.buildFailInstance("支付方式错误"); } if (!shopOrder.getPayResult().equals(ShopOrder.ORDER_PAY_STATUS_WAIT)) { - throw new GlobleException("该订单不是待支付状态!"); + return AjaxResult.buildFailInstance("该订单不是待支付状态!"); } if(shopOrder.getScorePay()!=null){ //校验用户积分是否够用 - int score=scoreVipDetailDao.selectUserTotalScore(shopOrder.getUserId(),null); + int score=scoreVipDetailDao.selectUserTotalScore(shopOrder.getUserId()); if(score<shopOrder.getScorePay()){ return AjaxResult.buildFailInstance("积分不足"); } @@ -422,13 +437,15 @@ BigDecimal money = new BigDecimal(shopOrder.getOrderMoney().toString()); BrandWCPayRequestData payData; String productNames = wxShopOrderUtil.getProductNames(shopOrder.getUserId(), shopOrder.getId()); + SysVipInfo vipInfo=sysVipInfoDao.selectById(shopOrder.getUserId()); + LogUtil.debug(String.valueOf(isDebug)); if (isDebug) { payData = weixinServiceUtil.createOrder("[测试]" + productNames, shopOrder.getOrderNo(), - 1, shopOrder.getUserId(), String.valueOf(shopOrder.getId())); + 1, vipInfo.getOpenId(), String.valueOf(shopOrder.getId())); } else { payData = weixinServiceUtil.createOrder(productNames, shopOrder.getOrderNo(), - unit.multiply(money).intValue(), shopOrder.getUserId(), String.valueOf(shopOrder.getId())); + unit.multiply(money).intValue(),vipInfo.getOpenId(), String.valueOf(shopOrder.getId())); } ShopOrder updateParam = new ShopOrder(); updateParam.setId(shopOrder.getId()); @@ -445,12 +462,12 @@ */ @Override public AjaxResult getMyOrderInfo(OrderInfoQueryPOJO orderInfoQueryPOJO) { - BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); + SysVipInfo sysVipInfo = userCacheManager.getLoginUser(); orderInfoQueryPOJO.setSort("update_time"); if (orderInfoQueryPOJO.getOffset() >= 1) { orderInfoQueryPOJO.setOffset((orderInfoQueryPOJO.getOffset() - 1) * orderInfoQueryPOJO.getLimit()); } - List<ShopOrder> result = shopOrderDao.selectMyOrderByStatus(bizUser.getOpenId(), orderInfoQueryPOJO); + List<ShopOrder> result = shopOrderDao.selectMyOrderByStatus(sysVipInfo.getId(), orderInfoQueryPOJO); return new AjaxResult(AjaxResult.STATUS_SUCCESS, result); } @@ -462,8 +479,8 @@ */ @Override public AjaxResult getOrderInfoById(Integer orderId) { - BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); - ShopOrder shopOrder = shopOrderDao.selectOrderInfoById(bizUser.getOpenId(), orderId); + SysVipInfo sysVipInfo = userCacheManager.getLoginUser(); + ShopOrder shopOrder = shopOrderDao.selectOrderInfoById(sysVipInfo.getId(), orderId); return new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(shopOrder)); } @@ -484,8 +501,8 @@ } if (shopOrder.getDiscountAmount() != null && shopOrder.getDiscountAmount().compareTo(BigDecimal.ZERO) > 0) { ShopCouponRecord shopCouponRecord = new ShopCouponRecord(); - BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); - shopCouponRecord.setUserId(bizUser.getOpenId()); + SysVipInfo sysVipInfo = userCacheManager.getLoginUser(); + shopCouponRecord.setUserId(sysVipInfo.getId()); shopCouponRecord.setOrderId(orderId); List<ShopCouponRecord> recordList = shopCouponRecordDao.selectByModel(shopCouponRecord); if (CollectionUtils.isNotEmpty(recordList)) { @@ -610,8 +627,6 @@ * @param orderId * @return */ - @Autowired - RabiitMqTemplate rabiitMqTemplate; @Override public AjaxResult findOrderPayStatus(Integer orderId) { -- Gitblit v1.9.1