MaterialForm.php 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /**
  3. * MaterialForm.php
  4. * todo 文件描述
  5. * Created on 2025/1/13 上午11:17
  6. * @author: hankaige
  7. */
  8. namespace app\modules\client\models\v1;
  9. use app\models\Goods;
  10. use app\models\material\Material;
  11. use app\models\material\MaterialCategory;
  12. use app\models\material\MaterialBrowsing;
  13. use app\models\material\MaterialResource;
  14. use yii\helpers\ArrayHelper;
  15. class MaterialForm extends \yii\base\Model
  16. {
  17. public int $store_id;
  18. public string $promotion = '';
  19. public int $material_category_id = -1;
  20. public int $id;
  21. public function rules(){
  22. return [
  23. ['promotion','string'],
  24. ['material_category_id','integer']
  25. ];
  26. }
  27. public function getMaterialCategory():array
  28. {
  29. $list = MaterialCategory::find()->where(['store_id'=>$this->store_id])
  30. ->andWhere(['OR', ['delete_time' => 0], ['IS', 'delete_time', NULL]])->asArray()->select(['id','name','sort'])->orderBy('sort ASC, id DESC')->all();
  31. array_unshift($list,['id'=>-1,'name'=>'全部','sort' => 0]);
  32. return ['code' => 0, 'data' => $list];
  33. }
  34. public function getMaterialList():array
  35. {
  36. $query = Material::find()->with(['materialResource','goods'])->alias('m')->where(['m.store_id'=>$this->store_id,'m.status' => Material::STATUS_ON])->andWhere(['OR', ['m.delete_time' => 0], ['IS', 'm.delete_time', NULL]])->orderBy('is_top DESC,sort ASC,create_time DESC');
  37. if($this->material_category_id != -1){
  38. $query->andWhere(['m.material_category_id'=>$this->material_category_id]);
  39. }
  40. if(!empty($this->promotion)){
  41. $query->andWhere(['like','m.promotion',$this->promotion]);
  42. }
  43. $result = pagination_make($query);
  44. foreach($result['list'] as &$item){
  45. $item['resource_model_text'] = Material::RESOURCE_MODEL_TEXT[$item['resource_model']];
  46. }
  47. return ['code' => 0,'data' => $result,'msg' => '获取数据成功'];
  48. }
  49. public function getMaterialItem():array
  50. {
  51. $model = Material::find()->alias('m')->where(['m.store_id'=>$this->store_id,'m.id'=>$this->id])->andWhere(['OR', ['m.delete_time' => 0], ['IS', 'm.delete_time', NULL]])->with(['materialResource','goods'])->one();
  52. if(!$model){
  53. return ['code' => 1,'msg' => '数据不存在'];
  54. }
  55. $model->browsing_number = $model->browsing_number + 1;
  56. $model->save();
  57. $model = ArrayHelper::toArray($model);
  58. $model['materialResource'] = MaterialResource::find()->where(['material_id'=>$model['id']])->asArray()->all();
  59. $model['goods'] = Goods::find()->where(['id' => $model['goods_id']])->select('id,name,cover_pic,price')->one();
  60. $model['resource_model_text'] = Material::RESOURCE_MODEL_TEXT[$model['resource_model']];
  61. $model['download_number'] = $model['download_number'] > 10000 ? bcmul($model['download_number'] / 10000,1,2).'万' : $model['download_number'];
  62. // 生成浏览记录 并浏览量+1
  63. return ['code' => 0,'data' => $model,'msg' => '获取数据成功'];
  64. }
  65. public function getDownloadStatistics(){
  66. $model = Material::findOne($this->id);
  67. $model->download_number += 1;
  68. $model->save();
  69. $downloadNumber = $model->download_number > 10000 ? bcmul($model->download_number / 10000,1,2).'万' : $model->download_number;
  70. return ['code' => 0,'msg' => '记录成功','data' => (string)$downloadNumber];
  71. }
  72. }