jiangqs
2023-09-01 dfe810a2108e479c4ed4f8d24dd181140afd8730
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -751,24 +751,13 @@
        }
        // 保存订单
        this.save(order);
        // 更新用户商品类型
        if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
            AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
            appMemberGoodsTypeDto.setUserId(userId);
            appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
            remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto);
        }
        appPlaceOrderVo.setOrderId(orderId);
        appPlaceOrderVo.setOrderNo(orderNo);
        //商品数据
        String goodsName = "";
        if (null != goodsNameList) {
            goodsName = String.join(",", goodsNameList);
        }
        //减去优惠券
        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
        }
        //判断是否需要支付 不需要直接待核销
        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.ZERO)>0){
            String outTradeNo = IdUtils.simpleUUID();
            // 保存订单 交易流水
@@ -779,6 +768,11 @@
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
            //商品数据
            String goodsName = "";
            if (null != goodsNameList) {
                goodsName = String.join(",", goodsNameList);
            }
            // 小程序微信下单支付
            createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo,
                    orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
@@ -792,11 +786,19 @@
            delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
            delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
            remoteConfigService.addDelayTask(delayTask);
            appPlaceOrderVo.setZeroFlag(0);
        }else{
            order.setOrderStatus(2);
            this.saveOrUpdate(order);
            appPlaceOrderVo.setZeroFlag(1);
        }
        // 更新用户商品类型统计
        if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
            AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
            appMemberGoodsTypeDto.setUserId(userId);
            appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
            remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto);
        }
        return appPlaceOrderVo;
    }
@@ -813,7 +815,8 @@
     * @param payerClientIp
     * @param goodsNameList
     */
    public void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId,
    private void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId,
                                 String goodsName, String outTradeNo,
                                 String orderId, BigDecimal payMoney,
                                 String openid, String payerClientIp, List<String> goodsNameList,Integer orderFrom){
@@ -919,7 +922,7 @@
        String activityId = appPlaceActivityDto.getActivityId();
        String goodsId = appPlaceActivityDto.getGoodsId();
        Integer buyNum = appPlaceActivityDto.getBuyNum();
        //redis库存控制极简版
        //redis分布式锁库存控制
        String goodsLock = "goods_lock_" + activityId + "_" + goodsId;
        RLock redissonLock = redissonClient.getLock(goodsLock);
        try {
@@ -1129,51 +1132,15 @@
        agStockChangeDto.setShopId(order.getShopId());
        agStockChangeDto.setUserId(order.getUserId());
        remoteActivityService.changeActivityStock(agStockChangeDto);
        // 调用支付
        /*PrepayRequest request = new PrepayRequest();
        Amount amount = new Amount();
        amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString()));
        request.setAmount(amount);
        request.setAppid(this.appId);
        request.setMchid(this.mchId);
        request.setDescription(order.getGoodsInfo());
        request.setNotifyUrl(this.notifyUrl);
        request.setOutTradeNo(order.getOrderId());
        Payer payer = new Payer();
        // TODO 获取openID
        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
        request.setPayer(payer);*/
        //设置订单允许分账 秒杀活动才允许分账
        /*if(order.getOrderFrom()==2){
            SettleInfo settleInfo=new SettleInfo();
            settleInfo.setProfitSharing(true);
            request.setSettleInfo(settleInfo);
        }*/
        //返回前端唤醒支付结果信息
        /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
        appPlaceOrderVo.setAppId(this.appId);
        appPlaceOrderVo.setTimeStamp(res.getTimeStamp());
        appPlaceOrderVo.setNonceStr(res.getNonceStr());
        appPlaceOrderVo.setPackageStr(res.getPackageVal());
        appPlaceOrderVo.setTradeType(res.getSignType());
        appPlaceOrderVo.setPaySign(res.getPaySign());
*/
        List<String> goodsNameList = new ArrayList<>();
        goodsNameList.add(orderGoods.getGoodsName());
        //支付金额大于0走支付 负责直接完成订单
        if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.ZERO)>0){
            List<String> goodsNameList = new ArrayList<>();
            goodsNameList.add(orderGoods.getGoodsName());
            String outTradeNo = IdUtils.simpleUUID();
            // 保存订单 交易流水
            order.setOutTradeNo(outTradeNo);
            this.saveOrUpdate(order);
            //自动取消订单任务时间获取
            Integer delayTime = 30;
            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
@@ -1192,10 +1159,11 @@
            delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
            delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
            remoteConfigService.addDelayTask(delayTask);
            appPlaceOrderVo.setZeroFlag(0);
        }else{
            order.setOrderStatus(2);
            this.saveOrUpdate(order);
            appPlaceOrderVo.setZeroFlag(1);
        }
        //生成活动参加记录
        ActivityRecord activityRecord = new ActivityRecord();
@@ -1226,14 +1194,20 @@
        List<AppUserOrderPageVo> appUserOrderPageVoList = orderMapper.pageUserOrder(page, appUserOrderPageDto);
        if (appUserOrderPageVoList != null && !appUserOrderPageVoList.isEmpty()) {
            Long shopId;
            String activityId;
            Shop shop;
            HashSet<Long> set = new HashSet<Long>();
            HashSet<Long> shopSet = new HashSet<Long>();
            HashSet<String> activitySet = new HashSet<String>();
            for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
                shopId = appUserOrderPageVo.getShopId();
                set.add(shopId);
                shopSet.add(shopId);
                if(appUserOrderPageVo.getOrderFrom()==2){
                    activityId = appUserOrderPageVo.getActivityId();
                    activitySet.add(activityId);
                }
            }
            Map<Long, Shop> shopMap = new HashMap<>();
            set.forEach(shopIdLong -> {
            shopSet.forEach(shopIdLong -> {
                Shop shopTemp = remoteShopService.getShop(shopIdLong).getData();
                shopMap.put(shopIdLong, shopTemp);
            });
@@ -1625,7 +1599,10 @@
            payRecord.setPayType(merVerifyOrderDto.getPayType());
            payRecordService.save(payRecord);
        }
        //更新用户消费统计
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setConsumeTime(nowTime);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        return merVerifyOrderVo;
    }
@@ -2308,7 +2285,10 @@
        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
        }
        //更新会员消费记录
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setConsumeTime(nowTime);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        //更新商户统计
        /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
        shopTotalChangeDto.setShopId(order.getShopId());
@@ -2369,7 +2349,7 @@
                    if (orderFrom == 1) {
                        orderFromDesc = "商城订单";
                    } else if (orderFrom == 2) {
                        orderFromDesc = "店铺砍价活动(" + merOrderPageVo.getActivityName() + ")";
                        orderFromDesc = "平台秒杀活动(" + merOrderPageVo.getActivityName() + ")";
                    } else {
                        orderFromDesc = "线下创建";
                    }
@@ -3447,9 +3427,11 @@
        }
        //订单分布
        //日期全部时固定为5天
        Boolean fillZero = false;
        if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){
            mgtBasePlatformDto.setEndDate(DateUtils.getDate());
            mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4)));
            fillZero = true;
        }
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalOrderTotal(mgtBasePlatformDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
@@ -3461,10 +3443,17 @@
                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
            }
            MerOrderDistributionTotalVo merOrderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
            mgtTotalOrderTotalVo.setOrderTotalKey(merOrderDistributionTotalVo.getOrderTotalKey());
            mgtTotalOrderTotalVo.setOrderTotalValue(merOrderDistributionTotalVo.getOrderTotalValue());
            mgtTotalOrderTotalVo.setOrderMoneyValue(merOrderDistributionTotalVo.getOrderMoneyValue());
            if(fillZero){
                MerOrderDistributionTotalVo merOrderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
                mgtTotalOrderTotalVo.setOrderTotalKey(merOrderDistributionTotalVo.getOrderTotalKey());
                mgtTotalOrderTotalVo.setOrderTotalValue(merOrderDistributionTotalVo.getOrderTotalValue());
                mgtTotalOrderTotalVo.setOrderMoneyValue(merOrderDistributionTotalVo.getOrderMoneyValue());
            }else{
                mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
                mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
                mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
            }
        }
        return mgtTotalOrderTotalVo;
    }
@@ -3497,6 +3486,10 @@
            }
        }*/
        List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData();
        if(mgtBasePlatformDto.getShopId()!=null){
            shopIdList = new ArrayList<>();
            shopIdList.add(mgtBasePlatformDto.getShopId());
        }
        mgtBasePlatformDto.setShopIdList(shopIdList);
        //获取基础统计
        MgtPlTotalActivityTotalVo totalActivityTotalVo = orderMapper.getPlTotalActivityTotal(mgtBasePlatformDto);
@@ -3552,6 +3545,8 @@
                    mgtMapBigTotalVo.setMapKey("单品");
                    noGoods = false;
                }
                goodsTypeTotalList.add(mgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            //补充缺少类型
            if(noCycle){
@@ -4091,6 +4086,7 @@
     */
    @Override
    public MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto) {
        //获取查询的商户列表
        if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
@@ -4149,6 +4145,7 @@
        String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()];
        Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()];
        BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()];
        //数据为空返回空数组
        if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) {
            MgtMapTotalPlusVo mgtMapTotalPlusVo;
            for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) {
@@ -4157,6 +4154,7 @@
                orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
            }
            //补充日期到近5日
            orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue);
        }else{
            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
@@ -4546,6 +4544,8 @@
            Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId());
            if (bugGoodsNum == null || bugGoodsNum < 1) {
                goodsTotalChangeDto.setPersonNum(1);
            }else{
                goodsTotalChangeDto.setPersonNum(0);
            }
            goodsTotalChangeDtoList.add(goodsTotalChangeDto);
        }
@@ -4683,6 +4683,9 @@
        Boolean haveService = false;
        Boolean haveExperience = false;
        Boolean haveGoods = false;
        //商品统计回退
        List<GoodsTotalChangeDto> goodsTotalChangeDtoList = new ArrayList<>();
        GoodsTotalChangeDto goodsTotalChangeDto;
        List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
        if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
            StringJoiner memberCouponSJ = new StringJoiner(",");
@@ -4718,6 +4721,7 @@
                } else {
                    memberCouponSJ.add(orderGoods.getCouponId());
                }
                //会员统计更新
                switch (orderGoods.getGoodsType()) {
                    case 1:
                        cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney());
@@ -4738,7 +4742,21 @@
                    default:
                        break;
                }
                //商品统计更新
                goodsTotalChangeDto = new GoodsTotalChangeDto();
                goodsTotalChangeDto.setGoodsId(orderGoods.getGoodsId());
                goodsTotalChangeDto.setChangeType(2);
                goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum());
                goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney());
                Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId());
                if (bugGoodsNum == null || bugGoodsNum <= orderGoods.getBuyNum()) {
                    goodsTotalChangeDto.setPersonNum(1);
                }else{
                    goodsTotalChangeDto.setPersonNum(0);
                }
                goodsTotalChangeDtoList.add(goodsTotalChangeDto);
            }
            remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList);
            //回退优惠券
            if (memberCouponSJ != null) {
                remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
@@ -5424,17 +5442,6 @@
            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                userId = merOrderPageVo.getUserId();
                userIdSj.add(userId.toString());
                orderFrom = merOrderPageVo.getOrderFrom();
                if (orderFrom != null) {
                    if (orderFrom == 1) {
                        orderFromDesc = "商城订单";
                    } else {
                        orderFromDesc = "线下创建";
                    }
                } else {
                    orderFromDesc = "商城订单";
                }
                merOrderPageVo.setOrderFromDesc(orderFromDesc);
                if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){
                    merOrderPageVo.setUnPaidMoney(zeroBig);
                }