|
|
@@ -19,6 +19,7 @@ use common\helpers\user\Status;
|
|
|
use common\libs\api\sms\SmsApi;
|
|
|
use common\libs\swoole\Process;
|
|
|
use common\models\DealType;
|
|
|
+use common\models\FlowRemainPv;
|
|
|
use common\models\PerfPeriod;
|
|
|
use common\models\DecOrder;
|
|
|
use common\models\EmployLevel;
|
|
|
@@ -31,6 +32,8 @@ use common\models\UserPerf;
|
|
|
use common\models\UserPerfUpdate;
|
|
|
use common\models\UserTeamwork;
|
|
|
use common\models\YearHighestEmpLv;
|
|
|
+use common\models\Order;
|
|
|
+use common\models\RemainPv;
|
|
|
use yii\base\BaseObject;
|
|
|
use yii\base\StaticInstanceTrait;
|
|
|
use common\helpers\Cache;
|
|
|
@@ -121,6 +124,69 @@ class BonusSend extends BaseObject {
|
|
|
return $this->_errors;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 挂网时处理虚假订单
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public function putFakeOrder() {
|
|
|
+ echo('开始处理-假订单' . PHP_EOL);
|
|
|
+ $sysConfig = Cache::getSystemConfig();
|
|
|
+ $mesureUpCondition = $sysConfig['monthPcsPvFxCondition']['VALUE']; // 月达标条件 NC默认300
|
|
|
+ $fakeOrder= Order::find()->where(['PERIOD_NUM'=>$this->_periodNum, 'IS_AUTO'=>'1'])->asArray()->all();
|
|
|
+// print_r($fakeOrder);exit;
|
|
|
+ foreach($fakeOrder as $fOrder){
|
|
|
+ $oRemainPv=RemainPv::findOne(["USER_ID"=>$fOrder['USER_ID']]);
|
|
|
+ $transactionRemain = \Yii::$app->db->beginTransaction();
|
|
|
+ try{
|
|
|
+ $flowRemainPvModel = new FlowRemainPv();
|
|
|
+ $flowRemainPvModel->ID = $this->_generateSn();
|
|
|
+ $flowRemainPvModel->USER_ID = $fOrder['USER_ID'];
|
|
|
+ $flowRemainPvModel->REMAIN_PV_FLOW = 0 - $mesureUpCondition;
|
|
|
+ $flowRemainPvModel->REMAIN_PV_TOTAL = $oRemainPv->REMAIN_PV - $mesureUpCondition;
|
|
|
+ $flowRemainPvModel->PERIOD_NUM = $this->_periodNum;
|
|
|
+ $flowRemainPvModel->UPDATED_AT = Date::nowTime();
|
|
|
+ $flowRemainPvModel->ORDER_SN = $fOrder['SN'];
|
|
|
+ if(!$flowRemainPvModel->save()){
|
|
|
+ $this->addErrors($flowRemainPvModel->getErrors());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $oRemainPv->updateCounters(['REMAIN_PV'=> 0 - $mesureUpCondition]);
|
|
|
+ $transactionRemain->commit();
|
|
|
+ } catch (Exception $e) {
|
|
|
+ $transactionRemain->rollBack();
|
|
|
+ $this->addError('add', $e->getMessage());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ echo('假订单处理完' . PHP_EOL);
|
|
|
+ return true; // $flowRemainPvModel;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 生成流水号
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ private function _generateSn() {
|
|
|
+ return Date::today('Ymd') . $this->_random(10, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成随机数
|
|
|
+ * @param $length
|
|
|
+ * @param int $numeric
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ private function _random($length, $numeric = 0) {
|
|
|
+ $seed = base_convert(md5(microtime() . $_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
|
|
|
+ $seed = $numeric ? (str_replace('0', '', $seed) . '012340567890') : ($seed . 'zZ' . strtoupper($seed));
|
|
|
+ $hash = '';
|
|
|
+ $max = strlen($seed) - 1;
|
|
|
+ for ($i = 0; $i < $length; $i++) {
|
|
|
+ $hash .= $seed[mt_rand(0, $max)];
|
|
|
+ }
|
|
|
+ return $hash;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 进行奖金发放步骤
|
|
|
* @return bool
|
|
|
@@ -130,6 +196,11 @@ class BonusSend extends BaseObject {
|
|
|
$t1 = microtime(true);
|
|
|
// 初始化
|
|
|
$this->initTask();
|
|
|
+ echo('挂网开始');
|
|
|
+ $this->putFakeOrder();
|
|
|
+ // 先把有remainPv的订单处理一下,将remainPv加入到remain_pv及流水表
|
|
|
+ echo('处理当期REMAIN PV ' . date('Y-m-d H:i:s', time()) . PHP_EOL);
|
|
|
+ $this->_calcRemainPv();
|
|
|
$t2 = microtime(true);
|
|
|
echo('初始化完成,当前期数【' . $this->_periodNum . '】,耗时:' . round($t2 - $t1, 3) . ',内存使用:' . (round(memory_get_usage() / 1024 / 1024, 3)) . 'MB' . PHP_EOL);
|
|
|
// 改变状态
|
|
|
@@ -195,6 +266,56 @@ class BonusSend extends BaseObject {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 处理order表中有remain_pv的订单
|
|
|
+ * 将结果写入到remainPv相关表中
|
|
|
+ *
|
|
|
+ */
|
|
|
+ private function _calcRemainPv(){
|
|
|
+ $orders = Order::find()->where('PERIOD_NUM=:PERIOD_NUM AND REMAIN_PV>0 AND IS_DELETE=0',[':PERIOD_NUM'=>$this->_periodNum])->asArray()->all();
|
|
|
+ foreach($orders as $order){
|
|
|
+ $oRemainPv = RemainPv::find()->where(['USER_ID' => $order['USER_ID']])->one();
|
|
|
+
|
|
|
+ $transactionRemain = \Yii::$app->db->beginTransaction();
|
|
|
+ try{
|
|
|
+ $flowRemainPvModel = new FlowRemainPv();
|
|
|
+ $flowRemainPvModel->ID = $this->_generateSn();
|
|
|
+ $flowRemainPvModel->USER_ID = $order['USER_ID'];
|
|
|
+ $flowRemainPvModel->REMAIN_PV_FLOW = $order['REMAIN_PV'];
|
|
|
+ $flowRemainPvModel->REMAIN_PV_TOTAL = $oRemainPv['REMAIN_PV'] + $order['REMAIN_PV'];
|
|
|
+ $flowRemainPvModel->PERIOD_NUM = $this->_periodNum;
|
|
|
+ $flowRemainPvModel->UPDATED_AT = Date::nowTime();
|
|
|
+ $flowRemainPvModel->ORDER_SN = $order['SN'];
|
|
|
+ if(!$flowRemainPvModel->save()){
|
|
|
+ $this->addErrors($flowRemainPvModel->getErrors());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $oRemainPv = RemainPv::find()->where(['USER_ID' => $order['USER_ID']])->one();
|
|
|
+ if($oRemainPv){
|
|
|
+ $oRemainPv->updateCounters(['REMAIN_PV'=>$order['REMAIN_PV']]);
|
|
|
+ }else{
|
|
|
+ $remainPvModel = new RemainPv();
|
|
|
+ $remainPvModel->ID = $this->_generateSn();
|
|
|
+ $remainPvModel->USER_ID = $order['USER_ID'];
|
|
|
+ $remainPvModel->UPDATED_AT = Date::nowTime();
|
|
|
+ $remainPvModel->REMAIN_PV = $order['REMAIN_PV'];
|
|
|
+ $remainPvModel->STATUS = 1;
|
|
|
+ if(!$remainPvModel->save()){
|
|
|
+ $this->addErrors($remainPvModel->getErrors());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $transactionRemain->commit();
|
|
|
+ } catch (Exception $e) {
|
|
|
+ $transactionRemain->rollBack();
|
|
|
+ $this->addError('add', $e->getMessage());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 需要多进程执行的任务
|
|
|
* @param $workId
|