package com.kingdee.eas.hr.perf.handler;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.kingdee.bos.BOSException;
import com.kingdee.bos.Context;
import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
import com.kingdee.bos.metadata.entity.SelectorItemCollection;
import com.kingdee.bos.metadata.entity.SelectorItemInfo;
import com.kingdee.bos.rabbitmq.guava.Lists;
import com.kingdee.bos.util.BOSUuid;
import com.kingdee.eas.common.EASBizException;
import com.kingdee.eas.framework.CoreBaseInfo;
import com.kingdee.eas.hr.perf.PerformProTeamCollection;
import com.kingdee.eas.hr.perf.PerformProTeamFactory;
import com.kingdee.eas.hr.perf.PersonPerformProCollection;
import com.kingdee.eas.hr.perf.PersonPerformProFactory;
import com.kingdee.eas.util.app.DbUtil;
import com.kingdee.jdbc.rowset.IRowSet;
import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody;
import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
import com.kingdee.shr.base.syssetting.context.SHRContext;
import com.kingdee.shr.base.syssetting.exception.SHRWebException;
import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
import com.kingdee.shr.compensation.util.CmpStrUtil;
import com.kingdee.shr.perfweb.app.base.evalplan.*;
import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
import com.kingdee.shr.perfweb.planexecute.handler.EvaresultAuditBillEditHandler;
import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ui.ModelMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.*;
/**
* @BelongsProject: dataImpExp820
* @BelongsPackage: com.kingdee.eas.hr.perf.handler
* @Author: lhbj
* @CreateTime: 2025-01-10 19:09
* @Description: TODO
* @Version: 1.0
*/
public class EvaresultAuditBillEditHandlerEx extends EvaresultAuditBillEditHandler {
private static Logger logger = LoggerFactory.getLogger(EvaresultAuditBillEditHandlerEx.class);
@Override
protected void beforeSubmit(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws SHRWebException {
super.beforeSubmit(request, response, model);
Context ctx = SHRContext.getInstance().getContext();
try {
IEvaResultSummaryAuditBill f = EvaResultSummaryAuditBillFactory.getLocalInstance(ctx);
SelectorItemCollection sel = new SelectorItemCollection();
sel.add(new SelectorItemInfo("id"));
sel.add(new SelectorItemInfo("entrys.id"));
sel.add(new SelectorItemInfo("entrys.evaResult.id"));
EvaResultSummaryAuditBillInfo fmodel = (EvaResultSummaryAuditBillInfo) model;
EvaResultSummaryAuditBillInfo finfo = f.getEvaResultSummaryAuditBillInfo(new ObjectUuidPK(fmodel.getId()), sel);
if (null != finfo) {
EvaResultSummaryAuditBillEntryCollection entryCollection = finfo.getEntrys();
if (null != entryCollection) {
for (int i = 0; i < entryCollection.size(); i++) {
EvaResultSummaryAuditBillEntryInfo entry = entryCollection.get(i);
EvaResultSummaryInfo resultSummaryInfo = entry.getEvaResult();
if (null != resultSummaryInfo) {
BOSUuid id = resultSummaryInfo.getId();
if (null != id) {
String selPer = "select fid from T_EVA_EvaResultSummary where CfauditPerCoefficient=null and fid=?";
IRowSet rs = DbUtil.executeQuery(ctx, selPer, new String[]{id.toString()});
while (rs.next()) {
String upd = "update T_EVA_EvaResultSummary set CfauditPerCoefficient=CfperCoefficient where fid=?";
DbUtil.execute(ctx, upd, new String[]{id.toString()});
}
}
}
}
}
}
} catch (SQLException | BOSException | EASBizException throwables) {
throwables.printStackTrace();
}
}
/**
* [{"evaResult.pnumber":"0000381","evaResult.pname":"谭梓傲","evaResult.positionName":"物资岗","evaResult.evaObj.perfFile.adminOrgUnit.company.name":"湖南红太阳光电科技有限公司","evaResult.evaObj.perfFile.adminOrgUnit.department.name":"综合管理","evaResult.sumScore":"","evaResult.gradeLevel":"","evaResult.auditSumScore":"86.00","evaResult.auditGradeLevel":"C","evaResult.auditReason":"
正态分布更新结果
","evaResult.reviseSumScore":"86.00","evaResult.reviseGradeLevel":"C","evaResult.reviseReason":"正态分布更新结果","id":"KQukJy27Skiy1rPPghjkJBdK16Q=","evaResult.id":"Ka7FkRQuTAaPlTaLvJSD3IESG3Q=","bill.id":"m85zTeeDSmaAU2QLbYWMUoZLdW4=","evaResult.evaObj.id":"gjX3giS2RKurkJVjPhnwa4GI54s=","reviseGradeLevelSelect":"[{\\"value\\":\\"S\\",\\"alias\\":\\"S\\"},{\\"value\\":\\"A\\",\\"alias\\":\\"A\\"},{\\"value\\":\\"B\\",\\"alias\\":\\"B\\"},{\\"value\\":\\"C\\",\\"alias\\":\\"C\\"},{\\"value\\":\\"D\\",\\"alias\\":\\"D\\"}]","levelScoreKVInfo":"{\\n \\"90.00~100.00\\": \\"S\\",\\n \\"80.00~90.00\\": \\"A\\",\\n \\"70.00~80.00\\": \\"B\\",\\n \\"60.00~70.00\\": \\"C\\",\\n \\"0.00~60.00\\": \\"D\\"\\n}","scoreLowLimit":"0","scoreUpLimit":"100","evaResult.period.id":"q6myAjHaQLK+wnczfdLCJEUaiOU=","evaResult.reviseFlag":"是","evaResult.auditFlag":"否"}]
*
* @param request
* @param response
* @param modelMap
* @throws SHRWebException
*/
public void verifyBeforeSubmitAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
String entryData = request.getParameter("entryData");
BatchMessageTipsHeader header = new BatchMessageTipsHeader();
boolean isExists = true;
if (!com.kingdee.util.StringUtils.isEmpty(entryData)) {
String period = request.getParameter("period");
String planId = request.getParameter("planId");
String billId = request.getParameter("billId");
String ids = request.getParameter("ids");
List rowList = Lists.newArrayList();
for (String id : billId.split(",")) {
rowList.add(id);
}
header = this.verifyToDep(request, response, modelMap);
if (header.getFailureCount() <= 0 && header.getSuccessCount() > 0) {
header = this.beforeAuditEvaResutProject(ids, period, planId, entryData);
}
header.setBillId(billId.toString());
}
this.writeSuccessData(header);
}
protected static Set getErrorIdsByBatchMessageTip(BatchMessageTipsHeader batchMessageTipsHeader) {
Set errorIds = new HashSet();
Iterator var2 = batchMessageTipsHeader.getResult().iterator();
while (var2.hasNext()) {
BatchMessageTipsBody body = (BatchMessageTipsBody) var2.next();
if (!body.isMuitTipsState()) {
errorIds.add(body.getId());
}
}
return errorIds;
}
protected static void addBatchMessageSuccessTips(Set ids, String message, BatchMessageTipsHeader batchMessageTipsHeader) {
Iterator var3 = ids.iterator();
while (var3.hasNext()) {
String id = (String) var3.next();
BatchMessageTipsBody body = new BatchMessageTipsBody();
body.setId(id);
body.setMuitTipsState(Boolean.TRUE);
body.setMuitTipsMessage(com.kingdee.util.StringUtils.isEmpty(message) ? SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATESUCCESS, SHRContext.getInstance().getContext()) : message);
batchMessageTipsHeader.addResult(body);
}
}
public BatchMessageTipsHeader verifyToDep(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
String entryData = request.getParameter("entryData");
BatchMessageTipsHeader header = new BatchMessageTipsHeader();
boolean isExists = true;
if (!com.kingdee.util.StringUtils.isEmpty(entryData)) {
int success = 0;
int fail = 0;
StringBuilder ids = new StringBuilder();
List allIdList = new ArrayList<>();
try {
Context ctx = SHRContext.getInstance().getContext();
//明细数据
JSONArray entryList = JSON.parseArray(entryData);
for (int i = 0; i < entryList.size(); i++) {
JSONObject object = entryList.getJSONObject(i);
BatchMessageTipsBody body = new BatchMessageTipsBody();
String id = object.getString("id");
boolean isSuccess = false;
String msg = "";
String pnumber = object.getString("evaResult.pnumber");
String pname = object.getString("evaResult.pname");
String positionName = object.getString("evaResult.positionName");
String evaResult = object.getString("evaResult.id");
//修改后等级
String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
if (StringUtils.isBlank(auditGradeLevel)) {
auditGradeLevel = object.getString("evaResult.gradeLevel");
}
body.setId(id);
ids.append(id).append(",");
allIdList.add(id);
//获取跨部门协作绩效等级
String sql = "select CFDEPGRADELEVEL from T_EVA_EvaResultSummary where fid = ?";
IRowSet rs = DbUtil.executeQuery(ctx, sql, new String[]{evaResult});
//当跨部门协作绩效等级为C、D等级的,当期员工绩效不得为高绩效(S、A等级)
if (rs.next()) {
//跨部门协作绩效等级
String depgradelevel = rs.getString("CFDEPGRADELEVEL");
if (StringUtils.isNotBlank(depgradelevel)) {
switch (depgradelevel) {
case "S":
;
case "A":
;
case "B":
isSuccess = true;
msg = "校验通过";
success += 1;
break;
case "C":
case "D":
if ("S".equals(auditGradeLevel) || "A".equals(auditGradeLevel)) {
isSuccess = false;
msg = "当跨部门协作绩效等级为C、D等级的,当期员工绩效不得为高绩效(S、A等级)";
fail += 1;
} else {
isSuccess = true;
msg = "校验通过";
success += 1;
}
break;
}
} else {
msg = "没有当跨部门协作绩效等级,请先检查跨部门协作绩效等级";
isSuccess = true;
success += 1;
}
} else {
msg = "操作失败,数据异常";
isSuccess = false;
fail += 1;
}
body.setMuitTipsState(isSuccess);
body.setMuitTipsMessage(msg);
List