package com.kingdee.eas.custom.performancenew.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.grapecity.documents.excel.F; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.dao.ormapping.ObjectUuidPK; import com.kingdee.bos.metadata.entity.*; import com.kingdee.bos.metadata.query.util.CompareType; import com.kingdee.bos.sql.ParserException; import com.kingdee.bos.util.BOSUuid; import com.kingdee.eas.basedata.org.AdminOrgUnitFactory; import com.kingdee.eas.basedata.org.AdminOrgUnitInfo; import com.kingdee.eas.basedata.org.IAdminOrgUnit; import com.kingdee.eas.basedata.person.PersonInfo; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.custom.performancenew.*; import com.kingdee.eas.custom.performancenew.app.orderStatucEnum; import com.kingdee.eas.custom.performancenew.app.periodStatusEnum; import com.kingdee.eas.custom.performancenew.app.scoreEnum; import com.kingdee.eas.framework.CoreBaseInfo; import com.kingdee.eas.hr.ats.AtsUtil; import com.kingdee.eas.util.app.ContextUtil; 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.handler.EditHandler; import com.kingdee.util.StringUtils; import org.springframework.ui.ModelMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Array; import java.util.Collections; import java.util.Comparator; import java.util.Map; /** * @author qingwu * @date 2024/4/11 * @apiNote 周期季度 普通表单 (专员) */ public class ExamineZQJDEditHandler extends EditHandler { private Context ctx = SHRContext.getInstance().getContext(); /** * customDelete 编辑表格删除 * * @param request * @param response * @param modelMap * @return * @throws SHRWebException */ public void customDeleteAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException, EASBizException { //获取删除ID String idArray = request.getParameter("idArray"); IExamineGradePersonEntry iExamineGradePersonEntry = ExamineGradePersonEntryFactory.getLocalInstance(ctx); FilterInfo filterInfo = new FilterInfo(); filterInfo.getFilterItems().add(new FilterItemInfo("id", AtsUtil.toSet(idArray), CompareType.INCLUDE)); iExamineGradePersonEntry.delete(filterInfo); } /** * 创建页面时 初始化周期解除 * * @param request * @param response * @param modelMap * @return * @throws SHRWebException */ @Override protected CoreBaseInfo createNewModel(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { ExamineGradePersonInfo examineGradePersonInfo = (ExamineGradePersonInfo) super.createNewModel(request, response, modelMap); examineGradePersonInfo.setPeriodStatus(periodStatusEnum.periodRelieve); return examineGradePersonInfo; } @Override public String saveAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { if (request.getParameter("saveType").equals("save")) { return super.saveAction(request, response, modelMap); } try { ExamineGradePersonInfo model = (ExamineGradePersonInfo) request.getAttribute("dynamic_model"); //获取保存前的数据 String beforeSave = request.getParameter("beforeSave"); IExamineGradePerson iExamineGradePerson = ExamineGradePersonFactory.getLocalInstance(ctx); IExamineGradePersonEntry iExamineGradePersonEntry = ExamineGradePersonEntryFactory.getLocalInstance(ctx); if (beforeSave != null) { JSONArray jsonArray = JSONObject.parseArray(beforeSave); if (jsonArray.size() > 0) { //保存前数据 ExamineGradePersonEntryCollection upEentrys = new ExamineGradePersonEntryCollection(); for (int i = 0; i < jsonArray.size(); i++) { //拿到保存前的数据去数据库查询 JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(i).toString()); ExamineGradePersonEntryInfo examineGradePersonEntryInfo = iExamineGradePersonEntry.getExamineGradePersonEntryInfo(new ObjectUuidPK(jsonObject.get("id").toString())); upEentrys.add(examineGradePersonEntryInfo); } //保存后数据 ExamineGradePersonInfo examineGradePersonInfo = (ExamineGradePersonInfo) model; ExamineGradePersonEntryCollection pgEntrys = examineGradePersonInfo.getEntrys(); //循环判断删除那一列被修改过 for (int i = 0; i < upEentrys.size(); i++) { ExamineGradePersonEntryInfo upExamineGradePersonEntryInfo = upEentrys.get(i); for (int j = 0; j < pgEntrys.size(); j++) { SelectorItemCollection sic = new SelectorItemCollection(); ExamineGradePersonEntryInfo pgExamineGradePersonEntryInfo = pgEntrys.get(j); if (upExamineGradePersonEntryInfo.getId() == null) { pgExamineGradePersonEntryInfo.setParent(examineGradePersonInfo); iExamineGradePersonEntry.save(pgExamineGradePersonEntryInfo); } //判断组织是否被更改 if (!upExamineGradePersonEntryInfo.getId().equals(pgExamineGradePersonEntryInfo.getId()) && upExamineGradePersonEntryInfo.getAdminOrg().getId().equals(pgExamineGradePersonEntryInfo.getAdminOrg().getId())) { sic.add("adminOrg"); } //判断考核人是否被更改 if (!upExamineGradePersonEntryInfo.getAuditor().getId().equals(pgExamineGradePersonEntryInfo.getAuditor().getId())) { sic.add("auditor"); } //判断评分人是否被更改 if (!upExamineGradePersonEntryInfo.getScorer().getId().equals(pgExamineGradePersonEntryInfo.getScorer().getId())) { sic.add("scorer"); } //判断计算得分是否被更改 if (upExamineGradePersonEntryInfo.getScore() != pgExamineGradePersonEntryInfo.getScore()) { sic.add("score"); } //判断领导计算得分是否被更改 if (upExamineGradePersonEntryInfo.getScoreLeader() != pgExamineGradePersonEntryInfo.getScoreLeader()) { sic.add("scoreLeader"); } //判断领导计算得分是否被更改 if (upExamineGradePersonEntryInfo.getIndex() != pgExamineGradePersonEntryInfo.getIndex()) { sic.add("index"); } //if ( // upExamineGradePersonEntryInfo.getScorer().getId().equals(pgExamineGradePersonEntryInfo.getScorer().getId()) && // upExamineGradePersonEntryInfo.getScore() == pgExamineGradePersonEntryInfo.getScore() && // upExamineGradePersonEntryInfo.getScoreLeader() == pgExamineGradePersonEntryInfo.getScore() && // upExamineGradePersonEntryInfo.getIndex() == pgExamineGradePersonEntryInfo.getIndex() && // upExamineGradePersonEntryInfo.getRemark() == pgExamineGradePersonEntryInfo.getRemark() //) { // //这里是没有被修改的数据 // //pgEntrys.remove(pgExamineGradePersonEntryInfo); // continue; //} else { // //修改过的数据 // pgExamineGradePersonEntryInfo.setParent(examineGradePersonInfo); // iExamineGradePersonEntry.save(pgExamineGradePersonEntryInfo); //} } } } else { //保存后数据 ExamineGradePersonInfo examineGradePersonInfo = (ExamineGradePersonInfo) model; ExamineGradePersonEntryCollection pgEntrys = examineGradePersonInfo.getEntrys(); for (int j = 0; j < pgEntrys.size(); j++) { ExamineGradePersonEntryInfo pgExamineGradePersonEntryInfo = pgEntrys.get(j); //修改过的数据 pgExamineGradePersonEntryInfo.setParent(examineGradePersonInfo); iExamineGradePersonEntry.save(pgExamineGradePersonEntryInfo); } } } } catch (BOSException e) { e.printStackTrace(); throw new RuntimeException(e); } catch (EASBizException e) { throw new RuntimeException(e); } return null; } /** * 锁定周期 * * @param request * @param response * @param modelMap */ public void periodLockAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, EASBizException, ShrWebBizException { try { String billId = request.getParameter("billId"); ExamineGradePersonFactory.getLocalInstance(ctx).periodLock(billId); } catch (BOSException e) { throw new ShrWebBizException(e.getMessage()); } } /** * 解除周期 * * @param request * @param response * @param modelMap */ public void periodUnlockAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, EASBizException, ShrWebBizException { try { String billId = request.getParameter("billId"); ExamineGradePersonFactory.getLocalInstance(ctx).periodUnlock(billId); } catch (BOSException e) { throw new ShrWebBizException(e.getMessage()); } } /** * 启动排序 */ public void startOrderAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws ShrWebBizException { try { String billId = request.getParameter("billId"); ExamineGradePersonEntryCollection entrys = getCurrentPersonEqualsScore(billId, null); for (int i = 0; entrys != null && i < entrys.size(); i++) { ExamineGradePersonEntryInfo entry = entrys.get(i); String depName = entry.getAdminOrg().getName(); if (entry.getPerformanceScoreOrg() == null) { throw new ShrWebBizException("部门[" + depName + "] 没有维护组织绩效得分!"); } } ExamineGradePersonFactory.getLocalInstance(ctx).startOrder(billId); } catch (ParserException e) { throw new ShrWebBizException(e); } catch (BOSException e) { throw new ShrWebBizException(e); } catch (ShrWebBizException e) { throw new ShrWebBizException(e); } } /** * 获取当前登录人等于评分人的数据 * * @param billID * @return */ public ExamineGradePersonEntryCollection getCurrentPersonEqualsScore(String billID, String adminID) throws ParserException, BOSException { SelectorItemCollection sic = new SelectorItemCollection(); sic.add("*"); sic.add("adminOrg.*"); sic.add("performanceScoreOrg.*"); FilterInfo filterInfo = new FilterInfo(); FilterItemCollection filterItems = filterInfo.getFilterItems(); filterItems.add(new FilterItemInfo("parent.id", billID)); if (!StringUtils.isEmpty(adminID)) { filterItems.add(new FilterItemInfo("adminOrg.id", adminID)); } SorterItemCollection sorterItemCollection = new SorterItemCollection("adminOrg.id,index"); EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, sorterItemCollection); IExamineGradePersonEntry iExamineGradePersonEntry = ExamineGradePersonEntryFactory.getLocalInstance(ctx); return iExamineGradePersonEntry.getExamineGradePersonEntryCollection(entityViewInfo); } /** * 获取值 表单 编辑表格 排序 * * @param request * @param modelID 单据id * @return * @throws SHRWebException */ @Override protected CoreBaseInfo getValue(HttpServletRequest request, String modelID) throws SHRWebException { ExamineGradePersonInfo examineGradePersonInfo = (ExamineGradePersonInfo) super.getValue(request, modelID); ExamineGradePersonEntryCollection entrys = examineGradePersonInfo.getEntrys(); entrys.sort("adminOrg.id,index"); return examineGradePersonInfo; } }