Commit f011efb5 authored by pengfei's avatar pengfei

Merge branch 'colonel' into develop

parents 8d194313 b61d4953
......@@ -70,5 +70,6 @@ class GoodsException extends BaseException
49 => '库存不得小于已售库存',
self::RULE_LIMIT_ERROR => '单人可买上限填写错误',
self::NOT_FIND_MARKETING => '找不到活动',
52 => '过期时间不得小于等于上架开始时间',
];
}
\ No newline at end of file
<?php
use Api\PhpServices\Idgen\Idgen;
use Api\PhpUtils\Log\FileLog;
use App\Base\Cli;
use App\Models\marketing\mysql\ColonelDistributorColonel;
use App\Models\marketing\mysql\ColonelDistributorConfig;
use App\Models\marketing\mysql\ColonelDistributorInviteOrderNum;
use App\Models\marketing\mysql\ColonelDistributorPayInfo;
use App\Exception\custom\InterfaceException;
use Api\PhpUtils\Http\HttpUtil;
use App\Models\user\mysql\UserWechatBind;
/**
* php public/cli.php colonelorder index
*/
class ColonelorderController extends Cli
{
const DEFAULT_USER_BATCH_SIZE = 100;
public $today;
public $yesterday;
public $colonelConfig;
public $colonelConfigList;
public function init()
{
parent::init();
$this->today = date("Y-m-d");
$this->yesterday = date("Y-m-d", strtotime("-1 day"));
$this->colonelConfig = $this->getColonelConfig($this->yesterday);
if (!empty($this->colonelConfig)) {
$this->colonelConfigList = json_decode($this->colonelConfig['data'], true);
}
}
public function indexAction()
{
FileLog::info("colonel_distributor_order", '团长分销-计算奖励脚本:start');
$userIdList = $this->getColonelUserIds();
if (!empty($userIdList)) {
$userIdList = array_chunk($userIdList, self::DEFAULT_USER_BATCH_SIZE);
$colonelPayInfoData = [];
foreach ($userIdList as $userIds) {
// 完成目标单数
if ($inviteOrderData = $this->getInviteOrderData($userIds)) {
$colonelPayInfoData = array_merge($colonelPayInfoData,$inviteOrderData);
}
// 邀请新用户奖励
if ($inviteNewUserData = $this->getInviteNewUserData($userIds)) {
$colonelPayInfoData = array_merge($colonelPayInfoData,$inviteNewUserData);
}
}
$this->handleSavePayInfo($colonelPayInfoData);
}
FileLog::info("colonel_distributor_order", '团长分销-计算奖励脚本:end');
echo "success";
}
/**
* 保存奖励信息
* @param $yesterday
* @return true
*/
public function handleSavePayInfo($colonelPayInfoData)
{
FileLog::info("colonel_distributor_order", '团长分销-计算奖励脚本:colonelPayInfoCount='.count($colonelPayInfoData));
if (!empty($colonelPayInfoData)) {
$data = $this->addIdgenId($colonelPayInfoData);
try {
ColonelDistributorPayInfo::beginTransaction();
if (!$this->addColonelDistributorPayInfo($data)) {
throw new \Exception(sprintf("写入错误参数 %s", json_encode($data)));
}
if (!ColonelDistributorPayInfo::commit()) {
throw new \Exception(sprintf("事务提交失败 %s", json_encode($data)));
}
} catch (\Exception $e) {
ColonelDistributorPayInfo::rollback();
FileLog::info("add_colonel_distributor_pay_info", $e->getMessage());
}
}
return true;
}
/**
* 获取新用户奖励
* @param $yesterday
* @return array
*/
public function getInviteNewUserData($userIds)
{
$inviteNewUserList = $this->getInviteNewUserList($userIds, $this->today);
$inviteOrderData = [];
if (!empty($inviteNewUserList)) {
$userNickList = $this->getUserList(array_column($inviteNewUserList, "user_id"));
foreach ($inviteNewUserList as $newUser) {
$payInfo = [
"colonel_user_id" => $newUser["inviter_user_id"],
"date" => $this->yesterday,
"type" => ColonelDistributorPayInfo::TYPE_NEW_USER,
"reward" => 3 * 100,
"finish_num" => 1,
"invite_user_id" => $newUser["user_id"],
"invite_user_nick" => empty($userNickList[$newUser["user_id"]]["user_nick"]) ? "" : $userNickList[$newUser["user_id"]]["user_nick"],
];
$inviteOrderData[] = $payInfo;
}
}
return $inviteOrderData;
}
/**
* 获取完成目标单数奖励
* @param $yesterday
* @return array
*/
public function getInviteOrderData($userIds)
{
//完成目标单数
$inviteOrderData = [];
if (empty($this->colonelConfigList)) {
return $inviteOrderData;
}
$inviteOrderNumList = $this->getInviteOrderNum($userIds, $this->yesterday, $this->today);
foreach ($inviteOrderNumList as $orderNum) {
foreach ($this->colonelConfigList as $config) {
if (!empty($orderNum["num"]) && $orderNum["num"] >= $config["assess_order_num"]) {
$payInfo = [
"colonel_user_id" => $orderNum["colonel_user_id"],
"date" => $this->yesterday,
"type" => ColonelDistributorPayInfo::TYPE_FINISH_TARGET,
"reward" => $config["reward_amount"] * 100,
"finish_num" => $config["assess_order_num"],
"invite_user_id" => 0,
"invite_user_nick" => "",
];
$inviteOrderData[] = $payInfo;
}
}
}
return $inviteOrderData;
}
/**
* 团长任务配置
* @param $yesterday
* @return \Api\PhpUtils\Mysql\MysqlBase
*/
public function getColonelConfig($yesterday)
{
$type = empty($params["type"]) ? ColonelDistributorConfig::TYPE_COLONEL : $params["type"];
$config = ColonelDistributorConfig::getRecord(["date" => $yesterday, "type" => $type]);
if (empty($config)) {
$config = ColonelDistributorConfig::getRecord([
"date[<=]" => $yesterday,
"ORDER" => ["date" => "DESC"],
"LIMIT" => 1
]);
}
return $config;
}
/**
* 团长user_id
* @return array
*/
public function getColonelUserIds()
{
$colonelRes = ColonelDistributorColonel::select(["user_id"], ["LIMIT" => 10000000]);
$userIds = [];
if (!empty($colonelRes)) {
$userIds = array_column($colonelRes, "user_id");
}
return $userIds;
}
/**
* 获取order num
* @param $colonelUserIds
* @param $startTime
* @param $endTime
* @return \Api\PhpUtils\Mysql\MysqlBase
*/
public function getInviteOrderNum($colonelUserIds, $startTime, $endTime)
{
return ColonelDistributorInviteOrderNum::select(
["colonel_user_id", "num", "date"],
[
"colonel_user_id" => $colonelUserIds,
"date[>=]" => $startTime,
"date[<]" => $endTime,
],
[]
);
}
/**
* 获取有效新用户信息
* @param $userIds
* @param $date
* @return array|mixed
* @throws InterfaceException
*/
public function getInviteNewUserList($userIds, $date)
{
$url = config('interface', 'coupon.background.wx_invite_relation_list_by_user_ids');
if (empty($url)) {
throw new InterfaceException(['cus' => 0]);
}
$res = HttpUtil::get($url, ["user_ids" => $userIds, "date" => $date]);
if (!empty($res["response"]["result"])) {
$res = array_column($res["response"]["result"], null, "user_id");
return array_values($res);
}
return [];
}
/**
* 给数据整理 colonel_distributor_pay_info_id
* @param $data
* @param string $type
* @return mixed
*/
public function addIdgenId($data, $type = "goods")
{
$count = count($data);
$res = Idgen::get(appConfig('idgen.partner'), appConfig('idgen.key'), [], [[
"type" => $type,
'number' => 00,
"count" => $count]]);
$ids = $res['id_datetime'][$type] ?? [];
foreach ($data as $key => $item) {
$data[$key]["colonel_distributor_pay_info_id"] = $ids[$key];
}
return $data;
}
/**
* 用户信息,获取昵称
* @param $userIds
* @return \Api\PhpUtils\Mysql\MysqlBase|array
*/
public function getUserList($userIds)
{
$list = UserWechatBind::select(["user_id", "user_nick"], ["user_id" => $userIds], []);
if (!empty($list)) {
$list = array_column($list, null, "user_id");
}
return $list;
}
/**
* 写入数据
* @param $data
* @return \Api\PhpUtils\Mysql\MysqlBase
*/
public function addColonelDistributorPayInfo($data)
{
return ColonelDistributorPayInfo::save($data);
}
}
<?php
use Api\PhpUtils\Log\FileLog;
use App\Base\Cli;
use App\Models\marketing\mysql\ColonelDistributorPayInfo;
use App\Exception\custom\InterfaceException;
use Api\PhpUtils\Http\HttpUtil;
/**
* php public/cli.php colonelwallet index
*/
class ColonelwalletController extends Cli
{
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));
if (!empty($payInfoList)) {
if ($this->deductingInventory($payInfoList)) {
if ($this->toWallet($payInfoList)) {
$this->handlePayInfoStatus(array_column($payInfoList, 'pay_info_id'));
}
}
}
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;
}
/**
* 写入钱包
*/
public function toWallet($payInfoList)
{
$url = config('interface', 'wallet.account.transfer');
if (empty($url)) {
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;
$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." 写入钱包成功");
return true;
} else {
$msg = json_encode(["list" => $data]);
FileLog::error("colonel_distributor_to_wallet", $msg, null, 'bp-server@yidian-inc.com');
return false;
}
}
/**
* 资金池授予用户奖励
*/
public function deductingInventory($payInfoList)
{
$url = config('interface', 'coupon.capitalpool.grant_user_amount');
if (empty($url)) {
throw new InterfaceException(['cus' => 0]);
}
$data["capital_pool_id"] = 2;
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;
}
$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." 资金池授予用户奖励成功");
return true;
} else {
$msg = json_encode(["list" => $data]);
FileLog::error("colonel_distributor_deducting_inventory", $msg, null, 'bp-server@yidian-inc.com');
return false;
}
}
/**
* 修改状态
*/
public function handlePayInfoStatus(array $payInfoIds)
{
return ColonelDistributorPayInfo::updateRecord(['status' => ColonelDistributorPayInfo::STATUS_USE], ['pay_info_id' => $payInfoIds]);
}
}
......@@ -6,11 +6,260 @@
*/
use App\Base\Job;
use Api\PhpServices\Idgen\Idgen;
use Api\PhpUtils\Log\FileLog;
use App\Models\marketing\mysql\ColonelDistributorColonel;
use App\Models\marketing\mysql\ColonelDistributorConfig;
use App\Models\marketing\mysql\ColonelDistributorInviteOrderNum;
use App\Models\marketing\mysql\ColonelDistributorPayInfo;
use App\Exception\custom\InterfaceException;
use Api\PhpUtils\Http\HttpUtil;
use App\Models\user\mysql\UserWechatBind;
class ColonelOrderController extends Job
{
const DEFAULT_USER_BATCH_SIZE = 100;
public $today;
public $yesterday;
public $colonelConfig;
public $colonelConfigList;
public function init()
{
parent::init();
$this->today = date("Y-m-d");
$this->yesterday = date("Y-m-d", strtotime("-1 day"));
$this->colonelConfig = $this->getColonelConfig($this->yesterday);
if (!empty($this->colonelConfig)) {
$this->colonelConfigList = json_decode($this->colonelConfig['data'], true);
}
}
public function indexAction()
{
\Yaf\Application::app()->bootstrap()->getDispatcher()->dispatch(new \Yaf\Request\Simple('', 'cli', 'colonelorder', 'index', []));
FileLog::info("colonel_distributor_order", '团长分销-计算奖励脚本:start');
$userIdList = $this->getColonelUserIds();
if (!empty($userIdList)) {
$userIdList = array_chunk($userIdList, self::DEFAULT_USER_BATCH_SIZE);
$colonelPayInfoData = [];
foreach ($userIdList as $userIds) {
// 完成目标单数
if ($inviteOrderData = $this->getInviteOrderData($userIds)) {
$colonelPayInfoData = array_merge($colonelPayInfoData,$inviteOrderData);
}
// 邀请新用户奖励
if ($inviteNewUserData = $this->getInviteNewUserData($userIds)) {
$colonelPayInfoData = array_merge($colonelPayInfoData,$inviteNewUserData);
}
}
$this->handleSavePayInfo($colonelPayInfoData);
}
FileLog::info("colonel_distributor_order", '团长分销-计算奖励脚本:end');
echo "success";
}
/**
* 保存奖励信息
* @param $yesterday
* @return true
*/
public function handleSavePayInfo($colonelPayInfoData)
{
FileLog::info("colonel_distributor_order", '团长分销-计算奖励脚本:colonelPayInfoCount='.count($colonelPayInfoData));
if (!empty($colonelPayInfoData)) {
$data = $this->addIdgenId($colonelPayInfoData);
try {
ColonelDistributorPayInfo::beginTransaction();
if (!$this->addColonelDistributorPayInfo($data)) {
throw new \Exception(sprintf("写入错误参数 %s", json_encode($data)));
}
if (!ColonelDistributorPayInfo::commit()) {
throw new \Exception(sprintf("事务提交失败 %s", json_encode($data)));
}
} catch (\Exception $e) {
ColonelDistributorPayInfo::rollback();
FileLog::info("add_colonel_distributor_pay_info", $e->getMessage());
}
}
return true;
}
/**
* 获取新用户奖励
* @param $yesterday
* @return array
*/
public function getInviteNewUserData($userIds)
{
$inviteNewUserList = $this->getInviteNewUserList($userIds, $this->today);
$inviteOrderData = [];
if (!empty($inviteNewUserList)) {
$userNickList = $this->getUserList(array_column($inviteNewUserList, "user_id"));
foreach ($inviteNewUserList as $newUser) {
$payInfo = [
"colonel_user_id" => $newUser["inviter_user_id"],
"date" => $this->yesterday,
"type" => ColonelDistributorPayInfo::TYPE_NEW_USER,
"reward" => 3 * 100,
"finish_num" => 1,
"invite_user_id" => $newUser["user_id"],
"invite_user_nick" => empty($userNickList[$newUser["user_id"]]["user_nick"]) ? "" : $userNickList[$newUser["user_id"]]["user_nick"],
];
$inviteOrderData[] = $payInfo;
}
}
return $inviteOrderData;
}
/**
* 获取完成目标单数奖励
* @param $yesterday
* @return array
*/
public function getInviteOrderData($userIds)
{
//完成目标单数
$inviteOrderData = [];
if (empty($this->colonelConfigList)) {
return $inviteOrderData;
}
$inviteOrderNumList = $this->getInviteOrderNum($userIds, $this->yesterday, $this->today);
foreach ($inviteOrderNumList as $orderNum) {
foreach ($this->colonelConfigList as $config) {
if (!empty($orderNum["num"]) && $orderNum["num"] >= $config["assess_order_num"]) {
$payInfo = [
"colonel_user_id" => $orderNum["colonel_user_id"],
"date" => $this->yesterday,
"type" => ColonelDistributorPayInfo::TYPE_FINISH_TARGET,
"reward" => $config["reward_amount"] * 100,
"finish_num" => $config["assess_order_num"],
"invite_user_id" => 0,
"invite_user_nick" => "",
];
$inviteOrderData[] = $payInfo;
}
}
}
return $inviteOrderData;
}
/**
* 团长任务配置
* @param $yesterday
* @return \Api\PhpUtils\Mysql\MysqlBase
*/
public function getColonelConfig($yesterday)
{
$type = empty($params["type"]) ? ColonelDistributorConfig::TYPE_COLONEL : $params["type"];
$config = ColonelDistributorConfig::getRecord(["date" => $yesterday, "type" => $type]);
if (empty($config)) {
$config = ColonelDistributorConfig::getRecord([
"date[<=]" => $yesterday,
"ORDER" => ["date" => "DESC"],
"LIMIT" => 1
]);
}
return $config;
}
/**
* 团长user_id
* @return array
*/
public function getColonelUserIds()
{
$colonelRes = ColonelDistributorColonel::select(["user_id"], ["LIMIT" => 10000000]);
$userIds = [];
if (!empty($colonelRes)) {
$userIds = array_column($colonelRes, "user_id");
}
return $userIds;
}
/**
* 获取order num
* @param $colonelUserIds
* @param $startTime
* @param $endTime
* @return \Api\PhpUtils\Mysql\MysqlBase
*/
public function getInviteOrderNum($colonelUserIds, $startTime, $endTime)
{
return ColonelDistributorInviteOrderNum::select(
["colonel_user_id", "num", "date"],
[
"colonel_user_id" => $colonelUserIds,
"date[>=]" => $startTime,
"date[<]" => $endTime,
],
[]
);
}
/**
* 获取有效新用户信息
* @param $userIds
* @param $date
* @return array|mixed
* @throws InterfaceException
*/
public function getInviteNewUserList($userIds, $date)
{
$url = config('interface', 'coupon.background.wx_invite_relation_list_by_user_ids');
if (empty($url)) {
throw new InterfaceException(['cus' => 0]);
}
$res = HttpUtil::get($url, ["user_ids" => $userIds, "date" => $date]);
if (!empty($res["response"]["result"])) {
$res = array_column($res["response"]["result"], null, "user_id");
return array_values($res);
}
return [];
}
/**
* 给数据整理 colonel_distributor_pay_info_id
* @param $data
* @param string $type
* @return mixed
*/
public function addIdgenId($data, $type = "goods")
{
$count = count($data);
$res = Idgen::get(appConfig('idgen.partner'), appConfig('idgen.key'), [], [[
"type" => $type,
'number' => 00,
"count" => $count]]);
$ids = $res['id_datetime'][$type] ?? [];
foreach ($data as $key => $item) {
$data[$key]["colonel_distributor_pay_info_id"] = $ids[$key];
}
return $data;
}
/**
* 用户信息,获取昵称
* @param $userIds
* @return \Api\PhpUtils\Mysql\MysqlBase|array
*/
public function getUserList($userIds)
{
$list = UserWechatBind::select(["user_id", "user_nick"], ["user_id" => $userIds], []);
if (!empty($list)) {
$list = array_column($list, null, "user_id");
}
return $list;
}
/**
* 写入数据
* @param $data
* @return \Api\PhpUtils\Mysql\MysqlBase
*/
public function addColonelDistributorPayInfo($data)
{
return ColonelDistributorPayInfo::save($data);
}
}
\ No newline at end of file
......@@ -6,11 +6,135 @@
*/
use App\Base\Job;
use Api\PhpUtils\Log\FileLog;
use App\Models\marketing\mysql\ColonelDistributorPayInfo;
use App\Exception\custom\InterfaceException;
use Api\PhpUtils\Http\HttpUtil;
class ColonelWalletController extends Job
{
public function indexAction()
{
\Yaf\Application::app()->bootstrap()->getDispatcher()->dispatch(new \Yaf\Request\Simple('', 'cli', 'colonelwallet', 'index', []));
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));
if (!empty($payInfoList)) {
if ($this->deductingInventory($payInfoList)) {
if ($this->toWallet($payInfoList)) {
$this->handlePayInfoStatus(array_column($payInfoList, 'pay_info_id'));
}
}
}
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;
}
/**
* 写入钱包
*/
public function toWallet($payInfoList)
{
$url = config('interface', 'wallet.account.transfer');
if (empty($url)) {
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;
$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." 写入钱包成功");
return true;
} else {
$msg = json_encode(["list" => $data]);
FileLog::error("colonel_distributor_to_wallet", $msg, null, 'bp-server@yidian-inc.com');
return false;
}
}
/**
* 资金池授予用户奖励
*/
public function deductingInventory($payInfoList)
{
$url = config('interface', 'coupon.capitalpool.grant_user_amount');
if (empty($url)) {
throw new InterfaceException(['cus' => 0]);
}
$data["capital_pool_id"] = 2;
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;
}
$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." 资金池授予用户奖励成功");
return true;
} else {
$msg = json_encode(["list" => $data]);
FileLog::error("colonel_distributor_deducting_inventory", $msg, null, 'bp-server@yidian-inc.com');
return false;
}
}
/**
* 修改状态
*/
public function handlePayInfoStatus(array $payInfoIds)
{
return ColonelDistributorPayInfo::updateRecord(['status' => ColonelDistributorPayInfo::STATUS_USE], ['pay_info_id' => $payInfoIds]);
}
}
\ No newline at end of file
......@@ -267,7 +267,7 @@ class GoodsService
switch ($online_type) {
case 1:
$skuParams['online_status'] = 1;
$skuParams['online_status'] = 0;
$skuParams['online_start_time'] = date("Y-m-d H:i:s");
break;
case 2:
......@@ -281,6 +281,15 @@ class GoodsService
break;
}
if (!empty($skuData["online_type"])) {
//立即上架和定时上架
if (in_array($skuData["online_type"], [1,2])) {
if ($skuData["expiration_time"] <= $skuData['online_start_time']) {
throw new GoodsException(["cus" => 52]);
}
}
}
GoodsSku::save($skuParams);
self::addGoodsSkuPicRecord($skuId, $skuData);
return $skuId;
......@@ -428,27 +437,26 @@ class GoodsService
"rejected_reason" => $rejectedReason
];
}
$online_type = empty($sku["online_type"]) ? 0 : $sku["online_type"];
if ($online_type == 1) {
if ($status == GoodsSku::STATUS_PASS) {
if ($status == GoodsSku::STATUS_PASS) {
$online_type = empty($sku["online_type"]) ? 0 : $sku["online_type"];
if ($online_type == 1) {
$statusData['online_status'] = GoodsSku::ONLINE_STATUS_ONLINE;
$statusData['online_start_time'] = date("Y-m-d H:i:s");
}
}
//定点上架
if ($online_type == 2) {
$onlineStartTime = empty($sku["online_start_time"]) ? 0 : strtotime($sku["online_start_time"]);
if ($onlineStartTime > time()) {
$statusData['online_status'] = GoodsSku::ONLINE_STATUS_NO_ONLINE;
//定点上架
if ($online_type == 2) {
$onlineStartTime = empty($sku["online_start_time"]) ? 0 : strtotime($sku["online_start_time"]);
if ($onlineStartTime > time()) {
$statusData['online_status'] = GoodsSku::ONLINE_STATUS_OFFLINE;
}
}
}
//暂不上架
if ($online_type == 3) {
$statusData['online_status'] = GoodsSku::ONLINE_STATUS_NO_ONLINE;
//暂不上架
if ($online_type == 3) {
$statusData['online_status'] = GoodsSku::ONLINE_STATUS_OFFLINE;
}
}
GoodsSku::save($statusData, ["goods_sku_id" => $sku["goods_sku_id"]]);
......@@ -523,8 +531,22 @@ class GoodsService
if ($onlineStatus == GoodsSku::ONLINE_STATUS_ONLINE && $sku["inventory_rest"] <= 0) {
throw new GoodsException(["cus" => 24]);
}
$goodsSkuData = ["online_status" => $onlineStatus];
if ($onlineStatus == GoodsSku::ONLINE_STATUS_OFFLINE){
$goodsSkuData['online_type'] = 3;
$goodsSkuData['online_start_time'] = null;
$goodsSkuData['online_end_time'] = null;
}
if ($onlineStatus == GoodsSku::ONLINE_STATUS_ONLINE){
$goodsSkuData['online_type'] = 1;
$goodsSkuData['online_start_time'] = date("Y-m-d H:i:s");
}
$goodsSkuId = $sku["goods_sku_id"];
GoodsSku::save(["online_status" => $onlineStatus], ["goods_sku_id" => $goodsSkuId]);
GoodsSku::save($goodsSkuData, ["goods_sku_id" => $goodsSkuId]);
//商品操作记录
$record = [
......@@ -574,6 +596,11 @@ class GoodsService
$goodsSkuList = GoodsSku::select("*", ["goods_spu_id" => $goodsSpuId]);
if (!empty($goodsSkuList)) {
foreach ($goodsSkuList as $sku) {
if ($sku["expiration_time"] < date("Y-m-d H:i:s")) {
throw new GoodsException(["cus" => 30]);
}
$goodsSkuId = $sku["goods_sku_id"];
$goodsSkuData = [
"online_type" => $onlineType,
......@@ -582,7 +609,7 @@ class GoodsService
];
if ($onlineType == 1) {
if ($sku['audit_status'] == 1) {
$goodsSkuData['online_status'] = 1;
$goodsSkuData['online_status'] = GoodsSku::ONLINE_STATUS_ONLINE;
}
$goodsSkuData['online_start_time'] = date("Y-m-d H:i:s");
}
......@@ -590,16 +617,49 @@ class GoodsService
//暂不上架
if ($onlineType == 3) {
//$goodsSkuData['audit_status'] = 0;
$goodsSkuData['online_status'] = 0;
if ($sku['audit_status'] == 1) {
$goodsSkuData['online_status'] = GoodsSku::ONLINE_STATUS_OFFLINE;
}else{
$goodsSkuData['online_status'] = 0;
}
}
if ($onlineType == 2) {
$onlineStartTime = strtotime($goodsSkuData['online_start_time']);
if ($onlineStartTime > time()) {
$goodsSkuData['online_status'] = 0;
if ($sku['audit_status'] == 1) {
$goodsSkuData['online_status'] = GoodsSku::ONLINE_STATUS_OFFLINE;
}else{
$goodsSkuData['online_status'] = 0;
}
}
}
//立即上架和定时上架
if (in_array($onlineType, [1,2])) {
if ($sku["expiration_time"] <= $goodsSkuData['online_start_time']) {
throw new GoodsException(["cus" => 52]);
}
}
$operatorId = empty($params["user_id"]) ? 0 : $params["user_id"];
$operatorName = !empty($params["user_name"]) ? $params["user_name"] : '';
//商品操作记录
$record = [
"goods_spu_id" => $goodsSpuId,
"goods_sku_id" => $goodsSkuId,
"operator_id" => $operatorId,
"operator_name" => $operatorName,
"goods_status" => $sku["audit_status"],
"online_status" => !empty($goodsSkuData['online_status']) ? $goodsSkuData['online_status'] : $sku["online_status"],
"before_version" => $sku["goods_version"],
"after_version" => $sku["goods_version"],
"note" => empty($params["rejected_reason"]) ? "" : $params["rejected_reason"],
];
GoodsOperationRecord::insertRecord($record);
GoodsSku::save($goodsSkuData, ["goods_sku_id" => $goodsSkuId]);
//上架的话,生成快照
self::addGoodsSnapshot($sku);
......@@ -817,16 +877,26 @@ class GoodsService
$skuParams["setmeal"] = $params["setmeal"];
}
if (!empty($skuData["online_start_time"])) {
$skuParams['online_start_time'] = empty($skuData["online_start_time"]) ? "" : $skuData["online_start_time"];
if (!empty($params["online_start_time"])) {
$skuParams['online_start_time'] = empty($params["online_start_time"]) ? "" : $params["online_start_time"];
}
if (!empty($skuData["online_end_time"])) {
$skuParams['online_end_time'] = empty($skuData["online_end_time"]) ? "" : $skuData["online_end_time"];
if (!empty($params["online_end_time"])) {
$skuParams['online_end_time'] = empty($params["online_end_time"]) ? "" : $params["online_end_time"];
}
if (!empty($skuData["online_type"])) {
$skuParams['online_type'] = empty($skuData["online_type"]) ? "" : $skuData["online_type"];
if (!empty($params["online_type"])) {
$skuParams['online_type'] = empty($params["online_type"]) ? 0 : $params["online_type"];
}
if (!empty($params["online_type"])) {
//立即上架和定时上架
if (in_array($params["online_type"], [1,2])) {
if ($skuData["expiration_time"] <= $skuParams['online_start_time']) {
throw new GoodsException(["cus" => 52]);
}
}
}
//商品操作记录
......@@ -1142,14 +1212,31 @@ class GoodsService
//是否是分销活动
$runningMarketing = MarketingGoodsService::getRunningMarketing([$params["goods_sku_id"]]);
$data["goods_info"]["is_fenxiao"] = false;
if (!empty($runningMarketing[$params["goods_sku_id"]])) {
$data["goods_info"]["is_fenxiao"] = true;
}
$marketingInfoList = MarketingGoods::select(["marketing_id", "goods_sku_id"], ["goods_sku_id" => $params["goods_sku_id"]]);
$data["goods_info"]['goods_share_code'] = CommonService::getGoodsShareId($params);
if (!empty($marketingInfoList)) {
foreach ($marketingInfoList as $marketingInfo) {
$marketingInfoIds[$marketingInfo["goods_sku_id"]] = $marketingInfo["marketing_id"];
}
$marketingIds = array_values($marketingInfoIds);
$now = date("Y-m-d H:i:s");
$resMarketingList = Marketing::select("*", ["start_time[<]" => $now, "end_time[>]" => $now, "marketing_id" => $marketingIds, "marketing_type" => Marketing::MARKETING_TYPE_FENXIAO]);
if (!empty($resMarketingList)) {
foreach ($resMarketingList as $res) {
$marketingList[$res["marketing_id"]] = $res;
}
}
}
$marketing = !empty($marketingList) ? current($marketingList) : [];
$data["goods_info"]['goods_share_code'] = CommonService::getGoodsShareId($params);
//当前人是否是团长
$data["goods_info"]["is_tuanzhang"] = false;
if (!empty($params["user_id"])) {
......@@ -1158,7 +1245,11 @@ class GoodsService
$data["goods_info"]["is_tuanzhang"] = true;
if (!empty($runningMarketing)) {
//分销返现多少钱
$data["goods_info"]["cash_back"] = sprintf("%.2f",$runningMarketing[$params["goods_sku_id"]] * $data["goods_info"]["price"]);
if (!empty($marketing) && $marketing['commission_mode'] == 2) {
$data["goods_info"]["cash_back"] = (float)sprintf("%.2f",$runningMarketing[$params["goods_sku_id"]]);
}else{
$data["goods_info"]["cash_back"] = (float)sprintf("%.2f",$runningMarketing[$params["goods_sku_id"]] * $data["goods_info"]["price"]);
}
}
}
}
......@@ -1216,6 +1307,16 @@ class GoodsService
$nameList = Category::select("name", ["category_id" => [$item["category_1_id"], $item["category_2_id"]]]);
$list[$key]["category_1_name"] = $nameList[0];
$list[$key]["category_2_name"] = $nameList[1];
if ($item['online_type'] == 3) {
$list[$key]["online_start_time"] = "";
$list[$key]["online_end_time"] = "";
}
if ($item['online_type'] == 1) {
$list[$key]["online_end_time"] = "";
}
}
}
return ["list" => $list, "count" => $count];
......
......@@ -156,12 +156,12 @@ class MarketingGoodsService
//比例
if (!empty($secondCommission) && $commissionMode == 1) {
$price = !empty($list[$i]['price']) ? $list[$i]['price'] : 0;
$list[$i]['share_price'] = substr(sprintf("%.4f",$secondCommission*$price/100),0,-2);
$list[$i]['share_price'] = (float) substr(sprintf("%.4f",$secondCommission*$price/100),0,-2);
}
//固定
if (!empty($commissionMode) && $commissionMode == 2) {
$list[$i]['share_price'] = substr(sprintf("%.4f",$secondCommission/100),0,-2);
$list[$i]['share_price'] = (float) substr(sprintf("%.4f",$secondCommission),0,-2);
}
$content = $userId .'_' .$value['marketing_id'];
......@@ -201,9 +201,13 @@ class MarketingGoodsService
$data = [];
foreach ($marketingInfoIds as $goodsSkuId => $marketingId) {
if (!empty($marketingList[$marketingId]["second_commission_value"])) {
if (!empty($marketingList[$marketingId]["second_commission_value"]) && $marketingList[$marketingId]["commission_mode"] == 1) {
$data[$goodsSkuId] = substr(sprintf("%.4f", $marketingList[$marketingId]["second_commission_value"]/10000), 0, -2);
}
if (!empty($marketingList[$marketingId]["second_commission_value"]) && $marketingList[$marketingId]["commission_mode"] == 2) {
$data[$goodsSkuId] = substr(sprintf("%.4f", $marketingList[$marketingId]["second_commission_value"]/100), 0, -2);
}
}
return $data;
}
......
......@@ -561,6 +561,9 @@ class MarketingService
$clearPrice = !empty($value["clear_price"]) ? $value["clear_price"] : 0;
$price = !empty($value["price"]) ? $value["price"] : 0;
$chargeFee = !empty($price) ? (float)bcmul($price , self::CHARGEFEE,2) : 0; //手续费 (分)
if ($chargeFee < 1) {
$chargeFee = 0;
}
if (!empty($clearPrice) && $clearPrice > 0) {
if ($commissionMode == Marketing::COMMISSION_MODE_RATE) {
$commissionTotal = ($firstCommissionRate + $secondCommissionRate) / 10000 * $price;
......
......@@ -29,10 +29,10 @@ class Goods implements DaemonServiceInterface
GoodsSku::save($colums, $where);
//更新es
GoodsService::updateGoodsInfoToEs($where['goods_sku_id']);
}
$this->onlineGoods();
$this->onlineOffGoods();
}
......@@ -65,9 +65,10 @@ class Goods implements DaemonServiceInterface
sleep(2);
$orderData = [
'online_type' => 2,
'online_status' => 0,
'online_status' => [0,2],
'audit_status' => 1,
'online_start_time[<]' => date("Y-m-d H:i:s",time()),
'online_end_time[>]' => date("Y-m-d H:i:s",time()),
'LIMIT' => 100,
];
$goodsList = GoodsSku::getRecords($orderData);
......@@ -84,4 +85,35 @@ class Goods implements DaemonServiceInterface
}
}
/**
*
* 自动下架
*/
public function onlineOffGoods()
{
sleep(2);
$orderData = [
'online_type' => 2,
'online_status' => 1,
'audit_status' => 1,
'online_end_time[<]' => date("Y-m-d H:i:s",time()),
'LIMIT' => 100,
];
$goodsList = GoodsSku::getRecords($orderData);
DaemonLog::info('DaemonServiceOnlineOff_goods', json_encode($goodsList));
foreach ($goodsList as $key => $value) {
$where = [];
$where['goods_sku_id'] = !empty($value['goods_sku_id']) ? $value['goods_sku_id'] : '';
$colums = [
'online_status' => 2,
];
GoodsSku::save($colums, $where);
//更新es
GoodsService::updateGoodsInfoToEs($where['goods_sku_id']);
}
}
}
\ 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