xieb
2023-12-23 6985aa56baf8506d1ae8dec00e0b11afb4a343cf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.springblade.modules.evaluate.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import org.springblade.common.cache.SysCache;
import org.springblade.common.cache.UserCache;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.modules.assessment.wrapper.CandidateJsonObj;
import org.springblade.modules.evaluate.entity.EvaluateCandidateEntity;
import org.springblade.modules.evaluate.entity.EvaluateResultEntity;
import org.springblade.modules.evaluate.entity.EvaluateTaskEntity;
import org.springblade.modules.evaluate.entity.EvaluateTaskSetEntity;
import org.springblade.modules.evaluate.service.IEvaluateCandidateService;
import org.springblade.modules.evaluate.service.IEvaluateTaskService;
import org.springblade.modules.evaluate.service.IEvaluateTaskSetService;
import org.springblade.modules.evaluate.vo.EvaluateResultVO;
import org.springblade.modules.evaluate.excel.EvaluateResultExcel;
import org.springblade.modules.evaluate.mapper.EvaluateResultMapper;
import org.springblade.modules.evaluate.service.IEvaluateResultService;
import org.springblade.modules.evaluate.wrapper.EvaluateResultWrapper;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IUserService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.List;
 
/**
 * 评优结果 服务实现类
 *
 * @author aix
 * @since 2023-12-18
 */
@Service
@AllArgsConstructor
public class EvaluateResultServiceImpl extends BaseServiceImpl<EvaluateResultMapper, EvaluateResultEntity> implements IEvaluateResultService {
 
    private final IEvaluateTaskService evaluateTaskService;
 
    private final IUserService userService;
 
    private final IEvaluateCandidateService evaluateCandidateService;
 
    @Override
    public IPage<EvaluateResultVO> selectEvaluateResultPage(IPage<EvaluateResultVO> page, EvaluateResultVO evaluateResult) {
        return page.setRecords(baseMapper.selectEvaluateResultPage(page, evaluateResult));
    }
 
    @Override
    public IPage<EvaluateResultVO> selectEvaluateResultGroupBeId(IPage<EvaluateResultVO> page, EvaluateResultVO evaluateResult) {
        return page.setRecords(EvaluateResultWrapper.build().listVO(baseMapper.selectEvaluateResultGroupBeId(page, evaluateResult)));
    }
 
    @Override
    public List<EvaluateResultExcel> exportEvaluateResult(Wrapper<EvaluateResultEntity> queryWrapper) {
        List<EvaluateResultExcel> evaluateResultList = baseMapper.exportEvaluateResult(queryWrapper);
        //evaluateResultList.forEach(evaluateResult -> {
        //    evaluateResult.setTypeName(DictCache.getValue(DictEnum.YES_NO, EvaluateResult.getType()));
        //});
        return evaluateResultList;
    }
 
    @Override
    @Transactional
    public boolean saveOrUpdate(EvaluateResultEntity evaluateResult) {
        boolean ret = super.saveOrUpdate(evaluateResult);
 
        // 是否评分完成判断此操作
        if (ret) {
            EvaluateTaskEntity taskPO = evaluateTaskService.getById(evaluateResult.getEvaluateTaskId());
 
            //判断评分是否完成   0:type 判断设置的部门员工是否完成评分    1:type 判断设置的部门是否完成评分
            if (evaluateResult.getType() == 0) {
                List<CandidateJsonObj> candidateJsonObjs = JSONArray.parseArray(JSON.toJSONString(taskPO.getCandidateNum()),CandidateJsonObj.class);
                String deptIdsStr = "";
 
                for (CandidateJsonObj obj:candidateJsonObjs) {
                    if (StringUtil.isNotBlank(deptIdsStr)) {
                        deptIdsStr += "," + obj.getDeptId();
                    } else {
                        deptIdsStr = obj.getDeptId() + "";
                    }
                }
 
                //根据部门获取所有用户数量
                QueryWrapper<User> queryWrapper = new QueryWrapper();
                queryWrapper.in("dept_id", deptIdsStr);
                // 拿到设置部门所有用户数量
                Long userByDeptIdsCount = userService.count(queryWrapper);
 
                //用户数量和评优数据进行匹配 相同需要设置任务状态为已完成
                QueryWrapper<EvaluateResultEntity> resultEntityQueryWrapper = new QueryWrapper<>();
                resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId());
                Long evaluateResultCount = count(resultEntityQueryWrapper);
 
                // 相同需要设置任务状态为已完成 不同不处理
                if (userByDeptIdsCount == evaluateResultCount) {
                    taskPO.setCandidateState(2);//结束
                    evaluateTaskService.updateById(taskPO);
 
                    //保存候选人信息
                    for (CandidateJsonObj obj:candidateJsonObjs) {
                        Integer val = obj.getVal();
 
                        Page<EvaluateResultVO> page = new Page<>();
                        page.setCurrent(1);
                        page.setSize(val);
                        EvaluateResultVO vo = new EvaluateResultVO();
                        vo.setType(0);
                        vo.setEvaluateTaskId(evaluateResult.getEvaluateTaskId());
                        IPage<EvaluateResultVO> evaluateResultVOIPage = selectEvaluateResultGroupBeId(page,vo);
 
                        for (EvaluateResultVO resultVO:evaluateResultVOIPage.getRecords()) {
                            EvaluateCandidateEntity evaluateCandidate = new EvaluateCandidateEntity();
                            evaluateCandidate.setEvaluateTaskId(evaluateResult.getEvaluateTaskId());
                            evaluateCandidate.setEvaluateTaskName(taskPO.getTaskName());
                            User user = UserCache.getUser(resultVO.getBeId());
                            evaluateCandidate.setUserId(user.getId());
                            evaluateCandidate.setUserName(user.getName());
                            evaluateCandidate.setDeptName(SysCache.getDeptName(Long.valueOf(user.getDeptId())));
                            evaluateCandidate.setPostName(SysCache.getPostName(Long.valueOf(user.getPostId())));
                            evaluateCandidateService.save(evaluateCandidate);
                        }
                    }
 
                }
 
            } else if (evaluateResult.getType() == 1) {
                QueryWrapper<EvaluateResultEntity> resultEntityQueryWrapper = new QueryWrapper<>();
                resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId());
                Long evaluateResultCount = count(resultEntityQueryWrapper);
 
                //部门评优数量和所有用户匹配
                QueryWrapper<User> queryWrapper = new QueryWrapper();
                queryWrapper.in("user_type", 2);//员工用户
                // 拿到设置部门所有用户数量
                Long userByDeptIdsCount = userService.count(queryWrapper);
 
                // 相同需要设置任务状态为已完成 不同不处理
                if (userByDeptIdsCount == evaluateResultCount) {
                    taskPO.setEvaluateState(2);//结束
                    evaluateTaskService.updateById(taskPO);
                }
            }
        }
 
        return ret;
    }
 
}