Newer
Older
huludao / src / main / java / com / newfiber / api / pc / controller / Assessment / AssessmentController.java
package com.newfiber.api.pc.controller.Assessment;

import com.baomidou.mybatisplus.plugins.Page;
import com.newfiber.api.core.bean.ReqBodyObj;
import com.newfiber.api.core.bean.RespBodyObj;
import com.newfiber.api.core.utils.DateUtil;
import com.newfiber.api.pc.dao.Assessment.AssessmentDao;
import com.newfiber.api.pc.dao.Assessment.AssessmentItemDao;
import com.newfiber.api.pc.dao.Assessment.AssessmentSubItemDao;
import com.newfiber.api.pc.dao.RiverManage.RiverChiefDao;
import com.newfiber.api.pc.dao.RiverManage.RiverInfoBasisDao;
import com.newfiber.api.pc.dao.RiverManage.RiverPatrolDao;
import com.newfiber.api.pc.model.UserManager.Data_User_Info;
import com.newfiber.api.pc.model.Assessment.Assessment;
import com.newfiber.api.pc.model.Assessment.AssessmentItem;
import com.newfiber.api.pc.model.Assessment.AssessmentSubItem;
import com.newfiber.api.pc.service.RestTemplateService;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

@Controller
public class AssessmentController {

    @Autowired
    private AssessmentDao assessmentDao;
    @Autowired
    private AssessmentItemDao assessmentItemDao;
    @Autowired
    private AssessmentSubItemDao assessmentSubItemDao;
    @Autowired
    private RiverChiefDao riverChiefDao;
    @Autowired
    private RiverInfoBasisDao riverInfoBasisDao;

    @Resource
    private RestTemplateService restTemplateService;

    /**
     * 考核自评--查询(分页)
     *
     * @param param(fuzzyQuery,startTime,endTime,assessment
     * @param request
     * @return
     */
    @PostMapping(value = "assessment/getMyAssessmentList", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RespBodyObj getMyAssessmentList(@RequestBody ReqBodyObj<Map<String, String>> param, HttpServletRequest request) {


        Map<String, String> map1 = param.getData();

        String fuzzyQuery = (String) map1.get("fuzzyQuery");
        String userNo = request.getHeader("userNo");
        Integer page = Integer.valueOf(map1.get("current"));
        Integer rows = Integer.valueOf(map1.get("size"));
        String year = map1.get("year");
        String quarter = map1.get("quarter");
        String month = map1.get("month");
        List<Assessment> list = new ArrayList<>();
        Page page1 = new Page();
        Assessment assessment = new Assessment();
        try {
            Map<String,Date> dataMap = DateUtil.getBeginAndEndTime(year,quarter,month);
            if (dataMap.get("st") != null) {
                assessment.setStartTime(dataMap.get("st"));
            }
            if (dataMap.get("et") != null) {
                assessment.setEndTime(dataMap.get("et"));
            }
            if (userNo == null) {
                userNo = request.getHeader("userNo");
            }
            Integer pageNo = 0;
            Integer pageSize = 0;
            if (null != page && page != 0) {
                pageSize = Integer.valueOf(rows);
                pageNo = (Integer.valueOf(page) - 1) * pageSize;
            } else {
                pageNo = null;
                pageSize = null;
            }
            assessment.setPageNo(pageNo);
            assessment.setPageSize(pageSize);
            assessment.setFuzzyQuery(fuzzyQuery);
            assessment.setAssessmentUserNo(userNo);
            list = assessmentDao.getAssessmentList(assessment);
            int total = assessmentDao.countAssessmentList(assessment);
            page1.setRecords(list);
            page1.setTotal(total);
            return RespBodyObj.ok(page1);
        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.error();
        }

    }



    /**
     * 查看考核详情
     *
     * @param param(serial)
     * @return
     */
    @PostMapping(value = "assessment/getAssessmentDetail", produces = "application/json;charset=UTF-8")
    @ResponseBody
//	@LogOne(descriptionType="6",description = "查看考核详情")
    public RespBodyObj getAssessmentDetail(@RequestBody ReqBodyObj<Map<String, Long>> param) {
        try {
            Assessment newassessment = assessmentDao.getAssessment(param.getData().get("serial"));
            return RespBodyObj.ok(newassessment);
        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.error();
        }
    }


    //考核自评--自评
    @PostMapping(value = "assessment/selfAssess", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RespBodyObj selfAssess(@RequestBody ReqBodyObj<Map<String,Object>> param) {

        Map<String,Object> map = param.getData();

        Long serial = Long.valueOf(String.valueOf(map.get("serial")));
        List<String> itemNos = (List<String>)map.get("itemNo");
        String [] itemNo = new String[itemNos.size()];
        itemNos.toArray(itemNo);
        List<String> subItemNos = (List<String>)map.get("subItemNo");
        String [] subItemNo = new String[subItemNos.size()];
        subItemNos.toArray(subItemNo);
        List<String> itemScores = (List<String>)map.get("itemScore");
        String [] itemScore = new String[itemScores.size()];
        itemScores.toArray(itemScore);
        List<String> subItemScores = (List<String>)map.get("subItemScore");
        String [] subItemScore = new String[subItemScores.size()];
        subItemScores.toArray(subItemScore);
        try {
            Double sum = 0.00;
            for (int i = 0; i < itemNo.length; i++) {
                AssessmentItem ai = new AssessmentItem();
                ai.setItemNo(itemNo[i]);
                ai.setSelfAssessment(new BigDecimal(itemScore[i]));
                assessmentItemDao.updateAssessmentItem(ai);
                sum += Double.valueOf(itemScore[i]);
            }
            for (int i = 0; i < subItemNo.length; i++) {
                AssessmentSubItem asi = new AssessmentSubItem();
                asi.setSubItemNo(subItemNo[i]);
                asi.setSelfAssessment(new BigDecimal(subItemScore[i]));
                assessmentSubItemDao.updateAssessmentSubItem(asi);
                sum += Double.valueOf(subItemScore[i]);
            }
            Assessment assessment = assessmentDao.getAssessment(serial);
            Double totalScore = sum * assessment.getProportion().doubleValue() + assessment.getLeaderTotal().doubleValue() * (1 - assessment.getProportion().doubleValue());
            assessment.setTotalScore(BigDecimal.valueOf(totalScore));
            assessment.setSelfTotal(BigDecimal.valueOf(sum));

            Double excellentScore = assessment.getExcellentScore().doubleValue();
            Double goodScore = assessment.getGoodScore().doubleValue();
            Double qualifiedScore = assessment.getQualifiedScore().doubleValue();

            if (totalScore < qualifiedScore) {
                assessment.setAssessmentResult("不合格");
            } else if (totalScore >= qualifiedScore && totalScore < goodScore) {
                assessment.setAssessmentResult("合格");
            } else if (totalScore >= goodScore && totalScore < excellentScore) {
                assessment.setAssessmentResult("良好");
            } else {
                assessment.setAssessmentResult("优秀");
            }
            if (assessment.getAssessmentStatus() == 0) {
                assessment.setAssessmentStatus(1);
                assessment.setAssessmentStatusZN("已自评未打分");
            } else if (assessment.getAssessmentStatus() == 2) {
                assessment.setAssessmentStatus(3);
                assessment.setAssessmentStatusZN("已自评已打分");
            }
            assessmentDao.updateAssessment(assessment);
            return RespBodyObj.ok("自评成功");
        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.error();
        }
    }


    //领导打分--查询下级考核
    @PostMapping(value = "assessment/getMySubAssessmentList", produces = "application/json;charset=UTF-8")
    @ResponseBody
//	@LogOne(descriptionType="6",description = "领导打分--查询下级考核")
    public RespBodyObj getMySubAssessmentList(@RequestBody ReqBodyObj<Map<String, String>> param, HttpServletRequest requeste) {
        Map<String, String> map1 = param.getData();
        String templateNo = (String) map1.get("templateNo");
        String userNo = (String) map1.get("userNo");
        Integer page = Integer.valueOf(map1.get("current"));
        Integer rows = Integer.valueOf(map1.get("size"));
        String year = map1.get("year");
        String quarter = map1.get("quarter");
        String month = map1.get("month");
        List<Assessment> alist = new ArrayList<>();
        Page page1 = new Page();
        try {
            Map<String,Date> dateMap = DateUtil.getBeginAndEndTime(year,quarter,month);
            Date t1 = null;
            Date t2 = null;
            if (dateMap.get("st") != null) {
                t1 = dateMap.get("st");
            }
            if (dateMap.get("et") != null) {
                t2 = dateMap.get("et");
            }
            Integer pageNo = 0;
            Integer pageSize = 0;
            if (null != page && page != 0) {
                pageSize = Integer.valueOf(rows);
                pageNo = (Integer.valueOf(page) - 1) * pageSize;
            } else {
                pageNo = null;
                pageSize = null;
            }
            if (userNo == null) {
                userNo = requeste.getHeader("userNo");
            }
            List<String> list = riverChiefDao.getSubRiverChief(userNo);
            Data_User_Info user = restTemplateService.getUserInfo(userNo);
            //如果是总河长,则对最高级别河流进行考核
            if(user.getHighestAuthority()!= null && user.getHighestAuthority().equals("yes")){
                List<String> hUsrer = riverInfoBasisDao.getHighestRiverChief();
                list.addAll(hUsrer);
            }
            if(list == null || list.size()==0){
                return RespBodyObj.ok(page1);
            }
            alist = assessmentDao.getSubAssessmentList(list, pageNo, pageSize, t1, t2, templateNo);
            int total = assessmentDao.getSubAssessmentList(list, 0, 0, t1, t2, templateNo).size();
            page1.setRecords(alist);
            page1.setTotal(total);
            return RespBodyObj.ok(page1);
        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.error();
        }
    }

    //上级领导评分
    @PostMapping(value = "assessment/getMyLeaderAssessmentList", produces = "application/json;charset=UTF-8")
    @ResponseBody
//	@LogOne(descriptionType="6",description = "领导打分--查询下级考核")
    public RespBodyObj getMyLeaderAssessmentList(@RequestBody ReqBodyObj<Map<String, String>> param, HttpServletRequest requeste) {
        Map<String, String> map1 = param.getData();
        String templateNo = (String) map1.get("templateNo");
        String userNo = (String) map1.get("userNo");
        Integer page = Integer.valueOf(map1.get("current"));
        Integer rows = Integer.valueOf(map1.get("size"));
        String year = map1.get("year");
        String quarter = map1.get("quarter");
        String month = map1.get("month");
        List<Assessment> alist = new ArrayList<>();
        Page page1 = new Page();
        try {
            Map<String,Date> dateMap = DateUtil.getBeginAndEndTime(year,quarter,month);
            Date t1 = null;
            Date t2 = null;
            if (dateMap.get("st") != null) {
                t1 = dateMap.get("st");
            }
            if (dateMap.get("et") != null) {
                t2 = dateMap.get("et");
            }
            Integer pageNo = 0;
            Integer pageSize = 0;
            if (null != page && page != 0) {
                pageSize = Integer.valueOf(rows);
                pageNo = (Integer.valueOf(page) - 1) * pageSize;
            } else {
                pageNo = null;
                pageSize = null;
            }
            if (userNo == null) {
                userNo = requeste.getHeader("userNo");
            }
            List<String> list = new ArrayList<>();
            list.add(userNo);
            alist = assessmentDao.getSubAssessmentList(list, pageNo, pageSize, t1, t2, templateNo);
            int total = assessmentDao.getSubAssessmentList(list, 0, 0, t1, t2, templateNo).size();
            page1.setRecords(alist);
            page1.setTotal(total);
            return RespBodyObj.ok(page1);
        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.error();
        }
    }

    //领导打分--打分
    @PostMapping(value = "assessment/leaderGrade", produces = "application/json;charset=UTF-8")
    @ResponseBody
//	@LogOne(descriptionType="3",description = "领导打分--打分")
    public RespBodyObj leaderGrade(@RequestBody ReqBodyObj<Map<String,Object>> param) {
        Map<String,Object> map = param.getData();
        Long serial =  Long.valueOf(String.valueOf(map.get("serial")));
        List<String> itemNos = (List<String>)map.get("itemNo");
        String [] itemNo = new String[itemNos.size()];
        itemNos.toArray(itemNo);
        List<String> subItemNos = (List<String>)map.get("subItemNo");
        String [] subItemNo = new String[subItemNos.size()];
        subItemNos.toArray(subItemNo);
        List<String> itemScores = (List<String>)map.get("itemScore");
        String [] itemScore = new String[itemScores.size()];
        itemScores.toArray(itemScore);
        List<String> subItemScores = (List<String>)map.get("subItemScore");
        String [] subItemScore = new String[subItemScores.size()];
        subItemScores.toArray(subItemScore);
        try {
            Double sum = 0.00;
            for (int i = 0; i < itemNo.length; i++) {
                AssessmentItem ai = new AssessmentItem();
                ai.setItemNo(itemNo[i]);
                ai.setLeaderGrade(new BigDecimal(itemScore[i]));
                assessmentItemDao.updateAssessmentItem(ai);
                sum += Double.valueOf(itemScore[i]);
            }
            for (int i = 0; i < subItemNo.length; i++) {
                AssessmentSubItem asi = new AssessmentSubItem();
                asi.setSubItemNo(subItemNo[i]);
                asi.setLeaderGrade(new BigDecimal(subItemScore[i]));
                assessmentSubItemDao.updateAssessmentSubItem(asi);
                sum += Double.valueOf(subItemScore[i]);
            }
            Assessment assessment = assessmentDao.getAssessment(serial);
            Double totalScore = assessment.getSelfTotal().doubleValue() * assessment.getProportion().doubleValue() + sum * (1 - assessment.getProportion().doubleValue());
            assessment.setTotalScore(BigDecimal.valueOf(totalScore));
            assessment.setLeaderTotal(BigDecimal.valueOf(sum));
            //修改领导打分
            Double excellentScore = assessment.getExcellentScore().doubleValue();
            Double goodScore = assessment.getGoodScore().doubleValue();
            Double qualifiedScore = assessment.getQualifiedScore().doubleValue();

            if (totalScore < qualifiedScore) {
                assessment.setAssessmentResult("不合格");
            } else if (totalScore >= qualifiedScore && totalScore < goodScore) {
                assessment.setAssessmentResult("合格");
            } else if (totalScore >= goodScore && totalScore < excellentScore) {
                assessment.setAssessmentResult("良好");
            } else {
                assessment.setAssessmentResult("优秀");
            }
            if (assessment.getAssessmentStatus() == 0) {
                assessment.setAssessmentStatus(2);
                assessment.setAssessmentStatusZN("未自评已打分");
            } else if (assessment.getAssessmentStatus() == 1) {
                assessment.setAssessmentStatus(3);
                assessment.setAssessmentStatusZN("已自评已打分");
            }
            assessmentDao.updateAssessment(assessment);
            return RespBodyObj.ok("打分成功");
        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.error();
        }
    }

    //查询我的排名
    @PostMapping(value = "assessment/getMyRanking", produces = "application/json;charset=UTF-8")
    @ResponseBody
//	@LogOne(descriptionType="6",description = "查询我的排名")
    public RespBodyObj getMyRanking(@RequestBody ReqBodyObj<Map<String, String>> param, HttpServletRequest request) {

        String userNo = request.getHeader("userNo");
        Integer page = Integer.valueOf(param.getData().get("current"));
        Integer rows = Integer.valueOf(param.getData().get("size"));
        String fuzzyQuery = (String) param.getData().get("fuzzyQuery");
        String year = param.getData().get("year");
        String quarter = param.getData().get("quarter");
        String month = param.getData().get("month");
        Map<String,Date> dateMap = DateUtil.getBeginAndEndTime(year,quarter,month);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Assessment assessment = new Assessment();

        //设置时间
        assessment.setStartTime(dateMap.get("st"));
        assessment.setEndTime(dateMap.get("et"));
        List<Assessment> result = new ArrayList<>();
        Page page1 = new Page();
        try {
            if (userNo == null) {
                userNo = request.getHeader("userNo");
            }
            assessment.setAssessmentUserNo(userNo);
            List<String> temlist = assessmentDao.getMyAllTemplateNo(assessment);
            if(temlist == null || temlist.size() == 0 ) return  RespBodyObj.ok(page1);
            List<Assessment> ranklist = assessmentDao.getMyRanking(userNo, temlist, 0, 0);
            int total = ranklist.size();
            //做分页效果
            List<Assessment> list = new ArrayList<>();
            int pageSize = rows;
            int startRow = (page - 1) * pageSize;
            page1.setTotal(total);
            page1.setRecords(ranklist.subList(startRow, (startRow + pageSize)<ranklist.size()?(startRow + pageSize):ranklist.size()));
            return RespBodyObj.ok(page1);

        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.ok(page1);
        }
    }

    //查询下级的考核模板编号集合
    @PostMapping(value = "assessment/getMySubTemplateNo", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RespBodyObj getMySubTemplateNo(@RequestBody ReqBodyObj<Map<String, String>> param, HttpServletRequest request) {

        Map<String, String> map = param.getData();
        String userNo = request.getHeader("userNo");
        String year = map.get("year");
        String quarter = map.get("quarter");
        String month = map.get("month");
        Map<String,Date> dateMap = DateUtil.getBeginAndEndTime(year,quarter,month);
        List<Assessment> list = new ArrayList<>();
        //若不传时间,则查询当前月的排名
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date startTime = dateMap.get("st"),endTime = dateMap.get("et");
        try {
            if (userNo == null) {
                userNo = request.getHeader("userNo");
            }
            List<String> ulist = riverChiefDao.getSubRiverChief(userNo);
            Data_User_Info user = restTemplateService.getUserInfo(userNo);
            //如果是总河长,则对最高级别河流进行考核
            if(user.getHighestAuthority()!= null && user.getHighestAuthority().equals("yes")){
                List<String> hUsrer = riverInfoBasisDao.getHighestRiverChief();
                ulist.addAll(hUsrer);
            }
            if(ulist == null ||ulist.size()==0) return RespBodyObj.ok(list);
            list = assessmentDao.getMySubTemplateNo(ulist, startTime, endTime);
            return RespBodyObj.ok(list);
        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.ok(list);
        }
    }

    //查询我的的考核模板编号集合
    @PostMapping(value = "assessment/getMyTemplateNo", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RespBodyObj getMyTemplateNo(@RequestBody ReqBodyObj<Map<String, String>> param, HttpServletRequest request) {

        Map<String, String> map = param.getData();
        String userNo = request.getHeader("userNo");
        String year = map.get("year");
        String quarter = map.get("quarter");
        String month = map.get("month");
        Map<String,Date> dateMap = DateUtil.getBeginAndEndTime(year,quarter,month);
        List<Assessment> list = new ArrayList<>();
        //若不传时间,则查询当前月的排名
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date startTime = dateMap.get("st"),endTime = dateMap.get("et");
        try {
            if (userNo == null) {
                userNo = request.getHeader("userNo");
            }
            List<String> ulist = new ArrayList<>();
            ulist.add(userNo);
            list = assessmentDao.getMySubTemplateNo(ulist, startTime, endTime);
            return RespBodyObj.ok(list);
        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.ok(list);
        }
    }

    //查询我的下级排名
    @PostMapping(value = "assessment/getMySubRanking", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public RespBodyObj getMySubRanking(@RequestBody ReqBodyObj<Map<String, String>> param, HttpServletRequest request) {

        String userNo = request.getHeader("userNo");
        Integer page = Integer.valueOf(param.getData().get("current"));
        Integer rows = Integer.valueOf(param.getData().get("size"));
        String templateNo = param.getData().get("templateNo");
        String year = param.getData().get("year");
        String quarter = param.getData().get("quarter");
        String month = param.getData().get("month");
        Map<String,Date> dateMap = DateUtil.getBeginAndEndTime(year,quarter,month);
        List<Assessment> result = new ArrayList<>();
        Page page1 = new Page();
        try {
            Integer pageNo = 0;
            Integer pageSize = 0;
            if (null != page && page != 0) {
                pageSize = Integer.valueOf(rows);
                pageNo = (Integer.valueOf(page) - 1) * pageSize;
            } else {
                pageNo = null;
                pageSize = null;
            }
            if (userNo == null) {
                userNo = request.getHeader("userNo");
            }
            List<String> ulist = riverChiefDao.getSubRiverChief(userNo);
            Data_User_Info user = restTemplateService.getUserInfo(userNo);
            //如果是总河长,则对最高级别河流进行考核
            if(user.getHighestAuthority()!= null && user.getHighestAuthority().equals("yes")){
                List<String> hUsrer = riverInfoBasisDao.getHighestRiverChief();
                ulist.addAll(hUsrer);
            }
            List<String> tempNoList = new ArrayList<>();
            if(templateNo != ""){
                tempNoList.add(templateNo);
            }else if(ulist.size()>0){
                List<Assessment> list = assessmentDao.getMySubTemplateNo(ulist, dateMap.get("st"), dateMap.get("et"));
                tempNoList = list.stream().map(it -> it.getTemplateNo()).distinct().collect(Collectors.toList());
            }
            if (null != ulist && ulist.size() > 0 && tempNoList.size()>0) {
                result = assessmentDao.getSubRanking(ulist, tempNoList, null, null);
                int total = result.size();
                page1.setRecords(result.subList(pageNo, (pageNo + pageSize)<result.size()?(pageNo + pageSize):result.size()));
                page1.setTotal(total);
                return RespBodyObj.ok(page1);
            } else {
                return RespBodyObj.ok(page1);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return RespBodyObj.ok(page1);
        }

    }
}