消费者购买订单获取资产

main
fengxinyhyl 11 months ago
parent d147648efc
commit 9319b2ba2b
  1. 12
      app/common/dao/user/UserAssetsDao.php
  2. 13
      app/common/dao/user/UserAssetsLogDao.php
  3. 5
      app/common/model/user/UserAssetsLog.php
  4. 6
      app/common/repositories/store/product/ProductRepository.php
  5. 147
      app/common/repositories/user/UserAssetsLogRepository.php
  6. 73
      app/common/repositories/user/UserAssetsRepository.php
  7. 3
      app/controller/api/Auth.php
  8. 8
      crmeb/listens/pay/CustomizePaySuccess.php

@ -14,26 +14,18 @@ namespace app\common\dao\user;
use app\common\dao\BaseDao;
use app\common\model\BaseModel;
use app\common\model\user\UserAssets;
use app\common\model\user\UserSpreadLog;
class UserAssetsDao extends BaseDao
{
protected function getModel(): string
{
return UserSpreadLog::class;
return UserAssets::class;
}
public function add($uid, $spread_uid, $old_spread_uid, $admin_id = 0)
{
$this->create(compact('uid', 'spread_uid', 'admin_id', 'old_spread_uid'));
}
public function search($where)
{
return UserSpreadLog::getDB()->when(isset($where['uid']) && $where['uid'] !== '', function ($query) use ($where) {
$query->where('uid', $where['uid']);
})->order('create_time DESC');
}
}

@ -14,15 +14,13 @@ namespace app\common\dao\user;
use app\common\dao\BaseDao;
use app\common\model\BaseModel;
use app\common\model\user\UserSpreadLog;
use app\common\model\user\UserAssetsLog;
class UserAssetsLogDao extends BaseDao
{
protected function getModel(): string
{
return UserSpreadLog::class;
return UserAssetsLog::class;
}
public function add($uid, $spread_uid, $old_spread_uid, $admin_id = 0)
@ -30,10 +28,5 @@ class UserAssetsLogDao extends BaseDao
$this->create(compact('uid', 'spread_uid', 'admin_id', 'old_spread_uid'));
}
public function search($where)
{
return UserSpreadLog::getDB()->when(isset($where['uid']) && $where['uid'] !== '', function ($query) use ($where) {
$query->where('uid', $where['uid']);
})->order('create_time DESC');
}
}

@ -17,6 +17,11 @@ use app\common\model\BaseModel;
class UserAssetsLog extends BaseModel
{
// 设置json类型字段
protected $json = ['ext'];
// 设置JSON数据返回数组
protected $jsonAssoc = true;
public static function tablePk(): ?string
{

@ -1123,7 +1123,11 @@ class ProductRepository extends BaseRepository
public function apiProductDetail(array $where, int $productType, ?int $activityId, $userInfo = null)
{
$field = 'is_show,product_id,mer_id,image,slider_image,store_name,store_info,unit_name,price,cost,ot_price,stock,sales,video_link,product_type,extension_type,old_product_id,rate,guarantee_template_id,temp_id,once_max_count,pay_limit,once_min_count,integral_rate,delivery_way,delivery_free,type,cate_id,svip_price_type,svip_price,mer_svip_status';
$field = 'is_show,product_id,mer_id,image,slider_image,store_name,store_info,
unit_name,price,cost,ot_price,stock,sales,video_link,product_type,extension_type,
old_product_id,rate,guarantee_template_id,temp_id,once_max_count,pay_limit,once_min_count,
integral_rate,delivery_way,delivery_free,type,cate_id,svip_price_type,
svip_price,mer_svip_status,cash_rate,base';
$with = [
'attr',
'content' => function($query) {

@ -13,27 +13,164 @@
namespace app\common\repositories\user;
use app\common\dao\user\UserSpreadLogDao;
use app\common\dao\user\UserAssetsLogDao;
use app\common\repositories\BaseRepository;
use app\common\repositories\store\product\ProductAssistRepository;
use app\common\repositories\store\product\ProductRepository;
use think\facade\Log;
/**
* @mixin UserSpreadLogDao
* @mixin UserAssetsLogDao
*/
class UserAssetsLogRepository extends BaseRepository
{
public function __construct(UserSpreadLogDao $dao)
const ASSET_TYPE_CONSUME = 1; // 消费积分
const ASSET_TYPE_SHARE_POINT = 2; // 分红点
const ASSET_TYPE_WELFARE = 3; // 福利积分
const ASSET_TYPE_HUITONG = 4; // 惠通宝
const ASSET_TYPE_CONTRIBUTION = 5; // 贡献值
const CHANGE_TYPE_ORDER_GET = 1; // 订单获取
const CHANGE_TYPE_SIGN = 2; // 签到
const CHANGE_TYPE_SHARE = 3; // 分红
const CHANGE_TYPE_ORDER_PAY = 4; // 订单消费
const CHANGE_TYPE_SPREAD = 5; // 推广
const CHANGE_TYPE_CULTIVATE = 6; // 培育
const CHANGE_TYPE_TRANSFER = 7; // 赠与
const CHANGE_TYPE_EXCHANGE = 8; // 兑换
const STATUS_FROZEN = 0; // 冻结
const STATUS_SUCCESS = 1; // 成功
const STATUS_REFUND = 2; // 退款
public function __construct(UserAssetsLogDao $dao, UserAssetsRepository $userAssetsRepository, ProductRepository $productRepository)
{
$this->dao = $dao;
$this->userAssetsRepository = $userAssetsRepository;
$this->productRepository = $productRepository;
}
/**
* notes 获取资产变动类型
* @return string[]
* @create 2024/3/15 15:30
* @update 2024/3/15 15:30
* @author zhangkxiang
* @editor
*/
public function getChangeType()
{
$this->dao = $dao;
return array(
self::CHANGE_TYPE_ORDER_GET => "订单获取",
self::CHANGE_TYPE_SIGN => "签到",
self::CHANGE_TYPE_SHARE => "分红",
self::CHANGE_TYPE_ORDER_PAY => "订单消费",
self::CHANGE_TYPE_SPREAD => "推广",
self::CHANGE_TYPE_CULTIVATE => "培育",
self::CHANGE_TYPE_TRANSFER => "赠与",
self::CHANGE_TYPE_EXCHANGE => "兑换",
);
}
public function getList(array $where, $page, $limit)
{
$query = $this->dao->search($where);
$count = $query->count();
$list = $query->page($page, $limit)->with(['spread' => function ($query) {
$list = $query->page($page, $limit)->with(['spread' => function ($query) {
$query->field('uid,nickname,avatar');
}])->select();
return compact('count', 'list');
}
/**
* notes 用户支付订单时间处理
* @param $groupOrder
* @create 2024/3/15 17:22
* @update 2024/3/15 17:22
* @author zhangkxiang
* @editor
*/
public function userPayEvent($groupOrder)
{
$logList = array();
$consume = $welfare = $huitong = $contribution = 0;
// 循环groupOrder, 按照商家订单处理
foreach ($groupOrder['orderList'] as $orderItem) {
$base = 0;
// 1. 本人的消费积分
$logList[] = array(
'uid' => $groupOrder['uid'],
'asset_type' => self::ASSET_TYPE_CONSUME,
'type' => self::CHANGE_TYPE_ORDER_GET,
'status' => self::STATUS_FROZEN,
'order_id' => $orderItem['order_id'],
'count' => $orderItem['pay_price'],
);
$consume += $orderItem['pay_price'];
foreach ($orderItem['orderProduct'] as $orderProduct) {
// 获取商品详情(奖励积分
$product = $this->productRepository->detail($orderProduct['product_id'], null);
Log::info("product" . json_encode($product));
$rate = floatval($orderProduct['total_price']) / floatval($orderProduct['product_price']) * 100;
if ($rate >= $product['cash_rate']) {
$base += $product['base'];
}
}
// 如果该订单奖励基数大于0
if($base){
// 2. 本人的福利积分
$orderWelfare = round($base * 0.1, 2);
$welfare+= $orderWelfare;
$logList[] = array(
'uid' => $groupOrder['uid'],
'asset_type' => self::ASSET_TYPE_WELFARE,
'type' => self::CHANGE_TYPE_ORDER_GET,
'status' => self::STATUS_FROZEN,
'order_id' => $orderItem['order_id'],
'count' => $orderWelfare,
);
// 3. 本人的惠通宝
$orderHuitong = round($base * 0.05, 2);
$huitong+= $orderHuitong;
$logList[] = array(
'uid' => $groupOrder['uid'],
'asset_type' => self::ASSET_TYPE_HUITONG,
'type' => self::CHANGE_TYPE_ORDER_GET,
'status' => self::STATUS_FROZEN,
'order_id' => $orderItem['order_id'],
'count' => $orderHuitong,
);
// 4. 本人的贡献值
$orderContribution = round($base * 0.01, 2);
$contribution+= $orderContribution;
$logList[] = array(
'uid' => $groupOrder['uid'],
'asset_type' => self::ASSET_TYPE_HUITONG,
'type' => self::CHANGE_TYPE_ORDER_GET,
'status' => self::STATUS_FROZEN,
'order_id' => $orderItem['order_id'],
'count' => $orderContribution,
);
}
}
$this->addLog($logList);
$this->userAssetsRepository->orderEvent($groupOrder['uid'], self::STATUS_FROZEN, compact('consume', 'welfare', 'huitong', 'contribution'));
}
public function addLog($list)
{
$this->dao->insertAll($list);
}
public function userRefund()
{
}
}

@ -13,27 +13,92 @@
namespace app\common\repositories\user;
use app\common\dao\user\UserSpreadLogDao;
use app\common\dao\user\UserAssetsDao;
use app\common\repositories\BaseRepository;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
/**
* @mixin UserSpreadLogDao
* @mixin UserAssetsDao
*/
class UserAssetsRepository extends BaseRepository
{
public function __construct(UserSpreadLogDao $dao)
public function __construct(UserAssetsDao $dao)
{
$this->dao = $dao;
}
public function getList(array $where, $page, $limit)
{
$query = $this->dao->search($where);
$count = $query->count();
$list = $query->page($page, $limit)->with(['spread' => function ($query) {
$list = $query->page($page, $limit)->with(['spread' => function ($query) {
$query->field('uid,nickname,avatar');
}])->select();
return compact('count', 'list');
}
/**
* notes 订单状态发生变更,影响用户资产
* @param $uid
* @param $status
* @param $data
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @create 2024/3/15 17:23
* @update 2024/3/15 17:23
* @author zhangkxiang
* @editor
*/
public function orderEvent($uid, $status, $data = array())
{
$assets = array();
$info = $this->dao->get($uid);
if($info){
// 购买订单获得冻结资产
if($status == UserAssetsLogRepository::STATUS_FROZEN) {
$assets = array(
'consume_frozen' => $info['consume_frozen'] + $data['consume'],
'welfare_frozen' => $info['welfare_frozen'] + $data['welfare'],
'huitong_frozen' => $info['huitong_frozen'] + $data['huitong'],
'contribution_frozen' => $info['contribution_frozen'] + $data['contribution'],
);
}elseif ($status == UserAssetsLogRepository::STATUS_SUCCESS){
$assets = array(
'consume' => $info['consume'] + $data['consume'],
'welfare' => $info['welfare'] + $data['welfare'],
'huitong' => $info['huitong'] + $data['huitong'],
'contribution' => $info['contribution'] + $data['contribution'],
'consume_frozen' => $info['consume_frozen'] - $data['consume'],
'welfare_frozen' => $info['welfare_frozen'] - $data['welfare'],
'huitong_frozen' => $info['huitong_frozen'] - $data['huitong'],
'contribution_frozen' => $info['contribution_frozen'] - $data['contribution'],
);
}elseif ($status == UserAssetsLogRepository::STATUS_REFUND){
$assets = array(
'consume_frozen' => $info['consume_frozen'] - $data['consume'],
'welfare_frozen' => $info['welfare_frozen'] - $data['welfare'],
'huitong_frozen' => $info['huitong_frozen'] - $data['huitong'],
'contribution_frozen' => $info['contribution_frozen'] - $data['contribution'],
);
}
$this->dao->update($uid, $assets);
}else{
$assets = array(
'uid' => $uid,
'consume_frozen' => $data['consume'] ?? 0,
'welfare_frozen' => $data['welfare'] ?? 0,
'huitong_frozen' => $data['huitong'] ?? 0,
'contribution_frozen' => $data['contribution'] ?? 0,
);
$this->dao->create($assets);
}
}
}

File diff suppressed because one or more lines are too long

@ -11,6 +11,7 @@ namespace crmeb\listens\pay;
use app\common\repositories\store\order\StoreGroupOrderRepository;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\repositories\user\UserAssetsLogRepository;
use crmeb\interfaces\ListenerInterface;
use think\facade\Log;
@ -20,5 +21,12 @@ class CustomizePaySuccess implements ListenerInterface
public function handle($data): void
{
Log::info('支付成功' . json_encode($data));
if(isset($data['groupOrder']) and $data['groupOrder']){
/**
* @var UserAssetsLogRepository $repository
*/
$repository = app()->make(UserAssetsLogRepository::class);
$repository->userPayEvent($data['groupOrder']);
}
}
}

Loading…
Cancel
Save