SubjectUserServiceImpl.java 8.6 KB
package com.bsth.service.subject.impl;
 
import com.bsth.data.schedule.DayOfSchedule;
import com.bsth.entity.Line;
import com.bsth.entity.realcontrol.ScheduleRealInfo;
import com.bsth.entity.subject.Subject;
import com.bsth.entity.subject.SubjectUser;
import com.bsth.entity.sys.SysUser;
import com.bsth.repository.LineRepository;
import com.bsth.repository.subject.SubjectUserRepository;
import com.bsth.repository.sys.SysUserRepository;
import com.bsth.security.util.SecurityUtils;
import com.bsth.service.impl.BaseServiceImpl;
import com.bsth.service.subject.SubjectUserService;
import com.bsth.util.subject.subEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;

@Service
public class SubjectUserServiceImpl extends BaseServiceImpl<SubjectUser, Integer> implements SubjectUserService {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    private static final Logger LOGGER = LoggerFactory.getLogger(SubjectUserServiceImpl.class);
    @Autowired
    SubjectUserRepository subjectUserRepository;
    @Autowired
    LineRepository lineRepository;
    @Autowired
    DayOfSchedule dayOfSchedule;
    @Autowired
    SysUserRepository sysUserRepository;

    public List<SubjectUser> userAll(){
        SysUser user = SecurityUtils.getCurrentUser();
        Integer userId = user.getId();
        
        String ksstatus = user.getKsstatus();//判断今天有没有考试
        String rq = sdf.format(new Date());
        List list = subjectUserRepository.userAll(rq,userId);
        return list;
    }


    public String determine(Integer id){
        
        //当前题目
        Optional<SubjectUser> subjectUser = subjectUserRepository.findById(id);
        SubjectUser sur = subjectUser.isPresent() ? subjectUser.get() : null;
        
        //线路编号 A线+用户id组成的
        SysUser user = SecurityUtils.getCurrentUser();
        String xlName = "A线-"+user.getUserName();
        Line line = lineRepository.findLineName(xlName);
        //缓存查看排班
        List<ScheduleRealInfo> sch =  dayOfSchedule.findByLineCode(line.getLineCode());
        
        
        //答题是否正确
       // String result = result(sur,sch) == true ? "0" : "1";

        //类型
        String type = sur.getSubjectId().getType();
        //判断答题是否正确
        subEnum sjm = subEnum.valueOf(type);
        String result = sjm.run(sur,sch) == true ? "0" : "1";
        
        //修改答案
        int status  = subjectUserRepository.updates(result,id);
        
        //List list = subjectUserRepository.userAll(sur.getRq(),sur.getUserId());
       // map.put("result",result);
        //map.put("list",list);
        if (status == 1){
            return result;
        }
        return null;
    }


    @Override
    public List<Map<String, Object>> subjectUserList(Map<String, Object> map) {
        List<Map<String,Object>> results=new ArrayList<>();
        String date=map.get("date").toString();
        String userName=map.get("userName").toString();
        try {
            List<String> users=new ArrayList<>();
            if(userName.equals("")){
                SysUser loginUser = SecurityUtils.getCurrentUser();
                List<SysUser> userList=sysUserRepository.findByParentID(String.valueOf(loginUser.getId()));;//根据教师id查询所属学生id
                for (SysUser user : userList) {
                    users.add(String.valueOf(user.getId()));
                }
            }else {
                SysUser user=sysUserRepository.findByUserName(userName);
                users.add(String.valueOf(user.getId()));
            }
            List<Map<String,Object>> subjectUserList=new ArrayList<>();
            List<Object[]> objects = subjectUserRepository.searchSubjectUserByUserId(date,users);
            int len = objects.size();
            if(len>0) {
                for(int i = 0 ; i < len; i++) {
                    Map<String, Object> tempM = new HashMap<String,Object>();
                    tempM.put("userId", objects.get(i)[0]);
                    tempM.put("rq", objects.get(i)[1]);
                    tempM.put("result", objects.get(i)[2]);
                    tempM.put("name", objects.get(i)[3]);
                    tempM.put("userName", objects.get(i)[4]);
                    subjectUserList.add(tempM);
                }
            }
            Map<String,List<Map<String,Object>>>m=subjectUserList.stream().collect(Collectors.groupingBy(group->group.get("userId").toString()));
            m.forEach((k,v)->{
                Map<String,Object> result=new HashMap<>();
                int sum=0;
                int t=0;
                int f=0;
                int na=0;
                for (Map<String,Object> su : v) {
                    sum++;
                    if(su.get("result")==null||"".equals(su.get("result"))){
                        na++;
                    }
                    else if("0".equals(su.get("result").toString())){
                        t++;
                    }else if("1".equals(su.get("result").toString())){
                        f++;
                    }
                }
                if(v.size()>0){
                    Map<String,Object> su=v.get(0);
                    result.put("userId",su.get("userId"));
                    result.put("rq",su.get("rq"));
                    result.put("name",su.get("name"));
                    result.put("userName",su.get("name"));
                    result.put("sum",sum);
                    result.put("t",t);
                    result.put("f",f);
                    result.put("na",na);
                    results.add(result);
                }
            });

        } catch (Exception e) {
            LOGGER.error("",e);
            // TODO: handle exception
        }
        return results;
    }


    @Override
    public List<Map<String, Object>> subjectUserDetail(Map<String, Object> map) {
        List<Map<String,Object>> results=new ArrayList<>();
        String date=map.get("rq").toString();
        String userId=map.get("userId").toString();
        try {
            List<Object[]> objects = subjectUserRepository.searchSubjectUserDetail(date,userId);
            int len = objects.size();
            if(len>0) {
                for(int i = 0 ; i < len; i++) {
                    Map<String, Object> tempM = new HashMap<String,Object>();
                    tempM.put("subjectId", objects.get(i)[0]);
                    tempM.put("rq", objects.get(i)[1]);
                    String result = null;
                    if (objects.get(i)[2]==null||"".equals(objects.get(i)[2])){
                        result="未答";
                    }else if ("0".equals(objects.get(i)[2])){
                        result="正确";
                    }else if ("1".equals(objects.get(i)[2])){
                        result="错误";
                    }
                    tempM.put("result",result);
                    tempM.put("subjectText", objects.get(i)[3]);
                    tempM.put("operateTest", objects.get(i)[4]);
                    results.add(tempM);
                }
            }
        } catch (Exception e) {
            LOGGER.error("",e);
            // TODO: handle exception
        }
        return results;
    }

    @Override
    @Transactional
    public void selectSubject(String[] arr) throws Exception{
        SysUser loginUser = SecurityUtils.getCurrentUser();
        List<SysUser> userList= sysUserRepository.findByParentID(String.valueOf(loginUser.getId()));
        DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate localDate=LocalDate.now();
        String rq=localDate.format(dateTimeFormatter);
        List<Integer> userIds=new ArrayList<>();
        for (SysUser user : userList) {
            userIds.add(user.getId());
        }
        subjectUserRepository.deleteSubjectUserByUserIds(rq,userIds);
        for (SysUser user : userList) {
            for (String s : arr) {
                SubjectUser subjectUser=new SubjectUser();
                subjectUser.setUserId(user.getId());
                subjectUser.setRq(rq);
                subjectUser.setCreateBy(loginUser.getId());
                Subject subject=new Subject();
                subject.setId(Integer.parseInt(s));
                subjectUser.setSubjectId(subject);
                subjectUserRepository.save(subjectUser);
            }
        }
    }
}