SpecialWatch.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\admin\model\special;
  12. use basic\ModelBasic;
  13. use traits\ModelTrait;
  14. use think\Db;
  15. use app\admin\model\special\SpecialSource;
  16. use app\admin\model\special\SpecialTask;
  17. use app\admin\model\special\Special;
  18. /**素材观看记录
  19. * Class SpecialWatch
  20. * @package app\admin\model\special
  21. */
  22. class SpecialWatch extends ModelBasic
  23. {
  24. use ModelTrait;
  25. /**平均值
  26. * @param $special_id
  27. * @param $uid
  28. * @return float|int
  29. */
  30. public static function percentageSpecial($special_id, $uid, $type)
  31. {
  32. if ($type == 5) {
  33. $special_ids = SpecialSource::where('special_id', $special_id)->column('source_id');
  34. $sourceCount = SpecialSource::where('special_id', 'in', $special_id)->count();
  35. $count = self::where(['uid' => $uid])->where('special_id', 'in', $special_ids)->count();
  36. if ($sourceCount <= $count) {
  37. return self::where(['uid' => $uid])->where('special_id', 'in', $special_ids)->avg('percentage');
  38. } else {
  39. $sum = self::where(['uid' => $uid])->where('special_id', 'in', $special_ids)->sum('percentage');
  40. return bcmul(bcdiv($sum, bcmul($sourceCount, 100, 0), 2), 100, 0);
  41. }
  42. } else {
  43. $sourceCount = SpecialSource::where('special_id', $special_id)->count();
  44. $count = self::where(['uid' => $uid, 'special_id' => $special_id])->count();
  45. if ($sourceCount <= $count) {
  46. return self::where(['uid' => $uid, 'special_id' => $special_id])->avg('percentage');
  47. } else {
  48. $sum = self::where(['uid' => $uid, 'special_id' => $special_id])->sum('percentage');
  49. return bcmul(bcdiv($sum, bcmul($sourceCount, 100, 0), 2), 100, 0);
  50. }
  51. }
  52. }
  53. public static function setWhere($special_id, $type)
  54. {
  55. if ($type == 5) {
  56. $special_ids = SpecialSource::where('special_id', $special_id)->column('source_id');
  57. $model = SpecialSource::where('s.special_id', 'in', $special_ids)->alias('s')
  58. ->join('SpecialTask t', 's.source_id=t.id');
  59. } else {
  60. $model = SpecialSource::where('s.special_id', $special_id)->alias('s')
  61. ->join('SpecialTask t', 's.source_id=t.id');
  62. }
  63. return $model->field('t.title,s.special_id,s.source_id');
  64. }
  65. /**获取素材的学习进度
  66. * @param $special_id
  67. * @param $uid
  68. * @param $type
  69. * @param $page
  70. * @param $limit
  71. * @return array
  72. * @throws \think\Exception
  73. */
  74. public static function percen_tage_specials($where)
  75. {
  76. if (!$where['is_light']) {
  77. $data = self::setWhere($where['special_id'], $where['type'])->page($where['page'], $where['limit'])->select();
  78. foreach ($data as $key => &$value) {
  79. $percentage = self::percentage($where['uid'], $value['source_id'], $value['special_id']);
  80. if ($percentage) $value['percentage'] = $percentage;
  81. else $value['percentage'] = 0;
  82. }
  83. $count = self::setWhere($where['special_id'], $where['type'])->count();
  84. } else {
  85. $data[0]['title'] = Special::where('id', $where['special_id'])->value('title');
  86. $percentage = self::percentage($where['uid'], 0, $where['special_id']);
  87. if ($percentage) $data[0]['percentage'] = $percentage;
  88. else $data[0]['percentage'] = 0;
  89. $count = 1;
  90. }
  91. return compact('count', 'data');
  92. }
  93. public static function percentage($uid, $task_id, $special_id)
  94. {
  95. return self::where(['uid' => $uid, 'task_id' => $task_id, 'special_id' => $special_id])->value('percentage');
  96. }
  97. }