Commit ee7abe77 authored by shajiaiming's avatar shajiaiming

Merge branch 'feature/airdrop' into 'master'

Feature/airdrop See merge request !371
parents 3d7c8c25 17359c5f
......@@ -3,6 +3,7 @@
namespace api\controllers;
use api\base\BaseController;
use common\models\psources\CoinAirDropTransfer;
use common\models\psources\CoinPlatformCoins;
use Yii;
......@@ -25,32 +26,42 @@ class PlatformCoinsController extends BaseController
$header = Yii::$app->request->headers;
$deviceCode = $header['FZM-REQUEST-UUID'] ?? null;
if(empty($platform_id) || empty($coins_address) || empty($type)){
return ['code' => -1,'data' => null, 'msg' => '缺少必要的参数'];
if (empty($platform_id) || empty($coins_address) || empty($type)) {
return ['code' => -1, 'data' => null, 'msg' => '缺少必要的参数'];
}
if(empty($deviceCode)){
return ['code' => 0,'data' => null, 'msg' => '数据导入成功'];
if (empty($deviceCode)) {
return ['code' => 0, 'data' => null, 'msg' => '数据导入成功'];
}
$is_exist = true;
if (41 == $platform_id) {
$model = CoinPlatformCoins::find()->where(['platform_id' => $platform_id, 'deviceCode' => $deviceCode])->one();
if (!$model) {
$is_exist = false;
}
}
$item_array = [];
foreach($coins_address as $item){
$to_address = '';
foreach ($coins_address as $item) {
$platform_coins_arr = explode(',', $item);
$coin_name = $platform_coins_arr[0];
$coins_address = $platform_coins_arr[1];
if(empty($coin_name) || empty($coins_address)) continue;
$to_address = $coins_address;
if (empty($coin_name) || empty($coins_address)) continue;
$isExistModel = CoinPlatformCoins::find()->where(['coins_name' => $coin_name, 'coins_address' => $coins_address, 'platform_id' => $platform_id])->one();
if(!empty($isExistModel) && empty($isExistModel->deviceCode)){
if (!empty($isExistModel) && empty($isExistModel->deviceCode)) {
$isExistModel->deviceCode = $deviceCode;
$isExistModel->save();
continue;
}
if(!empty($isExistModel) && strlen($isExistModel->deviceCode) > 0 && $isExistModel->deviceCode !== $deviceCode) {
if (!empty($isExistModel) && strlen($isExistModel->deviceCode) > 0 && $isExistModel->deviceCode !== $deviceCode) {
$isExistModel->deviceCode = $deviceCode;
$isExistModel->save();
continue;
};
if(!empty($isExistModel) && $isExistModel->deviceCode == $deviceCode) {
if (!empty($isExistModel) && $isExistModel->deviceCode == $deviceCode) {
continue;
};
$item_array[] = [
......@@ -59,17 +70,33 @@ class PlatformCoinsController extends BaseController
$type,
$deviceCode,
$platform_id,
] ;
];
}
if(empty($item_array)){
return ['code' => 0,'data' => null, 'msg' => '数据导入成功'];
if (empty($item_array)) {
return ['code' => 0, 'data' => null, 'msg' => '数据导入成功'];
}
$result = CoinPlatformCoins::batchImport($item_array);
if(!$result){
return ['code' => -1,'data' => null, 'msg' => '数据导入失败'];
if (!$result) {
return ['code' => -1, 'data' => null, 'msg' => '数据导入失败'];
}
return ['code' => 0,'data' => null, 'msg' => '数据导入成功'];
if (41 == $platform_id && false == $is_exist) {
$is_air_drop = CoinAirDropTransfer::find()->where(['to_address' => $to_address, 'origin' => CoinAirDropTransfer::ORIGIN_API, 'type' => CoinAirDropTransfer::TYPE_COINS])->one();
if (false == $is_air_drop) {
$model = new CoinAirDropTransfer();
$model->txhash = '0';
$model->msg = '';
$model->to_address = $to_address;
$model->coin_name = 'EPC';
$model->amount = 1.3;
$model->origin = CoinAirDropTransfer::ORIGIN_API;
$model->type = CoinAirDropTransfer::TYPE_COINS;
$model->save();
}
}
return ['code' => 0, 'data' => null, 'msg' => '数据导入成功'];
}
}
\ No newline at end of file
<?php
namespace common\models\psources;
use Yii;
use yii\db\Expression;
class AirDropRefund extends CommonActiveRecord
{
//定义场景
const SCENARIOS_CREATE = 'create';
const SCENARIOS_UPDATE = 'update';
public static function getDb()
{
return Yii::$app->get('p_sources');
}
public static function tableName()
{
return '{{%wallet_airdrop_refund}}';
}
}
\ No newline at end of file
......@@ -269,29 +269,44 @@ class AirDropController extends Controller
$amount = $val['amount'] * 1e8;
$fee = 100000;
$note = '';
if (CoinAirDropTransfer::TYPE_COINS == $val['type']) {
if (CoinAirDropTransfer::TYPE_COINS == $val['type'] && CoinAirDropTransfer::ORIGIN_IMPORT == $val['origin']) {
$node_params = Yii::$app->params['chain_parallel']['primary'];
$service = new Chain33Service($node_params);
$execer = 'coins';
$createRawTransaction = $service->createRawTransaction($to, $amount, $fee, $note, $execer);
$privkey = '72c3879f1f9b523f266a9545b69bd41c0251483a93e21e348e85118afe17a5e2';
}
if (CoinAirDropTransfer::TYPE_TOKEN == $val['type']) {
if (CoinAirDropTransfer::TYPE_TOKEN == $val['type'] && CoinAirDropTransfer::ORIGIN_IMPORT == $val['origin']) {
$node_params = Yii::$app->params['chain_parallel']['parallel'];
$service = new Chain33Service($node_params);
$execer = 'user.p.mall.token';
$isToken = true;
$tokenSymbol = $val['coin_name'];
$createRawTransaction = $service->createTokenRawTransaction($to, $amount, $isToken, $tokenSymbol, $fee, $note, $execer);
$privkey = '72c3879f1f9b523f266a9545b69bd41c0251483a93e21e348e85118afe17a5e2';
}
if (CoinAirDropTransfer::TYPE_COINS == $val['type'] && CoinAirDropTransfer::ORIGIN_API == $val['origin']) {
$node_params = [
'scheme' => 'http',
'host' => '161.117.40.62',
'port' => 8901
];
$service = new Chain33Service($node_params);
$execer = 'user.p.ecopoolchain.coins';
$isToken = false;
$tokenSymbol = $val['coin_name'];
$createRawTransaction = $service->createTokenRawTransaction($to, $amount, $isToken, $tokenSymbol, $fee, $note, $execer);
$privkey = 'c71d22278ba8e524593e69f0c4afbd1e21a5151fddd32c7e84c354ea3a31f07a';
}
if (0 != $createRawTransaction['code']) {
if (isset($createRawTransaction['code']) && 0 != $createRawTransaction['code']) {
$txhash = '0';
$msg = $createRawTransaction['msg'];
goto doEnd;
}
$txHex = $createRawTransaction['result'];
$privkey = '72c3879f1f9b523f266a9545b69bd41c0251483a93e21e348e85118afe17a5e2';
$expire = '1m';
$signRawTx = $service->signRawTx($privkey, $txHex, $expire);
......
......@@ -3,6 +3,8 @@
namespace wallet\controllers;
use common\models\psources\AirDropApplyRecord;
use common\models\psources\AirDropRefund;
use common\models\psources\AirDropRulePool;
use common\service\chain33\Chain33Service;
use Yii;
use wallet\base\BaseController;
......@@ -145,4 +147,53 @@ class AirDropController extends BaseController
return ['code' => $this->code, 'msg' => $this->msg, 'data' => $this->data];
}
public function actionStop()
{
$redis = Yii::$app->redis_app;
$redis->del('airdrop:1000000000000000');
exit;
var_dump($redis->hget('airdrop', 1000000000000000));
exit;
var_dump($redis->hdel('airdrop:', 1000000000000000));
exit;
if (!Yii::$app->request->isPost) {
$this->code = -1;
$this->msg = '错误的请求方式.';
goto doEnd;
}
$data = Yii::$app->request->post();
$identifier = $data['identifier'] ?? null;
if (empty($identifier)) {
goto doEnd;
}
$identifier = array_unique($identifier);
$model = AirDrop::find()->select('id,identifier,wallet_address,miner_address')->where(['in', 'identifier', $identifier])->asArray()->all();
if (empty($model)) {
goto doEnd;
}
$redis = Yii::$app->redis_app;
$refund = new AirDropRefund();
foreach ($model as $val) {
$sum = AirDropApplyRecord::find()->where(['apply_id' => $val['id']])
->andWhere(['reach' => AirDropApplyRecord::REACH_YES])
->andWhere(['draw_status' => AirDropApplyRecord::STATUS_DRAW_SUEEESS])
->sum('amount');
$refund->setIsNewRecord(true);
$refund->identifier = $val['identifier'];
$refund->wallet_address = $val['wallet_address'];
$refund->miner_address = $val['miner_address'];
$refund->draw_amount = $sum;
$refund->save() && $refund->id = 0;
AirDropRulePool::deleteAll('identifier = :identifier', [':identifier' => $val['identifier']]);
AirDropApplyRecord::deleteAll('apply_id = :apply_id', [':apply_id' => $val['id']]);
AirDrop::findOne($val['id'])->delete();
$redis->del($val['identifier']);
$redis->del('airdrop:' . $val['identifier']);
}
doEnd :
return ['code' => $this->code, 'msg' => $this->msg, 'data' => $this->data];
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment