getPageValue(); $where['is_del'] = 0; $list = $this->dao->selectList($where, '*', $page, $limit, 'add_time desc', true); $count = $this->dao->count($where); return compact('list', 'count'); } /** * 保存数据方法 * * 该方法用于处理数据的保存操作,根据提供的标识$id判断是更新现有记录还是创建新记录 * 使用事务确保数据一致性,在更新或创建过程中,涉及的操作要么全部完成,要么全部不完成 * * @param int $id 要更新的记录的标识,如果为0则表示创建新记录 * @param array $data 要保存的数据数组,包含需要更新或插入的字段和值 * */ public function saveData(array $data): bool { // 使用事务处理数据保存操作,确保数据的一致性和完整性 return $this->transaction(function () use ($data) { // 如果$id不存在,则创建新记录,并在成功后处理相关的卡片信息 $saveData = $data; // $saveData['total_num'] = pow(10, $data['total_num']); unset($saveData['pwd_type'], $saveData['pwd_num']); $saveData['add_time'] = time(); $res = $this->dao->save($saveData); $data['batch_id'] = $res->id; // 调用CardCodeServices服务的addCard方法,为新创建的记录添加卡片信息 app()->make(CardCodeServices::class)->addCard($data); return true; }); } /** * 删除指定ID的批次记录 * @param int $id * @return mixed * User: liusl * DateTime: 2025/5/9 15:48 */ public function del(int $id) { return $this->transaction(function () use ($id) { $this->update($id, ['is_del' => 1]); app()->make(CardCodeServices::class)->delete(['batch_id' => $id, 'card_id' => 0]); return true; }); } /** * 获取卡密批次树形结构列表 * @return array */ public function getTree() { $list = $this->search(['is_del' => 0])->field('id,name,total_num,used_num')->select()->toArray(); foreach ($list as &$item) { $item['remain_num'] = $item['total_num'] - $item['used_num']; $item['remain_num'] = max($item['remain_num'], 0); unset($item['total_num'], $item['used_num']); } unset($item); return $list; } /** * 分配卡密码并更新使用数量 * @param int $id 批次ID * @return bool */ public function allocationCode($id) { $info = $this->dao->get($id); if (!$info) { return true; } $used_num = app()->make(CardCodeServices::class)->search(['batch_id' => $id])->where('status', '<>', 0)->count(); $info->used_num = $used_num; $info->save(); return true; } }