// +---------------------------------------------------------------------- namespace app\common\repositories\user; 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 app\common\repositories\system\groupData\GroupDataRepository; use think\db\exception\DataNotFoundException; use think\db\exception\DbException; use think\db\exception\ModelNotFoundException; use think\facade\Log; /** * @mixin UserAssetsLogDao */ class UserAssetsLogRepository extends BaseRepository { 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, GroupDataRepository $groupRepository) { $this->dao = $dao; $this->userAssetsRepository = $userAssetsRepository; $this->productRepository = $productRepository; $this->groupDataRepository = $groupRepository; } /** * notes 获取资产变动类型 * @return string[] * @create 2024/3/15 15:30 * @update 2024/3/15 15:30 * @author zhangkxiang * @editor */ public function getChangeType() { 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) { $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 * * {"name":"福利积分--项目经理", "value":10, "key":"welfare_project"} {"name":"福利积分--一星经理", "value":30, "key":"welfare_project_1"} {"name":"福利积分--二星经理", "value":50, "key":"welfare_project_2"} {"name":"福利积分--三星经理", "value":80, "key":"welfare_project_3"} {"name":"贡献值--用户", "value":1, "key":"contribution_user"} {"name":"贡献值--项目经理", "value":1, "key":"contribution_project"} {"name":"贡献值--一星经理", "value":2, "key":"contribution_project_1"} {"name":"贡献值--二星经理", "value":3, "key":"contribution_project_2"} {"name":"贡献值--三星经理", "value":4, "key":"contribution_project_3"} {"name":"惠通宝--用户", "value":5, "key":"huitong_user"} {"name":"惠通宝--项目经理", "value":10, "key":"huitong_project"} {"name":"惠通宝--一星经理", "value":30, "key":"huitong_project_1"} {"name":"惠通宝--二星经理", "value":50, "key":"huitong_project_2"} {"name":"惠通宝--三星经理", "value":80, "key":"huitong_project_3"} {"name":"福利积分--区域代理--区域代理奖", "value":1, "key":"welfare_agent"} {"name":"福利积分--区域代理--推荐商家奖", "value":1, "key":"welfare_agent_recommend"} {"name":"福利积分--项目经理--推荐商家奖", "value":1, "key":"welfare_project_recommend"} {"name":"福利积分--商户--推荐商家奖", "value":1, "key":"welfare_merchat_recommend"} {"name":"惠通宝增值幅度比例配置", "value":10, "key":"huitong_add"} {"name":"福利积分--存在分红点用户奖励", "value":10, "key":"share_award"} */ public function userPayEvent($groupOrder) { // 配置信息 $config = $this->groupDataRepository->getGroupDataLst(0, 100, 1, 100); $config = array_column($config['list'], "value", 'key'); foreach ($groupOrder['orderList'] as $orderItem) { $base = 0; 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']; } } // 1. 用户资产 $this->userAssets($orderItem, $config, $base); } } /** * notes 用户资产变动 * @param $orderItem * @param $config * @param $base * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException * @create 2024/3/17 17:06 * @update 2024/3/17 17:06 * @author zhangkxiang * @editor */ public function userAssets($orderItem, $config, $base){ $logList = array(); $welfare = $huitong = $contribution = 0; // 1. 本人的消费积分 $logList[] = array( 'uid' => $orderItem['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']; // 如果该订单奖励基数大于0 if($base){ // 2. 本人的福利积分 $orderWelfare = round($base * 0.1, 2); $welfare = $orderWelfare; $logList[] = array( 'uid' => $orderItem['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 * $config['huitong_user'] /100, 2); $huitong = $orderHuitong; $logList[] = array( 'uid' => $orderItem['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 * $config['contribution_user']/100, 2); $contribution = $orderContribution; $logList[] = array( 'uid' => $orderItem['uid'], 'asset_type' => self::ASSET_TYPE_CONTRIBUTION, 'type' => self::CHANGE_TYPE_ORDER_GET, 'status' => self::STATUS_FROZEN, 'order_id' => $orderItem['order_id'], 'count' => $orderContribution, ); } $this->addLog($logList); $this->userAssetsRepository->orderEvent($orderItem['uid'], self::STATUS_FROZEN, compact('consume', 'welfare', 'huitong', 'contribution')); } public function addLog($list) { $this->dao->insertAll($list); } public function userRefund() { } }