StoreOrderReceiptDao.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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\store\order;
  12. use app\common\dao\BaseDao;
  13. use app\common\model\store\order\StoreOrderReceipt;
  14. use app\common\model\user\User;
  15. class StoreOrderReceiptDao extends BaseDao
  16. {
  17. protected function getModel(): string
  18. {
  19. return StoreOrderReceipt::class;
  20. }
  21. /**
  22. * 根据条件搜索订单收据信息
  23. *
  24. * @param array $where 搜索条件
  25. * @return \think\db\Query 查询结果对象
  26. */
  27. public function search(array $where)
  28. {
  29. // 当订单类型或关键字存在时,细化查询条件
  30. if((isset($where['order_type']) && $where['order_type'] !== '') || (isset($where['keyword']) && $where['keyword'] !== '')){
  31. $query = StoreOrderReceipt::hasWhere('storeOrder',function($query)use($where){
  32. // 根据订单类型设置查询条件
  33. switch ($where['order_type'])
  34. {
  35. case 1: // 未支付
  36. $query->where('StoreOrder.paid',0)->where('StoreOrder.is_del',0);
  37. break;
  38. case 2: // 待发货
  39. $query->where('StoreOrder.paid',1)->where('StoreOrder.status',0)->where('StoreOrder.is_del',0);
  40. break;
  41. case 3: // 待收货
  42. $query->where('StoreOrder.status',1)->where('StoreOrder.is_del',0);
  43. break;
  44. case 4: // 待评价
  45. $query->where('StoreOrder.status',2)->where('StoreOrder.is_del',0);
  46. break;
  47. case 5: // 交易完成
  48. $query->where('StoreOrder.status',3)->where('StoreOrder.is_del',0);
  49. break;
  50. case 6: // 已退款
  51. $query->where('StoreOrder.status',-1)->where('StoreOrder.is_del',0);
  52. break;
  53. case 7: // 已删除
  54. $query->where('StoreOrder.is_del',1);
  55. break;
  56. case 8: // 全部
  57. $query->where('StoreOrder.is_del', 0);
  58. break;
  59. default:
  60. $query->where(true);
  61. break;
  62. }
  63. // 当关键字存在时,搜索订单号、真实姓名或用户电话中包含关键字的记录
  64. $query->when(isset($where['keyword']) && $where['keyword'] !== '' ,function($query)use($where){
  65. $query->whereLike("order_sn|real_name|user_phone","%{$where['keyword']}%");
  66. });
  67. });
  68. }else{
  69. // 如果没有指定订单类型和关键字,直接查询所有订单收据
  70. $query = StoreOrderReceipt::alias('StoreOrderReceipt');
  71. }
  72. // 根据状态筛选
  73. $query->when(isset($where['status']) && $where['status'] !== '' ,function($query)use($where){
  74. $query->where('StoreOrderReceipt.status',$where['status']);
  75. });
  76. // 根据日期范围筛选
  77. $query->when(isset($where['date']) && $where['date'] !== '' ,function($query)use($where){
  78. getModelTime($query,$where['date'],'StoreOrderReceipt.create_time');
  79. });
  80. // 根据收据号筛选
  81. $query->when(isset($where['receipt_sn']) && $where['receipt_sn'] !== '' ,function($query)use($where){
  82. $query->where('StoreOrderReceipt.receipt_sn',$where['receipt_sn']);
  83. });
  84. // 根据用户名筛选
  85. $query->when(isset($where['username']) && $where['username'] !== '' ,function($query)use($where){
  86. $uid = User::whereLike('nickname|phone',"%{$where['username']}%")->column('uid');
  87. $query->where('StoreOrderReceipt.uid','in',$uid);
  88. });
  89. $query->when(isset($where['phone']) && $where['phone'] !== '' ,function($query)use($where){
  90. $uid = User::whereLike('phone',"%{$where['phone']}%")->column('uid');
  91. $query->whereIn('StoreOrderReceipt.uid',$uid);
  92. });
  93. $query->when(isset($where['nickname']) && $where['nickname'] !== '' ,function($query)use($where){
  94. $uid = User::whereLike('nickname',"%{$where['nickname']}%")->column('uid');
  95. $query->where('StoreOrderReceipt.uid','in',$uid);
  96. });
  97. // 根据商户ID筛选
  98. $query->when(isset($where['mer_id']) && $where['mer_id'] !== '' ,function($query)use($where){
  99. $query->where('StoreOrderReceipt.mer_id',$where['mer_id']);
  100. });
  101. // 根据用户ID筛选
  102. $query->when(isset($where['uid']) && $where['uid'] !== '' ,function($query)use($where){
  103. $query->where('StoreOrderReceipt.uid',$where['uid']);
  104. });
  105. // 按创建时间降序排序
  106. return $query->order('StoreOrderReceipt.create_time DESC');
  107. }
  108. /**
  109. * 根据收据编号更新数据
  110. *
  111. * 本函数旨在通过给定的收据序列号($receipt_sn)更新相关数据。它利用了Model的数据库操作方法,
  112. * 通过查询到匹配收据序列号的记录,然后对这些记录进行数据更新操作。
  113. *
  114. * @param string $receipt_sn 收据序列号,用于定位需要更新的记录
  115. * @param array $data 包含需要更新的数据的数组
  116. * @return int 返回影响的行数,表示更新操作的结果
  117. */
  118. public function updateBySn(string $receipt_sn, $data)
  119. {
  120. // 调用getModel方法获取Model实例,并通过链式调用getDB方法获取数据库操作对象
  121. // 使用where方法指定更新条件为receipt_sn字段等于传入的收据序列号
  122. // 最后调用update方法执行数据更新操作,并返回影响的行数
  123. return $this->getModel()::getDB()->where('receipt_sn', $receipt_sn)->update($data);
  124. }
  125. /**
  126. * 根据订单ID删除相关记录
  127. *
  128. * 本函数旨在通过指定的订单ID,从数据库中删除与该订单相关的记录。
  129. * 这是一个高级操作,需要谨慎使用,以避免误删数据。
  130. *
  131. * @param int $id 订单ID,用于定位要删除的记录
  132. * @return int 返回删除操作影响的行数,用于确认删除操作的效果
  133. */
  134. public function deleteByOrderId($id)
  135. {
  136. // 调用getModel方法获取模型实例,并直接调用其getDB方法获取数据库连接
  137. // 然后使用where方法指定删除条件为order_id等于$id,最后执行delete方法进行删除操作
  138. return $this->getModel()::getDB()->where('order_id',$id)->delete();
  139. }
  140. }