Commit bdf89778 authored by luhongguang's avatar luhongguang

Merge branch 'colonel' of https://git.yidian-inc.com:8021/bp/goods into colonel

parents 1cb6f321 286f1274
......@@ -20,6 +20,12 @@ class ColonelDistributorColonel extends MysqlBase
const DEFAULT_COLUMN = ['colonel_id','user_id','take_place_id','phone','contact_name','colonel_source'];
public static function getColonelUserIds()
{
$colonelUserData = ColonelDistributorColonel::select(['user_id']);
return array_column((array)$colonelUserData, 'user_id');
}
public static function getRecord(array $where, $column = '*')
{
return self::get($column, $where);
......
......@@ -18,6 +18,11 @@ class ColonelDistributorInviteOrderNum extends MysqlBase
return self::get($columns, $where, $options);
}
public static function getRecords(array $where, $column = '*')
{
return (array)self::select($column, $where);
}
public static function getRecordMaster($where, $columns = [], $options = [])
{
if (empty($columns)) {
......
......@@ -21,6 +21,11 @@ class ColonelDistributorPayInfo extends MysqlBase
self::TYPE_FINISH_TARGET => "完成目标单数",
];
public static function getRecords(array $where, $column = '*')
{
return (array)self::select($column, $where);
}
public static function getRecord($where, $columns = [], $options = [])
{
if (empty($columns)) {
......@@ -44,7 +49,7 @@ class ColonelDistributorPayInfo extends MysqlBase
public static function updateRecord($columns, $where)
{
return self::update($columns, $where);
return (int)self::update($columns, $where);
}
public static function save($data, $where = [], $options = [])
......
<?php
/**
* Created by PhpStorm.
* User: pengfei@yidian-inc.com
* Date: 2021/9/3 2:23 下午
*/
use App\Base\Job;
use Api\PhpUtils\Log\FileLog;
......@@ -8,12 +13,22 @@ use Api\PhpUtils\Http\HttpUtil;
class ColonelwalletController extends Job
{
const CAPITAL_POOL_ID = 2; // 资金池id
const CAPITAL_POOL_OP = 200; //200:团长奖励
const WALLET_SERVICE_NAME = 11; // 10生活圈优惠券,11营销活动
const WALLET_SOURCE_NAME = 1; //使用方名,1生活圈,2主端
/**
* Notes: 奖励结算脚本
* User: pengfei@yidian-inc.com
* Date: 2021/9/3 6:03 下午
* @throws InterfaceException
*/
public function indexAction()
{
FileLog::info("colonel_distributor_wallet", '团长分销-奖励钱包脚本:start');
$yesterday = date("Y-m-d", strtotime("-1 day"));
$payInfoList = $this->getPayInfo($yesterday);
FileLog::info("colonel_distributor_wallet", '团长分销-奖励钱包脚本:payInfoCount='.count($payInfoList));
$this->loggerInfo('start');
$payInfoList = $this->getPayInfoList();
$this->loggerInfo('payInfoCount='.count($payInfoList));
if (!empty($payInfoList)) {
if ($this->deductingInventory($payInfoList)) {
if ($this->toWallet($payInfoList)) {
......@@ -21,115 +36,136 @@ class ColonelwalletController extends Job
}
}
}
FileLog::info("colonel_distributor_wallet", '团长分销-奖励钱包脚本:end');
echo "success";
}
/**
* colonel_distributor_pay_info 数据
* @param $date
* @return array
*/
public function getPayInfo($date)
{
$list = ColonelDistributorPayInfo::select("*", ["date" => $date,'status' => ColonelDistributorPayInfo::STATUS_NOT_USE], []);
$data = [];
if (!empty($list)) {
foreach ($list as $item) {
//去重
$key = $item["colonel_user_id"].$item["date"].$item["type"].$item["finish_num"];
$data[$key] = $item;
}
$data = array_values($data);
}
return $data;
$this->loggerInfo('end');
}
/**
* 写入钱包
* Notes: 结算写入钱包
* User: pengfei@yidian-inc.com
* Date: 2021/9/3 6:04 下午
* @param $payInfoList
* @return bool
* @throws InterfaceException
*/
public function toWallet($payInfoList)
private function toWallet($payInfoList): bool
{
$url = config('interface', 'wallet.account.transfer');
if (empty($url)) {
if (!$url = config('interface', 'wallet.account.transfer')) {
throw new InterfaceException(['cus' => 0]);
}
$data = [];
foreach ($payInfoList as $payInfo) {
if ($payInfo["type"] == ColonelDistributorPayInfo::TYPE_NEW_USER) {
$desc = "邀请新用户(".$payInfo["invite_user_nick"].")完成下单奖励";
}
if ($payInfo["type"] == ColonelDistributorPayInfo::TYPE_FINISH_TARGET) {
$desc = "完成".$payInfo["finish_num"]."单用户下单奖励";
}
$tmp = [];
$tmp["user_id"] = $payInfo["colonel_user_id"];
$tmp["service_name"] = 11; //服务名字,10生活圈优惠券,11营销活动
$tmp["source_name"] = 1; //使用方名,1生活圈,2主端
$tmp["third_order_id"] = $payInfo["colonel_distributor_pay_info_id"];
$tmp["third_order_id_type"] = $payInfo["type"];
$tmp["third_order_desc"] = $desc;
$tmp["amount"] = $payInfo["reward"];
$tmp["extra"] = $payInfo;
$tmp['user_id'] = $payInfo['colonel_user_id'];
$tmp['service_name'] = self::WALLET_SERVICE_NAME;
$tmp['source_name'] = self::WALLET_SOURCE_NAME;
$tmp['third_order_id'] = $payInfo['colonel_distributor_pay_info_id'];
$tmp['third_order_id_type'] = $payInfo['type'];
$tmp['third_order_desc'] = self::getThirdOrderDesc($payInfo);
$tmp['amount'] = $payInfo['reward'];
$tmp['extra'] = $payInfo;
$data[] = $tmp;
}
$res = HttpUtil::post($url, ["list" => $data]);
if ($res['code'] == 0 && isset($res['response']["result"])) {
$date = date("Y-m-d H:i:s");
FileLog::info("colonel_distributor_to_wallet", $date." 写入钱包成功");
$res = HttpUtil::post($url, ['list' => $data]);
if (!empty($res['response']['result']) && $res['code'] == 0) {
$this->loggerInfo('写入钱包成功');
return true;
} else {
$msg = json_encode(["list" => $data]);
FileLog::error("colonel_distributor_to_wallet", $msg, null, 'bp-server@yidian-inc.com');
$msg = json_encode(['list' => $data]);
$this->loggerError($msg);
return false;
}
}
/**
* 资金池授予用户奖励
* Notes: 资金池授予用户奖励
* User: pengfei@yidian-inc.com
* Date: 2021/9/3 6:04 下午
* @param $payInfoList
* @return bool
* @throws InterfaceException
*/
public function deductingInventory($payInfoList)
private function deductingInventory($payInfoList): bool
{
$url = config('interface', 'coupon.capitalpool.grant_user_amount');
if (empty($url)) {
if (!$url = config('interface', 'coupon.capitalpool.grant_user_amount')) {
throw new InterfaceException(['cus' => 0]);
}
$data["capital_pool_id"] = 2;
$data['capital_pool_id'] = self::CAPITAL_POOL_ID;
foreach ($payInfoList as $payInfo) {
if ($payInfo["type"] == ColonelDistributorPayInfo::TYPE_NEW_USER) {
$desc = "邀请新用户(".$payInfo["invite_user_nick"].")完成下单奖励";
}
if ($payInfo["type"] == ColonelDistributorPayInfo::TYPE_FINISH_TARGET) {
$desc = "完成".$payInfo["finish_num"]."单用户下单奖励";
}
$tmp = [];
$tmp["op"] = 200; //200:团长奖励
$tmp["user_id"] = $payInfo["colonel_user_id"];
$tmp["amount"] = $payInfo["reward"];
$tmp["third_order_id"] = $payInfo["colonel_distributor_pay_info_id"];
$tmp["third_order_id_type"] = $payInfo["type"];
$tmp["third_order_desc"] = $desc;
$data["body"][] = $tmp;
$tmp['op'] = self::CAPITAL_POOL_OP;
$tmp['user_id'] = $payInfo['colonel_user_id'];
$tmp['amount'] = $payInfo['reward'];
$tmp['third_order_id'] = $payInfo['colonel_distributor_pay_info_id'];
$tmp['third_order_id_type'] = $payInfo['type'];
$tmp['third_order_desc'] = self::getThirdOrderDesc($payInfo);
$data['body'][] = $tmp;
}
$res = HttpUtil::post($url, $data, 100000, 3);
if ($res['code'] == 0 && isset($res['response']["result"])) {
$date = date("Y-m-d H:i:s");
FileLog::info("colonel_distributor_deducting_inventory", $date." 资金池授予用户奖励成功");
if ($res['code'] == 0 && isset($res['response']['result'])) {
$this->loggerInfo('资金池授予用户奖励成功,count='.count($payInfoList));
return true;
} else {
$msg = json_encode(["list" => $data]);
FileLog::error("colonel_distributor_deducting_inventory", $msg, null, 'bp-server@yidian-inc.com');
$msg = json_encode(['list' => $data]);
$this->loggerError("资金池授予用户奖励成功,$msg");
return false;
}
}
private function getPayInfoList(): array
{
return ColonelDistributorPayInfo::getRecords(['status' => ColonelDistributorPayInfo::STATUS_NOT_USE]);
}
/**
* Notes: 获取描述信息
* User: pengfei@yidian-inc.com
* Date: 2021/9/3 6:10 下午
* @param $payInfo
* @return string
*/
private function getThirdOrderDesc($payInfo): string
{
$desc = '';
if ($payInfo['type'] == ColonelDistributorPayInfo::TYPE_NEW_USER) {
$desc = "邀请新用户(".$payInfo["invite_user_nick"].")完成下单奖励";
} elseif ($payInfo['type'] == ColonelDistributorPayInfo::TYPE_FINISH_TARGET) {
$desc = "完成".$payInfo["finish_num"]."单用户下单奖励";
}
return $desc;
}
/**
* 修改状态
* Notes: 修改状态
* User: pengfei@yidian-inc.com
* Date: 2021/9/3 6:09 下午
* @param array $payInfoIds
* @return bool
*/
public function handlePayInfoStatus(array $payInfoIds)
private function handlePayInfoStatus(array $payInfoIds): bool
{
return ColonelDistributorPayInfo::updateRecord(['status' => ColonelDistributorPayInfo::STATUS_USE], ['pay_info_id' => $payInfoIds]);
}
/**
* Notes: 记录 info 日志
* User: pengfei@yidian-inc.com
* Date: 2021/9/3 4:10 下午
* @param $log
*/
private function loggerInfo($log)
{
FileLog::info('colonel_distributor_wallet', 'colonel_distributor_wallet:'.$log, false, true);
}
/**
* Notes: 记录 error 日志
* User: pengfei@yidian-inc.com
* Date: 2021/9/3 4:10 下午
* @param $log
*/
private function loggerError($log)
{
FileLog::error('colonel_distributor_wallet', $log, null, 'bp-server@yidian-inc.com', true);
}
}
......@@ -138,15 +138,38 @@ class PindanActivityColonelConfigService
public static function getActivityTimeRange() : array
{
// 获取活动时间范围 例如活动时间(2021-09-03) --- 2021-09-03:12:00:00 - 2021-09-04:12:00:00
$hour = ' '.self::ACTIVITY_DEFAULT_HOUR . ":00:00";
if (date("H") >= 12) {
$startTime = date("Y-m-d").$hour;
$endTime = date("Y-m-d", strtotime("+1 day")).$hour;
$hour = ' '.self::ACTIVITY_DEFAULT_HOUR . ':00:00';
if (date('H') >= 12) {
$startTime = date('Y-m-d').$hour;
$endTime = date('Y-m-d', strtotime('+1 day')).$hour;
} else {
$startTime = date("Y-m-d", strtotime("-1 day")).$hour;
$endTime = date("Y-m-d").$hour;
$startTime = date('Y-m-d', strtotime('-1 day')).$hour;
$endTime = date('Y-m-d').$hour;
}
return ['start_time' => $startTime,'end_time' => $endTime];
return [
'start_time' => $startTime,
'end_time' => $endTime,
'date' => date('Y-m-d', strtotime($startTime))
];
}
/**
* Notes: 获取结算时间范围
* User: pengfei@yidian-inc.com
* Date: 2021/9/3 2:50 下午
* @return string[]
*/
public static function getSettlementTimeRange() : array
{
// 获取活动时间范围 例如当前时间(2021-09-03 12:00:00) 应结算时间为 2021-08-31-:12:00:00 - 2021-09-01:12:00:00
$hour = ' '.self::ACTIVITY_DEFAULT_HOUR . ':00:00';
$startTime = date('Y-m-d', strtotime('-3 day')).$hour;
$endTime = date('Y-m-d', strtotime('-2 day')).$hour;
return [
'start_time' => $startTime,
'end_time' => $endTime,
'date' => date('Y-m-d', strtotime($startTime))
];
}
}
\ No newline at end of file
......@@ -16,8 +16,9 @@ class FileLog
* @param string $signature 本条日志签名
* @param string $detail_info 日志详细信息
* @param bool $with_access_log
* @param bool $is_output 是否输出
*/
public static function info($signature, $detail_info = '', $with_access_log = false)
public static function info($signature, $detail_info = '', $with_access_log = false,$is_output = false)
{
if(self::$log == false) {
return true;
......@@ -28,6 +29,9 @@ class FileLog
if ($with_access_log) {
$log .= ' [request info:] ' . self::accessLog();
}
if ($is_output) {
echo $log.PHP_EOL;
}
error_log($log);
}
......@@ -41,8 +45,9 @@ class FileLog
* @param string $signature 本条日志签名
* @param string $detail_info 日志详细信息
* @param \Exception $exception 异常信息
* @param bool $is_output 是否输出
*/
public static function waring($signature, $detail_info = '', $exception = null)
public static function waring($signature, $detail_info = '', $exception = null,$is_output = false)
{
$traceId = Tracer::getTraceId();
$log = 'PHP User_warning: [' . $signature . '] [traceId:'. $traceId .'] [detail info:] ' . $detail_info . ' [request info:] ' . self::accessLog();
......@@ -50,6 +55,9 @@ class FileLog
$exception_info = 'In ' . $exception->getFile() . ' on line ' . $exception->getLine() . ' ' . $exception->getCode() . ': ' . $exception->getMessage();
$log .= ' [exception info: ]' . $exception_info;
}
if ($is_output) {
echo $log.PHP_EOL;
}
error_log($log);
}
......@@ -60,8 +68,9 @@ class FileLog
* @param string $detail_info 日志详细信息
* @param \Exception $exception 异常信息
* @param array|string $mail_to 邮件接受者
* @param bool $is_output 是否输出
*/
public static function error($signature, $detail_info = '', $exception = null, $mail_to = '')
public static function error($signature, $detail_info = '', $exception = null, $mail_to = '',$is_output = false)
{
$traceId = Tracer::getTraceId();
$log = 'PHP User_error: [' . $signature . '] [traceId:'. $traceId .'] [detail info:] ' . $detail_info . ' [request info:] ' . self::accessLog();
......@@ -91,6 +100,9 @@ class FileLog
Email::sendMail('bp-noreply@yidian-inc.com', $mail, $subject, $body);
}
}
if ($is_output) {
echo $log.PHP_EOL;
}
}
public static function accessLog()
......
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