Переглянути джерело

绩效导入结果增加获取用户,导入功能修改为更新并添加数据

彭佳杰 2 днів тому
батько
коміт
10d0186d73

+ 27 - 10
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/helper/KpiImportUtils.java

@@ -1,16 +1,21 @@
 package nckd.jxccl.opmc.pm.helper;
 
+import kd.bos.context.RequestContext;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.org.OrgUnitServiceHelper;
+import kd.bos.servicehelper.user.UserServiceHelper;
 import nckd.jxccl.base.common.utils.DateUtil;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -29,18 +34,18 @@ public class KpiImportUtils {
      * 查询去年绩效考核不合格员工
      * @return
      */
-    public static List<DynamicObject> yearUnqualifiedUser(){
+    public static List<DynamicObject> yearUnqualifiedUser() {
         //获取去年第一天
         LocalDateTime localDateTime = DateUtil.minusYears(DateUtil.now(), 1);
         localDateTime = DateUtil.beginOfYear(localDateTime);
         //去年年度绩效不合格员工
         QFilter qFilter = new QFilter("nckd_perfmanagerentry.nckd_appraisalresult.number", QCP.in, new String[]{"04", "10"});
-        qFilter.and("nckd_perfmanagerentry.nckd_appraisalyear",QCP.equals,localDateTime);
+        qFilter.and("nckd_perfmanagerentry.nckd_appraisalyear", QCP.equals, localDateTime);
         //查询考核周期获取年度绩效考核结果为 不合格 人员
         DynamicObjectCollection user = QueryServiceHelper.query("nckd_perfmanager", "nckd_person.id", qFilter.toArray());
         List<Long> userIds = user.stream().map(i -> i.getLong("nckd_person.id")).collect(Collectors.toList());
         QFilter userqFilter = new QFilter("employee", QCP.in, userIds);
-        userqFilter.and("posstatus.poststatecls.number",QCP.equals,"1010_S");
+        userqFilter.and("posstatus.poststatecls.number", QCP.equals, "1010_S");
         //最新任职经历
         DynamicObject[] empposorgrel = BusinessDataServiceHelper.load("hrpi_empposorgrel", "employee.empnumber", userqFilter.toArray());
         List<String> userNumber = Arrays.stream(empposorgrel).map(i -> i.getString("employee.empnumber")).collect(Collectors.toList());
@@ -48,14 +53,14 @@ public class KpiImportUtils {
         return Arrays.asList(bos_ser);
     }
 
-    public static List<DynamicObject> monthUnqualifiedUser(){
+    public static List<DynamicObject> monthUnqualifiedUser() {
         //查询月度考核不合格员工
         QFilter qFilter = new QFilter("status", QCP.equals, "C");
-        qFilter.and("enable",QCP.equals,"1");
-        qFilter.and("nckd_entryentity.nckd_examine_dimension.number",QCP.equals,"JT-00011");
-        qFilter.and("nckd_entryentity.nckd_result",QCP.in,new String[]{"视同不合格","不合格"});
+        qFilter.and("enable", QCP.equals, "1");
+        qFilter.and("nckd_entryentity.nckd_examine_dimension.number", QCP.equals, "JT-00011");
+        qFilter.and("nckd_entryentity.nckd_result", QCP.in, new String[]{"视同不合格", "不合格"});
         //绩效导入结果
-        DynamicObject[] result = BusinessDataServiceHelper.load("nckd_examinproject_result","nckd_user,nckd_importplan" , qFilter.toArray());
+        DynamicObject[] result = BusinessDataServiceHelper.load("nckd_examinproject_result", "nckd_user,nckd_importplan", qFilter.toArray());
         Map<Long, List<Integer>> userId_month = Arrays.stream(result)
                 .collect(Collectors.groupingBy(i -> i.getLong("nckd_user.id"),
                         Collectors.mapping(obj -> obj.getInt("nckd_month"), Collectors.toList())));
@@ -65,7 +70,7 @@ public class KpiImportUtils {
             List<Integer> integers = userId_month.get(userId);
             //校验连续三月
             boolean check = check(integers);
-            if(check){
+            if (check) {
                 objects.add(userId);
             }
         }
@@ -73,7 +78,7 @@ public class KpiImportUtils {
         return Arrays.asList(bos_ser);
     }
 
-    private static boolean check(List<Integer> months){
+    private static boolean check(List<Integer> months) {
         if (months == null || months.size() < 3) {
             return false;
         }
@@ -97,5 +102,17 @@ public class KpiImportUtils {
         return false;
     }
 
+    public static List<DynamicObject> querEmpposorgre(LocalDateTime date) {
+        long orgId = RequestContext.get().getOrgId();
+        List<Long> subOrgIds = OrgUnitServiceHelper.getAllSubordinateOrgs(1L, Collections.singletonList(orgId), true);
+        QFilter qFilter = new QFilter("adminorg", QCP.in, subOrgIds);
+        qFilter.and("isprimary", QCP.equals, true);
+        qFilter.and("posstatus.number", QCP.equals, "1010_S");
+        qFilter.and("startdate", QCP.less_equals, date);
+        qFilter.and("enddate", QCP.large_equals, date);
+        DynamicObject[] load = BusinessDataServiceHelper.load("hrpi_empposorgrel", "employee,adminorg,position", qFilter.toArray());
+        return Arrays.asList(load);
+    }
+
 
 }

+ 42 - 26
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/ExaminProjectResultListPlugin.java

@@ -5,62 +5,41 @@ import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.entity.LocaleString;
 import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
 import kd.bos.dataentity.metadata.dynamicobject.DynamicSimpleProperty;
-import kd.bos.dataentity.resource.ResManager;
-import kd.bos.dataentity.serialization.SerializationUtils;
-import kd.bos.entity.EntityMetadataCache;
-import kd.bos.entity.EntityType;
 import kd.bos.entity.MainEntityType;
 import kd.bos.entity.datamodel.ListField;
 import kd.bos.entity.datamodel.events.GetEntityTypeEventArgs;
-import kd.bos.entity.property.DateProp;
 import kd.bos.entity.property.TextProp;
 import kd.bos.exception.ErrorCode;
-import kd.bos.exception.KDBizException;
 import kd.bos.exception.KDException;
 import kd.bos.form.CloseCallBack;
 import kd.bos.form.FormShowParameter;
 import kd.bos.form.ShowType;
-import kd.bos.form.container.Container;
-import kd.bos.form.control.Control;
 import kd.bos.form.events.BeforeCreateListColumnsArgs;
 import kd.bos.form.events.BeforeCreateListDataProviderArgs;
 import kd.bos.form.events.BeforeDoOperationEventArgs;
 import kd.bos.form.events.ClosedCallBackEvent;
-import kd.bos.form.events.OnGetControlArgs;
 import kd.bos.form.operate.FormOperate;
-import kd.bos.list.DynamicTextListColumn;
 import kd.bos.list.IListColumn;
 import kd.bos.list.ListColumn;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
 import kd.bos.mvc.list.ListDataProvider;
-import kd.bos.mvc.list.ListView;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
-import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
-import kd.hr.hbp.common.cache.HRAppCache;
-import kd.hr.hbp.common.cache.IHRAppCache;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
 import nckd.jxccl.base.common.utils.DateTimeUtils;
-import nckd.jxccl.base.swc.helper.SWCHelper;
-import nckd.jxccl.opmc.pm.helper.PerfManagerHelper;
-import org.apache.commons.lang.exception.ExceptionUtils;
+import nckd.jxccl.base.common.utils.DateUtil;
+import nckd.jxccl.opmc.pm.helper.KpiImportUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.ParseException;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -89,9 +68,43 @@ public class ExaminProjectResultListPlugin extends AbstractListPlugin {
             fsp.setCustomParam("template", this.getView().getFormShowParameter().getCustomParam("template"));
             fsp.setCloseCallBack(new CloseCallBack(this, "importData"));
             this.getView().showForm(fsp);
+        }else if( StringUtils.equals(operateKey, "update") ){
+            FormShowParameter parentParameter = this.getView().getFormShowParameter();
+            Object customParam = parentParameter.getCustomParam("importplan");
+            DynamicObject importPlan = BusinessDataServiceHelper.loadSingle(customParam, "nckd_importplan");
+            Date year = importPlan.getDate("nckd_year");
+            Integer month = importPlan.getInt("nckd_month");
+            LocalDateTime modifiedDate = DateUtil.toLocalDateTime(year).withMonth(month);
+            List<DynamicObject> users = KpiImportUtils.querEmpposorgre(DateUtil.endOfMonth(modifiedDate));
+            createData(users);
         }
     }
 
+    private void createData(List<DynamicObject> users){
+        ArrayList<DynamicObject> saveData = new ArrayList<>();
+        DynamicObject importPlan = BusinessDataServiceHelper.loadSingle(this.getView().getFormShowParameter().getCustomParam("importplan"), "nckd_importplan");
+        List<String> userNumber = users.stream().map(i -> i.getString("employee.empnumber")).collect(Collectors.toList());
+        DynamicObject[] bos_ser = BusinessDataServiceHelper.load("bos_user", "id,number,name,entryentity.dpt,entryentity.ispartjob,entryentity.post", new QFilter[]{new QFilter("number", QCP.in, userNumber)});
+        for (DynamicObject user : bos_ser) {
+            DynamicObject newData = BusinessDataServiceHelper.newDynamicObject("nckd_examinproject_result");
+            newData.set("enable", "1");
+            newData.set("status", "A");
+            newData.set("nckd_importplan", importPlan);
+            DynamicObjectCollection entry = user.getDynamicObjectCollection("entryentity");
+            List<DynamicObject> collect = entry.stream().filter(i -> !i.getBoolean("ispartjob")).collect(Collectors.toList());
+            newData.set("group",collect.get(0).getLong("dpt.id"));
+            newData.set("nckd_user",user.getPkValue());
+            newData.set("nckd_org",collect.get(0).getLong("dpt.id"));
+            newData.set("nckd_postbase",collect.get(0).getLong("post.id"));
+            saveData.add(newData);
+        }
+        Object[] save = SaveServiceHelper.save(saveData.toArray(new DynamicObject[saveData.size()]));
+        if( ObjectUtils.isNotEmpty(save) ){
+            this.getView().showSuccessNotification("人员数据更新完毕!");
+        }
+        this.getView().invokeOperation("refresh");
+    }
+
     @Override
     public void closedCallBack(ClosedCallBackEvent e) {
         super.closedCallBack(e);
@@ -99,7 +112,10 @@ public class ExaminProjectResultListPlugin extends AbstractListPlugin {
         if (StringUtils.equals(actionId, "importData")) {
             Object returnData = e.getReturnData();
             if (ObjectUtils.isNotEmpty(returnData)) {
+                this.getView().showSuccessNotification("导入完毕");
                 this.getView().invokeOperation("refresh");
+            }else{
+                this.getView().showErrorNotification("导入失败,请联系系统管理员。");
             }
         }
 
@@ -299,7 +315,7 @@ public class ExaminProjectResultListPlugin extends AbstractListPlugin {
                 if (StringUtils.equalsAny(number, "JT-00001", "JT-00002", "JT-00003", "JT-00004", "JT-00005", "JT-00006", "JT-00007", "JT-00018")) {
                     continue;
                 }
-                DynamicSimpleProperty property = new DynamicSimpleProperty(ExaminProjectResultListPlugin.this.getItemPropKey(item), String.class, item.getString("name"));
+                DynamicSimpleProperty property = new DynamicSimpleProperty(ExaminProjectResultListPlugin.this.getItemPropKey(item), String.class, null);
                 dt.registerSimpleProperty(property);
             }
 

+ 87 - 0
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/ExaminprojectResultFormPlugin.java

@@ -0,0 +1,87 @@
+package nckd.jxccl.opmc.pm.plugin.form;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.field.BasedataEdit;
+import kd.bos.form.field.events.BeforeF7SelectEvent;
+import kd.bos.form.field.events.BeforeF7SelectListener;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import nckd.jxccl.base.common.utils.DateUtil;
+import nckd.jxccl.opmc.pm.helper.KpiImportUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.EventObject;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName: ExaminprojectResultFormPlugin
+ * @Description: 绩效导入结果表单插件
+ * @Author: PJJ
+ * @Date: 2026/1/15 下午2:30
+ * @Version: 1.0
+ */
+public class ExaminprojectResultFormPlugin extends AbstractFormPlugin  implements BeforeF7SelectListener {
+    @Override
+    public void afterCreateNewData(EventObject e) {
+        super.afterCreateNewData(e);
+        FormShowParameter parentParameter = this.getView().getParentView().getFormShowParameter();
+        Object customParam = parentParameter.getCustomParam("importplan");
+        DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(customParam, "nckd_importplan");
+        this.getModel().setValue("nckd_importplan",dynamicObject);
+    }
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.propertyChanged(e);
+        String name = e.getProperty().getName();
+        if( StringUtils.equals(name,"nckd_user") ){
+            Object changeData = e.getChangeSet()[0].getNewValue();
+            if(ObjectUtils.isNotEmpty(changeData)){
+                DynamicObject user = (DynamicObject) changeData;
+                DynamicObject userData = BusinessDataServiceHelper.loadSingle(user.getPkValue(), "bos_user");
+                DynamicObjectCollection dynamicObjectCollection = userData.getDynamicObjectCollection("entryentity");
+                List<DynamicObject> collect = dynamicObjectCollection.stream().filter(i -> !i.getBoolean("ispartjob")).collect(Collectors.toList());
+                this.getModel().setValue("nckd_org",collect.get(0).getDynamicObject("dpt"));
+                this.getModel().setValue("group",collect.get(0).getDynamicObject("dpt"));
+                this.getModel().setValue("nckd_postbase",collect.get(0).getDynamicObject("post"));
+            }else{
+                this.getModel().setValue("nckd_user",null);
+                this.getModel().setValue("nckd_org",null);
+                this.getModel().setValue("group",null);
+                this.getModel().setValue("nckd_postbase",null);
+            }
+        }
+    }
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        BasedataEdit user = this.getControl("nckd_user");
+        user.addBeforeF7SelectListener(this);
+    }
+
+    @Override
+    public void beforeF7Select(BeforeF7SelectEvent e) {
+        String name = e.getProperty().getName();
+        if( StringUtils.equals(name,"nckd_user") ){
+            FormShowParameter parentParameter = this.getView().getParentView().getFormShowParameter();
+            Object customParam = parentParameter.getCustomParam("importplan");
+            DynamicObject importPlan = BusinessDataServiceHelper.loadSingle(customParam, "nckd_importplan");
+            Date year = importPlan.getDate("nckd_year");
+            Integer month = importPlan.getInt("nckd_month");
+            LocalDateTime modifiedDate = DateUtil.toLocalDateTime(year).withMonth(month);
+            List<DynamicObject> users = KpiImportUtils.querEmpposorgre(DateUtil.endOfMonth(modifiedDate));
+            List<String> userNumber = users.stream().map(i -> i.getString("employee.number")).collect(Collectors.toList());
+            e.getCustomQFilters().add(new QFilter("number", QCP.in,userNumber));
+        }
+    }
+}

+ 163 - 72
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/ImportKPISelectFormPlugin.java

@@ -106,6 +106,7 @@ public class ImportKPISelectFormPlugin extends AbstractFormPlugin implements Upl
             case "btnok":
                 //回传数据
                 this.importData();
+
                 break;
             default:
                 break;
@@ -164,7 +165,7 @@ public class ImportKPISelectFormPlugin extends AbstractFormPlugin implements Upl
                 //校验导入模板
                 String templateMsg = checkExcelTemplate(dataHeadList, entry, dataHeadNumberList);
                 //校验数据必录
-                String DataMsg = checkExcelData(dataHeadList, dataRowList);
+                String DataMsg = checkExcelMustInputData(dataHeadList, dataRowList);
                 String errMsg = templateMsg + "\n" + DataMsg;
                 if (!StringUtils.isNotBlank(errMsg)) {
 //                    returnMap.put("dataHeadNumberList", dataHeadNumberList);
@@ -253,53 +254,27 @@ public class ImportKPISelectFormPlugin extends AbstractFormPlugin implements Upl
             }
 
         }
+        //添加更新逻辑
+        DynamicObject[] load = BusinessDataServiceHelper.load("nckd_examinproject_result", "nckd_user,nckd_rank_org,nckd_remark,nckd_cumulativeranking,nckd_rank_org,nckd_postbase,nckd_entryentity.nckd_examine_dimension,nckd_entryentity.nckd_result", new QFilter[]{new QFilter("nckd_importplan.id", QCP.equals, this.getView().getFormShowParameter().getCustomParam("importplan"))});
+        List<String> collect = Arrays.stream(load).map(i -> i.getString("nckd_user.number")).collect(Collectors.toList());
         //1为姓名 3 为组织 5为岗位 6为排名单位 17为备注 12 为部门累计平均排名
         ArrayList<DynamicObject> saveList = new ArrayList<>();
         for (Map<Integer, String> integerStringMap : dataRowList) {
-            DynamicObject newData = BusinessDataServiceHelper.newDynamicObject("nckd_examinproject_result");
-            //设置默认数据
-            newData.set("enable", "1");
-            newData.set("status", "A");
-            newData.set("nckd_importplan", importPlan);
-            //姓名
-            newData.set("nckd_user", userMap.get(integerStringMap.get(1)));
-            //行政组织
-            newData.set("nckd_org", deptMap.get(integerStringMap.get(3)));
-            newData.set("group", deptMap.get(integerStringMap.get(3)));
-            //岗位
-            newData.set("nckd_postbase", postMap.get(integerStringMap.get(5)));
-            //排名单位
-            newData.set("nckd_rank_org", integerStringMap.get(6));
-            //备注
-            newData.set("nckd_remark", integerStringMap.get(17));
-
-            //增加分录数据
-            DynamicObjectCollection entry = newData.getDynamicObjectCollection("nckd_entryentity");
-            for (Integer i : integerStringMap.keySet()) {
-                //除1为姓名 3 为组织 5为岗位 6为排名单位 17为备注 12 为部门累计平均排名外全部存入分录
-                if (i != 1 && i != 3 && i != 5 && i != 6 && i != 17) {
-                    DynamicObject entryRow = entry.addNew();
-                    entryRow.set("nckd_examine_dimension", examineDimensionMap.get(zeroExcelRow.get(i)));
-                    entryRow.set("nckd_result", integerStringMap.get(i));
-                }
-                //计算部门累计平均排名
-                if (i == 12) {
-                    //本次导入排名
-                    String rank = integerStringMap.get(11);
-                    //用户历史数据排名
-                    List<String> userHistory = userHistoryRank.get(integerStringMap.get(1));
-                    if (ObjectUtils.isNotEmpty(userHistory)) {
-                        //计算
-                        int sum = userHistory.stream().mapToInt(Integer::parseInt).sum();
-                        sum += Integer.parseInt(rank);
-                        int finalRank = sum / (userHistory.size() + 1);
-                        newData.set("nckd_cumulativeranking", finalRank);
+            String userNumber = integerStringMap.get(1);
+            for (DynamicObject billData : load) {
+                String string = billData.getString("nckd_user.number");
+                //先判断excel行和当前绩效导入结果数据是否同一条
+                if (StringUtils.equals(string, userNumber)) {
+                    //后判断为新增还是修改
+                    if (!collect.contains(userNumber)) {
+                        //添加数据
+//                        addResultData(saveList, integerStringMap, importPlan, examineDimensionMap, userMap, deptMap, postMap, zeroExcelRow, userHistoryRank);
                     } else {
-                        newData.set("nckd_cumulativeranking", Integer.parseInt(rank));
+                        //更新数据
+                        updateResultData(billData, saveList, integerStringMap, examineDimensionMap, zeroExcelRow, userHistoryRank);
                     }
                 }
             }
-            saveList.add(newData);
         }
         Object[] save = SaveServiceHelper.save(saveList.toArray(new DynamicObject[0]));
         if (ObjectUtils.isNotEmpty(save)) {
@@ -309,6 +284,117 @@ public class ImportKPISelectFormPlugin extends AbstractFormPlugin implements Upl
         }
     }
 
+    /**
+     * 添加绩效导入结果新数据
+     * @param saveList 保存用
+     * @param integerStringMap 表格行数据
+     * @param examineDimensionMap 考核维度基础资料
+     * @param zeroExcelRow 表头行
+     * @param userHistoryRank 历史排名
+     */
+    private void updateResultData(DynamicObject resultData,
+                                  ArrayList<DynamicObject> saveList,
+                                  Map<Integer, String> integerStringMap,
+                                  Map<String, DynamicObject> examineDimensionMap,
+                                  Map<Integer, String> zeroExcelRow,
+                                  HashMap<String, List<String>> userHistoryRank) {
+        //排名单位
+        resultData.set("nckd_rank_org", integerStringMap.get(6));
+        //备注
+        resultData.set("nckd_remark", integerStringMap.get(17));
+        DynamicObjectCollection entry = resultData.getDynamicObjectCollection("nckd_entryentity");
+        //清空数据
+        entry.clear();
+        //重新添加
+        addEntryData(resultData, entry, integerStringMap, examineDimensionMap, zeroExcelRow, userHistoryRank);
+        saveList.add(resultData);
+    }
+
+    /**
+     * 添加绩效导入结果新数据
+     * @param saveList 保存用
+     * @param integerStringMap 表格行数据
+     * @param importPlan 导入任务
+     * @param examineDimensionMap 考核维度基础资料
+     * @param userMap 用户
+     * @param deptMap 部门
+     * @param postMap 岗位
+     * @param zeroExcelRow 表头行
+     * @param userHistoryRank 历史排名
+     */
+    private void addResultData(ArrayList<DynamicObject> saveList,
+                               Map<Integer, String> integerStringMap,
+                               DynamicObject importPlan,
+                               Map<String, DynamicObject> examineDimensionMap,
+                               Map<String, DynamicObject> userMap,
+                               Map<String, DynamicObject> deptMap,
+                               Map<String, DynamicObject> postMap,
+                               Map<Integer, String> zeroExcelRow,
+                               HashMap<String, List<String>> userHistoryRank) {
+        DynamicObject newData = BusinessDataServiceHelper.newDynamicObject("nckd_examinproject_result");
+        //设置默认数据
+        newData.set("enable", "1");
+        newData.set("status", "A");
+        newData.set("nckd_importplan", importPlan);
+        //姓名
+        newData.set("nckd_user", userMap.get(integerStringMap.get(1)));
+        //行政组织
+        newData.set("nckd_org", deptMap.get(integerStringMap.get(3)));
+        newData.set("group", deptMap.get(integerStringMap.get(3)));
+        //岗位
+        newData.set("nckd_postbase", postMap.get(integerStringMap.get(5)));
+        //排名单位
+        newData.set("nckd_rank_org", integerStringMap.get(6));
+        //备注
+        newData.set("nckd_remark", integerStringMap.get(17));
+
+        //增加分录数据
+        DynamicObjectCollection entry = newData.getDynamicObjectCollection("nckd_entryentity");
+        addEntryData(newData, entry, integerStringMap, examineDimensionMap, zeroExcelRow, userHistoryRank);
+        saveList.add(newData);
+    }
+
+    /**
+     * 添加分录数据
+     * @param billData 绩效导入结果
+     * @param entry 分录
+     * @param integerStringMap 表格行
+     * @param examineDimensionMap 考核维度数据
+     * @param zeroExcelRow 表头行
+     * @param userHistoryRank 历史排名
+     */
+    private void addEntryData(DynamicObject billData,
+                              DynamicObjectCollection entry,
+                              Map<Integer, String> integerStringMap,
+                              Map<String, DynamicObject> examineDimensionMap,
+                              Map<Integer, String> zeroExcelRow,
+                              HashMap<String, List<String>> userHistoryRank) {
+        for (Integer i : integerStringMap.keySet()) {
+            //除1为姓名 3为组织 5为岗位 6为排名单位 17为备注 12 为部门累计平均排名外全部存入分录
+            if (i != 0 && i != 1 && i != 2 && i != 3 && i != 4 && i != 5 && i != 6 && i != 17) {
+                DynamicObject entryRow = entry.addNew();
+                entryRow.set("nckd_examine_dimension", examineDimensionMap.get(zeroExcelRow.get(i)));
+                entryRow.set("nckd_result", integerStringMap.get(i));
+            }
+            //计算部门累计平均排名
+            if (i == 12) {
+                //本次导入排名
+                String rank = integerStringMap.get(11);
+                //用户历史数据排名
+                List<String> userHistory = userHistoryRank.get(integerStringMap.get(1));
+                if (ObjectUtils.isNotEmpty(userHistory)) {
+                    //计算
+                    int sum = userHistory.stream().mapToInt(Integer::parseInt).sum();
+                    sum += Integer.parseInt(rank);
+                    int finalRank = sum / (userHistory.size() + 1);
+                    billData.set("nckd_cumulativeranking", finalRank);
+                } else {
+                    billData.set("nckd_cumulativeranking", Integer.parseInt(rank));
+                }
+            }
+        }
+    }
+
     /**
      * 校验导入模板
      * @param dataHeadList 模板表头数据
@@ -330,7 +416,13 @@ public class ImportKPISelectFormPlugin extends AbstractFormPlugin implements Upl
         return "";
     }
 
-    private String checkExcelData(List<Map<Integer, String>> dataHeadList, List<Map<Integer, String>> dataRowList) {
+    /**
+     * 校验excel必录数据
+     * @param dataHeadList 表头
+     * @param dataRowList 表格
+     * @return
+     */
+    private String checkExcelMustInputData(List<Map<Integer, String>> dataHeadList, List<Map<Integer, String>> dataRowList) {
         boolean check = false;
         //表头数据
         Map<Integer, String> integerStringMap = dataHeadList.get(0);
@@ -414,7 +506,7 @@ public class ImportKPISelectFormPlugin extends AbstractFormPlugin implements Upl
         String excelName = template.getString("name");
         DynamicObjectCollection entry = template.getDynamicObjectCollection("nckd_outimptplentry");
         //绩效导入任务
-        DynamicObject importPlan = BusinessDataServiceHelper.loadSingle(importPlanId, "nckd_importplan");
+//        DynamicObject importPlan = BusinessDataServiceHelper.loadSingle(importPlanId, "nckd_importplan");
 
 
         // 创建表头
@@ -440,23 +532,19 @@ public class ImportKPISelectFormPlugin extends AbstractFormPlugin implements Upl
         }
 
 
-        //获取模板使用组织
-        DynamicObject orgObj = template.getDynamicObject("nckd_orgfield");
-        //获取下级组织id
-        List<Long> subOrgIds = OrgUnitServiceHelper.getAllSubordinateOrgs(1L, Collections.singletonList(orgObj.getLong("id")), true);
-
-        //构建查询条件
-        QFilter qFilter = new QFilter("entryentity.dpt.id", QCP.in, subOrgIds);
-        qFilter.and("entryentity.ispartjob", QCP.equals, false);
-        qFilter.and("status", QCP.equals, "C");
-        qFilter.and("enable", QCP.equals, "1");
-        //查询组织对应人员数据
-        DynamicObjectCollection query = QueryServiceHelper.query("bos_user",
-                "id,name,number,entryentity.dpt.name as dptname,entryentity.dpt.number as dptnumber," +
-                        "entryentity.post.name as positionname,entryentity.post.number as positionnumber", qFilter.toArray());
+//        //获取模板使用组织
+//        DynamicObject orgObj = template.getDynamicObject("nckd_orgfield");
+//        //获取下级组织id
+//        List<Long> subOrgIds = OrgUnitServiceHelper.getAllSubordinateOrgs(1L, Collections.singletonList(orgObj.getLong("id")), true);
+        DynamicObject[] resultUsers = BusinessDataServiceHelper.load("nckd_examinproject_result", "nckd_rank_org,nckd_remark,nckd_user,nckd_org,nckd_postbase,nckd_entryentity.nckd_result",
+                new QFilter[]{new QFilter("nckd_importplan.id", QCP.equals, importPlanId).and("status", QCP.equals, "A")});
         //添加行数据
-        for (int i = 0; i < query.size(); i++) {
-            DynamicObject user = query.get(i);
+        for (int i = 0; i < resultUsers.length; i++) {
+            DynamicObject resultUser = resultUsers[i];
+            DynamicObject user = resultUser.getDynamicObject("nckd_user");
+            DynamicObject userOrg = resultUser.getDynamicObject("nckd_org");
+            DynamicObject userPost = resultUser.getDynamicObject("nckd_postbase");
+            DynamicObjectCollection resultEntry = resultUser.getDynamicObjectCollection("nckd_entryentity");
             //创建行数据
             Row row = sheet.createRow(i + 2);
             //设置姓名
@@ -467,25 +555,28 @@ public class ImportKPISelectFormPlugin extends AbstractFormPlugin implements Upl
             numberCell.setCellValue(user.getString("number"));
             //设置行政组织
             Cell dptNameCell = row.createCell(2);
-            dptNameCell.setCellValue(user.getString("dptname"));
+            dptNameCell.setCellValue(userOrg.getString("name"));
             //设置行政组织编码
             Cell dptNumberCell = row.createCell(3);
-            dptNumberCell.setCellValue(user.getString("dptnumber"));
+            dptNumberCell.setCellValue(userOrg.getString("number"));
             //设置岗位
             Cell positionNameCell = row.createCell(4);
-            positionNameCell.setCellValue(user.getString("positionname"));
+            positionNameCell.setCellValue(userPost.getString("name"));
             //设置岗位
             Cell positionNumberCell = row.createCell(5);
-            positionNumberCell.setCellValue(user.getString("positionnumber"));
-            //设置年份
-            Cell yearCell = row.createCell(7);
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(importPlan.getDate("nckd_year"));
-            int currentYear = calendar.get(Calendar.YEAR);
-            yearCell.setCellValue(currentYear);
-            //设置周期
-            Cell monthCell = row.createCell(8);
-            monthCell.setCellValue(importPlan.getInt("nckd_month"));
+            positionNumberCell.setCellValue(userPost.getString("number"));
+            //设置排名单元
+            Cell rank_orgCell = row.createCell(6);
+            rank_orgCell.setCellValue(resultUser.getString("nckd_rank_org"));
+            //设置备注
+            Cell remarkCell = row.createCell(17);
+            remarkCell.setCellValue(resultUser.getString("nckd_remark"));
+            //设置分录数据
+            if (ObjectUtils.isNotEmpty(resultEntry)) {
+                for (int j = 0; j < resultEntry.size(); j++) {
+                    row.createCell(j + 7).setCellValue(resultEntry.get(j).getString("nckd_result"));
+                }
+            }
         }
 
         // 保存文件

+ 1 - 2
code/opmc/nckd-jxccl-opmc/src/main/java/nckd/jxccl/opmc/pm/plugin/form/ImportPlanListPlugin.java

@@ -4,7 +4,6 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.resource.ResManager;
 import kd.bos.entity.datamodel.ListSelectedRow;
 import kd.bos.form.ShowType;
-import kd.bos.form.events.ClosedCallBackEvent;
 import kd.bos.form.events.HyperLinkClickArgs;
 import kd.bos.form.events.HyperLinkClickEvent;
 import kd.bos.list.IListView;
@@ -49,7 +48,7 @@ public class ImportPlanListPlugin extends AbstractListPlugin {
             ListShowParameter parameter = new ListShowParameter();
             parameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
             parameter.setBillFormId("nckd_examinproject_result");
-            parameter.setFormId("bos_templatetreelist");
+            parameter.setFormId("bos_templatetreelist");//epa_perfresultreelist
             String caption = MessageFormat.format("绩效导入任务 - {0}", data.getString("name"));
             parameter.setCaption(caption);
             parameter.setCustomParam("importplan", ImportPlanId);