$account_identity, 'lm_order_id' => $lm_oid, 'money' => $money, 'room_id' => $room_id, 'num' => $num, 'type' => $type, 'message' => $message, 'created_at' => date('Y-m-d H:i:s') ]; $ret = self::insertGetId($data); return $ret > 0 ? $lm_oid : -7030; } protected function updateLuckyMoneyRec(int $lm_id, float $take_money, int $take_num, float $ret_money = 0, string $ret_order_id = '') { $data = [ 'take_money' => $take_money, 'take_num' => $take_num, ]; if ($ret_money > 0) { $data['return_money'] = $ret_money; $data['return_order_id'] = $ret_order_id; } $data['updated_at'] = time(); return $ret = self::where('id', $lm_id)->update($data); } /** * 添加红包记录 * @param string $account_identity * @param float $money * @param int $num * @param int $room_id * @param int $type * @param string $message 红包祝福语 * @param callable $cb_red_pack_file_init * @return mixed */ public function handleLuckyMoney(string $account_identity, float $money, int $num, int $room_id, int $type = 0, $message = '', callable $cb_red_pack_file_init) { // $obj = C()->get('AutoLottery'); $obj = new LotteryMoneyConfirm(); $obj->account_identity = $account_identity; $obj->operation_time = date('Y-m-d H:i:s', time()); $account = lm('Account', 'api')->where('identity', $account_identity)->first(); if (!$account) { return -51017;//用户不存在 } $accountDetail = lm('AccountDetail', 'Api')->where('account_identity', $account_identity)->first(); if (!$accountDetail) { return -51017;//用户不存在 } $obj->account_name = $account->account;//用户账号 $obj->money = $money;//发起金额 $obj->money_cash = $accountDetail->cash - $money; $obj->order_id = OrderID();//生成订单号 $obj->money_type = 2;//扣款操作 $obj->trade_type = 16;//红包打赏; $obj->rate = 1;//流水倍数; $obj->operator = 'system_auto';//审核人 _beginTransaction(); $updateAccountDetail = $obj->decrAccountDetailMoney($account_identity, $money); if ($updateAccountDetail != 1) { // dd(1111, $updateAccountDetail); _rollback(); return $updateAccountDetail; //更新余额失败 } $detail = "{$obj->account_name}于{$obj->operation_time}在{$room_id}号房间发起了红包,金额为{$money}元";//备注 $opDetail = $obj->addMoneyDetailRec($detail,'发起红包',2); if ($opDetail == -50014) { // dd(2222, $opDetail);; _rollback(); return $opDetail; } $this->lm_oid = $opDetail; $opLmRec = self::addLuckyMoneyRec($account_identity, $this->lm_oid, $money, $room_id, $num, $type, $message); if ($opLmRec < 0) { // dd(3333, $updateAccountDetail); _rollback(); return $opDetail; } $file = $cb_red_pack_file_init($this->lm_oid, $money, $num, $type); if ($file !== 1) { _rollback();//红包文件创建失败 return -7009; } //todo:用户操作日志添加 _commit(); //return $opLmRec; // $ret = self::where('lm_order_id', $opLmRec)->first(); // return $ret->lm_order_id; return $opLmRec; } public function getHistory(string $account_identity, int $page, int $limit) { $offset = $page * $limit; return $ret = self::where('account_identity', $account_identity) ->orderBy('id', 'desc') // ->select('lm_order_id as lm_id','money','created_at','num') ->limit($offset, $limit) ->get(); } public function getDetail(string $lm_id) { return $this ->leftJoin('account_detailed','lucky_money.account_identity','=','account_detailed.account_identity') ->where('lucky_money.lm_order_id', $lm_id) ->select('lucky_money.lm_order_id', 'lucky_money.num', 'lucky_money.take_num', 'lucky_money.money', 'lucky_money.take_money', 'lucky_money.message','account_detailed.img_url','account_detailed.img_id') ->first(); } //检测红包是否存在 anton 2019-01-27 public function checkRed($where) { return $this->where('created_at','>=',$where['start']) ->where('created_at','<=',$where['end']) ->where('type','=','3') ->get(); } }