GroupDataDao.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\common\dao\system\groupData;
  12. use app\common\dao\BaseDao;
  13. use app\common\model\BaseModel;
  14. use app\common\model\system\groupData\SystemGroupData;
  15. use think\db\BaseQuery;
  16. use think\db\exception\DataNotFoundException;
  17. use think\db\exception\DbException;
  18. use think\db\exception\ModelNotFoundException;
  19. use think\Model;
  20. /**
  21. * Class GroupDataDao
  22. * @package app\common\dao\system\groupData
  23. * @author xaboy
  24. * @day 2020-03-27
  25. */
  26. class GroupDataDao extends BaseDao
  27. {
  28. /**
  29. * @return BaseModel
  30. * @author xaboy
  31. * @day 2020-03-30
  32. */
  33. protected function getModel(): string
  34. {
  35. return SystemGroupData::class;
  36. }
  37. /**
  38. * 根据商家ID和分组ID获取分组数据
  39. *
  40. * 本函数旨在查询特定商家和分组对应的系统分组数据。通过指定商家ID和分组ID,
  41. * 可以从数据库中检索出相应的分组数据,并以特定的排序方式返回。
  42. *
  43. * @param int $merId 商家ID,用于指定查询的商家范围
  44. * @param int $groupId 分组ID,用于指定查询的分组范围
  45. * @return BaseQuery 返回查询结果的对象,该对象可用于进一步的查询操作或数据获取
  46. */
  47. public function getGroupDataWhere($merId, $groupId): BaseQuery
  48. {
  49. // 使用SystemGroupData类的getDB方法获取数据库操作对象
  50. // 并通过withAttr方法处理'value'字段,将其JSON格式化为数组
  51. // 然后通过where方法指定查询条件:商家ID和分组ID
  52. // 最后,通过order方法指定查询结果的排序方式为降序排序
  53. return SystemGroupData::getDB()->withAttr('value', function ($val) {
  54. // 这里对'value'字段进行JSON解码,以便后续处理
  55. return json_decode($val, true);
  56. })->where('mer_id', $merId)->where('group_id', $groupId)->order('sort DESC');
  57. }
  58. /**
  59. * 根据商家ID和分组ID获取分组数据信息。
  60. *
  61. * 本函数用于查询系统分组数据中,特定商家和特定分组的相关数据。
  62. * 它支持分页查询,并返回经过处理的分组数据数组,每个元素包含分组数据ID、商家ID以及其他解码后的分组数据内容。
  63. *
  64. * @param string $merId 商家ID,用于限定查询的商家范围。
  65. * @param string $groupId 分组ID,用于限定查询的分组范围。
  66. * @param int $page 查询的页码,可选参数,用于分页查询。
  67. * @param int $limit 每页的数据条数,可选参数,默认为10条。
  68. * @return array 返回查询结果数组,每个元素包含分组数据的详细信息。
  69. */
  70. public function getGroupData($merId, $groupId, ?int $page = null, ?int $limit = 10)
  71. {
  72. // 构建查询条件,查询指定商家ID、分组ID,并且状态为启用的分组数据。
  73. $query = SystemGroupData::getDB()
  74. ->where('mer_id', $merId)
  75. ->where('group_id', $groupId)
  76. ->where('status', 1)
  77. ->order('sort DESC,group_data_id ASC');
  78. // 如果指定了页码,则进行分页查询。
  79. if (!is_null($page)) {
  80. $query->page($page, $limit);
  81. }
  82. // 初始化分组数据数组。
  83. $groupData = [];
  84. // 遍历查询结果,对每个分组数据进行处理,包括解码和添加额外字段。
  85. foreach ($query->column('value,mer_id', 'group_data_id') as $k => $v) {
  86. // 解码分组数据值,并合并分组数据ID和商家ID到结果中。
  87. $groupData[] = json_decode($v['value'], true) + ['group_data_id' => $k, 'group_mer_id' => $v['mer_id']];
  88. }
  89. // 返回处理后的分组数据数组。
  90. return $groupData;
  91. }
  92. /**
  93. * 根据ID和状态获取数据
  94. *
  95. * 本函数用于从系统分组数据表中检索特定ID和可选状态的数据。它允许灵活地查询数据,
  96. * 既可以获取所有状态的数据,也可以根据特定状态进行筛选。
  97. *
  98. * @param int $id 数据ID,用于精确匹配数据行。
  99. * @param string|null $status 数据的状态,可选参数,用于按状态筛选数据。
  100. * @return mixed 返回查询结果,如果未找到数据则返回null。返回的数据包括'group_data_id'和'group_mer_id',
  101. * 以及查询结果中的'value'字段,方便调用方直接使用。
  102. */
  103. public function getData($id,$status = null)
  104. {
  105. // 初始化查询条件,指定数据ID
  106. $where['group_data_id'] = (int)$id;
  107. // 如果提供了状态参数,则添加到查询条件中
  108. if (!is_null($status)) $where['status'] = $status;
  109. // 执行查询,根据条件获取第一条数据
  110. $res = SystemGroupData::getDB()->where($where)->find();
  111. // 如果查询结果为空,则返回null
  112. if (!$res) return null;
  113. // 返回查询结果,附加'group_data_id'和'group_mer_id'字段,方便调用方使用
  114. return $res['value'] + ['group_data_id' => $res['group_data_id'], 'group_mer_id' => $res['mer_id']];
  115. }
  116. /**
  117. * 统计指定商户ID和分组ID的数据条数
  118. *
  119. * 此函数用于查询系统分组数据表中,特定商户和特定分组下,状态为有效的数据条数。
  120. * 主要用于统计或管理目的,例如,展示某个分组下的数据数量,或者作为数据列表的分页依据。
  121. *
  122. * @param int $merId 商户ID,用于指定查询的商户范围
  123. * @param int $groupId 分组ID,用于指定查询的分组范围
  124. * @return int 返回满足条件的数据条数
  125. */
  126. public function groupDataCount($merId, $groupId)
  127. {
  128. // 通过SystemGroupData类的getDB方法获取数据库操作对象,并构建查询条件
  129. // 查询条件包括:商户ID、分组ID和数据状态为有效
  130. // 最后返回满足条件的数据条数
  131. return SystemGroupData::getDB()->where('mer_id', $merId)->where('group_id', $groupId)->where('status', 1)->count();
  132. }
  133. /**
  134. * 根据商家ID和分组ID获取分组数据ID列表
  135. *
  136. * 本函数用于查询系统分组数据中,特定商家和分组对应的数据显示。
  137. * 通过分页查询方式,获取指定页码和每页数量的数据列表。返回的数据包括分组数据ID和对应的json格式数据。
  138. *
  139. * @param string $merId 商家ID,用于限定查询的商家范围
  140. * @param string $groupId 分组ID,用于限定查询的分组范围
  141. * @param int|null $page 查询的页码,可选参数,如果提供则进行分页查询
  142. * @param int|null $limit 每页的数据条数,可选参数,默认为10条
  143. * @return array 返回一个包含分组数据ID和数据的数组列表
  144. */
  145. public function getGroupDataId($merId, $groupId, ?int $page = null, ?int $limit = 10)
  146. {
  147. // 构建查询条件,限定查询商家ID、分组ID,并且状态为启用的分组数据
  148. $query = SystemGroupData::getDB()->where('mer_id', $merId)->where('group_id', $groupId)->where('status', 1)->order('sort DESC');
  149. // 如果提供了页码和每页数量,则进行分页查询
  150. if (!is_null($page)) $query->page($page, $limit);
  151. // 初始化存储查询结果的数组
  152. $groupData = [];
  153. // 遍历查询结果,将分组数据ID和解码后的数据值存入结果数组
  154. foreach ($query->column('value', 'group_data_id') as $k => $v) {
  155. $groupData[] = ['id' => $k, 'data' => json_decode($v, true)];
  156. }
  157. // 返回处理后的查询结果
  158. return $groupData;
  159. }
  160. /**
  161. * 更新商家组数据信息
  162. *
  163. * 该方法用于根据给定的商家ID、数据ID和数据内容,更新系统组数据中的特定记录。
  164. * 主要操作包括将数据值转换为JSON格式,然后根据ID和商家ID更新数据库中的相应记录。
  165. *
  166. * @param int $merId 商家ID,用于指定更新记录所属的商家。
  167. * @param int $id 数据ID,用于指定要更新的具体数据记录。
  168. * @param array $data 数据数组,包含要更新的数据内容。其中的'value'键值对将被编码为JSON格式并更新到数据库中。
  169. * @return bool 返回更新操作的结果,成功为true,失败为false。
  170. */
  171. public function merUpdate($merId, $id, $data)
  172. {
  173. // 将$data数组中的'value'值编码为JSON格式,以符合数据库中该字段的存储要求
  174. $data['value'] = json_encode($data['value']);
  175. // 使用SystemGroupData类的数据库访问对象,根据$merId和$id查询到指定记录,并更新为$data中的新数据
  176. // 返回值为更新操作的结果,通常为true(成功)或false(失败)
  177. return SystemGroupData::getDB()->where('group_data_id', $id)->where('mer_id', $merId)->update($data);
  178. }
  179. /**
  180. * 删除指定商户的数据记录
  181. *
  182. * 本函数用于根据给定的商户ID和数据ID,从系统分组数据表中删除相应的数据记录。
  183. * 这里的“系统分组数据表”可能是存储系统配置或商户特定数据的数据库表。
  184. *
  185. * @param int $merId 商户ID,用于指定要删除数据的商户。
  186. * @param int $id 数据ID,用于指定要删除的具体数据记录。
  187. * @return int 返回删除操作的影响行数,即被删除的记录数。
  188. */
  189. public function merDelete($merId, $id)
  190. {
  191. // 根据$merId和$id查询并删除符合条件的数据记录
  192. return SystemGroupData::getDB()->where('mer_id', $merId)->where('group_data_id', $id)->delete();
  193. }
  194. /**
  195. * 检查指定商户ID和ID组合是否存在对应的记录。
  196. *
  197. * 本函数通过查询数据库来确定是否存在一个满足特定条件的记录。
  198. * 条件包括指定的商户ID(merId)和指定的ID($id)。
  199. * 如果存在满足条件的记录,则返回true,表示记录存在;否则返回false。
  200. *
  201. * @param int $merId 商户ID,用于限定查询的范围。
  202. * @param int $id 需要检查的ID,用于进一步限定查询的条件。
  203. * @return bool 如果存在满足条件的记录则返回true,否则返回false。
  204. */
  205. public function merExists(int $merId, int $id)
  206. {
  207. // 通过模型获取数据库实例,并构造查询条件,查询满足mer_id和主键$id的记录数量。
  208. // 如果记录数量大于0,则表示存在对应的记录,返回true;否则返回false。
  209. return ($this->getModel())::getDB()->where('mer_id', $merId)->where($this->getPk(), $id)->count() > 0;
  210. }
  211. /**
  212. * 清空指定用户组的数据
  213. *
  214. * 本函数用于删除数据库中指定用户组的所有数据。这可以是用户组的权限设置、配置项等。
  215. * 调用此函数将直接影响数据库中与指定用户组相关联的所有记录,因此应谨慎使用。
  216. *
  217. * @param int $groupId 用户组的唯一标识符。此参数指定要清空数据的用户组。
  218. * @return int 返回删除操作的影响行数。这可以用于确定成功删除的记录数量。
  219. */
  220. public function clearGroup(int $groupId)
  221. {
  222. // 根据$groupId查询并删除数据库中所有属于该用户组的记录
  223. return SystemGroupData::getDB()->where('group_id', $groupId)->delete();
  224. }
  225. /**
  226. * 根据给定的ID和商户ID获取系统分组数据的值
  227. *
  228. * 本函数用于从系统分组数据表中检索指定ID和商户ID对应的数据值。
  229. * 它首先根据这两个条件查询数据库,然后返回查询结果中'value'字段的值。
  230. * 如果没有找到匹配的数据,则返回null。
  231. *
  232. * @param int $id 系统分组数据的ID
  233. * @param int $merId 商户的ID
  234. * @return mixed 返回查询结果中'value'字段的值,如果未找到则返回null
  235. */
  236. public function merGet($id, $merId)
  237. {
  238. // 根据$group_data_id和$mer_id查询数据库,获取符合条件的第一条数据
  239. $data = SystemGroupData::getDB()->where('group_data_id', $id)->where('mer_id', $merId)->find();
  240. // 如果查询结果存在,则返回'value'字段的值,否则返回null
  241. return $data ? $data['value'] : null;
  242. }
  243. /**
  244. * 清除特定字段值对应的数据记录
  245. *
  246. * 本函数用于根据指定的字段值和该值对应的ID,从数据库中删除相应的记录。
  247. * 这是个通用函数,可以通过传入不同的字段名和ID值来删除不同表中的数据。
  248. *
  249. * @param mixed $id 需要删除的数据记录的ID值,可以是数字、字符串等
  250. * @param string $field 指定的字段名,用于查询和删除数据
  251. */
  252. public function clear($id,$field)
  253. {
  254. // 使用模型获取数据库实例,并构造删除语句,根据字段和ID删除数据
  255. $this->getModel()::getDB()->where($field, $id)->delete();
  256. }
  257. }