123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- declare(strict_types=1);
- namespace App\Job;
- use App\Utils\LogUtil;
- use Hyperf\AsyncQueue\Job;
- use Hyperf\DbConnection\Db;
- class BindjigouJob extends Job
- {
- //日志板块
- private const LOG_MODULE = 'BindjigouJob';
- public $params;
- /**
- * 任务执行失败后的重试次数,即最大执行次数为 $maxAttempts+1 次
- */
- protected int $maxAttempts = 2;
- public function __construct($params)
- {
- // 这里最好是普通数据,不要使用携带 IO 的对象,比如 PDO 对象
- $this->params = $params;
- }
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- //日志统一写入
- LogUtil::getInstance('Queues/');//设置日志存入通道
- LogUtil::info('开始处理', self::LOG_MODULE, __FUNCTION__, ['params' => $this->params]);
- // 根据参数处理具体逻辑
- // 通过具体参数获取模型等
- // 这里的逻辑会在 ConsumerProcess 进程中执行
- // var_dump($this->params);
- $res = $this->bindjigou($this->params['user_id'],$this->params['old_jigou_id'],$this->params['new_jigou_id']);
- LogUtil::info('处理结果', self::LOG_MODULE, __FUNCTION__,$res);
- LogUtil::close();
- }
- //曾经 答题贡献的分数,用户曾经都要给到新机构
- public function bindjigou($user_id,$old_jigou_id,$new_jigou_id){
- Db::beginTransaction();
- //用户答题记录,都改成现在的机构id
- $rs3 = Db::table('user_question_log')->where('user_id',$user_id)->update(['jigou_id'=>$new_jigou_id]);
- //重新计算老机构的分
- $sum_score = Db::table('user_question_log')->where('jigou_id',$old_jigou_id)->where('is_right',1)->sum('score');
- $rs2 = Db::table('vote_jigou')->where('id',$old_jigou_id)->update(['score'=>$sum_score]);
- //重新计算新机构的分
- $sum_score = Db::table('user_question_log')->where('jigou_id',$new_jigou_id)->where('is_right',1)->sum('score');
- $rs1 = Db::table('vote_jigou')->where('id',$new_jigou_id)->update(['score'=>$sum_score]);
- Db::commit();
- return true;
- }
- public function bindjigou_old($user_id,$bind_jigou_id){
- //机构得分记录
- $map = [
- ['user_id' , '=' , $user_id],
- ['is_right', '=' , 1],
- ['jigou_id', '<>', $bind_jigou_id],
- ];
- $jigou = Db::table('user_question_log')->where($map)->pluck('jigou_id')->toarray();
- if(empty($jigou)){
- return true;
- }
- $jigou_data = array_count_values($jigou);
- Db::beginTransaction();
- //老机构减分。循环不会太多次
- foreach($jigou_data as $jigou_id => $times){
- $rs1 = Db::table('vote_jigou')->where(['id' => $jigou_id])->decrement('score',$times);
- if(!$rs1){
- Db::rollBack();
- return false;
- }
- }
- //新机构加分
- $rs2 = Db::table('vote_jigou')->where(['id' => $bind_jigou_id])->increment('score',count($jigou));
- if(!$rs2){
- Db::rollBack();
- return false;
- }
- //用户答题记录,都改成现在的机构id
- $rs3 = Db::table('user_question_log')->where(['user_id' => $user_id])->update(['jigou_id'=>$bind_jigou_id]);
- if(!$rs3){
- Db::rollBack();
- return false;
- }
- Db::commit();
- return true;
- }
- }
|