| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523 |
- <?php
- namespace app\modules\client\models\v1\shareGroup;
- use app\models\Cash;
- use app\models\Cat;
- use app\models\Goods;
- use app\models\GoodsCat;
- use app\models\Option;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\Qrcode;
- use app\models\SaasUser;
- use app\models\ShareGroupMoney;
- use app\models\ShareGroupMoneySub;
- use app\models\ShareGroupPurchaseParentLog;
- use app\models\ShareGroupPurchaseUser;
- use app\models\ShareGroupSupportLog;
- use app\models\User;
- use app\models\UserShareMoney;
- use app\modules\client\models\v1\ShareQrcodeForm;
- use yii\base\Model;
- class GroupPurchaseForm extends Model
- {
- public $store_id;
- public $user_id;
- public $saas_id;
- public $id;
- public $status;
- public function rules()
- {
- return [
- [['store_id', 'user_id', 'saas_id', 'id', 'status'], 'integer'],
- [['status'], 'in', 'range' => [-1, 0, 1]]
- ];
- }
- //拼团区中心
- public function groupPurchaseCenter() {
- try {
- $store_id = $this->store_id;
- $user_id = $this->user_id;
- $saas_id = $this->saas_id;
- $user = User::findOne($user_id);
- $saasUser = SaasUser::findOne($saas_id);
- $shareGroupPurchaseUser = ShareGroupPurchaseUser::findOne(['user_id' => $user_id]);
- //用户头像、昵称、上级名称
- $parent_user_info = User::find()->alias('u')
- ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')
- ->where(['u.id' => $shareGroupPurchaseUser->parent_user_id ?? 0, 'u.is_delete' => 0, 'su.is_delete' => 0])
- ->select('su.name')->asArray()->one();
- $user_info = [
- 'name' => $saasUser->name,
- 'avatar' => $saasUser->avatar,
- 'parent_name' => $parent_user_info['name'] ?? '',
- 'share_code' => ''
- ];
- //用户分享码
- try {
- $form = new ShareQrcodeForm();
- $form->store_id = $store_id;
- $form->type = Qrcode::TYPE_GROUP_PURCHASE;
- $form->user_id = $this->user_id;
- $result = $form->search();
- if ($result['code']) {
- throw new \Exception($result['msg']);
- }
- $user_info['share_code'] = $result['data'];
- } catch (\Exception $e) {
- debug_log([
- 'code' => $e->getCode(),
- 'message' => $e->getMessage(),
- 'file' => $e->getFile(),
- 'line' => $e->getLine(),
- ], 'group_purchase_qrcode.log');
- }
- //用户佣金 可提现佣金
- $wait_cash_amount = $user->price >= $shareGroupPurchaseUser->price ? $shareGroupPurchaseUser->price : $user->price;
- //用户佣金 未到账佣金
- $no_send_amount = ShareGroupMoney::find()->where(['user_id' => $user_id, 'is_send' => 0])
- ->select('amount')->sum('amount') ?: '0.00';
- //用户佣金 已提现佣金
- $cash_amount = Cash::find()->where(['user_id' => $user_id, 'cash_type' => Cash::IS_CASH_TYPE_SHARE_GROUP_PURCHASE, 'status' => [
- Cash::STATUS_GIVEN,
- Cash::STATUS_HAND,
- Cash::STATUS_RECHARGE
- ]])
- ->select('price')->sum('price') ?: '0.00';
- //用户佣金 冻结佣金
- $freeze_amount = ShareGroupMoney::find()->where(['user_id' => $user_id, 'is_freeze' => 1, 'is_send_freeze' => 0])
- ->select('freeze_amount')->sum('freeze_amount') ?: '0.00';
- $no_freeze_amount = ShareGroupMoney::find()->where(['user_id' => $user_id, 'is_freeze' => 1, 'is_send_freeze' => 1])
- ->select('freeze_amount')->sum('freeze_amount') ?: '0.00';
- //用户佣金 累计佣金
- $total_amount = bcadd(
- $wait_cash_amount,
- bcadd($cash_amount,
- bcadd($no_send_amount,
- bcadd($freeze_amount, $no_freeze_amount, 2), 2)
- , 2)
- , 2);
- return [
- 'code' => 0,
- 'msg' => '',
- 'data' => [
- 'is_group_purchase_user' => !empty($shareGroupPurchaseUser),
- 'user_info' => $user_info,
- 'wait_cash_amount' => $wait_cash_amount,//可提现佣金
- 'no_send_amount' => $no_send_amount,//未到账佣金
- 'cash_amount' => $cash_amount,//已提现佣金
- 'freeze_amount' => $freeze_amount,//冻结佣金
- 'total_amount' => $user->total_price ?? 0//$total_amount,//累计佣金
- ]
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- //拼购区商品
- public function goodsList() {
- try {
- $store_id = $this->store_id;
- $share_group_setting = Option::get('share_group_setting', $store_id, 'share_group')['value'];
- $share_group_setting = json_decode($share_group_setting ?? '', true);
- $goods_ids = explode(',', $share_group_setting['goods_ids'] ?? '');
- $query = Goods::find()->where(['id' => $goods_ids ?: [0], 'is_delete' => 0, 'store_id' => $store_id])
- ->select('id, name, cover_pic, price, virtual_sales')->orderBy('sort desc');
- $list = pagination_make($query);
- foreach ($list['list'] as &$item) {
- $goods_cat = GoodsCat::find()->alias('gc')
- ->leftJoin(['c' => Cat::tableName()], 'gc.cat_id=c.id')
- ->where([ 'gc.goods_id' => $item['id'], 'c.is_delete' => 0, 'gc.is_delete' => 0, 'c.store_id' => $store_id])
- ->select(['c.name'])
- ->column();
- $item['cat'] = implode(' ', $goods_cat);
- $goodsModel = new Goods();
- $goodsModel->id = $item['id'];
- $item['sales_num'] = $goodsModel->getSalesVolume() + $item['virtual_sales'];
- }
- return [
- 'code' => 0,
- 'msg' => '',
- 'data' => $list
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- //我的拼购订单
- public function groupPurchaseOrder() {
- try {
- $user_id = $this->user_id;
- $query = ShareGroupPurchaseParentLog::find()->alias('s')
- ->leftJoin(['o' => Order::tableName()], 's.order_id = o.id')
- ->where(['s.user_id' => $user_id])->select('s.id, o.order_no, o.created_at, s.is_repeat, s.order_detail_id')
- ->orderBy('s.id ASC');
- $list = pagination_make($query);
- foreach ($list['list'] as &$item) {
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- //查询当前团下级订单数量
- $num = 0;
- $direct_child_group_purchase_id = ShareGroupPurchaseParentLog::find()->where(['parent_id' => $item['id']])
- ->select('id')->column();
- if ($direct_child_group_purchase_id) {
- $num += count($direct_child_group_purchase_id);
- $child_group_purchase_id = ShareGroupPurchaseParentLog::find()->where(['parent_id' => $direct_child_group_purchase_id])
- ->select('id')->column();
- $num += count($child_group_purchase_id);
- }
- $item['num'] = $num;
- //查询是否完成成团
- $is_has_group = ShareGroupMoney::findOne(['type' => ShareGroupMoney::TYPE_GROUP, 'type_id' => $item['id']]);
- $item['is_finish'] = !empty($is_has_group);
- //查询商品信息
- $order_detail_id = explode(',', $item['order_detail_id']);
- $item['goods_list'] = OrderDetail::find()->where(['id' => $order_detail_id, 'is_delete' => 0])
- ->select('goods_id, total_price, goods_name, num, pic, attr')->asArray()->all();
- foreach ($item['goods_list'] as &$goods_item) {
- $goods_item['attr'] = json_decode($goods_item['attr'], true);
- }
- }
- return [
- 'code' => 0,
- 'msg' => '',
- 'data' => $list
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- //获取参团详情
- public function groupPurchaseDetail() {
- try {
- $id = $this->id;
- $direct_child_group_purchase_id = ShareGroupPurchaseParentLog::find()->where(['parent_id' => $id])
- ->select('id')->column();
- if ($direct_child_group_purchase_id) {
- $child_group_purchase_id = ShareGroupPurchaseParentLog::find()->where(['parent_id' => $direct_child_group_purchase_id])
- ->select('id')->column();
- if ($child_group_purchase_id) {
- $direct_child_group_purchase_id = array_merge($direct_child_group_purchase_id, $child_group_purchase_id);
- }
- }
- $query = ShareGroupPurchaseParentLog::find()->alias('s')
- ->leftJoin(['o' => Order::tableName()], 's.order_id = o.id')
- ->where(['s.id' => $direct_child_group_purchase_id])
- ->select('s.id, o.order_no, o.created_at, s.order_detail_id, o.trade_status, o.user_id');
- $list = pagination_make($query);
- foreach ($list['list'] as &$item) {
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- $item['trade_status'] = intval($item['trade_status']);
- $item['trade_status_text'] = Order::TRADE_STATUS_TEXT[$item['trade_status']];
- $item['user_info'] = User::find()->alias('u')
- ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')
- ->where(['u.id' => $item['user_id'], 'u.is_delete' => 0, 'su.is_delete' => 0])
- ->select('su.name, su.avatar, su.mobile')->asArray()->one();
- //查询商品信息
- $order_detail_id = explode(',', $item['order_detail_id']);
- $item['goods_list'] = OrderDetail::find()->where(['id' => $order_detail_id, 'is_delete' => 0])
- ->select('goods_id, total_price, goods_name, num, pic, attr')->asArray()->all();
- foreach ($item['goods_list'] as &$goods_item) {
- $goods_item['attr'] = json_decode($goods_item['attr'], true);
- }
- }
- return [
- 'code' => 0,
- 'msg' => '',
- 'data' => $list
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- //冻结金额
- public function freezeMoney() {
- try {
- $user_id = $this->user_id;
- //冻结金额
- $money = ShareGroupMoney::find()->where(['user_id' => $user_id, 'is_freeze' => 1, 'is_send_freeze' => 0])
- ->sum('freeze_amount') ?: '0.00';
- $group_purchase_parent = ShareGroupPurchaseParentLog::findOne(['user_id' => $user_id]);
- //直推会员
- $direct_child_group_purchase_id = ShareGroupPurchaseParentLog::find()->where([
- 'parent_user_id' => $user_id,
- 'batch_id' => $group_purchase_parent->batch_id ?: $group_purchase_parent->id
- ])->select('user_id, batch_id')->groupBy('user_id')->asArray()->all();
- $data = [];
- foreach ($direct_child_group_purchase_id as $index => $item) {
- $data[$index]['user_info'] = User::find()->alias('u')
- ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')
- ->where(['u.id' => $item['user_id'], 'u.is_delete' => 0, 'su.is_delete' => 0])
- ->select('su.name, su.avatar, su.mobile')->asArray()->one();
- $child_group_purchase_count = ShareGroupPurchaseParentLog::find()->where([
- 'parent_user_id' => $item['user_id'],
- 'batch_id' => $item['batch_id']
- ])->groupBy('user_id')->select('user_id')->count() ?: 0;
- $data[$index]['is_qualify'] = false;
- if ($child_group_purchase_count >= 2) {
- $data[$index]['is_qualify'] = true;
- }
- }
- return [
- 'code' => 0,
- 'msg' => '',
- 'data' => [
- 'freeze_amount' => $money,
- 'user_info' => $data
- ]
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- //佣金详情
- public function freezeMoneyList()
- {
- try {
- $status = $this->status;
- $query = ShareGroupMoney::find()->alias('sm')
- ->leftJoin(['s' => ShareGroupSupportLog::tableName()], 's.id = sm.type_id')
- ->leftJoin(['o' => Order::tableName()], 's.order_id = o.id')
- ->where([
- 'sm.is_freeze' => 1,
- 'sm.user_id' => $this->user_id
- ]);
- if (isset($status) && in_array($status, [0, 1])) {
- $query->andWhere(['sm.is_send_freeze' => $status]);
- }
- $query->select('sm.id, sm.freeze_amount, sm.is_send_freeze, sm.created_at, o.order_no, sm.type, s.user_id, sm.freeze_send_time')
- ->orderBy('sm.created_at desc');
- $list = pagination_make($query);
- foreach ($list['list'] as &$item) {
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- $item['freeze_send_time'] = $item['freeze_send_time'] ? date('Y-m-d H:i:s', $item['freeze_send_time']) : '';
- $user_info = User::find()->alias('u')
- ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')
- ->where(['u.id' => $item['user_id'], 'u.is_delete' => 0, 'su.is_delete' => 0])
- ->select('su.name')->asArray()->one();
- $item['desc'] = $user_info['name'] . $item['order_no'] . '产生佣金';
- $item['type'] = intval($item['type']);
- $item['is_send_freeze'] = intval($item['is_send_freeze']);
- }
- return [
- 'code' => 0,
- 'msg' => '',
- 'data' => $list
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- //佣金明细
- public function moneyList() {
- try {
- $status = $this->status;
- $user_id = $this->user_id;
- $query = ShareGroupMoney::find()->where(['user_id' => $user_id, 'profit_type' => ShareGroupMoney::PROFIT_TYPE_COMMON]);
- if (isset($status) && in_array($status, [0, 1])) {
- $query->andWhere(['is_send' => $status]);
- }
- $query->andWhere(['OR', ['>', 'amount', 0], ['AND', ['>', 'freeze_amount', 0], ['is_send_freeze' => 1]]]);
- $query->orderBy('id desc')
- ->select('id, type, type_id, created_at, amount, is_send, send_time, freeze_amount, is_send_freeze, is_freeze, order_id');
- $list = pagination_make($query);
- foreach ($list['list'] as $index => &$item) {
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- $item['send_time'] = $item['send_time'] ? date('Y-m-d H:i:s', $item['send_time']) : '';
- if (intval($item['type']) === ShareGroupMoney::TYPE_DIRECT) {
- $shareGroupPurchaseParentLog = ShareGroupPurchaseParentLog::findOne($item['type_id']);
- // if ($shareGroupPurchaseParentLog) {
- $order = Order::findOne($item['order_id']);
- $user_info = User::find()->alias('u')
- ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')
- ->where(['u.id' => $shareGroupPurchaseParentLog->user_id, 'u.is_delete' => 0, 'su.is_delete' => 0])
- ->select('su.name')->asArray()->one();
- $item['desc'] = $user_info['name'] . $order->order_no . '产生佣金';
- // }
- } elseif (intval($item['type']) === ShareGroupMoney::TYPE_SUPPORT) {
- $shareGroupSupportLog = ShareGroupSupportLog::findOne($item['type_id']);
- // if ($shareGroupSupportLog) {
- $order = Order::findOne($item['order_id']);
- $user_info = User::find()->alias('u')
- ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')
- ->where(['u.id' => $shareGroupSupportLog->user_id, 'u.is_delete' => 0, 'su.is_delete' => 0])
- ->select('su.name')->asArray()->one();
- $item['desc'] = $user_info['name'] . $order->order_no . '产生佣金';
- if ($item['is_freeze']) {
- if (intval($item['is_send_freeze'])) {
- $item['amount'] = bcadd($item['amount'], $item['freeze_amount'], 2);
- $item['desc'] .= "(包含冻结".$item['freeze_amount'].")";
- }
- }
- // }
- } else {
- $item['desc'] = '拼购区成团产生佣金';
- $shareGroupMoneySubAmount = ShareGroupMoneySub::find()->where(['share_money_id' => $item['id'], 'is_send' => 1])->sum('amount');
- if ($shareGroupMoneySubAmount > 0) {
- $item['desc'] .= "(已发放".$shareGroupMoneySubAmount.")";
- }
- }
- $item['type'] = intval($item['type']);
- $item['is_send'] = intval($item['is_send']);
- unset($list['list'][$index]['is_freeze'], $list['list'][$index]['is_send_freeze'], $list['list'][$index]['freeze_amount']);
- }
- return [
- 'code' => 0,
- 'msg' => '',
- 'data' => $list
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- //帮扶区
- public function supportList() {
- try {
- $user_id = $this->user_id;
- $query = ShareGroupSupportLog::find()->alias('s')
- ->leftJoin(['u' => User::tableName()], 's.user_id = u.id')
- ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding')
- ->where(['s.parent_user_id' => $user_id])
- ->select('su.mobile, su.name, su.avatar, s.id, s.created_at, s.user_id')
- ->orderBy('s.id desc');
- $list = pagination_make($query);
- foreach ($list['list'] as &$item) {
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- $ShareGroupPurchaseUser = ShareGroupPurchaseUser::find()->where(['parent_user_id' => $item['user_id']])
- ->select('user_id')->column();
- $item['num'] = ShareGroupSupportLog::find()->where(['user_id' => $ShareGroupPurchaseUser])
- ->select('id')->count() ?: 0;
- }
- return [
- 'code' => 0,
- 'msg' => '',
- 'data' => $list
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- }
|