MerchantCategoryDao.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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\merchant;
  12. use app\common\dao\BaseDao;
  13. use app\common\model\BaseModel;
  14. use app\common\model\system\merchant\MerchantCategory;
  15. use think\db\BaseQuery;
  16. use think\facade\Db;
  17. /**
  18. * Class MerchantCategoryDao
  19. * @package app\common\dao\system\merchant
  20. * @author xaboy
  21. * @day 2020-05-06
  22. */
  23. class MerchantCategoryDao extends BaseDao
  24. {
  25. /**
  26. * @return BaseModel
  27. * @author xaboy
  28. * @day 2020-03-30
  29. */
  30. protected function getModel(): string
  31. {
  32. return MerchantCategory::class;
  33. }
  34. /**
  35. * @param array $where
  36. * @return BaseQuery
  37. * @author xaboy
  38. * @day 2020-05-06
  39. */
  40. public function search(array $where = [])
  41. {
  42. return MerchantCategory::getDB();
  43. }
  44. /**
  45. * 获取所有商家分类选项
  46. *
  47. * 本函数旨在获取所有商家分类的名称和ID,以数组形式返回这些信息,
  48. * 以便在前端界面中作为下拉选项或其他形式的列表使用。
  49. *
  50. * @return array 返回一个包含所有商家分类ID和名称的数组,数组的每个元素是一个关联数组,
  51. * 关联数组中包含 'value' 和 'label' 两个键,分别对应商家分类的ID和名称。
  52. */
  53. public function allOptions()
  54. {
  55. // 从数据库中查询所有商家分类的名称和ID
  56. $data = MerchantCategory::getDB()->column('category_name', 'merchant_category_id');
  57. // 初始化用于存储选项的数组
  58. $options = [];
  59. // 遍历查询结果,构建每个分类的选项数组
  60. foreach ($data as $value => $label) {
  61. $options[] = compact('value', 'label');
  62. }
  63. // 返回构建好的选项数组
  64. return $options;
  65. }
  66. /**
  67. * 根据日期查询商家类别下的订单金额分组情况
  68. *
  69. * 本函数用于获取指定日期内,每个商家类别的订单总支付金额,并按支付金额降序排列。
  70. * 主要用于展示或统计特定日期内各商家类别的订单收入情况。
  71. *
  72. * @param string $date 查询的日期,格式为YYYY-MM-DD。如果未指定日期,则查询所有记录。
  73. * @param int $limit 返回结果的限制数量,默认为4,用于控制返回的商家类别数量。
  74. * @return array 返回一个包含商家类别名称和对应订单总支付金额的数组,数组项按支付金额降序排列。
  75. */
  76. public function dateMerchantPriceGroup($date, $limit = 4)
  77. {
  78. // 从MerchantCategory模型的数据库连接中获取查询对象
  79. return MerchantCategory::getDB()->alias('A')->leftJoin('Merchant B', 'A.merchant_category_id = B.category_id')
  80. ->leftJoin('StoreOrder C', 'C.mer_id = B.mer_id')->field(Db::raw('sum(C.pay_price) as pay_price,A.category_name'))
  81. // 根据$date参数条件,动态添加查询时间范围的条件
  82. ->when($date, function ($query, $date) {
  83. getModelTime($query, $date, 'C.pay_time');
  84. })
  85. // 按商家类别ID分组,筛选支付金额大于0的记录,按支付金额降序排列
  86. ->group('A.merchant_category_id')->where('pay_price', '>', 0)->order('pay_price DESC')->limit($limit)->select();
  87. }
  88. /**
  89. * 根据分类ID数组获取商戶分类名称列表
  90. *
  91. * 本函数通过查询数据库,根据提供的商戶分类ID数组,返回对应的分类名称列表。
  92. * 这种方法的使用场景可能是需要在前端展示商戶分类名称,而只有分类ID的情况下,
  93. * 通过本函数可以批量获取对应的分类名称,提高查询效率和代码的可读性。
  94. *
  95. * @param array $ids 商戶分类ID数组
  96. * @return array 分类名称列表
  97. */
  98. public function names(array $ids)
  99. {
  100. // 使用whereIn查询满足条件的商戶分类名称,并通过column方法只返回category_name列
  101. return MerchantCategory::getDB()->whereIn('merchant_category_id', $ids)->column('category_name');
  102. }
  103. }