StoreAttrTemplateRepository.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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\repositories\store;
  12. use app\common\dao\BaseDao;
  13. use app\common\dao\store\StoreAttrTemplateDao;
  14. use app\common\repositories\BaseRepository;
  15. use think\db\exception\DataNotFoundException;
  16. use think\db\exception\DbException;
  17. use think\db\exception\ModelNotFoundException;
  18. use think\exception\ValidateException;
  19. use think\Model;
  20. /**
  21. * Class StoreAttrTemplateRepository
  22. * @package app\common\repositories\store
  23. * @author xaboy
  24. * @day 2020-05-06
  25. * @mixin StoreAttrTemplateDao
  26. */
  27. class StoreAttrTemplateRepository extends BaseRepository
  28. {
  29. /**
  30. * @var StoreAttrTemplateDao
  31. */
  32. protected $dao;
  33. /**
  34. * StoreAttrTemplateRepository constructor.
  35. * @param StoreAttrTemplateDao $dao
  36. */
  37. public function __construct(StoreAttrTemplateDao $dao)
  38. {
  39. $this->dao = $dao;
  40. }
  41. /**
  42. * 根据条件获取分页列表数据。
  43. *
  44. * 本函数用于查询特定条件下的数据列表,并支持分页。它首先根据提供的商家ID和查询条件进行查询,
  45. * 然后计算符合条件的数据总数,最后根据指定的页码和每页数据量获取对应的数据列表。
  46. *
  47. * @param int $merId 商家ID,用于限定查询的数据范围。
  48. * @param array $where 查询条件数组,用于指定查询的详细条件。
  49. * @param int $page 当前页码,用于指定要返回的数据页。
  50. * @param int $limit 每页数据数量,用于指定每页返回的数据条数。
  51. * @return array 返回包含数据总数和数据列表的数组。
  52. */
  53. public function getList($merId, array $where, $page, $limit)
  54. {
  55. // 根据商家ID和查询条件进行查询
  56. $query = $this->dao->search($merId, $where);
  57. // 计算符合条件的数据总数
  58. $count = $query->count($this->dao->getPk());
  59. // 根据当前页码和每页数据量获取数据列表
  60. $list = $query->page($page, $limit)->select();
  61. // 将数据总数和数据列表一起返回
  62. return compact('count', 'list');
  63. }
  64. /**
  65. * 检查传入数据的值是否符合规则。
  66. * 此方法用于验证模板值的合法性,包括检查规则名称是否存在、规则值是否重复、规则属性是否重复等。
  67. *
  68. * @param array $data 包含模板值的数据数组。
  69. * @return array 经过验证并可能经过修改的数据数组。
  70. * @throws ValidateException 如果数据验证失败,抛出此异常。
  71. */
  72. protected function checkValue(array $data)
  73. {
  74. // 初始化一个数组,用于存储已存在的规则值,以检查是否有重复。
  75. $arr = [];
  76. // 遍历模板值数组,对每个规则进行详细检查。
  77. foreach ($data['template_value'] as $k => $value) {
  78. // 如果当前规则值不是数组,则抛出异常,表示规则有误。
  79. if (!is_array($value)) throw new ValidateException('规则有误');
  80. // 如果当前规则的名称为空,则抛出异常,提示输入规则名称。
  81. if (!($value['value'] ?? null)) throw new ValidateException('请输入规则名称');
  82. // 如果当前规则的详细值为空或为空数组,则抛出异常,提示添加规则值。
  83. if (!($value['detail'] ?? null) || !count($value['detail'])) throw new ValidateException('请添加规则值');
  84. // 如果当前规则值已存在于已记录的规则值数组中,则抛出异常,表示规格重复。
  85. if(in_array($value['value'],$arr)) throw new ValidateException('规格重复');
  86. // 将当前规则值添加到已记录的规则值数组中。
  87. $arr[] = $value['value'];
  88. // 如果当前规则的详细值经去除重复后长度不等于原数组长度,则抛出异常,表示属性重复。
  89. if (count($value['detail']) != count(array_unique($value['detail']))) throw new ValidateException('属性重复') ;
  90. // 更新数据数组中的当前规则值,保留验证通过的值和详细信息。
  91. $data['template_value'][$k] = [
  92. 'value' => $value['value'],
  93. 'detail' => $value['detail'],
  94. ];
  95. }
  96. // 返回经过验证和可能修改后的数据数组。
  97. return $data;
  98. }
  99. /**
  100. * 创建新记录
  101. *
  102. * 本函数用于根据提供的数据创建新的记录。它首先对数据进行检查,然后通过数据访问对象(DAO)执行创建操作。
  103. * 这是一个重要的业务逻辑操作,确保了数据在插入数据库前的正确性和完整性。
  104. *
  105. * @param array $data 包含新记录数据的数组。数组的键应与数据库表的字段名对应,值为要插入的字段值。
  106. * @return mixed 返回DAO创建操作的结果。具体类型取决于DAO的实现,可能是一个布尔值、影响行数或新创建的记录ID。
  107. */
  108. public function create(array $data)
  109. {
  110. // 检查并可能修改传入的数据,以确保其符合要求
  111. $data = $this->checkValue($data);
  112. // 使用DAO创建新记录
  113. return $this->dao->create($data);
  114. }
  115. /**
  116. * 更新模板数据。
  117. *
  118. * 本函数用于根据给定的ID和新数据更新数据库中的相应记录。它首先对传入的数据进行有效性检查,
  119. * 然后将模板值转换为JSON格式,最后调用DAO层的方法执行更新操作。
  120. *
  121. * @param int $id 记录的唯一标识符,用于定位要更新的记录。
  122. * @param array $data 包含新数据的数组,其中必须包含template_value键。
  123. * @return bool 更新操作的结果,true表示成功,false表示失败。
  124. */
  125. public function update(int $id, array $data)
  126. {
  127. // 检查并处理传入的数据,确保其符合要求。
  128. $data = $this->checkValue($data);
  129. // 将模板值转换为JSON格式,以便存储和处理。
  130. $data['template_value'] = json_encode($data['template_value']);
  131. // 调用DAO层的update方法,执行实际的数据库更新操作。
  132. return $this->dao->update($id, $data);
  133. }
  134. /**
  135. * 根据商家ID列出相关数据
  136. *
  137. * 本函数通过调用DAO层的方法,获取指定商家ID的相关列表数据。
  138. * 主要用于业务逻辑中对数据的查询操作,不涉及复杂的数据处理。
  139. *
  140. * @param int $merId 商家ID,用于指定查询的数据范围。
  141. * @return array 返回查询结果列表,包含指定商家的相关数据。
  142. */
  143. public function list(int $merId)
  144. {
  145. // 调用DAO层的方法,获取指定商家ID的列表数据
  146. return $this->dao->getList($merId);
  147. }
  148. }