yii2模型类新增数据不成功不报错?解决方案

4 篇文章 0 订阅
1 篇文章 0 订阅

产景:对接第三方的积分系统,抓取积分订单信息至商城的时候,对接方的文档也有可能是坑爹,插入表不成功。因为对方的文档和接口是不一致的,所以很多时间可以考虑用字符串去存信息。

如何调试呢?$this->validate() $model->geterrors等都没有信息返回,可以使用try catch解决

分批抓取脚本 (此脚本可以同步遍历无需加字段)

 /**
     * 积分会员:门店订单抓取至商城脚本
     *  desc: 固定参数用于抓取
     */
    public function actionGetOrderList()
    {
        set_time_limit(0);
        date_default_timezone_set("PRC");
        $option = Option::get('shop_order_list', 0, 'admin', '1');
        $option = \Yii::$app->serializer->decode($option);
        if(!$option){
            return false;
        }
        $store_id = 6;
        $limit = 100;
        $is_recycle = Store::find()->where(['id'=>$store_id,'is_recycle'=>1])->one();
        if($is_recycle){
            return false;
        }
        try {
            //循环会员卡结果集合
            $membership_data = \Yii::$app->cache->get(CacheKeyEnum::USER_MEMBER_DATA);
            if(!$membership_data){
                $count = UserMember::find()->where(['store_id' =>$store_id])->andWhere(['>', 'membership_number', 0])->count();
                \Yii::$app->cache->set(CacheKeyEnum::USER_MEMBER_DATA,$count);
                usleep(20*1000);
            }
            $count = \Yii::$app->cache->get(CacheKeyEnum::USER_MEMBER_DATA);
            $j = \Yii::$app->cache->get(CacheKeyEnum::USER_MEMBER_DATA."_i") ? : 0 ; //从上次跑的页数开始跑
            for ($i = $j; $i <= floor($count / $limit); $i++) {
                $membership_numbers = UserMember::find()->select(['user_id','membership_number','wechat_union_id'])->where(['store_id' => $store_id])->andWhere(['>', 'membership_number', 0])->limit($limit)->offset($i*$limit)->asArray()->all();
                $membership_numbers = array_column($membership_numbers,null, 'membership_number');
               foreach ($membership_numbers as $k =>$v){
                   $param = [
                       'membership_number' => $v['membership_number'],
                   ];
                   $res = requestCardApi($option['order_list_url'], $param,$option['app_key'],1);
                   if($res['code'] == 0){
                     $user = UserMember::find()->where(['store_id'=>$store_id,'wechat_union_id'=>$v['wechat_union_id']])->one();
                     $user_id = $v['user_id'] ? :  ( $user ? $user->id : 0 );
                     $this->saveData($res['data'],$user_id,$store_id);
                   }else{
                       \Yii::error($res, date('Y-m-d H:i:s').'会员卡抓取门店订单记录失败,会员卡号:'.$v['membership_number']);
                   }
               }
                    //记录跑的页数,跑完删除缓存,没跑完下次接着跑
                    \Yii::$app->cache->set(CacheKeyEnum::USER_MEMBER_DATA."_i",$i+1);
                    usleep(20*1000);
                    if(floor($count / $limit) == $i){
                    \Yii::$app->cache->delete(CacheKeyEnum::USER_MEMBER_DATA."_i");
                    \Yii::$app->cache->delete(CacheKeyEnum::USER_MEMBER_DATA);
                }
                unset($membership_numbers);
            }
        } catch (\Exception $e) {
            $e->getMessage();
        }
    }

入库脚本

/**
     * 积分会员:保存数据方法
     *  $param $datas 对接方返回结果集
     *  $param $user_id 我方商城中用户ID
     *  $param $store_id 我方商户ID
     *  desc :
     */
    public function saveData($datas = [],$user_id = 0,$store_id=0)
    {
        foreach ($datas as $k =>$v){
            //主订单数据
            $main_order = ShopOrder::find()->where(['store_id'=>$store_id,'order_no'=>$v['orderId'],'user_id'=>$user_id])->one();
            if(!$main_order){
                $order =[
                 'store_id'=>$store_id,
                'book_shop_id'=> $v['shopId'] ? : 0,
                'user_id'=> $user_id ? : 0,
                'order_no'=> $v['orderId'] ? : "",
                'total_price'=> $v['orderPrice'] ? : 0.00,
                 'pay_price'=> $v['price'] ? : 0.00,
                'express_price'=>0,
                'custom_fields'=> $v['customFields'] ? json_encode($v['customFields'],true) : '{}',
                'postal_code'=> $v['postalCode'] ? : "",
                'discount_price'=> $v['discountPrice'] ? : 0.00,
                'refund_status'=> $v['refundStatus'] ? : 0,
                'remark'=> $v['remark'] ? : "",
                'express'=> $v['deliverCompany'] ? : "",
                'express_no'=> $v['deliverNumber'] ? : "",
                'wdt_sale_no'=> $v['wdtSaleNo'] ? : "",
                'logistics_price'=> $v['logisticsPrice'] ? : 0.00,
                'customer_phone'=> $v['customerPhone'] ? : "",
                'name'=> $v['receiveName'] ? : "",
                'state'=> $v['state'] ? : 0,
                'pay_time'=> $v['paymentTime'] ? strtotime(explode('.',$v['paymentTime'])[0]): '',
                'acc_date'=> $v['accDate'] ? strtotime(explode('.',$v['accDate'])[0]): '',
                'confirm_time'=> $v['receiveTime'] ? strtotime(explode('.',$v['receiveTime'])[0]): '',
                'create_time'=> $v['orderCreateTime'] ? strtotime(explode('.',$v['orderCreateTime'])[0]): '',
                'update_time'=> $v['orderUpdateTime'] ? strtotime(explode('.',$v['orderUpdateTime'])[0]): '',
                'mobile'=> $v['receivePhone'] ? : "",
                'direct_distributor_money'=> $v['directDistributorMoney'] ? : 0.00,
                'payment_mode'=> $v['paymentMode'] ? : 0,
                'address'=> $v['receiveAddress'] ? : "",
                'cost_center'=> $v['costCenter'] ? : 0.00,
                'distributor_id'=> $v['distributorId'] ? : 0,
                'order_origin'=> $v['orderOrigin'] ? : 0,
                'pos_no'=> $v['posNo'] ? : "",
                //'name'=> $v['customerName'] ? : "",
                'parent_id'=> $v['parentId'] ? : 0,
                'refund_order_no'=> $v['refundNumber'] ? : 0,
                'gross_profit_margin'=> $v['grossProfitMargin'] ? : 0.00,
                'detail_address'=> $v['detailAddress'] ? : "",
                'pur_amount'=> $v['purAmount'] ? : 0.00,
                'buyer_user_id'=> $v['buyerUserId'] ? : 0,
                'indirect_distributor_money'=> $v['indirectDistributorMoney'] ? : 0.00,
                'pos_payee'=> $v['posPayee'] ? : "",
                'addtime'=>time()
                ];
                try {
                    $insert = \Yii::$app->db->createCommand()->insert(ShopOrder::tableName(),$order)->execute();
                    if($insert){
                        $id = \Yii::$app->db->getLastInsertID();
                        foreach ($v['goodsDTOList'] as $kk =>$vv){
                            $order_detail = new ShopOrderDetail();
                            $order_detail->order_id = $id ? :"";
                            $order_detail->goods_id = $vv['productId'] ? : "";
                            $order_detail->num = $vv['number'] ? : 0;
                            $order_detail->cost_center = $vv['costCenter'] ? : "";
                            $order_detail->pile = (int)$vv['pile']? : 0;
                            $order_detail->pic = $vv['productId'] ? Goods::find()->where(['store_id'=>$store_id])->where(['LIKE', 'attr', '"no":"'. $vv['productId'] .'"'])->one()->cover_pic : "";
                            $order_detail->goods_name = $vv['productName'] ? : "";
                            $order_detail->min_price = $vv['minPrice'] ? :"";
                            $order_detail->std_price = (string)$vv['stdPrice'] ? :"";
                            $order_detail->total_price = $vv['productPrice'] ? (string)$vv['productPrice'] : "";
                            $order_detail->user_id = $user_id;
                            $order_detail->store_id = $store_id;
                            $order_detail->times = $vv['times'] ? : 0;
                            $order_detail->min_qty = $vv['minQty'] ? : 0;
                            $order_detail->sku_id = $vv['skuId'] ? : 0;
                            $order_detail->save();
                        }
                    }
                } catch (\Exception $e) {
                    $e->getMessage() ;
                }
            }else{
                /* @desc  以合作方最新数据为主同步主订单数据,合作方是抓取线下订单的,一锤子买卖不存在退款*/
                    \Yii::$app->db->createCommand()->update(ShopOrder::tableName(),
                        [
                            'total_price'=> $v['orderPrice'] ? : 0.00,
                            'pay_price'=> $v['price'] ? : 0.00,
                            'custom_fields'=> $v['customFields'] ? json_encode($v['customFields'],true) : '{}',
                            'postal_code'=> $v['postalCode'] ? : "",
                            'discount_price'=> $v['discountPrice'] ? : 0.00,
                            'refund_status'=> $v['refundStatus'] ? : 0,
                            'remark'=> $v['remark'] ? : "",
                            'express'=> $v['deliverCompany'] ? : "",
                            'express_no'=> $v['deliverNumber'] ? : "",
                            'wdt_sale_no'=> $v['wdtSaleNo'] ? : "",
                            'logistics_price'=> $v['logisticsPrice'] ? : 0.00,
                            'customer_phone'=> $v['customerPhone'] ? : "",
                            'name'=> $v['receiveName'] ? : "",
                            'state'=> $v['state'] ? : 0,
                            'pay_time'=> $v['paymentTime'] ? strtotime(explode('.',$v['paymentTime'])[0]): '',
                            'acc_date'=> $v['accDate'] ? strtotime(explode('.',$v['accDate'])[0]): '',
                            'confirm_time'=> $v['receiveTime'] ? strtotime(explode('.',$v['receiveTime'])[0]): '',
                            'create_time'=> $v['orderCreateTime'] ? strtotime(explode('.',$v['orderCreateTime'])[0]): '',
                            'update_time'=> $v['orderUpdateTime'] ? strtotime(explode('.',$v['orderUpdateTime'])[0]): '',
                            'mobile'=> $v['receivePhone'] ? : "",
                            'direct_distributor_money'=> $v['directDistributorMoney'] ? : 0.00,
                            'payment_mode'=> $v['paymentMode'] ? : 0,
                            'address'=> $v['receiveAddress'] ? : "",
                            'cost_center'=> $v['costCenter'] ? : 0.00,
                            'distributor_id'=> $v['distributorId'] ? : 0,
                            'order_origin'=> $v['orderOrigin'] ? : 0,
                            'pos_no'=> $v['posNo'] ? : "",
                            'parent_id'=> $v['parentId'] ? : 0,
                            'refund_order_no'=> $v['refundNumber'] ? : 0,
                            'gross_profit_margin'=> $v['grossProfitMargin'] ? : 0.00,
                            'detail_address'=> $v['detailAddress'] ? : "",
                            'pur_amount'=> $v['purAmount'] ? : 0.00,
                            'buyer_user_id'=> $v['buyerUserId'] ? : 0,
                            'indirect_distributor_money'=> $v['indirectDistributorMoney'] ? : 0.00,
                            'pos_payee'=> $v['posPayee'] ? : "",
                            'modify_time'=> time()
                            ],
                        ['store_id'=>$store_id,'order_no'=>$v['orderId'],'user_id'=>$user_id])->execute();
                }
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值