JxglController.java 77.4 KB
Newer Older
1 2 3
package cn.timer.api.controller.jxgl;

import java.util.List;
4
import java.util.stream.Collectors;
5

tangzhaoqian committed
6 7
import javax.validation.constraints.NotNull;

8 9 10
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
11 12 13
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
14
import org.springframework.web.bind.annotation.PostMapping;
15
import org.springframework.web.bind.annotation.PutMapping;
16 17
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
tangzhaoqian committed
18
import org.springframework.web.bind.annotation.RequestParam;
19 20
import org.springframework.web.bind.annotation.RestController;

21
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
22
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
tangzhaoqian committed
23
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
24 25
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
26 27 28
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;

import cn.hutool.core.bean.BeanUtil;
29
import cn.hutool.core.collection.CollUtil;
tangzhaoqian committed
30
import cn.hutool.core.collection.CollectionUtil;
31
import cn.hutool.core.collection.ListUtil;
32
import cn.hutool.core.util.ObjectUtil;
33
import cn.timer.api.aspect.lang.annotation.Log;
34
import cn.timer.api.aspect.lang.annotation.Role;
35
import cn.timer.api.aspect.lang.enums.BusinessType;
36 37 38
import cn.timer.api.bean.jxgl.JxglAppraisal;
import cn.timer.api.bean.jxgl.JxglAppraisalAssessment;
import cn.timer.api.bean.jxgl.JxglAppraisalIndicators;
tangzhaoqian committed
39
import cn.timer.api.bean.jxgl.JxglAppraisalIndicatorsAssessment;
40
import cn.timer.api.bean.jxgl.JxglAppraisalIndicatorsT;
41
import cn.timer.api.bean.jxgl.JxglAppraisalItem;
42
import cn.timer.api.bean.jxgl.JxglAppraisalItemT;
43
import cn.timer.api.bean.jxgl.JxglAppraisalLog;
44
import cn.timer.api.bean.jxgl.JxglAppraisalT;
45
import cn.timer.api.bean.jxgl.JxglBasicSetting;
46
import cn.timer.api.bean.jxgl.JxglPerformanceAppraisal;
47
import cn.timer.api.bean.jxgl.JxglPerformanceRating;
48 49 50
import cn.timer.api.bean.jxgl.JxglProcessNode;
import cn.timer.api.bean.spmk.SpmkApproveSummary;
import cn.timer.api.bean.yggl.YgglMainEmp;
tangzhaoqian committed
51
import cn.timer.api.bean.zzgl.ZzglBmgwM;
52 53
import cn.timer.api.config.annotation.CurrentUser;
import cn.timer.api.config.annotation.UserBean;
54 55
import cn.timer.api.config.enuminterface.JxglEnumInterface.AppraisalLogType;
import cn.timer.api.config.enuminterface.JxglEnumInterface.AppraisalSts;
tangzhaoqian committed
56
import cn.timer.api.config.enuminterface.JxglEnumInterface.AssessmentType;
57 58
import cn.timer.api.config.enuminterface.JxglEnumInterface.BeingAppraisalSts;
import cn.timer.api.config.enuminterface.JxglEnumInterface.BeingAppraisalType;
59
import cn.timer.api.config.enuminterface.JxglEnumInterface.ExecuteType;
tangzhaoqian committed
60 61
import cn.timer.api.config.enuminterface.JxglEnumInterface.IndicatorsType;
import cn.timer.api.config.enuminterface.JxglEnumInterface.PerformanceAppraisalSts;
62 63 64
import cn.timer.api.config.enuminterface.JxglEnumInterface.ProcessNodeSts;
import cn.timer.api.config.enuminterface.JxglEnumInterface.ProcessType;
import cn.timer.api.config.exception.CustomException;
tangzhaoqian committed
65
import cn.timer.api.config.validation.ValidList;
66
import cn.timer.api.controller.jxgl.service.JxglService;
67 68 69
import cn.timer.api.controller.yggl.service.YgglService;
import cn.timer.api.controller.zzgl.service.ZzglBmgwMService;
import cn.timer.api.dao.jxgl.JxglAppraisalAssessmentMapper;
tangzhaoqian committed
70
import cn.timer.api.dao.jxgl.JxglAppraisalIndicatorsAssessmentMapper;
71
import cn.timer.api.dao.jxgl.JxglAppraisalIndicatorsMapper;
72
import cn.timer.api.dao.jxgl.JxglAppraisalIndicatorsTMapper;
73
import cn.timer.api.dao.jxgl.JxglAppraisalItemMapper;
74
import cn.timer.api.dao.jxgl.JxglAppraisalItemTMapper;
75 76
import cn.timer.api.dao.jxgl.JxglAppraisalLogMapper;
import cn.timer.api.dao.jxgl.JxglAppraisalMapper;
77
import cn.timer.api.dao.jxgl.JxglAppraisalTMapper;
78
import cn.timer.api.dao.jxgl.JxglBasicSettingMapper;
79
import cn.timer.api.dao.jxgl.JxglPerformanceAppraisalMapper;
80
import cn.timer.api.dao.jxgl.JxglPerformanceRatingMapper;
81
import cn.timer.api.dao.jxgl.JxglProcessNodeMapper;
82
import cn.timer.api.dao.yggl.YgglMainEmpMapper;
tangzhaoqian committed
83 84
import cn.timer.api.dao.zzgl.ZzglBmgwMMapper;
import cn.timer.api.dto.jxgl.AppraisalAssessment;
85 86
import cn.timer.api.dto.jxgl.AppraisalDetail;
import cn.timer.api.dto.jxgl.AppraisalQuery;
tangzhaoqian committed
87 88 89
import cn.timer.api.dto.jxgl.AppraisalReject;
import cn.timer.api.dto.jxgl.AppraisalUpdate;
import cn.timer.api.dto.jxgl.AppraisalUpdateSts;
90
import cn.timer.api.dto.jxgl.BeingAppraisalPerson;
91 92
import cn.timer.api.dto.jxgl.EmpAppraisalQuery;
import cn.timer.api.dto.jxgl.EmpPerformanceQuery;
tangzhaoqian committed
93
import cn.timer.api.dto.jxgl.MyPerformance;
94 95
import cn.timer.api.dto.jxgl.PerformanceAppraisal;
import cn.timer.api.dto.jxgl.PerformanceAppraisalQuery;
96
import cn.timer.api.dto.jxgl.ProcessNode;
97
import cn.timer.api.dto.jxgl.ProcessNodeUpdate;
98 99
import cn.timer.api.utils.Result;
import cn.timer.api.utils.ResultUtil;
100
import cn.timer.api.utils.StreamUtils;
101 102 103 104 105 106
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

@Api(tags = "3.1绩效管理")
@RestController
@Transactional(rollbackFor = Exception.class)
107
@RequestMapping(value = "/jxgl", produces = { "application/json", "multipart/form-data" })
108 109 110
public class JxglController {

	@Autowired
tangzhaoqian committed
111
	private ZzglBmgwMMapper zzglBmgwMMapper;
112

tangzhaoqian committed
113
	@Autowired
114
	private JxglBasicSettingMapper jxglBasicSettingMapper;
115

116 117
	@Autowired
	private JxglPerformanceRatingMapper jxglPerformanceRatingMapper;
118

119 120
	@Autowired
	private JxglAppraisalTMapper jxglAppraisalTMapper;
121

122 123
	@Autowired
	private JxglAppraisalIndicatorsTMapper jxglAppraisalIndicatorsTMapper;
124

125 126
	@Autowired
	private JxglAppraisalItemTMapper jsxglAppraisalItemTMapper;
127

tangzhaoqian committed
128 129
	@Autowired
	private JxglAppraisalAssessmentMapper jxglAppraisalAssessmentMapper;
130

tangzhaoqian committed
131 132
	@Autowired
	private JxglAppraisalIndicatorsAssessmentMapper jxglAppraisalIndicatorsAssessmentMapper;
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156

	@Autowired
	private ZzglBmgwMService zzglBmgwMService;

	@Autowired
	private YgglService ygglService;

	@Autowired
	private JxglPerformanceAppraisalMapper jxglPerformanceAppraisalMapper;

	@Autowired
	private JxglAppraisalMapper jxglAppraisalMapper;

	@Autowired
	private JxglAppraisalIndicatorsMapper jxglAppraisalIndicatorsMapper;

	@Autowired
	private JxglAppraisalLogMapper jxglAppraisalLogMapper;

	@Autowired
	private YgglMainEmpMapper ygglMainEmpMapper;
	
	@Autowired
	private JxglProcessNodeMapper jxglProcessNodeMapper;
tangzhaoqian committed
157
	
158 159 160 161
	@Autowired
	private JxglAppraisalItemMapper jxglAppraisalItemMapper;

	// TODO 基础设置
162 163 164 165 166 167
	/**
	 * 新增或编辑-基础设置
	 */
	@PostMapping(value = "/save_basic_setting")
	@ApiOperation(value = "1.新增或编辑-基础设置", httpMethod = "POST", notes = "新增或编辑-审批模板组")
	@ApiOperationSupport(order = 1)
168
	@Role
169 170
	public Result<Object> saveAtg(@CurrentUser UserBean userBean, @Validated @RequestBody JxglBasicSetting basicSetting)
			throws Exception {
171
		Integer orgCode = userBean.getOrgCode();
172

173
		List<JxglPerformanceRating> listPr = basicSetting.getPerformanceRatings();
tangzhaoqian committed
174
		if (CollectionUtil.isNotEmpty(listPr)) {
175
			for (JxglPerformanceRating pr : listPr) {
176
				if (pr.getSectionMaxScore() > basicSetting.getMaxScore()) {
177 178 179
					return ResultUtil.error("区间值不能超过最高分");
				} else if (pr.getSectionMinScore() >= pr.getSectionMaxScore()) {
					return ResultUtil.error("区间值设置不正确");
180 181 182 183
				}
			}
		}
		JxglBasicSetting bS = jxglBasicSettingMapper.selectOne(new QueryWrapper<JxglBasicSetting>().lambda()
184
				.select(JxglBasicSetting::getId).eq(JxglBasicSetting::getOrgCode, orgCode));
185 186 187 188 189
		if (bS != null) {
			// 删除 绩效等级
			jxglPerformanceRatingMapper.delete(new QueryWrapper<JxglPerformanceRating>().lambda()
					.eq(JxglPerformanceRating::getBasicSettingId, bS.getId()));
			// 删除 基础设置
190 191
			jxglBasicSettingMapper
					.delete(new QueryWrapper<JxglBasicSetting>().lambda().eq(JxglBasicSetting::getOrgCode, orgCode));
192
		}
193

194 195
		basicSetting.setOrgCode(orgCode);
		basicSetting.insert();
tangzhaoqian committed
196
		if (CollectionUtil.isNotEmpty(listPr)) {
197 198 199 200 201 202 203
			listPr.stream().forEach(pr -> pr.setBasicSettingId(basicSetting.getId()));
			int i = jxglPerformanceRatingMapper.insertList(listPr);
		}

		return ResultUtil.success();

	}
204

205 206 207
	@Autowired
	JxglService jxglService;
	
208 209 210 211 212 213
	/**
	 * 查询-基础设置
	 */
	@GetMapping(value = "/select_basic_setting")
	@ApiOperation(value = "2.查询-基础设置", httpMethod = "GET", notes = "查询-基础设置")
	@ApiOperationSupport(order = 2)
214 215
	public Result<Object> selectAT(@CurrentUser UserBean userBean) {

216
		JxglBasicSetting bS = jxglService.selectAT(userBean.getOrgCode());
217 218

		return ResultUtil.data(bS);
219

220
	}
221 222

	// TODO 考核模板
223 224 225 226 227 228
	/**
	 * 新增或编辑-考核模板
	 */
	@PostMapping(value = "/save_appraisal_t")
	@ApiOperation(value = "3.新增或编辑-考核模板", httpMethod = "POST", notes = "新增或编辑-考核模板")
	@ApiOperationSupport(order = 3)
229
	@Role
230 231 232 233 234
	public Result<Object> saveAtg(@CurrentUser UserBean userBean, @Validated @RequestBody JxglAppraisalT jxglAppraisalT)
			throws Exception {

		if (jxglAppraisalT.getId() != null && jxglAppraisalT.selectCount(
				new QueryWrapper<JxglAppraisalT>().lambda().eq(JxglAppraisalT::getId, jxglAppraisalT.getId())) > 0) {
235
			jxglAppraisalT.updateById();
236
		} else {
237
			jxglAppraisalT.setOrgCode(userBean.getOrgCode());
238 239 240
			jxglAppraisalT.insert();
		}
		LambdaQueryWrapper<JxglAppraisalIndicatorsT> q = new QueryWrapper<JxglAppraisalIndicatorsT>().lambda()
241 242 243 244 245
				.eq(JxglAppraisalIndicatorsT::getAppraisalTId, jxglAppraisalT.getId());

		List<JxglAppraisalIndicatorsT> listAIT = jxglAppraisalIndicatorsTMapper
				.selectList(q.select(JxglAppraisalIndicatorsT::getId));

tangzhaoqian committed
246
		List<Integer> listAITId = CollectionUtil.isNotEmpty(listAIT)
247 248 249
				? listAIT.stream().map(JxglAppraisalIndicatorsT::getId).collect(Collectors.toList())
				: null;

250 251 252
		// 删除 原 考核指标模板
		jxglAppraisalIndicatorsTMapper.delete(q);
		// 删除 原 考核项模板
tangzhaoqian committed
253
		if (CollectionUtil.isNotEmpty(listAITId)) {
254 255 256
			jsxglAppraisalItemTMapper.delete(new QueryWrapper<JxglAppraisalItemT>().lambda()
					.in(JxglAppraisalItemT::getAppraisalIndicatorsTId, listAITId));
		}
257

258
		List<JxglAppraisalIndicatorsT> aITs = jxglAppraisalT.getAppraisalIndicatorsTs();
259
		
tangzhaoqian committed
260
		if (CollectionUtil.isNotEmpty(aITs)) {
261
			
tangzhaoqian committed
262
//			Integer weightSum = 0;
263 264 265 266 267
			for (JxglAppraisalIndicatorsT aIT : aITs) {
				
				if (aIT.getType() == null) {
					throw new CustomException("指标类型未设置");
				}
268
				Integer weightNum = aIT.getWeight() == null ? 0 : aIT.getWeight();
tangzhaoqian committed
269
//				weightSum += weightNum;
270 271
				
				aIT.setWeight(weightNum);
272 273 274 275 276 277 278 279 280 281 282
				aIT.setAppraisalTId(jxglAppraisalT.getId());
				// 新增 考核指标模板
				if (aIT.insert()) {
					List<JxglAppraisalItemT> aItemTs = aIT.getAppraisalItemTs();
					if (aItemTs != null && aItemTs.size() > 0) {
						// 批量新增 考核项模板
						aItemTs.stream().forEach(aItemT -> aItemT.setAppraisalIndicatorsTId(aIT.getId()));
						int c = jsxglAppraisalItemTMapper.insertList(aItemTs);
					}
				} else {
					throw new Exception();
283
				}
284

285
			}
286
			
tangzhaoqian committed
287 288
//			if (!weightSum.equals(100))
//				throw new CustomException("权重总和要等于 100%");
289
			
290 291
		}
		return ResultUtil.success();
292
	}
293

294 295 296
	/**
	 * 查询-考核模板-列表
	 */
tangzhaoqian committed
297 298
	@PostMapping(value = "/selects_appraisal_t")
	@ApiOperation(value = "4.查询-考核模板-列表", httpMethod = "POST", notes = "查询-考核模板-列表")
299
	@ApiOperationSupport(order = 4)
300 301 302 303 304 305 306
	public Result<Object> selectListAT(@CurrentUser UserBean userBean, @RequestBody cn.timer.api.utils.Page page) {

		IPage<JxglAppraisalT> p = new Page<JxglAppraisalT>(page.getCurrentPage(), page.getTotalPage());

		IPage<JxglAppraisalT> pageAT = jxglAppraisalTMapper.selectPage(p,
				new QueryWrapper<JxglAppraisalT>().lambda().eq(JxglAppraisalT::getOrgCode, userBean.getOrgCode()));

307
		List<JxglAppraisalT> listAT = pageAT.getRecords();
308

309
		return ResultUtil.data(pageAT, listAT);
310

311
	}
312

313 314 315 316 317 318
	/**
	 * 查询-考核模板-详情
	 */
	@GetMapping(value = "/selects_appraisal_t/{id}")
	@ApiOperation(value = "5.查询-考核模板-详情", httpMethod = "GET", notes = "查询-考核模板-详情")
	@ApiOperationSupport(order = 5)
319
	@Role
320 321
	public Result<Object> selectAT(@CurrentUser UserBean userBean, @PathVariable Integer id) {

322
		JxglAppraisalT aT = jxglAppraisalTMapper.selectDetailById(id);
323

324
		return ResultUtil.data(aT);
325

326
	}
327

328 329 330 331 332 333
	/**
	 * 删除-考核模板
	 */
	@DeleteMapping(value = "/del_appraisal_t/{id}")
	@ApiOperation(value = "6.删除-考核模板", httpMethod = "DELETE", notes = "删除-考核模板")
	@ApiOperationSupport(order = 6)
334
	@Role
335 336 337
	public Result<Object> delAT(@CurrentUser UserBean userBean, @PathVariable Integer id) throws Exception {

		jxglAppraisalTMapper.delete(new QueryWrapper<JxglAppraisalT>().lambda().eq(JxglAppraisalT::getId, id)
338
				.eq(JxglAppraisalT::getOrgCode, userBean.getOrgCode()));
339 340

		return ResultUtil.success();
341

342
	}
343

344 345 346 347 348 349
	/**
	 * 新增-绩效考核
	 */
	@PostMapping(value = "/save_performance_appraisal")
	@ApiOperation(value = "7.新增-绩效考核", httpMethod = "POST", notes = "新增-绩效考核")
	@ApiOperationSupport(order = 7)
350 351
	public Result<Object> savePA(@CurrentUser UserBean userBean,
			@Validated @RequestBody PerformanceAppraisal performanceAppraisal) throws Exception {
352
		Integer orgCode = userBean.getOrgCode();
353
		JxglPerformanceAppraisal pA = JxglPerformanceAppraisal.builder().build();
354
		BeanUtil.copyProperties(performanceAppraisal, pA, "processNode", "beingAppraisalPerson");
355

356 357
		List<ProcessNode> listPN = performanceAppraisal.getProcessNode();
		List<BeingAppraisalPerson> listBAP = performanceAppraisal.getBeingAppraisalPerson();
358
		pA.setSts(PerformanceAppraisalSts.TARGET_SETING.getType());
tangzhaoqian committed
359 360 361
		pA.setOrgCode(orgCode);
		pA.setProcessNode(ObjectUtil.serialize(listPN));
		pA.setBeingAppraisalPerson(ObjectUtil.serialize(listBAP));
362

363
		// 被考核人员
364
		List<Integer> listEmpId = listBAP.stream()
365 366 367
				.filter(bAP -> BeingAppraisalType.EMPLOYEE.getType().equals(bAP.getType())
						&& BeingAppraisalSts.NEED.getType().equals(bAP.getSts()))
				.map(BeingAppraisalPerson::getId).collect(Collectors.toList());
368

369 370
		// 被考核部门id
		List<Integer> listDeptId = listBAP.stream()
371 372
				.filter(bAP -> BeingAppraisalType.DEPARTMENT.getType().equals(bAP.getType()))
				.map(BeingAppraisalPerson::getId).collect(Collectors.toList());
373
		List<YgglMainEmp> listEmp2 = ListUtil.toList();
374
		
375 376 377
		for (Integer deptId : listDeptId) {
			CollUtil.addAll(listEmp2, zzglBmgwMService.selectOtherlistent(userBean.getOrgCode(), deptId));
		}
tangzhaoqian committed
378
		if (CollectionUtil.isNotEmpty(listEmp2)) {
379
			// 员工信息数据 去重
380 381
			List<Integer> listEmp2Id = listEmp2.stream().filter(StreamUtils.distinctByKey(e -> e.getEmpNum()))
					.map(YgglMainEmp::getEmpNum).collect(Collectors.toList());
382 383 384
			// 合并 集合
			CollUtil.addAll(listEmpId, listEmp2Id);
		}
385

386 387
		// 无需被考核人id
		List<Integer> listNotEmpId = listBAP.stream()
388 389 390 391
				.filter(bAP -> BeingAppraisalType.EMPLOYEE.getType().equals(bAP.getType())
						&& BeingAppraisalSts.NOT_NEED.getType().equals(bAP.getSts()))
				.map(BeingAppraisalPerson::getId).collect(Collectors.toList());

392 393
		// 去重+过滤掉 无需被考核人id
		listEmpId = listEmpId.stream().filter(e -> !listNotEmpId.contains(e)).distinct().collect(Collectors.toList());
394
		pA.setAppraisalPersonNum(listEmpId.size());
395
		// 新增 绩效考核
396
		pA.insert();
397 398 399 400 401
		// 考核模板
		JxglAppraisalT aT = jxglAppraisalTMapper.selectById(performanceAppraisal.getAppraisalTId());
		if (aT == null) {
			throw new CustomException("考核模板不存在");
		}
402

403 404 405 406 407
		JxglProcessNode processNode = JxglProcessNode.builder().build();
		JxglAppraisal appraisal = JxglAppraisal.builder().build();
		JxglAppraisalIndicators appraisalIndicators = JxglAppraisalIndicators.builder().build();
		JxglAppraisalItem appraisalItem = JxglAppraisalItem.builder().build();
		JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
408 409

		System.out.println("listEmpId----" + listEmpId);
410 411 412 413
		for (Integer bAP : listEmpId) {
			// 考核
			appraisal.setPerformanceAppraisalId(pA.getId());
			appraisal.setEmpNum(bAP);
414
			appraisal.setIsEdit(aT.getIsEdit());
415 416 417 418 419 420
			appraisal.setName(aT.getName());
			appraisal.setAppraisalExplain(aT.getAppraisalExplain());
			appraisal.setSts(AppraisalSts.TARGET_FILL_IN.getType());
			// 新增 考核
			appraisal.insert();
			System.out.println("新增 考核:" + appraisal);
421

422 423 424 425 426 427 428 429 430 431 432 433 434
			List<Integer> pNWeights = listPN.stream().filter(p -> p.getProcessType() == 2 || p.getProcessType() == 3 ).map(ProcessNode::getWeight).collect(Collectors.toList());
			Integer sum = 0;
			
			for (Integer w : pNWeights) {
				if (w < 0) {
					throw new CustomException("评分权重不能小于0");
				}
				sum += w;
			}
			if (sum != 100) {
				throw new CustomException("权重总和必须等于100");
			}
			
435 436 437 438 439 440 441 442 443 444 445
			listPN.stream().forEach(pN -> {
				Integer executeType = pN.getExecuteType();
				// 流程节点
				processNode.setAppraisalId(appraisal.getId());
				processNode.setExecuteType(executeType);
				processNode.setLeaderTier(pN.getLeaderTier());
				processNode.setName(ExecuteType.getName(executeType));
				Integer processType = pN.getProcessType();
				processNode.setProcessType(processType);
				if (ProcessType.TARGET_FILL_IN.getType().equals(processType)) {
					processNode.setSts(ProcessNodeSts.IN_EXECUTION.getType());
446
				} else {
447 448 449
					processNode.setSts(ProcessNodeSts.NON_EXECUTION.getType());
				}
				processNode.setWeight(pN.getWeight());
450

451 452
				if (ExecuteType.BEING_APPRAISAL_PERSON.getType().equals(executeType)) {
					processNode.setExecutorId(bAP);
453 454 455 456
				} else if (ExecuteType.LEADER.getType().equals(executeType)) {
					processNode.setExecutorId(
							ygglService.selectLeaderEmpNumById(userBean.getOrgCode(), bAP, pN.getLeaderTier()));
				} else if (ExecuteType.SPECIFIED_MEMBER.getType().equals(executeType)) {
457 458 459 460 461
					processNode.setExecutorId(pN.getExecutorId());
				}
				// 新增 流程节点
				processNode.insert();
				System.out.println("新增 流程节点:" + processNode);
462

463
			});
464 465 466 467 468 469 470 471 472

			List<JxglAppraisalIndicatorsT> listAIT = jxglAppraisalIndicatorsTMapper
					.selectList(new QueryWrapper<JxglAppraisalIndicatorsT>().lambda()
							.eq(JxglAppraisalIndicatorsT::getAppraisalTId, aT.getId())
							.ne(aT.getIsUseFixd() == 1, JxglAppraisalIndicatorsT::getType,
									IndicatorsType.FIXATION.getType())
							.ne(aT.getIsUseNotFixd() == 1, JxglAppraisalIndicatorsT::getType,
									IndicatorsType.NOT_FIXATION.getType()));

473
			if (CollectionUtil.isEmpty(listAIT)) {
474 475
				throw new CustomException("考核指标不存在");
			}
476

477
			listAIT.stream().forEach(aIT -> {
478 479 480 481 482 483 484 485 486 487 488
				// 考核指标
				BeanUtil.copyProperties(aIT, appraisalIndicators, "appraisalId", "createTime", "updateTime");
				appraisalIndicators.setAppraisalId(appraisal.getId());
				// 新增 考核指标
				appraisalIndicators.insert();
//				System.out.println("新增 考核指标:" + appraisalIndicators);

				List<JxglAppraisalItemT> listAItemT = jsxglAppraisalItemTMapper
						.selectList(new QueryWrapper<JxglAppraisalItemT>().lambda()
								.eq(JxglAppraisalItemT::getAppraisalIndicatorsTId, aIT.getId()));

tangzhaoqian committed
489
				if (CollectionUtil.isNotEmpty(listAItemT)) {
490 491 492 493 494 495 496 497 498 499
					listAItemT.stream().forEach(aItemT -> {
						BeanUtil.copyProperties(aItemT, appraisalItem, "appraisalIndicatorsTId");
						appraisalItem.setAppraisalIndicatorsId(appraisalIndicators.getId());

						// 新增 考核项
						appraisalItem.insert();
//						System.out.println("新增 考核项:" + appraisalItem);
					});
				}

500
			});
501

502
			YgglMainEmp yME = ygglMainEmpMapper.selectOne(new QueryWrapper<YgglMainEmp>().lambda()
503 504
					.select(YgglMainEmp::getName).eq(YgglMainEmp::getOrgCode, orgCode).eq(YgglMainEmp::getEmpNum, bAP));

505 506
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(bAP);
507
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
508 509 510
			appraisalLog.setType(AppraisalLogType.START.getType());
			appraisalLog.insert();
		}
511

512 513
		return ResultUtil.success();
	}
514

515
	/**
tangzhaoqian committed
516 517 518 519 520 521
	 * 删除-绩效考核
	 */
	@DeleteMapping(value = "/delete_performance_appraisal/{id}")
	@ApiOperation(value = "8.删除-绩效考核", httpMethod = "DELETE", notes = "删除-绩效考核")
	@ApiOperationSupport(order = 8)
	@Role
522 523 524 525 526 527
	public Result<Object> deletePA(@CurrentUser UserBean userBean, @PathVariable Integer id) {

		JxglPerformanceAppraisal pA = jxglPerformanceAppraisalMapper
				.selectOne(new QueryWrapper<JxglPerformanceAppraisal>().lambda().eq(JxglPerformanceAppraisal::getId, id)
						.eq(JxglPerformanceAppraisal::getOrgCode, userBean.getOrgCode()));

tangzhaoqian committed
528 529 530
		if (pA == null) {
			return ResultUtil.error("绩效考核不存在");
		}
531

tangzhaoqian committed
532 533
		List<Integer> aIds = CollUtil.toList();
		List<Integer> aIIds = CollUtil.toList();
534

tangzhaoqian committed
535
		List<JxglAppraisal> listA = jxglAppraisalMapper.selectList(new QueryWrapper<JxglAppraisal>().lambda()
536 537
				.select(JxglAppraisal::getId).eq(JxglAppraisal::getPerformanceAppraisalId, pA.getId()));

tangzhaoqian committed
538
		aIds = CollectionUtil.isNotEmpty(listA) ? listA.stream().map(JxglAppraisal::getId).collect(Collectors.toList())
539 540
				: aIds;

tangzhaoqian committed
541 542
		// 删除 绩效考核
		jxglPerformanceAppraisalMapper.deleteById(id);
543

544
		if (CollectionUtil.isNotEmpty(aIds)) {
545

tangzhaoqian committed
546 547
			// 批量删除 考核
			jxglAppraisalMapper.deleteBatchIds(aIds);
548

tangzhaoqian committed
549 550 551 552 553 554 555 556 557 558 559 560
			// 批量删除 流程节点
			jxglProcessNodeMapper.delete(new QueryWrapper<JxglProcessNode>().lambda()
					.eq(aIds.size() == 1, JxglProcessNode::getAppraisalId, aIds)
					.in(aIds.size() > 1, JxglProcessNode::getAppraisalId, aIds));
			// 批量删除 考核评定
			jxglAppraisalAssessmentMapper.delete(new QueryWrapper<JxglAppraisalAssessment>().lambda()
					.eq(aIds.size() == 1, JxglAppraisalAssessment::getAppraisalId, aIds)
					.in(aIds.size() > 1, JxglAppraisalAssessment::getAppraisalId, aIds));
			// 批量删除 考核记录
			jxglAppraisalLogMapper.delete(new QueryWrapper<JxglAppraisalLog>().lambda()
					.eq(aIds.size() == 1, JxglAppraisalLog::getAppraisalId, aIds)
					.in(aIds.size() > 1, JxglAppraisalLog::getAppraisalId, aIds));
561 562 563 564 565 566

			List<JxglAppraisalIndicators> listAI = jxglAppraisalIndicatorsMapper.selectList(
					new QueryWrapper<JxglAppraisalIndicators>().lambda().select(JxglAppraisalIndicators::getId)
							.eq(aIds.size() == 1, JxglAppraisalIndicators::getAppraisalId, aIds)
							.in(aIds.size() > 1, JxglAppraisalIndicators::getAppraisalId, aIds));

tangzhaoqian committed
567
			aIIds = CollectionUtil.isNotEmpty(listAI) 
568 569 570
					? listAI.stream().map(JxglAppraisalIndicators::getId).collect(Collectors.toList())
					: aIIds;

tangzhaoqian committed
571
			if (aIIds.size() > 0) {
572

tangzhaoqian committed
573
				jxglAppraisalIndicatorsMapper.deleteBatchIds(aIIds);
574

tangzhaoqian committed
575
				// 批量删除 考核指标评定
576 577
				jxglAppraisalIndicatorsAssessmentMapper.delete(new QueryWrapper<JxglAppraisalIndicatorsAssessment>()
						.lambda()
tangzhaoqian committed
578 579
						.eq(aIds.size() == 1, JxglAppraisalIndicatorsAssessment::getAppraisalIndicatorsId, aIIds)
						.in(aIds.size() > 1, JxglAppraisalIndicatorsAssessment::getAppraisalIndicatorsId, aIIds));
580

tangzhaoqian committed
581 582 583 584
				// 批量删除 考核项
				jxglAppraisalItemMapper.delete(new QueryWrapper<JxglAppraisalItem>().lambda()
						.eq(aIds.size() == 1, JxglAppraisalItem::getAppraisalIndicatorsId, aIIds)
						.in(aIds.size() > 1, JxglAppraisalItem::getAppraisalIndicatorsId, aIIds));
585

tangzhaoqian committed
586 587
			}
		}
588

tangzhaoqian committed
589 590
		return ResultUtil.success();
	}
591

tangzhaoqian committed
592 593 594 595 596 597
	/**
	 * 修改-绩效管理状态
	 */
	@PostMapping(value = "/update_performance_appraisal_sts")
	@ApiOperation(value = "8.修改-绩效管理状态", httpMethod = "POST", notes = "修改-绩效管理状态")
	@ApiOperationSupport(order = 8)
598 599 600 601 602 603 604 605
	public Result<Object> updatePAS(@CurrentUser UserBean userBean,
			@Validated @RequestBody AppraisalUpdateSts appraisalUpdateSts) {

		JxglPerformanceAppraisal performanceAppraisal = jxglPerformanceAppraisalMapper
				.selectOne(new QueryWrapper<JxglPerformanceAppraisal>().lambda()
						.eq(JxglPerformanceAppraisal::getId, appraisalUpdateSts.getId())
						.eq(JxglPerformanceAppraisal::getSts, appraisalUpdateSts.getSts()));

tangzhaoqian committed
606 607 608 609 610 611
		if (performanceAppraisal == null) {
			return ResultUtil.error("绩效考核不存在");
		}
		if (performanceAppraisal.getSts() == PerformanceAppraisalSts.TERMINATION_ASSESSMENT.getType()) {
			return ResultUtil.error("考核已终止");
		}
612

tangzhaoqian committed
613
		Integer sts = null;
614
		Integer id = performanceAppraisal.getId();
615

616
		List<JxglAppraisal> listA = CollUtil.toList();
617
		List<Integer> aIds = CollUtil.toList();
618 619
		List<JxglProcessNode> listPN = CollUtil.toList();
		List<Integer> pNIds = CollUtil.toList();
620

tangzhaoqian committed
621 622 623
		switch (performanceAppraisal.getSts()) {
		case 0:
			sts = PerformanceAppraisalSts.PERFORMANCE_SCORE.getType();
624

625
			listA = jxglAppraisalMapper.selectList(new QueryWrapper<JxglAppraisal>().lambda()
626 627
					.select(JxglAppraisal::getId).eq(JxglAppraisal::getPerformanceAppraisalId, id));

tangzhaoqian committed
628
			if (CollectionUtil.isNotEmpty(listA)) {
629
				aIds = listA.stream().map(JxglAppraisal::getId).collect(Collectors.toList());
630 631 632 633 634 635

				listPN = jxglProcessNodeMapper.selectList(
						new QueryWrapper<JxglProcessNode>().lambda().in(JxglProcessNode::getAppraisalId, aIds)
								.eq(JxglProcessNode::getProcessType, ProcessType.TARGET_CONFIRMED.getType())
								.eq(JxglProcessNode::getSts, ProcessNodeSts.EXECUTED.getType()));

tangzhaoqian committed
636
				if (CollectionUtil.isNotEmpty(listPN)) {
637
					aIds = listPN.stream().map(JxglProcessNode::getAppraisalId).collect(Collectors.toList());
638 639 640 641 642

					listPN = jxglProcessNodeMapper.selectList(
							new QueryWrapper<JxglProcessNode>().lambda().in(JxglProcessNode::getAppraisalId, aIds)
									.eq(JxglProcessNode::getProcessType, ProcessType.SELF_ASSESSMENT.getType())
									.eq(JxglProcessNode::getSts, ProcessNodeSts.NON_EXECUTION.getType()));
tangzhaoqian committed
643
					if (CollectionUtil.isNotEmpty(listPN)) {
644 645
						pNIds = listPN.stream().map(JxglProcessNode::getId).collect(Collectors.toList());
						aIds = listPN.stream().map(JxglProcessNode::getAppraisalId).collect(Collectors.toList());
646 647 648 649 650 651 652

						JxglProcessNode.builder().sts(ProcessNodeSts.IN_EXECUTION.getType()).build().update(
								new UpdateWrapper<JxglProcessNode>().lambda().in(JxglProcessNode::getId, pNIds));

						JxglAppraisal.builder().sts(AppraisalSts.SELF_ASSESSMENT.getType()).build()
								.update(new UpdateWrapper<JxglAppraisal>().lambda().in(JxglAppraisal::getId, aIds));

653 654 655
					}
				}
			}
656

tangzhaoqian committed
657 658 659
			break;
		case 1:
			sts = PerformanceAppraisalSts.RESULT_VERIFICATION.getType();
660

661
			listA = jxglAppraisalMapper.selectList(new QueryWrapper<JxglAppraisal>().lambda()
662 663
					.select(JxglAppraisal::getId).eq(JxglAppraisal::getPerformanceAppraisalId, id));

tangzhaoqian committed
664
			if (CollectionUtil.isNotEmpty(listA)) {
665
				aIds = listA.stream().map(JxglAppraisal::getId).collect(Collectors.toList());
666 667 668 669 670 671

				listPN = jxglProcessNodeMapper.selectList(
						new QueryWrapper<JxglProcessNode>().lambda().in(JxglProcessNode::getAppraisalId, aIds)
								.eq(JxglProcessNode::getProcessType, ProcessType.SUPERIOR_SCORE.getType())
								.eq(JxglProcessNode::getSts, ProcessNodeSts.EXECUTED.getType()));

tangzhaoqian committed
672
				if (CollectionUtil.isNotEmpty(listPN)) {
673
					aIds = listPN.stream().map(JxglProcessNode::getAppraisalId).collect(Collectors.toList());
674 675 676 677 678

					listPN = jxglProcessNodeMapper.selectList(
							new QueryWrapper<JxglProcessNode>().lambda().in(JxglProcessNode::getAppraisalId, aIds)
									.eq(JxglProcessNode::getProcessType, ProcessType.RESULT_VERIFICATION.getType())
									.eq(JxglProcessNode::getSts, ProcessNodeSts.NON_EXECUTION.getType()));
tangzhaoqian committed
679
					if (CollectionUtil.isNotEmpty(listPN)) {
680 681
						pNIds = listPN.stream().map(JxglProcessNode::getId).collect(Collectors.toList());
						aIds = listPN.stream().map(JxglProcessNode::getAppraisalId).collect(Collectors.toList());
682 683 684 685 686 687 688

						JxglProcessNode.builder().sts(ProcessNodeSts.IN_EXECUTION.getType()).build().update(
								new UpdateWrapper<JxglProcessNode>().lambda().in(JxglProcessNode::getId, pNIds));

						JxglAppraisal.builder().sts(AppraisalSts.RESULT_VERIFICATION.getType()).build()
								.update(new UpdateWrapper<JxglAppraisal>().lambda().in(JxglAppraisal::getId, aIds));

689 690 691
					}
				}
			}
tangzhaoqian committed
692 693 694
			break;
		case 2:
			sts = PerformanceAppraisalSts.PERFORMANCE_ARCHIVE.getType();
695

696
			listA = jxglAppraisalMapper.selectList(new QueryWrapper<JxglAppraisal>().lambda()
697 698
					.select(JxglAppraisal::getId).eq(JxglAppraisal::getPerformanceAppraisalId, id));

tangzhaoqian committed
699
			if (CollectionUtil.isNotEmpty(listA)) {
700
				aIds = listA.stream().map(JxglAppraisal::getId).collect(Collectors.toList());
701 702 703 704

				listPN = jxglProcessNodeMapper.selectList(
						new QueryWrapper<JxglProcessNode>().lambda().in(JxglProcessNode::getAppraisalId, aIds)
								.eq(JxglProcessNode::getProcessType, ProcessType.RESULT_VERIFICATION.getType())
705
								.in(JxglProcessNode::getSts, ProcessNodeSts.NON_EXECUTION.getType(),ProcessNodeSts.IN_EXECUTION.getType()));
706

tangzhaoqian committed
707
				if (CollectionUtil.isNotEmpty(listPN)) {
708
					throw new CustomException("所有考核 确认结果后才能 归档");
709 710
				}
			}
tangzhaoqian committed
711 712 713 714
			break;
		default:
			break;
		}
715

tangzhaoqian committed
716
		// 修改 绩效考核状态
717 718 719
		jxglPerformanceAppraisalMapper
				.updateById(JxglPerformanceAppraisal.builder().id(appraisalUpdateSts.getId()).sts(sts).build());

720 721 722 723 724 725 726 727 728
		return ResultUtil.success();
	}
	
	/**
	 * 终止-绩效考核
	 */
	@PutMapping(value = "/termination_performance_appraisal")
	@ApiOperation(value = "8.终止-绩效考核", httpMethod = "PUT", notes = "终止-绩效考核")
	@ApiOperationSupport(order = 8)
tangzhaoqian committed
729 730
	@Role
	@Log(title = "终止-绩效考核")
731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747
	public Result<Object> terminationPA(@CurrentUser UserBean userBean,@NotNull @RequestParam Integer id) {

		JxglPerformanceAppraisal performanceAppraisal = jxglPerformanceAppraisalMapper
				.selectOne(new QueryWrapper<JxglPerformanceAppraisal>().lambda()
						.eq(JxglPerformanceAppraisal::getId, id));

		if (performanceAppraisal == null) {
			return ResultUtil.error("绩效考核不存在");
		}
		if (performanceAppraisal.getSts() == PerformanceAppraisalSts.TERMINATION_ASSESSMENT.getType()) {
			return ResultUtil.error("考核已终止");
		}

		// 修改 绩效考核状态
		jxglPerformanceAppraisalMapper
				.updateById(JxglPerformanceAppraisal.builder().id(id).sts(PerformanceAppraisalSts.TERMINATION_ASSESSMENT.getType()).build());

748
		// 修改 考核状态
749
		jxglAppraisalMapper.update(
750
				JxglAppraisal.builder().performanceAppraisalId(id).sts(AppraisalSts.TERMINATION_ASSESSMENT.getType()).build(),
751
				new UpdateWrapper<JxglAppraisal>().lambda()
752 753
						.eq(JxglAppraisal::getPerformanceAppraisalId, id)
						);
754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774
		
		List<JxglAppraisal> listAppraisal = jxglAppraisalMapper.selectList(new QueryWrapper<JxglAppraisal>().lambda()
				.select(JxglAppraisal::getId)
				.eq(JxglAppraisal::getPerformanceAppraisalId, performanceAppraisal.getId()));
		
		if (CollectionUtil.isNotEmpty(listAppraisal)) {
			
			List<Integer> aIds = listAppraisal.stream().map(JxglAppraisal::getId).collect(Collectors.toList());
			if (CollectionUtil.isNotEmpty(aIds)) {
				aIds.forEach(aId -> {
					JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
					appraisalLog.setAppraisalId(aId);
					appraisalLog.setExecutorId(userBean.getEmpNum());
					appraisalLog.setExecutorName(userBean.getUserInfo().getName());
					appraisalLog.setType(AppraisalLogType.TERMINATION_ASSESSMENT.getType());
					appraisalLog.insert();
				});
			}
		}
		
		
775

776
		return ResultUtil.success();
tangzhaoqian committed
777
	}
778

tangzhaoqian committed
779 780 781 782
	/**
	 * 删除-所有-绩效考核
	 */
	@DeleteMapping(value = "/delete_all_pa")
783 784 785
	@ApiOperation(value = "99.删除-所有-绩效考核", httpMethod = "DELETE", notes = "删除-所有-绩效考核")
	@ApiOperationSupport(order = 99)
	@Role
786 787 788 789 790 791 792 793 794 795 796
	public Result<Object> deleteAllPA(@CurrentUser UserBean userBean) {

		jxglPerformanceAppraisalMapper.delete(null);
		jxglAppraisalMapper.delete(null);
		jxglProcessNodeMapper.delete(null);
		jxglAppraisalAssessmentMapper.delete(null);
		jxglAppraisalLogMapper.delete(null);
		jxglAppraisalIndicatorsMapper.delete(null);
		jxglAppraisalIndicatorsAssessmentMapper.delete(null);
		jxglAppraisalItemMapper.delete(null);

tangzhaoqian committed
797 798
		return ResultUtil.success("删除-所有-绩效考核");
	}
799

tangzhaoqian committed
800
	/**
801
	 * 查询-绩效考核-列表-归档
802
	 */
803
	@PostMapping(value = "/selects_performance_appraisal_archive")
tangzhaoqian committed
804
	@ApiOperation(value = "8.查询-绩效考核-列表-归档", httpMethod = "POST", notes = "查询-绩效考核-列表-归档")
805
	@ApiOperationSupport(order = 8)
806
	@Role
807 808 809 810 811
	public Result<Object> selectsPAArchive(@CurrentUser UserBean userBean,
			@RequestBody PerformanceAppraisalQuery query) {

		IPage<SpmkApproveSummary> page = new Page<SpmkApproveSummary>(query.getCurrentPage(), query.getTotalPage());

812
		query.setOrgCode(userBean.getOrgCode());
813

814
		IPage<JxglPerformanceAppraisal> pagePA = jxglPerformanceAppraisalMapper.selectArchiveListByQuery(page, query);
815

816 817
		List<JxglPerformanceAppraisal> listPA = pagePA.getRecords();

818
		return ResultUtil.data(pagePA, listPA);
819
	}
820

821 822 823 824
	/**
	 * 查询-绩效考核-列表-非归档
	 */
	@PostMapping(value = "/selects_performance_appraisal")
tangzhaoqian committed
825
	@ApiOperation(value = "9.查询-绩效考核-列表-非归档", httpMethod = "POST", notes = "查询-绩效考核-列表-非归档")
826 827
	@ApiOperationSupport(order = 9)
	@Role
828 829 830 831
	public Result<Object> selectsPA(@CurrentUser UserBean userBean, @RequestBody PerformanceAppraisalQuery query) {

		IPage<SpmkApproveSummary> page = new Page<SpmkApproveSummary>(query.getCurrentPage(), query.getTotalPage());

832
		query.setOrgCode(userBean.getOrgCode());
833

834
		IPage<JxglPerformanceAppraisal> pagePA = jxglPerformanceAppraisalMapper.selectListByQuery(page, query);
835

836 837
		List<JxglPerformanceAppraisal> listPA = pagePA.getRecords();

838
		return ResultUtil.data(pagePA, listPA);
839
	}
840

841 842 843 844 845 846
	/**
	 * 查询-考核-列表
	 */
	@PostMapping(value = "/selects_appraisal")
	@ApiOperation(value = "10.查询-考核-列表", httpMethod = "POST", notes = "查询-考核-列表")
	@ApiOperationSupport(order = 10)
847
	@Role
848 849 850
	public Result<Object> selectsA(@CurrentUser UserBean userBean, @RequestBody AppraisalQuery query) {

		IPage<JxglAppraisal> page = new Page<JxglAppraisal>(query.getCurrentPage(), query.getTotalPage());
851
		query.setOrgCode(userBean.getOrgCode());
852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868
		
		List<Integer> empNums = CollUtil.toList();
		
		if (query.getBmId() != null) {
			List<YgglMainEmp> usersQuery = zzglBmgwMService.selectOtherlistent(userBean.getOrgCode(), query.getBmId());
			if (usersQuery != null) {
				empNums = usersQuery.stream().map(YgglMainEmp::getEmpNum).collect(Collectors.toList());
			}else {
				return ResultUtil.data(null);
			}
			
			if (empNums == null || empNums.size() == 0) {
				return ResultUtil.data(null);
			}
		}
		
		query.setEmpNums(empNums);
869

870
		IPage<JxglAppraisal> pageA = jxglAppraisalMapper.selectListByQuery(page, query);
871

872 873
		List<JxglAppraisal> listPA = pageA.getRecords();

874 875
		return ResultUtil.data(pageA, listPA);

876
	}
877

878 879 880 881 882 883
	/**
	 * 查询-考核-详情
	 */
	@GetMapping(value = "/select_appraisal/{id}")
	@ApiOperation(value = "11.查询-考核-详情", httpMethod = "GET", notes = "查询-考核-详情")
	@ApiOperationSupport(order = 11)
884 885
	public Result<Object> selectA(@CurrentUser UserBean userBean, @PathVariable Integer id) {

886
		AppraisalDetail aD = jxglAppraisalMapper.selectDetailById(userBean.getOrgCode(), id);
887

tangzhaoqian committed
888
		if (aD != null) {
889 890 891 892
			JxglPerformanceAppraisal pA = jxglPerformanceAppraisalMapper
					.selectOne(new QueryWrapper<JxglPerformanceAppraisal>().lambda().eq(JxglPerformanceAppraisal::getId,
							aD.getPerformanceAppraisalId()));

893 894
			
			
tangzhaoqian committed
895 896
			if (pA != null && pA.getIsVisible() == 0) {
				return ResultUtil.data(aD);
897
			} else {
tangzhaoqian committed
898 899
				List<JxglAppraisalAssessment> listAA = aD.getAppraisalAssessments();
				if (listAA != null) {
900 901
					listAA = listAA.stream().filter(a -> !userBean.getEmpNum().equals(a.getAssessorId()))
							.collect(Collectors.toList());
tangzhaoqian committed
902 903 904 905
					aD.setAppraisalAssessments(listAA);
				}
			}
		}
906

907
		return ResultUtil.data(aD);
908

909
	}
910

911 912 913 914 915 916
	/**
	 * 修改-流程执行人-转派
	 */
	@PutMapping(value = "/update_process_node")
	@ApiOperation(value = "12.修改-流程执行人-转派", httpMethod = "PUT", notes = "修改-流程执行人-转派")
	@ApiOperationSupport(order = 12)
917
	@Role
918 919 920
	public Result<Object> updatePN(@CurrentUser UserBean userBean,
			@Validated @RequestBody ProcessNodeUpdate processNodeUpdate) {

tangzhaoqian committed
921
		JxglAppraisal appraisal = jxglAppraisalMapper.selectOne(new QueryWrapper<JxglAppraisal>().lambda()
922 923
				.eq(JxglAppraisal::getId, processNodeUpdate.getAppraisalId()).select(JxglAppraisal::getId));

tangzhaoqian committed
924
		if (appraisal == null) {
925
			return ResultUtil.error("考核不存在");
tangzhaoqian committed
926
		}
927

tangzhaoqian committed
928
		Integer count = jxglAppraisalMapper.selectCount(new QueryWrapper<JxglAppraisal>().lambda()
929 930
				.eq(JxglAppraisal::getId, processNodeUpdate.getAppraisalId()).in(JxglAppraisal::getSts,
						AppraisalSts.ASSESSMENT_COMPLETE.getType(), AppraisalSts.TERMINATION_ASSESSMENT.getType(),
931
						AppraisalSts.PERFORMANCE_ARCHIVE.getType()));
932

tangzhaoqian committed
933
		if (count > 0) {
934 935
			return ResultUtil.error("考核已结束");
		}
936

tangzhaoqian committed
937 938 939
		count = jxglProcessNodeMapper.selectCount(new QueryWrapper<JxglProcessNode>().lambda()
				.eq(JxglProcessNode::getAppraisalId, processNodeUpdate.getAppraisalId())
				.ne(JxglProcessNode::getSts, ProcessNodeSts.EXECUTED.getType()));
940

tangzhaoqian committed
941 942 943
		if (count <= 0) {
			return ResultUtil.error("流程已执行,无法更改");
		}
944

945 946
		JxglProcessNode pN = JxglProcessNode.builder().build();
		BeanUtil.copyProperties(processNodeUpdate, pN);
947

948
		pN.updateById();
949

950 951
		return ResultUtil.data(pN);
	}
952

953 954 955 956 957 958
	/**
	 * 终止-考核
	 */
	@PutMapping(value = "/termination_assessment")
	@ApiOperation(value = "13.终止-考核", httpMethod = "PUT", notes = "终止-考核")
	@ApiOperationSupport(order = 13)
959
	@Role
tangzhaoqian committed
960
	@Log(title = "终止-考核")
961 962
	public Result<Object> terminationAssessment(@CurrentUser UserBean userBean, @NotNull @RequestParam Integer id) {

tangzhaoqian committed
963
		JxglAppraisal appraisal = jxglAppraisalMapper.selectById(id);
964

tangzhaoqian committed
965
		if (appraisal == null) {
966 967
			return ResultUtil.error("考核不存在");
		} else if (appraisal.getSts() <= AppraisalSts.RESULT_VERIFICATION.getType()) {
tangzhaoqian committed
968
			JxglAppraisal.builder().id(id).sts(AppraisalSts.TERMINATION_ASSESSMENT.getType()).build().updateById();
969 970 971 972 973 974 975
			
			JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(userBean.getEmpNum());
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
			appraisalLog.setType(AppraisalLogType.TERMINATION_ASSESSMENT.getType());
			appraisalLog.insert();
976
		} else if (appraisal.getSts() == AppraisalSts.ASSESSMENT_COMPLETE.getType()) {
tangzhaoqian committed
977
			return ResultUtil.error("考核已完成,无法终止");
978
		} else if (appraisal.getSts() == AppraisalSts.TERMINATION_ASSESSMENT.getType()) {
tangzhaoqian committed
979
			return ResultUtil.error("考核已终止,无法重复终止");
980
		} else if (appraisal.getSts() == AppraisalSts.PERFORMANCE_ARCHIVE.getType()) {
tangzhaoqian committed
981 982
			return ResultUtil.error("考核已归档,无法终止");
		}
983
		return ResultUtil.success();
984
	}
985

986
	/**
987
	 * 查询-绩效管理-员工绩效-汇总
988 989
	 */
	@PostMapping(value = "/selects_emp_performance")
990
	@ApiOperation(value = "14.查询-绩效管理-员工绩效-汇总", httpMethod = "POST", notes = " 查询-绩效管理-员工绩效-汇总")
991 992
	@ApiOperationSupport(order = 14)
	@Role
993 994 995
	public Result<Object> selectsEP(@CurrentUser UserBean userBean, @RequestBody EmpPerformanceQuery query) {

		IPage<JxglAppraisal> page = new Page<JxglAppraisal>(query.getCurrentPage(), query.getTotalPage());
996
		query.setOrgCode(userBean.getOrgCode());
997 998 999 1000 1001
		
		List<Integer> empNums = CollUtil.toList();
		
		if (query.getBmId() != null) {
			List<YgglMainEmp> usersQuery = zzglBmgwMService.selectOtherlistent(userBean.getOrgCode(), query.getBmId());
1002
			if (CollectionUtil.isNotEmpty(usersQuery)) {
1003 1004 1005 1006 1007
				empNums = usersQuery.stream().map(YgglMainEmp::getEmpNum).collect(Collectors.toList());
			}else {
				return ResultUtil.data(null);
			}
			
1008
			if (CollectionUtil.isEmpty(empNums)) {
1009 1010 1011 1012 1013
				return ResultUtil.data(null);
			}
		}
		
		query.setEmpNums(empNums);
1014

1015
		IPage<JxglAppraisal> pageA = jxglAppraisalMapper.selectListEmpByQuery(page, query);
1016

1017 1018
		List<JxglAppraisal> listA = pageA.getRecords();

1019 1020
		return ResultUtil.data(pageA, listA);

1021
	}
1022

1023 1024 1025 1026 1027 1028 1029
	/**
	 * 查询-某员工考核-列表
	 */
	@PostMapping(value = "/selects_emp_appraisal")
	@ApiOperation(value = "15.查询-某员工考核-列表", httpMethod = "POST", notes = "查询-某员工考核-列表")
	@ApiOperationSupport(order = 15)
	@Role
1030 1031 1032 1033
	public Result<Object> selectsEA(@CurrentUser UserBean userBean,@Validated @RequestBody EmpAppraisalQuery query) {

		IPage<JxglPerformanceAppraisal> page = new Page<JxglPerformanceAppraisal>(query.getCurrentPage(),
				query.getTotalPage());
1034
		query.setOrgCode(userBean.getOrgCode());
1035

1036
		IPage<JxglPerformanceAppraisal> pagePA = jxglPerformanceAppraisalMapper.selectListEmpByQuery(page, query);
1037

1038 1039
		List<JxglPerformanceAppraisal> listPA = pagePA.getRecords();

1040 1041
		return ResultUtil.data(pagePA, listPA);

1042
	}
1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063
	
	/**
	 * 查询-我的绩效-考核我的-列表
	 */
	@PostMapping(value = "/selects_my_appraisal")
	@ApiOperation(value = "15.查询-我的绩效-考核我的-列表", httpMethod = "POST", notes = "查询-我的绩效-考核我的-列表")
	@ApiOperationSupport(order = 15)
	public Result<Object> selectsMA(@CurrentUser UserBean userBean,@Validated @RequestBody EmpAppraisalQuery query) {
		
		IPage<JxglPerformanceAppraisal> page = new Page<JxglPerformanceAppraisal>(query.getCurrentPage(),
				query.getTotalPage());
		query.setOrgCode(userBean.getOrgCode());
		query.setId(userBean.getEmpNum());
		
		IPage<JxglPerformanceAppraisal> pagePA = jxglPerformanceAppraisalMapper.selectListEmpByQuery(page, query);
		
		List<JxglPerformanceAppraisal> listPA = pagePA.getRecords();
		
		return ResultUtil.data(pagePA, listPA);
		
	}
1064

1065 1066 1067 1068 1069 1070 1071
	/**
	 * 查询-绩效考核-方案
	 */
	@GetMapping(value = "/selects_performance_appraisal/{id}")
	@ApiOperation(value = "16.查询-绩效考核-方案", httpMethod = "GET", notes = "查询-绩效考核-方案")
	@ApiOperationSupport(order = 16)
	@Role
1072 1073
	public Result<Object> selectPA(@CurrentUser UserBean userBean, @PathVariable Integer id) {

1074 1075 1076 1077
		JxglPerformanceAppraisal pA = jxglPerformanceAppraisalMapper.selectById(id);
		if (pA == null) {
			return ResultUtil.error("方案不存在");
		}
1078 1079 1080 1081 1082 1083 1084 1085 1086
		PerformanceAppraisal paDto = PerformanceAppraisal.builder()
				.name(pA.getName())
				.period(pA.getPeriod())
				.appraisalStartTime(pA.getAppraisalStartTime())
				.appraisalEndTime(pA.getAppraisalEndTime())
				.isVisible(pA.getIsVisible())
				.scope(pA.getScope())
				.appraisalTName(pA.getAppraisalTName())
				.appraisalTId(pA.getAppraisalTId())
1087
				.processNode(ObjectUtil.deserialize(pA.getProcessNode()))
1088 1089
				.beingAppraisalPerson(ObjectUtil.deserialize(pA.getBeingAppraisalPerson()))
				.build();
1090

1091 1092
		return ResultUtil.data(paDto);
	}
1093

tangzhaoqian committed
1094
	/**
1095
	 * 查询-目标待填写/目标待确认/评分/结果待确认-列表
tangzhaoqian committed
1096 1097
	 */
	@PostMapping(value = "/selects_my_performance")
1098
	@ApiOperation(value = "17.查询-目标待填写/目标待确认/评分/结果待确认-列表", httpMethod = "POST", notes = "查询")
tangzhaoqian committed
1099
	@ApiOperationSupport(order = 17)
1100 1101
	public Result<Object> selects(@CurrentUser UserBean userBean,@Validated @RequestBody MyPerformance query) {

tangzhaoqian committed
1102 1103 1104 1105
		IPage<JxglPerformanceAppraisal> page = new Page<JxglPerformanceAppraisal>(query.getCurrentPage(),query.getTotalPage());
		query.setOrgCode(userBean.getOrgCode());
		query.setId(userBean.getEmpNum());
		IPage<JxglPerformanceAppraisal> pagePA = jxglPerformanceAppraisalMapper.selectMyByQuery(page, query);
1106

tangzhaoqian committed
1107 1108
		List<JxglPerformanceAppraisal> listPA = pagePA.getRecords();

1109 1110
		return ResultUtil.data(pagePA, listPA);

tangzhaoqian committed
1111
	}
1112

tangzhaoqian committed
1113 1114 1115 1116 1117 1118
	/**
	 * 目标填写-保存
	 */
	@PostMapping(value = "/save_target_fill")
	@ApiOperation(value = "17.目标填写-保存", httpMethod = "POST", notes = "目标填写-保存")
	@ApiOperationSupport(order = 17)
1119 1120 1121
	public Result<Object> saveTF(@CurrentUser UserBean userBean, @RequestBody AppraisalUpdate appraisalUpdate)
			throws Exception {

tangzhaoqian committed
1122
		Integer id = appraisalUpdate.getId();
1123

tangzhaoqian committed
1124
		Integer count2 = jxglAppraisalMapper.selectCount(new QueryWrapper<JxglAppraisal>().lambda()
1125 1126 1127
				.eq(JxglAppraisal::getId, id).in(JxglAppraisal::getSts, AppraisalSts.ASSESSMENT_COMPLETE.getType(),
						AppraisalSts.TERMINATION_ASSESSMENT.getType(), AppraisalSts.PERFORMANCE_ARCHIVE.getType()));

tangzhaoqian committed
1128 1129 1130
		if (count2 > 0) {
			return ResultUtil.error("考核已结束");
		}
1131 1132 1133 1134

		JxglAppraisal appraisal = jxglAppraisalMapper.selectOne(
				new QueryWrapper<JxglAppraisal>().lambda().eq(JxglAppraisal::getId, id).select(JxglAppraisal::getId));

tangzhaoqian committed
1135
		if (appraisal == null) {
1136
			return ResultUtil.error("考核不存在");
tangzhaoqian committed
1137
		}
1138 1139 1140 1141

		JxglProcessNode processNode = jxglProcessNodeMapper.selectOne(
				new QueryWrapper<JxglProcessNode>().lambda().eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));
tangzhaoqian committed
1142 1143 1144
		if (processNode == null) {
			return ResultUtil.error("流程不存在");
		}
1145

tangzhaoqian committed
1146
		if (ProcessType.TARGET_FILL_IN.getType() == processNode.getProcessType()) {
1147

tangzhaoqian committed
1148
			if (!userBean.getEmpNum().equals(processNode.getExecutorId())) {
1149
				return ResultUtil.error("无权限操作该流程");
tangzhaoqian committed
1150
			}
1151 1152

		} else {
tangzhaoqian committed
1153 1154
			return ResultUtil.error("流程状态异常");
		}
1155

1156
		// 查找 非固定 考核指标
1157
		List<JxglAppraisalIndicators> listAI = jxglAppraisalIndicatorsMapper
1158 1159 1160
				.selectList(new QueryWrapper<JxglAppraisalIndicators>().lambda().select(JxglAppraisalIndicators::getId,
						JxglAppraisalIndicators::getWeight,
						JxglAppraisalIndicators::getIsEditWeight)
1161 1162 1163
						.eq(JxglAppraisalIndicators::getType, IndicatorsType.NOT_FIXATION.getType())
						.eq(JxglAppraisalIndicators::getAppraisalId, id));

tangzhaoqian committed
1164
		List<Integer> appraisalIndicatorIds = listAI != null && listAI.size() > 0
1165 1166 1167
				? listAI.stream().map(JxglAppraisalIndicators::getId).collect(Collectors.toList())
				: null;

1168
		if (appraisalIndicatorIds != null) {
1169

1170 1171 1172 1173
			// 删除 考核项
			jxglAppraisalItemMapper.delete(new QueryWrapper<JxglAppraisalItem>().lambda()
					.in(JxglAppraisalItem::getAppraisalIndicatorsId, appraisalIndicatorIds));
		}
1174

tangzhaoqian committed
1175 1176
		// 删除 考核指标
		jxglAppraisalIndicatorsMapper.delete(new QueryWrapper<JxglAppraisalIndicators>().lambda()
1177
				.eq(JxglAppraisalIndicators::getType, IndicatorsType.NOT_FIXATION.getType())
tangzhaoqian committed
1178
				.eq(JxglAppraisalIndicators::getAppraisalId, id));
1179 1180

		List<JxglAppraisalIndicators> listAI2 = appraisalUpdate.getAppraisalIndicators();
tangzhaoqian committed
1181
		
tangzhaoqian committed
1182
		if (listAI2 != null && listAI2.size() > 0) {
1183 1184 1185 1186 1187 1188 1189 1190 1191 1192
			listAI2.forEach(aI -> {
				aI.setAppraisalId(id);
				aI.setType(IndicatorsType.NOT_FIXATION.getType());
				if (aI.insert()) {
					List<JxglAppraisalItem> listAItem = aI.getAppraisalItems();
					if (listAItem != null && listAItem.size() > 0) {
						for (JxglAppraisalItem aItem : listAItem) {
							aItem.setAppraisalIndicatorsId(aI.getId());
							aItem.insert();
						}
tangzhaoqian committed
1193
					}
1194 1195
				} else {
					throw new CustomException("保存异常");
tangzhaoqian committed
1196
				}
1197 1198

			});
1199 1200
		}
		
1201

tangzhaoqian committed
1202 1203
		return ResultUtil.success();
	}
1204

tangzhaoqian committed
1205 1206 1207 1208 1209 1210
	/**
	 * 目标填写-提交
	 */
	@PostMapping(value = "/submit_target_fill")
	@ApiOperation(value = "17.目标填写-提交", httpMethod = "POST", notes = "目标填写-提交")
	@ApiOperationSupport(order = 17)
1211 1212
	public Result<Object> submitTF(@CurrentUser UserBean userBean, @RequestParam Integer id) {

tangzhaoqian committed
1213
		Integer count2 = jxglAppraisalMapper.selectCount(new QueryWrapper<JxglAppraisal>().lambda()
1214 1215 1216
				.eq(JxglAppraisal::getId, id).in(JxglAppraisal::getSts, AppraisalSts.ASSESSMENT_COMPLETE.getType(),
						AppraisalSts.TERMINATION_ASSESSMENT.getType(), AppraisalSts.PERFORMANCE_ARCHIVE.getType()));

tangzhaoqian committed
1217 1218 1219
		if (count2 > 0) {
			return ResultUtil.error("考核已结束");
		}
1220 1221 1222 1223

		JxglAppraisal appraisal = jxglAppraisalMapper.selectOne(
				new QueryWrapper<JxglAppraisal>().lambda().eq(JxglAppraisal::getId, id).select(JxglAppraisal::getId));

tangzhaoqian committed
1224 1225 1226
		if (appraisal == null) {
			return ResultUtil.error("考核不存在");
		}
1227 1228 1229 1230

		JxglProcessNode processNode = jxglProcessNodeMapper.selectOne(
				new QueryWrapper<JxglProcessNode>().lambda().eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));
tangzhaoqian committed
1231 1232 1233
		if (processNode == null) {
			return ResultUtil.error("流程不存在");
		}
1234

tangzhaoqian committed
1235
		if (ProcessType.TARGET_FILL_IN.getType() == processNode.getProcessType()) {
1236

tangzhaoqian committed
1237
			if (!userBean.getEmpNum().equals(processNode.getExecutorId())) {
1238
				return ResultUtil.error("无权限操作该流程");
tangzhaoqian committed
1239
			}
1240 1241 1242 1243 1244

			List<JxglAppraisalIndicators> listAI = jxglAppraisalIndicatorsMapper
					.selectList(new QueryWrapper<JxglAppraisalIndicators>().lambda()
							.eq(JxglAppraisalIndicators::getAppraisalId, appraisal.getId()));

tangzhaoqian committed
1245
			if (CollectionUtil.isEmpty(listAI)) {
tangzhaoqian committed
1246 1247
				return ResultUtil.error("考核指标不能为空");
			}
1248 1249
			List<Integer> listWeight = listAI.stream().map(JxglAppraisalIndicators::getWeight)
					.collect(Collectors.toList());
tangzhaoqian committed
1250 1251 1252
			Integer weightSum = 0;
			if (listWeight != null && listWeight.size() > 0) {
				for (Integer i : listWeight) {
1253
					i = i == null ? 0 : i;
tangzhaoqian committed
1254 1255 1256 1257 1258 1259
					weightSum += i;
				}
				if (!weightSum.equals(100))
					return ResultUtil.error("权重总和要等于 100%");
			}
			// 修改 目标填写 状态
1260 1261 1262 1263 1264
			JxglProcessNode.builder().sts(ProcessNodeSts.EXECUTED.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));

tangzhaoqian committed
1265
			// 修改 下一个节点状态
1266 1267 1268 1269 1270 1271 1272 1273
			JxglProcessNode.builder().sts(ProcessNodeSts.IN_EXECUTION.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getProcessType, ProcessType.TARGET_CONFIRMED.getType()));

			jxglAppraisalMapper
					.updateById(JxglAppraisal.builder().id(id).sts(AppraisalSts.TARGET_CONFIRMED.getType()).build());

tangzhaoqian committed
1274 1275 1276 1277 1278 1279
			JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(userBean.getEmpNum());
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
			appraisalLog.setType(AppraisalLogType.TARGET_FILL_IN.getType());
			appraisalLog.insert();
1280 1281

		} else {
tangzhaoqian committed
1282 1283 1284 1285 1286
			return ResultUtil.error("流程状态异常");
		}

		return ResultUtil.success();
	}
1287

tangzhaoqian committed
1288 1289 1290 1291 1292 1293
	/**
	 * 目标确认-同意
	 */
	@PostMapping(value = "/update_target_confirmed")
	@ApiOperation(value = "18.目标确认-同意", httpMethod = "POST", notes = "目标确认-同意")
	@ApiOperationSupport(order = 18)
1294 1295
	public Result<Object> updateTC(@CurrentUser UserBean userBean, @RequestParam Integer id) {

tangzhaoqian committed
1296
		Integer count2 = jxglAppraisalMapper.selectCount(new QueryWrapper<JxglAppraisal>().lambda()
1297 1298 1299
				.eq(JxglAppraisal::getId, id).in(JxglAppraisal::getSts, AppraisalSts.ASSESSMENT_COMPLETE.getType(),
						AppraisalSts.TERMINATION_ASSESSMENT.getType(), AppraisalSts.PERFORMANCE_ARCHIVE.getType()));

tangzhaoqian committed
1300 1301 1302
		if (count2 > 0) {
			return ResultUtil.error("考核已结束");
		}
1303

tangzhaoqian committed
1304
		JxglAppraisal appraisal = jxglAppraisalMapper.selectOne(new QueryWrapper<JxglAppraisal>().lambda()
1305 1306
				.eq(JxglAppraisal::getId, id).select(JxglAppraisal::getId, JxglAppraisal::getPerformanceAppraisalId));

tangzhaoqian committed
1307
		if (appraisal == null) {
1308
			return ResultUtil.error("考核不存在");
tangzhaoqian committed
1309
		}
1310 1311 1312 1313

		JxglProcessNode processNode = jxglProcessNodeMapper.selectOne(
				new QueryWrapper<JxglProcessNode>().lambda().eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));
tangzhaoqian committed
1314 1315 1316
		if (processNode == null) {
			return ResultUtil.error("流程不存在");
		}
1317

tangzhaoqian committed
1318
		if (ProcessType.TARGET_CONFIRMED.getType() == processNode.getProcessType()) {
1319

tangzhaoqian committed
1320
			if (!userBean.getEmpNum().equals(processNode.getExecutorId())) {
1321
				return ResultUtil.error("无权限操作该流程");
tangzhaoqian committed
1322 1323
			}

1324 1325 1326 1327 1328 1329 1330
			// 修改 目标确认 状态
			JxglProcessNode.builder().sts(ProcessNodeSts.EXECUTED.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));
			JxglPerformanceAppraisal pA = jxglPerformanceAppraisalMapper
					.selectById(appraisal.getPerformanceAppraisalId());
tangzhaoqian committed
1331 1332
			if (pA != null && pA.getSts() > PerformanceAppraisalSts.TARGET_SETING.getType()) {
				// 修改 下一个节点状态
1333 1334 1335 1336 1337 1338 1339
				JxglProcessNode.builder().sts(ProcessNodeSts.IN_EXECUTION.getType()).build()
						.update(new UpdateWrapper<JxglProcessNode>().lambda()
								.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
								.eq(JxglProcessNode::getProcessType, ProcessType.SELF_ASSESSMENT.getType()));

				jxglAppraisalMapper.updateById(JxglAppraisal.builder().id(appraisal.getId())
						.sts(AppraisalSts.SELF_ASSESSMENT.getType()).build());
tangzhaoqian committed
1340
			}
1341

tangzhaoqian committed
1342 1343 1344 1345 1346 1347
			JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(userBean.getEmpNum());
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
			appraisalLog.setType(AppraisalLogType.TARGET_CONFIRMED.getType());
			appraisalLog.insert();
1348
		} else {
tangzhaoqian committed
1349 1350 1351 1352
			return ResultUtil.error("流程状态异常");
		}

		return ResultUtil.success();
1353

tangzhaoqian committed
1354
	}
1355

tangzhaoqian committed
1356 1357 1358 1359 1360 1361
	/**
	 * 目标确认-驳回目标
	 */
	@PostMapping(value = "/update_target_confirmed_reject")
	@ApiOperation(value = "18.目标确认-驳回目标", httpMethod = "POST", notes = "目标确认-驳回目标")
	@ApiOperationSupport(order = 18)
1362 1363 1364 1365 1366 1367 1368
	public Result<Object> updateTCR(@CurrentUser UserBean userBean, @RequestBody AppraisalReject appraisalReject) {

		Integer count2 = jxglAppraisalMapper.selectCount(
				new QueryWrapper<JxglAppraisal>().lambda().eq(JxglAppraisal::getId, appraisalReject.getId()).in(
						JxglAppraisal::getSts, AppraisalSts.ASSESSMENT_COMPLETE.getType(),
						AppraisalSts.TERMINATION_ASSESSMENT.getType(), AppraisalSts.PERFORMANCE_ARCHIVE.getType()));

tangzhaoqian committed
1369 1370 1371
		if (count2 > 0) {
			return ResultUtil.error("考核已结束");
		}
1372

tangzhaoqian committed
1373
		JxglAppraisal appraisal = jxglAppraisalMapper.selectOne(new QueryWrapper<JxglAppraisal>().lambda()
1374 1375
				.eq(JxglAppraisal::getId, appraisalReject.getId()).select(JxglAppraisal::getId));

tangzhaoqian committed
1376
		if (appraisal == null) {
1377
			return ResultUtil.error("考核不存在");
tangzhaoqian committed
1378
		}
1379 1380 1381 1382 1383

		JxglProcessNode processNode = jxglProcessNodeMapper.selectOne(
				new QueryWrapper<JxglProcessNode>().lambda().eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));

tangzhaoqian committed
1384 1385 1386
		if (processNode == null) {
			return ResultUtil.error("流程不存在");
		}
1387

tangzhaoqian committed
1388
		if (ProcessType.TARGET_CONFIRMED.getType() == processNode.getProcessType()) {
1389

tangzhaoqian committed
1390
			if (!userBean.getEmpNum().equals(processNode.getExecutorId())) {
1391
				return ResultUtil.error("无权限操作该流程");
tangzhaoqian committed
1392 1393
			}

1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406
			// 修改 目标确认 状态
			JxglProcessNode.builder().sts(ProcessNodeSts.NON_EXECUTION.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.in(JxglProcessNode::getProcessType, ProcessType.TARGET_CONFIRMED.getType()));

			JxglProcessNode.builder().sts(ProcessNodeSts.IN_EXECUTION.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getProcessType, ProcessType.TARGET_FILL_IN.getType()));

			jxglAppraisalMapper.updateById(
					JxglAppraisal.builder().id(appraisal.getId()).sts(AppraisalSts.TARGET_FILL_IN.getType()).build());
tangzhaoqian committed
1407 1408 1409 1410 1411 1412 1413 1414

			JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
			appraisalLog.setRemarks(appraisalReject.getRejectReason());
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(userBean.getEmpNum());
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
			appraisalLog.setType(AppraisalLogType.TARGET_DISMISS.getType());
			appraisalLog.insert();
1415 1416

		} else {
tangzhaoqian committed
1417 1418 1419 1420
			return ResultUtil.error("流程状态异常");
		}

		return ResultUtil.success();
1421

tangzhaoqian committed
1422
	}
1423

tangzhaoqian committed
1424 1425 1426 1427 1428 1429
	/**
	 * 上级评价 -驳回目标
	 */
	@PostMapping(value = "/update_superior_score_reject")
	@ApiOperation(value = "19.上级评价 -驳回目标", httpMethod = "POST", notes = "上级评价 -驳回目标")
	@ApiOperationSupport(order = 19)
1430 1431 1432 1433 1434 1435 1436
	public Result<Object> updateSSR(@CurrentUser UserBean userBean, @RequestBody AppraisalReject appraisalReject) {

		Integer count2 = jxglAppraisalMapper.selectCount(
				new QueryWrapper<JxglAppraisal>().lambda().eq(JxglAppraisal::getId, appraisalReject.getId()).in(
						JxglAppraisal::getSts, AppraisalSts.ASSESSMENT_COMPLETE.getType(),
						AppraisalSts.TERMINATION_ASSESSMENT.getType(), AppraisalSts.PERFORMANCE_ARCHIVE.getType()));

tangzhaoqian committed
1437 1438 1439
		if (count2 > 0) {
			return ResultUtil.error("考核已结束");
		}
1440

tangzhaoqian committed
1441
		JxglAppraisal appraisal = jxglAppraisalMapper.selectOne(new QueryWrapper<JxglAppraisal>().lambda()
1442 1443
				.eq(JxglAppraisal::getId, appraisalReject.getId()).select(JxglAppraisal::getId));

tangzhaoqian committed
1444
		if (appraisal == null) {
1445
			return ResultUtil.error("考核不存在");
tangzhaoqian committed
1446
		}
1447 1448 1449 1450

		JxglProcessNode processNode = jxglProcessNodeMapper.selectOne(
				new QueryWrapper<JxglProcessNode>().lambda().eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));
tangzhaoqian committed
1451 1452 1453
		if (processNode == null) {
			return ResultUtil.error("流程不存在");
		}
1454

tangzhaoqian committed
1455
		if (ProcessType.SUPERIOR_SCORE.getType() == processNode.getProcessType()) {
1456

tangzhaoqian committed
1457
			if (!userBean.getEmpNum().equals(processNode.getExecutorId())) {
1458
				return ResultUtil.error("无权限操作该流程");
tangzhaoqian committed
1459 1460
			}

1461 1462 1463 1464 1465 1466 1467 1468 1469 1470
			// 修改 目标确认 状态
			JxglProcessNode.builder().sts(ProcessNodeSts.NON_EXECUTION.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId()).in(JxglProcessNode::getProcessType,
									ProcessType.TARGET_CONFIRMED.getType(), ProcessType.SELF_ASSESSMENT.getType()));

			JxglProcessNode.builder().sts(ProcessNodeSts.IN_EXECUTION.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getProcessType, ProcessType.TARGET_FILL_IN.getType()));
tangzhaoqian committed
1471 1472 1473 1474 1475

			// 删除 考核评定-自评
			jxglAppraisalAssessmentMapper.delete(new QueryWrapper<JxglAppraisalAssessment>().lambda()
					.eq(JxglAppraisalAssessment::getAppraisalId, appraisal.getId())
					.eq(JxglAppraisalAssessment::getType, AssessmentType.SELF_ASSESSMENT.getType()));
1476 1477 1478 1479

			List<JxglAppraisalIndicators> listAI = jxglAppraisalIndicatorsMapper.selectList(
					new QueryWrapper<JxglAppraisalIndicators>().lambda().select(JxglAppraisalIndicators::getId)
							.eq(JxglAppraisalIndicators::getAppraisalId, appraisal.getId()));
tangzhaoqian committed
1480
			List<Integer> listAIId = CollectionUtil.isNotEmpty(listAI)
1481 1482
					? listAI.stream().map(JxglAppraisalIndicators::getId).collect(Collectors.toList())
					: null;
tangzhaoqian committed
1483
			// 删除 考核指标评定-自评
1484 1485
			jxglAppraisalIndicatorsAssessmentMapper.delete(new QueryWrapper<JxglAppraisalIndicatorsAssessment>()
					.lambda().in(JxglAppraisalIndicatorsAssessment::getAppraisalIndicatorsId, listAIId)
tangzhaoqian committed
1486
					.eq(JxglAppraisalIndicatorsAssessment::getType, AssessmentType.SELF_ASSESSMENT.getType()));
1487 1488 1489 1490

			jxglAppraisalMapper.updateById(
					JxglAppraisal.builder().id(appraisal.getId()).sts(AppraisalSts.TARGET_FILL_IN.getType()).build());

tangzhaoqian committed
1491 1492 1493 1494 1495 1496 1497
			JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
			appraisalLog.setRemarks(appraisalReject.getRejectReason());
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(userBean.getEmpNum());
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
			appraisalLog.setType(AppraisalLogType.TARGET_DISMISS.getType());
			appraisalLog.insert();
1498 1499

		} else {
tangzhaoqian committed
1500 1501 1502 1503
			return ResultUtil.error("流程状态异常");
		}

		return ResultUtil.success();
1504

tangzhaoqian committed
1505
	}
1506

tangzhaoqian committed
1507 1508 1509 1510 1511 1512
	/**
	 * 上级评价 -驳回评分
	 */
	@PostMapping(value = "/update_superior_reject_score")
	@ApiOperation(value = "20.上级评价 -驳回评分", httpMethod = "POST", notes = "上级评价 -驳回评分")
	@ApiOperationSupport(order = 20)
1513 1514 1515 1516 1517 1518 1519
	public Result<Object> updateSRS(@CurrentUser UserBean userBean,@Validated @RequestBody AppraisalReject appraisalReject) {

		Integer count2 = jxglAppraisalMapper.selectCount(
				new QueryWrapper<JxglAppraisal>().lambda().eq(JxglAppraisal::getId, appraisalReject.getId()).in(
						JxglAppraisal::getSts, AppraisalSts.ASSESSMENT_COMPLETE.getType(),
						AppraisalSts.TERMINATION_ASSESSMENT.getType(), AppraisalSts.PERFORMANCE_ARCHIVE.getType()));

tangzhaoqian committed
1520 1521 1522
		if (count2 > 0) {
			return ResultUtil.error("考核已结束");
		}
1523

tangzhaoqian committed
1524
		JxglAppraisal appraisal = jxglAppraisalMapper.selectOne(new QueryWrapper<JxglAppraisal>().lambda()
1525 1526
				.eq(JxglAppraisal::getId, appraisalReject.getId()).select(JxglAppraisal::getId));

tangzhaoqian committed
1527
		if (appraisal == null) {
1528
			return ResultUtil.error("考核不存在");
tangzhaoqian committed
1529
		}
1530 1531 1532 1533

		JxglProcessNode processNode = jxglProcessNodeMapper.selectOne(
				new QueryWrapper<JxglProcessNode>().lambda().eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));
tangzhaoqian committed
1534 1535 1536
		if (processNode == null) {
			return ResultUtil.error("流程不存在");
		}
1537

tangzhaoqian committed
1538
		if (ProcessType.SUPERIOR_SCORE.getType() == processNode.getProcessType()) {
1539

tangzhaoqian committed
1540
			if (!userBean.getEmpNum().equals(processNode.getExecutorId())) {
1541
				return ResultUtil.error("无权限操作该流程");
tangzhaoqian committed
1542 1543
			}

1544 1545 1546 1547 1548 1549
			// 修改 状态
			JxglProcessNode.builder().sts(ProcessNodeSts.NON_EXECUTION.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getProcessType, ProcessType.SUPERIOR_SCORE.getType()));

tangzhaoqian committed
1550
			// 修改 上一个节点状态
1551 1552 1553 1554 1555
			JxglProcessNode.builder().sts(ProcessNodeSts.IN_EXECUTION.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getProcessType, ProcessType.SELF_ASSESSMENT.getType()));

tangzhaoqian committed
1556 1557 1558 1559
			// 删除 考核评定-自评
			jxglAppraisalAssessmentMapper.delete(new QueryWrapper<JxglAppraisalAssessment>().lambda()
					.eq(JxglAppraisalAssessment::getAppraisalId, appraisal.getId())
					.eq(JxglAppraisalAssessment::getType, AssessmentType.SELF_ASSESSMENT.getType()));
1560 1561 1562 1563 1564 1565 1566

			List<JxglAppraisalIndicators> listAI = jxglAppraisalIndicatorsMapper.selectList(
					new QueryWrapper<JxglAppraisalIndicators>().lambda().select(JxglAppraisalIndicators::getId)
							.eq(JxglAppraisalIndicators::getAppraisalId, appraisal.getId()));
			List<Integer> listAIId = listAI != null && listAI.size() > 0
					? listAI.stream().map(JxglAppraisalIndicators::getId).collect(Collectors.toList())
					: null;
tangzhaoqian committed
1567
			// 删除 考核指标评定-自评
1568 1569
			jxglAppraisalIndicatorsAssessmentMapper.delete(new QueryWrapper<JxglAppraisalIndicatorsAssessment>()
					.lambda().in(JxglAppraisalIndicatorsAssessment::getAppraisalIndicatorsId, listAIId)
tangzhaoqian committed
1570
					.eq(JxglAppraisalIndicatorsAssessment::getType, AssessmentType.SELF_ASSESSMENT.getType()));
1571 1572 1573 1574

			jxglAppraisalMapper.updateById(
					JxglAppraisal.builder().id(appraisal.getId()).sts(AppraisalSts.SELF_ASSESSMENT.getType()).build());

tangzhaoqian committed
1575 1576 1577 1578 1579 1580 1581
			JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
			appraisalLog.setRemarks(appraisalReject.getRejectReason());
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(userBean.getEmpNum());
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
			appraisalLog.setType(AppraisalLogType.SCORE_DISMISS.getType());
			appraisalLog.insert();
1582 1583

		} else {
tangzhaoqian committed
1584 1585 1586 1587
			return ResultUtil.error("流程状态异常");
		}

		return ResultUtil.success();
1588

tangzhaoqian committed
1589
	}
1590

tangzhaoqian committed
1591
	/**
1592
	 * 评分提交
tangzhaoqian committed
1593 1594 1595 1596
	 */
	@PostMapping(value = "/save_score")
	@ApiOperation(value = "22.评分提交", httpMethod = "POST", notes = "评分提交")
	@ApiOperationSupport(order = 22)
1597
	public Result<Object> saveScore(@CurrentUser UserBean userBean,
1598
			@Validated @RequestBody ValidList<AppraisalAssessment> appraisalAssessments) throws Exception{
1599

tangzhaoqian committed
1600
		Integer appraisalId = appraisalAssessments.get(0).getAppraisalId();
1601 1602 1603 1604 1605 1606 1607

		Integer count = jxglAppraisalMapper
				.selectCount(new QueryWrapper<JxglAppraisal>().lambda().eq(JxglAppraisal::getId, appraisalId).in(
						JxglAppraisal::getSts, AppraisalSts.ASSESSMENT_COMPLETE.getType(),
						AppraisalSts.TERMINATION_ASSESSMENT.getType(), AppraisalSts.PERFORMANCE_ARCHIVE.getType()));

		if (count > 0) {
tangzhaoqian committed
1608 1609
			return ResultUtil.error("考核已结束");
		}
1610 1611 1612 1613 1614

		JxglAppraisal appraisal = jxglAppraisalMapper
				.selectOne(new QueryWrapper<JxglAppraisal>().lambda().eq(JxglAppraisal::getId, appraisalId)
						.select(JxglAppraisal::getId, JxglAppraisal::getPerformanceAppraisalId));

tangzhaoqian committed
1615
		if (appraisal == null) {
1616
			return ResultUtil.error("考核不存在");
tangzhaoqian committed
1617
		}
1618 1619 1620 1621

		JxglProcessNode processNode = jxglProcessNodeMapper.selectOne(
				new QueryWrapper<JxglProcessNode>().lambda().eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));
tangzhaoqian committed
1622 1623 1624
		if (processNode == null) {
			return ResultUtil.error("流程不存在");
		}
1625 1626
		
		JxglBasicSetting bS = jxglService.selectAT(userBean.getOrgCode());
1627

1628
		Integer maxScore = bS.getMaxScore();
1629 1630 1631
		if (ProcessType.SELF_ASSESSMENT.getType() == processNode.getProcessType()
				|| ProcessType.SUPERIOR_SCORE.getType() == processNode.getProcessType()) {

tangzhaoqian committed
1632
			if (!userBean.getEmpNum().equals(processNode.getExecutorId())) {
1633
				return ResultUtil.error("无权限操作该流程");
tangzhaoqian committed
1634 1635
			}

1636 1637 1638 1639
			boolean hasAppraisalAssessment = false;
			
			for (AppraisalAssessment a : appraisalAssessments) {

1640 1641 1642 1643
				Integer type = ProcessType.SELF_ASSESSMENT.getType() == processNode.getProcessType()
						? AssessmentType.SELF_ASSESSMENT.getType()
						: AssessmentType.SUPERIOR_SCORE.getType();

1644 1645 1646 1647 1648
						
				if (Double.valueOf(a.getScore()) > maxScore) {
					throw new CustomException("评分值不能大于最高分");
				}
						
tangzhaoqian committed
1649
				if (a.getAppraisalIndicatorsId() != null) {
1650 1651 1652 1653 1654 1655
					JxglAppraisalIndicatorsAssessment.builder().appraisalIndicatorsId(a.getAppraisalIndicatorsId())
							.assessorId(userBean.getEmpNum()).assessorName(userBean.getUserInfo().getName())
							.score(a.getScore()).remarks(a.getRemarks()).type(type).build().insert();

				} else {
					JxglAppraisalAssessment.builder().appraisalId(a.getAppraisalId()).assessorId(userBean.getEmpNum())
1656
							.assessorName(userBean.getUserInfo().getName()).comprehensiveScore(Double.valueOf(a.getScore()))
1657 1658
							.remarks(a.getRemarks()).type(type).level(a.getLevel()).build().insert();

1659
					hasAppraisalAssessment = true;
tangzhaoqian committed
1660
				}
1661

1662 1663 1664 1665 1666
			};
			
			if (!hasAppraisalAssessment) {
				throw new CustomException("必须填写综合评分");
			}
tangzhaoqian committed
1667

1668 1669 1670 1671 1672 1673
			// 修改 状态
			JxglProcessNode.builder().sts(ProcessNodeSts.EXECUTED.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));

1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686
			if (ProcessType.SELF_ASSESSMENT.getType() == processNode.getProcessType()) {
				JxglProcessNode.builder().sts(ProcessNodeSts.IN_EXECUTION.getType()).build()
				.update(new UpdateWrapper<JxglProcessNode>().lambda()
						.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getProcessType, ProcessType.SUPERIOR_SCORE.getType()));
				
				jxglAppraisalMapper.updateById(JxglAppraisal.builder().id(appraisal.getId())
							.sts(AppraisalSts.SUPERIOR_SCORE.getType()).build());
				
			}else if(ProcessType.SUPERIOR_SCORE.getType() == processNode.getProcessType()) {
				
				JxglPerformanceAppraisal pA = jxglPerformanceAppraisalMapper
						.selectById(appraisal.getPerformanceAppraisalId());
1687

1688
				if (pA != null && pA.getSts() > PerformanceAppraisalSts.PERFORMANCE_SCORE.getType()) {
1689

1690 1691 1692 1693 1694
					JxglProcessNode.builder().sts(ProcessNodeSts.IN_EXECUTION.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getProcessType, ProcessType.RESULT_VERIFICATION.getType()));
					
1695
					jxglAppraisalMapper.updateById(JxglAppraisal.builder().id(appraisal.getId())
1696 1697
								.sts(AppraisalSts.RESULT_VERIFICATION.getType()).build());
					
1698
				}
1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717
				
				// 算 总评分 ---- 自评权重*自评分 + 上级评分权重*上级评分 = 总评分
				List<JxglProcessNode> listProcessNode = jxglProcessNodeMapper.selectList(new QueryWrapper<JxglProcessNode>().lambda()
						.select(JxglProcessNode::getWeight,JxglProcessNode::getProcessType)
						.orderByAsc(JxglProcessNode::getProcessType)
						.in(JxglProcessNode::getProcessType, ProcessType.SELF_ASSESSMENT.getType(),ProcessType.SUPERIOR_SCORE.getType()));
			
				List<JxglAppraisalAssessment> listAppraisalAssessment = jxglAppraisalAssessmentMapper.selectList(new QueryWrapper<JxglAppraisalAssessment>().lambda()
						.select(JxglAppraisalAssessment::getType,JxglAppraisalAssessment::getComprehensiveScore)
						.orderByAsc(JxglAppraisalAssessment::getType)
						);
				Double selfAssessment = 0D;
				Double superiorAssessment = 0D;
				
				
				Integer aWeights = 0;
				Integer bWeights = 0;
				Double total = 0D;
				String level = null;
tangzhaoqian committed
1718
				
tangzhaoqian committed
1719
				if (CollectionUtil.isNotEmpty(listProcessNode)) {
1720 1721 1722 1723 1724
					aWeights = listProcessNode.stream().filter(p -> p.getProcessType() == ProcessType.SELF_ASSESSMENT.getType()).map(JxglProcessNode::getWeight).findFirst().orElse(null);
					bWeights = listProcessNode.stream().filter(p -> p.getProcessType() == ProcessType.SUPERIOR_SCORE.getType()).map(JxglProcessNode::getWeight).findFirst().orElse(null);
					
				}
				
tangzhaoqian committed
1725
				if (CollectionUtil.isNotEmpty(listAppraisalAssessment)) {
1726 1727 1728 1729 1730 1731
					selfAssessment = listAppraisalAssessment.stream().filter(a -> a.getType() == AssessmentType.SELF_ASSESSMENT.getType()).map(JxglAppraisalAssessment::getComprehensiveScore).findFirst().orElse(null) ;
					superiorAssessment = listAppraisalAssessment.stream().filter(a -> a.getType() == AssessmentType.SUPERIOR_SCORE.getType()).map(JxglAppraisalAssessment::getComprehensiveScore).findFirst().orElse(null);
				
				}
				
				if (selfAssessment != null && superiorAssessment != null) {
tangzhaoqian committed
1732 1733 1734 1735 1736 1737 1738
					Integer min = 0;
					Integer max = 0;
					
//					System.out.println(aWeights);
//					System.out.println(selfAssessment);
//					System.out.println(bWeights);
//					System.out.println(superiorAssessment);
1739 1740 1741 1742
					total = aWeights*0.01*selfAssessment + bWeights*0.01*superiorAssessment;
					
					List<JxglPerformanceRating> listPR = bS.getPerformanceRatings();
					for (JxglPerformanceRating pR : listPR) {
tangzhaoqian committed
1743 1744
						min = min > pR.getSectionMinScore() ? pR.getSectionMinScore() : min;
						max = max < pR.getSectionMaxScore() ? pR.getSectionMaxScore() : max;
1745 1746
						level = pR.getSectionMaxScore() <= total && pR.getSectionMinScore() < total ? pR.getName() : null;
					}
tangzhaoqian committed
1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759
					if (level == null) {
						for (JxglPerformanceRating pR : listPR) {
							if (total < min && pR.getSectionMinScore().equals(min)) {
								level = pR.getName();
								break;
							}
							if (total > max && pR.getSectionMaxScore().equals(max)) {
								level = pR.getName();
								break;
							}
						}
					}
					
1760 1761 1762 1763 1764 1765 1766 1767
					
					// 更新 考核-总分 等级
					jxglAppraisalMapper.updateById(JxglAppraisal.builder().id(appraisal.getId())
							.total(total).level(level).build());
				}else {
					throw new CustomException("评分数据存在异常");
				}
				
tangzhaoqian committed
1768
			}
1769
			
tangzhaoqian committed
1770 1771 1772 1773
			JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(userBean.getEmpNum());
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
1774 1775 1776
			appraisalLog.setType(ProcessType.SELF_ASSESSMENT.getType() == processNode.getProcessType()
					? AppraisalLogType.SELF_ASSESSMENT.getType()
					: AppraisalLogType.SUPERIOR_SCORE.getType());
tangzhaoqian committed
1777
			appraisalLog.insert();
1778 1779

		} else {
tangzhaoqian committed
1780 1781 1782 1783 1784
			return ResultUtil.error("流程状态异常");
		}

		return ResultUtil.success();
	}
1785

tangzhaoqian committed
1786 1787 1788 1789 1790 1791
	/**
	 * 结果确认-确认
	 */
	@PostMapping(value = "/result_verification")
	@ApiOperation(value = "23.结果确认-确认", httpMethod = "POST", notes = "结果确认-确认")
	@ApiOperationSupport(order = 23)
1792 1793 1794 1795 1796 1797 1798
	public Result<Object> resultVerification(@CurrentUser UserBean userBean, @RequestParam Integer id) {

		Integer count = jxglAppraisalMapper.selectCount(new QueryWrapper<JxglAppraisal>().lambda()
				.eq(JxglAppraisal::getId, id).in(JxglAppraisal::getSts, AppraisalSts.ASSESSMENT_COMPLETE.getType(),
						AppraisalSts.TERMINATION_ASSESSMENT.getType(), AppraisalSts.PERFORMANCE_ARCHIVE.getType()));

		if (count > 0) {
tangzhaoqian committed
1799 1800
			return ResultUtil.error("考核已结束");
		}
1801 1802 1803 1804

		JxglAppraisal appraisal = jxglAppraisalMapper.selectOne(
				new QueryWrapper<JxglAppraisal>().lambda().eq(JxglAppraisal::getId, id).select(JxglAppraisal::getId));

tangzhaoqian committed
1805
		if (appraisal == null) {
1806
			return ResultUtil.error("考核不存在");
tangzhaoqian committed
1807
		}
1808 1809 1810 1811

		JxglProcessNode processNode = jxglProcessNodeMapper.selectOne(
				new QueryWrapper<JxglProcessNode>().lambda().eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));
tangzhaoqian committed
1812 1813 1814
		if (processNode == null) {
			return ResultUtil.error("流程不存在");
		}
1815

tangzhaoqian committed
1816
		if (ProcessType.RESULT_VERIFICATION.getType() == processNode.getProcessType()) {
1817

tangzhaoqian committed
1818
			if (!userBean.getEmpNum().equals(processNode.getExecutorId())) {
1819
				return ResultUtil.error("无权限操作该流程");
tangzhaoqian committed
1820
			}
1821 1822 1823 1824 1825 1826 1827

			// 修改 状态
			JxglProcessNode.builder().sts(ProcessNodeSts.EXECUTED.getType()).build()
					.update(new UpdateWrapper<JxglProcessNode>().lambda()
							.eq(JxglProcessNode::getAppraisalId, appraisal.getId())
							.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));

1828
			jxglAppraisalMapper.updateById(JxglAppraisal.builder().id(id).sts(AppraisalSts.ASSESSMENT_COMPLETE.getType()).build());
1829

tangzhaoqian committed
1830 1831 1832 1833 1834 1835
			JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(userBean.getEmpNum());
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
			appraisalLog.setType(AppraisalLogType.RESULT_VERIFICATION.getType());
			appraisalLog.insert();
1836 1837

		} else {
tangzhaoqian committed
1838 1839 1840 1841 1842
			return ResultUtil.error("流程状态异常");
		}

		return ResultUtil.success();
	}
1843

tangzhaoqian committed
1844 1845 1846 1847 1848 1849
	/**
	 * 结果确认-改分
	 */
	@PostMapping(value = "/change_score")
	@ApiOperation(value = "24.结果确认-改分", httpMethod = "POST", notes = "结果确认-改分")
	@ApiOperationSupport(order = 24)
1850
	@Log(title = "绩效管理-结果确认-改分", businessType = BusinessType.UPDATE)
1851 1852 1853
	public Result<Object> changeScore(@CurrentUser UserBean userBean,
			@Validated @RequestBody AppraisalAssessment appraisalAssessment) {

tangzhaoqian committed
1854
		Integer count2 = jxglAppraisalMapper.selectCount(new QueryWrapper<JxglAppraisal>().lambda()
1855 1856
				.eq(JxglAppraisal::getId, appraisalAssessment.getAppraisalId()).in(JxglAppraisal::getSts,
						AppraisalSts.ASSESSMENT_COMPLETE.getType(), AppraisalSts.TERMINATION_ASSESSMENT.getType(),
tangzhaoqian committed
1857
						AppraisalSts.PERFORMANCE_ARCHIVE.getType()));
1858

tangzhaoqian committed
1859 1860 1861
		if (count2 > 0) {
			return ResultUtil.error("考核已结束");
		}
1862

tangzhaoqian committed
1863
		JxglAppraisal appraisal = jxglAppraisalMapper.selectOne(new QueryWrapper<JxglAppraisal>().lambda()
1864 1865
				.eq(JxglAppraisal::getId, appraisalAssessment.getAppraisalId()).select(JxglAppraisal::getId));

tangzhaoqian committed
1866
		if (appraisal == null) {
1867
			return ResultUtil.error("考核不存在");
tangzhaoqian committed
1868
		}
1869 1870 1871 1872

		JxglProcessNode processNode = jxglProcessNodeMapper.selectOne(
				new QueryWrapper<JxglProcessNode>().lambda().eq(JxglProcessNode::getAppraisalId, appraisal.getId())
						.eq(JxglProcessNode::getSts, ProcessNodeSts.IN_EXECUTION.getType()));
tangzhaoqian committed
1873 1874 1875
		if (processNode == null) {
			return ResultUtil.error("流程不存在");
		}
1876 1877 1878 1879 1880 1881 1882
		
		JxglBasicSetting bS = jxglService.selectAT(userBean.getOrgCode());

		Integer maxScore = bS.getMaxScore();
		if (Double.valueOf(appraisalAssessment.getScore()) > maxScore) {
			throw new CustomException("评分值不能大于最高分");
		}
1883

tangzhaoqian committed
1884
		if (ProcessType.RESULT_VERIFICATION.getType() == processNode.getProcessType()) {
1885

tangzhaoqian committed
1886
			if (!userBean.getEmpNum().equals(processNode.getExecutorId())) {
1887
				return ResultUtil.error("无权限操作该流程");
tangzhaoqian committed
1888
			}
1889 1890 1891 1892
			
			// 更新 考核-总分 等级
			jxglAppraisalMapper.updateById(JxglAppraisal.builder().id(appraisal.getId())
					.total(Double.valueOf(appraisalAssessment.getScore())).level(appraisalAssessment.getLevel()).build());
1893

tangzhaoqian committed
1894 1895 1896 1897 1898 1899 1900
			JxglAppraisalLog appraisalLog = JxglAppraisalLog.builder().build();
			appraisalLog.setRemarks(appraisalAssessment.getRemarks());
			appraisalLog.setAppraisalId(appraisal.getId());
			appraisalLog.setExecutorId(userBean.getEmpNum());
			appraisalLog.setExecutorName(userBean.getUserInfo().getName());
			appraisalLog.setType(AppraisalLogType.UPDATE_SCORE.getType());
			appraisalLog.insert();
1901 1902

		} else {
tangzhaoqian committed
1903 1904 1905 1906 1907
			return ResultUtil.error("流程状态异常");
		}

		return ResultUtil.success();
	}
1908

tangzhaoqian committed
1909 1910 1911 1912 1913 1914
	/**
	 * 查询-我的绩效-员工绩效
	 */
	@PostMapping(value = "/selects_my_emp_performance")
	@ApiOperation(value = "25.查询-我的绩效-员工绩效", httpMethod = "POST", notes = "查询-我的绩效-员工绩效")
	@ApiOperationSupport(order = 25)
1915
	@Log(title = "绩效管理-查询-我的绩效-员工绩效")
1916
	public Result<Object> selectsMEP(@CurrentUser UserBean userBean, @RequestBody EmpPerformanceQuery query) {
tangzhaoqian committed
1917 1918
		Integer orgCode = userBean.getOrgCode();
		Integer empNum = userBean.getEmpNum();
1919
		IPage<JxglAppraisal> page = new Page<JxglAppraisal>(query.getCurrentPage(), query.getTotalPage());
tangzhaoqian committed
1920
		query.setOrgCode(orgCode);
1921

1922 1923 1924 1925 1926
		List<ZzglBmgwM> listBM = zzglBmgwMMapper.selectList(new QueryWrapper<ZzglBmgwM>().lambda()
				.select(ZzglBmgwM::getId)
				.eq(ZzglBmgwM::getOrgCode, userBean.getOrgCode())
				.eq(ZzglBmgwM::getLeader, empNum));
		System.out.println("listBM-----"+ listBM);
tangzhaoqian committed
1927 1928 1929 1930
		ZzglBmgwM ZzglBmgwM = CollUtil.getFirst(listBM);
		if (ZzglBmgwM == null) {
			return ResultUtil.success();
		}
1931

tangzhaoqian committed
1932
		List<YgglMainEmp> users = zzglBmgwMService.selectOtherlistent(orgCode, ZzglBmgwM.getId());
1933
		List<Integer> empNums = CollUtil.toList();
tangzhaoqian committed
1934
		if (CollectionUtil.isNotEmpty(empNums)) {
tangzhaoqian committed
1935 1936
			empNums = users.stream().map(YgglMainEmp::getEmpNum).collect(Collectors.toList());
		}
1937 1938 1939
		
		if (query.getBmId() != null) {
			List<YgglMainEmp> usersQuery = zzglBmgwMService.selectOtherlistent(orgCode, query.getBmId());
tangzhaoqian committed
1940
			if (CollectionUtil.isNotEmpty(empNums)) {
1941 1942 1943 1944 1945 1946 1947
				List<Integer> empNumsQuery = usersQuery.stream().map(YgglMainEmp::getEmpNum).collect(Collectors.toList());
				empNums = empNums.stream().filter(e -> empNumsQuery.contains(e)).collect(Collectors.toList());
			}else {
				return ResultUtil.data(null);
			}
		}
		
tangzhaoqian committed
1948
		if (CollectionUtil.isNotEmpty(empNums)) {
1949 1950 1951
			return ResultUtil.data(null);
		}
		
tangzhaoqian committed
1952 1953
		query.setEmpNums(empNums);
		IPage<JxglAppraisal> pageA = jxglAppraisalMapper.selectMyEmpByQuery(page, query);
1954

tangzhaoqian committed
1955 1956
		List<JxglAppraisal> listA = pageA.getRecords();

1957 1958
		return ResultUtil.data(pageA, listA);

tangzhaoqian committed
1959
	}
1960
}