IndexForm.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. /**
  3. * IndexFrom.php
  4. * todo 文件描述
  5. * Created on 2024/12/3 上午11:14
  6. * @author: hankaige
  7. */
  8. namespace app\modules\client\models\v1\cashier;
  9. use app\models\CashierUserExt;
  10. use app\models\Goods;
  11. use app\models\MdGoods;
  12. use app\models\Order;
  13. use yii\base\Model;
  14. class IndexForm extends Model
  15. {
  16. public $store_id;
  17. public $md_id;
  18. public $goods_code;
  19. public function rules(): array
  20. {
  21. return [
  22. [['store_id','md_id'], 'integer'],
  23. ['goods_code', 'string'],
  24. ];
  25. }
  26. public function attributeLabels(): array
  27. {
  28. return [
  29. 'store_id' => '商城ID',
  30. 'md_id' => '门店ID',
  31. 'goods_code' => '商品条码'
  32. ];
  33. }
  34. public function indexData(): array
  35. {
  36. // 获取昨天零点的时间戳
  37. $yesterday = strtotime(date('Y-m-d', strtotime('-1 day')));
  38. // 获取今天零点的时间戳
  39. $today = strtotime(date('Y-m-d'));
  40. $tomorrow = strtotime('+1 Day', $today);
  41. $md_id = $this->md_id;
  42. if ($md_id <= 0) {
  43. $md_id = [0, -1];
  44. $this->md_id = 0;
  45. }
  46. $user = get_user();
  47. $query = Order::find()->where(['store_id' => $this->store_id, 'md_id' => $md_id])->andWhere(['!=', 'trade_status', 1])
  48. ->andWhere(['or', ['is_pay' => 1], ['pay_type' => \app\models\Order::PAY_TYPE_COD]]);
  49. $today_query = (clone $query)->andWhere(['between', 'created_at', $today, $tomorrow]);
  50. $data['order_price'] = (clone $today_query)->sum('total_price') ?? 0;
  51. $data['yesterday_order_price'] = (clone $query)->andWhere(['between', 'created_at', $yesterday, $today])->sum('total_price') ?? 0;
  52. $data['pay_price'] = (clone $today_query)->sum('pay_price') ?? 0;
  53. $data['yesterday_pay_price'] = (clone $query)->andWhere(['between', 'created_at', $yesterday, $today])->sum('pay_price') ?? 0;
  54. $data['order_count'] = (clone $today_query)->count() ?? 0;
  55. $data['yesterday_order_count'] = (clone $query)->andWhere(['between', 'created_at', $yesterday, $today])->count() ?? 0;
  56. $data['discount_amount'] = bcsub($data['order_price'], $data['pay_price'], 2);
  57. $data['yesterday_discount_amount'] = bcsub($data['yesterday_order_price'], $data['yesterday_pay_price'], 2);
  58. $data['md_id'] = $this->md_id;
  59. $data['cashier_data_auth'] = intval($user->cashier_data_auth);
  60. // 如果md>0的时候 要给查询一下有没有余额和积分的权限
  61. if($md_id > 0){
  62. $cashierUserExt = CashierUserExt::find()->where(['user_id' => $user->id, 'md_id' => $md_id,'is_delete' => 0])->one();
  63. $data['balance'] = $cashierUserExt->balance ?? 0;
  64. $data['integral'] = $cashierUserExt->integral ?? 0;
  65. }else{
  66. $data['balance'] = 1;
  67. $data['integral'] = 1;
  68. }
  69. return ['code' => 0, 'msg' => '请求成功', 'data' => $data];
  70. }
  71. public function getGoods(): array
  72. {
  73. if (empty($this->goods_code)) {
  74. return ['code' => 1, 'msg' => '商品条码信息不能为空'];
  75. }
  76. $fields = 'g.id as goods_id, g.name,g.attr,g.cover_pic,g.cost_price';
  77. $query = Goods::find()->alias('g')->where(['g.store_id' => $this->store_id, 'g.type' => Goods::GOODS_TYPE_NORMAL, 'g.status' => Goods::STATUS_NORMAL, 'g.is_delete' => 0]);
  78. if ($this->md_id > 0) {
  79. $query->andWhere(['g.id' => MdGoods::find()->where(['md_id' => $this->md_id, 'status' => 1])->select('goods_id')]);
  80. $query->leftJoin(['mg' => MdGoods::tableName()], 'g.id = mg.goods_id')->andWhere(['mg.md_id' => $this->md_id]);
  81. $fields = 'g.id as goods_id, g.name,mg.attr,g.cover_pic,g.cost_price';
  82. }
  83. $goods = $query->andWhere(['or', ['g.goods_no' => $this->goods_code], ['LIKE', "JSON_UNQUOTE(JSON_EXTRACT(g.attr, '$[*].no'))", $this->goods_code]])->select($fields)->asArray()->one();
  84. if (empty($goods)) {
  85. return ['code' => 1, 'msg' => '商品不存在'];
  86. }
  87. $attr = json_decode($goods['attr'], TRUE);
  88. foreach ($attr as $attr_item) {
  89. if ($attr_item['no'] === $this->goods_code) {
  90. $goods['attr_list'] = $attr_item['attr_list'];
  91. $goods['pic'] = !empty($attr_item['pic']) ? $attr_item['pic'] : $goods['cover_pic'];
  92. $goods['price'] = $goods['new_price'] = $attr_item['price'];
  93. $goods['goods_num'] = $attr_item['num'];
  94. }
  95. }
  96. $goods['num'] = 1;
  97. return ['code' => 0, 'msg' => '请求成功', 'data' => ['goods' => $goods]];
  98. }
  99. }