error; } public function prePay($args){ } //重新支付 public function repay($args){ } //回调逻辑处理 public function notifyPay($pay_data){ $order_no = $pay_data['out_trade_no']; $model = GroupBuyHelp::getPayDetail($order_no); if(empty($model)){ return false; } //已支付 if($model['pay_state']==1){ return false; } $user = UserModel::detail($model['user_id']); // Db::startTrans(); $res = $model->transaction(function () use ($model,$pay_data,$user) { $model->save([ 'pay_state'=> 1, 'pay_time' => time(), 'transaction_id'=>$pay_data['transaction_id']??'' ] ); //写入金米粒记录 $this->writeUserGoldRice($model); $this->writeUserRiceCard($model);//写入金米粒逻辑 $join = GroupBuyJoin::where('id',$model['join_id'])->find(); $join->help_count += 1; // 拼团人数+1 $flag = false; //拼团人数够了 if($join->help_count==$join->people_count){ $flag = true; } $join->save(); if($flag){ //成功了话写真实订单 $this->ptSuccessNotify($join->id); } }); $groupgoods = GroupBuyGoods::where('group_buy_activity_id',$model['group_buy_activity_id'])->find();//拼团付款成功后加销量 if($groupgoods){ StockFactory::getFactory(OrderSourceEnum::GROUPBUY)->updateStockSalesExpress($groupgoods->goods_id,$model['goods_num']); } // Db::commit(); return $res; } /** * 写入金米粒记录 * @param int $payType * @return false|int * @throws \Exception */ private function writeUserGoldRice($model) { if($model['gold_rice_amount']>0){ //写金米粒出账记录 GoldRiceModel::add($model['user_id'],$model['order_no'],'下单抵扣',$model['gold_rice_amount'],0); //扣除冻结中的金米粒 UserModel::setDecByField($model['user_id'],'gold_rice_frozen',(float)$model['gold_rice_amount']); } } /** * 写入米卡记录 * @param int $payType * @return false|int * @throws \Exception */ private function writeUserRiceCard($help){ if($help['rice_card_id']>0){ //写现金卡出账记录 $userRiceCard = UserRiceCardModel::find($help['rice_card_id']); UserRiceCardConsumeModel::add($userRiceCard,$help['order_no'],$help['pay_money'],$help['rice_card_money']); //如果可用余额为0并且冻结余额等于要抵扣的金额 if($userRiceCard['balance']==0 && $help['rice_card_money']==$userRiceCard['frozen_amount']){ //现金卡直接减冻结余额,并且状态改为已失效 UserRiceCardModel::setIncDecByField($help['rice_card_id'],[],['frozen_amount'=>(float)$help['rice_card_money']],['effect_state'=>2]); }else{ //现金卡直接减冻结余额 UserRiceCardModel::setDecByField($help['rice_card_id'],'frozen_amount',(float)$help['rice_card_money']); } } } //拼团成功,写入订单逻辑 public function ptSuccessNotify(int $join_id){ $join = GroupBuyJoin::where('id',$join_id)->find(); // $help = GroupBuyHelp::where('id',$help_id)->find(); //假的订单 order_id = -1 if($join->status==0&&$join->help_count==$join->people_count){ $helpList = GroupBuyHelp::where('join_id',$join_id)->where('fans',0)->where('order_id',0)->where('pay_state',1)->select(); foreach($helpList as $help){ $order_id = $this->add($help,''); GroupBuyHelp::where('order_id',0)->where('id',$help['id'])->update(['order_id'=>$order_id]); } } $join->status = 1; $join->success_time = Date("Y-m-d H:i:s",time()); $join->save(); $this->activityEnd($join->user_id,$join->id); } //测试 public function test(){ $help = GroupBuyHelp::where('id',100)->find(); $this->add($help,''); } //下单并发起拼团,拼团成功后发送 public function activityEnd($user_id,$join_id){ $template_type = 'normal_xia_dan_faqi_tuan';// $sub = new WechatSub($template_type); $page = 'pages/activity/pages/groupShopping/groupShopping/groupShopping?shareId='.$join_id; $data = ['thing2'=>["value"=>"拼团活动"],'thing3'=>["value"=>'活动已结束,去看看活动结果']]; $sub->pushSub($user_id,$page,$data); $this->helpEnd($join_id); } //团员结束 public function helpEnd($join_id){ $user_id_arr = GroupBuyHelp::where("join_id",$join_id)->column('user_id'); $template_type = 'normal_li_ji_can_tuan'; //normal_xia_dan_faqi_tuan $sub = new WechatSub($template_type); $page = 'pages/activity/pages/groupShopping/groupShopping/groupShopping?shareId='.$join_id; $data =['thing1'=>["value"=>"拼团活动"],'thing3'=>["value"=>'活动已结束,去看看活动结果']]; foreach($user_id_arr as $user_id){ $res = $sub->pushSub($user_id,$page,$data); // var_dump($res); } } /** * 新增订单记录 * @param $order * @param string $remark * @return false|int */ public function add($help, $remark = ''){ $groupgoods = GroupBuyGoods::where('group_buy_activity_id',$help['group_buy_activity_id'])->find(); $goods_id = $groupgoods->goods_id; $group_price = $groupgoods->group_price; $goodsSkuId = $groupgoods->goods_sku_id; $goodsNum = $help['goods_num']; $model = new GoodsModel; $goodsList = $model->getListByIdsFromApi([$goods_id]); // 隐藏冗余的属性 $goodsList->hidden(array_merge($model->hidden, ['content', 'goods_images', 'images'])); //返回商品处理 foreach ($goodsList as &$item) { // 商品sku信息 $item['skuInfo'] = GoodsSkuModel::detail($item['goods_id'], $goodsSkuId); // 商品单价 $item['goods_price'] = $item['skuInfo']['goods_price']; // 商品购买数量 $item['total_num'] = $goodsNum; // 商品SKU索引 $item['goods_sku_id'] = $item['skuInfo']['goods_sku_id']; // 商品购买总金额 $item['total_price'] = helper::bcmul($item['goods_price'], $goodsNum); // 获取最终拼团单价金额 $item['group_price'] = $groupgoods['group_price']; } $groupbuy_money = helper::bcsub($goodsList[0]['total_price'],$goodsList[0]['group_price']*$goodsNum); if($groupbuy_money<0){ $groupbuy_money = 0; } // 订单数据 $data = [ 'user_id' => $help['user_id'], 'order_no' => $help['order_no'], 'total_price' => $goodsList[0]['total_price'],//商品原总价,不包含折扣 'order_price' => $help['order_money'],//订单优惠完金额 商品优惠完金额+运费 'pay_price' => $help['pay_money'], //微信支付金额 'delivery_type' => DeliveryTypeEnum::EXPRESS, 'pay_type' => $help['pay_money'] > 0 ? OrderPayTypeEnum::WECHAT : OrderPayTypeEnum::MICAH_EXCHANGE, 'buyer_remark' => trim($remark), 'order_source' => OrderSourceEnum::GROUPBUY, 'order_source_id' => $help['id'], 'groupbuy_money' =>$groupbuy_money, 'order_status' => OrderStatusEnum::NORMAL, 'store_id' => 10001, 'provider_ids' => $help['provider_ids']??0, 'distributor_total_money' => 0, 'gold_rice_amount' => $help['gold_rice_amount']??0, 'gold_rice_money' => $help['gold_rice_money']??0, 'rice_card_id' => $help['rice_card_id']??0, 'rice_card_money' => $help['rice_card_money']??0, 'rice_card_express_money' => $help['rice_card_express_money']??0, 'pay_status' => PayStatusEnum::SUCCESS, 'pay_time' => time(), 'invoice_deadline'=> time() + OrderModel::getInvoiceDeadline() * 60, 'express_price'=> $help['express_money'], 'transaction_id'=>$help['transaction_id'], 'promotion_monitor_id'=>$help['promotion_monitor_id'], 'staff_user_id' => $help['staff_user_id']?? 0, 'staff_shop_id' => $help['staff_shop_id']?? 0 ]; // 保存订单记录 $orderModel = new OrderModel; $orderModel->save($data); $order_id = $orderModel->order_id; $newGoodsList = []; foreach ($goodsList as $key=>$goods) { $total_pay_price = helper::bcsub ($help['pay_money'],$help['express_money']) > 0 ? helper::bcsub($help['pay_money'],$help['express_money']):0; $item = [ 'order_id'=>$order_id, 'user_id' => $help['user_id'], 'store_id' => 10001, 'goods_id' => $goods['goods_id'], 'goods_name' => $goods['goods_name'], 'goods_no' => $goods['goods_no'] ?: '', 'image_id' => (int)current($goods['goods_images'])['file_id'], 'deduct_stock_type' => $goods['deduct_stock_type'], 'spec_type' => $goods['spec_type'], 'goods_sku_id' => $goods['skuInfo']['goods_sku_id'], 'goods_props' => $goods['skuInfo']['goods_props'] ?: '', 'content' => $goods['content'] ?? '', 'goods_sku_no' => $goods['skuInfo']['goods_sku_no'] ?: '', 'goods_price' => $goods['skuInfo']['goods_price'], 'specs' => $goods['skuInfo']['specs'], 'supplier' => $goods['supplier'], 'line_price' => $goods['skuInfo']['line_price'], 'goods_weight' => $goods['skuInfo']['goods_weight'], 'is_user_grade' => (int)$goods['is_user_grade'], 'grade_ratio' => $goods['grade_ratio']??0, 'grade_goods_price' => $goods['grade_goods_price']??0, 'grade_total_money' => $goods['grade_total_money']??0, 'coupon_id' => $goods['coupon_id']??0, 'coupon_money' => $goods['coupon_money']??0, 'points_bonus' => $goods['points_bonus']??0, 'total_num' => $goods['total_num'], 'total_price' => $goods['total_price'], 'total_pay_price' => $total_pay_price, 'provider_id' => $goods['provider_id'], 'brand' => $goods['brand'], 'province_id' => $goods['province_id'], 'city_id' => $goods['city_id'], 'storage' => $goods['storage'], 'unit' => $goods['unit'], 'clearing_price' => $goods['skuInfo']['clearing_price']??'0.00', 'platform_rate' => $goods['skuInfo']['platform_rate']??'0.00', 'staff_user_id' => $goods['staffUserId'], 'shop_id' => $goods['shopId'], 'distributor_radio' => $goods['distributor_radio']??0, 'distributor_goods_price' => $goods['distributor_goods_price']??0, 'distributor_total_money' => $goods['distributor_total_money']??0, 'gold_rice_amount' => $help['gold_rice_amount']??0, 'gold_rice_money' => $help['gold_rice_money']??0, 'rice_card_id' => $help['rice_card_id']??0, 'group_buy_id' => $help['group_buy_activity_id']??0, 'goods_type' => $goods['goods_type']??10, 'shop_id'=>0, 'rice_card_money'=>$help['good_rice_card_money'] ]; $newGoodsList[] = $item; } $orderGoodModel = new OrderGoodsModel; $orderGoodModel->saveAll($newGoodsList); $address = [ 'order_id'=>$order_id, 'user_id' => $help['user_id'], 'store_id' =>10001, 'name' => $help['user_name'], 'phone' => $help['phone'], 'province_id' => $help['province_id'], 'city_id' => $help['city_id'], 'region_id' => $help['region_id'], 'detail' => $help['detail'] ]; $orderAddressModel = new OrderAddressModel; $orderAddressModel->save($address); // $order['goodsList'] = $goodsList; // $order['goods'] = $goodsList; // $order['delivery'] = DeliveryTypeEnum::EXPRESS; // $order['delivery_type'] = DeliveryTypeEnum::EXPRESS; // StockFactory::getFactory(OrderSourceEnum::GROUPBUY)->updateGoodsStock($order); // StockFactory::getFactory(OrderSourceEnum::GROUPBUY)->updateStockSales($order); //待结算佣金计算 $RecordWaitCommission = new RecordWaitCommission; //分销记录放入队列 $RecordWaitCommission->recordWaitCommission($order_id); return $order_id; } /** * 记录收货地址 * @param $address * @return false|\think\Model */ private function saveOrderAddress($address) { return $this->model->address()->save(); } }