jyy
2021-04-08 31d69134d1bcaac9c50b6a57784aeb436d5bd75c
zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
@@ -3,7 +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.system.hive.bean.SysVipInfo;
import com.matrix.component.rabbitmq.RabiitMqTemplate;
import com.matrix.component.redis.RedisUserLoginUtils;
import com.matrix.component.tools.WxUtils;
@@ -18,6 +18,8 @@
import com.matrix.system.common.dao.CustomerDataDictionaryDao;
import com.matrix.system.common.interceptor.HostInterceptor;
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;
import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO;
@@ -100,6 +102,12 @@
    @Autowired
    private BusParameterSettingsDao busParameterSettingsDao;
    @Autowired
    private ScoreVipDetailDao scoreVipDetailDao;
    @Autowired
    private SysVipInfoDao sysVipInfoDao;
    @Override
    public BigDecimal calculationPostage(BigDecimal payPrice, Long companyId) {
        BigDecimal postage = BigDecimal.ZERO;
@@ -124,7 +132,7 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public AjaxResult createShopOrder(ShopOrderDto shopOrderDto) throws Exception {
        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        //校验收货地址
@@ -133,28 +141,26 @@
            return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择正确的收获地址");
        }
        AjaxResult caculateResult= buildDiscountExplain(shopOrderDto);
        //计算订单优惠信息
        AjaxResult caculateResult= buildDiscountExplain(shopOrderDto);
        DiscountExplain discountExplain= (DiscountExplain) caculateResult.getMapInfo().get("discountExplain");
        //取出购物车中选中的产品
        List<ShopShoppingCart> buyCart = new ArrayList<>();
        //取出购物车中没有参加店铺活动的产品,和参加了店铺活动但是活动没有达到标准的产品,用来计算是否可以使用优惠券
        List<ShopShoppingCart> notCouponuyCart = new ArrayList<>();
        if(discountExplain.getScorePay()!=null){
            //校验用户积分是否够用
            int score=scoreVipDetailDao.selectUserTotalScore(sysVipInfo.getId());
            if(score<discountExplain.getScorePay()){
                return  AjaxResult.buildFailInstance("积分不足");
            }
        }
        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<>();
        Integer cartCount = 0;
        Integer orderCount = 0;
        for (OrderItemDto orderItemDto : shopOrderDto.getOrderItemList()) {
            ShopOrderDetails shopOrderDetails = new ShopOrderDetails();
            shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER);
@@ -178,19 +184,24 @@
            shopOrderDetails.setDiscountAmount(BigDecimal.ZERO);
            details.add(shopOrderDetails);
            cartCount += shopOrderDetails.getCount();
            orderCount += shopOrderDetails.getCount();
            if(orderItemDto.getCartId()!=null){
                //删除用户购物车选中的产品
                shoppingCartDao.deleteById(orderItemDto.getCartId());
            }
        }
        //校验商品是否限购
        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.setCommodityPrice(discountExplain.getBillPrice());
        shopOrder.setPurchaseQuantity(cartCount);
        shopOrder.setPurchaseQuantity(orderCount);
        shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
        //购买方式
        shopOrder.setShippingMethod(shopOrderDto.getDeliverySelect());
@@ -219,6 +230,7 @@
        //获取邮费
        shopOrder.setPostage(discountExplain.getPostage());
        shopOrder.setOrderMoney(discountExplain.getPayPrice());
        shopOrder.setScorePay(discountExplain.getScorePay());
        Gson g = new GsonBuilder().create();
        shopOrder.setDiscountExplain(g.toJson(discountExplain));
        shopOrder.setDiscountAmount(discountExplain.getActivityPrice().add(discountExplain.getCouponPrice()));
@@ -242,8 +254,6 @@
            shopCouponRecordDao.updateByModel(record);
        }
        //删除用户购物车选中的产品
        shoppingCartDao.deleteUserSelectCart(bizUser.getOpenId());
        BrandWCPayRequestData payData = startPayment(shopOrder);
@@ -271,7 +281,7 @@
        //支付总积分
        Integer scoreCount=0;
        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        //计算购物车中物品的优惠信息
        List<OrderItemDto> orderItemDtos = shopOrderDto.getOrderItemList()
@@ -319,7 +329,7 @@
        //满足店铺活动的订单不能使用优惠券
        if (conditionsGroupCount > 0) {
            //计算可用优惠券
            usefulCoupon = wxShopCouponService.getCartVoCouponList(bizUser.getCompanyId(), orderItemDtos);
            usefulCoupon = wxShopCouponService.getCartVoCouponList(sysVipInfo.getCompanyId(), orderItemDtos);
            //获取用户使用的优惠券
            if (shopOrderDto.getCouponReceiveId() == null) {
                //如果用户没有选择优惠券则默认选优惠金额最高的
@@ -388,6 +398,15 @@
        if (!shopOrder.getPayResult().equals(ShopOrder.ORDER_PAY_STATUS_WAIT)) {
            throw new GlobleException("该订单不是待支付状态!");
        }
        if(shopOrder.getScorePay()!=null){
            //校验用户积分是否够用
            int score=scoreVipDetailDao.selectUserTotalScore(shopOrder.getUserId());
            if(score<shopOrder.getScorePay()){
                return  AjaxResult.buildFailInstance("积分不足");
            }
        }
        BrandWCPayRequestData payData = startPayment(shopOrder);
        AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(payData));
        result.putInMap("orderId", shopOrder.getId());
@@ -407,13 +426,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());
@@ -430,12 +451,12 @@
     */
    @Override
    public AjaxResult getMyOrderInfo(OrderInfoQueryPOJO orderInfoQueryPOJO) {
        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        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);
    }
@@ -447,8 +468,8 @@
     */
    @Override
    public AjaxResult getOrderInfoById(Integer orderId) {
        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        ShopOrder shopOrder = shopOrderDao.selectOrderInfoById(bizUser.getOpenId(), orderId);
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        ShopOrder shopOrder = shopOrderDao.selectOrderInfoById(sysVipInfo.getId(), orderId);
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(shopOrder));
    }
@@ -469,8 +490,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 = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
            shopCouponRecord.setUserId(sysVipInfo.getId());
            shopCouponRecord.setOrderId(orderId);
            List<ShopCouponRecord> recordList = shopCouponRecordDao.selectByModel(shopCouponRecord);
            if (CollectionUtils.isNotEmpty(recordList)) {