|
@@ -23,6 +23,9 @@ namespace app\common\command;
|
|
|
use app\common\enum\OrderEnum;
|
|
use app\common\enum\OrderEnum;
|
|
|
use app\common\logic\AccountLogLogic;
|
|
use app\common\logic\AccountLogLogic;
|
|
|
use app\common\model\AccountLog;
|
|
use app\common\model\AccountLog;
|
|
|
|
|
+use app\common\model\DividendCashLog;
|
|
|
|
|
+use app\common\model\DividendOrder;
|
|
|
|
|
+use app\common\model\DividendOrderLog;
|
|
|
use app\common\model\order\Order;
|
|
use app\common\model\order\Order;
|
|
|
use app\common\model\user\User;
|
|
use app\common\model\user\User;
|
|
|
use app\common\server\ConfigServer;
|
|
use app\common\server\ConfigServer;
|
|
@@ -51,7 +54,7 @@ class AwardIntegral extends Command
|
|
|
['award_integral_status', '>', 0],
|
|
['award_integral_status', '>', 0],
|
|
|
['is_award_integral', '=', 0],
|
|
['is_award_integral', '=', 0],
|
|
|
['pay_status', '=', 1]
|
|
['pay_status', '=', 1]
|
|
|
- ])->select()->toArray();
|
|
|
|
|
|
|
+ ])->order('id asc')->select()->toArray();
|
|
|
|
|
|
|
|
foreach ($orders as $order) {
|
|
foreach ($orders as $order) {
|
|
|
if ($order['award_integral'] <= 0) {
|
|
if ($order['award_integral'] <= 0) {
|
|
@@ -69,12 +72,223 @@ class AwardIntegral extends Command
|
|
|
User::where('id',$order['user_id'])->inc('user_integral', $order['award_integral'])->update();
|
|
User::where('id',$order['user_id'])->inc('user_integral', $order['award_integral'])->update();
|
|
|
Order::update(['is_award_integral'=>1,'update_time'=>$time],['id'=>$order['id']]);
|
|
Order::update(['is_award_integral'=>1,'update_time'=>$time],['id'=>$order['id']]);
|
|
|
AccountLogLogic::AccountRecord($order['user_id'], $order['award_integral'], 1, AccountLog::consume_award_integral, '', $order['id'], $order['order_sn']);
|
|
AccountLogLogic::AccountRecord($order['user_id'], $order['award_integral'], 1, AccountLog::consume_award_integral, '', $order['id'], $order['order_sn']);
|
|
|
|
|
+
|
|
|
|
|
+ $this->update_dividend_info($order);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
return true;
|
|
return true;
|
|
|
} catch (\Exception $e) {
|
|
} catch (\Exception $e) {
|
|
|
Log::write('结算消费赠送积分异常:'.$e->getMessage());
|
|
Log::write('结算消费赠送积分异常:'.$e->getMessage());
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ //更新分红信息
|
|
|
|
|
+ protected function update_dividend_info($orders){
|
|
|
|
|
+// outFileLog($orders,'award_integral','orders');
|
|
|
|
|
+ if(empty($orders)) return false;
|
|
|
|
|
+
|
|
|
|
|
+ $dividend_cash = ConfigServer::get('platform_setting', 'dividend_cash', 0);
|
|
|
|
|
+ $dividend_set_money = ConfigServer::get('platform_setting', 'dividend_set_money', 100);
|
|
|
|
|
+ $dividend_rate = ConfigServer::get('platform_setting', 'dividend_rate', 0.04);
|
|
|
|
|
+ $rebate_rate = ConfigServer::get('platform_setting', 'rebate_rate', 0.2);
|
|
|
|
|
+
|
|
|
|
|
+ $change_money = $orders['order_amount']*$dividend_rate;
|
|
|
|
|
+
|
|
|
|
|
+ $total_cash = $dividend_cash+$change_money;
|
|
|
|
|
+
|
|
|
|
|
+ //更新分红池金额
|
|
|
|
|
+ ConfigServer::set('platform_setting', 'dividend_cash', $total_cash);
|
|
|
|
|
+
|
|
|
|
|
+ //添加分红池记录
|
|
|
|
|
+ $this->addDividendCashLog($change_money,$orders['id'],1,$total_cash,'订单【'.$orders['order_sn'].'】增加分红池金额');
|
|
|
|
|
+
|
|
|
|
|
+ //检查方法分红奖励
|
|
|
|
|
+
|
|
|
|
|
+ $this->sendDividendCash();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //增加排队列表
|
|
|
|
|
+ $linret = $this->lineUp($orders,$dividend_set_money,$rebate_rate);
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ //增加分红池资金变化记录
|
|
|
|
|
+ public function addDividendCashLog($change_money,$order_id,$change_type,$dividend_cash,$remark,$shop_id=0){
|
|
|
|
|
+ $saveData['change_type'] = $change_type;
|
|
|
|
|
+ $saveData['order_id'] = $order_id;
|
|
|
|
|
+ $saveData['change_money'] = $change_money;
|
|
|
|
|
+ $saveData['total_money'] = $dividend_cash;
|
|
|
|
|
+ $saveData['remark'] = $remark;
|
|
|
|
|
+ $saveData['shop_id'] = $shop_id;
|
|
|
|
|
+ $ret = DividendCashLog::create($saveData);
|
|
|
|
|
+ return $ret;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //开始进入排队
|
|
|
|
|
+ protected function lineUp($order,$dividend_set_money=100,$rebate_rate=0.2){
|
|
|
|
|
+ $rated_money = ConfigServer::get('platform_setting', 'rated_money', 3000);//大额额定金额
|
|
|
|
|
+ $rated_money_rate = ConfigServer::get('platform_setting', 'rated_money_rate', 0.04);//大额分红额定比例
|
|
|
|
|
+ $order_money = $order['order_amount'];
|
|
|
|
|
+ if($order_money >= $rated_money){
|
|
|
|
|
+ $dividend_set_money = round($order_money*$rated_money_rate,2); //分红额定金额
|
|
|
|
|
+ }
|
|
|
|
|
+ $count = ceil($order_money/$dividend_set_money);
|
|
|
|
|
+// outFileLog($count,'award_integral','$count');
|
|
|
|
|
+ if($count>1){
|
|
|
|
|
+ $dividend_money = 0; //当前计入分红额度
|
|
|
|
|
+ for($i = 0 ;$i<$count ;$i++){
|
|
|
|
|
+ $j = $i+1;
|
|
|
|
|
+
|
|
|
|
|
+ $flag_money = $dividend_set_money*$j;
|
|
|
|
|
+
|
|
|
|
|
+ if($flag_money<$order_money){
|
|
|
|
|
+ $dividend_money = $dividend_set_money;
|
|
|
|
|
+ }else{
|
|
|
|
|
+ $dividend_money = $order_money-$dividend_set_money*$i;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if($j<10){
|
|
|
|
|
+ $sn = $order['order_sn'].'0'.$j;
|
|
|
|
|
+ }else{
|
|
|
|
|
+ $sn = $order['order_sn'].$j;
|
|
|
|
|
+ }
|
|
|
|
|
+ $this->createDividendOrder($order,$dividend_money,$rebate_rate,$dividend_set_money,$sn);
|
|
|
|
|
+ }
|
|
|
|
|
+ }else{
|
|
|
|
|
+ $sn=$order['order_sn'].'01';
|
|
|
|
|
+ $this->createDividendOrder($order,$order_money,$rebate_rate,$dividend_set_money,$sn);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //创建排队信息
|
|
|
|
|
+ /*
|
|
|
|
|
+ * $money 计算进入分红的金额
|
|
|
|
|
+ * $dividend_set_money 分红额定金额 满了结束排队
|
|
|
|
|
+ * */
|
|
|
|
|
+ public function createDividendOrder($order,$money,$rebate_rate,$dividend_set_money=100,$sn){
|
|
|
|
|
+
|
|
|
|
|
+ //给排队第一个人加佣金
|
|
|
|
|
+
|
|
|
|
|
+ $dowhere['status'] = 0;
|
|
|
|
|
+ $doOrder = DividendOrder::where($dowhere)->order('id asc')->select()->toArray();
|
|
|
|
|
+ if($doOrder){
|
|
|
|
|
+
|
|
|
|
|
+ //插入排队表信息
|
|
|
|
|
+ $this->createData($order,0,$dividend_set_money,$sn);
|
|
|
|
|
+
|
|
|
|
|
+ $change_money = round($money*$rebate_rate,2);
|
|
|
|
|
+ foreach($doOrder as &$dov){
|
|
|
|
|
+ if($change_money<=0) break;
|
|
|
|
|
+ $diff_money = $dov['rated_money'] - $dov['money'];
|
|
|
|
|
+ if($diff_money>=$change_money){
|
|
|
|
|
+ //变动金额达不到排队订单完结状态
|
|
|
|
|
+ $this->updateUserDividendOrder($dov,$change_money,$order,$dividend_set_money,0);
|
|
|
|
|
+ $change_money = 0;
|
|
|
|
|
+ }else{
|
|
|
|
|
+ //当前排队订单完结
|
|
|
|
|
+ $change_money = $change_money-$diff_money;
|
|
|
|
|
+ $this->updateUserDividendOrder($dov,$diff_money,$order,$dividend_set_money,1);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }else {
|
|
|
|
|
+ $data_money = round($money * $rebate_rate, 2);
|
|
|
|
|
+ $this->createData($order,$data_money,$dividend_set_money,$sn);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return true ;
|
|
|
|
|
+ }
|
|
|
|
|
+ //插入排队信息以及记录
|
|
|
|
|
+ protected function createData($order,$money,$dividend_set_money,$sn=''){
|
|
|
|
|
+ //插入排队表信息
|
|
|
|
|
+ $saveDividendOrderData['sn'] = $sn;
|
|
|
|
|
+ $saveDividendOrderData['user_id'] = $order['user_id'];
|
|
|
|
|
+ $saveDividendOrderData['order_id'] = $order['id'];
|
|
|
|
|
+ $saveDividendOrderData['rated_money'] = $dividend_set_money;
|
|
|
|
|
+ $saveDividendOrderData['money'] = $money;
|
|
|
|
|
+ $saveDividendOrderData['status'] = 0;
|
|
|
|
|
+
|
|
|
|
|
+ $addret = DividendOrder::create($saveDividendOrderData);
|
|
|
|
|
+
|
|
|
|
|
+ $do_id = $addret['id'];
|
|
|
|
|
+
|
|
|
|
|
+ $saveLogData['do_id'] = $do_id;
|
|
|
|
|
+ $saveLogData['order_id'] = $order['id'];
|
|
|
|
|
+ $saveLogData['money'] = $money;
|
|
|
|
|
+ DividendOrderLog::create($saveLogData);
|
|
|
|
|
+
|
|
|
|
|
+ return true ;
|
|
|
|
|
+ }
|
|
|
|
|
+ //更新排队订单信息
|
|
|
|
|
+ public function updateUserDividendOrder($order,$change_money,$from_order,$dividend_set_money,$flag){
|
|
|
|
|
+ $order_id = $from_order['id'];
|
|
|
|
|
+ $id = $order['id'];
|
|
|
|
|
+ $total_money = $order['money'] + $change_money;
|
|
|
|
|
+
|
|
|
|
|
+ if($flag){
|
|
|
|
|
+ //达到分红金额,排队结束,并扣减积分,钱转入可提现余额
|
|
|
|
|
+ $updateDividendOrderData['status'] = 1;
|
|
|
|
|
+ $dividend_cash = ConfigServer::get('platform_setting', 'dividend_cash', 0);
|
|
|
|
|
+ if($dividend_cash>=$dividend_set_money){
|
|
|
|
|
+ $updateDividendOrderData['is_exchange'] = 1;
|
|
|
|
|
+ $this->changeIntegral($order,$order['user_id'],$order['rated_money']);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ $updateDividendOrderData['money'] = $total_money;
|
|
|
|
|
+ $updateDividendOrderData['update_time'] = time();
|
|
|
|
|
+ DividendOrder::where(['id'=>$id])->update($updateDividendOrderData);
|
|
|
|
|
+
|
|
|
|
|
+ $saveLogData['do_id'] = $id;
|
|
|
|
|
+ $saveLogData['order_id'] = $order_id;
|
|
|
|
|
+ $saveLogData['money'] = $change_money;
|
|
|
|
|
+ DividendOrderLog::create($saveLogData);
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public function sendDividendCash(){
|
|
|
|
|
+ $dividend_cash = ConfigServer::get('platform_setting', 'dividend_cash', 0);
|
|
|
|
|
+ $dowhere['status'] = 1;
|
|
|
|
|
+ $dowhere['is_exchange'] = 0;
|
|
|
|
|
+ $doOrder = DividendOrder::where($dowhere)->order('id asc')->select()->toArray();
|
|
|
|
|
+ foreach ($doOrder as &$dov){
|
|
|
|
|
+ if($dividend_cash >= $dov['rated_money']){
|
|
|
|
|
+ $this->changeIntegral($dov,$dov['user_id'],$dov['rated_money']);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ /*
|
|
|
|
|
+ *
|
|
|
|
|
+ * $change_integral 变动积分 额定金额
|
|
|
|
|
+ * */
|
|
|
|
|
+ public function changeIntegral($order,$user_id,$change_integral){
|
|
|
|
|
+ //减少分红池金额
|
|
|
|
|
+ $dividend_cash = ConfigServer::get('platform_setting', 'dividend_cash', 0);
|
|
|
|
|
+ $new_dividend_cash = $dividend_cash - $change_integral;
|
|
|
|
|
+ if($new_dividend_cash < 0 ) return true;
|
|
|
|
|
+// outFileLog($new_dividend_cash,'award_integral','$total_cash2');
|
|
|
|
|
+ ConfigServer::set('platform_setting', 'dividend_cash', $new_dividend_cash);
|
|
|
|
|
+ //扣减积分
|
|
|
|
|
+ $user_info = User::find($user_id);
|
|
|
|
|
+ $user_info->user_integral = $user_info->user_integral - $change_integral;
|
|
|
|
|
+ $user_info->earnings = $user_info->earnings + $change_integral;
|
|
|
|
|
+ $user_info->save();
|
|
|
|
|
+ //扣减积分记录
|
|
|
|
|
+ AccountLogLogic::AccountRecord($order['user_id'], $change_integral, 2, AccountLog::integral_dividend, '分红池分红奖金提现消耗积分', $order['id'], '');
|
|
|
|
|
+
|
|
|
|
|
+ //增加佣金
|
|
|
|
|
+ AccountLogLogic::AccountRecord($user_id,$change_integral,1,AccountLog::dividend_inc_earnings, '分红池分红增加佣金', $order['id']);
|
|
|
|
|
+
|
|
|
|
|
+ //添加分红池记录
|
|
|
|
|
+ $this->addDividendCashLog($change_integral,$order['id'],2,$new_dividend_cash,'分红订单【'.$order['sn'].'】分红后减少分红池金额');
|
|
|
|
|
+
|
|
|
|
|
+ //更新排队订单的支付状态
|
|
|
|
|
+ $updateDividendOrderData['is_exchange'] = 1;
|
|
|
|
|
+ $updateDividendOrderData['update_time'] = time();
|
|
|
|
|
+ DividendOrder::where(['id'=>$order['id']])->update($updateDividendOrderData);
|
|
|
|
|
+
|
|
|
|
|
+ return true ;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|