$params['mall_id']], ['user_id' => $params['user_id']], ['store_id' => $params['store_id']], ]); $is_add = false; if (empty($user_info)) { $user_info = new HappinessStoreUser(); $user_info->mall_id = $params['mall_id']; $user_info->user_id = $params['user_id']; $user_info->store_id = $params['store_id']; $user_info->loadDefaultValues(); $is_add = true; } $user_info->last_time = $order['pay_time']; $user_info->order_nums += 1; $user_info->pay_nums += 1; $user_info->pay_money += $order['pay_money']; if (!$user_info->save()) throw new Exception('记录门店会员信息失败'); if ($is_add) { //维护门店数据 HappinessStore::updateAllCounters(['user_nums' => 1], ['mall_id' => $params['mall_id'], 'id' => $params['store_id']]); HappinessStoreCensus::setData([ 'mall_id' => $params['mall_id'], 'store_id' => $params['store_id'], 'add_user_nums' => 1, 'date_time' => date('Y-m-d', time()), ]); } return true; } catch (\Exception $e) { var_dump($e->getMessage()); \Yii::error($e->getMessage()); throw new Exception($e->getMessage()); } } //记录门店订单收益 public function setStoreCommission($params, $order) { $trans = \Yii::$app->db->beginTransaction(); try { //获取幸福小店基础配置 $setting = \Yii::$app->services->setting->addons->get($params['mall_id'], HappinessEnum::ADDONS_NAME, 'basic'); $commission_params = [ 'mall_id' => $params['mall_id'], 'store_id' => $params['store_id'], 'user_id' => $params['user_id'], 'order_no' => $order['order_no'], 'order_money' => $order['goods_price'], 'pay_money' => $order['pay_money'], 'discount_money' => bcsub($order['original_goods_price'], $order['goods_price'], 2), 'is_settlement' => 0, 'status' => 1, 'settle_type' => $setting['settle_type'], 'score_money' => $order['score_money'] ?? 0, 'type'=>$params['type']??1, ]; $service_charge = 0; $setting['settle_type']=2; switch ($setting['settle_type']) { case 1: //门店商品售价 $amount_received = $order['original_goods_price']; break; case 2: //订单实际支付 $amount_received = $order['pay_money']; break; case 3: //商品成本+运费 $amount_received = array_sum(array_column($order['detail'], 'cost_price')) + $order['shipping_money']; break; case 4: //订单实际支付+积分抵扣 $amount_received = $order['pay_money'] + $order['score_money']; break; } $store_total_commission=0; foreach ($order['detail'] as $key => $value) { //库存扣减 $happiness_goods_attr = HappinessStoreGoodsAttr::getOne([ ['mall_id' => $params['mall_id']], ['store_id' => $params['store_id']], ['attr_id' => $value['goods_attr_id']], ['status' => StatusEnum::ENABLED], ['is_on_sale' => 1], ]); $happiness_goods_attr->stock -= $value['num']; $happiness_goods_attr->save(); $happiness_goods = HappinessStoreGoods::getOne([ ['mall_id' => $params['mall_id']], ['store_id' => $params['store_id']], ['goods_id' => $value['goods_id']], ['status' => StatusEnum::ENABLED], ['is_on_sale' => 1], ]); $happiness_goods->stock -= $value['num']; $happiness_goods->sales_num += $value['num']; $happiness_goods->save(); $happiness_goods=HappinessGoods::getOne([ ['mall_id' => $params['mall_id']], ['goods_id' => $value['goods_id']], ['status' => StatusEnum::ENABLED], ['is_on_sale' => 1], ]); if(empty($happiness_goods)) { //取最后一条数据 $happiness_goods=HappinessGoods::find()->where(['mall_id' => $params['mall_id'],'goods_id' => $value['goods_id']])->orderBy('id desc')->one(); } $store_scale=bcdiv($happiness_goods->store_scale,100,4); $goods_price=bcmul($value['goods_price'],$store_scale,2); $store_total_commission =bcadd($goods_price,$store_total_commission,2); //维护商品销量数据 HappinessGoods::updateAllCounters(['sales_num' => $value['num']], ['mall_id' => $params['mall_id'], 'goods_id' => $value['goods_id']]); HappinessGoodsRanking::setData([ 'mall_id' => $params['mall_id'], 'store_id' => $params['store_id'], 'goods_id' => $value['goods_id'], 'sales_money' => $value['goods_price'], 'status' => StatusEnum::ENABLED, ]); } if ($setting['service_fee'] == 1) $service_charge = bcmul($store_total_commission, $setting['platform_ratio']/100, 2); $amount_received = bcsub($store_total_commission, $service_charge, 2); $commission_params['all_commission'] = $store_total_commission;//总佣金 $commission_arr=[];//佣金计算 //扣除店主分享和用户分享收益 $share_commission=0; $commission_params['store_share_commission'] =0; $commission_params['share_commission'] =0; $commission_params['store_scale']=$setting['store_share_scale']; if (!empty($params['parent_id'])) { $store_parent = HappinessStore::findOne([ ['mall_id' => $params['mall_id']], ['user_id' => $params['parent_id']], ['status' => StatusEnum::ENABLED], ]); if($store_parent && !empty($setting['store_share_scale']) && $params['store_id'] == $store_parent['id']) { //店主分享收益 $share_commission=bcmul($order['pay_money'], bcdiv($setting['store_share_scale'],100,4), 2); $commission_params['store_share_commission']=$share_commission; $commission_arr[]=[ 'user_id'=>$store_parent['user_id'], 'money'=>$share_commission, 'order_id'=>$order['id'], 'order_no'=>$order['order_no'], 'commission_type'=>HappinessRewardEnum::COMMISSION_TYPE_SHARE, 'commission_status'=>HappinessRewardEnum::NO_SETTLE, 'remark'=>'用户('.$store_parent['user_id'].')(店主)获得小店分享收益', 'store_id'=>$params['store_id'], 'mall_id'=>$params['mall_id'], 'order_money' => $order['pay_money'], ]; } else { //用户分享收益 $share_commission=bcmul($order['pay_money'], bcdiv($setting['share_scale'],100,4), 2); $commission_arr[]=[ 'user_id'=>$params['parent_id'], 'money'=>$share_commission, 'order_id'=>$order['id'], 'order_no'=>$order['order_no'], 'commission_type'=>HappinessRewardEnum::COMMISSION_TYPE_SHARE, 'commission_status'=>HappinessRewardEnum::NO_SETTLE, 'remark'=>'用户('.$params['parent_id'].')获得小店分享收益', 'store_id'=>$params['store_id'], 'mall_id'=>$params['mall_id'], 'order_money' => $order['pay_money'], ]; } } $amount_received=bcsub($amount_received,$share_commission,2); $commission_params['amount_received'] = $amount_received;//小店实收货款 //需要扣除店主分享和用户分享收益 $commission_params['service_charge'] = $service_charge; $commission_params['platform_ratio'] = $setting['platform_ratio']; $commission_params['share_commission'] = $share_commission; $commissionService=new CommissionService(['mall_id' => $params['mall_id']]); $commission_arr2=$commissionService->calculateAndRecord($order,$params); $commission_arr=array_merge($commission_arr,$commission_arr2); //维护门店数据 HappinessStore::updateAllCounters(['total_order_money' => $order['pay_money'], 'total_num' => 1, 'unsettled_amount' => $commission_params['amount_received']], ['mall_id' => $params['mall_id'], 'id' => $params['store_id']]); //记录佣金记录 if(!empty($commission_arr)) { foreach ($commission_arr as $value) { $res=$commissionService->record($value); if($res===false) { throw new \Exception($commissionService->getError()); } } } $res = HappinessStoreCommission::setData($commission_params); if (!$res) throw new Exception(HappinessStoreCommission::$static_error); //记录每日数据 $res = HappinessStoreCensus::setData([ 'mall_id' => $params['mall_id'], 'store_id' => $params['store_id'], 'order_nums' => 1, 'sales_money' => $order['pay_money'], 'date_time' => date('Y-m-d', time()), ]); if (!$res) throw new Exception(HappinessStoreCensus::$static_error); $trans->commit(); return true; } catch (\Exception $e) { $trans->rollBack(); \Yii::error($e->getMessage().$e->getFile()); throw new Exception($e->getMessage()); } } //解冻收益 public function frozeCommission($params, $order) { try { $froze_commission_data = HappinessStoreCommission::getOne([ ['mall_id' => $params['mall_id']], ['store_id' => $params['store_id']], ['order_no' => $order['order_no']], ['is_settlement' => 0], ]); if (empty($froze_commission_data)) throw new Exception('查无此收益数据'); $froze_commission_data->is_settlement = 1; //获取门店信息 $store_info = HappinessStore::getOne([ ['mall_id' => $params['mall_id']], ['id' => $params['store_id']], ]); if (empty($store_info)) throw new Exception('查无此门店'); $store_info->total_money += $froze_commission_data->amount_received; $store_info->balance += $froze_commission_data->amount_received; $store_info->total_settled_amount += $froze_commission_data->amount_received; $store_info->unsettled_amount -= $froze_commission_data->amount_received; if (!$froze_commission_data->save()) throw new Exception('维护收益数据失败'); if (!$store_info->save()) throw new Exception('维护门店数据失败'); HappinessStoreStatistics::updateIncomeMoney($store_info, $froze_commission_data->amount_received); //记录每日数据 HappinessStoreCensus::setData([ 'mall_id' => $params['mall_id'], 'store_id' => $params['store_id'], 'date_time' => date('Y-m-d', time()), 'settlement_commission' => $froze_commission_data->amount_received, ]); //记录门店店主小店收益 $commissionService=new CommissionService(['mall_id' => $params['mall_id']]); $store_user_id=HappinessStore::findOne(['mall_id' => $params['mall_id'], 'id' => $params['store_id']])['user_id']; $res=$commissionService->statsItem( [ 'mall_id' => $params['mall_id'], 'store_id' => $params['store_id'], 'order_id' => $order['id'], 'order_no' => $order['order_no'], 'order_money' => $order['pay_money'], 'user_id' => $store_user_id, 'money'=>$froze_commission_data->amount_received ],'store_money'); if (!$res) throw new Exception($commissionService->getError()); return true; } catch (\Exception $e) { \Yii::error($e->getMessage()); throw new Exception($e->getMessage()); } } //售后维护订单数据 public function refundChangeData($params, $order_detail, $order) { $trans = \Yii::$app->db->beginTransaction(); try { //获取收益信息 $commission_data = HappinessStoreCommission::getOne([ ['mall_id' => $params['mall_id']], ['store_id' => $params['store_id']], ['order_no' => $order['order_no']], ['is_settlement' => 0], ]); if (empty($commission_data)) throw new Exception('查无此收益信息'); //获取门店信息 $store_info = HappinessStore::getOne([ ['mall_id' => $params['mall_id']], ['id' => $params['store_id']], ]); //获取下单用户信息 $user_info = HappinessStoreUser::getOne([ ['mall_id' => $params['mall_id']], ['user_id' => $params['user_id']], ['store_id' => $params['store_id']], ]); //如果订单已完全售后完成 if ($order['is_feedback'] == 2) { $store_info->unsettled_amount -= $commission_data->amount_received; $store_info->total_num -= 1; $store_info->total_order_money -= $commission_data->amount_received; $user_info->refund_nums += 1; $user_info->refund_money += $order['pay_money']; $commission_data->is_settlement = -1; } else { //获取marketing数据 $order_marketing = OrderMarketing::getOne([ ['order_detail_id' => $order_detail['id']] ]); // $user_info->refund_money += $order_detail['goods_price']; switch ($commission_data->settle_type) { case 1: //门店商品售价 $amount_received = $order_detail['original_goods_price']; break; case 2: //订单实际支付 $amount_received = $order_detail['goods_price']; break; case 3: //商品成本+运费 $amount_received = $order_detail['cost_price']; break; case 4: //订单实际支付+积分抵扣 $score_money = 0; if (!empty($order_marketing['deduct_currency'])) $score_money = $order_marketing['deduct_currency']['score']['money']; $amount_received = bcadd($order_detail['goods_price'], $score_money, 2); break; } if ($commission_data->service_charge > 0) { $service_charge = bcmul($amount_received, $commission_data->platform_ratio/100, 2); $amount_received = bcsub($amount_received, $service_charge, 2); } $commission_data->amount_received -= $amount_received; $store_info->unsettled_amount -= $amount_received; $store_info->total_order_money -= $amount_received; } if (!$commission_data->save()) throw new Exception('维护资金数据失败'); if (!$user_info->save()) throw new Exception('维护门店用户数据失败'); if (!$store_info->save()) throw new Exception('维护门店数据失败'); //库存退回 $happiness_goods_attr = HappinessStoreGoodsAttr::getOne([ ['mall_id' => $params['mall_id']], ['store_id' => $params['store_id']], ['attr_id' => $order_detail['goods_attr_id']], ['status' => StatusEnum::ENABLED], ['is_on_sale' => 1], ]); $happiness_goods_attr->stock += $order_detail['num']; $happiness_goods_attr->save(); $happiness_goods = HappinessStoreGoods::getOne([ ['mall_id' => $params['mall_id']], ['store_id' => $params['store_id']], ['goods_id' => $order_detail['goods_id']], ['status' => StatusEnum::ENABLED], ['is_on_sale' => 1], ]); $happiness_goods->stock += $order_detail['num']; $happiness_goods->save(); $trans->commit(); return true; } catch (\Exception $e) { $trans->rollBack(); throw new Exception($e->getMessage()); } } }