TrainingWorkerTaskLogic.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeadmin快速开发前后端分离管理后台(PHP版)
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | 开源版本可自由商用,可去除界面版权logo
  7. // | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
  8. // | github下载:https://github.com/likeshop-github/likeadmin
  9. // | 访问官网:https://www.likeadmin.cn
  10. // | likeadmin团队 版权所有 拥有最终解释权
  11. // +----------------------------------------------------------------------
  12. // | author: likeadminTeam
  13. // +----------------------------------------------------------------------
  14. namespace app\adminapi\logic\training;
  15. use app\common\model\training\TrainingCourse;
  16. use app\common\model\training\TrainingQuestions;
  17. use app\common\model\training\TrainingTask;
  18. use app\common\model\training\TrainingWorkerCourse;
  19. use app\common\model\training\TrainingWorkerQuestion;
  20. use app\common\model\training\TrainingWorkerTask;
  21. use app\common\logic\BaseLogic;
  22. use think\facade\Db;
  23. /**
  24. * TrainingWorkerTask逻辑
  25. * Class TrainingWorkerTaskLogic
  26. * @package app\adminapi\logic
  27. */
  28. class TrainingWorkerTaskLogic extends BaseLogic
  29. {
  30. /**
  31. * @notes 添加
  32. * @param array $params
  33. * @return bool
  34. * @author likeadmin
  35. * @date 2025/02/16 13:49
  36. */
  37. public static function add(array $params): bool
  38. {
  39. Db::startTrans();
  40. try {
  41. // training_task_id 课程组id,配置为 0 或 1,2,3
  42. if($params['training_task_id']){
  43. $trainingTask = TrainingTask::create([
  44. 'task_name' => '工程师个人-'.$params['master_worker_id'],
  45. 'training_course_id' => array_map('intval', explode(',',$params['training_task_id'])),
  46. 'subclass' => 0,
  47. 'master_worker_id' => $params['master_worker_id'],
  48. ]);
  49. $params['training_task_id'] = $trainingTask->id;
  50. }
  51. TrainingWorkerTask::create([
  52. 'master_worker_id' => $params['master_worker_id'],
  53. 'shop_goods_id' => $params['shop_goods_id']??0,
  54. 'training_task_id' => $params['training_task_id']??0,
  55. 'lead_master_worker_id' => $params['lead_master_worker_id']??0,
  56. 'operate_status' => $params['operate_status']??0,
  57. 'task_list' => $params['task_list']??'',
  58. ]);
  59. Db::commit();
  60. return true;
  61. } catch (\Exception $e) {
  62. Db::rollback();
  63. self::setError($e->getMessage());
  64. return false;
  65. }
  66. }
  67. /**
  68. * @notes 编辑
  69. * @param array $params
  70. * @return bool
  71. * @author likeadmin
  72. * @date 2025/02/16 13:49
  73. */
  74. public static function edit(array $params): bool
  75. {
  76. Db::startTrans();
  77. try {
  78. TrainingWorkerTask::where('id', $params['id'])->update([
  79. 'master_worker_id' => $params['master_worker_id'],
  80. //'shop_goods_id' => $params['shop_goods_id']??0,
  81. //'training_task_id' => $params['training_task_id']??0,
  82. 'lead_master_worker_id' => $params['lead_master_worker_id']??0,
  83. 'operate_status' => $params['operate_status']??0,
  84. 'task_list' => $params['task_list']?json_encode($params['task_list']):'',
  85. ]);
  86. Db::commit();
  87. return true;
  88. } catch (\Exception $e) {
  89. Db::rollback();
  90. self::setError($e->getMessage());
  91. return false;
  92. }
  93. }
  94. /**
  95. * @notes 删除
  96. * @param array $params
  97. * @return bool
  98. * @author likeadmin
  99. * @date 2025/02/16 13:49
  100. */
  101. public static function delete(array $params): bool
  102. {
  103. return TrainingWorkerTask::destroy($params['id']);
  104. }
  105. /**
  106. * @notes 获取详情
  107. * @param $params
  108. * @return array
  109. * @author likeadmin
  110. * @date 2025/02/16 13:49
  111. */
  112. public static function detail($params): array
  113. {
  114. return TrainingWorkerTask::findOrEmpty($params['id'])->toArray();
  115. }
  116. /** 培训课程试题记录初始化
  117. */
  118. public static function trainingCourseRecord($masterWorkerId,$training_task_id): array
  119. {
  120. /*
  121. $ids = TrainingWorkerCourse::where('master_worker_id',$masterWorkerId)->where('training_task_id',$training_task_id)->column('id');
  122. if(count($ids)>0){
  123. return $ids;
  124. }
  125. $training_course_ids = json_decode(TrainingTask::where('id',$training_task_id)->value('training_course_id')??'[]',true);
  126. // 添加该工程师的所有培训课程初始化记录
  127. foreach ($training_course_ids as $course_id) {
  128. $workerCourse = TrainingWorkerCourse::create([
  129. 'master_worker_id' => $masterWorkerId,
  130. 'training_task_id' => $training_task_id,
  131. 'training_course_id' => $course_id,
  132. 'play_time' => 0,
  133. 'exam_start_time' => 0,
  134. 'exam_end_time' => 0,
  135. 'study_status' => 0,
  136. 'exam_score' => 0,
  137. ]);
  138. // 添加该工程师该课程的所有试题初始化记录
  139. //[{"block_key":1,"select_value":1,"score":"20"},{"block_key":2,"select_value":2,"score":"10"},{"block_key":3,"select_value":3,"score":"70"}]
  140. $course_question = json_decode(TrainingCourse::where('id',$course_id)->value('course_question_setting'),true);
  141. $course_question_ids = array_column($course_question,'select_value');
  142. foreach ($course_question_ids as $question_id) {
  143. $workerQuestion = TrainingWorkerQuestion::create([
  144. 'worker_course_id' => $workerCourse->id,
  145. 'questions_id' => $question_id,
  146. 'worker_answer' => '',
  147. 'exam_score' => 0
  148. ]);
  149. }
  150. }
  151. $training_course_ids??*/
  152. return [];
  153. }
  154. /** 培训课程初始化记录
  155. */
  156. public static function trainingCourseRecordInitial($masterWorkerId,$trainingTask): bool
  157. {
  158. $training_course_ids = $trainingTask['training_course_id'];
  159. // 添加该工程师的所有培训课程初始化记录
  160. foreach ($training_course_ids as $course_id) {
  161. $trainingCourse = TrainingCourse::where(['id' => $course_id])->findOrEmpty();
  162. if($trainingCourse->isEmpty()){
  163. continue;
  164. }
  165. TrainingWorkerCourse::create([
  166. 'master_worker_id' => $masterWorkerId,
  167. 'training_task_id' => $trainingTask['id'],
  168. 'training_course_id' => $course_id,
  169. 'subclass' => $trainingTask['subclass'],
  170. 'play_time' => 0,
  171. 'exam_start_time' => 0,
  172. 'exam_end_time' => 0,
  173. 'study_status' => 0,
  174. 'exam_score' => 0,
  175. ]);
  176. }
  177. return true;
  178. }
  179. /** 培训试题初始化记录
  180. */
  181. public static function trainingQuestionRecordInitial($workerCourse): bool
  182. {
  183. $trainingCourse = TrainingCourse::where('id',$workerCourse['training_course_id'])->findOrEmpty();
  184. // 配置是否随机出题? 0 1
  185. if($trainingCourse->randomly_question){
  186. // 将之前题全删除 重新选题
  187. TrainingWorkerQuestion::where([
  188. 'master_worker_id' => $workerCourse['master_worker_id'],
  189. 'subclass' => $workerCourse['subclass'],
  190. 'worker_course_id' => $workerCourse['id']
  191. ])->delete();
  192. $trainingQuestions = TrainingQuestions::where('subclass',$trainingCourse->subclass)->order(Db::raw('rand()'))->limit($trainingCourse->randomly_num)->select()->toArray();
  193. if(empty($trainingQuestions)){
  194. return false;
  195. }
  196. //每题多少分(按总分100分计算)
  197. $score = bcdiv(100, count($trainingQuestions), 2);
  198. $course_question = [];
  199. foreach ($trainingQuestions as $block_key => $trainingQuestion) {
  200. //[{"block_key":1,"select_value":1,"score":"20"},{"block_key":2,"select_value":2,"score":"10"},{"block_key":3,"select_value":3,"score":"70"}]
  201. $course_question[] = [
  202. 'block_key' => $block_key+1,
  203. 'select_value' => $trainingQuestion['id'],
  204. 'score' => $score
  205. ];
  206. }
  207. TrainingWorkerCourse::where('id',$workerCourse['id'])->update(['course_question_setting'=>json_encode($course_question)]);
  208. }else{
  209. if(empty($trainingCourse['course_question_setting'])){
  210. return false;
  211. }
  212. $course_question = $trainingCourse['course_question_setting'];
  213. }
  214. // 添加该工程师该课程的所有试题初始化记录
  215. $course_question_ids = array_column($course_question,'select_value');
  216. foreach ($course_question_ids as $question_id) {
  217. $trainingQuestions = TrainingQuestions::where(['id' => $question_id])->findOrEmpty();
  218. if($trainingQuestions->isEmpty()){
  219. continue;
  220. }
  221. $trainingWorkerQuestion = TrainingWorkerQuestion::where([
  222. 'master_worker_id' => $workerCourse['master_worker_id'],
  223. 'subclass' => $workerCourse['subclass'],
  224. 'worker_course_id' => $workerCourse['id'],
  225. 'questions_id' => $question_id
  226. ])->findOrEmpty();
  227. if($trainingWorkerQuestion->isEmpty()){
  228. TrainingWorkerQuestion::create([
  229. 'master_worker_id' => $workerCourse['master_worker_id'],
  230. 'subclass' => $workerCourse['subclass'],
  231. 'worker_course_id' => $workerCourse['id'],
  232. 'questions_id' => $question_id,
  233. 'worker_answer' => '',
  234. 'exam_score' => 0
  235. ]);
  236. }
  237. }
  238. return true;
  239. }
  240. }